mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
05fd9a19e9
Summary: ## Context Currently, when `nativeSourceCodeFetching == false`, `inspector-proxy` attempts to pre-fetch source maps, given the URL from a `Debugger.scriptParsed` event, and embeds them into `Debugger.scriptParsed`'s `sourceMapURL` using a data URI. This was originally to support frontends that did not perform HTTP requests or were blocked (eg by CORS), but we're retaining it for the moment because it's more performant than lazy loading the source map. Similarly, we perform middleware->server fetches to respond to `Debugger.getScriptSource` events. To make these fetches for URLs that target `10.0.2.2` (ie, addressable from within an Android emulator) (etc), we rewrite `10.0.2.2`->`localhost` and perform a `fetch` from the Node process running dev-middleware. ## The problem Consider a setup where: - Metro is running on a remote server, listening on `8081`. - Dev machine tunnels `localhost:8082` -> remote `8081`. - An app is running on an Android emulator on the dev machine, with bundle URL configured to `10.0.2.2:8082`. In this case, we'll rewrite `10.0.2.2:8082` to `localhost:8082`, which *is* reachable and correct from the dev machine, but *not* from the machine where Metro is running, so the `fetch` of a source map from the inspector proxy will fail. ## Motivation This might seem like a niche case, but it's part of fixing a series of unsafe assumptions that currently prevent us from running DevTools on an arbitrary port. ## This fix Preserve the current behaviour (simple `10.0.2.2`<=>`localhost`) for URLs sent to the frontend, but construct a separate, server-relative URL, using the configured `serverBaseUrl`, for `fetch` calls within dev-middleware. Changelog: [General][Fixed] RN DevTools: Fix fetching sources and source maps when the dev-server is remote and not tunnelled via the same port+protocol. Reviewed By: huntie Differential Revision: D65993910