@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,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getVersionForPackageManager = exports.getDefaultPackageManagerVersion = exports.getPackageManagerRunnerX = exports.getPackageManager = void 0;
4
+ // TODO: Rework this function as it is pretty messy
5
+ function getPackageManager(toolbox, cliResults) {
6
+ const { parameters: { options } } = toolbox;
7
+ if (options.npm)
8
+ return 'npm';
9
+ if (options.yarn)
10
+ return 'yarn';
11
+ if (options.pnpm)
12
+ return 'pnpm';
13
+ if (options.bun)
14
+ return 'bun';
15
+ if (cliResults.flags.packageManager && cliResults.flags.packageManager !== 'npm') {
16
+ return cliResults.flags.packageManager;
17
+ }
18
+ // This environment variable is set by npm and yarn but pnpm seems less consistent
19
+ const userAgent = process.env.npm_config_user_agent;
20
+ if (userAgent) {
21
+ if (userAgent.startsWith('yarn')) {
22
+ return 'yarn';
23
+ }
24
+ else if (userAgent.startsWith('pnpm')) {
25
+ return 'pnpm';
26
+ }
27
+ else if (userAgent.startsWith('bun')) {
28
+ return 'bun';
29
+ }
30
+ else {
31
+ return 'npm';
32
+ }
33
+ }
34
+ else if (cliResults.flags.packageManager) {
35
+ // If no user agent is set, assume npm
36
+ return cliResults.flags.packageManager;
37
+ }
38
+ else {
39
+ return 'npm';
40
+ }
41
+ }
42
+ exports.getPackageManager = getPackageManager;
43
+ function getPackageManagerRunnerX(toolbox, cliResults) {
44
+ const { parameters: { options } } = toolbox;
45
+ if (options.npm)
46
+ return 'npx';
47
+ // yarn dlx has issues
48
+ if (options.yarn)
49
+ return 'npx';
50
+ if (options.pnpm)
51
+ return 'pnpx';
52
+ if (options.bun)
53
+ return 'bunx';
54
+ // This environment variable is set by npm and yarn but pnpm seems less consistent
55
+ const userAgent = process.env.npm_config_user_agent;
56
+ if (userAgent) {
57
+ if (userAgent.startsWith('yarn')) {
58
+ // yarn dlx has issues
59
+ return 'npx';
60
+ }
61
+ else if (userAgent.startsWith('pnpm')) {
62
+ return 'pnpx';
63
+ }
64
+ else if (userAgent.startsWith('bun')) {
65
+ return 'bunx';
66
+ }
67
+ else {
68
+ return 'npx';
69
+ }
70
+ }
71
+ else {
72
+ // Determine runner based on cliResults.flags.packageManager
73
+ if (cliResults.flags.packageManager === 'yarn')
74
+ return 'npx'; // yarn dlx has issues
75
+ if (cliResults.flags.packageManager === 'pnpm')
76
+ return 'pnpx';
77
+ if (cliResults.flags.packageManager === 'bun')
78
+ return 'bunx';
79
+ // If no user agent is set, assume npm
80
+ return 'npx';
81
+ }
82
+ }
83
+ exports.getPackageManagerRunnerX = getPackageManagerRunnerX;
84
+ function getDefaultPackageManagerVersion() {
85
+ const userAgent = process.env.npm_config_user_agent;
86
+ if (userAgent) {
87
+ return userAgent.split(' ')[0].split('/')[1];
88
+ }
89
+ }
90
+ exports.getDefaultPackageManagerVersion = getDefaultPackageManagerVersion;
91
+ function getVersionForPackageManager(packageManager) {
92
+ try {
93
+ const version = require('child_process').execSync(`${packageManager} --version`);
94
+ return version.toString().replace('\n', '');
95
+ }
96
+ catch (_error) {
97
+ // this happens with yarn because its dumb
98
+ console.log(`Error getting version for package manager ${packageManager}`);
99
+ return 'unknown';
100
+ }
101
+ }
102
+ exports.getVersionForPackageManager = getVersionForPackageManager;
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0UGFja2FnZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbGl0aWVzL2dldFBhY2thZ2VNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLG1EQUFtRDtBQUNuRCxTQUFnQixpQkFBaUIsQ0FBQyxPQUFnQixFQUFFLFVBQXNCO0lBQ3hFLE1BQU0sRUFDSixVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFDeEIsR0FBRyxPQUFPLENBQUM7SUFFWixJQUFJLE9BQU8sQ0FBQyxHQUFHO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUIsSUFBSSxPQUFPLENBQUMsSUFBSTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ2hDLElBQUksT0FBTyxDQUFDLElBQUk7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNoQyxJQUFJLE9BQU8sQ0FBQyxHQUFHO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFOUIsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLGNBQWMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLGNBQWMsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNqRixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxrRkFBa0Y7SUFDbEYsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztJQUVwRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQzthQUFNLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLEtBQUssQ0FB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
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./configureProjectFiles"), exports);
18
+ __exportStar(require("./generateProjectFiles"), exports);
19
+ __exportStar(require("./getPackageManager"), exports);
20
+ __exportStar(require("./printOutput"), exports);
21
+ __exportStar(require("./renderTitle"), exports);
22
+ __exportStar(require("./runCLI"), exports);
23
+ __exportStar(require("./runIgnite"), exports);
24
+ __exportStar(require("./showHelp"), exports);
25
+ __exportStar(require("./usePackage"), exports);
26
+ __exportStar(require("./publishToGitHub"), exports);
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbGl0aWVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwREFBd0M7QUFDeEMseURBQXVDO0FBQ3ZDLHNEQUFvQztBQUNwQyxnREFBOEI7QUFDOUIsZ0RBQThCO0FBQzlCLDJDQUF5QjtBQUN6Qiw4Q0FBNEI7QUFDNUIsNkNBQTJCO0FBQzNCLCtDQUE2QjtBQUM3QixvREFBa0MifQ==
@@ -0,0 +1,251 @@
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
+ exports.printOutput = void 0;
16
+ const prompts_1 = require("@clack/prompts");
17
+ const os_1 = __importDefault(require("os"));
18
+ const copyBaseAssets_1 = require("./copyBaseAssets");
19
+ const generateNWUI_1 = require("./generateNWUI");
20
+ const getPackageManager_1 = require("./getPackageManager");
21
+ const runEasConfigure_1 = require("./runEasConfigure");
22
+ const systemCommand_1 = require("./systemCommand");
23
+ const promises_1 = require("fs/promises");
24
+ const yarnRcFixes = `
25
+ enableGlobalCache: false
26
+
27
+ nodeLinker: node-modules`;
28
+ function printOutput(cliResults, formattedFiles, toolbox, stylingPackage) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ const { parameters: { options }, print: { info, success, highlight, warning } } = toolbox;
31
+ const { projectName, flags } = cliResults;
32
+ const projectDir = (0, systemCommand_1.quoteShellArg)(projectName);
33
+ const s = (0, prompts_1.spinner)();
34
+ // Output the results to the user
35
+ s.start('Initializing your project...');
36
+ yield Promise.all(formattedFiles);
37
+ s.stop('Project initialized!');
38
+ s.start('Copying base assets...');
39
+ yield (0, copyBaseAssets_1.copyBaseAssets)(projectName, toolbox);
40
+ s.stop('Base assets copied!');
41
+ // check if npm option is set, otherwise set based on what the system is configure to use
42
+ const packageManager = cliResults.flags.packageManager || (0, getPackageManager_1.getPackageManager)(toolbox, cliResults);
43
+ const isNpm = packageManager === 'npm';
44
+ // seems like all package managers actually support the run command
45
+ const runCommand = `${packageManager} run`;
46
+ const runnerType = (0, getPackageManager_1.getPackageManagerRunnerX)(toolbox, cliResults);
47
+ const pnpmInstallEnv = packageManager === 'pnpm' ? { PNPM_CONFIG_STRICT_DEP_BUILDS: 'false' } : undefined;
48
+ if (!options.noInstall && !flags.noInstall) {
49
+ s.start(`Installing dependencies using ${packageManager}...`);
50
+ // attempt to improve npm install speeds by disabling audit and progress
51
+ const additionalFlags = isNpm
52
+ ? '--silent --no-audit --progress=false --legacy-peer-deps'
53
+ : packageManager === 'pnpm'
54
+ ? '--config.strict-dep-builds=false'
55
+ : '';
56
+ if (packageManager === 'yarn') {
57
+ // create empty yarn.lock to stop yarn from complaining
58
+ yield (0, promises_1.writeFile)(`${projectName}/yarn.lock`, '');
59
+ // apply fixes to .yarnrc.yml to stop issues with PnP and caching
60
+ yield (0, promises_1.appendFile)(`${projectName}/.yarnrc.yml`, yarnRcFixes);
61
+ yield (0, systemCommand_1.runSystemCommand)({
62
+ toolbox,
63
+ command: `cd ${projectDir} && yarn set version stable`,
64
+ stdio: systemCommand_1.ONLY_ERRORS,
65
+ errorMessage: 'Error setting yarn version'
66
+ });
67
+ }
68
+ yield (0, systemCommand_1.runSystemCommand)({
69
+ toolbox,
70
+ command: `cd ${projectDir} && ${packageManager} install ${additionalFlags}`,
71
+ stdio: isNpm ? undefined : systemCommand_1.ONLY_ERRORS,
72
+ errorMessage: 'Error installing dependencies',
73
+ env: pnpmInstallEnv
74
+ });
75
+ s.stop('Dependencies installed!');
76
+ s.start('Updating packages to expo compatible versions...');
77
+ yield (0, systemCommand_1.runSystemCommand)({
78
+ toolbox,
79
+ command: `cd ${projectDir} && ${runnerType} expo@latest install --fix ${isNpm ? `-- ${additionalFlags}` : ``}`,
80
+ errorMessage: 'Error updating packages',
81
+ stdio: undefined,
82
+ env: pnpmInstallEnv
83
+ });
84
+ s.stop('Packages updated!');
85
+ yield (0, generateNWUI_1.generateNWUI)(cliResults, toolbox);
86
+ s.start(`Cleaning up your project...`);
87
+ // format the files with prettier and eslint using installed packages.
88
+ yield (0, systemCommand_1.runSystemCommand)({
89
+ toolbox,
90
+ command: `cd ${projectDir} && ${runCommand} format`,
91
+ errorMessage: 'Error formatting code',
92
+ stdio: systemCommand_1.ONLY_ERRORS,
93
+ env: pnpmInstallEnv
94
+ });
95
+ s.stop('Project files formatted!');
96
+ }
97
+ else {
98
+ yield (0, generateNWUI_1.generateNWUI)(cliResults, toolbox);
99
+ s.start(`formatting your project using ${runnerType} prettier...`);
100
+ // Running prettier using global runners against the template.
101
+ // Use --no-config to prevent using project's config (that may have plugins/dependencies)
102
+ yield (0, systemCommand_1.runSystemCommand)({
103
+ toolbox,
104
+ command: `${runnerType} prettier "${projectName}/**/*.{json,js,jsx,ts,tsx}" --no-config --write`,
105
+ errorMessage: 'Error formatting code',
106
+ stdio: systemCommand_1.ONLY_ERRORS
107
+ });
108
+ s.stop('Project files formatted!');
109
+ }
110
+ if (!options.noGit && !flags.noGit && process.env.NODE_ENV !== 'test') {
111
+ s.start(`Initializing git...`);
112
+ // initialize git repo and add first commit
113
+ // get create expo stack version
114
+ const cesVersion = require('../../package.json').version || '2.0.0';
115
+ const generatedByMessage = (0, systemCommand_1.quoteShellArg)(`Generated by create-expo-stack ${cesVersion}`);
116
+ yield (0, systemCommand_1.runSystemCommand)({
117
+ toolbox,
118
+ command: `cd ${projectDir} && git init --quiet && git add . && git commit --no-verify --no-gpg-sign -m "Initial commit" -m ${generatedByMessage} --quiet`,
119
+ errorMessage: 'Error initializing git',
120
+ stdio: systemCommand_1.ONLY_ERRORS,
121
+ env: {
122
+ GIT_TERMINAL_PROMPT: '0',
123
+ GIT_EDITOR: 'true',
124
+ GCM_INTERACTIVE: 'Never'
125
+ }
126
+ });
127
+ s.stop(`Git initialized!`);
128
+ }
129
+ if (cliResults.flags.eas) {
130
+ yield (0, runEasConfigure_1.easConfigure)(cliResults, packageManager, toolbox);
131
+ }
132
+ if ((stylingPackage === null || stylingPackage === void 0 ? void 0 : stylingPackage.name) === 'unistyles' && os_1.default.type() === 'Darwin') {
133
+ try {
134
+ const xcodeVersion = yield (0, systemCommand_1.runSystemCommand)({
135
+ command: `xcodebuild -version | head -n 1 | awk '{print $2}'`,
136
+ errorMessage: 'failed to check xcode version',
137
+ stdio: 'pipe',
138
+ toolbox,
139
+ failOnError: false
140
+ });
141
+ const xcodeVersionString = String(xcodeVersion).trim();
142
+ if (xcodeVersionString === '16.2') {
143
+ warning('\nUnistyles is currently not compatible with xcode 16.2 due to an xcode bug, downgrade to 16.1 or lower to use Unistyles \nhttps://github.com/jpudysz/react-native-unistyles/issues/507');
144
+ }
145
+ }
146
+ catch (_e) {
147
+ // ignore this error
148
+ }
149
+ }
150
+ const printVexoSteps = () => {
151
+ info(``);
152
+ highlight('Head over to https://vexo.co to create a new Vexo project.');
153
+ info(``);
154
+ highlight(`Get the API key:`);
155
+ info(`1. Create a new app in your vexo dashboard:`);
156
+ highlight(`https://vexo.co/apps`);
157
+ info(`2. Find your API key on your app settings page.`);
158
+ info(`3. Copy the key and paste it into your .env file.`);
159
+ info(`4. Optionally, follow the docs to get started with Vexo:`);
160
+ highlight(`https://docs.vexo.co/`);
161
+ info(``);
162
+ };
163
+ // check if packages includes package with name "supabase"
164
+ if (cliResults.packages.some((pkg) => pkg.name === 'supabase')) {
165
+ success(`\nSuccess! 🎉 Now, here's what's next:`);
166
+ info(``);
167
+ highlight('Head over to https://database.new to create a new Supabase project.');
168
+ info(``);
169
+ highlight(`Get the Project URL and anon key from the API settings:`);
170
+ info(`1. Go to the API settings page in the Dashboard.`);
171
+ info(`2. Find your Project URL, anon, and service_role keys on this page.`);
172
+ info(`3. Copy these keys and paste them into your .env file.`);
173
+ info(`4. Optionally, follow one of these guides to get started with Supabase:`);
174
+ highlight(`https://docs.expo.dev/guides/using-supabase/#next-steps`);
175
+ if (cliResults.packages.some((pkg) => pkg.name === 'vexo-analytics')) {
176
+ printVexoSteps();
177
+ }
178
+ success(`Once you're done, run the following to get started: `);
179
+ info(``);
180
+ }
181
+ else if (cliResults.packages.some((pkg) => pkg.name === 'firebase')) {
182
+ success(`\nSuccess! 🎉 Now, here's what's next:`);
183
+ info(``);
184
+ highlight('Head over to https://console.firebase.google.com/ to create a new Firebase project.');
185
+ info(``);
186
+ highlight(`Get the API key and other unique identifiers:`);
187
+ info(`1. Register a web app in your Firebase project:`);
188
+ highlight(`https://firebase.google.com/docs/web/setup#register-app`);
189
+ info(`2. Find your API key and other identifiers.`);
190
+ info(`3. Copy these keys and paste them into your .env file.`);
191
+ info(`4. Optionally, follow one of these guides to get started with Firebase:`);
192
+ highlight(`https://docs.expo.dev/guides/using-firebase/#next-steps`);
193
+ if (cliResults.packages.some((pkg) => pkg.name === 'vexo-analytics')) {
194
+ printVexoSteps();
195
+ }
196
+ success(`Once you're done, run the following to get started: `);
197
+ info(``);
198
+ }
199
+ else {
200
+ if (cliResults.packages.some((pkg) => pkg.name === 'vexo-analytics')) {
201
+ success(`Success! 🎉 Now, here's what's next:`);
202
+ printVexoSteps();
203
+ success(`Once you're done, run the following to get started: `);
204
+ }
205
+ else {
206
+ success('\nSuccess! 🎉 Now, just run the following to get started: ');
207
+ }
208
+ info(``);
209
+ }
210
+ let step = 1;
211
+ if (flags.eas) {
212
+ info(`To build for development:`);
213
+ info(``);
214
+ highlight(`${step}. cd ${projectDir}`);
215
+ if (!flags.noInstall)
216
+ highlight(`${++step}. ${packageManager} install`);
217
+ highlight(`${++step}. eas build --profile=development`);
218
+ highlight(`${++step}. ${runCommand} start`);
219
+ info(``);
220
+ step = 1;
221
+ info(`To create a build to share with others:`);
222
+ info(``);
223
+ highlight(`${step}. cd ${projectDir}`);
224
+ if (!flags.noInstall)
225
+ highlight(`${++step}. ${packageManager} install`);
226
+ highlight(`${++step}. eas build --profile=preview`);
227
+ info(``);
228
+ info('To add additional ios users:');
229
+ info(``);
230
+ highlight(`eas device:create `);
231
+ }
232
+ else {
233
+ highlight(`${step}. cd ${projectDir}`);
234
+ if (flags.noInstall)
235
+ highlight(`${++step}. ${packageManager} install`);
236
+ if (stylingPackage.name === 'unistyles' || stylingPackage.name === 'nativewindui') {
237
+ highlight(`${++step}. npx expo prebuild --clean`);
238
+ }
239
+ highlight(`${++step}. ${runCommand} ios`);
240
+ }
241
+ info(``);
242
+ if (!flags.publish) {
243
+ info('To create a GitHub repository for this project, run:');
244
+ highlight('npx rn-new --publish');
245
+ info(``);
246
+ }
247
+ (0, prompts_1.outro)(`If you're looking to move even faster, I may be able to help!\n- ces@danstepanov.com`);
248
+ });
249
+ }
250
+ exports.printOutput = printOutput;
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnRPdXRwdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbGl0aWVzL3ByaW50T3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUFnRDtBQUVoRCw0Q0FBb0I7QUFFcEIscURBQWtEO0FBQ2xELGlEQUE4QztBQUM5QywyREFBa0Y7QUFDbEYsdURBQWlEO0FBQ2pELG1EQUErRTtBQUMvRSwwQ0FBb0Q7QUFFcEQsTUFBTSxXQUFXLEdBQUc7Ozt5QkFHSyxDQUFDO0FBRTFCLFNBQXNCLFdBQVcsQ0FDL0IsVUFBc0IsRUFDdEIsY0FBcUIsRUFDckIsT0FBZ0IsRUFDaEIsY0FBaUM7O1FBRWpDLE1BQU0sRUFDSixVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFDdkIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQzdDLEdBQUcsT0FBTyxDQUFDO1FBRVosTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsR0FBRyxVQUFVLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQUcsSUFBQSw2QkFBYSxFQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxHQUFHLElBQUEsaUJBQU8sR0FBRSxDQUFDO1FBRXBCLGlDQUFpQztRQUVqQyxDQUFDLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDeEMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUUvQixDQUFDLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDbEMsTUFBTSxJQUFBLCtCQUFjLEVBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUU5Qix5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
@@ -0,0 +1,173 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.publishToGitHub = void 0;
13
+ const child_process_1 = require("child_process");
14
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
15
+ const verifyRepoDeleted = (repoName) => {
16
+ try {
17
+ (0, child_process_1.execSync)(`gh repo view ${repoName}`, { stdio: 'ignore' });
18
+ return false; // Repository still exists
19
+ }
20
+ catch (e) {
21
+ return true; // Repository is deleted
22
+ }
23
+ };
24
+ const publishToGitHub = (toolbox, projectName) => __awaiter(void 0, void 0, void 0, function* () {
25
+ const { print: { info, error } } = toolbox;
26
+ try {
27
+ // Check if gh CLI is installed
28
+ try {
29
+ (0, child_process_1.execSync)('gh --version', { stdio: 'ignore' });
30
+ }
31
+ catch (e) {
32
+ error('\nGitHub CLI (gh) is not installed.');
33
+ info('Please install it from: https://cli.github.com/');
34
+ info('Then run: gh auth login');
35
+ return null;
36
+ }
37
+ // Check if user is authenticated with correct permissions
38
+ try {
39
+ const scopes = (0, child_process_1.execSync)('gh auth status -t 2>&1', { encoding: 'utf8' });
40
+ if (!scopes.includes('delete_repo')) {
41
+ error('\nMissing required GitHub permissions.');
42
+ info('Please run the following command to grant delete repository permissions:');
43
+ info(' gh auth refresh -h github.com -s delete_repo');
44
+ return null;
45
+ }
46
+ }
47
+ catch (e) {
48
+ error('\nYou are not authenticated with GitHub CLI.');
49
+ info('Please run: gh auth login');
50
+ return null;
51
+ }
52
+ // Check if repository already exists
53
+ try {
54
+ (0, child_process_1.execSync)(`gh repo view ${projectName}`, { stdio: 'ignore' });
55
+ // Repository exists, ask user if they want to delete it
56
+ const response = yield toolbox.prompt.ask({
57
+ type: 'confirm',
58
+ name: 'deleteRepo',
59
+ message: `Repository "${projectName}" already exists and has content. Would you like to delete it?`
60
+ });
61
+ if (!response.deleteRepo) {
62
+ info('\nPublication cancelled.');
63
+ return null;
64
+ }
65
+ // Delete the existing repository
66
+ info('\nDeleting existing repository...');
67
+ try {
68
+ (0, child_process_1.execSync)(`gh repo delete ${projectName} --yes`, { stdio: 'ignore' });
69
+ info('\nExisting repository deleted.');
70
+ // Wait and verify deletion
71
+ info('Waiting for GitHub to process deletion...');
72
+ let attempts = 0;
73
+ const maxAttempts = 5;
74
+ while (attempts < maxAttempts) {
75
+ yield sleep(2000);
76
+ if (verifyRepoDeleted(projectName)) {
77
+ break;
78
+ }
79
+ attempts++;
80
+ if (attempts < maxAttempts) {
81
+ info(`Still waiting for deletion to process... (attempt ${attempts + 1}/${maxAttempts})`);
82
+ }
83
+ }
84
+ if (!verifyRepoDeleted(projectName)) {
85
+ error('\nFailed to delete existing repository. Please try again later or use a different name.');
86
+ return null;
87
+ }
88
+ }
89
+ catch (e) {
90
+ error('\nFailed to delete existing repository. Please try again later or use a different name.');
91
+ return null;
92
+ }
93
+ }
94
+ catch (e) {
95
+ error('\nFailed to check if repository exists.');
96
+ return null;
97
+ }
98
+ // Ask user if they want the repository to be public or private
99
+ const visibilityResponse = yield toolbox.prompt.ask({
100
+ type: 'select',
101
+ name: 'visibility',
102
+ message: 'Would you like the repository to be public or private?',
103
+ choices: ['public', 'private']
104
+ });
105
+ // Creating a new Github repository
106
+ info('\nCreating new repository...');
107
+ try {
108
+ (0, child_process_1.execSync)(`gh repo create ${projectName} --${visibilityResponse.visibility}`, { stdio: 'pipe' });
109
+ }
110
+ catch (e) {
111
+ error('\nFailed to create new repository.');
112
+ return null;
113
+ }
114
+ info('\nConfiguring git credentials...');
115
+ // Get the GitHub CLI token
116
+ const ghToken = (0, child_process_1.execSync)('gh auth token', { encoding: 'utf8' }).trim();
117
+ // Configure git to use the GitHub CLI token
118
+ (0, child_process_1.execSync)(`git config --local credential.helper ''`, { stdio: 'ignore' });
119
+ (0, child_process_1.execSync)(`git config --local http.https://github.com/.extraheader "AUTHORIZATION: basic ${Buffer.from(`x-access-token:${ghToken}`).toString('base64')}"`, { stdio: 'ignore' });
120
+ // Get the current user's GitHub username
121
+ const username = (0, child_process_1.execSync)('gh api user -q .login', { encoding: 'utf8' }).trim();
122
+ info(`\nConfiguring repository for ${username}...`);
123
+ // Set the remote URL
124
+ info('\nSetting remote URL...');
125
+ try {
126
+ // Check if remote already exists
127
+ try {
128
+ (0, child_process_1.execSync)('git remote get-url origin', { stdio: 'ignore' });
129
+ // Remote exists, ask user if they want to overwrite
130
+ const response = yield toolbox.prompt.ask({
131
+ type: 'confirm',
132
+ name: 'overwriteRemote',
133
+ message: 'A remote "origin" is already configured. Would you like to overwrite it?'
134
+ });
135
+ if (!response.overwriteRemote) {
136
+ info('\nKeeping existing remote configuration.');
137
+ return null;
138
+ }
139
+ // Remove existing remote
140
+ (0, child_process_1.execSync)('git remote remove origin', { stdio: 'ignore' });
141
+ }
142
+ catch (e) {
143
+ // Remote doesn't exist, continue
144
+ }
145
+ (0, child_process_1.execSync)(`git remote add origin https://github.com/${username}/${projectName}.git`, { stdio: 'ignore' });
146
+ }
147
+ catch (e) {
148
+ error(`\nFailed to set remote URL. ${e.message}`);
149
+ return null;
150
+ }
151
+ // Push the code to the new repository
152
+ info('\nPushing code to the new repository...');
153
+ try {
154
+ (0, child_process_1.execSync)(`git push -u origin ${(0, child_process_1.execSync)('git rev-parse --abbrev-ref HEAD')}`, { stdio: 'ignore' });
155
+ }
156
+ catch (e) {
157
+ error(`\nFailed to push code to the new repository. ${e.message}`);
158
+ return null;
159
+ }
160
+ // Get the repository URL
161
+ const repoUrl = (0, child_process_1.execSync)('gh repo view --json url -q .url', { encoding: 'utf8' }).trim();
162
+ return repoUrl;
163
+ }
164
+ catch (err) {
165
+ error('\nFailed to publish to GitHub.');
166
+ if (err instanceof Error) {
167
+ error(err.message);
168
+ }
169
+ return null;
170
+ }
171
+ });
172
+ exports.publishToGitHub = publishToGitHub;
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaFRvR2l0SHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxpdGllcy9wdWJsaXNoVG9HaXRIdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0EsaURBQXlDO0FBRXpDLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRWhGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxRQUFnQixFQUFXLEVBQUU7SUFDdEQsSUFBSSxDQUFDO1FBQ0gsSUFBQSx3QkFBUSxFQUFDLGdCQUFnQixRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE9BQU8sS0FBSyxDQUFDLENBQUMsMEJBQTBCO0lBQzFDLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUMsQ0FBQyx3QkFBd0I7SUFDdkMsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVLLE1BQU0sZUFBZSxHQUFHLENBQU8sT0FBdUIsRUFBRSxXQUFtQixFQUEwQixFQUFFO0lBQzVHLE1BQU0sRUFDSixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQ3ZCLEdBQUcsT0FBTyxDQUFDO0lBRVosSUFBSSxDQUFDO1FBQ0gsK0JBQStCO1FBQy9CLElBQUksQ0FBQztZQUNILElBQUEsd0JBQVEsRUFBQyxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyx5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
@@ -0,0 +1,55 @@
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
+ exports.renderTitle = void 0;
16
+ const figlet_1 = __importDefault(require("figlet"));
17
+ const gradient_string_1 = __importDefault(require("gradient-string"));
18
+ const constants_1 = require("../constants");
19
+ // expo stack orange gradient
20
+ const theme = {
21
+ orange: '#f97316',
22
+ between: 'f2940f',
23
+ yellow: '#eab308'
24
+ };
25
+ // // rn new blue gradient
26
+ // const rnNewTheme = {
27
+ // blue: '#3b82f6',
28
+ // between: '#2563eb',
29
+ // indigo: '#4f46e5'
30
+ // };
31
+ function renderTitle(toolbox) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ // const isRnNew = process.argv[1]?.includes('rn-new');
34
+ const cesGradient = (0, gradient_string_1.default)(Object.values(theme));
35
+ const { print: { error } } = toolbox;
36
+ yield figlet_1.default.text(constants_1.TITLE_TEXT, {
37
+ font: 'Standard',
38
+ horizontalLayout: 'fitted',
39
+ verticalLayout: 'fitted',
40
+ width: 45,
41
+ whitespaceBreak: true
42
+ }, (err, data) => {
43
+ if (err) {
44
+ error('Something went wrong...');
45
+ return;
46
+ }
47
+ console.log(cesGradient.multiline(data));
48
+ });
49
+ // TODO: this is hacky, figure out a way to do this better
50
+ // set timeout for 1 second so that the title can render before the CLI runs
51
+ yield new Promise((resolve) => setTimeout(resolve, 200));
52
+ });
53
+ }
54
+ exports.renderTitle = renderTitle;
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyVGl0bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbGl0aWVzL3JlbmRlclRpdGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixzRUFBdUM7QUFFdkMsNENBQTBDO0FBRzFDLDZCQUE2QjtBQUM3QixNQUFNLEtBQUssR0FBRztJQUNaLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLE1BQU0sRUFBRSxTQUFTO0NBQ2xCLENBQUM7QUFFRiwwQkFBMEI7QUFDMUIsdUJBQXVCO0FBQ3ZCLHFCQUFxQjtBQUNyQix3QkFBd0I7QUFDeEIsc0JBQXNCO0FBQ3RCLEtBQUs7QUFFTCxTQUFzQixXQUFXLENBQUMsT0FBZ0I7O1FBQ2hELHVEQUF1RDtRQUN2RCxNQUFNLFdBQVcsR0FBRyxJQUFBLHlCQUFRLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRW5ELE1BQU0sRUFDSixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFDakIsR0FBRyxPQUFPLENBQUM7UUFFWixNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUNmLHNCQUFVLEVBQ1Y7WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixnQkFBZ0IsRUFBRSxRQUFRO1lBQzFCLGNBQWMsRUFBRSxRQUFRO1lBQ3hCLEtBQUssRUFBRSxFQUFFO1lBQ1QsZUFBZSxFQUFFLElBQUk7U0FDdEIsRUFDRCxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNaLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQ2pDLE9BQU87WUFDVCxDQUFDO1lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUNGLENBQUM7UUFFRiwwREFBMEQ7UUFDMUQsNEVBQTRFO1FBQzVFLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQUE7QUE5QkQsa0NBOEJDIn0=