From 841c099b75d7c09b9e82d4d62fd62d0a1eb0ce66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Fazekas?= Date: Fri, 20 Mar 2026 07:39:12 +0100 Subject: [PATCH] feat: configurable Metro port --- packages/bundler-metro/src/constants.ts | 1 - packages/bundler-metro/src/factory.ts | 12 ++++---- .../src/middlewares/expo-middleware.ts | 6 ++-- packages/bundler-metro/src/prewarm.ts | 4 +-- packages/config/src/types.ts | 6 ++++ packages/jest/src/cli-args.ts | 6 ++++ packages/jest/src/harness.ts | 1 + packages/jest/src/setup.ts | 5 ++++ packages/platform-android/package.json | 1 - packages/platform-android/src/adb.ts | 16 ++++++++++ packages/platform-android/src/runner.ts | 8 +++-- packages/platform-android/tsconfig.json | 3 -- packages/platform-android/tsconfig.lib.json | 3 -- packages/platform-ios/package.json | 1 - .../src/__tests__/instance.test.ts | 10 ++++--- packages/platform-ios/src/instance.ts | 18 +++++++++-- packages/platform-ios/src/runner.ts | 7 ++--- packages/platform-ios/src/xcrun/simctl.ts | 17 +++++++++++ packages/platform-ios/tsconfig.json | 3 -- packages/platform-ios/tsconfig.lib.json | 3 -- pnpm-lock.yaml | 30 ++++++++----------- 21 files changed, 104 insertions(+), 57 deletions(-) delete mode 100644 packages/bundler-metro/src/constants.ts diff --git a/packages/bundler-metro/src/constants.ts b/packages/bundler-metro/src/constants.ts deleted file mode 100644 index 286b4641..00000000 --- a/packages/bundler-metro/src/constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const METRO_PORT = 8081; diff --git a/packages/bundler-metro/src/factory.ts b/packages/bundler-metro/src/factory.ts index 0d3b7f9a..5840c77d 100644 --- a/packages/bundler-metro/src/factory.ts +++ b/packages/bundler-metro/src/factory.ts @@ -6,7 +6,6 @@ import connect from 'connect'; import nocache from 'nocache'; import { isPortAvailable, getMetroPackage } from './utils.js'; import { MetroPortUnavailableError } from './errors.js'; -import { METRO_PORT } from './constants.js'; import type { MetroInstance, MetroOptions } from './types.js'; import { type Reporter, @@ -41,10 +40,11 @@ export const getMetroInstance = async ( abortSignal: AbortSignal ): Promise => { const { projectRoot, harnessConfig } = options; - const isDefaultPortAvailable = await isPortAvailable(METRO_PORT); + const metroPort = harnessConfig.metroPort; + const isMetroPortAvailable = await isPortAvailable(metroPort); - if (!isDefaultPortAvailable) { - throw new MetroPortUnavailableError(METRO_PORT); + if (!isMetroPortAvailable) { + throw new MetroPortUnavailableError(metroPort); } const Metro = getMetroPackage(projectRoot); @@ -52,7 +52,7 @@ export const getMetroInstance = async ( process.env.RN_HARNESS = 'true'; const projectMetroConfig = await Metro.loadConfig({ - port: METRO_PORT, + port: metroPort, projectRoot, }); const config = await withRnHarness(projectMetroConfig, true)(); @@ -62,7 +62,7 @@ export const getMetroInstance = async ( const middleware = connect() .use(nocache()) - .use('/', getExpoMiddleware(projectRoot, harnessConfig.entryPoint)) + .use('/', getExpoMiddleware(projectRoot, harnessConfig.entryPoint, metroPort)) .use('/status', getStatusMiddleware(projectRoot)); const ready = waitForBundler(reporter, abortSignal); diff --git a/packages/bundler-metro/src/middlewares/expo-middleware.ts b/packages/bundler-metro/src/middlewares/expo-middleware.ts index b763f778..c9a25e4b 100644 --- a/packages/bundler-metro/src/middlewares/expo-middleware.ts +++ b/packages/bundler-metro/src/middlewares/expo-middleware.ts @@ -4,7 +4,7 @@ import crypto from 'node:crypto'; import { getResolvedEntryPointWithoutExtension } from '../entry-point-utils.js'; export const getExpoMiddleware = - (projectRoot: string, entryPoint: string) => + (projectRoot: string, entryPoint: string, metroPort: number) => (req: IncomingMessage, res: ServerResponse, next: NextFunction) => { if (req.url !== '/') { next(); @@ -24,7 +24,7 @@ export const getExpoMiddleware = launchAsset: { key: 'bundle', contentType: 'application/javascript', - url: `http://localhost:8081/${resolvedEntryPoint}.bundle?platform=${platform}&dev=true&hot=false&lazy=true&transform.engine=hermes&transform.bytecode=1&transform.routerRoot=app&transform.reactCompiler=true&unstable_transformProfile=hermes-stable`, + url: `http://localhost:${metroPort}/${resolvedEntryPoint}.bundle?platform=${platform}&dev=true&hot=false&lazy=true&transform.engine=hermes&transform.bytecode=1&transform.routerRoot=app&transform.reactCompiler=true&unstable_transformProfile=hermes-stable`, }, assets: [], metadata: {}, @@ -35,7 +35,7 @@ export const getExpoMiddleware = version: '1.0.0', }, expoGo: { - debuggerHost: 'localhost:8081', + debuggerHost: `localhost:${metroPort}`, developer: { tool: 'expo-cli', projectRoot, diff --git a/packages/bundler-metro/src/prewarm.ts b/packages/bundler-metro/src/prewarm.ts index 15be8438..6be58db2 100644 --- a/packages/bundler-metro/src/prewarm.ts +++ b/packages/bundler-metro/src/prewarm.ts @@ -1,4 +1,3 @@ -import { METRO_PORT } from './constants.js'; import { getResolvedEntryPointWithoutExtension } from './entry-point-utils.js'; type PrewarmOptions = { @@ -8,6 +7,7 @@ type PrewarmOptions = { dev: boolean; minify: boolean; signal: AbortSignal; + metroPort: number; }; export const prewarmMetroBundle = async ( @@ -23,7 +23,7 @@ export const prewarmMetroBundle = async ( dev: String(dev), minify: String(minify), }); - const url = `http://localhost:${METRO_PORT}/${resolvedEntryPoint}.bundle?${searchParams.toString()}`; + const url = `http://localhost:${options.metroPort}/${resolvedEntryPoint}.bundle?${searchParams.toString()}`; const response = await fetch(url, { signal }); diff --git a/packages/config/src/types.ts b/packages/config/src/types.ts index 7cd40514..a418255a 100644 --- a/packages/config/src/types.ts +++ b/packages/config/src/types.ts @@ -22,6 +22,12 @@ export const ConfigSchema = z 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(), + metroPort: z + .number() + .min(1, 'Metro port must be at least 1') + .max(65535, 'Metro port must be at most 65535') + .optional() + .default(8081), webSocketPort: z.number().optional().default(3001), bridgeTimeout: z .number() diff --git a/packages/jest/src/cli-args.ts b/packages/jest/src/cli-args.ts index 58be4560..e2964573 100644 --- a/packages/jest/src/cli-args.ts +++ b/packages/jest/src/cli-args.ts @@ -3,6 +3,7 @@ import { hideBin } from 'yargs/helpers'; export type HarnessCliArgs = { harnessRunner?: string; + metroPort?: number; }; export const getAdditionalCliArgs = (): HarnessCliArgs => { @@ -11,6 +12,10 @@ export const getAdditionalCliArgs = (): HarnessCliArgs => { type: 'string', description: 'Specify which Harness runner to use', }) + .option('metroPort', { + type: 'number', + description: 'Override the Metro bundler port', + }) .strict(false) .help(false) .version(false) @@ -19,5 +24,6 @@ export const getAdditionalCliArgs = (): HarnessCliArgs => { return { harnessRunner: argv.harnessRunner, + metroPort: argv.metroPort, }; }; diff --git a/packages/jest/src/harness.ts b/packages/jest/src/harness.ts index 29a09cef..c344e0e2 100644 --- a/packages/jest/src/harness.ts +++ b/packages/jest/src/harness.ts @@ -182,6 +182,7 @@ const getHarnessInternal = async ( dev: true, minify: false, signal, + metroPort: config.metroPort, }); logMetroPrewarmCompleted(platform); await appMonitor.start(); diff --git a/packages/jest/src/setup.ts b/packages/jest/src/setup.ts index 78e69846..9756fb58 100644 --- a/packages/jest/src/setup.ts +++ b/packages/jest/src/setup.ts @@ -57,6 +57,11 @@ export const setup = async (globalConfig: JestConfig.GlobalConfig) => { }); const cliArgs = getAdditionalCliArgs(); + + if (cliArgs.metroPort != null) { + harnessConfig.metroPort = cliArgs.metroPort; + } + const selectedRunner = getHarnessRunner(harnessConfig, cliArgs); if (globalConfig.collectCoverage) { diff --git a/packages/platform-android/package.json b/packages/platform-android/package.json index 90b0ce77..dd90c2a2 100644 --- a/packages/platform-android/package.json +++ b/packages/platform-android/package.json @@ -18,7 +18,6 @@ "dependencies": { "@react-native-harness/platforms": "workspace:*", "@react-native-harness/tools": "workspace:*", - "@react-native-harness/config": "workspace:*", "zod": "^3.25.67", "tslib": "^2.3.0" }, diff --git a/packages/platform-android/src/adb.ts b/packages/platform-android/src/adb.ts index 11c40bb6..b5e79487 100644 --- a/packages/platform-android/src/adb.ts +++ b/packages/platform-android/src/adb.ts @@ -265,3 +265,19 @@ export const getConnectedDevices = async (): Promise => { return devices; }; + +export const setDebugHttpHost = async ( + adbId: string, + bundleId: string, + host: string +): Promise => { + const prefsPath = `shared_prefs/${bundleId}_preferences.xml`; + const prefsContent = `${host}`; + await spawn('adb', [ + '-s', + adbId, + 'shell', + `run-as ${bundleId} sh -c 'mkdir -p shared_prefs && printf "${prefsContent}" > ${prefsPath}'`, + ]); +}; + diff --git a/packages/platform-android/src/runner.ts b/packages/platform-android/src/runner.ts index cafc1e4e..89adca7e 100644 --- a/packages/platform-android/src/runner.ts +++ b/packages/platform-android/src/runner.ts @@ -4,7 +4,6 @@ import { CreateAppMonitorOptions, HarnessPlatformRunner, } from '@react-native-harness/platforms'; -import { Config } from '@react-native-harness/config'; import { AndroidPlatformConfigSchema, type AndroidPlatformConfig, @@ -16,7 +15,7 @@ import { createAndroidAppMonitor } from './app-monitor.js'; const getAndroidRunner = async ( config: AndroidPlatformConfig, - harnessConfig: Config + harnessConfig: { metroPort: number; webSocketPort: number } ): Promise => { const parsedConfig = AndroidPlatformConfigSchema.parse(config); const adbId = await getAdbId(parsedConfig.device); @@ -34,11 +33,14 @@ const getAndroidRunner = async ( ); } + const metroPort = harnessConfig.metroPort; + await Promise.all([ - adb.reversePort(adbId, 8081), + adb.reversePort(adbId, metroPort), adb.reversePort(adbId, 8080), adb.reversePort(adbId, harnessConfig.webSocketPort), adb.setHideErrorDialogs(adbId, true), + adb.setDebugHttpHost(adbId, parsedConfig.bundleId, `localhost:${metroPort}`), ]); const appUid = await adb.getAppUid(adbId, parsedConfig.bundleId); diff --git a/packages/platform-android/tsconfig.json b/packages/platform-android/tsconfig.json index 879e5151..56b5cd95 100644 --- a/packages/platform-android/tsconfig.json +++ b/packages/platform-android/tsconfig.json @@ -3,9 +3,6 @@ "files": [], "include": [], "references": [ - { - "path": "../config" - }, { "path": "../tools" }, diff --git a/packages/platform-android/tsconfig.lib.json b/packages/platform-android/tsconfig.lib.json index ec9fadc9..1ff1d7b0 100644 --- a/packages/platform-android/tsconfig.lib.json +++ b/packages/platform-android/tsconfig.lib.json @@ -11,9 +11,6 @@ }, "include": ["src/**/*.ts"], "references": [ - { - "path": "../config/tsconfig.lib.json" - }, { "path": "../tools/tsconfig.lib.json" }, diff --git a/packages/platform-ios/package.json b/packages/platform-ios/package.json index 94b868a3..96d59d42 100644 --- a/packages/platform-ios/package.json +++ b/packages/platform-ios/package.json @@ -18,7 +18,6 @@ "dependencies": { "@react-native-harness/platforms": "workspace:*", "@react-native-harness/tools": "workspace:*", - "@react-native-harness/config": "workspace:*", "zod": "^3.25.67", "tslib": "^2.3.0" }, diff --git a/packages/platform-ios/src/__tests__/instance.test.ts b/packages/platform-ios/src/__tests__/instance.test.ts index cba91aa9..7718e089 100644 --- a/packages/platform-ios/src/__tests__/instance.test.ts +++ b/packages/platform-ios/src/__tests__/instance.test.ts @@ -19,6 +19,7 @@ describe('iOS platform instance dependency validation', () => { vi.spyOn(simctl, 'getSimulatorId').mockResolvedValue('sim-udid'); vi.spyOn(simctl, 'isAppInstalled').mockResolvedValue(true); vi.spyOn(simctl, 'getSimulatorStatus').mockResolvedValue('Booted'); + vi.spyOn(simctl, 'setJsLocation').mockResolvedValue(undefined); const config = { name: 'ios', @@ -27,7 +28,7 @@ describe('iOS platform instance dependency validation', () => { }; await expect( - getAppleSimulatorPlatformInstance(config) + getAppleSimulatorPlatformInstance(config, 8081) ).resolves.toBeDefined(); expect(assertInstalled).not.toHaveBeenCalled(); }); @@ -44,7 +45,7 @@ describe('iOS platform instance dependency validation', () => { }; await expect( - getApplePhysicalDevicePlatformInstance(config) + getApplePhysicalDevicePlatformInstance(config, 8081) ).rejects.toThrow('missing'); expect(assertInstalled).toHaveBeenCalled(); }); @@ -58,6 +59,7 @@ describe('iOS platform instance dependency validation', () => { ); vi.spyOn(simctl, 'isAppInstalled').mockResolvedValue(true); vi.spyOn(simctl, 'getSimulatorStatus').mockResolvedValue('Booted'); + vi.spyOn(simctl, 'setJsLocation').mockResolvedValue(undefined); const config = { name: 'ios', @@ -66,7 +68,7 @@ describe('iOS platform instance dependency validation', () => { }; await expect( - getAppleSimulatorPlatformInstance(config) + getAppleSimulatorPlatformInstance(config, 8081) ).resolves.toBeDefined(); expect(getSimulatorId).toHaveBeenCalled(); }); @@ -84,7 +86,7 @@ describe('iOS platform instance dependency validation', () => { }; await expect( - getApplePhysicalDevicePlatformInstance(config) + getApplePhysicalDevicePlatformInstance(config, 8081) ).rejects.toThrow('missing'); expect(getDeviceId).not.toHaveBeenCalled(); }); diff --git a/packages/platform-ios/src/instance.ts b/packages/platform-ios/src/instance.ts index 81a44140..a3db02e2 100644 --- a/packages/platform-ios/src/instance.ts +++ b/packages/platform-ios/src/instance.ts @@ -19,7 +19,8 @@ import { import { assertLibimobiledeviceInstalled } from './libimobiledevice.js'; export const getAppleSimulatorPlatformInstance = async ( - config: ApplePlatformConfig + config: ApplePlatformConfig, + metroPort: number ): Promise => { assertAppleDeviceSimulator(config.device); @@ -47,6 +48,12 @@ export const getAppleSimulatorPlatformInstance = async ( throw new Error('Simulator is not booted'); } + await simctl.setJsLocation( + udid, + config.bundleId, + `localhost:${metroPort}` + ); + return { startApp: async (options) => { await simctl.startApp( @@ -84,11 +91,18 @@ export const getAppleSimulatorPlatformInstance = async ( }; export const getApplePhysicalDevicePlatformInstance = async ( - config: ApplePlatformConfig + config: ApplePlatformConfig, + metroPort: number ): Promise => { assertAppleDevicePhysical(config.device); await assertLibimobiledeviceInstalled(); + if (metroPort !== 8081) { + throw new Error( + `Custom Metro port ${metroPort} is not supported on physical iOS devices. Physical devices always connect to port 8081.` + ); + } + const device = await devicectl.getDevice(config.device.name); if (!device) { diff --git a/packages/platform-ios/src/runner.ts b/packages/platform-ios/src/runner.ts index d413d4af..b2da6537 100644 --- a/packages/platform-ios/src/runner.ts +++ b/packages/platform-ios/src/runner.ts @@ -1,5 +1,4 @@ import { HarnessPlatformRunner } from '@react-native-harness/platforms'; -import { Config } from '@react-native-harness/config'; import { ApplePlatformConfigSchema, type ApplePlatformConfig, @@ -12,15 +11,15 @@ import { const getAppleRunner = async ( config: ApplePlatformConfig, - _harnessConfig: Config + harnessConfig: { metroPort: number } ): Promise => { const parsedConfig = ApplePlatformConfigSchema.parse(config); if (isAppleDeviceSimulator(parsedConfig.device)) { - return getAppleSimulatorPlatformInstance(parsedConfig); + return getAppleSimulatorPlatformInstance(parsedConfig, harnessConfig.metroPort); } - return getApplePhysicalDevicePlatformInstance(parsedConfig); + return getApplePhysicalDevicePlatformInstance(parsedConfig, harnessConfig.metroPort); }; export default getAppleRunner; diff --git a/packages/platform-ios/src/xcrun/simctl.ts b/packages/platform-ios/src/xcrun/simctl.ts index 4cfa5cca..bd514689 100644 --- a/packages/platform-ios/src/xcrun/simctl.ts +++ b/packages/platform-ios/src/xcrun/simctl.ts @@ -280,6 +280,23 @@ export const isAppRunning = async ( } }; +export const setJsLocation = async ( + udid: string, + bundleId: string, + host: string +): Promise => { + await spawn('xcrun', [ + 'simctl', + 'spawn', + udid, + 'defaults', + 'write', + bundleId, + 'RCT_jsLocation', + host, + ]); +}; + export const screenshot = async ( udid: string, destination: string diff --git a/packages/platform-ios/tsconfig.json b/packages/platform-ios/tsconfig.json index 879e5151..56b5cd95 100644 --- a/packages/platform-ios/tsconfig.json +++ b/packages/platform-ios/tsconfig.json @@ -3,9 +3,6 @@ "files": [], "include": [], "references": [ - { - "path": "../config" - }, { "path": "../tools" }, diff --git a/packages/platform-ios/tsconfig.lib.json b/packages/platform-ios/tsconfig.lib.json index d6cee886..aa622b9a 100644 --- a/packages/platform-ios/tsconfig.lib.json +++ b/packages/platform-ios/tsconfig.lib.json @@ -12,9 +12,6 @@ }, "include": ["src/**/*.ts"], "references": [ - { - "path": "../config/tsconfig.lib.json" - }, { "path": "../tools/tsconfig.lib.json" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e19e442b..981b6c1f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,13 +31,13 @@ importers: version: 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/react-native': specifier: 22.0.4 - version: 22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@types/node@20.19.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.29.0(jiti@2.4.2))(metro-config@0.83.3)(metro-resolver@0.83.3)(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0))(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17))) + version: 22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@types/node@20.19.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.29.0(jiti@2.4.2))(metro-config@0.83.3)(metro-resolver@0.83.3)(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4)(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/rollup': specifier: 22.0.4 version: 22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3) '@nx/vite': specifier: 22.0.4 - version: 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0)) + version: 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4) '@nx/web': specifier: 22.0.4 version: 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) @@ -64,7 +64,7 @@ importers: version: 4.6.0(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0)) '@vitest/coverage-v8': specifier: ^3.0.5 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0)) + version: 3.2.4(vitest@3.2.4) '@vitest/ui': specifier: ^3.0.0 version: 3.2.4(vitest@3.2.4) @@ -400,9 +400,6 @@ importers: packages/platform-android: dependencies: - '@react-native-harness/config': - specifier: workspace:* - version: link:../config '@react-native-harness/platforms': specifier: workspace:* version: link:../platforms @@ -418,9 +415,6 @@ importers: packages/platform-ios: dependencies: - '@react-native-harness/config': - specifier: workspace:* - version: link:../config '@react-native-harness/platforms': specifier: workspace:* version: link:../platforms @@ -10093,13 +10087,13 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@nx/detox@22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@types/node@20.19.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0))(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17)))': + '@nx/detox@22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@types/node@20.19.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4)(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17)))': dependencies: '@nx/devkit': 22.0.4(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/eslint': 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/jest': 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@20.19.25)(babel-plugin-macros@3.1.0)(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3) '@nx/js': 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/react': 22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0))(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/react': 22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4)(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17))) tslib: 2.8.1 transitivePeerDependencies: - '@babel/core' @@ -10324,12 +10318,12 @@ snapshots: '@nx/nx-win32-x64-msvc@22.0.4': optional: true - '@nx/react-native@22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@types/node@20.19.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.29.0(jiti@2.4.2))(metro-config@0.83.3)(metro-resolver@0.83.3)(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0))(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17)))': + '@nx/react-native@22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@types/node@20.19.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.29.0(jiti@2.4.2))(metro-config@0.83.3)(metro-resolver@0.83.3)(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4)(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17)))': dependencies: '@nx/devkit': 22.0.4(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/eslint': 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/js': 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/react': 22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0))(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/react': 22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4)(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17))) ajv: 8.17.1 enhanced-resolve: 5.18.3 ignore: 5.3.2 @@ -10340,7 +10334,7 @@ snapshots: tsconfig-paths: 4.2.0 tslib: 2.8.1 optionalDependencies: - '@nx/detox': 22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@types/node@20.19.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0))(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/detox': 22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@types/node@20.19.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4)(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/rollup': 22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3) transitivePeerDependencies: - '@babel/core' @@ -10375,7 +10369,7 @@ snapshots: - webpack - webpack-cli - '@nx/react@22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0))(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17)))': + '@nx/react@22.0.4(@babel/core@7.27.4)(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4)(webpack@5.102.1(@swc/core@1.5.29(@swc/helpers@0.5.17)))': dependencies: '@nx/devkit': 22.0.4(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/eslint': 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.29.0(jiti@2.4.2))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) @@ -10393,7 +10387,7 @@ snapshots: semver: 7.7.2 tslib: 2.8.1 optionalDependencies: - '@nx/vite': 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0)) + '@nx/vite': 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4) transitivePeerDependencies: - '@babel/core' - '@babel/traverse' @@ -10454,7 +10448,7 @@ snapshots: - typescript - verdaccio - '@nx/vite@22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0))': + '@nx/vite@22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.4.2)(terser@5.42.0)(yaml@2.8.0))(vitest@3.2.4)': dependencies: '@nx/devkit': 22.0.4(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/js': 22.0.4(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.0.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) @@ -11904,7 +11898,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.42.0)(yaml@2.8.0))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4)': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2