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 // `dataComponenetsByName[@"ABI44_0_0RCTView"];` -> `dataComponenetsByName[@"RCTView"];` 96 // the RCTComponentData internal view name is not versioned 97 find: new RegExp(`(RCTComponentData .+)\\[@"${prefix}(RCT.+)"\\];`, 'g'), 98 replaceWith: '$1[@"$2"];', 99 }, 100 { 101 paths: ['**/sensor/**', 'NativeProxy.mm'], 102 find: /\b(ReanimatedSensor)/g, 103 replaceWith: `${prefix}$1`, 104 }, 105 { 106 paths: 'REANodesManager.m', 107 find: /\b(ComponentUpdate)\b/g, 108 replaceWith: `${prefix}$1`, 109 }, 110 { 111 // versioning reacthermes import 112 paths: 'NativeProxy.mm', 113 find: new RegExp( 114 `(#if\\s+__has_include\\(|#import\\s+)<reacthermes\\/${prefix}HermesExecutorFactory.h>`, 115 'g' 116 ), 117 replaceWith: `$1<${prefix}reacthermes/${prefix}HermesExecutorFactory.h>`, 118 }, 119 { 120 paths: '**/*.{h,mm}', 121 find: new RegExp(`${prefix}(REACT_NATIVE_MINOR_VERSION)`, 'g'), 122 replaceWith: '$1', 123 }, 124 ], 125 }, 126 'react-native-gesture-handler': { 127 path: [ 128 { 129 find: /\bRN(\w+?)\.(h|m|mm)/, 130 replaceWith: `${prefix}RN$1.$2`, 131 }, 132 ], 133 content: [ 134 { 135 // `RNG*` symbols are already prefixed at this point, 136 // but there are some new symbols in RNGH that don't have "G". 137 paths: '*.{h,m,mm}', 138 find: /\bRN(\w+?)\b/g, 139 replaceWith: `${prefix}RN$1`, 140 }, 141 { 142 paths: 'RNGestureHandler.m', 143 find: /UIGestureRecognizer \(GestureHandler\)/g, 144 replaceWith: `UIGestureRecognizer (${prefix}GestureHandler)`, 145 }, 146 { 147 paths: 'RNGestureHandler.m', 148 find: /gestureHandler/g, 149 replaceWith: `${prefix}gestureHandler`, 150 }, 151 ], 152 }, 153 'react-native-pager-view': { 154 path: [ 155 { 156 find: /(ReactNativePageView|ReactViewPagerManager)\.(h|m)/, 157 replaceWith: `${prefix}$1.$2`, 158 }, 159 ], 160 content: [ 161 { 162 find: `${prefix}JKBigInteger.h`, 163 replaceWith: `JKBigInteger.h`, 164 }, 165 ], 166 }, 167 'react-native-screens': { 168 content: [], 169 }, 170 '@shopify/react-native-skia': { 171 path: [ 172 { 173 find: /\b(DisplayLink|PlatformContext|SkiaDrawView|SkiaDrawViewManager|SkiaManager|SkiaUIView|SkiaPictureViewManager)/g, 174 replaceWith: `${prefix}$1`, 175 }, 176 ], 177 content: [ 178 { 179 paths: '*.h', 180 find: new RegExp(`ReactCommon/(?!${prefix})`, 'g'), 181 replaceWith: `ReactCommon/${prefix}`, 182 }, 183 { 184 find: /\b(DisplayLink|PlatformContext|SkiaDrawView|SkiaDrawViewManager|SkiaManager|RNJsi|SkiaUIView|SkiaPictureViewManager)/g, 185 replaceWith: `${prefix}$1`, 186 }, 187 { 188 // The module name in bridge should be unversioned `RNSkia` 189 paths: 'SkiaDrawViewManager.mm', 190 find: new RegExp(`(\\smoduleForName:@")${prefix}(RNSkia")`, 'g'), 191 replaceWith: '$1$2', 192 }, 193 { 194 // __typename__ exposed to js should be unversioned 195 find: new RegExp( 196 `(\\bJSI_PROPERTY_GET\\(__typename__\\) \\{\\n\\s*return jsi::String::createFromUtf8\\(runtime, ")${prefix}(.*")`, 197 'gm' 198 ), 199 replaceWith: '$1$2', 200 }, 201 ], 202 }, 203 'react-native-svg': { 204 content: [ 205 { 206 find: new RegExp(`\\b(${prefix}RCTConvert)\\+${prefix}(RNSVG\.h)`, 'g'), 207 replaceWith: `$1+$2`, 208 }, 209 { 210 paths: 'RNSVGRenderable.mm', 211 find: /\b(saturate)\(/g, 212 replaceWith: `${prefix}$1(`, 213 }, 214 { 215 paths: 'RNSVGPainter.mm', 216 find: /\b(PatternFunction)\b/g, 217 replaceWith: `${prefix}$1`, 218 }, 219 { 220 paths: 'RNSVGFontData.mm', 221 find: /\b(AbsoluteFontWeight|bolder|lighter|nearestFontWeight)\(/gi, 222 replaceWith: `${prefix}$1(`, 223 }, 224 { 225 paths: 'RNSVGTSpan.mm', 226 find: new RegExp(`\\b(${prefix}RNSVGTopAlignedLabel\\s*\\*\\s*label)\\b`, 'gi'), 227 replaceWith: 'static $1', 228 }, 229 { 230 paths: 'RNSVGMarker.mm', 231 find: /\b(deg2rad)\b/g, 232 replaceWith: `${prefix}$1`, 233 }, 234 { 235 paths: 'RNSVGMarkerPosition.mm', 236 find: /\b(PathIsDone|rad2deg|SlopeAngleRadians|CurrentAngle|subtract|ExtractPathElementFeatures|UpdateFromPathElement)\b/g, 237 replaceWith: `${prefix}$1`, 238 }, 239 { 240 paths: 'RNSVGMarkerPosition.mm', 241 find: /\b(positions_|element_index_|origin_|subpath_start_|in_slope_|out_slope_|auto_start_reverse_)\b/g, 242 replaceWith: `${prefix}$1`, 243 }, 244 { 245 paths: 'RNSVGPathMeasure.mm', 246 find: /\b(distance|subdivideBezierAtT)\b/g, 247 replaceWith: `${prefix}$1`, 248 }, 249 ], 250 }, 251 }; 252} 253