1import escapeRegExp from 'lodash/escapeRegExp'; 2 3import { FileTransforms } from '../../Transforms.types'; 4import { packagesToKeep, packagesToRename } from './packagesConfig'; 5import { deleteLinesBetweenTags } from './utils'; 6 7function expoModulesBaseTransforms(abiVersion: string): FileTransforms { 8 return { 9 path: [ 10 { 11 find: 'src/main/java', 12 replaceWith: `src/main/java/${abiVersion}`, 13 }, 14 { 15 find: 'src/main/kotlin', 16 replaceWith: `src/main/java/${abiVersion}`, 17 }, 18 { 19 find: 'src/main/AndroidManifest.xml', 20 replaceWith: 'src/main/TemporaryExpoModuleAndroidManifest.xml', 21 }, 22 ], 23 content: [ 24 ...packagesToKeep.map((pkg: string) => ({ 25 paths: ['./src/main/{java,kotlin}/**/*.{java,kt}', './src/main/AndroidManifest.xml'], 26 find: new RegExp(`([, ^(<])${escapeRegExp(pkg)}`, 'g'), 27 replaceWith: `$1temporarydonotversion.${pkg}`, 28 })), 29 ...packagesToRename.map((pkg: string) => ({ 30 paths: ['./src/main/{java,kotlin}/**/*.{java,kt}', './src/main/AndroidManifest.xml'], 31 find: new RegExp(`([, ^(<])${escapeRegExp(pkg)}`, 'g'), 32 replaceWith: `$1${abiVersion}.${pkg}`, 33 })), 34 { 35 paths: ['./src/main/{java,kotlin}/**/*.{java,kt}', './src/main/AndroidManifest.xml'], 36 find: /temporarydonotversion\./g, 37 replaceWith: '', 38 }, 39 { 40 paths: './src/main/{java,kotlin}/**/*.java', 41 find: /\/\/ *EXPO_VERSIONING_NEEDS_EXPOVIEW_R/g, 42 replaceWith: `import ${abiVersion}.host.exp.expoview.R;`, 43 }, 44 { 45 paths: './src/main/{java,kotlin}/**/*.kt', 46 find: /\/\/ *EXPO_VERSIONING_NEEDS_EXPOVIEW_R/g, 47 replaceWith: `import ${abiVersion}.host.exp.expoview.R`, 48 }, 49 ], 50 }; 51} 52 53export function expoModulesTransforms(module: string, abiVersion: string): FileTransforms { 54 const base = expoModulesBaseTransforms(abiVersion); 55 const moduleTransforms: Record<string, FileTransforms> = { 56 'expo-modules-core': { 57 content: [ 58 { 59 // We don't have dedicated gradle files for versioned expo-modules. 60 // For the BuildConfig, replace with unversioned expoview BuildConfig. 61 paths: './**/*.{java,kt}', 62 find: new RegExp(`\\bimport ${abiVersion}\\.expo\\.modules\\.BuildConfig`, 'g'), 63 replaceWith: 'import host.exp.expoview.BuildConfig', 64 }, 65 ], 66 }, 67 'expo-updates': { 68 content: [ 69 { 70 paths: './src/main/{java,kotlin}/expo/modules/updates/UpdatesPackage.kt', 71 transform: (text: string) => 72 deleteLinesBetweenTags( 73 /WHEN_VERSIONING_REMOVE_FROM_HERE/, 74 /WHEN_VERSIONING_REMOVE_TO_HERE/, 75 text 76 ), 77 }, 78 { 79 paths: './src/main/{java,kotlin}/expo/modules/updates/UpdatesPackage.kt', 80 find: 'BuildConfig.EX_UPDATES_NATIVE_DEBUG', 81 replaceWith: 'false', 82 }, 83 ], 84 }, 85 }; 86 const transforms: FileTransforms = moduleTransforms[module] ?? {}; 87 88 return { 89 path: [...(base.path ?? []), ...(transforms.path ?? [])], 90 content: [...(base.content ?? []), ...(transforms.content ?? [])], 91 }; 92} 93