@mr.dj2u/create-expo-stack 2.21.3-mrdj.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/README.md +435 -0
  2. package/bin/create-expo-stack.js +2 -0
  3. package/build/cli.js +49 -0
  4. package/build/commands/create-expo-stack.js +471 -0
  5. package/build/constants.js +39 -0
  6. package/build/templates/base/.gitignore.ejs +26 -0
  7. package/build/templates/base/.npmrc.ejs +1 -0
  8. package/build/templates/base/App.tsx.ejs +66 -0
  9. package/build/templates/base/app.json.ejs +69 -0
  10. package/build/templates/base/assets/adaptive-icon.png +0 -0
  11. package/build/templates/base/assets/favicon.png +0 -0
  12. package/build/templates/base/assets/icon.png +0 -0
  13. package/build/templates/base/assets/splash.png +0 -0
  14. package/build/templates/base/babel.config.js.ejs +38 -0
  15. package/build/templates/base/components/BackButton.tsx.ejs +23 -0
  16. package/build/templates/base/components/Button.tsx.ejs +42 -0
  17. package/build/templates/base/components/Container.tsx.ejs +14 -0
  18. package/build/templates/base/components/EditScreenInfo.tsx.ejs +44 -0
  19. package/build/templates/base/components/HeaderButton.tsx.ejs +31 -0
  20. package/build/templates/base/components/ScreenContent.tsx.ejs +40 -0
  21. package/build/templates/base/components/TabBarIcon.tsx.ejs +15 -0
  22. package/build/templates/base/eslint.config.js.ejs +15 -0
  23. package/build/templates/base/package.json.ejs +191 -0
  24. package/build/templates/base/prettier.config.js.ejs +11 -0
  25. package/build/templates/base/tsconfig.json.ejs +39 -0
  26. package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/_layout.tsx.ejs +40 -0
  27. package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/index.tsx.ejs +15 -0
  28. package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/two.tsx.ejs +15 -0
  29. package/build/templates/packages/expo-router/drawer/app/(drawer)/_layout.tsx.ejs +65 -0
  30. package/build/templates/packages/expo-router/drawer/app/(drawer)/index.tsx.ejs +15 -0
  31. package/build/templates/packages/expo-router/drawer/app/+html.tsx.ejs +49 -0
  32. package/build/templates/packages/expo-router/drawer/app/+not-found.tsx.ejs +100 -0
  33. package/build/templates/packages/expo-router/drawer/app/_layout.tsx.ejs +91 -0
  34. package/build/templates/packages/expo-router/drawer/app/modal.tsx.ejs +21 -0
  35. package/build/templates/packages/expo-router/expo-env.d.ts +4 -0
  36. package/build/templates/packages/expo-router/index.js.ejs +4 -0
  37. package/build/templates/packages/expo-router/metro.config.js.ejs +24 -0
  38. package/build/templates/packages/expo-router/stack/app/+html.tsx.ejs +49 -0
  39. package/build/templates/packages/expo-router/stack/app/+not-found.tsx.ejs +113 -0
  40. package/build/templates/packages/expo-router/stack/app/_layout.tsx.ejs +63 -0
  41. package/build/templates/packages/expo-router/stack/app/details.tsx.ejs +56 -0
  42. package/build/templates/packages/expo-router/stack/app/index.tsx.ejs +73 -0
  43. package/build/templates/packages/expo-router/tabs/app/(tabs)/_layout.tsx.ejs +52 -0
  44. package/build/templates/packages/expo-router/tabs/app/(tabs)/index.tsx.ejs +37 -0
  45. package/build/templates/packages/expo-router/tabs/app/(tabs)/two.tsx.ejs +37 -0
  46. package/build/templates/packages/expo-router/tabs/app/+html.tsx.ejs +49 -0
  47. package/build/templates/packages/expo-router/tabs/app/+not-found.tsx.ejs +110 -0
  48. package/build/templates/packages/expo-router/tabs/app/_layout.tsx.ejs +84 -0
  49. package/build/templates/packages/expo-router/tabs/app/modal.tsx.ejs +21 -0
  50. package/build/templates/packages/firebase/.env.ejs +8 -0
  51. package/build/templates/packages/firebase/metro.config.js.ejs +14 -0
  52. package/build/templates/packages/firebase/utils/firebase.ts.ejs +26 -0
  53. package/build/templates/packages/i18next/components/InternalizationExample.tsx.ejs +23 -0
  54. package/build/templates/packages/i18next/core/i18n/fallbackChecker.ts.ejs +13 -0
  55. package/build/templates/packages/i18next/core/i18n/init.ts.ejs +24 -0
  56. package/build/templates/packages/i18next/core/i18n/languageDetector.ts.ejs +13 -0
  57. package/build/templates/packages/i18next/translation/en.json.ejs +8 -0
  58. package/build/templates/packages/i18next/translation/fr.json.ejs +8 -0
  59. package/build/templates/packages/i18next/translation/index.ts.ejs +20 -0
  60. package/build/templates/packages/nativewind/components/BackButton.tsx.ejs +22 -0
  61. package/build/templates/packages/nativewind/components/Button.tsx.ejs +21 -0
  62. package/build/templates/packages/nativewind/components/Container.tsx.ejs +13 -0
  63. package/build/templates/packages/nativewind/components/EditScreenInfo.tsx.ejs +40 -0
  64. package/build/templates/packages/nativewind/components/ScreenContent.tsx.ejs +27 -0
  65. package/build/templates/packages/nativewind/global.css +3 -0
  66. package/build/templates/packages/nativewind/metro.config.js +7 -0
  67. package/build/templates/packages/nativewind/nativewind-env.d.ts +2 -0
  68. package/build/templates/packages/nativewind/tailwind.config.js.ejs +15 -0
  69. package/build/templates/packages/nativewindui/components/Container.tsx.ejs +14 -0
  70. package/build/templates/packages/nativewindui/components/EditScreenInfo.tsx.ejs +45 -0
  71. package/build/templates/packages/nativewindui/components/HeaderButton.tsx.ejs +31 -0
  72. package/build/templates/packages/nativewindui/components/ScreenContent.tsx.ejs +40 -0
  73. package/build/templates/packages/nativewindui/components/TabBarIcon.tsx.ejs +15 -0
  74. package/build/templates/packages/nativewindui/components/nativewindui/Icon/Icon.ios.tsx.ejs +52 -0
  75. package/build/templates/packages/nativewindui/components/nativewindui/Icon/Icon.tsx.ejs +58 -0
  76. package/build/templates/packages/nativewindui/components/nativewindui/Icon/index.ts.ejs +16 -0
  77. package/build/templates/packages/nativewindui/components/nativewindui/Icon/types.ts.ejs +18 -0
  78. package/build/templates/packages/nativewindui/components/nativewindui/ThemeToggle.tsx.ejs +33 -0
  79. package/build/templates/packages/nativewindui/drawer/app/(drawer)/(tabs)/_layout.tsx.ejs +28 -0
  80. package/build/templates/packages/nativewindui/drawer/app/(drawer)/(tabs)/index.tsx.ejs +15 -0
  81. package/build/templates/packages/nativewindui/drawer/app/(drawer)/(tabs)/two.tsx.ejs +15 -0
  82. package/build/templates/packages/nativewindui/drawer/app/(drawer)/_layout.tsx.ejs +35 -0
  83. package/build/templates/packages/nativewindui/drawer/app/(drawer)/index.tsx.ejs +535 -0
  84. package/build/templates/packages/nativewindui/drawer/app/+html.tsx.ejs +46 -0
  85. package/build/templates/packages/nativewindui/drawer/app/+not-found.tsx.ejs +83 -0
  86. package/build/templates/packages/nativewindui/drawer/app/_layout.tsx.ejs +75 -0
  87. package/build/templates/packages/nativewindui/drawer/app/modal.tsx.ejs +33 -0
  88. package/build/templates/packages/nativewindui/global.css.ejs +91 -0
  89. package/build/templates/packages/nativewindui/lib/cn.ts.ejs +6 -0
  90. package/build/templates/packages/nativewindui/lib/useColorScheme.tsx.ejs +21 -0
  91. package/build/templates/packages/nativewindui/nativewind-env.d.ts.ejs +1 -0
  92. package/build/templates/packages/nativewindui/stack/app/+html.tsx.ejs +46 -0
  93. package/build/templates/packages/nativewindui/stack/app/+not-found.tsx.ejs +18 -0
  94. package/build/templates/packages/nativewindui/stack/app/_layout.tsx.ejs +78 -0
  95. package/build/templates/packages/nativewindui/stack/app/index.tsx.ejs +487 -0
  96. package/build/templates/packages/nativewindui/stack/app/modal.tsx.ejs +33 -0
  97. package/build/templates/packages/nativewindui/tabs/app/(tabs)/_layout.tsx.ejs +35 -0
  98. package/build/templates/packages/nativewindui/tabs/app/(tabs)/index.tsx.ejs +537 -0
  99. package/build/templates/packages/nativewindui/tabs/app/(tabs)/two.tsx.ejs +22 -0
  100. package/build/templates/packages/nativewindui/tabs/app/+html.tsx.ejs +46 -0
  101. package/build/templates/packages/nativewindui/tabs/app/+not-found.tsx.ejs +90 -0
  102. package/build/templates/packages/nativewindui/tabs/app/_layout.tsx.ejs +78 -0
  103. package/build/templates/packages/nativewindui/tabs/app/modal.tsx.ejs +21 -0
  104. package/build/templates/packages/nativewindui/tailwind.config.js.ejs +67 -0
  105. package/build/templates/packages/nativewindui/theme/colors.ts.ejs +123 -0
  106. package/build/templates/packages/nativewindui/theme/index.ts.ejs +32 -0
  107. package/build/templates/packages/nativewindui/theme/with-opacity.ts.ejs +155 -0
  108. package/build/templates/packages/react-navigation/App.tsx.ejs +73 -0
  109. package/build/templates/packages/react-navigation/navigation/drawer-navigator.tsx.ejs +31 -0
  110. package/build/templates/packages/react-navigation/navigation/index.tsx.ejs +108 -0
  111. package/build/templates/packages/react-navigation/navigation/tab-navigator.tsx.ejs +38 -0
  112. package/build/templates/packages/react-navigation/screens/details.tsx.ejs +41 -0
  113. package/build/templates/packages/react-navigation/screens/home.tsx.ejs +5 -0
  114. package/build/templates/packages/react-navigation/screens/modal.tsx.ejs +20 -0
  115. package/build/templates/packages/react-navigation/screens/one.tsx.ejs +5 -0
  116. package/build/templates/packages/react-navigation/screens/overview.tsx.ejs +54 -0
  117. package/build/templates/packages/react-navigation/screens/two.tsx.ejs +5 -0
  118. package/build/templates/packages/restyle/components/BackButton.tsx.ejs +19 -0
  119. package/build/templates/packages/restyle/components/Button.tsx.ejs +32 -0
  120. package/build/templates/packages/restyle/components/Container.tsx.ejs +16 -0
  121. package/build/templates/packages/restyle/components/EditScreenInfo.tsx.ejs +38 -0
  122. package/build/templates/packages/restyle/components/ScreenContent.tsx.ejs +30 -0
  123. package/build/templates/packages/restyle/theme.ts.ejs +51 -0
  124. package/build/templates/packages/supabase/.env.ejs +2 -0
  125. package/build/templates/packages/supabase/utils/supabase.ts.ejs +14 -0
  126. package/build/templates/packages/tamagui/components/BackButton.tsx.ejs +12 -0
  127. package/build/templates/packages/tamagui/components/Button.tsx.ejs +17 -0
  128. package/build/templates/packages/tamagui/components/Container.tsx.ejs +12 -0
  129. package/build/templates/packages/tamagui/components/EditScreenInfo.tsx.ejs +27 -0
  130. package/build/templates/packages/tamagui/components/ScreenContent.tsx.ejs +23 -0
  131. package/build/templates/packages/tamagui/tamagui.config.ts.ejs +14 -0
  132. package/build/templates/packages/unistyles/breakpoints.ts.ejs +9 -0
  133. package/build/templates/packages/unistyles/components/BackButton.tsx.ejs +28 -0
  134. package/build/templates/packages/unistyles/components/Button.tsx.ejs +42 -0
  135. package/build/templates/packages/unistyles/components/Container.tsx.ejs +17 -0
  136. package/build/templates/packages/unistyles/components/EditScreenInfo.tsx.ejs +53 -0
  137. package/build/templates/packages/unistyles/components/ScreenContent.tsx.ejs +43 -0
  138. package/build/templates/packages/unistyles/theme.ts.ejs +34 -0
  139. package/build/templates/packages/unistyles/unistyles.ts.ejs +27 -0
  140. package/build/templates/packages/uniwind/global.css +2 -0
  141. package/build/templates/packages/uniwind/metro.config.js.ejs +10 -0
  142. package/build/templates/packages/vexo-analytics/.env.ejs +7 -0
  143. package/build/templates/packages/zustand/store/store.ts.ejs +15 -0
  144. package/build/types/cli.d.ts +4 -0
  145. package/build/types/commands/create-expo-stack.d.ts +3 -0
  146. package/build/types/constants.d.ts +10 -0
  147. package/build/types/types.d.ts +33 -0
  148. package/build/types/utilities/bumpVersion.d.ts +1 -0
  149. package/build/types/utilities/clearNavigationPackages.d.ts +2 -0
  150. package/build/types/utilities/clearStylingPackages.d.ts +2 -0
  151. package/build/types/utilities/configAnalytics.d.ts +18 -0
  152. package/build/types/utilities/configStorage.d.ts +8 -0
  153. package/build/types/utilities/configureProjectFiles.d.ts +3 -0
  154. package/build/types/utilities/copyBaseAssets.d.ts +2 -0
  155. package/build/types/utilities/generateNWUI.d.ts +3 -0
  156. package/build/types/utilities/generateProjectFiles.d.ts +5 -0
  157. package/build/types/utilities/getPackageManager.d.ts +8 -0
  158. package/build/types/utilities/index.d.ts +10 -0
  159. package/build/types/utilities/printOutput.d.ts +3 -0
  160. package/build/types/utilities/publishToGitHub.d.ts +2 -0
  161. package/build/types/utilities/renderTitle.d.ts +2 -0
  162. package/build/types/utilities/runCLI.d.ts +3 -0
  163. package/build/types/utilities/runEasConfigure.d.ts +3 -0
  164. package/build/types/utilities/runIgnite.d.ts +3 -0
  165. package/build/types/utilities/showHelp.d.ts +1 -0
  166. package/build/types/utilities/systemCommand.d.ts +14 -0
  167. package/build/types/utilities/usePackage.d.ts +2 -0
  168. package/build/types/utilities/validateProjectName.d.ts +4 -0
  169. package/build/types.js +39 -0
  170. package/build/utilities/bumpVersion.js +21 -0
  171. package/build/utilities/clearNavigationPackages.js +11 -0
  172. package/build/utilities/clearStylingPackages.js +11 -0
  173. package/build/utilities/configAnalytics.js +70 -0
  174. package/build/utilities/configStorage.js +50 -0
  175. package/build/utilities/configureProjectFiles.js +380 -0
  176. package/build/utilities/copyBaseAssets.js +21 -0
  177. package/build/utilities/generateNWUI.js +54 -0
  178. package/build/utilities/generateProjectFiles.js +106 -0
  179. package/build/utilities/getPackageManager.js +103 -0
  180. package/build/utilities/index.js +27 -0
  181. package/build/utilities/printOutput.js +251 -0
  182. package/build/utilities/publishToGitHub.js +173 -0
  183. package/build/utilities/renderTitle.js +55 -0
  184. package/build/utilities/runCLI.js +437 -0
  185. package/build/utilities/runEasConfigure.js +83 -0
  186. package/build/utilities/runIgnite.js +26 -0
  187. package/build/utilities/showHelp.js +85 -0
  188. package/build/utilities/systemCommand.js +40 -0
  189. package/build/utilities/usePackage.js +8 -0
  190. package/build/utilities/validateProjectName.js +42 -0
  191. package/package.json +77 -0
