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',
45e4312942SKudo Chien        replace: /(s.subspec\s+"Hermes".*$)/mg,
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'],
58eeffdb10STomasz Sapeta        replace: /(Headers\/Private\/)(React-Core)/g,
59eeffdb10STomasz Sapeta        with: `$1${versionName}$2`,
60eeffdb10STomasz Sapeta      },
61eeffdb10STomasz Sapeta
62eeffdb10STomasz Sapeta      // React-cxxreact
63eeffdb10STomasz Sapeta      {
64eeffdb10STomasz Sapeta        // Fixes excluding SampleCxxModule.* files
65eeffdb10STomasz Sapeta        paths: 'React-cxxreact.podspec',
66eeffdb10STomasz Sapeta        replace: /\.exclude_files(\s*=\s*["'])(SampleCxxModule\.\*)(["'])/g,
67eeffdb10STomasz Sapeta        with: `.exclude_files$1${versionName}$2$3`,
68eeffdb10STomasz Sapeta      },
69eeffdb10STomasz Sapeta
70eeffdb10STomasz Sapeta      // Yoga
71eeffdb10STomasz Sapeta      {
72eeffdb10STomasz Sapeta        // Unprefixes inner directory for source_files
73eeffdb10STomasz Sapeta        paths: 'Yoga.podspec',
7407d44be4SKudo Chien        replace: /\{(Yoga),(YGEnums),(YGMacros),(YGNode),(YGStyle),(YGValue)\}/g,
7507d44be4SKudo Chien        with: `{${versionName}$1,${versionName}$2,${versionName}$3,${versionName}$4,${versionName}$5,${versionName}$6}`,
76eeffdb10STomasz Sapeta      },
77eeffdb10STomasz Sapeta
78eeffdb10STomasz Sapeta      // FBReactNativeSpec
79eeffdb10STomasz Sapeta      {
80*370fa39dSKudo Chien        // source_files from versioned code
81eeffdb10STomasz Sapeta        paths: 'FBReactNativeSpec.podspec',
82*370fa39dSKudo Chien        replace: /(s\.source_files\s+=\s+"\*\*\/)(FBReactNativeSpec\*)/g,
83eeffdb10STomasz Sapeta        with: `$1${versionName}$2`,
84eeffdb10STomasz Sapeta      },
8507d44be4SKudo Chien      {
86*370fa39dSKudo Chien        // Remove codegen from build phase script
8707d44be4SKudo Chien        paths: 'FBReactNativeSpec.podspec',
88*370fa39dSKudo Chien        replace: /\n  use_react_native_codegen!\((.|\n)+?\n  }\)\n/mg,
89*370fa39dSKudo Chien        with: '',
9007d44be4SKudo Chien      },
91eeffdb10STomasz Sapeta    ],
92eeffdb10STomasz Sapeta  };
93eeffdb10STomasz Sapeta}
94