import fs from 'node:fs' import path from 'node:path' export const EXPO_APP_CONFIG_NAMES = [ 'app.config.js', 'app.config.ts', 'app.config.cjs', 'app.config.mjs', 'app.json', ] as const export const RNX_APP_CONFIG_NAMES = [ 'rnx.config.ts', 'rnx.config.js', 'rnx.config.mjs', 'rnx.config.cjs', ] as const export interface ResolvedAppProject { appDir: string configPath: string | null } function firstNamedFile(dir: string, names: readonly string[]): string | null { for (const name of names) { const candidate = path.join(dir, name) try { if (fs.statSync(candidate).isFile()) return candidate } catch {} } return null } export function findExpoAppConfig(dir: string): string | null { return firstNamedFile(dir, EXPO_APP_CONFIG_NAMES) } export function findRNXAppConfig(dir: string): string | null { return firstNamedFile(dir, RNX_APP_CONFIG_NAMES) } export function resolveAppProject(projectRoot: string): ResolvedAppProject | null { const appDir = path.resolve(projectRoot) try { if (!fs.statSync(appDir).isDirectory()) return null } catch { return null } const configPath = findRNXAppConfig(appDir) if ( !configPath && !findExpoAppConfig(appDir) && !fs.existsSync(path.join(appDir, 'package.json')) ) { return null } return { appDir, configPath } }