1eeffdb10STomasz Sapetaimport chalk from 'chalk'; 2eeffdb10STomasz Sapeta 3eeffdb10STomasz Sapetaimport { TransformPipeline } from '.'; 4eeffdb10STomasz Sapeta 5eeffdb10STomasz Sapetaexport function postTransforms(versionName: string): TransformPipeline { 6eeffdb10STomasz Sapeta return { 7eeffdb10STomasz Sapeta logHeader(filePath: string) { 8eeffdb10STomasz Sapeta console.log(`Post-transforming ${chalk.magenta(filePath)}:`); 9eeffdb10STomasz Sapeta }, 10eeffdb10STomasz Sapeta transforms: [ 11eeffdb10STomasz Sapeta // react-native 12eeffdb10STomasz Sapeta { 13eeffdb10STomasz Sapeta paths: ['RCTRedBox.m', 'RCTLog.mm'], 14eeffdb10STomasz Sapeta replace: /#if (ABI\d+_\d+_\d+)RCT_DEBUG/g, 15eeffdb10STomasz Sapeta with: '#if $1RCT_DEV', 16eeffdb10STomasz Sapeta }, 17eeffdb10STomasz Sapeta { 18eeffdb10STomasz Sapeta paths: ['NSTextStorage+FontScaling.h', 'NSTextStorage+FontScaling.m'], 19eeffdb10STomasz Sapeta replace: /NSTextStorage \(FontScaling\)/, 20eeffdb10STomasz Sapeta with: `NSTextStorage (${versionName}FontScaling)`, 21eeffdb10STomasz Sapeta }, 22eeffdb10STomasz Sapeta { 23eeffdb10STomasz Sapeta paths: [ 24eeffdb10STomasz Sapeta 'NSTextStorage+FontScaling.h', 25eeffdb10STomasz Sapeta 'NSTextStorage+FontScaling.m', 26eeffdb10STomasz Sapeta 'RCTTextShadowView.m', 27eeffdb10STomasz Sapeta ], 28eeffdb10STomasz Sapeta replace: /\b(scaleFontSizeToFitSize|scaleFontSizeWithRatio|compareToSize)\b/g, 29eeffdb10STomasz Sapeta with: `${versionName.toLowerCase()}_rct_$1`, 30eeffdb10STomasz Sapeta }, 31eeffdb10STomasz Sapeta { 32eeffdb10STomasz Sapeta paths: 'RCTWebView.m', 33eeffdb10STomasz Sapeta replace: /@"ABI\d+_\d+_\d+React-js-navigation"/, 34eeffdb10STomasz Sapeta with: '@"react-js-navigation"', 35eeffdb10STomasz Sapeta }, 36eeffdb10STomasz Sapeta { 37eeffdb10STomasz Sapeta replace: new RegExp(`FB${versionName}ReactNativeSpec`, 'g'), 38eeffdb10STomasz Sapeta with: 'FBReactNativeSpec', 39eeffdb10STomasz Sapeta }, 40eeffdb10STomasz Sapeta { 41eeffdb10STomasz Sapeta replace: new RegExp('\\b(Native\\w+Spec)\\b', 'g'), 42eeffdb10STomasz Sapeta with: `${versionName}$1`, 43eeffdb10STomasz Sapeta }, 44eeffdb10STomasz Sapeta { 45eeffdb10STomasz Sapeta paths: 'RCTInspectorPackagerConnection.m', 46eeffdb10STomasz Sapeta replace: /\b(RECONNECT_DELAY_MS)\b/g, 47eeffdb10STomasz Sapeta with: `${versionName}$1`, 48eeffdb10STomasz Sapeta }, 49eeffdb10STomasz Sapeta { 50eeffdb10STomasz Sapeta paths: 'RCTView.m', 51eeffdb10STomasz Sapeta replace: /\b(SwitchAccessibilityTrait)\b/g, 52eeffdb10STomasz Sapeta with: `${versionName}$1`, 53eeffdb10STomasz Sapeta }, 54eeffdb10STomasz Sapeta { 55eeffdb10STomasz Sapeta paths: 'RCTSpringAnimation.m', 56eeffdb10STomasz Sapeta replace: /\b(MAX_DELTA_TIME)\b/g, 57eeffdb10STomasz Sapeta with: `${versionName}$1`, 58eeffdb10STomasz Sapeta }, 59eeffdb10STomasz Sapeta { 60eeffdb10STomasz Sapeta paths: 'ModuleRegistry.cpp', 61eeffdb10STomasz Sapeta replace: /(std::string normalizeName\(std::string name\) \{)/, 62eeffdb10STomasz Sapeta with: `$1\n if (name.compare(0, ${versionName.length}, "${versionName}") == 0) {\n name = name.substr(${versionName.length});\n }\n`, 63eeffdb10STomasz Sapeta }, 64eeffdb10STomasz Sapeta { 65eeffdb10STomasz Sapeta paths: 'ModuleRegistry.cpp', 66eeffdb10STomasz Sapeta replace: /(\(name\.compare\(\d+, \d+, ")([^"]+)(RCT"\))/, 67eeffdb10STomasz Sapeta with: '$1$3', 68eeffdb10STomasz Sapeta }, 692239438eSTomasz Sapeta { 702239438eSTomasz Sapeta paths: ['RCTSRWebSocket.h', 'UIView+Private.h'], 712239438eSTomasz Sapeta replace: /@interface (\w+) \((CertificateAdditions|Private)\)/g, 72a272999eSBartosz Kaszubowski with: `@interface $1 (${versionName}$2)`, 732239438eSTomasz Sapeta }, 740e34784dSTomasz Sapeta { 750e34784dSTomasz Sapeta // Fix prefixing imports from React-bridging 760e34784dSTomasz Sapeta paths: 'ReactCommon', 770e34784dSTomasz Sapeta replace: new RegExp(`(React)\\/${versionName}(bridging)\\/`, 'g'), 780e34784dSTomasz Sapeta with: `$1/$2/${versionName}`, 790e34784dSTomasz Sapeta }, 8006b29f12STomasz Sapeta { 81*453643feSKudo Chien // Files inside fabric directory used to have nested import paths and we transformed it wrong. 82*453643feSKudo Chien // This rules are here to fix it. 83*453643feSKudo Chien // e.g. `#include <react/debug/react_native_assert.h>` 84*453643feSKudo Chien // -> `#include <ABI49_0_0React/ABI49_0_0debug/ABI49_0_0React_native_assert.h>` 85*453643feSKudo Chien // -> `#include <ABI49_0_0React/debug/ABI49_0_0React_native_assert.h>` 86*453643feSKudo Chien paths: ['ReactCommon/react/', 'React/'], 87*453643feSKudo Chien replace: new RegExp( 88*453643feSKudo Chien `(^(#include|#import) <${versionName}React)/${versionName}([^/\\n]+?)/(${versionName})?([^/\\n]+?\\.h>$)`, 89*453643feSKudo Chien 'gm' 90*453643feSKudo Chien ), 91*453643feSKudo Chien with: `$1/$3/${versionName}$5`, 92*453643feSKudo Chien }, 93*453643feSKudo Chien { 94*453643feSKudo Chien // Same as above but for difference nested level. 95*453643feSKudo Chien paths: ['Libraries/AppDelegate/', 'ReactCommon/react/', 'React/'], 96*453643feSKudo Chien replace: new RegExp( 97*453643feSKudo Chien `(^(#include|#import) <${versionName}React)/${versionName}([^/\\n]+?)\\/([^/\\n]+?)\\/(${versionName})?([^/\\n]+?\\.h>$)`, 98*453643feSKudo Chien 'gm' 99*453643feSKudo Chien ), 100*453643feSKudo Chien with: `$1/$3/$4/${versionName}$6`, 101*453643feSKudo Chien }, 102*453643feSKudo Chien { 10306b29f12STomasz Sapeta // Codegen adds methods to `RCTCxxConvert` that start with `JS_`, which refer to `JS::` 10406b29f12STomasz Sapeta // C++ namespace that we prefix, so these methods must be prefixed as well. 10506b29f12STomasz Sapeta paths: ['FBReactNativeSpec.h', 'FBReactNativeSpec-generated.mm'], 10606b29f12STomasz Sapeta replace: /(RCTManagedPointer \*\))(JS_)/g, 10706b29f12STomasz Sapeta with: `$1${versionName}$2`, 10806b29f12STomasz Sapeta }, 109eeffdb10STomasz Sapeta 110eeffdb10STomasz Sapeta // Universal modules 111eeffdb10STomasz Sapeta { 112eeffdb10STomasz Sapeta paths: `UniversalModules/${versionName}EXScoped`, 113eeffdb10STomasz Sapeta replace: /(EXScopedABI\d+_\d+_\d+ReactNative)/g, 114eeffdb10STomasz Sapeta with: 'EXScopedReactNative', 115eeffdb10STomasz Sapeta }, 116eeffdb10STomasz Sapeta { 117eeffdb10STomasz Sapeta paths: `${versionName}EXFileSystem`, 118eeffdb10STomasz Sapeta replace: new RegExp(`NSData\\+${versionName}EXFileSystem\\.h`, 'g'), 119eeffdb10STomasz Sapeta with: `${versionName}NSData+EXFileSystem.h`, 120eeffdb10STomasz Sapeta }, 121eeffdb10STomasz Sapeta { 12250661f5cSWill Schurman paths: [ 12350661f5cSWill Schurman `${versionName}EXNotifications`, 12450661f5cSWill Schurman `${versionName}EXUpdates`, 1250dfbbd2aSWill Schurman `${versionName}EXJSONUtils`, 12650661f5cSWill Schurman ], 1274e322e7cSTomasz Sapeta replace: new RegExp( 1280dfbbd2aSWill Schurman `NSDictionary\\+${versionName}(EXNotificationsVerifyingClass|EXJSONUtils)\\.h`, 1294e322e7cSTomasz Sapeta 'g' 1304e322e7cSTomasz Sapeta ), 1314e322e7cSTomasz Sapeta with: `${versionName}NSDictionary+$1.h`, 132eeffdb10STomasz Sapeta }, 133941f41afSTomasz Sapeta { 1340e34784dSTomasz Sapeta paths: [ 1350e34784dSTomasz Sapeta `${versionName}EXNotifications`, 1360e34784dSTomasz Sapeta `${versionName}EXAppState`, 1370e34784dSTomasz Sapeta `${versionName}EXVersionManager`, 1380e34784dSTomasz Sapeta ], 139941f41afSTomasz Sapeta replace: new RegExp(`EXModuleRegistryHolder${versionName}React`, 'g'), 140941f41afSTomasz Sapeta with: 'EXModuleRegistryHolderReact', 141941f41afSTomasz Sapeta }, 142941f41afSTomasz Sapeta { 143941f41afSTomasz Sapeta // Versioned ExpoKit has to use versioned modules provider 144941f41afSTomasz Sapeta paths: 'EXVersionManager.mm', 145941f41afSTomasz Sapeta replace: /@"(ExpoModulesProvider)"/, 146941f41afSTomasz Sapeta with: `@"${versionName}$1"`, 147941f41afSTomasz Sapeta }, 1489eae8a6aSKudo Chien { 1499eae8a6aSKudo Chien paths: `${versionName}EXVersionManager.mm`, 1509eae8a6aSKudo Chien replace: `#import <${versionName}Reacthermes/HermesExecutorFactory.h>`, 1519eae8a6aSKudo Chien with: `#import <${versionName}reacthermes/${versionName}HermesExecutorFactory.h>`, 1529eae8a6aSKudo Chien }, 153eeffdb10STomasz Sapeta 154eeffdb10STomasz Sapeta // react-native-maps 155eeffdb10STomasz Sapeta { 156eeffdb10STomasz Sapeta paths: 'AIRMapWMSTile', 157eeffdb10STomasz Sapeta replace: /\b(TileOverlay)\b/g, 158eeffdb10STomasz Sapeta with: `${versionName}$1`, 159eeffdb10STomasz Sapeta }, 160eeffdb10STomasz Sapeta { 161eeffdb10STomasz Sapeta paths: 'AIRGoogleMapWMSTile', 162eeffdb10STomasz Sapeta replace: /\b(WMSTileOverlay)\b/g, 163eeffdb10STomasz Sapeta with: `${versionName}$1`, 164eeffdb10STomasz Sapeta }, 165*453643feSKudo Chien { 166*453643feSKudo Chien paths: 'AIRGoogleMap', 167*453643feSKudo Chien replace: new RegExp(`^#import "${versionName}(GMU.+?\\.h)"`, 'gm'), 168*453643feSKudo Chien with: `#import <Google-Maps-iOS-Utils/$1>`, 169*453643feSKudo Chien }, 170eeffdb10STomasz Sapeta 171eeffdb10STomasz Sapeta // react-native-webview 172eeffdb10STomasz Sapeta { 1738523eba6SEric Samelson paths: 'RNCWebView.m', 1748523eba6SEric Samelson replace: new RegExp(`#import "objc/${versionName}runtime\\.h"`, ''), 1758523eba6SEric Samelson with: '#import "objc/runtime.h"', 1768523eba6SEric Samelson }, 1778523eba6SEric Samelson { 1788523eba6SEric Samelson paths: 'RNCWebView.m', 1798523eba6SEric Samelson replace: /\b(_SwizzleHelperWK)\b/g, 1808523eba6SEric Samelson with: `${versionName}$1`, 1818523eba6SEric Samelson }, 1828523eba6SEric Samelson { 1838523eba6SEric Samelson // see issue: https://github.com/expo/expo/issues/4463 1848523eba6SEric Samelson paths: 'RNCWebView.m', 1858523eba6SEric Samelson replace: /MessageHandlerName = @"ABI\d+_\d+_\d+ReactNativeWebView";/, 1868523eba6SEric Samelson with: `MessageHandlerName = @"ReactNativeWebView";`, 187eeffdb10STomasz Sapeta }, 188b5228228STomasz Sapeta { 189b5228228STomasz Sapeta paths: 'EXVersionManager.mm', 190b5228228STomasz Sapeta replace: /\[(RNCWebView)/, 191b5228228STomasz Sapeta with: `[${versionName}$1`, 192b5228228STomasz Sapeta }, 193eeffdb10STomasz Sapeta 194eeffdb10STomasz Sapeta // react-native-reanimated 195eeffdb10STomasz Sapeta { 196eeffdb10STomasz Sapeta paths: 'EXVersionManager.mm', 197eeffdb10STomasz Sapeta replace: /(_bridge_reanimated)/g, 198eeffdb10STomasz Sapeta with: `${versionName}$1`, 199eeffdb10STomasz Sapeta }, 200eeffdb10STomasz Sapeta { 201b5228228STomasz Sapeta paths: 'EXVersionManager.mm', 202b5228228STomasz Sapeta replace: /\b(REA)/g, 203b5228228STomasz Sapeta with: `${versionName}$1`, 204b5228228STomasz Sapeta }, 205b5228228STomasz Sapeta { 206eeffdb10STomasz Sapeta paths: 'NativeProxy.mm', 207eeffdb10STomasz Sapeta replace: /@"ABI\d+_\d+_\d+RCTView"/g, 208eeffdb10STomasz Sapeta with: `@"RCTView"`, 209eeffdb10STomasz Sapeta }, 210eeffdb10STomasz Sapeta 211eeffdb10STomasz Sapeta // react-native-shared-element 212eeffdb10STomasz Sapeta { 213eeffdb10STomasz Sapeta paths: 'RNSharedElementNode.m', 214eeffdb10STomasz Sapeta replace: /\b(NSArray\s*\*\s*_imageResolvers)\b/, 215eeffdb10STomasz Sapeta with: 'static $1', 216eeffdb10STomasz Sapeta }, 217eeffdb10STomasz Sapeta 218eeffdb10STomasz Sapeta // react-native-safe-area-context 219eeffdb10STomasz Sapeta { 220eeffdb10STomasz Sapeta paths: [ 2211967a7daSKudo Chien 'RNCSafeAreaUtils.h', 2221967a7daSKudo Chien 'RNCSafeAreaUtils.m', 223eeffdb10STomasz Sapeta 'RNCSafeAreaProvider.m', 224eeffdb10STomasz Sapeta 'RNCSafeAreaView.m', 225eeffdb10STomasz Sapeta ], 226eeffdb10STomasz Sapeta replace: /\b(UIEdgeInsetsEqualToEdgeInsetsWithThreshold)\b/g, 227eeffdb10STomasz Sapeta with: `${versionName}$1`, 228eeffdb10STomasz Sapeta }, 229eeffdb10STomasz Sapeta ], 230eeffdb10STomasz Sapeta }; 231eeffdb10STomasz Sapeta} 232