@idealyst/cli 1.2.0 → 1.2.3

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 (324) hide show
  1. package/dist/commands/add.js +233 -0
  2. package/dist/commands/add.js.map +1 -0
  3. package/dist/commands/index.js +13 -0
  4. package/dist/commands/index.js.map +1 -0
  5. package/dist/commands/info.js +193 -0
  6. package/dist/commands/info.js.map +1 -0
  7. package/dist/commands/init.js +155 -0
  8. package/dist/commands/init.js.map +1 -0
  9. package/dist/constants.js +125 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/generators/core/index.js +23 -0
  12. package/dist/generators/core/index.js.map +1 -0
  13. package/dist/generators/core/mobile.js +251 -0
  14. package/dist/generators/core/mobile.js.map +1 -0
  15. package/dist/generators/core/shared.js +474 -0
  16. package/dist/generators/core/shared.js.map +1 -0
  17. package/dist/generators/core/web.js +330 -0
  18. package/dist/generators/core/web.js.map +1 -0
  19. package/dist/generators/extensions/api.js +223 -0
  20. package/dist/generators/extensions/api.js.map +1 -0
  21. package/dist/generators/extensions/devcontainer.js +575 -0
  22. package/dist/generators/extensions/devcontainer.js.map +1 -0
  23. package/dist/generators/extensions/graphql.js +202 -0
  24. package/dist/generators/extensions/graphql.js.map +1 -0
  25. package/dist/generators/extensions/index.js +17 -0
  26. package/dist/generators/extensions/index.js.map +1 -0
  27. package/dist/generators/extensions/prisma.js +249 -0
  28. package/dist/generators/extensions/prisma.js.map +1 -0
  29. package/dist/generators/extensions/trpc.js +258 -0
  30. package/dist/generators/extensions/trpc.js.map +1 -0
  31. package/dist/generators/index.js +122 -4
  32. package/dist/generators/index.js.map +1 -1
  33. package/dist/generators/reactNative.js +253 -0
  34. package/dist/generators/reactNative.js.map +1 -0
  35. package/dist/generators/workspace.js +303 -0
  36. package/dist/generators/workspace.js.map +1 -0
  37. package/dist/identifiers/android.js +75 -0
  38. package/dist/identifiers/android.js.map +1 -0
  39. package/dist/identifiers/index.js +35 -0
  40. package/dist/identifiers/index.js.map +1 -0
  41. package/dist/identifiers/ios.js +65 -0
  42. package/dist/identifiers/ios.js.map +1 -0
  43. package/dist/index.js +41 -319
  44. package/dist/index.js.map +1 -1
  45. package/dist/templates/copier.js +135 -0
  46. package/dist/templates/copier.js.map +1 -0
  47. package/dist/templates/index.js +23 -0
  48. package/dist/templates/index.js.map +1 -0
  49. package/dist/templates/merger.js +113 -0
  50. package/dist/templates/merger.js.map +1 -0
  51. package/dist/templates/processor.js +142 -0
  52. package/dist/templates/processor.js.map +1 -0
  53. package/dist/types/commands/add.d.ts +14 -0
  54. package/dist/types/commands/index.d.ts +6 -0
  55. package/dist/types/commands/info.d.ts +10 -0
  56. package/dist/types/commands/init.d.ts +19 -0
  57. package/dist/types/constants.d.ts +82 -0
  58. package/dist/types/generators/core/index.d.ts +6 -0
  59. package/dist/types/generators/core/mobile.d.ts +14 -0
  60. package/dist/types/generators/core/shared.d.ts +8 -0
  61. package/dist/types/generators/core/web.d.ts +8 -0
  62. package/dist/types/generators/extensions/api.d.ts +8 -0
  63. package/dist/types/generators/extensions/devcontainer.d.ts +15 -0
  64. package/dist/types/generators/extensions/graphql.d.ts +8 -0
  65. package/dist/types/generators/extensions/index.d.ts +8 -0
  66. package/dist/types/generators/extensions/prisma.d.ts +8 -0
  67. package/dist/types/generators/extensions/trpc.d.ts +9 -0
  68. package/dist/types/generators/index.d.ts +11 -3
  69. package/dist/types/generators/reactNative.d.ts +19 -0
  70. package/dist/types/generators/workspace.d.ts +8 -0
  71. package/dist/types/identifiers/android.d.ts +26 -0
  72. package/dist/types/identifiers/index.d.ts +26 -0
  73. package/dist/types/identifiers/ios.d.ts +21 -0
  74. package/dist/types/index.d.ts +3 -0
  75. package/dist/types/templates/copier.d.ts +24 -0
  76. package/dist/types/templates/index.d.ts +6 -0
  77. package/dist/types/templates/merger.d.ts +43 -0
  78. package/dist/types/templates/processor.d.ts +39 -0
  79. package/dist/types/types.d.ts +184 -5
  80. package/dist/types/utils/filesystem.d.ts +56 -0
  81. package/dist/types/utils/index.d.ts +7 -0
  82. package/dist/types/utils/logger.d.ts +64 -0
  83. package/dist/types/utils/shell.d.ts +35 -0
  84. package/dist/types/utils/validation.d.ts +32 -0
  85. package/dist/types/wizard/index.d.ts +20 -0
  86. package/dist/types/wizard/steps/apiExtension.d.ts +5 -0
  87. package/dist/types/wizard/steps/appDisplayName.d.ts +5 -0
  88. package/dist/types/wizard/steps/devcontainerExtension.d.ts +5 -0
  89. package/dist/types/wizard/steps/graphqlExtension.d.ts +5 -0
  90. package/dist/types/wizard/steps/index.d.ts +12 -0
  91. package/dist/types/wizard/steps/orgDomain.d.ts +5 -0
  92. package/dist/types/wizard/steps/prismaExtension.d.ts +5 -0
  93. package/dist/types/wizard/steps/projectName.d.ts +5 -0
  94. package/dist/types/wizard/steps/summary.d.ts +5 -0
  95. package/dist/types/wizard/steps/trpcExtension.d.ts +5 -0
  96. package/dist/types/wizard/validators.d.ts +17 -0
  97. package/dist/types.js +74 -0
  98. package/dist/types.js.map +1 -1
  99. package/dist/utils/filesystem.js +173 -0
  100. package/dist/utils/filesystem.js.map +1 -0
  101. package/dist/utils/index.js +24 -0
  102. package/dist/utils/index.js.map +1 -0
  103. package/dist/utils/logger.js +106 -0
  104. package/dist/utils/logger.js.map +1 -0
  105. package/dist/utils/shell.js +113 -0
  106. package/dist/utils/shell.js.map +1 -0
  107. package/dist/utils/validation.js +196 -0
  108. package/dist/utils/validation.js.map +1 -0
  109. package/dist/wizard/index.js +177 -0
  110. package/dist/wizard/index.js.map +1 -0
  111. package/dist/wizard/steps/apiExtension.js +33 -0
  112. package/dist/wizard/steps/apiExtension.js.map +1 -0
  113. package/dist/wizard/steps/appDisplayName.js +53 -0
  114. package/dist/wizard/steps/appDisplayName.js.map +1 -0
  115. package/dist/wizard/steps/devcontainerExtension.js +131 -0
  116. package/dist/wizard/steps/devcontainerExtension.js.map +1 -0
  117. package/dist/wizard/steps/graphqlExtension.js +37 -0
  118. package/dist/wizard/steps/graphqlExtension.js.map +1 -0
  119. package/dist/wizard/steps/index.js +25 -0
  120. package/dist/wizard/steps/index.js.map +1 -0
  121. package/dist/wizard/steps/orgDomain.js +40 -0
  122. package/dist/wizard/steps/orgDomain.js.map +1 -0
  123. package/dist/wizard/steps/prismaExtension.js +33 -0
  124. package/dist/wizard/steps/prismaExtension.js.map +1 -0
  125. package/dist/wizard/steps/projectName.js +40 -0
  126. package/dist/wizard/steps/projectName.js.map +1 -0
  127. package/dist/wizard/steps/summary.js +119 -0
  128. package/dist/wizard/steps/summary.js.map +1 -0
  129. package/dist/wizard/steps/trpcExtension.js +37 -0
  130. package/dist/wizard/steps/trpcExtension.js.map +1 -0
  131. package/dist/wizard/validators.js +35 -0
  132. package/dist/wizard/validators.js.map +1 -0
  133. package/package.json +6 -19
  134. package/README.md +0 -110
  135. package/dist/generators/init.js +0 -268
  136. package/dist/generators/init.js.map +0 -1
  137. package/dist/generators/utils.js +0 -682
  138. package/dist/generators/utils.js.map +0 -1
  139. package/dist/scripts/configure-react-native-monorepo.js +0 -144
  140. package/dist/scripts/configure-react-native-monorepo.js.map +0 -1
  141. package/dist/template/.devcontainer/Dockerfile +0 -26
  142. package/dist/template/.devcontainer/devcontainer.json +0 -113
  143. package/dist/template/.devcontainer/docker-compose.yml +0 -59
  144. package/dist/template/.devcontainer/figma-mcp.sh +0 -32
  145. package/dist/template/.devcontainer/gitignore.template +0 -2
  146. package/dist/template/.devcontainer/setup.sh +0 -45
  147. package/dist/template/DOCKER.md +0 -0
  148. package/dist/template/Dockerfile +0 -111
  149. package/dist/template/README.md +0 -233
  150. package/dist/template/docker/nginx/prod.conf +0 -238
  151. package/dist/template/docker/nginx.conf +0 -131
  152. package/dist/template/docker/postgres/init.sql +0 -41
  153. package/dist/template/docker/prometheus/prometheus.yml +0 -52
  154. package/dist/template/docker-compose.prod.yml +0 -146
  155. package/dist/template/docker-compose.yml +0 -143
  156. package/dist/template/dockerignore.template +0 -151
  157. package/dist/template/env.example.template +0 -36
  158. package/dist/template/gitignore.template +0 -56
  159. package/dist/template/jest.config.js +0 -20
  160. package/dist/template/mcp.json.template +0 -8
  161. package/dist/template/package.json +0 -45
  162. package/dist/template/packages/api/README.md +0 -510
  163. package/dist/template/packages/api/__tests__/api.test.ts +0 -26
  164. package/dist/template/packages/api/env.example.template +0 -6
  165. package/dist/template/packages/api/gitignore.template +0 -35
  166. package/dist/template/packages/api/jest.config.js +0 -23
  167. package/dist/template/packages/api/jest.setup.js +0 -9
  168. package/dist/template/packages/api/package.json +0 -66
  169. package/dist/template/packages/api/src/context.ts +0 -52
  170. package/dist/template/packages/api/src/controllers/TestController.ts +0 -0
  171. package/dist/template/packages/api/src/graphql/builder.ts +0 -75
  172. package/dist/template/packages/api/src/graphql/generated.ts +0 -64
  173. package/dist/template/packages/api/src/graphql/index.ts +0 -75
  174. package/dist/template/packages/api/src/graphql/types/index.ts +0 -44
  175. package/dist/template/packages/api/src/graphql/types/test.ts +0 -245
  176. package/dist/template/packages/api/src/index.ts +0 -26
  177. package/dist/template/packages/api/src/lib/database.ts +0 -23
  178. package/dist/template/packages/api/src/router/index.ts +0 -163
  179. package/dist/template/packages/api/src/routers/test.ts +0 -161
  180. package/dist/template/packages/api/src/server.ts +0 -68
  181. package/dist/template/packages/api/src/trpc.ts +0 -28
  182. package/dist/template/packages/api/tsconfig.json +0 -44
  183. package/dist/template/packages/database/README.md +0 -162
  184. package/dist/template/packages/database/gitignore.template +0 -41
  185. package/dist/template/packages/database/package.json +0 -49
  186. package/dist/template/packages/database/prisma/seed.ts +0 -64
  187. package/dist/template/packages/database/schema.prisma +0 -107
  188. package/dist/template/packages/database/src/index.ts +0 -15
  189. package/dist/template/packages/database/src/validators.ts +0 -10
  190. package/dist/template/packages/database/tsconfig.json +0 -18
  191. package/dist/template/packages/mobile/README.md +0 -86
  192. package/dist/template/packages/mobile/__tests__/App.test.tsx +0 -156
  193. package/dist/template/packages/mobile/__tests__/components.test.tsx +0 -300
  194. package/dist/template/packages/mobile/app.json +0 -5
  195. package/dist/template/packages/mobile/babel.config.js +0 -10
  196. package/dist/template/packages/mobile/gitignore.template +0 -73
  197. package/dist/template/packages/mobile/index.js +0 -6
  198. package/dist/template/packages/mobile/jest.config.js +0 -21
  199. package/dist/template/packages/mobile/jest.setup.js +0 -12
  200. package/dist/template/packages/mobile/metro.config.js +0 -36
  201. package/dist/template/packages/mobile/package.json +0 -60
  202. package/dist/template/packages/mobile/src/App.tsx +0 -8
  203. package/dist/template/packages/mobile/src/utils/trpc.ts +0 -7
  204. package/dist/template/packages/mobile/tsconfig.json +0 -28
  205. package/dist/template/packages/shared/README.md +0 -135
  206. package/dist/template/packages/shared/__tests__/shared.test.ts +0 -51
  207. package/dist/template/packages/shared/gitignore.template +0 -35
  208. package/dist/template/packages/shared/jest.config.js +0 -22
  209. package/dist/template/packages/shared/package.json +0 -68
  210. package/dist/template/packages/shared/src/components/App.tsx +0 -57
  211. package/dist/template/packages/shared/src/components/HelloWorld.tsx +0 -531
  212. package/dist/template/packages/shared/src/components/index.ts +0 -1
  213. package/dist/template/packages/shared/src/graphql/client.ts +0 -34
  214. package/dist/template/packages/shared/src/index.ts +0 -22
  215. package/dist/template/packages/shared/src/navigation/AppRouter.tsx +0 -565
  216. package/dist/template/packages/shared/src/trpc/client.ts +0 -44
  217. package/dist/template/packages/shared/tsconfig.json +0 -22
  218. package/dist/template/packages/web/README.md +0 -131
  219. package/dist/template/packages/web/__tests__/App.test.tsx +0 -342
  220. package/dist/template/packages/web/__tests__/components.test.tsx +0 -564
  221. package/dist/template/packages/web/gitignore.template +0 -35
  222. package/dist/template/packages/web/index.html +0 -13
  223. package/dist/template/packages/web/jest.config.js +0 -27
  224. package/dist/template/packages/web/jest.setup.js +0 -24
  225. package/dist/template/packages/web/package.json +0 -69
  226. package/dist/template/packages/web/src/App.tsx +0 -14
  227. package/dist/template/packages/web/src/components/TestDemo.tsx +0 -164
  228. package/dist/template/packages/web/src/main.tsx +0 -25
  229. package/dist/template/packages/web/src/utils/trpc.ts +0 -7
  230. package/dist/template/packages/web/tsconfig.json +0 -26
  231. package/dist/template/packages/web/vite.config.ts +0 -98
  232. package/dist/template/setup.sh +0 -30
  233. package/dist/template/tsconfig.json +0 -22
  234. package/dist/template/yarnrc.yml.template +0 -4
  235. package/dist/types/generators/init.d.ts +0 -5
  236. package/dist/types/generators/utils.d.ts +0 -45
  237. package/dist/types/scripts/configure-react-native-monorepo.d.ts +0 -23
  238. package/template/.devcontainer/Dockerfile +0 -26
  239. package/template/.devcontainer/devcontainer.json +0 -113
  240. package/template/.devcontainer/docker-compose.yml +0 -59
  241. package/template/.devcontainer/figma-mcp.sh +0 -32
  242. package/template/.devcontainer/setup.sh +0 -45
  243. package/template/.dockerignore +0 -151
  244. package/template/.env.example +0 -36
  245. package/template/.env.production +0 -56
  246. package/template/DOCKER.md +0 -0
  247. package/template/Dockerfile +0 -111
  248. package/template/README.md +0 -233
  249. package/template/docker/nginx/prod.conf +0 -238
  250. package/template/docker/nginx.conf +0 -131
  251. package/template/docker/postgres/init.sql +0 -41
  252. package/template/docker/prometheus/prometheus.yml +0 -52
  253. package/template/docker-compose.prod.yml +0 -146
  254. package/template/docker-compose.yml +0 -143
  255. package/template/jest.config.js +0 -20
  256. package/template/package.json +0 -45
  257. package/template/packages/api/.env.example +0 -6
  258. package/template/packages/api/README.md +0 -510
  259. package/template/packages/api/__tests__/api.test.ts +0 -26
  260. package/template/packages/api/jest.config.js +0 -23
  261. package/template/packages/api/jest.setup.js +0 -9
  262. package/template/packages/api/package.json +0 -66
  263. package/template/packages/api/src/context.ts +0 -52
  264. package/template/packages/api/src/controllers/TestController.ts +0 -0
  265. package/template/packages/api/src/graphql/builder.ts +0 -75
  266. package/template/packages/api/src/graphql/generated.ts +0 -64
  267. package/template/packages/api/src/graphql/index.ts +0 -75
  268. package/template/packages/api/src/graphql/types/index.ts +0 -44
  269. package/template/packages/api/src/graphql/types/test.ts +0 -245
  270. package/template/packages/api/src/index.ts +0 -26
  271. package/template/packages/api/src/lib/database.ts +0 -23
  272. package/template/packages/api/src/router/index.ts +0 -163
  273. package/template/packages/api/src/routers/test.ts +0 -161
  274. package/template/packages/api/src/server.ts +0 -68
  275. package/template/packages/api/src/trpc.ts +0 -28
  276. package/template/packages/api/tsconfig.json +0 -44
  277. package/template/packages/database/README.md +0 -162
  278. package/template/packages/database/package.json +0 -49
  279. package/template/packages/database/prisma/seed.ts +0 -64
  280. package/template/packages/database/schema.prisma +0 -107
  281. package/template/packages/database/src/index.ts +0 -15
  282. package/template/packages/database/src/validators.ts +0 -10
  283. package/template/packages/database/tsconfig.json +0 -18
  284. package/template/packages/mobile/README.md +0 -86
  285. package/template/packages/mobile/__tests__/App.test.tsx +0 -156
  286. package/template/packages/mobile/__tests__/components.test.tsx +0 -300
  287. package/template/packages/mobile/app.json +0 -5
  288. package/template/packages/mobile/babel.config.js +0 -26
  289. package/template/packages/mobile/index.js +0 -8
  290. package/template/packages/mobile/jest.config.js +0 -21
  291. package/template/packages/mobile/jest.setup.js +0 -12
  292. package/template/packages/mobile/metro.config.js +0 -36
  293. package/template/packages/mobile/package.json +0 -60
  294. package/template/packages/mobile/src/App.tsx +0 -8
  295. package/template/packages/mobile/src/utils/trpc.ts +0 -7
  296. package/template/packages/mobile/tsconfig.json +0 -28
  297. package/template/packages/shared/README.md +0 -135
  298. package/template/packages/shared/__tests__/shared.test.ts +0 -51
  299. package/template/packages/shared/jest.config.js +0 -22
  300. package/template/packages/shared/package.json +0 -68
  301. package/template/packages/shared/src/components/App.tsx +0 -57
  302. package/template/packages/shared/src/components/HelloWorld.tsx +0 -531
  303. package/template/packages/shared/src/components/index.ts +0 -1
  304. package/template/packages/shared/src/graphql/client.ts +0 -34
  305. package/template/packages/shared/src/index.ts +0 -25
  306. package/template/packages/shared/src/navigation/AppRouter.tsx +0 -565
  307. package/template/packages/shared/src/trpc/client.ts +0 -44
  308. package/template/packages/shared/src/unistyles.ts +0 -50
  309. package/template/packages/shared/tsconfig.json +0 -22
  310. package/template/packages/web/README.md +0 -131
  311. package/template/packages/web/__tests__/App.test.tsx +0 -342
  312. package/template/packages/web/__tests__/components.test.tsx +0 -564
  313. package/template/packages/web/index.html +0 -13
  314. package/template/packages/web/jest.config.js +0 -27
  315. package/template/packages/web/jest.setup.js +0 -24
  316. package/template/packages/web/package.json +0 -69
  317. package/template/packages/web/src/App.tsx +0 -14
  318. package/template/packages/web/src/components/TestDemo.tsx +0 -164
  319. package/template/packages/web/src/main.tsx +0 -27
  320. package/template/packages/web/src/utils/trpc.ts +0 -7
  321. package/template/packages/web/tsconfig.json +0 -26
  322. package/template/packages/web/vite.config.ts +0 -114
  323. package/template/setup.sh +0 -30
  324. package/template/tsconfig.json +0 -22
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ /**
3
+ * tRPC extension generator
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.applyTrpcExtension = applyTrpcExtension;
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const merger_1 = require("../../templates/merger");
13
+ const constants_1 = require("../../constants");
14
+ const logger_1 = require("../../utils/logger");
15
+ /**
16
+ * Apply tRPC extension to a workspace
17
+ * This adds tRPC to API, web, and mobile packages
18
+ */
19
+ async function applyTrpcExtension(projectPath, data) {
20
+ logger_1.logger.info('Configuring tRPC...');
21
+ // Add tRPC to API package
22
+ await addTrpcToApi(projectPath, data);
23
+ // Add tRPC to web package
24
+ await addTrpcToWeb(projectPath, data);
25
+ // Add tRPC to mobile package
26
+ await addTrpcToMobile(projectPath, data);
27
+ // Add tRPC to shared package (for shared types)
28
+ await addTrpcToShared(projectPath, data);
29
+ return { success: true };
30
+ }
31
+ /**
32
+ * Add tRPC server setup to API package
33
+ */
34
+ async function addTrpcToApi(projectPath, data) {
35
+ const apiDir = path_1.default.join(projectPath, 'packages', 'api');
36
+ const trpcDir = path_1.default.join(apiDir, 'src', 'trpc');
37
+ await fs_extra_1.default.ensureDir(trpcDir);
38
+ // Create trpc.ts (context and initialization)
39
+ await fs_extra_1.default.writeFile(path_1.default.join(trpcDir, 'trpc.ts'), createTrpcInit(data));
40
+ // Create router.ts
41
+ await fs_extra_1.default.writeFile(path_1.default.join(trpcDir, 'router.ts'), createTrpcRouter(data));
42
+ // Create routers/index.ts
43
+ await fs_extra_1.default.ensureDir(path_1.default.join(trpcDir, 'routers'));
44
+ await fs_extra_1.default.writeFile(path_1.default.join(trpcDir, 'routers', 'index.ts'), createExampleRouter(data));
45
+ // Add dependencies
46
+ await (0, merger_1.addDependencies)(path_1.default.join(apiDir, 'package.json'), constants_1.DEPENDENCIES.trpcServer);
47
+ }
48
+ /**
49
+ * Add tRPC client to web package
50
+ */
51
+ async function addTrpcToWeb(projectPath, data) {
52
+ const webDir = path_1.default.join(projectPath, 'packages', 'web');
53
+ const utilsDir = path_1.default.join(webDir, 'src', 'utils');
54
+ await fs_extra_1.default.ensureDir(utilsDir);
55
+ // Create trpc.ts client
56
+ await fs_extra_1.default.writeFile(path_1.default.join(utilsDir, 'trpc.ts'), createTrpcClient(data, 'web'));
57
+ // Add dependencies
58
+ await (0, merger_1.addDependencies)(path_1.default.join(webDir, 'package.json'), constants_1.DEPENDENCIES.trpc);
59
+ }
60
+ /**
61
+ * Add tRPC client to mobile package
62
+ */
63
+ async function addTrpcToMobile(projectPath, data) {
64
+ const mobileDir = path_1.default.join(projectPath, 'packages', 'mobile');
65
+ const utilsDir = path_1.default.join(mobileDir, 'src', 'utils');
66
+ await fs_extra_1.default.ensureDir(utilsDir);
67
+ // Create trpc.ts client
68
+ await fs_extra_1.default.writeFile(path_1.default.join(utilsDir, 'trpc.ts'), createTrpcClient(data, 'mobile'));
69
+ // Add dependencies
70
+ await (0, merger_1.addDependencies)(path_1.default.join(mobileDir, 'package.json'), constants_1.DEPENDENCIES.trpc);
71
+ }
72
+ /**
73
+ * Add tRPC types to shared package
74
+ */
75
+ async function addTrpcToShared(projectPath, data) {
76
+ const sharedDir = path_1.default.join(projectPath, 'packages', 'shared');
77
+ const trpcDir = path_1.default.join(sharedDir, 'src', 'trpc');
78
+ await fs_extra_1.default.ensureDir(trpcDir);
79
+ // Create shared tRPC client factory
80
+ await fs_extra_1.default.writeFile(path_1.default.join(trpcDir, 'client.ts'), createSharedTrpcClient(data));
81
+ // Create index.ts
82
+ await fs_extra_1.default.writeFile(path_1.default.join(trpcDir, 'index.ts'), `export * from './client';\n`);
83
+ // Add dependencies
84
+ await (0, merger_1.addDependencies)(path_1.default.join(sharedDir, 'package.json'), constants_1.DEPENDENCIES.trpc);
85
+ }
86
+ /**
87
+ * Create tRPC initialization (server-side)
88
+ */
89
+ function createTrpcInit(data) {
90
+ return `/**
91
+ * tRPC initialization
92
+ */
93
+
94
+ import { initTRPC } from '@trpc/server';
95
+ import { ZodError } from 'zod';
96
+ import type { CreateExpressContextOptions } from '@trpc/server/adapters/express';
97
+ ${data.hasPrisma ? `import { prisma } from '@${data.workspaceScope}/database';` : ''}
98
+
99
+ /**
100
+ * Create context for each request
101
+ */
102
+ export const createContext = ({ req, res }: CreateExpressContextOptions) => {
103
+ return {
104
+ req,
105
+ res,
106
+ ${data.hasPrisma ? ' prisma,' : ''}
107
+ };
108
+ };
109
+
110
+ export type Context = Awaited<ReturnType<typeof createContext>>;
111
+
112
+ /**
113
+ * Initialize tRPC
114
+ */
115
+ const t = initTRPC.context<Context>().create({
116
+ errorFormatter({ shape, error }) {
117
+ return {
118
+ ...shape,
119
+ data: {
120
+ ...shape.data,
121
+ zodError:
122
+ error.cause instanceof ZodError ? error.cause.flatten() : null,
123
+ },
124
+ };
125
+ },
126
+ });
127
+
128
+ export const router = t.router;
129
+ export const publicProcedure = t.procedure;
130
+ export const middleware = t.middleware;
131
+
132
+ // Example protected procedure (add your auth logic)
133
+ // export const protectedProcedure = publicProcedure.use(({ ctx, next }) => {
134
+ // if (!ctx.user) {
135
+ // throw new TRPCError({ code: 'UNAUTHORIZED' });
136
+ // }
137
+ // return next({ ctx: { ...ctx, user: ctx.user } });
138
+ // });
139
+ `;
140
+ }
141
+ /**
142
+ * Create tRPC router
143
+ */
144
+ function createTrpcRouter(data) {
145
+ return `/**
146
+ * tRPC router
147
+ */
148
+
149
+ import { router, publicProcedure, createContext } from './trpc';
150
+ import { exampleRouter } from './routers';
151
+
152
+ export const appRouter = router({
153
+ // Health check
154
+ health: publicProcedure.query(() => ({
155
+ status: 'ok',
156
+ timestamp: new Date().toISOString(),
157
+ })),
158
+
159
+ // Example router
160
+ example: exampleRouter,
161
+
162
+ // Add more routers here
163
+ });
164
+
165
+ export type AppRouter = typeof appRouter;
166
+ export { createContext };
167
+ `;
168
+ }
169
+ /**
170
+ * Create example router
171
+ */
172
+ function createExampleRouter(data) {
173
+ return `/**
174
+ * Example router
175
+ */
176
+
177
+ import { z } from 'zod';
178
+ import { router, publicProcedure } from '../trpc';
179
+
180
+ export const exampleRouter = router({
181
+ hello: publicProcedure
182
+ .input(z.object({ name: z.string().optional() }))
183
+ .query(({ input }) => {
184
+ return {
185
+ greeting: \`Hello, \${input.name || 'World'}!\`,
186
+ };
187
+ }),
188
+
189
+ // Add more procedures here
190
+ });
191
+ `;
192
+ }
193
+ /**
194
+ * Create tRPC client (for web/mobile)
195
+ */
196
+ function createTrpcClient(data, platform) {
197
+ const apiUrl = platform === 'mobile'
198
+ ? 'http://10.0.2.2:3000/trpc' // Android emulator localhost
199
+ : 'http://localhost:3000/trpc';
200
+ // Web uses import.meta.env (Vite), mobile uses process.env
201
+ const envAccess = platform === 'web'
202
+ ? 'import.meta.env.VITE_API_URL'
203
+ : 'process.env.API_URL';
204
+ return `/**
205
+ * tRPC client for ${platform}
206
+ */
207
+
208
+ import { createTRPCReact } from '@trpc/react-query';
209
+ import { httpBatchLink } from '@trpc/client';
210
+ import type { AppRouter } from '@${data.workspaceScope}/api';
211
+
212
+ export const trpc = createTRPCReact<AppRouter>();
213
+
214
+ export const trpcClient = trpc.createClient({
215
+ links: [
216
+ httpBatchLink({
217
+ url: ${envAccess} || '${apiUrl}',
218
+ }),
219
+ ],
220
+ });
221
+ `;
222
+ }
223
+ /**
224
+ * Create shared tRPC client factory
225
+ */
226
+ function createSharedTrpcClient(data) {
227
+ return `/**
228
+ * Shared tRPC client factory
229
+ */
230
+
231
+ import { createTRPCReact, httpBatchLink } from '@trpc/react-query';
232
+ import type { AppRouter } from '@${data.workspaceScope}/api';
233
+
234
+ /**
235
+ * Create a tRPC client with custom configuration
236
+ */
237
+ export function createTrpcClient(options: {
238
+ url?: string;
239
+ headers?: () => Record<string, string>;
240
+ } = {}) {
241
+ const trpc = createTRPCReact<AppRouter>();
242
+
243
+ const client = trpc.createClient({
244
+ links: [
245
+ httpBatchLink({
246
+ url: options.url || 'http://localhost:3000/trpc',
247
+ headers: options.headers,
248
+ }),
249
+ ],
250
+ });
251
+
252
+ return { trpc, client };
253
+ }
254
+
255
+ export type { AppRouter };
256
+ `;
257
+ }
258
+ //# sourceMappingURL=trpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpc.js","sourceRoot":"","sources":["../../../src/generators/extensions/trpc.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
+ /**
3
+ * Generator orchestrator - main entry point for project generation
4
+ */
2
5
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
6
  if (k2 === undefined) k2 = k;
