166057438SWojciech Kozyraimport escapeRegExp from 'lodash/escapeRegExp';
266057438SWojciech Kozyra
3*71ea6032SKudo Chienimport type { Package } from '../../Packages';
466057438SWojciech Kozyraimport { FileTransforms } from '../../Transforms.types';
566057438SWojciech Kozyraimport { packagesToKeep, packagesToRename } from './packagesConfig';
666057438SWojciech Kozyraimport { deleteLinesBetweenTags } from './utils';
766057438SWojciech Kozyra
8*71ea6032SKudo Chienfunction expoModulesBaseTransforms(pkg: Package, abiVersion: string): FileTransforms {
966057438SWojciech Kozyra  return {
1066057438SWojciech Kozyra    path: [
1166057438SWojciech Kozyra      {
1266057438SWojciech Kozyra        find: 'src/main/java',
1366057438SWojciech Kozyra        replaceWith: `src/main/java/${abiVersion}`,
1466057438SWojciech Kozyra      },
1566057438SWojciech Kozyra      {
1666057438SWojciech Kozyra        find: 'src/main/kotlin',
1766057438SWojciech Kozyra        replaceWith: `src/main/java/${abiVersion}`,
1866057438SWojciech Kozyra      },
1966057438SWojciech Kozyra      {
2066057438SWojciech Kozyra        find: 'src/main/AndroidManifest.xml',
2166057438SWojciech Kozyra        replaceWith: 'src/main/TemporaryExpoModuleAndroidManifest.xml',
2266057438SWojciech Kozyra      },
2366057438SWojciech Kozyra    ],
2466057438SWojciech Kozyra    content: [
25*71ea6032SKudo Chien      {
26*71ea6032SKudo Chien        // manifest-merger requires the legacy package name to be present in the manifest,
27*71ea6032SKudo Chien        // filling the package name from `pkg.androidPackageNamespace`.
28*71ea6032SKudo Chien        paths: './src/main/AndroidManifest.xml',
29*71ea6032SKudo Chien        find: /^(<manifest)([\w\s>])/,
30*71ea6032SKudo Chien        replaceWith: `$1 package="${pkg.androidPackageNamespace}"$2`,
31*71ea6032SKudo Chien      },
3266057438SWojciech Kozyra      ...packagesToKeep.map((pkg: string) => ({
3366057438SWojciech Kozyra        paths: ['./src/main/{java,kotlin}/**/*.{java,kt}', './src/main/AndroidManifest.xml'],
3466057438SWojciech Kozyra        find: new RegExp(`([, ^(<])${escapeRegExp(pkg)}`, 'g'),
3566057438SWojciech Kozyra        replaceWith: `$1temporarydonotversion.${pkg}`,
3666057438SWojciech Kozyra      })),
3766057438SWojciech Kozyra      ...packagesToRename.map((pkg: string) => ({
3866057438SWojciech Kozyra        paths: ['./src/main/{java,kotlin}/**/*.{java,kt}', './src/main/AndroidManifest.xml'],
3966057438SWojciech Kozyra        find: new RegExp(`([, ^(<])${escapeRegExp(pkg)}`, 'g'),
4066057438SWojciech Kozyra        replaceWith: `$1${abiVersion}.${pkg}`,
4166057438SWojciech Kozyra      })),
4266057438SWojciech Kozyra      {
4366057438SWojciech Kozyra        paths: ['./src/main/{java,kotlin}/**/*.{java,kt}', './src/main/AndroidManifest.xml'],
4466057438SWojciech Kozyra        find: /temporarydonotversion\./g,
4566057438SWojciech Kozyra        replaceWith: '',
4666057438SWojciech Kozyra      },
4766057438SWojciech Kozyra      {
4866057438SWojciech Kozyra        paths: './src/main/{java,kotlin}/**/*.java',
4966057438SWojciech Kozyra        find: /\/\/ *EXPO_VERSIONING_NEEDS_EXPOVIEW_R/g,
5066057438SWojciech Kozyra        replaceWith: `import ${abiVersion}.host.exp.expoview.R;`,
5166057438SWojciech Kozyra      },
5266057438SWojciech Kozyra      {
5366057438SWojciech Kozyra        paths: './src/main/{java,kotlin}/**/*.kt',
5466057438SWojciech Kozyra        find: /\/\/ *EXPO_VERSIONING_NEEDS_EXPOVIEW_R/g,
5566057438SWojciech Kozyra        replaceWith: `import ${abiVersion}.host.exp.expoview.R`,
5666057438SWojciech Kozyra      },
5766057438SWojciech Kozyra    ],
5866057438SWojciech Kozyra  };
5966057438SWojciech Kozyra}
6066057438SWojciech Kozyra
61*71ea6032SKudo Chienexport function expoModulesTransforms(pkg: Package, abiVersion: string): FileTransforms {
62*71ea6032SKudo Chien  const module = pkg.packageName;
63*71ea6032SKudo Chien  const base = expoModulesBaseTransforms(pkg, abiVersion);
6466057438SWojciech Kozyra  const moduleTransforms: Record<string, FileTransforms> = {
656239b2d0SKudo Chien    'expo-modules-core': {
666239b2d0SKudo Chien      content: [
676239b2d0SKudo Chien        {
686239b2d0SKudo Chien          // We don't have dedicated gradle files for versioned expo-modules.
696239b2d0SKudo Chien          // For the BuildConfig, replace with unversioned expoview BuildConfig.
706239b2d0SKudo Chien          paths: './**/*.{java,kt}',
716239b2d0SKudo Chien          find: new RegExp(`\\bimport ${abiVersion}\\.expo\\.modules\\.BuildConfig`, 'g'),
726239b2d0SKudo Chien          replaceWith: 'import host.exp.expoview.BuildConfig',
736239b2d0SKudo Chien        },
746239b2d0SKudo Chien      ],
756239b2d0SKudo Chien    },
7666057438SWojciech Kozyra    'expo-updates': {
7766057438SWojciech Kozyra      content: [
7866057438SWojciech Kozyra        {
7966057438SWojciech Kozyra          paths: './src/main/{java,kotlin}/expo/modules/updates/UpdatesPackage.kt',
8066057438SWojciech Kozyra          transform: (text: string) =>
8166057438SWojciech Kozyra            deleteLinesBetweenTags(
8266057438SWojciech Kozyra              /WHEN_VERSIONING_REMOVE_FROM_HERE/,
8366057438SWojciech Kozyra              /WHEN_VERSIONING_REMOVE_TO_HERE/,
8466057438SWojciech Kozyra              text
8566057438SWojciech Kozyra            ),
8666057438SWojciech Kozyra        },
876239b2d0SKudo Chien        {
88*71ea6032SKudo Chien          paths: './**/*.kt',
89*71ea6032SKudo Chien          find: /BuildConfig\.(EX_UPDATES_NATIVE_DEBUG|EX_UPDATES_ANDROID_DELAY_LOAD_APP)/g,
906239b2d0SKudo Chien          replaceWith: 'false',
916239b2d0SKudo Chien        },
9266057438SWojciech Kozyra      ],
9366057438SWojciech Kozyra    },
9466057438SWojciech Kozyra  };
9566057438SWojciech Kozyra  const transforms: FileTransforms = moduleTransforms[module] ?? {};
9666057438SWojciech Kozyra
9766057438SWojciech Kozyra  return {
9866057438SWojciech Kozyra    path: [...(base.path ?? []), ...(transforms.path ?? [])],
9966057438SWojciech Kozyra    content: [...(base.content ?? []), ...(transforms.content ?? [])],
10066057438SWojciech Kozyra  };
10166057438SWojciech Kozyra}
102