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