1import { FileTransforms } from '../../../Transforms.types';
2
3type Config = {
4  [key: string]: FileTransforms;
5};
6
7export default function vendoredModulesTransformsFactory(prefix: string): Config {
8  return {
9    '@stripe/stripe-react-native': {
10      content: [
11        {
12          paths: '',
13          find: /\.reactFocus\(/,
14          replaceWith: `.${prefix.toLowerCase()}ReactFocus(`,
15        },
16      ],
17    },
18    'lottie-react-native': {
19      content: [
20        {
21          paths: 'ContainerView.swift',
22          find: /\breactSetFrame/g,
23          replaceWith: `${prefix.toLowerCase()}ReactSetFrame`,
24        },
25      ],
26    },
27    'react-native-webview': {
28      content: [
29        {
30          paths: 'RNCWebView.m',
31          find: new RegExp(`#import "objc/${prefix}runtime\\.h"`, ''),
32          replaceWith: '#import "objc/runtime.h"',
33        },
34        {
35          paths: 'RNCWebView.m',
36          find: /\b(_SwizzleHelperWK)\b/g,
37          replaceWith: `${prefix}$1`,
38        },
39        {
40          // see issue: https://github.com/expo/expo/issues/4463
41          paths: 'RNCWebView.m',
42          find: /MessageHandlerName = @"ABI\d+_\d+_\d+ReactNativeWebView";/,
43          replaceWith: `MessageHandlerName = @"ReactNativeWebView";`,
44        },
45        {
46          paths: 'RNCWebView.m',
47          find: 'NSString *const CUSTOM_SELECTOR',
48          replaceWith: 'static NSString *const CUSTOM_SELECTOR',
49        },
50      ],
51    },
52    'react-native-reanimated': {
53      path: [
54        {
55          find: /\b(ReanimatedSensor)/g,
56          replaceWith: `${prefix}$1`,
57        },
58      ],
59      content: [
60        {
61          find: 'namespace reanimated',
62          replaceWith: `namespace ${prefix}reanimated`,
63        },
64        {
65          find: /\breanimated::/g,
66          replaceWith: `${prefix}reanimated::`,
67        },
68        {
69          paths: '*.h',
70          find: new RegExp(`ReactCommon/(?!${prefix})`, 'g'),
71          replaceWith: `ReactCommon/${prefix}`,
72        },
73        {
74          paths: '**/Transitioning/*.m',
75          find: `RCTConvert+${prefix}REATransition.h`,
76          replaceWith: 'RCTConvert+REATransition.h',
77        },
78        {
79          paths: 'REAUIManager.{h,mm}',
80          find: /(blockSetter|_toBeRemovedRegister|_parentMapper|_animationsManager|_scheduler)/g,
81          replaceWith: `${prefix}$1`,
82        },
83        {
84          paths: 'REATransitionAnimation.m',
85          find: /(SimAnimationDragCoefficient)\(/g,
86          replaceWith: `${prefix}$1(`,
87        },
88        {
89          paths: 'REAAnimationsManager.m',
90          find: /^(#import <.*React)\/UIView\+(.+)\.h>/gm,
91          replaceWith: `$1/${prefix}UIView+$2.h>`,
92        },
93        {
94          paths: 'REAAnimationsManager.m',
95          find: `UIView+${prefix}React.h`,
96          replaceWith: `UIView+React.h`,
97        },
98        {
99          paths: 'REAAnimationsManager.m',
100          // `dataComponenetsByName[@"ABI44_0_0RCTView"];` -> `dataComponenetsByName[@"RCTView"];`
101          // the RCTComponentData internal view name is not versioned
102          find: new RegExp(`(RCTComponentData .+)\\[@"${prefix}(RCT.+)"\\];`, 'g'),
103          replaceWith: '$1[@"$2"];',
104        },
105        {
106          paths: ['**/sensor/**', 'NativeProxy.mm'],
107          find: /\b(ReanimatedSensor)/g,
108          replaceWith: `${prefix}$1`,
109        },
110        {
111          paths: 'REANodesManager.m',
112          find: /\b(ComponentUpdate)\b/g,
113          replaceWith: `${prefix}$1`,
114        },
115      ],
116    },
117    'react-native-gesture-handler': {
118      path: [
119        {
120          find: /\bRN(\w+?)\.(h|m|mm)/,
121          replaceWith: `${prefix}RN$1.$2`,
122        },
123      ],
124      content: [
125        {
126          find: `UIView+${prefix}React.h`,
127          replaceWith: `${prefix}UIView+React.h`,
128        },
129        {
130          // `RNG*` symbols are already prefixed at this point,
131          // but there are some new symbols in RNGH that don't have "G".
132          paths: '*.{h,m,mm}',
133          find: /\bRN(\w+?)\b/g,
134          replaceWith: `${prefix}RN$1`,
135        },
136      ],
137    },
138    'react-native-pager-view': {
139      path: [
140        {
141          find: /(ReactNativePageView|ReactViewPagerManager)\.(h|m)/,
142          replaceWith: `${prefix}$1.$2`,
143        },
144      ],
145      content: [
146        {
147          find: `UIView+${prefix}React.h`,
148          replaceWith: `${prefix}UIView+React.h`,
149        },
150        {
151          find: `${prefix}JKBigInteger.h`,
152          replaceWith: `JKBigInteger.h`,
153        },
154      ],
155    },
156    '@react-native-segmented-control/segmented-control': {
157      content: [
158        {
159          find: `UIView+${prefix}React.h`,
160          replaceWith: `${prefix}UIView+React.h`,
161        },
162      ],
163    },
164    'react-native-screens': {
165      content: [],
166    },
167    '@shopify/react-native-skia': {
168      path: [
169        {
170          find: /\b(DisplayLink|PlatformContext|SkiaDrawView|SkiaDrawViewManager|SkiaManager)/g,
171          replaceWith: `${prefix}$1`,
172        },
173      ],
174      content: [
175        {
176          paths: '*.h',
177          find: new RegExp(`ReactCommon/(?!${prefix})`, 'g'),
178          replaceWith: `ReactCommon/${prefix}`,
179        },
180        {
181          find: /\b(DisplayLink|PlatformContext|SkiaDrawView|SkiaDrawViewManager|SkiaManager|RNJsi)/g,
182          replaceWith: `${prefix}$1`,
183        },
184        {
185          // The module name in bridge should be unversioned `RNSkia`
186          paths: 'SkiaDrawViewManager.mm',
187          find: new RegExp(`(\\smoduleForName:@")${prefix}(RNSkia")`, 'g'),
188          replaceWith: '$1$2',
189        },
190        {
191          // __typename__ exposed to js should be unversioned
192          find: new RegExp(
193            `(\\bJSI_PROPERTY_GET\\(__typename__\\) \\{\\n\\s*return jsi::String::createFromUtf8\\(runtime, ")${prefix}(.*")`,
194            'gm'
195          ),
196          replaceWith: '$1$2',
197        },
198      ],
199    },
200  };
201}
202