diff --git a/.nx/version-plans/version-plan-1772810670470.md b/.nx/version-plans/version-plan-1772810670470.md new file mode 100644 index 00000000..4e3a4417 --- /dev/null +++ b/.nx/version-plans/version-plan-1772810670470.md @@ -0,0 +1,5 @@ +--- +__default__: patch +--- + +Add a new host option to rn-harness.config for Metro bind host, replacing HARNESS_METRO_BIND_HOST. diff --git a/packages/bundler-metro/src/factory.ts b/packages/bundler-metro/src/factory.ts index ed1d9d25..30915f06 100644 --- a/packages/bundler-metro/src/factory.ts +++ b/packages/bundler-metro/src/factory.ts @@ -66,9 +66,15 @@ export const getMetroInstance = async ( .use('/status', getStatusMiddleware(projectRoot)); const ready = waitForBundler(reporter, abortSignal); + const metroBindHost = harnessConfig.host?.trim(); + if (metroBindHost) { + logger.debug(`Binding Metro server to host ${metroBindHost}`); + } + const maybeServer = await Metro.runServer(config, { waitForBundler: true, unstable_extraMiddleware: [middleware], + ...(metroBindHost ? { host: metroBindHost } : {}), }); // Metro <0.83 returns the server directly, while 0.83+ returns an object with the server as a property. diff --git a/packages/config/src/types.ts b/packages/config/src/types.ts index 1123dd04..e94d934b 100644 --- a/packages/config/src/types.ts +++ b/packages/config/src/types.ts @@ -21,6 +21,7 @@ export const ConfigSchema = z .min(1, 'App registry component name is required'), runners: z.array(RunnerSchema).min(1, 'At least one runner is required'), defaultRunner: z.string().optional(), + host: z.string().min(1, 'Host is required').optional(), webSocketPort: z.number().optional().default(3001), bridgeTimeout: z .number() diff --git a/website/src/docs/getting-started/configuration.mdx b/website/src/docs/getting-started/configuration.mdx index f1ca8417..2c12a27f 100644 --- a/website/src/docs/getting-started/configuration.mdx +++ b/website/src/docs/getting-started/configuration.mdx @@ -84,6 +84,7 @@ For Expo projects, the `entryPoint` should be set to the path specified in the ` | `appRegistryComponentName` | **Required.** Name of the component registered with AppRegistry. | | `runners` | **Required.** Array of test runners (at least one required). | | `defaultRunner` | Default runner to use when none specified. | +| `host` | Hostname or IP address to bind the Metro server to (default: Metro default). | | `bridgeTimeout` | Bridge timeout in milliseconds (default: `60000`). | | `bundleStartTimeout` | Bundle start timeout in milliseconds (default: `15000`). | | `maxAppRestarts` | Maximum number of app restarts when app fails to report ready (default: `2`). |