1import path from 'path';
2
3const fs = jest.requireActual('fs') as typeof import('fs');
4const template = path.join(__dirname, '../../../../../../../templates/expo-template-bare-minimum/');
5
6export function readAllFiles(): {
7  'ios/HelloWorld/AppDelegate.mm': string;
8  'ios/Podfile': string;
9  'ios/HelloWorld.xcodeproj/project.pbxproj': string;
10  'ios/HelloWorld/Info.plist': string;
11  'ios/HelloWorld/Supporting/Expo.plist': string;
12  'android/app/src/main/AndroidManifest.xml': string;
13  'android/app/src/main/java/com/helloworld/MainActivity.java': string;
14  'android/app/src/main/java/com/helloworld/MainApplication.java': string;
15  'android/app/build.gradle': string;
16  'android/build.gradle': string;
17  'android/settings.gradle': string;
18} & Record<string, string> {
19  const files: Record<string, string | Buffer> = {
20    // This file is generated and therefore not available in the template.
21    '/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h': `\
22      #include <memory>
23      #include <string>
24
25      #include <ReactCommon/TurboModuleManagerDelegate.h>
26      #include <fbjni/fbjni.h>
27
28      namespace facebook {
29      namespace react {
30
31      class MainApplicationTurboModuleManagerDelegate
32          : public jni::HybridClass<
33                MainApplicationTurboModuleManagerDelegate,
34                TurboModuleManagerDelegate> {
35       public:
36        // Adapt it to the package you used for your Java class.
37        static constexpr auto kJavaDescriptor =
38            "Lcom/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";
39
40        static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject>);
41
42        static void registerNatives();
43
44        std::shared_ptr<TurboModule> getTurboModule(
45            const std::string name,
46            const std::shared_ptr<CallInvoker> jsInvoker) override;
47        std::shared_ptr<TurboModule> getTurboModule(
48            const std::string name,
49            const JavaTurboModule::InitParams &params) override;
50
51        /**
52         * Test-only method. Allows user to verify whether a TurboModule can be
53         * created by instances of this class.
54         */
55        bool canCreateTurboModule(std::string name);
56      };
57
58      } // namespace react
59      } // namespace facebook
60    `,
61  };
62
63  function readFile(file: string) {
64    const p = path.join(template, file);
65    if (fs.statSync(p).isDirectory()) {
66      fs.readdirSync(p).forEach((f) => {
67        readFile(`${file}/${f}`);
68      });
69    } else {
70      if (file.match(/\.(png)$/)) {
71        const contents = fs.readFileSync(p);
72        files[file] = contents;
73      } else {
74        const contents = fs.readFileSync(p, 'utf-8');
75        files[file] = contents;
76      }
77    }
78  }
79
80  fs.readdirSync(path.join(template, 'ios')).forEach((file) => {
81    readFile(`ios/${file}`);
82  });
83  fs.readdirSync(path.join(template, 'android')).forEach((file) => {
84    readFile(`android/${file}`);
85  });
86
87  return files as any;
88}
89
90export default readAllFiles();
91