fix(content-layer): populate imagePaths in renderMarkdown metadata#15968
Merged
matthewp merged 4 commits intowithastro:mainfrom Mar 19, 2026
Merged
fix(content-layer): populate imagePaths in renderMarkdown metadata#15968matthewp merged 4 commits intowithastro:mainfrom
matthewp merged 4 commits intowithastro:mainfrom
Conversation
`renderMarkdown` from `LoaderContext` returned `localImagePaths` and `remoteImagePaths` as separate metadata fields, but the runtime's `renderEntry` function checks for a combined `imagePaths` field to decide whether to resolve `__ASTRO_IMAGE_` placeholders. This caused images in custom loaders using `renderMarkdown` to never be optimized. Combines the two arrays into `imagePaths` in `#processMarkdown`, matching the behavior of the markdown content entry type's `getRenderFunction`. Made-with: Cursor
🦋 Changeset detectedLatest commit: 318512a 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 |
Adds a test that ensures renderMarkdown returns a combined `imagePaths` array in the rendered metadata, which is required by the runtime's `renderEntry` to resolve __ASTRO_IMAGE_ placeholders. Made-with: Cursor
matthewp
reviewed
Mar 19, 2026
Made-with: Cursor
Made-with: Cursor
matthewp
approved these changes
Mar 19, 2026
Merged
dadezzz
pushed a commit
to dadezzz/ice-notes
that referenced
this pull request
Mar 24, 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.0.6` → `6.0.8`](https://renovatebot.com/diffs/npm/astro/6.0.6/6.0.8) |  |  | --- ### Release Notes <details> <summary>withastro/astro (astro)</summary> ### [`v6.0.8`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#608) [Compare Source](https://github.com/withastro/astro/compare/astro@6.0.7...astro@6.0.8) ##### Patch Changes - [#​15978](withastro/astro#15978) [`6d182fe`](withastro/astro@6d182fe) Thanks [@​seroperson](https://github.com/seroperson)! - Fixes a bug where Astro Actions didn't properly support nested object properties, causing problems when users used zod functions such as `superRefine` or `discriminatedUnion`. - [#​16011](withastro/astro#16011) [`e752170`](withastro/astro@e752170) Thanks [@​matthewp](https://github.com/matthewp)! - Fixes a dev server hang on the first request when using the Cloudflare adapter - [#​15997](withastro/astro#15997) [`1fddff7`](withastro/astro@1fddff7) Thanks [@​ematipico](https://github.com/ematipico)! - Fixes `Astro.rewrite()` failing when the target path contains duplicate slashes (e.g. `//about`). The duplicate slashes are now collapsed before URL parsing, preventing them from being interpreted as a protocol-relative URL. ### [`v6.0.7`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#607) [Compare Source](https://github.com/withastro/astro/compare/astro@6.0.6...astro@6.0.7) ##### Patch Changes - [#​15950](withastro/astro#15950) [`acce5e8`](withastro/astro@acce5e8) Thanks [@​matthewp](https://github.com/matthewp)! - Fixes a build regression in projects with multiple frontend integrations where `server:defer` server islands could fail at runtime when all pages are prerendered. - [#​15988](withastro/astro#15988) [`c93b4a0`](withastro/astro@c93b4a0) Thanks [@​ossaidqadri](https://github.com/ossaidqadri)! - Fix styles from dynamically imported components not being injected on first dev server load. - [#​15968](withastro/astro#15968) [`3e7a9d5`](withastro/astro@3e7a9d5) Thanks [@​chasemccoy](https://github.com/chasemccoy)! - Fixes `renderMarkdown` in custom content loaders not resolving images in markdown content. Images referenced in markdown processed by `renderMarkdown` are now correctly optimized, matching the behavior of the built-in `glob()` loader. - [#​15990](withastro/astro#15990) [`1e6017f`](withastro/astro@1e6017f) Thanks [@​ematipico](https://github.com/ematipico)! - Fixes an issue where `Astro.currentLocale` would always be the default locale instead of the actual one when using a dynamic route like `[locale].astro` or `[locale]/index.astro`. It now resolves to the correct locale from the URL. - [#​15990](withastro/astro#15990) [`1e6017f`](withastro/astro@1e6017f) Thanks [@​ematipico](https://github.com/ematipico)! - Fixes an issue where visiting an invalid locale URL (e.g. `/asdf/`) would show the content of a dynamic `[locale]` page with a 404 status code, instead of showing your custom 404 page. Now, the correct 404 page is rendered when the locale in the URL doesn't match any configured locale. - [#​15960](withastro/astro#15960) [`1d84020`](withastro/astro@1d84020) Thanks [@​matthewp](https://github.com/matthewp)! - Fixes Cloudflare dev server islands with `prerenderEnvironment: 'node'` by sharing the serialized manifest encryption key across dev environments and routing server island requests through the SSR runtime. - [#​15735](withastro/astro#15735) [`9685e2d`](withastro/astro@9685e2d) Thanks [@​fa-sharp](https://github.com/fa-sharp)! - Fixes an EventEmitter memory leak when serving static pages from Node.js middleware. When using the middleware handler, requests that were being passed on to Express / Fastify (e.g. static files / pre-rendered pages / etc.) weren't cleaning up socket listeners before calling `next()`, causing a memory leak warning. This fix makes sure to run the cleanup before calling `next()`. </details> --- ### Configuration 📅 **Schedule**: 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 [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My43Ni4yIiwidXBkYXRlZEluVmVyIjoiNDMuODYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: Renovate Bot <renovate@zarantonello.dev> Co-committed-by: Renovate Bot <renovate@zarantonello.dev>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
renderMarkdownfromLoaderContextreturns image paths asmetadata.localImagePathsandmetadata.remoteImagePaths(separate arrays), but the runtime'srenderEntryfunction checks for a combinedmetadata.imagePathsto decide whether to resolve__ASTRO_IMAGE_placeholders into optimized<img>tags.Because
imagePathsis never set byrenderMarkdown, images in custom loaders that use it are never resolved — the__ASTRO_IMAGE_attributes remain in the final HTML.The built-in
glob()loader avoids this because it usesentryType.getRenderFunction(config), which explicitly combines the two arrays:This PR applies the same combination in
#processMarkdown(which backs therenderMarkdowncontext helper), so custom loaders get the same image optimization behavior as the built-inglob()loader.Changes
packages/astro/src/content/content-layer.ts: In#processMarkdown, spreadmetadataand add a combinedimagePathsfield fromlocalImagePaths+remoteImagePaths.Notes
Custom loaders also need to pass
assetImportstostore.set()for the images to be registered with Vite's asset pipeline. This is required alongside theimagePathsmetadata fix. It may be worth documenting this in the Content Loader API reference, or havingstore.set()automatically extractimagePathsfromrendered.metadatawhenassetImportsisn't explicitly provided.Test plan
renderMarkdownwith markdown containing relative image paths__ASTRO_IMAGE_placeholders in output)glob()loader behavior is unchangedMade with Cursor