1import escapeRegExp from 'lodash/escapeRegExp';
2
3import { FileTransforms } from '../../../Transforms.types';
4import { packagesToKeep, packagesToRename } from '../packagesConfig';
5import { deleteLinesBetweenTags } from '../utils';
6
7export function expoviewTransforms(abiVersion: string): FileTransforms {
8  const sdkVersion = abiVersion.replace(/abi(\d+)_0_0/, 'sdk$1');
9  return {
10    path: [
11      {
12        find: 'src/main/java/versioned',
13        replaceWith: `src/main/java/${abiVersion}`,
14      },
15      {
16        find: 'src/main/java/com',
17        replaceWith: `src/main/java/${abiVersion}/com`,
18      },
19    ],
20    content: [
21      {
22        paths: './build.gradle',
23        find: /\/\/ WHEN_VERSIONING_REPLACE_WITH_DEPENDENCIES/g,
24        replaceWith: 'implementation project(":expoview")',
25      },
26      {
27        paths: ['./build.gradle', './src/main/AndroidManifest.xml'],
28        transform: (text: string) =>
29          deleteLinesBetweenTags(
30            /WHEN_VERSIONING_REMOVE_FROM_HERE/,
31            /WHEN_VERSIONING_REMOVE_TO_HERE/,
32            text
33          ),
34      },
35      {
36        paths: './build.gradle',
37        find: /.*WHEN_VERSIONING_UNCOMMENT_(TO_HERE|FROM_HERE).*\n/g,
38        replaceWith: '',
39      },
40      {
41        paths: './build.gradle',
42        find: `useVendoredModulesForExpoView('unversioned')`,
43        replaceWith: `useVendoredModulesForExpoView('${sdkVersion}')`,
44      },
45      {
46        paths: './src/main/AndroidManifest.xml',
47        find: /host\.exp\.expoview/g,
48        replaceWith: `${abiVersion}.host.exp.expoview`,
49      },
50      {
51        paths: './src/main/AndroidManifest.xml',
52        find: /versioned\.host\.exp\.exponent/g,
53        replaceWith: `${abiVersion}.host.exp.exponent`,
54      },
55      ...packagesToKeep.map((pkg: string) => ({
56        paths: './src/main/java/**/*.{java,kt}',
57        find: new RegExp(`([, ^(<])${escapeRegExp(pkg)}`, 'g'),
58        replaceWith: `$1temporarydonotversion.${pkg}`,
59      })),
60      {
61        paths: './src/main/java/**/*.{java,kt}',
62        find: /import (static |)expo\./g,
63        replaceWith: `import $1${abiVersion}.expo.`,
64      },
65      {
66        paths: './src/main/java/**/*.{java,kt}',
67        find: /versioned\.host\.exp\.exponent/g,
68        replaceWith: `${abiVersion}.host.exp.exponent`,
69      },
70      ...packagesToRename.map((pkg: string) => ({
71        paths: './src/main/java/**/*.{java,kt}',
72        find: new RegExp(`([, ^(<])${escapeRegExp(pkg)}`, 'g'),
73        replaceWith: `$1${abiVersion}.${pkg}`,
74      })),
75      {
76        paths: `./src/main/java/**/*.{java,kt}`,
77        find: /temporarydonotversion\./g,
78        replaceWith: '',
79      },
80      {
81        paths: './**/reanimated/NativeProxy.java',
82        find: /\b(com\.swmansion\.)/g,
83        replaceWith: `${abiVersion}.$1`,
84      },
85      {
86        paths: './**/ExpoTurboPackage.kt',
87        find: /\bimport (com\.swmansion\.)/g,
88        replaceWith: `import ${abiVersion}.$1`,
89      },
90    ],
91  };
92}
93