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