fix(astro): match case-mismatched project paths in normalizeFilename#16764
Open
sulphur-swarm wants to merge 1 commit into
Open
fix(astro): match case-mismatched project paths in normalizeFilename#16764sulphur-swarm wants to merge 1 commit into
sulphur-swarm wants to merge 1 commit into
Conversation
🦋 Changeset detectedLatest commit: f79974d The changes in this PR will be included in the next version bump. This PR includes changesets to release 416 packages
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 |
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
Fixes #14013.
On case-insensitive filesystems (Windows, macOS), starting
astro devfrom a working directory whose case differs from the actual filesystem case (e.g.d:\dev\appvsD:\dev\app) causes styles to be stripped from Astro components.Root Cause
normalizeFilenameinvite-plugin-utils/index.tsusescommonAncestorPathto decide whether an absolute path lives inside the project root.commonAncestorPathperforms a case-sensitive string comparison. When the CWD (root) and the Vite-resolved module path (filename) disagree on case, the check fails and the path is incorrectly rewritten — producing a path that misses the compile-metadata cache and causes the virtual style module to be generated with no styles.Fix
A small helper
isPathInRootis introduced. It first attempts an exact (fast) match viacommonAncestorPath. If that fails, it retries with both paths lower-cased, matching the semantics of case-insensitive filesystems. The change is limited to this one fallback; it does not alter any other behaviour and has no performance impact on correct (same-case) paths.Tests
Added a unit test in
test/units/vite-plugin-utils/normalize-filename.test.tsthat directly reproduces the issue:normalizeFilenameis called with a filename whose case differs from the root URL, and the function should return the original filename unchanged (i.e. not rewrite it onto the root).This fix was contributed with AI assistance by SwarmFix (sulphur-swarm).