1eeffdb10STomasz Sapetaimport { TransformPipeline } from '.'; 2eeffdb10STomasz Sapeta 3eeffdb10STomasz Sapetaexport function podspecTransforms(versionName: string): TransformPipeline { 4eeffdb10STomasz Sapeta return { 5eeffdb10STomasz Sapeta transforms: [ 6eeffdb10STomasz Sapeta // Common transforms 7eeffdb10STomasz Sapeta { 8eeffdb10STomasz Sapeta // Transforms some podspec fields by adding versionName at the beginning 9eeffdb10STomasz Sapeta replace: /\.(name|header_dir|module_name)(\s*=\s*["'])([^"']+)(["'])/g, 10eeffdb10STomasz Sapeta with: `.$1$2${versionName}$3$4`, 11eeffdb10STomasz Sapeta }, 12eeffdb10STomasz Sapeta { 13eeffdb10STomasz Sapeta // Prefixes dependencies listed in the podspecs 149eae8a6aSKudo Chien replace: 159eae8a6aSKudo Chien /(\.dependency\s+["'])(Yoga|React\-|ReactCommon|RCT|FB|hermes-engine)(?!-Folly)([^"']*["'])/g, 16eeffdb10STomasz Sapeta with: `$1${versionName}$2$3`, 17eeffdb10STomasz Sapeta }, 18eeffdb10STomasz Sapeta { 199eae8a6aSKudo Chien // Removes source conditional, but not the `source = {}` in hermes-engine.podspec 20eeffdb10STomasz Sapeta replace: /source\s*\=\s*\{ [.\S\s]+?end/g, 21eeffdb10STomasz Sapeta with: '', 22eeffdb10STomasz Sapeta }, 23eeffdb10STomasz Sapeta { 24eeffdb10STomasz Sapeta // Points spec source at correct directory 25eeffdb10STomasz Sapeta replace: /(\.source\s*\=\s*)\S+\n/g, 26eeffdb10STomasz Sapeta with: '$1{ :path => "." }\n', 27eeffdb10STomasz Sapeta }, 28eeffdb10STomasz Sapeta 29eeffdb10STomasz Sapeta // React-Core & ReactCommon 30eeffdb10STomasz Sapeta { 31eeffdb10STomasz Sapeta // Fixes header_subspecs for RCTBlobHeaders 32eeffdb10STomasz Sapeta paths: 'React-Core.podspec', 33eeffdb10STomasz Sapeta replace: /\{(RCTBlobManager),(RCTFileReaderModule)\}/g, 34eeffdb10STomasz Sapeta with: `{${versionName}$1,${versionName}$2}`, 35eeffdb10STomasz Sapeta }, 36eeffdb10STomasz Sapeta { 37eeffdb10STomasz Sapeta // Prefixes conflicting AccessibilityResources 38eeffdb10STomasz Sapeta paths: 'React-Core.podspec', 39eeffdb10STomasz Sapeta replace: /"AccessibilityResources"/g, 40eeffdb10STomasz Sapeta with: `"${versionName}AccessibilityResources"`, 41eeffdb10STomasz Sapeta }, 42eeffdb10STomasz Sapeta { 43e4312942SKudo Chien // DEFINES_MODULE for swift integration 44e4312942SKudo Chien // Learn more: `packages/expo-modules-autolinking/scripts/ios/cocoapods/sandbox.rb` 45e4312942SKudo Chien paths: 'ReactCommon.podspec', 46e4312942SKudo Chien replace: /("USE_HEADERMAP" => "YES",)/g, 47e4312942SKudo Chien with: '$1 "DEFINES_MODULE" => "YES",', 48e4312942SKudo Chien }, 49e4312942SKudo Chien { 506185d13dSKudo Chien // DEFINES_MODULE for swift integration 516185d13dSKudo Chien // Learn more: `packages/expo-modules-autolinking/scripts/ios/cocoapods/sandbox.rb` 526185d13dSKudo Chien paths: 'React-RCTAppDelegate.podspec', 536185d13dSKudo Chien replace: /("CLANG_CXX_LANGUAGE_STANDARD" => "c\+\+17")/g, 546185d13dSKudo Chien with: '$1, "DEFINES_MODULE" => "YES",', 556185d13dSKudo Chien }, 566185d13dSKudo Chien { 57eeffdb10STomasz Sapeta // Fixes HEADER_SEARCH_PATHS 58*453643feSKudo Chien paths: [ 59*453643feSKudo Chien 'React-Core.podspec', 60*453643feSKudo Chien 'ReactCommon.podspec', 61*453643feSKudo Chien 'React-NativeModulesApple.podspec', 62*453643feSKudo Chien 'React-RCTAppDelegate.podspec', 63*453643feSKudo Chien ], 649eae8a6aSKudo Chien replace: 65*453643feSKudo Chien /(Headers\/Private\/|Headers\/Public\/|_BUILD_DIR\)\/)(React-Core|React-bridging|React-hermes|hermes-engine|ReactCommon|React-RCTFabric)/g, 669eae8a6aSKudo Chien with: `$1${versionName}$2`, 670e34784dSTomasz Sapeta }, 68eeffdb10STomasz Sapeta // React-cxxreact 69eeffdb10STomasz Sapeta { 70eeffdb10STomasz Sapeta // Fixes excluding SampleCxxModule.* files 71eeffdb10STomasz Sapeta paths: 'React-cxxreact.podspec', 72eeffdb10STomasz Sapeta replace: /\.exclude_files(\s*=\s*["'])(SampleCxxModule\.\*)(["'])/g, 73eeffdb10STomasz Sapeta with: `.exclude_files$1${versionName}$2$3`, 74eeffdb10STomasz Sapeta }, 756185d13dSKudo Chien { 766185d13dSKudo Chien // using jsc to expose jsi.h 776185d13dSKudo Chien paths: 'React-jsi.podspec', 786185d13dSKudo Chien replace: /^(\s+Pod::Spec.new do \|s\|.*)$/gm, 796185d13dSKudo Chien with: '\n# using jsc to expose jsi.h\njs_engine = :jsc$1', 806185d13dSKudo Chien }, 816185d13dSKudo Chien { 826185d13dSKudo Chien paths: 'React-jsc.podspec', 836185d13dSKudo Chien replace: /\b(JSCRuntime\.)/g, 846185d13dSKudo Chien with: `${versionName}$1`, 856185d13dSKudo Chien }, 86eeffdb10STomasz Sapeta // Yoga 87eeffdb10STomasz Sapeta { 88eeffdb10STomasz Sapeta // Unprefixes inner directory for source_files 89eeffdb10STomasz Sapeta paths: 'Yoga.podspec', 9007d44be4SKudo Chien replace: /\{(Yoga),(YGEnums),(YGMacros),(YGNode),(YGStyle),(YGValue)\}/g, 9107d44be4SKudo Chien with: `{${versionName}$1,${versionName}$2,${versionName}$3,${versionName}$4,${versionName}$5,${versionName}$6}`, 92eeffdb10STomasz Sapeta }, 93eeffdb10STomasz Sapeta 94370fa39dSKudo Chien // Remove codegen from build phase script 95*453643feSKudo Chien { 96*453643feSKudo Chien paths: ['FBReactNativeSpec.podspec', 'React-rncore.podspec'], 97a272999eSBartosz Kaszubowski replace: /\n use_react_native_codegen!\((.|\n)+?\n }\)\n/gm, 98370fa39dSKudo Chien with: '', 9907d44be4SKudo Chien }, 1009eae8a6aSKudo Chien 1019eae8a6aSKudo Chien // hermes 1029eae8a6aSKudo Chien { 1039eae8a6aSKudo Chien paths: 'hermes-engine.podspec', 1049eae8a6aSKudo Chien replace: /\b(hermes\.xcframework)/g, 1059eae8a6aSKudo Chien with: `${versionName}$1`, 1069eae8a6aSKudo Chien }, 1079eae8a6aSKudo Chien { 1089eae8a6aSKudo Chien paths: 'hermes-engine.podspec', 109fe5cfb17STomasz Sapeta replace: / source\[:http\]\s*=\s*"http[^"]+"/, 1109eae8a6aSKudo Chien with: `\ 1112c41a0c9SKilian Finger if File.exist?(File.join(__dir__, "destroot")) 1129eae8a6aSKudo Chien source[:path] = '.' 1139eae8a6aSKudo Chien else 1149eae8a6aSKudo Chien source[:http] = 'https://github.com/expo/react-native/releases/download/sdk-${versionName 1159eae8a6aSKudo Chien .replace('ABI', '') 1169eae8a6aSKudo Chien .replace(/_/g, '.')}/${versionName}hermes.tar.gz' 1179eae8a6aSKudo Chien end`, 1189eae8a6aSKudo Chien }, 11975c0fc72SKudo Chien { 12075c0fc72SKudo Chien // Revert the previous podspec source transform 12175c0fc72SKudo Chien paths: 'hermes-engine.podspec', 12275c0fc72SKudo Chien replace: /(\.source\s*)= \{ :path => "." \}\n/g, 12375c0fc72SKudo Chien with: '$1= source\n', 12475c0fc72SKudo Chien }, 125eeffdb10STomasz Sapeta ], 126eeffdb10STomasz Sapeta }; 127eeffdb10STomasz Sapeta} 128