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 14*9eae8a6aSKudo Chien replace: 15*9eae8a6aSKudo Chien /(\.dependency\s+["'])(Yoga|React\-|ReactCommon|RCT|FB|hermes-engine)(?!-Folly)([^"']*["'])/g, 16eeffdb10STomasz Sapeta with: `$1${versionName}$2$3`, 17eeffdb10STomasz Sapeta }, 18eeffdb10STomasz Sapeta { 19*9eae8a6aSKudo 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 { 50eeffdb10STomasz Sapeta // Fixes HEADER_SEARCH_PATHS 51eeffdb10STomasz Sapeta paths: ['React-Core.podspec', 'ReactCommon.podspec'], 52*9eae8a6aSKudo Chien replace: 53*9eae8a6aSKudo Chien /(Headers\/Private\/|Headers\/Public\/|_BUILD_DIR\)\/)(React-Core|React-bridging|React-hermes|hermes-engine)/g, 54*9eae8a6aSKudo Chien with: `$1${versionName}$2`, 550e34784dSTomasz Sapeta }, 560e34784dSTomasz Sapeta 570e34784dSTomasz Sapeta // React-bridging 580e34784dSTomasz Sapeta { 590e34784dSTomasz Sapeta paths: 'React-bridging.podspec', 600e34784dSTomasz Sapeta replace: /\bheader_mappings_dir\s*=\s*"."/, 610e34784dSTomasz Sapeta with: 'header_mappings_dir = "react/bridging"', 62eeffdb10STomasz Sapeta }, 63eeffdb10STomasz Sapeta 64eeffdb10STomasz Sapeta // React-cxxreact 65eeffdb10STomasz Sapeta { 66eeffdb10STomasz Sapeta // Fixes excluding SampleCxxModule.* files 67eeffdb10STomasz Sapeta paths: 'React-cxxreact.podspec', 68eeffdb10STomasz Sapeta replace: /\.exclude_files(\s*=\s*["'])(SampleCxxModule\.\*)(["'])/g, 69eeffdb10STomasz Sapeta with: `.exclude_files$1${versionName}$2$3`, 70eeffdb10STomasz Sapeta }, 71eeffdb10STomasz Sapeta 72eeffdb10STomasz Sapeta // Yoga 73eeffdb10STomasz Sapeta { 74eeffdb10STomasz Sapeta // Unprefixes inner directory for source_files 75eeffdb10STomasz Sapeta paths: 'Yoga.podspec', 7607d44be4SKudo Chien replace: /\{(Yoga),(YGEnums),(YGMacros),(YGNode),(YGStyle),(YGValue)\}/g, 7707d44be4SKudo Chien with: `{${versionName}$1,${versionName}$2,${versionName}$3,${versionName}$4,${versionName}$5,${versionName}$6}`, 78eeffdb10STomasz Sapeta }, 79eeffdb10STomasz Sapeta 80eeffdb10STomasz Sapeta // FBReactNativeSpec 81eeffdb10STomasz Sapeta { 82370fa39dSKudo Chien // Remove codegen from build phase script 8307d44be4SKudo Chien paths: 'FBReactNativeSpec.podspec', 84a272999eSBartosz Kaszubowski replace: /\n use_react_native_codegen!\((.|\n)+?\n }\)\n/gm, 85370fa39dSKudo Chien with: '', 8607d44be4SKudo Chien }, 87*9eae8a6aSKudo Chien 88*9eae8a6aSKudo Chien // hermes 89*9eae8a6aSKudo Chien { 90*9eae8a6aSKudo Chien paths: 'hermes-engine.podspec', 91*9eae8a6aSKudo Chien replace: /\b(hermes\.xcframework)/g, 92*9eae8a6aSKudo Chien with: `${versionName}$1`, 93*9eae8a6aSKudo Chien }, 94*9eae8a6aSKudo Chien { 95*9eae8a6aSKudo Chien paths: 'hermes-engine.podspec', 96*9eae8a6aSKudo Chien replace: 97*9eae8a6aSKudo Chien ' source[:http] = "https://github.com/facebook/react-native/releases/download/v#{version}/hermes-runtime-darwin-v#{version}.tar.gz"', 98*9eae8a6aSKudo Chien with: `\ 99*9eae8a6aSKudo Chien if File.exists?(File.join(__dir__, "destroot")) 100*9eae8a6aSKudo Chien source[:path] = '.' 101*9eae8a6aSKudo Chien else 102*9eae8a6aSKudo Chien source[:http] = 'https://github.com/expo/react-native/releases/download/sdk-${versionName 103*9eae8a6aSKudo Chien .replace('ABI', '') 104*9eae8a6aSKudo Chien .replace(/_/g, '.')}/${versionName}hermes.tar.gz' 105*9eae8a6aSKudo Chien end`, 106*9eae8a6aSKudo Chien }, 107eeffdb10STomasz Sapeta ], 108eeffdb10STomasz Sapeta }; 109eeffdb10STomasz Sapeta} 110