1*ed3bd27bSEvan Baconimport path from 'path';
2082815dcSEvan Bacon
3*ed3bd27bSEvan Baconconst fs = jest.requireActual('fs') as typeof import('fs');
4*ed3bd27bSEvan Baconconst template = path.join(__dirname, '../../../../../../../templates/expo-template-bare-minimum/');
5082815dcSEvan Bacon
6*ed3bd27bSEvan Baconexport function readAllFiles(): {
7*ed3bd27bSEvan Bacon  'ios/HelloWorld/AppDelegate.mm': string;
8*ed3bd27bSEvan Bacon  'ios/Podfile': string;
9*ed3bd27bSEvan Bacon  'ios/HelloWorld.xcodeproj/project.pbxproj': string;
10*ed3bd27bSEvan Bacon  'ios/HelloWorld/Info.plist': string;
11*ed3bd27bSEvan Bacon  'ios/HelloWorld/Supporting/Expo.plist': string;
12*ed3bd27bSEvan Bacon  'android/app/src/main/AndroidManifest.xml': string;
13*ed3bd27bSEvan Bacon  'android/app/src/main/java/com/helloworld/MainActivity.java': string;
14*ed3bd27bSEvan Bacon  'android/app/src/main/java/com/helloworld/MainApplication.java': string;
15*ed3bd27bSEvan Bacon  'android/app/build.gradle': string;
16*ed3bd27bSEvan Bacon  'android/build.gradle': string;
17*ed3bd27bSEvan Bacon  'android/settings.gradle': string;
18*ed3bd27bSEvan Bacon} & Record<string, string> {
19*ed3bd27bSEvan Bacon  const files: Record<string, string | Buffer> = {
20*ed3bd27bSEvan Bacon    // This file is generated and therefore not available in the template.
21*ed3bd27bSEvan Bacon    '/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h': `\
22082815dcSEvan Bacon      #include <memory>
23082815dcSEvan Bacon      #include <string>
24082815dcSEvan Bacon
25082815dcSEvan Bacon      #include <ReactCommon/TurboModuleManagerDelegate.h>
26082815dcSEvan Bacon      #include <fbjni/fbjni.h>
27082815dcSEvan Bacon
28082815dcSEvan Bacon      namespace facebook {
29082815dcSEvan Bacon      namespace react {
30082815dcSEvan Bacon
31082815dcSEvan Bacon      class MainApplicationTurboModuleManagerDelegate
32082815dcSEvan Bacon          : public jni::HybridClass<
33082815dcSEvan Bacon                MainApplicationTurboModuleManagerDelegate,
34082815dcSEvan Bacon                TurboModuleManagerDelegate> {
35082815dcSEvan Bacon       public:
36082815dcSEvan Bacon        // Adapt it to the package you used for your Java class.
37082815dcSEvan Bacon        static constexpr auto kJavaDescriptor =
38*ed3bd27bSEvan Bacon            "Lcom/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";
39082815dcSEvan Bacon
40082815dcSEvan Bacon        static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject>);
41082815dcSEvan Bacon
42082815dcSEvan Bacon        static void registerNatives();
43082815dcSEvan Bacon
44082815dcSEvan Bacon        std::shared_ptr<TurboModule> getTurboModule(
45082815dcSEvan Bacon            const std::string name,
46082815dcSEvan Bacon            const std::shared_ptr<CallInvoker> jsInvoker) override;
47082815dcSEvan Bacon        std::shared_ptr<TurboModule> getTurboModule(
48082815dcSEvan Bacon            const std::string name,
49082815dcSEvan Bacon            const JavaTurboModule::InitParams &params) override;
50082815dcSEvan Bacon
51082815dcSEvan Bacon        /**
52082815dcSEvan Bacon         * Test-only method. Allows user to verify whether a TurboModule can be
53082815dcSEvan Bacon         * created by instances of this class.
54082815dcSEvan Bacon         */
55082815dcSEvan Bacon        bool canCreateTurboModule(std::string name);
56082815dcSEvan Bacon      };
57082815dcSEvan Bacon
58082815dcSEvan Bacon      } // namespace react
59082815dcSEvan Bacon      } // namespace facebook
60082815dcSEvan Bacon    `,
61082815dcSEvan Bacon  };
62*ed3bd27bSEvan Bacon
63*ed3bd27bSEvan Bacon  function readFile(file: string) {
64*ed3bd27bSEvan Bacon    const p = path.join(template, file);
65*ed3bd27bSEvan Bacon    if (fs.statSync(p).isDirectory()) {
66*ed3bd27bSEvan Bacon      fs.readdirSync(p).forEach((f) => {
67*ed3bd27bSEvan Bacon        readFile(`${file}/${f}`);
68*ed3bd27bSEvan Bacon      });
69*ed3bd27bSEvan Bacon    } else {
70*ed3bd27bSEvan Bacon      if (file.match(/\.(png)$/)) {
71*ed3bd27bSEvan Bacon        const contents = fs.readFileSync(p);
72*ed3bd27bSEvan Bacon        files[file] = contents;
73*ed3bd27bSEvan Bacon      } else {
74*ed3bd27bSEvan Bacon        const contents = fs.readFileSync(p, 'utf-8');
75*ed3bd27bSEvan Bacon        files[file] = contents;
76*ed3bd27bSEvan Bacon      }
77*ed3bd27bSEvan Bacon    }
78*ed3bd27bSEvan Bacon  }
79*ed3bd27bSEvan Bacon
80*ed3bd27bSEvan Bacon  fs.readdirSync(path.join(template, 'ios')).forEach((file) => {
81*ed3bd27bSEvan Bacon    readFile(`ios/${file}`);
82*ed3bd27bSEvan Bacon  });
83*ed3bd27bSEvan Bacon  fs.readdirSync(path.join(template, 'android')).forEach((file) => {
84*ed3bd27bSEvan Bacon    readFile(`android/${file}`);
85*ed3bd27bSEvan Bacon  });
86*ed3bd27bSEvan Bacon
87*ed3bd27bSEvan Bacon  return files as any;
88*ed3bd27bSEvan Bacon}
89*ed3bd27bSEvan Bacon
90*ed3bd27bSEvan Baconexport default readAllFiles();
91