diff --git a/.fallowrc.json b/.fallowrc.json index 068c0abe9..46d1a6110 100644 --- a/.fallowrc.json +++ b/.fallowrc.json @@ -5,7 +5,7 @@ "src/index.ts", "src/io.ts", "src/artifacts.ts", - "src/metro.ts", + "src/metro/metro.ts", "src/remote-config.ts", "src/install-source.ts", "src/android-adb.ts", diff --git a/fallow-baselines/health.json b/fallow-baselines/health.json index 2a0a3576b..e9f93d4d4 100644 --- a/fallow-baselines/health.json +++ b/fallow-baselines/health.json @@ -90,7 +90,7 @@ "count": 1 } }, - "src/client-metro.ts": { + "src/metro/client-metro.ts": { "crap_moderate": { "count": 3 } diff --git a/rslib.config.ts b/rslib.config.ts index 0f7f55743..9abe2a5f5 100644 --- a/rslib.config.ts +++ b/rslib.config.ts @@ -26,7 +26,7 @@ export default defineConfig({ io: 'src/io.ts', artifacts: 'src/artifacts.ts', batch: 'src/batch.ts', - metro: 'src/metro.ts', + metro: 'src/metro/metro.ts', 'remote-config': 'src/remote-config.ts', 'install-source': 'src/install-source.ts', 'android-adb': 'src/android-adb.ts', diff --git a/src/__tests__/client-metro-auto-companion.test.ts b/src/__tests__/client-metro-auto-companion.test.ts index 534fa211d..4f5d1b1de 100644 --- a/src/__tests__/client-metro-auto-companion.test.ts +++ b/src/__tests__/client-metro-auto-companion.test.ts @@ -4,12 +4,12 @@ import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -vi.mock('../client-metro-companion.ts', () => ({ +vi.mock('../metro/client-metro-companion.ts', () => ({ ensureMetroCompanion: vi.fn(), })); -import { ensureMetroCompanion } from '../client-metro-companion.ts'; -import { prepareMetroRuntime } from '../client-metro.ts'; +import { ensureMetroCompanion } from '../metro/client-metro-companion.ts'; +import { prepareMetroRuntime } from '../metro/client-metro.ts'; const TEST_BRIDGE_SCOPE = { tenantId: 'tenant-1', diff --git a/src/__tests__/client-metro-companion.test.ts b/src/__tests__/client-metro-companion.test.ts index 06fd41599..8ec2324bb 100644 --- a/src/__tests__/client-metro-companion.test.ts +++ b/src/__tests__/client-metro-companion.test.ts @@ -22,7 +22,7 @@ import { readProcessStartTime, waitForProcessExit, } from '../utils/process-identity.ts'; -import { ensureMetroCompanion, stopMetroCompanion } from '../client-metro-companion.ts'; +import { ensureMetroCompanion, stopMetroCompanion } from '../metro/client-metro-companion.ts'; import { ensureReactDevtoolsCompanion } from '../client-react-devtools-companion.ts'; const TEST_BRIDGE_SCOPE = { diff --git a/src/__tests__/client-metro-startup-cleanup.test.ts b/src/__tests__/client-metro-startup-cleanup.test.ts index 20e5db654..99a08f382 100644 --- a/src/__tests__/client-metro-startup-cleanup.test.ts +++ b/src/__tests__/client-metro-startup-cleanup.test.ts @@ -15,7 +15,7 @@ vi.mock('../utils/process-identity.ts', () => ({ import { runCmdDetached } from '../utils/exec.ts'; import { waitForProcessExit } from '../utils/process-identity.ts'; -import { prepareMetroRuntime } from '../client-metro.ts'; +import { prepareMetroRuntime } from '../metro/client-metro.ts'; afterEach(() => { vi.useRealTimers(); diff --git a/src/__tests__/client-metro.test.ts b/src/__tests__/client-metro.test.ts index f2d12a044..27be615bd 100644 --- a/src/__tests__/client-metro.test.ts +++ b/src/__tests__/client-metro.test.ts @@ -8,7 +8,7 @@ import type { Socket } from 'node:net'; import net from 'node:net'; import os from 'node:os'; import path from 'node:path'; -import { prepareMetroRuntime, reloadMetro } from '../client-metro.ts'; +import { prepareMetroRuntime, reloadMetro } from '../metro/client-metro.ts'; import { AppError } from '../kernel/errors.ts'; import { isProcessAlive, waitForProcessExit } from '../utils/process-identity.ts'; diff --git a/src/__tests__/metro-protocol-public.test.ts b/src/__tests__/metro-protocol-public.test.ts index b41e34ce0..eaefe9171 100644 --- a/src/__tests__/metro-protocol-public.test.ts +++ b/src/__tests__/metro-protocol-public.test.ts @@ -6,7 +6,7 @@ import { type MetroBridgeDescriptor, type MetroTunnelRequestMessage, type MetroTunnelResponseMessage, -} from '../metro.ts'; +} from '../metro/metro.ts'; // Type-only contract fixtures — these verify that the public subpath types // remain structurally stable. A rename or breaking shape change will fail diff --git a/src/__tests__/metro-public.test.ts b/src/__tests__/metro-public.test.ts index facdc4783..dfc4ce3ff 100644 --- a/src/__tests__/metro-public.test.ts +++ b/src/__tests__/metro-public.test.ts @@ -1,8 +1,10 @@ import { afterEach, test, vi } from 'vitest'; import assert from 'node:assert/strict'; -vi.mock('../client-metro.ts', async () => { - const actual = await vi.importActual('../client-metro.ts'); +vi.mock('../metro/client-metro.ts', async () => { + const actual = await vi.importActual( + '../metro/client-metro.ts', + ); return { ...actual, prepareMetroRuntime: vi.fn(), @@ -10,13 +12,13 @@ vi.mock('../client-metro.ts', async () => { }; }); -vi.mock('../client-metro-companion.ts', () => ({ +vi.mock('../metro/client-metro-companion.ts', () => ({ ensureMetroCompanion: vi.fn(), stopMetroCompanion: vi.fn(), })); -import { prepareMetroRuntime, reloadMetro } from '../client-metro.ts'; -import { ensureMetroCompanion, stopMetroCompanion } from '../client-metro-companion.ts'; +import { prepareMetroRuntime, reloadMetro } from '../metro/client-metro.ts'; +import { ensureMetroCompanion, stopMetroCompanion } from '../metro/client-metro-companion.ts'; import { buildAndroidRuntimeHints, buildIosRuntimeHints, @@ -25,7 +27,7 @@ import { reloadRemoteMetro, resolveRuntimeTransport, stopMetroTunnel, -} from '../metro.ts'; +} from '../metro/metro.ts'; const TEST_BRIDGE_SCOPE = { tenantId: 'tenant-1', diff --git a/src/__tests__/remote-connection.test.ts b/src/__tests__/remote-connection.test.ts index 3334c07b1..34554d866 100644 --- a/src/__tests__/remote-connection.test.ts +++ b/src/__tests__/remote-connection.test.ts @@ -4,7 +4,7 @@ import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -vi.mock('../client-metro-companion.ts', () => ({ +vi.mock('../metro/client-metro-companion.ts', () => ({ stopMetroCompanion: vi.fn(), })); @@ -23,7 +23,7 @@ import { materializeRemoteConnectionForCommand, PROXY_REMOTE_LEASE_TTL_MS, } from '../cli/commands/connection-runtime.ts'; -import { stopMetroCompanion } from '../client-metro-companion.ts'; +import { stopMetroCompanion } from '../metro/client-metro-companion.ts'; import { AppError } from '../kernel/errors.ts'; import { hashRemoteConfigFile, diff --git a/src/cli/commands/connection-runtime.ts b/src/cli/commands/connection-runtime.ts index e51b99a3a..272df6fe5 100644 --- a/src/cli/commands/connection-runtime.ts +++ b/src/cli/commands/connection-runtime.ts @@ -1,6 +1,6 @@ import { resolveDaemonPaths } from '../../daemon/config.ts'; import { stopReactDevtoolsCompanion } from '../../client-react-devtools-companion.ts'; -import { stopMetroTunnel } from '../../metro.ts'; +import { stopMetroTunnel } from '../../metro/metro.ts'; import { resolveRemoteConfigProfile } from '../../remote-config.ts'; import { resolveDevice, type DeviceInfo } from '../../kernel/device.ts'; import { shouldAgentCdpUseRemoteBridgeUrl } from './agent-cdp.ts'; @@ -20,7 +20,7 @@ import { AppError } from '../../kernel/errors.ts'; import type { LeaseBackend, SessionRuntimeHints } from '../../contracts.ts'; import type { CliFlags } from '../../utils/cli-flags.ts'; import type { AgentDeviceClient, Lease } from '../../client.ts'; -import type { MetroPrepareKind } from '../../client-metro.ts'; +import type { MetroPrepareKind } from '../../metro/client-metro.ts'; import { INTERNAL_COMMANDS, PUBLIC_COMMANDS } from '../../command-catalog.ts'; const leaseDeferredCommands = new Set([ diff --git a/src/client-companion-tunnel-worker.ts b/src/client-companion-tunnel-worker.ts index 623e6079d..493000c35 100644 --- a/src/client-companion-tunnel-worker.ts +++ b/src/client-companion-tunnel-worker.ts @@ -24,7 +24,7 @@ import { import type { MetroTunnelRequestMessage as MetroCompanionRequest, MetroTunnelResponseMessage, -} from './metro.ts'; +} from './metro/metro.ts'; import { normalizeBaseUrl } from './utils/url.ts'; const COMPANION_REGISTER_TIMEOUT_MS = 5_000; diff --git a/src/client-types.ts b/src/client-types.ts index 853e8c79c..a05d988ec 100644 --- a/src/client-types.ts +++ b/src/client-types.ts @@ -33,7 +33,7 @@ import type { MetroPrepareKind, PrepareMetroRuntimeResult, ReloadMetroResult, -} from './client-metro.ts'; +} from './metro/client-metro.ts'; import type { MetroBridgeScope } from './client-companion-tunnel-contract.ts'; import type { AppsFilter } from './contracts/app-inventory.ts'; import type { ScreenshotRequestFlags } from './contracts/screenshot.ts'; diff --git a/src/client.ts b/src/client.ts index ae0dd5f38..79385b8f9 100644 --- a/src/client.ts +++ b/src/client.ts @@ -1,5 +1,5 @@ import { sendToDaemon } from './daemon-client.ts'; -import { prepareMetroRuntime, reloadMetro } from './client-metro.ts'; +import { prepareMetroRuntime, reloadMetro } from './metro/client-metro.ts'; import { resolveDaemonPaths } from './daemon/config.ts'; import { symbolicateCrashArtifact } from './platforms/ios/debug-symbols.ts'; import { INTERNAL_COMMANDS } from './command-catalog.ts'; diff --git a/src/commands/metro/index.ts b/src/commands/metro/index.ts index a8461e7c7..2e1c0e316 100644 --- a/src/commands/metro/index.ts +++ b/src/commands/metro/index.ts @@ -1,4 +1,4 @@ -import type { MetroPrepareKind } from '../../client-metro.ts'; +import type { MetroPrepareKind } from '../../metro/client-metro.ts'; import type { MetroPrepareOptions, MetroPrepareResult, diff --git a/src/client-metro-companion.ts b/src/metro/client-metro-companion.ts similarity index 88% rename from src/client-metro-companion.ts rename to src/metro/client-metro-companion.ts index 9ee4f3bb8..27a76bab8 100644 --- a/src/client-metro-companion.ts +++ b/src/metro/client-metro-companion.ts @@ -4,8 +4,8 @@ import { type CompanionTunnelDefinition, type EnsureCompanionTunnelOptions, type StopCompanionTunnelOptions, -} from './client-companion-tunnel.ts'; -import { METRO_COMPANION_RUN_ARG } from './client-companion-tunnel-contract.ts'; +} from '../client-companion-tunnel.ts'; +import { METRO_COMPANION_RUN_ARG } from '../client-companion-tunnel-contract.ts'; const METRO_COMPANION_REGISTER_PATH = '/api/metro/companion/register'; diff --git a/src/client-metro.ts b/src/metro/client-metro.ts similarity index 98% rename from src/client-metro.ts rename to src/metro/client-metro.ts index efc6e226f..0fd71928a 100644 --- a/src/client-metro.ts +++ b/src/metro/client-metro.ts @@ -1,23 +1,23 @@ import fs from 'node:fs'; import path from 'node:path'; -import { sleep } from './utils/timeouts.ts'; +import { sleep } from '../utils/timeouts.ts'; import { ensureMetroCompanion } from './client-metro-companion.ts'; -import type { MetroBridgeScope } from './client-companion-tunnel-contract.ts'; +import type { MetroBridgeScope } from '../client-companion-tunnel-contract.ts'; import type { MetroBridgeDescriptor, MetroBridgeResult, MetroBridgeRuntimePayload, MetroRuntimeHints, } from './metro-types.ts'; -import { AppError } from './kernel/errors.ts'; -import { runCmdSync, runCmdDetached } from './utils/exec.ts'; -import { resolveUserPath } from './utils/path-resolution.ts'; -import { waitForProcessExit } from './utils/process-identity.ts'; -import { buildBundleUrl, normalizeBaseUrl } from './utils/url.ts'; +import { AppError } from '../kernel/errors.ts'; +import { runCmdSync, runCmdDetached } from '../utils/exec.ts'; +import { resolveUserPath } from '../utils/path-resolution.ts'; +import { waitForProcessExit } from '../utils/process-identity.ts'; +import { buildBundleUrl, normalizeBaseUrl } from '../utils/url.ts'; import { resolveRuntimeTransportHints, type ResolvedRuntimeTransport, -} from './utils/runtime-transport.ts'; +} from '../utils/runtime-transport.ts'; const DEFAULT_METRO_HOST = 'localhost'; const DEFAULT_METRO_PORT = 8081; @@ -28,7 +28,10 @@ export type MetroPrepareKind = 'auto' | 'react-native' | 'expo'; type ResolvedMetroKind = Exclude; type EnvSource = NodeJS.ProcessEnv | Record; -export type { CompanionTunnelScope, MetroBridgeScope } from './client-companion-tunnel-contract.ts'; +export type { + CompanionTunnelScope, + MetroBridgeScope, +} from '../client-companion-tunnel-contract.ts'; type PackageJsonShape = { dependencies?: Record; diff --git a/src/metro-types.ts b/src/metro/metro-types.ts similarity index 94% rename from src/metro-types.ts rename to src/metro/metro-types.ts index 5ecce57d3..2fcbe3ec8 100644 --- a/src/metro-types.ts +++ b/src/metro/metro-types.ts @@ -1,4 +1,4 @@ -import type { SessionRuntimeHints } from './contracts.ts'; +import type { SessionRuntimeHints } from '../contracts.ts'; /** Re-export of {@link SessionRuntimeHints} under the Metro-specific alias used by public API consumers. */ export type MetroRuntimeHints = SessionRuntimeHints; diff --git a/src/metro.ts b/src/metro/metro.ts similarity index 93% rename from src/metro.ts rename to src/metro/metro.ts index 7cd2c9d78..511f65f60 100644 --- a/src/metro.ts +++ b/src/metro/metro.ts @@ -1,4 +1,4 @@ -import type { SessionRuntimeHints } from './contracts.ts'; +import type { SessionRuntimeHints } from '../contracts.ts'; import { buildMetroRuntimeHints, prepareMetroRuntime, @@ -8,10 +8,13 @@ import { type ReloadMetroResult, } from './client-metro.ts'; import { ensureMetroCompanion, stopMetroCompanion } from './client-metro-companion.ts'; -import type { MetroBridgeScope } from './client-companion-tunnel-contract.ts'; -import { resolveRuntimeTransportHints } from './utils/runtime-transport.ts'; -export { buildBundleUrl, normalizeBaseUrl } from './utils/url.ts'; -export type { CompanionTunnelScope, MetroBridgeScope } from './client-companion-tunnel-contract.ts'; +import type { MetroBridgeScope } from '../client-companion-tunnel-contract.ts'; +import { resolveRuntimeTransportHints } from '../utils/runtime-transport.ts'; +export { buildBundleUrl, normalizeBaseUrl } from '../utils/url.ts'; +export type { + CompanionTunnelScope, + MetroBridgeScope, +} from '../client-companion-tunnel-contract.ts'; export type { MetroBridgeDescriptor, diff --git a/src/remote-config-schema.ts b/src/remote-config-schema.ts index c8eb074d3..5840b73f2 100644 --- a/src/remote-config-schema.ts +++ b/src/remote-config-schema.ts @@ -6,7 +6,7 @@ import type { SessionIsolationMode, } from './contracts.ts'; import { PLATFORM_SELECTORS, type DeviceTarget, type PlatformSelector } from './kernel/device.ts'; -import type { MetroPrepareKind } from './client-metro.ts'; +import type { MetroPrepareKind } from './metro/client-metro.ts'; export type RemoteConfigMetroOptions = { metroProjectRoot?: string;