-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Fix bare images used in JSON content collections #14590
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix bare images used in JSON content collections #14590
Conversation
Fixes #14456 The image() helper in content layer collections now normalizes bare filenames (e.g., "cover.jpg") to relative paths (e.g., "./cover.jpg") to ensure consistent resolution behavior with markdown frontmatter. Without this normalization, bare filenames were passed directly to Vite's resolver, which treated them as package imports rather than relative file references, causing resolution failures. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Adds a test case to verify that bare filenames (e.g., "cover.jpg") work correctly in JSON content layer collections with the image() helper, ensuring they are resolved the same way as in markdown frontmatter. The test includes: - New rockets.json fixture with bare filename and relative path images - Test assertions for both bare filename and relative path resolution - Updated collections.json.js to include the new collection 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
🦋 Changeset detectedLatest commit: 08f88ce 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 |
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
CodSpeed Performance ReportMerging #14590 will not alter performanceComparing Summary
Footnotes |
Updates the bare filename normalization to properly skip: - Alias paths starting with ~ (e.g., ~/assets/image.jpg) - Alias paths starting with @ (e.g., @images/image.jpg) - Parent directory paths starting with ../ (e.g., ../image.jpg) This prevents breaking existing alias resolution while still normalizing true bare filenames like "cover.jpg" to "./cover.jpg". 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [astro](https://astro.build) ([source](https://github.com/withastro/astro/tree/HEAD/packages/astro)) | [`5.14.6` -> `5.14.8`](https://renovatebot.com/diffs/npm/astro/5.14.6/5.14.8) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [googleapis](https://github.com/googleapis/google-api-nodejs-client) | [`164.0.0` -> `164.1.0`](https://renovatebot.com/diffs/npm/googleapis/164.0.0/164.1.0) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>withastro/astro (astro)</summary> ### [`v5.14.8`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#5148) [Compare Source](https://github.com/withastro/astro/compare/[email protected]@5.14.8) ##### Patch Changes - [#​14590](withastro/astro#14590) [`577d051`](withastro/astro@577d051) Thanks [@​matthewp](https://github.com/matthewp)! - Fixes image path resolution in content layer collections to support bare filenames. The `image()` helper now normalizes bare filenames like `"cover.jpg"` to relative paths `"./cover.jpg"` for consistent resolution behavior between markdown frontmatter and JSON content collections. ### [`v5.14.7`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#5147) [Compare Source](https://github.com/withastro/astro/compare/[email protected]@5.14.7) ##### Patch Changes - [#​14582](withastro/astro#14582) [`7958c6b`](withastro/astro@7958c6b) Thanks [@​florian-lefebvre](https://github.com/florian-lefebvre)! - Fixes a regression that caused Actions to throw errors while loading - [#​14567](withastro/astro#14567) [`94500bb`](withastro/astro@94500bb) Thanks [@​matthewp](https://github.com/matthewp)! - Fixes the actions endpoint to return 404 for non-existent actions instead of throwing an unhandled error - [#​14566](withastro/astro#14566) [`946fe68`](withastro/astro@946fe68) Thanks [@​matthewp](https://github.com/matthewp)! - Fixes handling malformed cookies gracefully by returning the unparsed value instead of throwing When a cookie with an invalid value is present (e.g., containing invalid URI sequences), `Astro.cookies.get()` now returns the raw cookie value instead of throwing a URIError. This aligns with the behavior of the underlying `cookie` package and prevents crashes when manually-set or corrupted cookies are encountered. - [#​14142](withastro/astro#14142) [`73c5de9`](withastro/astro@73c5de9) Thanks [@​P4tt4te](https://github.com/P4tt4te)! - Updates handling of CSS for hydrated client components to prevent duplicates - [#​14576](withastro/astro#14576) [`2af62c6`](withastro/astro@2af62c6) Thanks [@​aprici7y](https://github.com/aprici7y)! - Fixes a regression that caused `Astro.site` to always be `undefined` in `getStaticPaths()` </details> <details> <summary>googleapis/google-api-nodejs-client (googleapis)</summary> ### [`v164.1.0`](https://github.com/googleapis/google-api-nodejs-client/blob/HEAD/CHANGELOG.md#16410-2025-10-20) [Compare Source](googleapis/google-api-nodejs-client@googleapis-v164.0.0...googleapis-v164.1.0) ##### Features - run the generator ([#​3820](googleapis/google-api-nodejs-client#3820)) ([fd02f58](googleapis/google-api-nodejs-client@fd02f58)) </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. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- 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:eyJjcmVhdGVkSW5WZXIiOiI0MS45OS4xMSIsInVwZGF0ZWRJblZlciI6IjQxLjk5LjExIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Reviewed-on: https://code.richardbanks.dev/richard/astro-loader-youtube/pulls/22 Co-authored-by: Renovate Bot <[email protected]> Co-committed-by: Renovate Bot <[email protected]>
|
Thanks, this is very good. In fact, so good, that it caught some issues in my data I wasn't aware of. I spent quite a bit of time trying to figure out what was causing the error. Maybe this is not the best place to leave this information, but it's the page I found, searching for the description of the problem. So maybe it's of help to someone else. What went wrong: I had both relative and absolute image paths in the JSON. Where in previous versions this worked:
The correct way of providing the path is Now that I'm writing this down, I wonder: is that error message even correct? Because:
|
|
Hey @kslstn! I think there was an issue about this regression but I cannot find it. Can you open a new issue so it doesn't get lost? Thanks |
|
Sure, thanks! |
Changes
image()helper in content collections to normalize bare filenames (e.g.,"cover.jpg") to relative paths (e.g.,"./cover.jpg")imagehelper for Content Collection not resolving images with certain relative path forjson#14456./to bare filenames before passing them to Vite's resolverTesting
test/content-layer.test.js:loads images with bare filenames in JSON- Tests bare filename resolutionloads images with relative paths in JSON- Ensures existing relative path behavior still worksrockets.jsontest fixture with both bare filename and relative path examples/_astropaths with proper image metadataDocs
N/A, bug fix