Allow passing through optional custom transform options to Metro (#45634)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45634

This allows the Android runtime to pass additional options to Metro. Each app can
decide what to send based on the needs. The use case is to send
transform.xyz=somevalue to Metro.

Changelog: [Internal]

Reviewed By: javache

Differential Revision: D60155757

fbshipit-source-id: 006d5ff2e3f14634fb39d44b390f30da479b1faa
This commit is contained in:
Kevin Gozali
2024-07-24 14:48:54 -07:00
committed by Facebook GitHub Bot
parent 8effe781d3
commit a634b57650
6 changed files with 38 additions and 2 deletions
@@ -2141,6 +2141,7 @@ public abstract class com/facebook/react/devsupport/DevSupportManagerBase : com/
public fun registerErrorCustomizer (Lcom/facebook/react/devsupport/interfaces/ErrorCustomizer;)V
public fun reloadJSFromServer (Ljava/lang/String;Lcom/facebook/react/devsupport/interfaces/BundleLoadCallback;)V
public fun reloadSettings ()V
public fun setAdditionalOptionForPackager (Ljava/lang/String;Ljava/lang/String;)V
public fun setDevSupportEnabled (Z)V
public fun setFpsDebugEnabled (Z)V
public fun setHotModuleReplacementEnabled (Z)V
@@ -2305,6 +2306,7 @@ public class com/facebook/react/devsupport/ReleaseDevSupportManager : com/facebo
public fun registerErrorCustomizer (Lcom/facebook/react/devsupport/interfaces/ErrorCustomizer;)V
public fun reloadJSFromServer (Ljava/lang/String;Lcom/facebook/react/devsupport/interfaces/BundleLoadCallback;)V
public fun reloadSettings ()V
public fun setAdditionalOptionForPackager (Ljava/lang/String;Ljava/lang/String;)V
public fun setDevSupportEnabled (Z)V
public fun setFpsDebugEnabled (Z)V
public fun setHotModuleReplacementEnabled (Z)V
@@ -2424,6 +2426,7 @@ public abstract interface class com/facebook/react/devsupport/interfaces/DevSupp
public abstract fun registerErrorCustomizer (Lcom/facebook/react/devsupport/interfaces/ErrorCustomizer;)V
public abstract fun reloadJSFromServer (Ljava/lang/String;Lcom/facebook/react/devsupport/interfaces/BundleLoadCallback;)V
public abstract fun reloadSettings ()V
public abstract fun setAdditionalOptionForPackager (Ljava/lang/String;Ljava/lang/String;)V
public abstract fun setDevSupportEnabled (Z)V
public abstract fun setFpsDebugEnabled (Z)V
public abstract fun setHotModuleReplacementEnabled (Z)V
@@ -3666,8 +3669,10 @@ public abstract class com/facebook/react/packagerconnection/NotificationOnlyHand
public class com/facebook/react/packagerconnection/PackagerConnectionSettings {
public fun <init> (Landroid/content/Context;)V
public fun getAdditionalOptionsForPackager ()Ljava/util/Map;
public fun getDebugServerHost ()Ljava/lang/String;
public fun getPackageName ()Ljava/lang/String;
public fun setAdditionalOptionForPackager (Ljava/lang/String;Ljava/lang/String;)V
public fun setDebugServerHost (Ljava/lang/String;)V
}
@@ -385,6 +385,14 @@ public class DevServerHelper {
private String createBundleURL(
String mainModuleID, BundleType type, String host, boolean modulesOnly, boolean runModule) {
boolean dev = getDevMode();
StringBuilder additionalOptionsBuilder = new StringBuilder();
for (Map.Entry<String, String> entry :
mPackagerConnectionSettings.getAdditionalOptionsForPackager().entrySet()) {
if (entry.getValue().length() == 0) {
continue;
}
additionalOptionsBuilder.append("&" + entry.getKey() + "=" + Uri.encode(entry.getValue()));
}
return String.format(
Locale.US,
"http://%s/%s.%s?platform=android&dev=%s&lazy=%s&minify=%s&app=%s&modulesOnly=%s&runModule=%s",
@@ -397,7 +405,8 @@ public class DevServerHelper {
mPackageName,
modulesOnly ? "true" : "false",
runModule ? "true" : "false")
+ (InspectorFlags.getFuseboxEnabled() ? "&excludeSource=true&sourcePaths=url-server" : "");
+ (InspectorFlags.getFuseboxEnabled() ? "&excludeSource=true&sourcePaths=url-server" : "")
+ additionalOptionsBuilder.toString();
}
private String createBundleURL(String mainModuleID, BundleType type) {
@@ -1183,4 +1183,9 @@ public abstract class DevSupportManagerBase implements DevSupportManager {
public void hidePausedInDebuggerOverlay() {
mPausedInDebuggerOverlayManager.hidePausedInDebuggerOverlay();
}
@Override
public void setAdditionalOptionForPackager(String name, String value) {
mDevSettings.getPackagerConnectionSettings().setAdditionalOptionForPackager(name, value);
}
}
@@ -211,4 +211,7 @@ public class ReleaseDevSupportManager implements DevSupportManager {
@Override
public void hidePausedInDebuggerOverlay() {}
@Override
public void setAdditionalOptionForPackager(String name, String value) {}
}
@@ -106,12 +106,15 @@ public interface DevSupportManager : JSExceptionHandler {
/** Shows the "paused in debugger" overlay with the given message. */
public fun showPausedInDebuggerOverlay(
message: String,
listener: PausedInDebuggerOverlayCommandListener
listener: PausedInDebuggerOverlayCommandListener,
)
/** Hides the "paused in debugger" overlay, if currently shown. */
public fun hidePausedInDebuggerOverlay()
/** Add an option to send to packager when requesting JS bundle. */
public fun setAdditionalOptionForPackager(name: String, value: String)
/**
* The PackagerLocationCustomizer allows you to have a dynamic packager location that is
* determined right before loading the packager. Your customizer must call |callback|, as loading
@@ -16,6 +16,8 @@ import com.facebook.common.logging.FLog;
import com.facebook.infer.annotation.Assertions;
import com.facebook.infer.annotation.Nullsafe;
import com.facebook.react.modules.systeminfo.AndroidInfoHelpers;
import java.util.HashMap;
import java.util.Map;
@Nullsafe(Nullsafe.Mode.LOCAL)
public class PackagerConnectionSettings {
@@ -25,6 +27,7 @@ public class PackagerConnectionSettings {
private final SharedPreferences mPreferences;
private final String mPackageName;
private final Context mAppContext;
private final Map<String, String> mAdditionalOptionsForPackager = new HashMap<>();
public PackagerConnectionSettings(Context applicationContext) {
mPreferences = PreferenceManager.getDefaultSharedPreferences(applicationContext);
@@ -62,4 +65,12 @@ public class PackagerConnectionSettings {
public @Nullable String getPackageName() {
return mPackageName;
}
public void setAdditionalOptionForPackager(String key, String value) {
mAdditionalOptionsForPackager.put(key, value);
}
public Map<String, String> getAdditionalOptionsForPackager() {
return mAdditionalOptionsForPackager;
}
}