@@ -0,0 +1,471 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const util = require('util');
16
+ const utilities_1 = require("../utilities");
17
+ const constants_1 = require("../constants");
18
+ const types_1 = require("../types");
19
+ const clearStylingPackages_1 = __importDefault(require("../utilities/clearStylingPackages"));
20
+ const systemCommand_1 = require("../utilities/systemCommand");
21
+ const validateProjectName_1 = require("../utilities/validateProjectName");
22
+ const prompts_1 = require("@clack/prompts");
23
+ const clearNavigationPackages_1 = __importDefault(require("../utilities/clearNavigationPackages"));
24
+ const softwareMansionFlagOptions = [
25
+ {
26
+ name: 'react-native-gesture-handler',
27
+ aliases: ['reactNativeGestureHandler', 'react-native-gesture-handler', 'gesture-handler', 'gestureHandler']
28
+ },
29
+ {
30
+ name: 'react-native-reanimated',
31
+ aliases: ['reactNativeReanimated', 'react-native-reanimated', 'reanimated']
32
+ },
33
+ {
34
+ name: 'react-native-screens',
35
+ aliases: ['reactNativeScreens', 'react-native-screens', 'screens']
36
+ },
37
+ {
38
+ name: 'react-native-svg',
39
+ aliases: ['reactNativeSvg', 'react-native-svg', 'svg']
40
+ },
41
+ {
42
+ name: 'react-native-keyboard-controller',
43
+ aliases: [
44
+ 'reactNativeKeyboardController',
45
+ 'react-native-keyboard-controller',
46
+ 'keyboard-controller',
47
+ 'keyboardController'
48
+ ]
49
+ },
50
+ {
51
+ name: 'react-native-worklets',
52
+ aliases: ['reactNativeWorklets', 'react-native-worklets', 'worklets']
53
+ }
54
+ ];
55
+ function shouldAddSoftwareMansionPackage(name, cliResults) {
56
+ if (cliResults.packages.some((pkg) => pkg.name === name)) {
57
+ return false;
58
+ }
59
+ if ((name === 'react-native-gesture-handler' || name === 'react-native-screens') &&
60
+ cliResults.packages.some((pkg) => pkg.type === 'navigation')) {
61
+ return false;
62
+ }
63
+ return name !== 'react-native-reanimated' && name !== 'react-native-worklets';
64
+ }
65
+ const command = {
66
+ name: 'create-expo-stack',
67
+ description: 'Create a new Expo project',
68
+ run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
69
+ var _a, _b, _c, _d;
70
+ const { filesystem: { exists, removeAsync }, parameters: { first, options }, print: { error, info, highlight, success, warning }, prompt } = toolbox;
71
+ const printSomethingWentWrong = () => {
72
+ info(`\nOops, something went wrong while creating your project 😢`);
73
+ info(`\nIf this was unexpected, please open an issue: https://github.com/roninoss/create-expo-stack#reporting-bugs--feedback`);
74
+ info('');
75
+ };
76
+ // Handle help flag
77
+ if (options.help || options.h) {
78
+ (0, utilities_1.showHelp)(info, highlight, warning);
79
+ return;
80
+ }
81
+ // Handle publish flag
82
+ if (options.publish) {
83
+ // Check if app.json exists
84
+ if (!exists('app.json')) {
85
+ const shouldContinue = yield prompt.confirm('No app.json file found. This does not seem to be an Expo project. Would you like to continue anyway?');
86
+ if (!shouldContinue) {
87
+ info('\nPublication cancelled.');
88
+ return;
89
+ }
90
+ }
91
+ info('\nPublishing current project to GitHub...');
92
+ const repoUrl = yield (0, utilities_1.publishToGitHub)(toolbox, process.cwd().split('/').pop() || '');
93
+ if (repoUrl) {
94
+ success('\n🎉 Successfully published to GitHub!');
95
+ info(`\n📎 Repository URL: ${repoUrl}`);
96
+ }
97
+ return;
98
+ }
99
+ // Conditionally skip running the CLI
100
+ const useDefault = (options.default !== undefined && options.default) || (options.d !== undefined && options.d);
101
+ const skipCLI = options.nonInteractive;
102
+ // Check for nativewindui flag (support both --nativewindui and --nwui)
103
+ const isNativewindUI = options.nativewindui || options.nwui;
104
+ const useBlankTypescript = !isNativewindUI ? options.blank || false : (options.blank && isNativewindUI) || false;
105
+ // Check if any of the options were passed in via the command
106
+ const optionsPassedIn = types_1.availablePackages.some((condition) => options[condition] !== undefined);
107
+ // Set the default options
108
+ let cliResults = constants_1.defaultOptions;
109
+ cliResults.flags.packageManager = (0, utilities_1.getPackageManager)(toolbox, cliResults);
110
+ // START INPUT VALIDATION
111
+ try {
112
+ // Validation: check if the user passed in the tabs/drawer option without passing in either expo router or react navigation. If so, throw an error
113
+ if ((options.tabs || options['drawer+tabs']) &&
114
+ !options.reactNavigation &&
115
+ !options['react-navigation'] &&
116
+ !options.reactnavigation &&
117
+ !options.expoRouter &&
118
+ !options['expo-router'] &&
119
+ !options.exporouter &&
120
+ // nativewindui applies the expo router option by default
121
+ !isNativewindUI) {
122
+ // throw an error without a stack trace
123
+ throw constants_1.navigationValidationError;
124
+ }
125
+ yield (0, utilities_1.renderTitle)(toolbox);
126
+ (0, prompts_1.intro)(`Let's get started!`);
127
+ // Prompt the user for the project name if it is not passed in via the command
128
+ // - TODO: simplify this if statement to clarify what is being checked
129
+ if (!first && (options.ignite || !(useDefault || optionsPassedIn || skipCLI || useBlankTypescript))) {
130
+ const name = yield (0, prompts_1.text)({
131
+ message: 'What do you want to name your project?',
132
+ placeholder: constants_1.DEFAULT_APP_NAME
133
+ });
134
+ if ((0, prompts_1.isCancel)(name)) {
135
+ (0, prompts_1.cancel)('Cancelled... 👋');
136
+ return process.exit(0);
137
+ }
138
+ // if name is undefined or empty string, use default name
139
+ cliResults.projectName = (name && name.toString()) || constants_1.DEFAULT_APP_NAME;
140
+ }
141
+ else {
142
+ // Destructure the results but set the projectName if the first param is passed in
143
+ cliResults.projectName = first || constants_1.DEFAULT_APP_NAME;
144
+ const pathSegments = cliResults.projectName.split('/');
145
+ cliResults.projectName = pathSegments.pop(); // get last segment as the project name
146
+ }
147
+ // Validate the provided project name; check if the directory already exists
148
+ // - We may or may not be interactive, so conditionally pass in prompt.
149
+ // - Ignore validation if the overwrite option is passed in.
150
+ if (options.overwrite) {
151
+ cliResults.flags.overwrite = true;
152
+ }
153
+ if (options.eas) {
154
+ cliResults.flags.eas = true;
155
+ }
156
+ yield (0, validateProjectName_1.validateProjectName)(exists, removeAsync, !(useDefault || optionsPassedIn || skipCLI || useBlankTypescript) ? prompt : null, cliResults.projectName, cliResults.flags.overwrite);
157
+ }
158
+ catch (err) {
159
+ if (process.env.NODE_ENV === 'test' || process.env.NODE_ENV === 'development') {
160
+ error(`error: ${err}`);
161
+ }
162
+ if (err === '') {
163
+ // user cancelled/exited the interactive CLI
164
+ return void success(`\nCancelled... 👋 \n`);
165
+ }
166
+ if (err === constants_1.navigationValidationError) {
167
+ // user tried passing in tabs/drawer option without passing in either expo router or react navigation
168
+ return void error(`\n${constants_1.navigationValidationError}\n`);
169
+ }
170
+ if (err.message.includes(constants_1.projectNameValidationError)) {
171
+ return void success(`\nCancelled... 👋 \n`);
172
+ }
173
+ // we keep this around so we can check what went wrong
174
+ if (process.env.NODE_ENV !== 'test') {
175
+ // Delete all files with projectName
176
+ yield removeAsync(cliResults.projectName);
177
+ }
178
+ printSomethingWentWrong();
179
+ throw err;
180
+ }
181
+ // END INPUT VALIDATION
182
+ // Determine remaining options, run interactive CLI if necessary, and generate project
183
+ try {
184
+ // Check if user wants to create an opinionated stack prior to running the configurable CLI
185
+ if (options.ignite) {
186
+ yield (0, utilities_1.runIgnite)(toolbox, cliResults.projectName, cliResults);
187
+ }
188
+ else {
189
+ // Check if the user wants to not install dependencies and/or not initialize git, update cliResults accordingly
190
+ cliResults.flags.noInstall =
191
+ options.noInstall || (typeof options.install === 'boolean' && !options.install) || false;
192
+ cliResults.flags.noGit = options.noGit || (typeof options.git === 'boolean' && !options.git) || false;
193
+ cliResults.flags.publish = !!options.publish;
194
+ // Validate import alias string forward slash and asterisk
195
+ if (typeof options.importAlias === 'string') {
196
+ if (!options.importAlias.endsWith('/*')) {
197
+ throw new Error('Import alias must end in `/*`, for example: `@/*` or `~/`');
198
+ }
199
+ }
200
+ cliResults.flags.importAlias = options.importAlias !== false && options['import-alias'] !== false;
201
+ if (!(useDefault || optionsPassedIn || skipCLI || useBlankTypescript)) {
202
+ // Run the CLI to prompt the user for input
203
+ cliResults = yield (0, utilities_1.runCLI)(toolbox, cliResults.projectName);
204
+ }
205
+ // Update the cliResults with the options passed in via the command
206
+ // Navigation packages
207
+ if (options.reactNavigation || options['react-navigation'] || options.reactnavigation) {
208
+ // Add react-navigation package
209
+ cliResults.packages.push({
210
+ name: 'react-navigation',
211
+ type: 'navigation',
212
+ options: {
213
+ type: options.tabs ? 'tabs' : options['drawer+tabs'] ? 'drawer + tabs' : 'stack'
214
+ }
215
+ });
216
+ }
217
+ if (options.expoRouter || options['expo-router'] || options.exporouter) {
218
+ // Add expo-router package
219
+ cliResults.packages.push({
220
+ name: 'expo-router',
221
+ type: 'navigation',
222
+ options: {
223
+ type: options.tabs ? 'tabs' : options['drawer+tabs'] ? 'drawer + tabs' : 'stack'
224
+ }
225
+ });
226
+ }
227
+ // Styling packages
228
+ if (options.nativewind) {
229
+ // Check if there is already a styling library added and remove it if so
230
+ cliResults = (0, clearStylingPackages_1.default)(cliResults);
231
+ // Add nativewind package
232
+ cliResults.packages.push({
233
+ name: 'nativewind',
234
+ type: 'styling'
235
+ });
236
+ }
237
+ else if (options.uniwind) {
238
+ cliResults = (0, clearStylingPackages_1.default)(cliResults);
239
+ cliResults.packages.push({
240
+ name: 'uniwind',
241
+ type: 'styling'
242
+ });
243
+ }
244
+ else if (options.restyle) {
245
+ cliResults = (0, clearStylingPackages_1.default)(cliResults);
246
+ cliResults.packages.push({
247
+ name: 'restyle',
248
+ type: 'styling'
249
+ });
250
+ }
251
+ else if (options.tamagui) {
252
+ cliResults = (0, clearStylingPackages_1.default)(cliResults);
253
+ cliResults.packages.push({
254
+ name: 'tamagui',
255
+ type: 'styling'
256
+ });
257
+ }
258
+ else if (isNativewindUI) {
259
+ cliResults = (0, clearStylingPackages_1.default)(cliResults);
260
+ cliResults = (0, clearNavigationPackages_1.default)(cliResults);
261
+ const parsedComponents = (_d = (_c = (_b = (_a = options === null || options === void 0 ? void 0 : options.selectedComponents) === null || _a === void 0 ? void 0 : _a.split(',')) === null || _b === void 0 ? void 0 : _b.map((c) => c.trim())) === null || _c === void 0 ? void 0 : _c.filter((item) => constants_1.nativewindUIOptions.includes(item))) !== null && _d !== void 0 ? _d : [];
262
+ const selectedComponents = parsedComponents.length
263
+ ? Array.from(new Set([...parsedComponents, 'text', 'button']))
264
+ : constants_1.nativewindUIOptions;
265
+ cliResults.packages.push({
266
+ name: 'nativewindui',
267
+ type: 'styling',
268
+ options: {
269
+ selectedComponents: options.blank ? ['text'] : selectedComponents
270
+ }
271
+ });
272
+ cliResults.packages.push({
273
+ name: 'expo-router',
274
+ type: 'navigation',
275
+ options: {
276
+ type: options.tabs ? 'tabs' : options['drawer+tabs'] ? 'drawer + tabs' : 'stack'
277
+ }
278
+ });
279
+ }
280
+ else if (options.unistyles) {
281
+ cliResults = (0, clearStylingPackages_1.default)(cliResults);
282
+ // Add unistyles package
283
+ cliResults.packages.push({
284
+ name: 'unistyles',
285
+ type: 'styling'
286
+ });
287
+ }
288
+ else if (options.stylesheet) {
289
+ cliResults = (0, clearStylingPackages_1.default)(cliResults);
290
+ // Add stylesheet package
291
+ cliResults.packages.push({
292
+ name: 'stylesheet',
293
+ type: 'styling'
294
+ });
295
+ }
296
+ // if there is no style package, add stylesheet
297
+ else if (cliResults.packages.find((p) => p.type === 'styling') === undefined) {
298
+ cliResults.packages.push({
299
+ name: 'stylesheet',
300
+ type: 'styling'
301
+ });
302
+ }
303
+ // Authentication packages
304
+ if (options.supabase) {
305
+ // Add supabase package
306
+ cliResults.packages.push({
307
+ name: 'supabase',
308
+ type: 'authentication'
309
+ });
310
+ }
311
+ if (options.firebase) {
312
+ // Add firebase package
313
+ cliResults.packages.push({
314
+ name: 'firebase',
315
+ type: 'authentication'
316
+ });
317
+ }
318
+ // State Management packages
319
+ if (options.zustand) {
320
+ // Add zustand package
321
+ cliResults.packages.push({
322
+ name: 'zustand',
323
+ type: 'state-management'
324
+ });
325
+ }
326
+ // Internalization packages
327
+ if (options.i18next) {
328
+ cliResults.packages.push({
329
+ name: 'i18next',
330
+ type: 'internationalization'
331
+ });
332
+ }
333
+ // Analytics packages
334
+ if (options.vexoAnalytics || options['vexo-analytics'] || options.vexoanalytics) {
335
+ cliResults.packages.push({ name: 'vexo-analytics', type: 'analytics' });
336
+ }
337
+ softwareMansionFlagOptions.forEach(({ name, aliases }) => {
338
+ if (aliases.some((alias) => options[alias]) && shouldAddSoftwareMansionPackage(name, cliResults)) {
339
+ cliResults.packages.push({ name, type: 'software-mansion' });
340
+ }
341
+ });
342
+ // By this point, all cliResults should be set
343
+ info('');
344
+ highlight('Your project configuration:');
345
+ info(`${util.inspect(cliResults, false, null, true /* enable colors */)}`);
346
+ info('');
347
+ highlight('To recreate this project, run:');
348
+ // Function that outputs a string given the CLI results and the packageManager. The outputted string should be a command that can be run to recreate the project
349
+ const generateRerunScript = (cliResults) => {
350
+ var _a, _b;
351
+ let script = `npx rn-new@latest ${(0, systemCommand_1.quoteShellArg)(cliResults.projectName)} `;
352
+ const isNativewindUISelected = cliResults.packages.some((p) => p.name === 'nativewindui');
353
+ if (isNativewindUISelected) {
354
+ const flagToUse = options.nwui ? 'nwui' : 'nativewindui';
355
+ script += `--${flagToUse} `;
356
+ const nativewindUIComponents = (_b = (_a = cliResults.packages.find((p) => p.name === 'nativewindui')) === null || _a === void 0 ? void 0 : _a.options.selectedComponents) !== null && _b !== void 0 ? _b : [];
357
+ // we do this to account for older stored config e.g that has selectable text in it
358
+ const onlyValidComponents = nativewindUIComponents.filter((c) => constants_1.nativewindUIOptions.includes(c));
359
+ if (onlyValidComponents.length === 0) {
360
+ script += '--blank ';
361
+ }
362
+ else if (onlyValidComponents.length !== constants_1.nativewindUIOptions.length) {
363
+ script += `--selected-components=${onlyValidComponents.join(',')} `;
364
+ }
365
+ // this should always be expo router for nwui
366
+ const chosenNavigationOption = cliResults.packages.find((p) => p.type === 'navigation');
367
+ const hasNavigationPackage = chosenNavigationOption !== undefined;
368
+ const navigationType = chosenNavigationOption.options.type;
369
+ if (hasNavigationPackage) {
370
+ // NOTE we don't need to add expo-router since its currently getting automatically added with nativewindui
371
+ // NOTE stack is default so doesn't need to applied.
372
+ if (navigationType === 'tabs') {
373
+ script += '--tabs ';
374
+ }
375
+ else if (navigationType === 'drawer + tabs') {
376
+ script += '--drawer+tabs ';
377
+ }
378
+ }
379
+ const stateManagementPackage = cliResults.packages.find((p) => p.type === 'state-management');
380
+ if (stateManagementPackage) {
381
+ script += `--${stateManagementPackage.name} `;
382
+ }
383
+ }
384
+ else {
385
+ // Add the packages
386
+ cliResults.packages.forEach((p) => {
387
+ var _a, _b;
388
+ script += `--${p.name} `;
389
+ // If the package is a navigation package, add the type if it is tabs
390
+ if (p.type === 'navigation') {
391
+ if (((_a = p.options) === null || _a === void 0 ? void 0 : _a.type) === 'tabs') {
392
+ script += '--tabs ';
393
+ }
394
+ else if (((_b = p.options) === null || _b === void 0 ? void 0 : _b.type) === 'drawer + tabs') {
395
+ script += '--drawer+tabs ';
396
+ }
397
+ }
398
+ });
399
+ }
400
+ // Check if the user wants to skip installing packages
401
+ if (cliResults.flags.noInstall) {
402
+ script += '--no-install ';
403
+ }
404
+ // Check if the user wants to skip initializing git
405
+ if (cliResults.flags.noGit) {
406
+ script += '--no-git ';
407
+ }
408
+ // Check if the user wants to overwrite the project directory
409
+ if (!cliResults.flags.importAlias) {
410
+ script += '--no-import-alias ';
411
+ }
412
+ // Add the package manager
413
+ if (cliResults.flags.packageManager !== 'npm') {
414
+ script += `--${cliResults.flags.packageManager}`;
415
+ }
416
+ if (cliResults.flags.eas) {
417
+ script += ` --eas`;
418
+ }
419
+ return script;
420
+ };
421
+ const packageManager = (0, utilities_1.getPackageManager)(toolbox, cliResults);
422
+ warning(` ${generateRerunScript(cliResults)}`);
423
+ const { packages } = cliResults;
424
+ // Define props to be passed into the templates
425
+ const authenticationPackage = packages.find((p) => p.type === 'authentication') || undefined;
426
+ const navigationPackage = packages.find((p) => p.type === 'navigation') || undefined;
427
+ // if there is no styling package, add the stylesheet package
428
+ const stylingPackage = packages.find((p) => p.type === 'styling');
429
+ const internalizationPackage = packages.find((p) => p.type === 'internationalization');
430
+ const analyticsPackage = packages.find((p) => p.type === 'analytics');
431
+ //add the state management package if it is selected
432
+ const stateManagementPackage = packages.find((p) => p.type === 'state-management') || undefined;
433
+ let files = [];
434
+ files = (0, utilities_1.configureProjectFiles)(authenticationPackage, files, navigationPackage, stylingPackage, analyticsPackage, toolbox, cliResults, internalizationPackage, stateManagementPackage);
435
+ // Once all the files are defined, format and generate them
436
+ let formattedFiles = [];
437
+ formattedFiles = (0, utilities_1.generateProjectFiles)(authenticationPackage, analyticsPackage, cliResults, files, formattedFiles, navigationPackage, packageManager, stylingPackage, toolbox, internalizationPackage, stateManagementPackage);
438
+ yield (0, utilities_1.printOutput)(cliResults, formattedFiles, toolbox, stylingPackage);
439
+ // Add publish command handling after project creation
440
+ if (options.publish) {
441
+ info('\nPublishing to GitHub...');
442
+ const repoUrl = yield (0, utilities_1.publishToGitHub)(toolbox, cliResults.projectName);
443
+ if (repoUrl) {
444
+ success('\n🎉 Successfully published to GitHub!');
445
+ info(`\n📎 Repository URL: ${repoUrl}`);
446
+ }
447
+ }
448
+ }
449
+ }
450
+ catch (err) {
451
+ if (process.env.NODE_ENV === 'test' || process.env.NODE_ENV === 'development') {
452
+ error(`error: ${err}`);
453
+ }
454
+ if (err === '') {
455
+ // user cancelled/exited the interactive CLI
456
+ return void success(`\nCancelled... 👋 \n`);
457
+ }
458
+ if (err.message.includes(constants_1.bunInstallationError)) {
459
+ return void success(`\nCancelled to install recommended version of Bun... 👋 \n`);
460
+ }
461
+ if (process.env.NODE_ENV !== 'test') {
462
+ // Delete all files with projectName
463
+ yield removeAsync(cliResults.projectName);
464
+ }
465
+ printSomethingWentWrong();
466
+ throw err;
467
+ }
468
+ })
469
+ };
470
+ exports.default = command;
471
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWV4cG8tc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY3JlYXRlLWV4cG8tc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFDQSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFN0IsNENBVXNCO0FBQ3RCLDRDQU9zQjtBQUN0QixvQ0FBZ0Y7QUFDaEYsNkZBQXFFO0FBQ3JFLDhEQUEyRDtBQUMzRCwwRUFBdUU7QUFDdkUsNENBQStEO0FBQy9ELG1HQUEyRTtBQUUzRSxNQUFNLDBCQUEwQixHQUE4RDtJQUM1RjtRQUNFLElBQUksRUFBRSw4QkFBOEI7UUFDcEMsT0FBTyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsOEJBQThCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUM7S0FDNUc7SUFDRDtRQUNFLElBQUksRUFBRSx5QkFBeUI7UUFDL0IsT0FBTyxFQUFFLENBQUMsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxDQUFDO0tBQzVFO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLFNBQVMsQ0FBQztLQUNuRTtJQUNEO1FBQ0UsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLENBQUM7S0FDdkQ7SUFDRDtRQUNFLElBQUksRUFBRSxrQ0FBa0M7UUFDeEMsT0FBTyxFQUFFO1lBQ1AsK0JBQStCO1lBQy9CLGtDQUFrQztZQUNsQyxxQkFBcUI7WUFDckIsb0JBQW9CO1NBQ3JCO0tBQ0Y7SUFDRDtRQUNFLElBQUksRUFBRSx1QkFBdUI7UUFDN0IsT0FBTyxFQUFFLENBQUMscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxDQUFDO0tBQ3RFO0NBQ0YsQ0FBQztBQUVGLFNB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
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.bunInstallationError = exports.projectNameValidationError = exports.navigationValidationError = exports.nativewindUIOptions = exports.defaultOptions = exports.DEFAULT_APP_NAME = exports.TITLE_TEXT = exports.RN_NEW_TITLE = exports.CES_TITLE = void 0;
5
+ exports.CES_TITLE = 'create expo stack';
6
+ exports.RN_NEW_TITLE = 'rn new';
7
+ exports.TITLE_TEXT = ((_a = process.argv[1]) === null || _a === void 0 ? void 0 : _a.includes('rn-new')) ? exports.RN_NEW_TITLE : exports.CES_TITLE;
8
+ exports.DEFAULT_APP_NAME = 'my-expo-app';
9
+ exports.defaultOptions = {
10
+ projectName: exports.DEFAULT_APP_NAME,
11
+ packages: [],
12
+ flags: {
13
+ noGit: false,
14
+ noInstall: false,
15
+ overwrite: false,
16
+ importAlias: '~/',
17
+ packageManager: undefined,
18
+ eas: false,
19
+ publish: false
20
+ }
21
+ };
22
+ exports.nativewindUIOptions = [
23
+ 'action-sheet',
24
+ 'activity-indicator',
25
+ 'activity-view',
26
+ 'avatar',
27
+ 'button',
28
+ 'date-picker',
29
+ 'picker',
30
+ 'progress-indicator',
31
+ 'ratings-indicator',
32
+ 'slider',
33
+ 'text',
34
+ 'toggle'
35
+ ];
36
+ exports.navigationValidationError = `You must pass in either --react-navigation or --expo-router if you want to use the --tabs or --drawer+tabs options`;
37
+ exports.projectNameValidationError = `A project with the name`;
38
+ exports.bunInstallationError = 'Cancelled to install recommended version of Bun.';
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRWEsUUFBQSxTQUFTLEdBQUcsbUJBQW1CLENBQUM7QUFDaEMsUUFBQSxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQ3pCLFFBQUEsVUFBVSxHQUFHLENBQUEsTUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxDQUFDLG9CQUFZLENBQUMsQ0FBQyxDQUFDLGlCQUFTLENBQUM7QUFFNUUsUUFBQSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7QUFFakMsUUFBQSxjQUFjLEdBQWU7SUFDeEMsV0FBVyxFQUFFLHdCQUFnQjtJQUM3QixRQUFRLEVBQUUsRUFBRTtJQUNaLEtBQUssRUFBRTtRQUNMLEtBQUssRUFBRSxLQUFLO1FBQ1osU0FBUyxFQUFFLEtBQUs7UUFDaEIsU0FBUyxFQUFFLEtBQUs7UUFDaEIsV0FBVyxFQUFFLElBQUk7UUFDakIsY0FBYyxFQUFFLFNBQVM7UUFDekIsR0FBRyxFQUFFLEtBQUs7UUFDVixPQUFPLEVBQUUsS0FBSztLQUNmO0NBQ0YsQ0FBQztBQUVXLFFBQUEsbUJBQW1CLEdBQXlCO0lBQ3ZELGNBQWM7SUFDZCxvQkFBb0I7SUFDcEIsZUFBZTtJQUNmLFFBQVE7SUFDUixRQUFRO0lBQ1IsYUFBYTtJQUNiLFFBQVE7SUFDUixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLFFBQVE7SUFDUixNQUFNO0lBQ04sUUFBUTtDQUNULENBQUM7QUFFVyxRQUFBLHlCQUF5QixHQUFHLG9IQUFvSCxDQUFDO0FBQ2pKLFFBQUEsMEJBQTBCLEdBQUcseUJBQXlCLENBQUM7QUFDdkQsUUFBQSxvQkFBb0IsR0FBRyxrREFBa0QsQ0FBQyJ9
@@ -0,0 +1,26 @@
1
+ node_modules/
2
+ .expo/
3
+ dist/
4
+ npm-debug.*
5
+ *.jks
6
+ *.p8
7
+ *.p12
8
+ *.key
9
+ *.mobileprovision
10
+ *.orig.*
11
+ web-build/
12
+ <% if (props.navigationPackage?.name === "expo-router") { %># expo router
13
+ expo-env.d.ts<% } %>
14
+ <% if (props.stylingPackage?.name === "tamagui") { %># tamagui
15
+ .tamagui/<% } %>
16
+ <% if ((props.authenticationPackage?.name === "supabase") || (props.authenticationPackage?.name === "firebase" || (props.analyticsPackage?.name === 'vexo-analytics'))) { %># firebase/supabase/vexo
17
+ .env<% } %>
18
+
19
+ ios
20
+ android
21
+
22
+ # macOS
23
+ .DS_Store
24
+
25
+ # Temporary files created by Metro to check the health of the file watcher
26
+ .metro-health-check*
@@ -0,0 +1 @@
1
+ node-linker=hoisted
@@ -0,0 +1,66 @@
1
+ <% if (props.stylingPackage?.name === "unistyles") { %>
2
+ import './unistyles';
3
+ <% } %>
4
+ import { ScreenContent } from 'components/ScreenContent';
5
+ import { StatusBar } from 'expo-status-bar';
6
+
7
+ <% if (props.stylingPackage?.name === "restyle") { %>
8
+ import { ThemeProvider } from '@shopify/restyle';
9
+ import { theme } from './theme';
10
+ <% } %>
11
+
12
+ <% if (props.stylingPackage?.name === "tamagui") { %>
13
+ import { TamaguiProvider } from 'tamagui';
14
+ import config from './tamagui.config';
15
+ <% } %>
16
+
17
+ <% if (props.internalizationPackage?.name === "i18next") { %>
18
+ import './translation';
19
+ import { InternalizationExample } from 'components/InternalizationExample';
20
+ <% } %>
21
+
22
+ <% if (props.stylingPackage?.name === "nativewind" || props.stylingPackage?.name === "uniwind") { %>
23
+ import './global.css';
24
+ import { SafeAreaProvider } from 'react-native-safe-area-context';
25
+ <% } else if (props.stylingPackage?.name === "nativewinui") { %>
26
+ import './global.css';
27
+ import 'expo-dev-client';
28
+ <% } %>
29
+
30
+ <% if (props.analyticsPackage?.name === "vexo-analytics") { %>
31
+ import { vexo } from 'vexo-analytics';
32
+
33
+ const vexoApiKey = process.env.EXPO_PUBLIC_VEXO_API_KEY;
34
+ if (vexoApiKey) {
35
+ vexo(vexoApiKey);
36
+ }
37
+ <% } %>
38
+
39
+ export default function App() {
40
+ return (
41
+ <% if (props.stylingPackage?.name === "nativewind" || props.stylingPackage?.name === "uniwind") { %>
42
+ <SafeAreaProvider>
43
+ <% } else if (props.stylingPackage?.name === "restyle") { %>
44
+ <ThemeProvider theme={theme}>
45
+ <% } else if (props.stylingPackage?.name === "tamagui") { %>
46
+ <TamaguiProvider config={config}>
47
+ <% } else { %>
48
+ <>
49
+ <% } %>
50
+ <ScreenContent title="Home" path="App.tsx">
51
+ <% if (props.internalizationPackage?.name === "i18next") { %>
52
+ <InternalizationExample />
53
+ <% } %>
54
+ </ScreenContent>
55
+ <StatusBar style="auto" />
56
+ <% if (props.stylingPackage?.name === "nativewind" || props.stylingPackage?.name === "uniwind") { %>
57
+ </SafeAreaProvider>
58
+ <% } else if (props.stylingPackage?.name === "restyle") { %>
59
+ </ThemeProvider>
60
+ <% } else if (props.stylingPackage?.name === "tamagui") { %>
61
+ </TamaguiProvider>
62
+ <% } else { %>
63
+ </>
64
+ <% } %>
65
+ );
66
+ }