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-updates': {
57      content: [
58        {
59          paths: './src/main/{java,kotlin}/expo/modules/updates/UpdatesPackage.kt',
60          transform: (text: string) =>
61            deleteLinesBetweenTags(
62              /WHEN_VERSIONING_REMOVE_FROM_HERE/,
63              /WHEN_VERSIONING_REMOVE_TO_HERE/,
64              text
65            ),
66        },
67      ],
68    },
69  };
70  const transforms: FileTransforms = moduleTransforms[module] ?? {};
71
72  return {
73    path: [...(base.path ?? []), ...(transforms.path ?? [])],
74    content: [...(base.content ?? []), ...(transforms.content ?? [])],
75  };
76}
77