Skip to content

Fix _getEntryPointAbsolutePath conflating disk paths with URL pathnames#1708

Open
motiz88 wants to merge 3 commits into
facebook:mainfrom
motiz88:export-D104415558
Open

Fix _getEntryPointAbsolutePath conflating disk paths with URL pathnames#1708
motiz88 wants to merge 3 commits into
facebook:mainfrom
motiz88:export-D104415558

Conversation

@motiz88
Copy link
Copy Markdown
Contributor

@motiz88 motiz88 commented May 11, 2026

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

@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 D104415558.

motiz88 added a commit to motiz88/metro that referenced this pull request May 11, 2026
…es (facebook#1708)

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

Differential Revision: D104415558
@meta-codesync meta-codesync Bot changed the title Fix _getEntryPointAbsolutePath conflating disk paths with URL pathnames Fix _getEntryPointAbsolutePath conflating disk paths with URL pathnames (#1708) May 11, 2026
motiz88 added a commit to motiz88/metro that referenced this pull request May 11, 2026
…es (facebook#1708)

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

Differential Revision: D104415558
@motiz88 motiz88 force-pushed the export-D104415558 branch from 3a9289f to b512385 Compare May 11, 2026 13:22
motiz88 added a commit to motiz88/metro that referenced this pull request May 11, 2026
…es (facebook#1708)

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

Differential Revision: D104415558
@motiz88 motiz88 force-pushed the export-D104415558 branch from b512385 to de698d2 Compare May 11, 2026 13:32
motiz88 added a commit to motiz88/metro that referenced this pull request May 11, 2026
…es (facebook#1708)

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
@motiz88 motiz88 force-pushed the export-D104415558 branch from de698d2 to c418dc3 Compare May 11, 2026 14:12
motiz88 added 3 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
@motiz88 motiz88 force-pushed the export-D104415558 branch from c418dc3 to bdc26e4 Compare May 11, 2026 15:33
@meta-codesync meta-codesync Bot changed the title Fix _getEntryPointAbsolutePath conflating disk paths with URL pathnames (#1708) Fix _getEntryPointAbsolutePath conflating disk paths with URL pathnames 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