Skip to content

Fix HmrServer crash when entry point uses virtual URL prefix#1709

Open
motiz88 wants to merge 4 commits into
facebook:mainfrom
motiz88:export-D104223071
Open

Fix HmrServer crash when entry point uses virtual URL prefix#1709
motiz88 wants to merge 4 commits into
facebook:mainfrom
motiz88:export-D104223071

Conversation

@motiz88
Copy link
Copy Markdown
Contributor

@motiz88 motiz88 commented May 11, 2026

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

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label May 11, 2026
@meta-codesync
Copy link
Copy Markdown
Contributor

meta-codesync Bot commented May 11, 2026

@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
@meta-codesync meta-codesync Bot changed the title Fix HmrServer crash when entry point uses virtual URL prefix Fix HmrServer crash when entry point uses virtual URL prefix (#1709) May 11, 2026
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 motiz88 force-pushed the export-D104223071 branch 3 times, most recently from 7f49200 to ef5fa6a Compare May 11, 2026 14:12
motiz88 added 4 commits May 11, 2026 08:32
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
@motiz88 motiz88 force-pushed the export-D104223071 branch from ef5fa6a to 8974b20 Compare May 11, 2026 15:33
@meta-codesync meta-codesync Bot changed the title Fix HmrServer crash when entry point uses virtual URL prefix (#1709) Fix HmrServer crash when entry point uses virtual URL prefix May 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. fb-exported meta-exported

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant