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 58eeffdb10STomasz Sapeta paths: ['React-Core.podspec', 'ReactCommon.podspec'], 599eae8a6aSKudo Chien replace: 609eae8a6aSKudo Chien /(Headers\/Private\/|Headers\/Public\/|_BUILD_DIR\)\/)(React-Core|React-bridging|React-hermes|hermes-engine)/g, 619eae8a6aSKudo Chien with: `$1${versionName}$2`, 620e34784dSTomasz Sapeta }, 63eeffdb10STomasz Sapeta // React-cxxreact 64eeffdb10STomasz Sapeta { 65eeffdb10STomasz Sapeta // Fixes excluding SampleCxxModule.* files 66eeffdb10STomasz Sapeta paths: 'React-cxxreact.podspec', 67eeffdb10STomasz Sapeta replace: /\.exclude_files(\s*=\s*["'])(SampleCxxModule\.\*)(["'])/g, 68eeffdb10STomasz Sapeta with: `.exclude_files$1${versionName}$2$3`, 69eeffdb10STomasz Sapeta }, 706185d13dSKudo Chien { 716185d13dSKudo Chien // using jsc to expose jsi.h 726185d13dSKudo Chien paths: 'React-jsi.podspec', 736185d13dSKudo Chien replace: /^(\s+Pod::Spec.new do \|s\|.*)$/gm, 746185d13dSKudo Chien with: '\n# using jsc to expose jsi.h\njs_engine = :jsc$1', 756185d13dSKudo Chien }, 766185d13dSKudo Chien { 776185d13dSKudo Chien paths: 'React-jsc.podspec', 786185d13dSKudo Chien replace: /\b(JSCRuntime\.)/g, 796185d13dSKudo Chien with: `${versionName}$1`, 806185d13dSKudo Chien }, 81eeffdb10STomasz Sapeta // Yoga 82eeffdb10STomasz Sapeta { 83eeffdb10STomasz Sapeta // Unprefixes inner directory for source_files 84eeffdb10STomasz Sapeta paths: 'Yoga.podspec', 8507d44be4SKudo Chien replace: /\{(Yoga),(YGEnums),(YGMacros),(YGNode),(YGStyle),(YGValue)\}/g, 8607d44be4SKudo Chien with: `{${versionName}$1,${versionName}$2,${versionName}$3,${versionName}$4,${versionName}$5,${versionName}$6}`, 87eeffdb10STomasz Sapeta }, 88eeffdb10STomasz Sapeta 89eeffdb10STomasz Sapeta // FBReactNativeSpec 90eeffdb10STomasz Sapeta { 91370fa39dSKudo Chien // Remove codegen from build phase script 9207d44be4SKudo Chien paths: 'FBReactNativeSpec.podspec', 93a272999eSBartosz Kaszubowski replace: /\n use_react_native_codegen!\((.|\n)+?\n }\)\n/gm, 94370fa39dSKudo Chien with: '', 9507d44be4SKudo Chien }, 969eae8a6aSKudo Chien 979eae8a6aSKudo Chien // hermes 989eae8a6aSKudo Chien { 999eae8a6aSKudo Chien paths: 'hermes-engine.podspec', 1009eae8a6aSKudo Chien replace: /\b(hermes\.xcframework)/g, 1019eae8a6aSKudo Chien with: `${versionName}$1`, 1029eae8a6aSKudo Chien }, 1039eae8a6aSKudo Chien { 1049eae8a6aSKudo Chien paths: 'hermes-engine.podspec', 105*fe5cfb17STomasz Sapeta replace: / source\[:http\]\s*=\s*"http[^"]+"/, 1069eae8a6aSKudo Chien with: `\ 1072c41a0c9SKilian Finger if File.exist?(File.join(__dir__, "destroot")) 1089eae8a6aSKudo Chien source[:path] = '.' 1099eae8a6aSKudo Chien else 1109eae8a6aSKudo Chien source[:http] = 'https://github.com/expo/react-native/releases/download/sdk-${versionName 1119eae8a6aSKudo Chien .replace('ABI', '') 1129eae8a6aSKudo Chien .replace(/_/g, '.')}/${versionName}hermes.tar.gz' 1139eae8a6aSKudo Chien end`, 1149eae8a6aSKudo Chien }, 11575c0fc72SKudo Chien { 11675c0fc72SKudo Chien // Revert the previous podspec source transform 11775c0fc72SKudo Chien paths: 'hermes-engine.podspec', 11875c0fc72SKudo Chien replace: /(\.source\s*)= \{ :path => "." \}\n/g, 11975c0fc72SKudo Chien with: '$1= source\n', 12075c0fc72SKudo Chien }, 121eeffdb10STomasz Sapeta ], 122eeffdb10STomasz Sapeta }; 123eeffdb10STomasz Sapeta} 124