Fix HmrServer crash when entry point uses virtual URL prefix#1709
Open
motiz88 wants to merge 4 commits into
Open
Fix HmrServer crash when entry point uses virtual URL prefix#1709motiz88 wants to merge 4 commits into
motiz88 wants to merge 4 commits into
Conversation
Contributor
|
@motiz88 has exported this pull request. If you are a Meta employee, you can view the originating Diff in D104223071. |
motiz88
added a commit
to motiz88/metro
that referenced
this pull request
May 11, 2026
…k#1709) Summary: D102004228 added support for serving bundles from `Server` with the handling `[metro-watchFolders]/<N>/...` or `[metro-project]/...` virtual URL prefixes, but did not add the same support in `HmrServer`. Here, `HmrServer` constructs its own `ProjectRouteMap` to match `Server`'s behaviour exactly. Changelog: * **[Fix]:** Prevent HMR crash on `[metro-watchFolders]` or `[metro-project]` URLs Differential Revision: D104223071
motiz88
added a commit
to motiz88/metro
that referenced
this pull request
May 11, 2026
…k#1709) Summary: D102004228 added support for serving bundles from `Server` with the handling `[metro-watchFolders]/<N>/...` or `[metro-project]/...` virtual URL prefixes, but did not add the same support in `HmrServer`. Here, `HmrServer` constructs its own `ProjectRouteMap` to match `Server`'s behaviour exactly. Changelog: * **[Fix]:** Prevent HMR crash on `[metro-watchFolders]` or `[metro-project]` URLs Differential Revision: D104223071
7f49200 to
ef5fa6a
Compare
Summary: Adds integration tests for `[metro-project]` and `[metro-watchFolders]` virtual URL prefixes: bundle requests, out-of-bounds index 404, and asset serving. Removes Server unit tests that tested private methods (`_resolveWatchFolderPrefix`, `_getEntryPointAbsolutePath`) directly. The behaviours they covered are now tested end-to-end by the new integration tests and will also be covered by `ProjectRouteMap` unit tests in the next diff. All tests pass without any production code changes. Reviewed By: huntie Differential Revision: D104259281
…acebook#1707) Summary: Extracts a `ProjectRouteMap` class from `Server`, centralising the `[metro-watchFolders]` and `[metro-project]` virtual prefix resolution previously spread across `_resolveWatchFolderPrefix`, `_sourceRequestRoutingMap`, and `_getModuleSourceUrl`. `ProjectRouteMap` provides: - `filePathOfUrlDecodedPathname`: resolves `[metro-project]/...` and `[metro-watchFolders]/N/...` prefixed pathnames to absolute file paths. Returns null for non-prefixed paths or invalid indices. - `urlPathnameOfFilePath`: maps an absolute file path to the corresponding prefixed URL pathname. Server now delegates to `ProjectRouteMap` from `_resolveRelativePath`, `_getEntryPointAbsolutePath`, `_getModuleSourceUrl`, and source file serving. No behavioural change is intended here, but this does incidentally fix a Windows bug that was affecting the original implementation. Changelog: * **[Fix]:** Fix `/[metro-project]/` and `/[metro-watchFolders]/` bundle serving on Windows. Reviewed By: huntie Differential Revision: D104223068
Summary: D102004228 added `[metro-project]`/`[metro-watchFolders]` virtual URL pathname resolution to `_getEntryPointAbsolutePath`, but this method doesn't take URL pathnames - it takes actual filesystem paths (ultimately from Metro's API / CLI). The fix removes virtual prefix resolution from `_getEntryPointAbsolutePath`, making it a plain `path.resolve(serverRootDir, entryFile)` call, consistent with `buildGraph` which already treats the entry file as a plain disk path. Changelog: * **[Fix]:** Remove erroneous `[metro-project]` and `[metro-watchFolders]` resolution from API and CLI Reviewed By: huntie Differential Revision: D104415558
Summary: D102004228 added support for serving bundles from `Server` with the handling `[metro-watchFolders]/<N>/...` or `[metro-project]/...` virtual URL prefixes, but did not add the same support in `HmrServer`. Here, `HmrServer` constructs its own `ProjectRouteMap` to match `Server`'s behaviour exactly. Changelog: * **[Fix]:** Prevent HMR crash on `[metro-watchFolders]` or `[metro-project]` URLs Reviewed By: huntie Differential Revision: D104223071
ef5fa6a to
8974b20
Compare
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:
D102004228 added support for serving bundles from
Serverwith the handling[metro-watchFolders]/<N>/...or[metro-project]/...virtual URL prefixes, but did not add the same support inHmrServer.Here,
HmrServerconstructs its ownProjectRouteMapto matchServer's behaviour exactly.Changelog:
[metro-watchFolders]or[metro-project]URLsReviewed By: huntie
Differential Revision: D104223071