@idealyst/cli 1.1.9 → 1.2.1

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 +119 -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 +286 -0
  14. package/dist/generators/core/mobile.js.map +1 -0
  15. package/dist/generators/core/shared.js +207 -0
  16. package/dist/generators/core/shared.js.map +1 -0
  17. package/dist/generators/core/web.js +377 -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 +510 -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 +106 -4
  32. package/dist/generators/index.js.map +1 -1
  33. package/dist/generators/reactNative.js +177 -0
  34. package/dist/generators/reactNative.js.map +1 -0
  35. package/dist/generators/workspace.js +272 -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 +76 -0
  58. package/dist/types/generators/core/index.d.ts +6 -0
  59. package/dist/types/generators/core/mobile.d.ts +13 -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 +153 -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 +58 -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 +41 -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 +95 -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 +78 -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 +107 -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,377 @@
1
+ "use strict";
2
+ /**
3
+ * Web package 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.generateWebPackage = generateWebPackage;
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const copier_1 = require("../../templates/copier");
13
+ const constants_1 = require("../../constants");
14
+ const logger_1 = require("../../utils/logger");
15
+ /**
16
+ * Generate the web package
17
+ */
18
+ async function generateWebPackage(projectPath, data) {
19
+ const webDir = path_1.default.join(projectPath, 'packages', 'web');
20
+ logger_1.logger.info('Creating web package...');
21
+ await fs_extra_1.default.ensureDir(webDir);
22
+ // Try to use template first, or generate programmatically
23
+ const templatePath = (0, copier_1.getTemplatePath)('core', 'web');
24
+ if (await (0, copier_1.templateHasContent)(templatePath)) {
25
+ await (0, copier_1.copyTemplateDirectory)(templatePath, webDir, data);
26
+ }
27
+ else {
28
+ // Generate programmatically
29
+ await generateWebFiles(webDir, data);
30
+ }
31
+ return { success: true };
32
+ }
33
+ /**
34
+ * Generate web package files programmatically
35
+ */
36
+ async function generateWebFiles(webDir, data) {
37
+ // Create directory structure
38
+ await fs_extra_1.default.ensureDir(path_1.default.join(webDir, 'src', 'pages'));
39
+ await fs_extra_1.default.ensureDir(path_1.default.join(webDir, 'src', 'navigation'));
40
+ await fs_extra_1.default.ensureDir(path_1.default.join(webDir, 'public'));
41
+ // Create package.json
42
+ await fs_extra_1.default.writeJson(path_1.default.join(webDir, 'package.json'), createWebPackageJson(data), { spaces: 2 });
43
+ // Create vite.config.ts
44
+ await fs_extra_1.default.writeFile(path_1.default.join(webDir, 'vite.config.ts'), createViteConfig(data));
45
+ // Create tsconfig.json
46
+ await fs_extra_1.default.writeJson(path_1.default.join(webDir, 'tsconfig.json'), createWebTsConfig(), { spaces: 2 });
47
+ // Create tsconfig.node.json (for Vite config)
48
+ await fs_extra_1.default.writeJson(path_1.default.join(webDir, 'tsconfig.node.json'), createWebTsConfigNode(), { spaces: 2 });
49
+ // Create index.html
50
+ await fs_extra_1.default.writeFile(path_1.default.join(webDir, 'index.html'), createIndexHtml(data));
51
+ // Create src/main.tsx
52
+ await fs_extra_1.default.writeFile(path_1.default.join(webDir, 'src', 'main.tsx'), createMainTsx(data));
53
+ // Create src/App.tsx
54
+ await fs_extra_1.default.writeFile(path_1.default.join(webDir, 'src', 'App.tsx'), createAppTsx(data));
55
+ // Create src/pages/Home.tsx
56
+ await fs_extra_1.default.writeFile(path_1.default.join(webDir, 'src', 'pages', 'Home.tsx'), createHomePage(data));
57
+ // Create src/navigation/AppRouter.tsx
58
+ await fs_extra_1.default.writeFile(path_1.default.join(webDir, 'src', 'navigation', 'AppRouter.tsx'), createAppRouter(data));
59
+ }
60
+ /**
61
+ * Create web package.json
62
+ */
63
+ function createWebPackageJson(data) {
64
+ const dependencies = {
65
+ ...constants_1.DEPENDENCIES.core,
66
+ ...constants_1.DEPENDENCIES.web,
67
+ [`@${data.workspaceScope}/shared`]: 'workspace:*',
68
+ };
69
+ // Add tRPC dependencies if enabled
70
+ if (data.hasTrpc) {
71
+ Object.assign(dependencies, constants_1.DEPENDENCIES.trpc);
72
+ }
73
+ // Add GraphQL dependencies if enabled
74
+ if (data.hasGraphql) {
75
+ Object.assign(dependencies, constants_1.DEPENDENCIES.graphql);
76
+ }
77
+ return {
78
+ name: `@${data.workspaceScope}/web`,
79
+ version: data.version,
80
+ type: 'module',
81
+ scripts: {
82
+ 'dev': 'vite',
83
+ 'build': 'tsc && vite build',
84
+ 'preview': 'vite preview',
85
+ 'test': 'jest',
86
+ },
87
+ dependencies,
88
+ devDependencies: {
89
+ '@babel/core': '^7.24.0',
90
+ '@babel/preset-react': '^7.24.0',
91
+ '@babel/preset-typescript': '^7.24.0',
92
+ '@types/react': '^18.2.0',
93
+ '@types/react-dom': '^18.2.0',
94
+ '@vitejs/plugin-react': '^4.3.0',
95
+ 'typescript': '^5.0.0',
96
+ 'vite': '^5.2.0',
97
+ 'vite-plugin-babel': '^1.2.0',
98
+ },
99
+ };
100
+ }
101
+ /**
102
+ * Create vite.config.ts
103
+ */
104
+ function createViteConfig(data) {
105
+ return `import { defineConfig } from 'vite';
106
+ import react from '@vitejs/plugin-react';
107
+ import babel from 'vite-plugin-babel';
108
+ import path from 'path';
109
+
110
+ // Monorepo root (where hoisted node_modules live)
111
+ const monorepoRoot = path.resolve(__dirname, '../..');
112
+
113
+ export default defineConfig({
114
+ plugins: [
115
+ babel({
116
+ filter: (id) =>
117
+ id.includes('node_modules/@idealyst/') ||
118
+ (id.includes('/packages/') && /\\.(tsx?|jsx?)$/.test(id)),
119
+ babelConfig: {
120
+ presets: [
121
+ ['@babel/preset-react', { runtime: 'automatic' }],
122
+ ['@babel/preset-typescript', { isTSX: true, allExtensions: true }],
123
+ ],
124
+ plugins: [
125
+ // 1. Idealyst theme plugin - processes $iterator patterns FIRST
126
+ [
127
+ '@idealyst/theme/plugin',
128
+ {
129
+ autoProcessPaths: [
130
+ 'packages/',
131
+ '@idealyst/components',
132
+ '@idealyst/navigation',
133
+ '@idealyst/theme',
134
+ ],
135
+ themePath: '../shared/src/theme.ts',
136
+ },
137
+ ],
138
+ // 2. Unistyles plugin - processes StyleSheet.create SECOND
139
+ [
140
+ 'react-native-unistyles/plugin',
141
+ {
142
+ root: 'src',
143
+ autoProcessPaths: [
144
+ 'packages/',
145
+ '@idealyst/components',
146
+ '@idealyst/navigation',
147
+ '@idealyst/theme',
148
+ ],
149
+ },
150
+ ],
151
+ // 3. Idealyst components web plugin
152
+ ['@idealyst/components/plugin/web', { root: 'src' }],
153
+ ],
154
+ },
155
+ }),
156
+ react(),
157
+ ],
158
+ resolve: {
159
+ alias: {
160
+ 'react-native': path.resolve(monorepoRoot, 'node_modules/react-native-web'),
161
+ 'react-native-unistyles': path.resolve(monorepoRoot, 'node_modules/react-native-unistyles'),
162
+ '@react-native/normalize-colors': path.resolve(monorepoRoot, 'node_modules/@react-native/normalize-colors'),
163
+ '@mdi/react': path.resolve(monorepoRoot, 'node_modules/@mdi/react'),
164
+ '@mdi/js': path.resolve(monorepoRoot, 'node_modules/@mdi/js'),
165
+ '@': path.resolve(__dirname, './src'),
166
+ },
167
+ extensions: ['.web.tsx', '.web.ts', '.tsx', '.ts', '.js', '.jsx'],
168
+ conditions: ['browser', 'import', 'module', 'default'],
169
+ preserveSymlinks: false,
170
+ },
171
+ define: {
172
+ global: 'globalThis',
173
+ __DEV__: JSON.stringify(true),
174
+ },
175
+ server: {
176
+ host: '0.0.0.0',
177
+ port: 5173,
178
+ },
179
+ optimizeDeps: {
180
+ include: [
181
+ 'react-native-web',
182
+ '@react-native/normalize-colors',
183
+ ],
184
+ exclude: [
185
+ '@\${data.workspaceScope}/shared',
186
+ ],
187
+ esbuildOptions: {
188
+ resolveExtensions: ['.web.tsx', '.web.ts', '.tsx', '.ts', '.jsx', '.js'],
189
+ loader: {
190
+ '.tsx': 'tsx',
191
+ '.ts': 'ts',
192
+ },
193
+ },
194
+ },
195
+ });
196
+ `;
197
+ }
198
+ /**
199
+ * Create web tsconfig.json
200
+ */
201
+ function createWebTsConfig() {
202
+ return {
203
+ compilerOptions: {
204
+ target: 'ES2020',
205
+ useDefineForClassFields: true,
206
+ lib: ['ES2020', 'DOM', 'DOM.Iterable'],
207
+ module: 'ESNext',
208
+ skipLibCheck: true,
209
+ moduleResolution: 'bundler',
210
+ allowImportingTsExtensions: true,
211
+ resolveJsonModule: true,
212
+ isolatedModules: true,
213
+ noEmit: true,
214
+ jsx: 'react-jsx',
215
+ strict: true,
216
+ noUnusedLocals: true,
217
+ noUnusedParameters: true,
218
+ noFallthroughCasesInSwitch: true,
219
+ paths: {
220
+ '@/*': ['./src/*'],
221
+ },
222
+ },
223
+ include: ['src'],
224
+ references: [{ path: './tsconfig.node.json' }],
225
+ };
226
+ }
227
+ /**
228
+ * Create web tsconfig.node.json (for Vite config and Node.js files)
229
+ */
230
+ function createWebTsConfigNode() {
231
+ return {
232
+ compilerOptions: {
233
+ composite: true,
234
+ skipLibCheck: true,
235
+ module: 'ESNext',
236
+ moduleResolution: 'bundler',
237
+ allowSyntheticDefaultImports: true,
238
+ strict: true,
239
+ },
240
+ include: ['vite.config.ts'],
241
+ };
242
+ }
243
+ /**
244
+ * Create index.html
245
+ */
246
+ function createIndexHtml(data) {
247
+ return `<!DOCTYPE html>
248
+ <html lang="en">
249
+ <head>
250
+ <meta charset="UTF-8" />
251
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
252
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
253
+ <title>${data.appDisplayName}</title>
254
+ <style>
255
+ html, body, #root {
256
+ margin: 0;
257
+ padding: 0;
258
+ height: 100%;
259
+ width: 100%;
260
+ }
261
+ </style>
262
+ </head>
263
+ <body>
264
+ <div id="root"></div>
265
+ <script type="module" src="/src/main.tsx"></script>
266
+ </body>
267
+ </html>
268
+ `;
269
+ }
270
+ /**
271
+ * Create main.tsx
272
+ */
273
+ function createMainTsx(data) {
274
+ return `// Import shared theme configuration FIRST (initializes unistyles before any StyleSheet.create)
275
+ import '@${data.workspaceScope}/shared/theme';
276
+
277
+ import React from 'react';
278
+ import ReactDOM from 'react-dom/client';
279
+ import App from './App';
280
+
281
+ ReactDOM.createRoot(document.getElementById('root')!).render(
282
+ <React.StrictMode>
283
+ <App />
284
+ </React.StrictMode>
285
+ );
286
+ `;
287
+ }
288
+ /**
289
+ * Create App.tsx
290
+ */
291
+ function createAppTsx(data) {
292
+ const imports = [
293
+ `import React from 'react';`,
294
+ `import { BrowserRouter } from 'react-router-dom';`,
295
+ `import { NavigatorProvider } from '@idealyst/navigation';`,
296
+ `import { AppRouter } from './navigation/AppRouter';`,
297
+ ];
298
+ if (data.hasTrpc) {
299
+ imports.push(`import { QueryClient, QueryClientProvider } from '@tanstack/react-query';`);
300
+ imports.push(`import { trpc, trpcClient } from './utils/trpc';`);
301
+ }
302
+ let appContent = `
303
+ export default function App() {
304
+ return (
305
+ <BrowserRouter>
306
+ <NavigatorProvider route={AppRouter} />
307
+ </BrowserRouter>
308
+ );
309
+ }
310
+ `;
311
+ if (data.hasTrpc) {
312
+ appContent = `
313
+ const queryClient = new QueryClient();
314
+
315
+ export default function App() {
316
+ return (
317
+ <trpc.Provider client={trpcClient} queryClient={queryClient}>
318
+ <QueryClientProvider client={queryClient}>
319
+ <BrowserRouter>
320
+ <NavigatorProvider route={AppRouter} />
321
+ </BrowserRouter>
322
+ </QueryClientProvider>
323
+ </trpc.Provider>
324
+ );
325
+ }
326
+ `;
327
+ }
328
+ return imports.join('\n') + '\n' + appContent;
329
+ }
330
+ /**
331
+ * Create Home page
332
+ */
333
+ function createHomePage(data) {
334
+ return `import React from 'react';
335
+ import { HelloWorld } from '@${data.workspaceScope}/shared';
336
+
337
+ export default function Home() {
338
+ return (
339
+ <HelloWorld
340
+ name="${data.appDisplayName}"
341
+ onPress={() => console.log('Get Started pressed!')}
342
+ />
343
+ );
344
+ }
345
+ `;
346
+ }
347
+ /**
348
+ * Create AppRouter
349
+ */
350
+ function createAppRouter(data) {
351
+ return `import { NavigatorParam } from '@idealyst/navigation';
352
+ import Home from '../pages/Home';
353
+
354
+ /**
355
+ * Application navigation router
356
+ */
357
+ export const AppRouter: NavigatorParam = {
358
+ path: '/',
359
+ type: 'navigator',
360
+ layout: 'stack',
361
+ options: {
362
+ headerShown: false,
363
+ },
364
+ routes: [
365
+ {
366
+ path: '/',
367
+ type: 'screen',
368
+ component: Home,
369
+ options: { title: 'Home' },
370
+ },
371
+ ],
372
+ };
373
+
374
+ export default AppRouter;
375
+ `;
376
+ }
377
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/generators/core/web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ /**
3
+ * API 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.applyApiExtension = applyApiExtension;
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const copier_1 = require("../../templates/copier");
13
+ const merger_1 = require("../../templates/merger");
14
+ const constants_1 = require("../../constants");
15
+ const logger_1 = require("../../utils/logger");
16
+ /**
17
+ * Apply API extension to a workspace
18
+ */
19
+ async function applyApiExtension(projectPath, data) {
20
+ const apiDir = path_1.default.join(projectPath, 'packages', 'api');
21
+ logger_1.logger.info('Creating API package...');
22
+ await fs_extra_1.default.ensureDir(apiDir);
23
+ // Try to use template first, or generate programmatically
24
+ const templatePath = (0, copier_1.getTemplatePath)('extensions', 'api');
25
+ if (await (0, copier_1.templateHasContent)(templatePath)) {
26
+ await (0, copier_1.copyTemplateDirectory)(templatePath, apiDir, data);
27
+ }
28
+ else {
29
+ // Generate programmatically
30
+ await generateApiFiles(apiDir, data);
31
+ }
32
+ // Add API scripts to root package.json
33
+ await (0, merger_1.addScripts)(path_1.default.join(projectPath, 'package.json'), {
34
+ 'api:dev': `yarn workspace @${data.workspaceScope}/api dev`,
35
+ 'api:build': `yarn workspace @${data.workspaceScope}/api build`,
36
+ });
37
+ return { success: true };
38
+ }
39
+ /**
40
+ * Generate API package files programmatically
41
+ */
42
+ async function generateApiFiles(apiDir, data) {
43
+ // Create directory structure
44
+ await fs_extra_1.default.ensureDir(path_1.default.join(apiDir, 'src', 'routes'));
45
+ // Create package.json
46
+ await fs_extra_1.default.writeJson(path_1.default.join(apiDir, 'package.json'), createApiPackageJson(data), { spaces: 2 });
47
+ // Create tsconfig.json
48
+ await fs_extra_1.default.writeJson(path_1.default.join(apiDir, 'tsconfig.json'), createApiTsConfig(), { spaces: 2 });
49
+ // Create src/index.ts
50
+ await fs_extra_1.default.writeFile(path_1.default.join(apiDir, 'src', 'index.ts'), createApiIndex(data));
51
+ // Create src/server.ts
52
+ await fs_extra_1.default.writeFile(path_1.default.join(apiDir, 'src', 'server.ts'), createApiServer(data));
53
+ // Create .env.example
54
+ await fs_extra_1.default.writeFile(path_1.default.join(apiDir, '.env.example'), createEnvExample());
55
+ }
56
+ /**
57
+ * Create API package.json
58
+ */
59
+ function createApiPackageJson(data) {
60
+ const dependencies = {
61
+ ...constants_1.DEPENDENCIES.api,
62
+ };
63
+ // Add tRPC server if enabled
64
+ if (data.hasTrpc) {
65
+ Object.assign(dependencies, constants_1.DEPENDENCIES.trpcServer);
66
+ }
67
+ // Add GraphQL server if enabled
68
+ if (data.hasGraphql) {
69
+ Object.assign(dependencies, constants_1.DEPENDENCIES.graphqlServer);
70
+ }
71
+ // Add Prisma client if enabled
72
+ if (data.hasPrisma) {
73
+ dependencies[`@${data.workspaceScope}/database`] = 'workspace:*';
74
+ }
75
+ return {
76
+ name: `@${data.workspaceScope}/api`,
77
+ version: data.version,
78
+ type: 'module',
79
+ main: 'dist/index.js',
80
+ scripts: {
81
+ 'dev': 'tsx watch src/server.ts',
82
+ 'build': 'tsc',
83
+ 'start': 'node dist/server.js',
84
+ 'test': 'jest',
85
+ },
86
+ dependencies,
87
+ devDependencies: {
88
+ '@types/cors': '^2.8.0',
89
+ '@types/express': '^4.17.0',
90
+ '@types/node': '^20.0.0',
91
+ 'tsx': '^4.7.0',
92
+ 'typescript': '^5.0.0',
93
+ },
94
+ };
95
+ }
96
+ /**
97
+ * Create API tsconfig.json
98
+ */
99
+ function createApiTsConfig() {
100
+ return {
101
+ compilerOptions: {
102
+ target: 'ES2020',
103
+ module: 'NodeNext',
104
+ moduleResolution: 'NodeNext',
105
+ esModuleInterop: true,
106
+ strict: true,
107
+ skipLibCheck: true,
108
+ outDir: './dist',
109
+ rootDir: './src',
110
+ declaration: true,
111
+ },
112
+ include: ['src/**/*'],
113
+ exclude: ['node_modules', 'dist'],
114
+ };
115
+ }
116
+ /**
117
+ * Create API index.ts
118
+ */
119
+ function createApiIndex(data) {
120
+ let exports = `/**
121
+ * API package exports
122
+ */
123
+
124
+ export { app, startServer } from './server';
125
+ `;
126
+ if (data.hasTrpc) {
127
+ exports += `export { appRouter, type AppRouter } from './trpc/router';
128
+ `;
129
+ }
130
+ return exports;
131
+ }
132
+ /**
133
+ * Create API server.ts
134
+ */
135
+ function createApiServer(data) {
136
+ let imports = `import express from 'express';
137
+ import cors from 'cors';
138
+ import 'dotenv/config';
139
+ `;
140
+ let middleware = '';
141
+ let routes = '';
142
+ if (data.hasTrpc) {
143
+ imports += `import * as trpcExpress from '@trpc/server/adapters/express';
144
+ import { appRouter, createContext } from './trpc/router';
145
+ `;
146
+ middleware += `
147
+ // tRPC middleware
148
+ app.use(
149
+ '/trpc',
150
+ trpcExpress.createExpressMiddleware({
151
+ router: appRouter,
152
+ createContext,
153
+ })
154
+ );
155
+ `;
156
+ }
157
+ if (data.hasGraphql) {
158
+ imports += `import { createYoga } from 'graphql-yoga';
159
+ import { schema } from './graphql/schema';
160
+ `;
161
+ middleware += `
162
+ // GraphQL middleware
163
+ const yoga = createYoga({ schema });
164
+ app.use('/graphql', yoga);
165
+ `;
166
+ }
167
+ routes = `
168
+ // Health check
169
+ app.get('/health', (req, res) => {
170
+ res.json({ status: 'ok', timestamp: new Date().toISOString() });
171
+ });
172
+
173
+ // Root route
174
+ app.get('/', (req, res) => {
175
+ res.json({
176
+ name: '${data.appDisplayName} API',
177
+ version: '${data.version}',
178
+ endpoints: {
179
+ health: '/health',${data.hasTrpc ? `
180
+ trpc: '/trpc',` : ''}${data.hasGraphql ? `
181
+ graphql: '/graphql',` : ''}
182
+ },
183
+ });
184
+ });
185
+ `;
186
+ return `${imports}
187
+
188
+ export const app = express();
189
+
190
+ // Middleware
191
+ app.use(cors());
192
+ app.use(express.json());
193
+ ${middleware}
194
+ ${routes}
195
+ // Start server
196
+ const PORT = process.env.PORT || 3000;
197
+
198
+ export function startServer() {
199
+ app.listen(PORT, () => {
200
+ console.log(\`Server running on http://localhost:\${PORT}\`);
201
+ });
202
+ }
203
+
204
+ // Start if run directly
205
+ if (import.meta.url === \`file://\${process.argv[1]}\`) {
206
+ startServer();
207
+ }
208
+ `;
209
+ }
210
+ /**
211
+ * Create .env.example
212
+ */
213
+ function createEnvExample() {
214
+ return `# Server
215
+ PORT=3000
216
+
217
+ # Database (if using Prisma)
218
+ DATABASE_URL="postgresql://user:password@localhost:5432/mydb"
219
+
220
+ # Add your environment variables here
221
+ `;
222
+ }
223
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/generators/extensions/api.ts"],"names":[],"mappings":"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"}