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 1407d44be4SKudo Chien replace: /(\.dependency\s+["'])(Yoga|React\-|ReactCommon|RCT|FB)(?!-Folly)([^"']*["'])/g, 15eeffdb10STomasz Sapeta with: `$1${versionName}$2$3`, 16eeffdb10STomasz Sapeta }, 17eeffdb10STomasz Sapeta { 18eeffdb10STomasz Sapeta // Removes source conditional 19eeffdb10STomasz Sapeta replace: /source\s*\=\s*\{[.\S\s]+?end/g, 20eeffdb10STomasz Sapeta with: '', 21eeffdb10STomasz Sapeta }, 22eeffdb10STomasz Sapeta { 23eeffdb10STomasz Sapeta // Points spec source at correct directory 24eeffdb10STomasz Sapeta replace: /(\.source\s*\=\s*)\S+\n/g, 25eeffdb10STomasz Sapeta with: '$1{ :path => "." }\n', 26eeffdb10STomasz Sapeta }, 27eeffdb10STomasz Sapeta 28eeffdb10STomasz Sapeta // React-Core & ReactCommon 29eeffdb10STomasz Sapeta { 30eeffdb10STomasz Sapeta // Fixes header_subspecs for RCTBlobHeaders 31eeffdb10STomasz Sapeta paths: 'React-Core.podspec', 32eeffdb10STomasz Sapeta replace: /\{(RCTBlobManager),(RCTFileReaderModule)\}/g, 33eeffdb10STomasz Sapeta with: `{${versionName}$1,${versionName}$2}`, 34eeffdb10STomasz Sapeta }, 35eeffdb10STomasz Sapeta { 36eeffdb10STomasz Sapeta // Prefixes conflicting AccessibilityResources 37eeffdb10STomasz Sapeta paths: 'React-Core.podspec', 38eeffdb10STomasz Sapeta replace: /"AccessibilityResources"/g, 39eeffdb10STomasz Sapeta with: `"${versionName}AccessibilityResources"`, 40eeffdb10STomasz Sapeta }, 41eeffdb10STomasz Sapeta { 42e4312942SKudo Chien // Hide Hermes headers from public headers because clang modoules does not support c++ 43e4312942SKudo Chien // Learn more: `packages/expo-modules-autolinking/scripts/ios/cocoapods/sandbox.rb` 44e4312942SKudo Chien paths: 'React-Core.podspec', 45a272999eSBartosz Kaszubowski replace: /(s.subspec\s+"Hermes".*$)/gm, 46e4312942SKudo Chien with: '$1\n ss.private_header_files = "ReactCommon/hermes/executor/*.h", "ReactCommon/hermes/inspector/*.h", "ReactCommon/hermes/inspector/chrome/*.h", "ReactCommon/hermes/inspector/detail/*.h"', 47e4312942SKudo Chien }, 48e4312942SKudo Chien { 49e4312942SKudo Chien // DEFINES_MODULE for swift integration 50e4312942SKudo Chien // Learn more: `packages/expo-modules-autolinking/scripts/ios/cocoapods/sandbox.rb` 51e4312942SKudo Chien paths: 'ReactCommon.podspec', 52e4312942SKudo Chien replace: /("USE_HEADERMAP" => "YES",)/g, 53e4312942SKudo Chien with: '$1 "DEFINES_MODULE" => "YES",', 54e4312942SKudo Chien }, 55e4312942SKudo Chien { 56eeffdb10STomasz Sapeta // Fixes HEADER_SEARCH_PATHS 57eeffdb10STomasz Sapeta paths: ['React-Core.podspec', 'ReactCommon.podspec'], 58*0e34784dSTomasz Sapeta replace: /(Headers\/Private\/|_BUILD_DIR\)\/)(React-)(Core|bridging)/g, 59*0e34784dSTomasz Sapeta with: `$1${versionName}$2$3`, 60*0e34784dSTomasz Sapeta }, 61*0e34784dSTomasz Sapeta 62*0e34784dSTomasz Sapeta // React-bridging 63*0e34784dSTomasz Sapeta { 64*0e34784dSTomasz Sapeta paths: 'React-bridging.podspec', 65*0e34784dSTomasz Sapeta replace: /\bheader_mappings_dir\s*=\s*"."/, 66*0e34784dSTomasz Sapeta with: 'header_mappings_dir = "react/bridging"', 67eeffdb10STomasz Sapeta }, 68eeffdb10STomasz Sapeta 69eeffdb10STomasz Sapeta // React-cxxreact 70eeffdb10STomasz Sapeta { 71eeffdb10STomasz Sapeta // Fixes excluding SampleCxxModule.* files 72eeffdb10STomasz Sapeta paths: 'React-cxxreact.podspec', 73eeffdb10STomasz Sapeta replace: /\.exclude_files(\s*=\s*["'])(SampleCxxModule\.\*)(["'])/g, 74eeffdb10STomasz Sapeta with: `.exclude_files$1${versionName}$2$3`, 75eeffdb10STomasz Sapeta }, 76eeffdb10STomasz Sapeta 77eeffdb10STomasz Sapeta // Yoga 78eeffdb10STomasz Sapeta { 79eeffdb10STomasz Sapeta // Unprefixes inner directory for source_files 80eeffdb10STomasz Sapeta paths: 'Yoga.podspec', 8107d44be4SKudo Chien replace: /\{(Yoga),(YGEnums),(YGMacros),(YGNode),(YGStyle),(YGValue)\}/g, 8207d44be4SKudo Chien with: `{${versionName}$1,${versionName}$2,${versionName}$3,${versionName}$4,${versionName}$5,${versionName}$6}`, 83eeffdb10STomasz Sapeta }, 84eeffdb10STomasz Sapeta 85eeffdb10STomasz Sapeta // FBReactNativeSpec 86eeffdb10STomasz Sapeta { 87370fa39dSKudo Chien // Remove codegen from build phase script 8807d44be4SKudo Chien paths: 'FBReactNativeSpec.podspec', 89a272999eSBartosz Kaszubowski replace: /\n use_react_native_codegen!\((.|\n)+?\n }\)\n/gm, 90370fa39dSKudo Chien with: '', 9107d44be4SKudo Chien }, 92eeffdb10STomasz Sapeta ], 93eeffdb10STomasz Sapeta }; 94eeffdb10STomasz Sapeta} 95