Skip to content

fix(assets): pass through images Sharp cannot decode instead of crashing#16451

Merged
matthewp merged 10 commits into
withastro:mainfrom
maximslo:fix/animated-avif-passthrough
May 1, 2026
Merged

fix(assets): pass through images Sharp cannot decode instead of crashing#16451
matthewp merged 10 commits into
withastro:mainfrom
maximslo:fix/animated-avif-passthrough

Conversation

@maximslo
Copy link
Copy Markdown
Contributor

@maximslo maximslo commented Apr 23, 2026

This is a fix for #16267.

Changes

  • Wrapped Sharp's metadata() call in a try/catch. When Sharp cannot decode an image (e.g. animated AVIF sequences), the original buffer is returned unmodified instead of crashing the build. The file is still hashed for cache-busting; only transformation is skipped.
    • Those bytes then get written to _astro/filename.avif in the build output. The <img> tag in the HTML still points to that file; the browser receives the original animated AVIF directly.
    • The only difference from a normal pass-through (like public/) is that Astro still hashes the filename for cache-busting. The content is identical to the source file.

Testing

Run the new test directly:
pnpm run test:match "animated avif"

OR manually:

  1. Add your own animated AVIF to packages/astro/test/fixtures/core-image-ssg/src/assets/
  2. Reference it via <Image> in a page.
  3. Run pnpm build

The build should complete and the file should appear in _astro/ unmodified. Previously this would crash with CouldNotTransformImage.

Note: future support for AVIF would require...

The groundwork is already partly there. pages: -1 is the Sharp flag that loads all frames of an animated image (already set) BUT needed:

  • Sharp/libvips version support. The crash itself (metadata() throwing) means the current Sharp (0.34.5) can't decode animated AVIF metadata. This is a libvips limitation, newer builds of libvips with libaom support can handle it. Depends on Sharp upstream.

  • Format detection. AVIF uses the HEIF container, so Sharp reports animated AVIF as format: 'heif', not avif. The animated GIF → WebP path in sharp.ts would need an equivalent:

if (transform.format === 'webp' && (format === 'gif' || format === 'heif')) {
    result.webp({ ...encoderOptions, loop: 0 });
}
  • Animated AVIF output. result.avif() with pages: -1 already loaded should output animated AVIF, but only once Sharp can decode it in the first place.

So this pass-through fix is fine short-term. Full support is blocked on Sharp's libvips gaining animated AVIF decode support.

Docs

/cc @withastro/maintainers-docs for feedback!

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 23, 2026

🦋 Changeset detected

Latest commit: fb63cea

The changes in this PR will be included in the next version bump.

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions github-actions Bot added the pkg: astro Related to the core `astro` package (scope) label Apr 23, 2026
@maximslo maximslo marked this pull request as ready for review April 23, 2026 03:55
@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented Apr 23, 2026

Merging this PR will improve performance by 11.84%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

⚡ 1 improved benchmark
✅ 17 untouched benchmarks

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Simulation Build: hybrid site (static + server) 8.9 s 8 s +11.84%

Comparing maximslo:fix/animated-avif-passthrough (fb63cea) with main (86fd80d)1

Open in CodSpeed

Footnotes

  1. No successful run was found on main (4ff42fd) during the generation of this report, so 86fd80d was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

Copy link
Copy Markdown
Contributor

@fkatsuhiro fkatsuhiro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@maximslo
Thank you for your PR!
It seems faild some tests. I think it related new imolementation of this PR.
Will you check this? And I recomend you to create test for this issue. Thank you!

@maximslo
Copy link
Copy Markdown
Contributor Author

@fkatsuhiro Added! You can run it with pnpm run test:match "animated avif"

I believe all earlier failing tests were MiniflareCoreError [ERR_RUNTIME_FAILURE], the Cloudflare Workers runtime (infrastructure/environment issue with the CI runner, not anything touched by my change)

@maximslo maximslo requested a review from fkatsuhiro April 24, 2026 03:29
Copy link
Copy Markdown
Contributor

@fkatsuhiro fkatsuhiro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@maximslo san
Thank you for your updating!
I think it looks good to me. But I forgot to tell you to create changeset file. Sorry.

You can create changeset file via command pnpm changeset. And select your updated package and write summery of your change. Could you update your PR?
Reference: https://contribute.docs.astro.build/docs-for-code-changes/changesets/#tips-and-examples

