const { getDefaultConfig } = require('expo/metro-config'); const { withNativewind } = require('nativewind/metro'); const path = require('path'); // Find the project and workspace directories const projectRoot = __dirname; const monorepoRoot = path.resolve(projectRoot, '../..'); const config = getDefaultConfig(projectRoot); // 1. Watch all files within the monorepo (include default watchFolders) config.watchFolders = [...(config.watchFolders || []), monorepoRoot]; // 2. Let Metro know where to resolve packages from config.resolver.nodeModulesPaths = [ path.resolve(projectRoot, 'node_modules'), path.resolve(monorepoRoot, 'node_modules'), ]; // 3. Enable symlink support for pnpm config.resolver.unstable_enableSymlinks = true; // 4. Handle .js imports that should resolve to .ts files (NodeNext compatibility) // TypeScript with moduleResolution: NodeNext requires .js extensions in imports // even for .ts source files. Metro needs help resolving these correctly. config.resolver.resolveRequest = (context, moduleName, platform) => { if (moduleName.startsWith('.') && moduleName.endsWith('.js')) { const tsModuleName = moduleName.replace(/\.js$/, '.ts'); try { return context.resolveRequest(context, tsModuleName, platform); } catch { // Fall through to default resolution if .ts doesn't exist } } return context.resolveRequest(context, moduleName, platform); }; module.exports = withNativewind(config, { input: './global.css' });