From 872e92084704601b8a77023989970b9fe3165293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Mon, 26 Oct 2026 04:50:59 -0700 Subject: [PATCH] Restore Fantom DevTools launching with `FANTOM_DEBUG_JS` (#59410) Summary: Restore DevTools launching when `FANTOM_DEBUG_JS` is set by allowing the existing native tester to launch through the shared browser launcher. Explicitly allow app launching for interactive test debugging, use a Chrome app window instead of the standalone shell, and run debugging sessions in band. Changelog: [Internal] Reviewed By: lenaic, andrewdacenko Differential Revision: D127171074 --- .../src/utils/DefaultToolLauncher.js | 9 ++++-- .../runner/global-setup/globalSetup.js | 28 ++++++++++++++----- scripts/fantom.sh | 2 +- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/packages/dev-middleware/src/utils/DefaultToolLauncher.js b/packages/dev-middleware/src/utils/DefaultToolLauncher.js index 8f8d89961d8b..ba654d4e872a 100644 --- a/packages/dev-middleware/src/utils/DefaultToolLauncher.js +++ b/packages/dev-middleware/src/utils/DefaultToolLauncher.js @@ -23,8 +23,13 @@ const {apps, openApp} = open; * local machine. */ const DefaultToolLauncher = { - launchDebuggerAppWindow: async (url: string): Promise => { - if (process.env.NODE_ENV === 'test') { + launchDebuggerAppWindow: async ( + url: string, + options?: Readonly<{ + allowInTests?: boolean, + }>, + ): Promise => { + if (process.env.NODE_ENV === 'test' && options?.allowInTests !== true) { assertMockedInTests(); } diff --git a/private/react-native-fantom/runner/global-setup/globalSetup.js b/private/react-native-fantom/runner/global-setup/globalSetup.js index b8c7e4cf5fda..92d2c5e43a79 100644 --- a/private/react-native-fantom/runner/global-setup/globalSetup.js +++ b/private/react-native-fantom/runner/global-setup/globalSetup.js @@ -10,10 +10,17 @@ import type {DevToolLauncher} from '@react-native/dev-middleware'; -import {isOSS, validateEnvironmentVariables} from '../EnvironmentOptions'; +import { + debugJS, + isOSS, + validateEnvironmentVariables, +} from '../EnvironmentOptions'; import {getTestBuildOutputPath} from '../paths'; import build from './build'; -import {createDevMiddleware} from '@react-native/dev-middleware'; +import { + createDevMiddleware, + unstable_DefaultToolLauncher as DefaultToolLauncher, +} from '@react-native/dev-middleware'; import * as Metro from 'metro'; import {Server} from 'node:net'; import path from 'node:path'; @@ -55,19 +62,26 @@ async function startMetroServer() { // $FlowExpectedError[cannot-write] metroConfig.server.port = Number(process.env.__FANTOM_METRO_PORT__); - // No-op app launcher to prevent debugger-shell launches during tests + const serverBaseUrl = `http://localhost:${metroConfig.server.port}`; const devToolLauncher: DevToolLauncher = { - launchDebuggerAppWindow: async (_url: string) => {}, - launchDebuggerShell: async () => {}, - prepareDebuggerShell: async () => ({code: 'not_implemented'}), + launchDebuggerAppWindow: async (url: string) => { + if (debugJS) { + await DefaultToolLauncher.launchDebuggerAppWindow(url, { + allowInTests: true, + }); + } + }, }; const { middleware: devMiddleware, websocketEndpoints: debuggerWebsocketEndpoints, } = createDevMiddleware({ - serverBaseUrl: `http://localhost:${metroConfig.server.port}`, + serverBaseUrl, unstable_toolLauncher: devToolLauncher, + unstable_experiments: { + enableStandaloneFuseboxShell: false, + }, }); const server = await Metro.runServer(metroConfig, { diff --git a/scripts/fantom.sh b/scripts/fantom.sh index 29f54d6e95c8..3cfa32231979 100755 --- a/scripts/fantom.sh +++ b/scripts/fantom.sh @@ -33,7 +33,7 @@ for arg in "$@"; do esac done -if [[ -n "$FANTOM_RUN_BENCHMARKS" ]]; then +if [[ -n "$FANTOM_RUN_BENCHMARKS" || -n "$FANTOM_DEBUG_JS" ]]; then ARGS+=("--runInBand") fi