Skip to content

Extract ProjectRouteMap, refactor path<-->URL mappings in Server (#1707)#1707

Open
motiz88 wants to merge 2 commits into
react:mainfrom
motiz88:export-D104223068
Open

Extract ProjectRouteMap, refactor path<-->URL mappings in Server (#1707)#1707
motiz88 wants to merge 2 commits into
react:mainfrom
motiz88:export-D104223068

Conversation

@motiz88

@motiz88 motiz88 commented May 11, 2026

Copy link
Copy Markdown
Contributor

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

@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

meta-codesync Bot commented May 11, 2026

Copy link
Copy Markdown
Contributor

@motiz88 has exported this pull request. If you are a Meta employee, you can view the originating Diff in D104223068.

motiz88 added a commit to motiz88/metro that referenced this pull request May 11, 2026
…eact#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.

Changelog: Internal

Differential Revision: D104223068
motiz88 added a commit to motiz88/metro that referenced this pull request May 11, 2026
…eact#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.

Changelog: Internal

Differential Revision: D104223068
@meta-codesync meta-codesync Bot changed the title Extract ProjectRouteMap, refactor path<-->URL mappings in Server Extract ProjectRouteMap, refactor path<-->URL mappings in Server (#1707) May 11, 2026
motiz88 added a commit to motiz88/metro that referenced this pull request May 11, 2026
…eact#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.

Changelog: Internal

Differential Revision: D104223068
@motiz88 motiz88 force-pushed the export-D104223068 branch from a35be74 to 48e2505 Compare May 11, 2026 13:23
motiz88 added a commit to motiz88/metro that referenced this pull request May 11, 2026
…eact#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.

Changelog: Internal

Differential Revision: D104223068
@motiz88 motiz88 force-pushed the export-D104223068 branch 2 times, most recently from 99ed38b to 1da51e0 Compare May 11, 2026 14:12
motiz88 added a commit to motiz88/metro that referenced this pull request May 11, 2026
…eact#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
motiz88 added 2 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
…eact#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
@motiz88 motiz88 force-pushed the export-D104223068 branch from 1da51e0 to f33ff47 Compare May 11, 2026 15:33
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