Sorry for bothering.

@maximslo maximslo requested a review from fkatsuhiro April 24, 2026 18:32
Copy link
Copy Markdown
Contributor

@fkatsuhiro fkatsuhiro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your updating!
Looks good to me! Thanks!

@matthewp
Copy link
Copy Markdown
Contributor

What does have a passthrough achieve? if you have animated avif that isn't supported, you just get an unoptimized version, right? But in this case, can't you just not use the Image component for this?

Not 100% against this, just my initial thought is that it might be better to through, because by using Image you are asking for optimizations, and not getting them might be more confusing than throughing (in which case you can just avoid using the Image component).

@matthewp matthewp assigned matthewp and unassigned matthewp Apr 27, 2026
@maximslo
Copy link
Copy Markdown
Contributor Author

@matthewp Yes, users could just use <img> instead. But consistency and future-proofing are the benefits. Plus passthrough is how we already handle other unsupported formats (SVG).

Without this fix: The build crashes (exit code 1) so they have no choice. Must either delete the image, convert it, or move it to public/.

To address your concern with the fix, I'd suggest logging a warning for both SVG and AVIF:

catch {
  console.warn(
    `⚠️  Astro could not optimize image "${transform.src}". ` +
    `Sharp doesn't support this format. The image will be used unoptimized. ` +
    `Consider converting to WebP or placing in the public/ folder.`
  );
  return { data: inputBuffer, format: transform.format };
}
// Return SVGs as-is
if (transform.format === 'svg') {
  console.debug(
    `⚠️ SVG image "${transform.src}" will not be optimized. ` +
    `Sharp has limited SVG support.`
  );
  return { data: inputBuffer, format: 'svg' };
}

With this fix + warning: The build succeeds and users see a clear warning message that tells them:

  • The image wasn't optimized
  • Suggests solutions: convert to WebP, move to public/, or use a regular <img> tag

Some might prefer to convert the AVIF and use <Image> for consistency; others might prefer a regular <img> tag. Either way, they can now deploy.

I think warning + passing through is better UX than crashing, because it unblocks the user, and a warning would clear up any confusion/inform them of the issue.

@matthewp
Copy link
Copy Markdown
Contributor

Pinging @Princesseuh for her opinion on this.

@Princesseuh
Copy link
Copy Markdown
Member

I think with a warning it's okay. Ultimately we wouldn't hide the problem like this, but since there's no real solution on the user side (because in SSR, remote images, uploads, etc you might not be able to know what you're processing), a warning and not crashing seems like a better UX, I agree.

@maximslo
Copy link
Copy Markdown
Contributor Author

@Princesseuh Added the AVIF warning! Thank you both.