4
7
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -13,11 +16,126 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
13
16
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
17
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
18
  };
19
+ var __importDefault = (this && this.__importDefault) || function (mod) {
20
+ return (mod && mod.__esModule) ? mod : { "default": mod };
21
+ };
16
22
  Object.defineProperty(exports, "__esModule", { value: true });
17
23
  exports.generateProject = generateProject;
18
- const init_1 = require("./init");
19
- async function generateProject(options) {
20
- await (0, init_1.generateFullStackProject)(options);
24
+ const path_1 = __importDefault(require("path"));
25
+ const workspace_1 = require("./workspace");
26
+ const core_1 = require("./core");
27
+ const api_1 = require("./extensions/api");
28
+ const prisma_1 = require("./extensions/prisma");
29
+ const trpc_1 = require("./extensions/trpc");
30
+ const graphql_1 = require("./extensions/graphql");
31
+ const devcontainer_1 = require("./extensions/devcontainer");
32
+ const shell_1 = require("../utils/shell");
33
+ const logger_1 = require("../utils/logger");
34
+ const constants_1 = require("../constants");
35
+ const processor_1 = require("../templates/processor");
36
+ /**
37
+ * Main generator function - orchestrates all generation
38
+ */
39
+ async function generateProject(config) {
40
+ const projectPath = path_1.default.join(config.directory, config.projectName);
41
+ const warnings = [];
42
+ const nextSteps = [];
43
+ logger_1.logger.header(`Creating Idealyst workspace: ${config.projectName}`);
44
+ // Build template data
45
+ const templateData = (0, processor_1.buildTemplateData)(config, constants_1.IDEALYST_VERSION);
46
+ // Step 1: Generate workspace root
47
+ logger_1.logger.step('Creating workspace structure...');
48
+ await (0, workspace_1.generateWorkspace)(projectPath, templateData);
49
+ // Step 2: Generate core packages (always included)
50
+ logger_1.logger.step('Creating shared package...');
51
+ await (0, core_1.generateSharedPackage)(projectPath, templateData);
52
+ logger_1.logger.step('Creating web package...');
53
+ await (0, core_1.generateWebPackage)(projectPath, templateData);
54
+ // Step 3: Generate mobile package with React Native
55
+ if (!config.isInteractive) {
56
+ logger_1.logger.step('Setting up React Native mobile package...');
57
+ }
58
+ const mobileResult = await (0, core_1.generateMobilePackage)(projectPath, {
59
+ ...templateData,
60
+ bundleId: config.iosBundleId,
61
+ packageName: config.androidPackageName,
62
+ skipInstall: true, // We'll install all at once at the end
63
+ interactive: config.isInteractive,
64
+ });
65
+ if (mobileResult.warning) {
66
+ warnings.push(mobileResult.warning);
67
+ }
68
+ // Step 4: Apply extensions
69
+ const packagesCreated = ['shared', 'web', 'mobile'];
70
+ const extensionsEnabled = [];
71
+ if (config.extensions.api) {
72
+ logger_1.logger.step('Adding API server...');
73
+ await (0, api_1.applyApiExtension)(projectPath, templateData);
74
+ packagesCreated.push('api');
75
+ extensionsEnabled.push('api');
76
+ }
77
+ if (config.extensions.prisma) {
78
+ logger_1.logger.step('Adding Prisma database...');
79
+ await (0, prisma_1.applyPrismaExtension)(projectPath, templateData);
80
+ packagesCreated.push('database');
81
+ extensionsEnabled.push('prisma');
82
+ nextSteps.push('Run `yarn db:generate` to generate Prisma client');
83
+ }
84
+ if (config.extensions.trpc) {
85
+ logger_1.logger.step('Configuring tRPC...');
86
+ await (0, trpc_1.applyTrpcExtension)(projectPath, templateData);
87
+ extensionsEnabled.push('trpc');
88
+ }
89
+ if (config.extensions.graphql) {
90
+ logger_1.logger.step('Configuring GraphQL...');
91
+ await (0, graphql_1.applyGraphqlExtension)(projectPath, templateData);
92
+ extensionsEnabled.push('graphql');
93
+ }
94
+ if (config.extensions.devcontainer) {
95
+ logger_1.logger.step('Setting up devcontainer...');
96
+ await (0, devcontainer_1.applyDevcontainerExtension)(projectPath, templateData, config.extensions.devcontainer);
97
+ extensionsEnabled.push('devcontainer');
98
+ nextSteps.push('Open in VS Code and select "Reopen in Container" to use devcontainer');
99
+ }
100
+ // Step 5: Install dependencies
101
+ if (!config.skipInstall) {
102
+ if (config.isInteractive) {
103
+ const spinner = logger_1.logger.spinner('Installing dependencies...');
104
+ try {
105
+ await (0, shell_1.installDependencies)(projectPath, { silent: true });
106
+ spinner.succeed('Dependencies installed');
107
+ }
108
+ catch (error) {
109
+ spinner.fail('Failed to install dependencies');
110
+ warnings.push('Failed to install dependencies. Run `yarn install` manually.');
111
+ }
112
+ }
113
+ else {
114
+ logger_1.logger.step('Installing dependencies...');
115
+ try {
116
+ await (0, shell_1.installDependencies)(projectPath);
117
+ logger_1.logger.success('Dependencies installed successfully!');
118
+ }
119
+ catch (error) {
120
+ warnings.push('Failed to install dependencies. Run `yarn install` manually.');
121
+ }
122
+ }
123
+ }
124
+ else {
125
+ nextSteps.unshift('Run `yarn install` to install dependencies');
126
+ }
127
+ // Add common next steps
128
+ nextSteps.push('Run `yarn dev` to start all development servers');
129
+ return {
130
+ success: true,
131
+ projectPath,
132
+ packagesCreated,
133
+ extensionsEnabled,
134
+ warnings,
135
+ nextSteps,
136
+ };
21
137
  }
22
- __exportStar(require("./init"), exports);
138
+ __exportStar(require("./workspace"), exports);
139
+ __exportStar(require("./core"), exports);
140
+ __exportStar(require("./reactNative"), exports);
23
141
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,0CAEC;AAJD,iCAAkD;AAE3C,KAAK,UAAU,eAAe,CAAC,OAA+B;IACnE,MAAM,IAAA,+BAAwB,EAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,yCAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ /**
3
+ * React Native initialization utilities
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.initializeReactNative = initializeReactNative;
43
+ exports.hasNativeFolders = hasNativeFolders;
44
+ exports.overlayIdealystFiles = overlayIdealystFiles;
45
+ const path_1 = __importDefault(require("path"));
46
+ const fs_extra_1 = __importDefault(require("fs-extra"));
47
+ const shell_1 = require("../utils/shell");
48
+ const logger_1 = require("../utils/logger");
49
+ const constants_1 = require("../constants");
50
+ /**
51
+ * Initialize a React Native project with correct identifiers
52
+ */
53
+ async function initializeReactNative(options) {
54
+ const { projectName, displayName, bundleId, packageName, directory, skipInstall, interactive } = options;
55
+ // Use spinner in interactive mode, regular logging otherwise
56
+ const spinner = interactive ? logger_1.logger.spinner('Installing React Native project...') : null;
57
+ try {
58
+ if (!interactive) {
59
+ logger_1.logger.info('Initializing React Native with native platform support...');
60
+ }
61
+ // Build the React Native CLI command
62
+ const args = [
63
+ '@react-native-community/cli@latest',
64
+ 'init',
65
+ projectName,
66
+ '--title', displayName,
67
+ '--package-name', packageName, // Sets Android package name
68
+ '--pm', 'yarn',
69
+ '--skip-git-init',
70
+ ];
71
+ if (skipInstall) {
72
+ args.push('--skip-install');
73
+ }
74
+ const result = await (0, shell_1.runCommand)('npx', args, {
75
+ cwd: directory,
76
+ timeout: constants_1.RN_TIMEOUT,
77
+ silent: interactive, // Hide output in interactive mode
78
+ });
79
+ if (result.exitCode !== 0) {
80
+ throw new Error('React Native CLI failed');
81
+ }
82
+ if (spinner) {
83
+ spinner.text = 'Configuring iOS bundle identifier...';
84
+ }
85
+ // Update iOS bundle identifier (RN CLI only sets Android package name)
86
+ await updateIosBundleId(path_1.default.join(directory, projectName), bundleId, projectName);
87
+ if (spinner) {
88
+ spinner.text = 'Configuring Android for monorepo...';
89
+ }
90
+ // Fix Android gradle files for monorepo node_modules paths
91
+ await fixMonorepoGradlePaths(path_1.default.join(directory, projectName));
92
+ if (spinner) {
93
+ spinner.succeed('React Native project installed');
94
+ }
95
+ return { success: true };
96
+ }
97
+ catch (error) {
98
+ if (spinner) {
99
+ spinner.fail('React Native initialization failed');
100
+ }
101
+ else {
102
+ logger_1.logger.warn('React Native CLI initialization failed');
103
+ }
104
+ logger_1.logger.dim('Native folders could not be created automatically.');
105
+ logger_1.logger.dim('You may need to run React Native init manually or use Expo.');
106
+ return {
107
+ success: false,
108
+ warning: 'Native folders could not be created. You may need to initialize React Native manually.',
109
+ };
110
+ }
111
+ }
112
+ /**
113
+ * Update iOS bundle identifier in project.pbxproj
114
+ */
115
+ async function updateIosBundleId(projectPath, bundleId, projectName) {
116
+ const pbxprojPath = path_1.default.join(projectPath, 'ios', `${projectName}.xcodeproj`, 'project.pbxproj');
117
+ if (await fs_extra_1.default.pathExists(pbxprojPath)) {
118
+ let content = await fs_extra_1.default.readFile(pbxprojPath, 'utf8');
119
+ // Replace default bundle identifier pattern
120
+ // RN CLI uses org.reactjs.native.example.{projectName} by default
121
+ content = content.replace(/PRODUCT_BUNDLE_IDENTIFIER = "[^"]+"/g, `PRODUCT_BUNDLE_IDENTIFIER = "${bundleId}"`);
122
+ await fs_extra_1.default.writeFile(pbxprojPath, content);
123
+ }
124
+ }
125
+ /**
126
+ * Fix Android gradle files for monorepo structure
127
+ *
128
+ * In a Yarn workspace monorepo, dependencies are hoisted to the root node_modules.
129
+ * The React Native CLI generates paths assuming node_modules is in the package directory,
130
+ * but we need to point to the monorepo root instead.
131
+ *
132
+ * Directory structure:
133
+ * monorepo-root/
134
+ * node_modules/ <- hoisted dependencies here
135
+ * packages/
136
+ * mobile/
137
+ * android/
138
+ * settings.gradle <- needs ../../../node_modules (3 levels up)
139
+ * app/
140
+ * build.gradle <- needs ../../../../node_modules (4 levels up)
141
+ */
142
+ async function fixMonorepoGradlePaths(projectPath) {
143
+ await fixSettingsGradle(projectPath);
144
+ await fixAppBuildGradle(projectPath);
145
+ }
146
+ /**
147
+ * Fix settings.gradle for monorepo paths
148
+ */
149
+ async function fixSettingsGradle(projectPath) {
150
+ const settingsPath = path_1.default.join(projectPath, 'android', 'settings.gradle');
151
+ if (!await fs_extra_1.default.pathExists(settingsPath)) {
152
+ return;
153
+ }
154
+ let content = await fs_extra_1.default.readFile(settingsPath, 'utf8');
155
+ // Add monorepo comment at the top if not already present
156
+ if (!content.includes('MONOREPO NOTE')) {
157
+ const monorepoComment = `// MONOREPO NOTE: In a Yarn workspace monorepo, dependencies are hoisted to the root node_modules.
158
+ // Paths must point to the monorepo root (../../../node_modules) not the package's node_modules.
159
+ `;
160
+ content = monorepoComment + content;
161
+ }
162
+ // Fix pluginManagement includeBuild path
163
+ content = content.replace(/includeBuild\s*\(\s*["']\.\.\/node_modules\/@react-native\/gradle-plugin["']\s*\)/g, 'includeBuild("../../../node_modules/@react-native/gradle-plugin")');
164
+ // Fix any other includeBuild paths for @react-native/gradle-plugin at the end of the file
165
+ content = content.replace(/includeBuild\s*\(\s*["']\.\.\/node_modules\/@react-native\/gradle-plugin["']\s*\)(?!.*pluginManagement)/g, 'includeBuild(\'../../../node_modules/@react-native/gradle-plugin\')');
166
+ await fs_extra_1.default.writeFile(settingsPath, content);
167
+ }
168
+ /**
169
+ * Fix app/build.gradle for monorepo paths and add vector icons
170
+ */
171
+ async function fixAppBuildGradle(projectPath) {
172
+ const buildGradlePath = path_1.default.join(projectPath, 'android', 'app', 'build.gradle');
173
+ if (!await fs_extra_1.default.pathExists(buildGradlePath)) {
174
+ return;
175
+ }
176
+ let content = await fs_extra_1.default.readFile(buildGradlePath, 'utf8');
177
+ // Add vector icons configuration if not present
178
+ if (!content.includes('react-native-vector-icons')) {
179
+ // Add after the apply plugin lines with monorepo comment
180
+ const vectorIconsBlock = `
181
+ // MONOREPO NOTE: In a Yarn workspace monorepo, dependencies are hoisted to the root node_modules.
182
+ // Paths must point to the monorepo root (../../../../node_modules from android/app) not the package's node_modules.
183
+ apply from: file("../../../../node_modules/react-native-vector-icons/fonts.gradle")
184
+ `;
185
+ // Find the last apply plugin/from line and insert after it
186
+ const lines = content.split('\n');
187
+ let lastApplyIndex = -1;
188
+ for (let i = 0; i < lines.length; i++) {
189
+ if (lines[i].includes('apply plugin:') || lines[i].includes('apply from:')) {
190
+ lastApplyIndex = i;
191
+ }
192
+ }
193
+ if (lastApplyIndex !== -1) {
194
+ lines.splice(lastApplyIndex + 1, 0, vectorIconsBlock);
195
+ content = lines.join('\n');
196
+ }
197
+ }
198
+ // Fix the react block to use monorepo paths
199
+ // We need to uncomment and update the root, reactNativeDir, codegenDir, and cliFile paths
200
+ // First, check if the react block exists
201
+ if (content.includes('react {')) {
202
+ // Update or add the monorepo paths in the react block
203
+ const reactBlockRegex = /(react\s*\{[\s\S]*?)(\/\*\s*Folders\s*\*\/[\s\S]*?)(\/\*\s*Variants\s*\*\/)/;
204
+ const match = content.match(reactBlockRegex);
205
+ if (match) {
206
+ const newFoldersSection = `/* Folders */
207
+ // MONOREPO: Point to monorepo root where package.json and node_modules live
208
+ root = file("../../../..")
209
+ // MONOREPO: Point to hoisted node_modules
210
+ reactNativeDir = file("../../../../node_modules/react-native")
211
+ codegenDir = file("../../../../node_modules/@react-native/codegen")
212
+ cliFile = file("../../../../node_modules/react-native/cli.js")
213
+
214
+ `;
215
+ content = content.replace(reactBlockRegex, `$1${newFoldersSection}$3`);
216
+ }
217
+ }
218
+ await fs_extra_1.default.writeFile(buildGradlePath, content);
219
+ }
220
+ /**
221
+ * Check if native folders exist in a mobile package
222
+ */
223
+ async function hasNativeFolders(mobileDir) {
224
+ return {
225
+ android: await fs_extra_1.default.pathExists(path_1.default.join(mobileDir, 'android')),
226
+ ios: await fs_extra_1.default.pathExists(path_1.default.join(mobileDir, 'ios')),
227
+ };
228
+ }
229
+ /**
230
+ * Overlay Idealyst files onto an existing React Native project
231
+ */
232
+ async function overlayIdealystFiles(mobileDir, templateDir, data) {
233
+ const { copyTemplateDirectory } = await Promise.resolve().then(() => __importStar(require('../templates/copier')));
234
+ // Copy template files, skipping android/ios directories
235
+ const entries = await fs_extra_1.default.readdir(templateDir, { withFileTypes: true });
236
+ for (const entry of entries) {
237
+ // Skip native folders - we don't want to overwrite RN CLI generated ones
238
+ if (entry.name === 'android' || entry.name === 'ios') {
239
+ continue;
240
+ }
241
+ const sourcePath = path_1.default.join(templateDir, entry.name);
242
+ const destPath = path_1.default.join(mobileDir, entry.name);
243
+ if (entry.isDirectory()) {
244
+ await copyTemplateDirectory(sourcePath, destPath, data);
245
+ }
246
+ else {
247
+ // Copy file with template processing
248
+ const { copyTemplateFile } = await Promise.resolve().then(() => __importStar(require('../templates/copier')));
249
+ await copyTemplateFile(sourcePath, destPath, data);
250
+ }
251
+ }
252
+ }
253
+ //# sourceMappingURL=reactNative.js.map