@matthewp matthewp merged commit 778865f into withastro:main May 1, 2026
27 checks passed
@astrobot-houston astrobot-houston mentioned this pull request May 1, 2026
matthewp added a commit that referenced this pull request May 5, 2026
* Fix merge-fix workflow to handle conflict markers before install (#16539)

* Handle merge conflicts in merge-fix workflow by stripping JSON/YAML markers and verifying via AI (#16541)

* [ci] format

* fix(render): avoid script dedup state consumption in inert template c… (#16527)

* fix(render): avoid script dedup state consumption in inert template contexts #16525

* fix(render): normalize inert script dedup test outputs to strings

* fix: add missing hydration metadata fields in inert-script-dedup tests

* test(app): add component-level inert template script dedup coverage

* test(app): stabilize inert script dedup regression coverage

* fix(astro): move inert template dedup logic into hydration/directive script guards

* [ci] format

* fix: emit fallback rewrite pages (#16515)

* fix(i18n): emit fallback rewrite pages

* chore: add changeset

* [ci] format

* refactor(astro): replace tsconfck with get-tsconfig (#16433)

* fix(language-server): remove circular dependency on svelte/vue integrations (#16532)

* [ci] format

* fix(upgrade): use bundled JS output (#16547)

* Update dependency postcss to v8.5.10 [SECURITY] (#16489)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency fastify to v5.8.5 [SECURITY] (#16346)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency fast-xml-parser to v5.7.0 [SECURITY] (#16452)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(cloudflare): preserve existing KV namespace bindings when injecting SESSION (#16555)

* fix(slots): unwrap conditional slot callbacks (#16509)

Co-authored-by: cyphercodes <cyphercodes@users.noreply.github.com>

* fix: preserve CSS propagation for partial pages imported as components (#16415)

* fix(astro): preserve CSS from imported partial pages

Treat top-level pages as CSS boundaries only when they are referenced exclusively by the virtual page module, so partial pages imported as components continue propagating transitive styles in production builds.

Made-with: Cursor

* test(astro): fix partial CSS fixture component import path

Correct the regression fixture path so the partial page can resolve ResultsTable during build on CI.

Made-with: Cursor

* test(astro): make partial css assertion robust to minification

Assert that scoped ResultsTable selectors are present in extracted styles instead of matching a specific color token that can be minified differently across environments.

Made-with: Cursor

* chore: rerun CI after unrelated e2e flake

Trigger a fresh workflow run for PR #16415 after unrelated flaky E2E failures in actions-blog/cloudflare/hmr tests.

Made-with: Cursor

* fix: propagate head metadata across ssr and prerender envs in dev (#16292)

* fix: propagate head metadata across ssr and prerender envs in dev

Signed-off-by: Patrick Linnane <patrick@linnane.io>

* test(astro): cover head propagation through prerender env

Signed-off-by: Patrick Linnane <patrick@linnane.io>

---------

Signed-off-by: Patrick Linnane <patrick@linnane.io>

* fix(assets): pass through images Sharp cannot decode instead of crashing (#16451)

* fix(assets): pass through images Sharp cannot decode instead of crashing

* test(assets): add test for animated AVIF pass-through

* test(assets): add test for animated AVIF pass-through

* fix(test): remove incorrect avif extension assertion

* chore: add changeset for animated AVIF fix

* feat(assets): add warning when Sharp cannot optimize unsupported image formats

* chore: lint and whitespace

* [ci] format

* Update dependency @fastify/middie to v9.3.2 [SECURITY] (#16369)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* perf(astro): skip session storage lookup if no cookie is set (#16540)

* Fix defineLiveCollection interface loader typing (#16018)

* Fix defineLiveCollection interface loader typing

* Retrigger CI

* Retrigger CI

* [ci] format

* Fix style compilation failure when importing components via tsconfig path aliases (#15994)

* fix: resolve relative virtual module IDs in normalizeFilename for path alias styles

When a component with a <style> tag is imported via a TypeScript path
alias, certain environments (Windows + newer Node.js) can produce a
relative virtual module ID (e.g. ./src/components/Foo.astro?astro&type=style).
The load handler passed this through normalizeFilename to look up the
compile metadata cache, but the function had no branch for ./-prefixed
relative paths, so it returned the path unchanged instead of resolving
it to an absolute path. This caused a cache miss and a build error.

Adds a branch to resolve relative paths against root, matching the
behavior used for /@fs and /path variants.

Fixes #15963

* test: assert against emitted CSS file for path alias style regression test

* fix(cloudflare): fix static assets and prerendered pages 404ing when `base` is configured. (#16277)

* fix(cloudflare): static assets being in the wrong place

* test(cloudflare): add tests

* add changeset

---------

Co-authored-by: Matthew Phillips <matthew@matthewphillips.info>

* [ci] format

* fix(test): update test-utils import from .js to .ts in .test.js files (#16560)

* fix(frontmatter): preserve strings and comments when replacing top-le… (#16552)

* fix(frontmatter): preserve strings and comments when replacing top-level return (#16551)

* chore: add changeset for cloudflare KV namespace fix

* fix(cloudflare): re-apply KV namespace merge fix after source revert

---------

Co-authored-by: Matthew Phillips <matthewphillips@cloudflare.com>

* fix: processing procedure for dynamic paths (#16144)

* feat: test maching dynamic routes contain .html in their params

* fix: processing procedure for dynamic paths

* feat: changeset file for processing procedure for dynamic pahts

* refactor(routing): move .html stripping logic from getParams to getProps

* fix: UT of getParams function by fixing path mismatch error returning html file

* fix: logic of removing .html extention

* Apply suggestion from @Fryuni

Co-authored-by: Luiz Ferraz <luiz@lferraz.com>

* Apply suggestion from @Fryuni

Co-authored-by: Luiz Ferraz <luiz@lferraz.com>

* Apply suggestion from @Fryuni

Co-authored-by: Luiz Ferraz <luiz@lferraz.com>

---------

Co-authored-by: Matthew Phillips <matthew@matthewphillips.info>
Co-authored-by: Luiz Ferraz <luiz@lferraz.com>
Co-authored-by: Matthew Phillips <matthewphillips@cloudflare.com>

* fix(css): preserve scope on nested & with lightningcss transformer (#16548)

* fix(css): preserve scope on nested & with lightningcss transformer

with `vite.css.transformer: 'lightningcss'`, scoped styles using
`:where(& > ...)` (the shape tailwind v4's `space-x-*`, `space-y-*`,
and `divide-*` expand to) put the scope attribute on the matched
child instead of the parent. lightningcss flattened the nesting
before `@astrojs/compiler` ran scope injection, so by then
`:where(...)` was the leading compound and the injector prepended
`[data-astro-cid-X]` as a new leading compound — constraining the
wrong element.

ask lightningcss to skip nesting lowering during the per-component
`preprocessCSS` call (via `Features.Nesting` on a shallow-cloned
config — non-mutating, safe under parallel compiles). vite's final
pipeline still lowers nesting for the bundle. adds a regression test
covering the reporter's exact shape.

Fixes #16524

* docs(changeset): rewrite per astro guidelines

---------

Co-authored-by: Matthew Phillips <matthewphillips@cloudflare.com>

* Fixes @_@ not being stripped from CSS file names (#16264)

Co-authored-by: Matthew Phillips <matthew@matthewphillips.info>
Co-authored-by: Matthew Phillips <matthewphillips@cloudflare.com>

* fix : astro image position prop bug (#16236)

* feat: test of astro image position prop bug

* fix: logic of getItem function

* feat: changeset file

* fix: create data-astro-image-pos attribute all time for path csp unit test

* feat: another test of getImage function

* fix: change set explanetion more clealy for users

* Add: yaml file

* chore: clean up changeset

---------

Co-authored-by: Matthew Phillips <matthew@matthewphillips.info>
Co-authored-by: Matthew Phillips <matthewphillips@cloudflare.com>

* [ci] format

* fix(build): exclude prerendered route styles from SSR manifest (#16517)

Inline CSS for prerendered routes is dead weight in the SSR manifest:
the prerendered HTML on disk already contains the <style> tags, and
the SSR worker never renders these routes. Strip styles for prerendered
routes from the SSR manifest while leaving the prerender manifest (and
prerendered HTML) unchanged. Cuts SSR entry-chunk size on hybrid builds
with build.inlineStylesheets: "always", reducing cold-start parse cost
on Cloudflare Workers and similar platforms.

* fix(prefetch): trigger tap strategy when clicking nested child elements (#16566)

* fix(prefetch): trigger tap strategy when clicking nested child elements

* fix(prefetch): trigger tap and hover strategies when clicking nested child elements

* fix(astro): persist session delete without prior get/set (#16565)

* fix(astro): persist session delete without prior get/set

* est(e2e): sync collectLoads to avoid race with assertions

* fix(astro): persist session delete without prior get/set

* fix: route mismatch using trail slash never (#16516)

* feat: test for route match fails when trailingSlash never

* fix: root route matching with trailingSlash: 'never' and base path

* feat: changeset file

* fix: root route matching with trailingSlash 'never' and base path in dev server and rewrites

The `normalizeRewritePathname` in rewrite.ts was returning '' (empty string)
for root-path rewrites with a non-root base, and app.ts was converting the
stripped pathname '/' to '' before route matching. Both relied on the old
'^$' pattern for the index route. After the pattern.ts fix made the root
pattern '^/$', these normalizations broke matching.

Remove the '/' -> '' conversions so route.pattern.test('/') correctly matches
the fixed '^/$' pattern in both direct requests and Astro.rewrite() calls

* fix: add regression test for root path normalization with base

---------

* [ci] format

* [ci] release (#16545)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix: resolve merge conflicts from main into next

* fix: resolve merge issues from main into next

- Add missing dependencies (get-tsconfig, jsonc-parser) and remove tsconfck
  (replaced on main by PR #16433 but deps were lost during merge)
- Remove unused replaceTopLevelReturns export from vite-plugin-astro/utils.ts
  (function from main's PR #16552 not used by next's Rust compiler, fixes knip lint)
- Update lightningcss-scoped-nesting test expectations for Rust compiler
  (next branch handles CSS scoping differently, test from PR #16548)
- Format compile.ts (remove extra blank line)

* chore: trigger CI

* fix: add head-inject directive to propagated assets module for CSS injection

* chore: update main-to-next merge

* chore: retrigger CI

* chore: retrigger CI

---------

Signed-off-by: Patrick Linnane <patrick@linnane.io>
Co-authored-by: Matthew Phillips <matthewphillips@cloudflare.com>
Co-authored-by: Matthew Phillips <matthewp@users.noreply.github.com>
Co-authored-by: Chan <101856681+enjoyandlove@users.noreply.github.com>
Co-authored-by: knj <kenji.tomita1996@gmail.com>
Co-authored-by: knj <ematipico@users.noreply.github.com>
Co-authored-by: ocavue <ocavue@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: web-dev0521 <jasonpette1783@gmail.com>
Co-authored-by: Rayan Salhab <r.salhab@aiyexpertsolutions.com>
Co-authored-by: cyphercodes <cyphercodes@users.noreply.github.com>
Co-authored-by: 0x K. <66915025+0xbejaxer@users.noreply.github.com>
Co-authored-by: Patrick Linnane <patrick@linnane.io>
Co-authored-by: Maxim Slobodchikov <93232189+maximslo@users.noreply.github.com>
Co-authored-by: Matt Kane <m@mk.gg>
Co-authored-by: Felmon <felmonon@gmail.com>
Co-authored-by: Ossaid <imossaidquadri@gmail.com>
Co-authored-by: Calvin Liang <me@calvin.sh>
Co-authored-by: Matthew Phillips <matthew@matthewphillips.info>
Co-authored-by: fkatsuhiro <113022468+fkatsuhiro@users.noreply.github.com>
Co-authored-by: Luiz Ferraz <luiz@lferraz.com>
Co-authored-by: Utpal Sen <utpalsen902@gmail.com>
Co-authored-by: atsbob <98831687+atsbob@users.noreply.github.com>
Co-authored-by: Adam Chalemian <adam@chal.net>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
dadezzz pushed a commit to dadezzz/university_notes that referenced this pull request May 8, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [astro](https://astro.build) ([source](https://github.com/withastro/astro/tree/HEAD/packages/astro)) | [`6.2.1` → `6.2.2`](https://renovatebot.com/diffs/npm/astro/6.2.1/6.2.2) | ![age](https://developer.mend.io/api/mc/badges/age/npm/astro/6.2.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/astro/6.2.1/6.2.2?slim=true) |

---

### Release Notes

<details>
<summary>withastro/astro (astro)</summary>

### [`v6.2.2`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#622)

[Compare Source](https://github.com/withastro/astro/compare/astro@6.2.1...astro@6.2.2)

##### Patch Changes

- [#&#8203;16292](withastro/astro#16292) [`00f48ee`](withastro/astro@00f48ee) Thanks [@&#8203;p-linnane](https://github.com/p-linnane)! - Fixes head metadata propagation in dev for adapters that load modules in the `prerender` Vite environment, such as `@astrojs/cloudflare`. The `astro:head-metadata` plugin previously only tracked the `ssr` environment, so `maybeRenderHead()` could fire inside an unrelated component's `<template>` element, trapping subsequent hoisted `<style>` blocks.

- [#&#8203;16451](withastro/astro#16451) [`778865f`](withastro/astro@778865f) Thanks [@&#8203;maximslo](https://github.com/maximslo)! - Fixes build crash when processing animated AVIF images. Sharp now gracefully passes through unsupported image formats instead of crashing during the build.

- [#&#8203;16548](withastro/astro#16548) [`7214d3e`](withastro/astro@7214d3e) Thanks [@&#8203;senutpal](https://github.com/senutpal)! - Fixes scoped styles applying to the wrong element when `vite.css.transformer` is set to `'lightningcss'` and a selector uses a nested `&` inside `:where(...)`, such as Tailwind v4's `space-x-*`, `space-y-*`, and `divide-*` utilities.

- [#&#8203;16566](withastro/astro#16566) [`9ac96b4`](withastro/astro@9ac96b4) Thanks [@&#8203;web-dev0521](https://github.com/web-dev0521)! - Fixes `data-astro-prefetch="tap"` not triggering when clicking nested elements (e.g. `<span>`, `<img>`, `<svg>`) inside an anchor tag.

- [#&#8203;15994](withastro/astro#15994) [`1e70d18`](withastro/astro@1e70d18) Thanks [@&#8203;ossaidqadri](https://github.com/ossaidqadri)! - Fix `<style>` compilation failure when importing Astro components via tsconfig path aliases

- [#&#8203;16144](withastro/astro#16144) [`1cd6650`](withastro/astro@1cd6650) Thanks [@&#8203;fkatsuhiro](https://github.com/fkatsuhiro)! - Fixed a regression where `.html` was unexpectedly stripped from dynamic route parameters on non-page routes (`.ts` endpoints and redirects). This caused endpoints like `/some/[...id].ts` returning `id: 'file.html'` on `getStaticPaths` to not serve that file because the generated route (`/some/file.html`) would get matched as `id: file` that is not part of the list returned by `getStaticPaths`.

- [#&#8203;16415](withastro/astro#16415) [`559c0fd`](withastro/astro@559c0fd) Thanks [@&#8203;0xbejaxer](https://github.com/0xbejaxer)! - Fix CSS traversal boundaries so pages with `export const partial = true` still contribute styles when imported as components by other pages.

- [#&#8203;16516](withastro/astro#16516) [`17f1867`](withastro/astro@17f1867) Thanks [@&#8203;fkatsuhiro](https://github.com/fkatsuhiro)! - Fixes an issue where the index route would return a 404 error when using a custom `base` path combined with `trailingSlash: 'never'`. This ensures that the home page and internal rewrites are correctly matched under these configurations.

- [#&#8203;16515](withastro/astro#16515) [`280ec88`](withastro/astro@280ec88) Thanks [@&#8203;jp-knj](https://github.com/jp-knj)! - Fixes an issue where `i18n.fallback` pages with `fallbackType: 'rewrite'` were emitted with empty bodies during `astro build`.

- [#&#8203;16565](withastro/astro#16565) [`7959798`](withastro/astro@7959798) Thanks [@&#8203;enjoyandlove](https://github.com/enjoyandlove)! - Fixes session persistence when `session.delete()` is the first mutation in a request (no prior `get`, `set`, `has`, or `keys`). The session was marked dirty in memory, but persistence skipped the save because `#data` stayed `undefined`, so the backing store could still return the deleted key on the next request.

- [#&#8203;16527](withastro/astro#16527) [`86fd80d`](withastro/astro@86fd80d) Thanks [@&#8203;enjoyandlove](https://github.com/enjoyandlove)! - Prevents script deduplication state from being consumed while rendering inert `<template>` contexts.

- [#&#8203;16540](withastro/astro#16540) [`e59c637`](withastro/astro@e59c637) Thanks [@&#8203;ascorbic](https://github.com/ascorbic)! - Skips session storage reads when no session cookie is present. Previously, calling `session.get()` on a request without a session cookie would initialize the storage driver and make a read that was guaranteed to miss. On network-backed drivers this added latency and resource usage to every anonymous request.

- [#&#8203;16517](withastro/astro#16517) [`6ab0b3c`](withastro/astro@6ab0b3c) Thanks [@&#8203;adamchal](https://github.com/adamchal)! - Removes inline CSS for prerendered routes from the SSR manifest. The static HTML on disk already inlines those styles, and the SSR worker never renders prerendered routes, so the data was dead weight. Builds with many prerendered routes and `build.inlineStylesheets: "always"` (or `"auto"` with small stylesheets) will see a smaller SSR entry chunk, which reduces cold-start parse time on platforms like Cloudflare Workers.

- [#&#8203;16509](withastro/astro#16509) [`d3d3557`](withastro/astro@d3d3557) Thanks [@&#8203;cyphercodes](https://github.com/cyphercodes)! - Fix conditional named slot callbacks receiving arguments from `Astro.slots.render()`.

- [#&#8203;16236](withastro/astro#16236) [`c6b068e`](withastro/astro@c6b068e) Thanks [@&#8203;fkatsuhiro](https://github.com/fkatsuhiro)! - Fixes the `position` prop on `<Image />` and `<Picture />` components to correctly apply `object-position` styles

- [#&#8203;16018](withastro/astro#16018) [`d14f47c`](withastro/astro@d14f47c) Thanks [@&#8203;felmonon](https://github.com/felmonon)! - Fix `defineLiveCollection()` so `LiveLoader` data types declared as interfaces are accepted.

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNjAuNyIsInVwZGF0ZWRJblZlciI6IjQzLjE2MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pkg: astro Related to the core `astro` package (scope)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants