@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,575 @@
1
+ "use strict";
2
+ /**
3
+ * Devcontainer extension generator
4
+ *
5
+ * Creates a development container setup with optional services:
6
+ * - Base: Node.js, Yarn, Expo CLI (always included)
7
+ * - Optional: PostgreSQL database
8
+ * - Optional: Redis cache
9
+ * - Optional: Headless Chrome for browser automation
10
+ * - Optional: Claude Code with MCP servers
11
+ */
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.applyDevcontainerExtension = applyDevcontainerExtension;
17
+ const fs_extra_1 = __importDefault(require("fs-extra"));
18
+ const path_1 = __importDefault(require("path"));
19
+ const logger_1 = require("../../utils/logger");
20
+ /**
21
+ * Normalize devcontainer config from boolean or object
22
+ */
23
+ function normalizeDevcontainerConfig(config) {
24
+ if (typeof config === 'boolean') {
25
+ // If just --with-devcontainer flag was used, enable all services with default MCP servers
26
+ return {
27
+ enabled: config,
28
+ postgres: config,
29
+ redis: config,
30
+ chrome: config,
31
+ claudeCode: config,
32
+ mcpServers: config ? ['idealyst', 'serena'] : [],
33
+ };
34
+ }
35
+ // Ensure mcpServers array exists
36
+ return {
37
+ ...config,
38
+ mcpServers: config.mcpServers ?? [],
39
+ };
40
+ }
41
+ /**
42
+ * Generate MCP server setup commands for the selected servers
43
+ */
44
+ function generateMcpSetupCommands(servers, config) {
45
+ const commands = [];
46
+ for (const server of servers) {
47
+ switch (server) {
48
+ case 'idealyst':
49
+ commands.push(`
50
+ # Idealyst MCP (component documentation)
51
+ claude mcp add idealyst -s user -- npx -y @idealyst/mcp-server@latest 2>/dev/null || true`);
52
+ break;
53
+ case 'serena':
54
+ commands.push(`
55
+ # Serena MCP (code navigation and semantic search)
56
+ claude mcp add serena -s user -- npx -y @anthropic-ai/mcp-serena@latest 2>/dev/null || true`);
57
+ break;
58
+ case 'playwright':
59
+ if (config.chrome) {
60
+ commands.push(`
61
+ # Playwright MCP (connects to browserless chrome)
62
+ claude mcp add playwright -s user -- npx -y @anthropic-ai/mcp-playwright@latest --browser-ws-endpoint ws://chrome:3000 2>/dev/null || true`);
63
+ }
64
+ break;
65
+ case 'postgres':
66
+ if (config.postgres) {
67
+ commands.push(`
68
+ # PostgreSQL MCP (database queries)
69
+ claude mcp add postgres -s user -- npx -y @anthropic-ai/mcp-postgres@latest \$DATABASE_URL 2>/dev/null || true`);
70
+ }
71
+ break;
72
+ }
73
+ }
74
+ return commands.join('\n');
75
+ }
76
+ /**
77
+ * Apply devcontainer extension to a project
78
+ */
79
+ async function applyDevcontainerExtension(projectPath, data, devcontainerConfig) {
80
+ // Normalize config - default to all services if not specified
81
+ const config = normalizeDevcontainerConfig(devcontainerConfig ?? true);
82
+ if (!config.enabled) {
83
+ return;
84
+ }
85
+ logger_1.logger.info('Creating devcontainer configuration...');
86
+ const devcontainerDir = path_1.default.join(projectPath, '.devcontainer');
87
+ await fs_extra_1.default.ensureDir(devcontainerDir);
88
+ // Create all devcontainer files
89
+ const tasks = [
90
+ createDockerfile(devcontainerDir, config),
91
+ createDockerCompose(devcontainerDir, data, config),
92
+ createDevcontainerJson(devcontainerDir, data, config),
93
+ createSetupScript(devcontainerDir, data, config),
94
+ ];
95
+ // Only create Claude setup script if Claude Code is enabled
96
+ if (config.claudeCode) {
97
+ tasks.push(createClaudeSetupScript(devcontainerDir));
98
+ }
99
+ await Promise.all(tasks);
100
+ logger_1.logger.success('Devcontainer configuration created');
101
+ }
102
+ /**
103
+ * Create the Dockerfile
104
+ */
105
+ async function createDockerfile(devcontainerDir, config) {
106
+ const aptPackages = ['git', 'curl'];
107
+ // Add postgresql-client only if postgres is enabled
108
+ if (config.postgres) {
109
+ aptPackages.push('postgresql-client');
110
+ }
111
+ // Add redis-tools (provides redis-cli) only if redis is enabled
112
+ if (config.redis) {
113
+ aptPackages.push('redis-tools');
114
+ }
115
+ const globalPackages = ['@expo/cli'];
116
+ // Add claude-code if enabled
117
+ if (config.claudeCode) {
118
+ globalPackages.push('@anthropic-ai/claude-code');
119
+ }
120
+ const claudeCodeSetup = config.claudeCode
121
+ ? `
122
+ # Create Claude Code data directory (volume mount point)
123
+ RUN mkdir -p /home/node/.claude-code
124
+ `
125
+ : '';
126
+ const content = `FROM node:20-bullseye
127
+
128
+ # Install additional tools
129
+ RUN apt-get update && apt-get install -y \\
130
+ ${aptPackages.join(' \\\n ')} \\
131
+ && rm -rf /var/lib/apt/lists/*
132
+
133
+ # Enable corepack for yarn
134
+ RUN corepack enable
135
+
136
+ # Disable corepack download prompts (auto-accept)
137
+ ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0
138
+
139
+ # Install global tools
140
+ RUN npm install -g ${globalPackages.join(' ')}
141
+
142
+ # Set up git
143
+ RUN git config --global init.defaultBranch main
144
+
145
+ # Create workspace directory with correct ownership
146
+ RUN mkdir -p /workspace && chown -R node:node /workspace
147
+
148
+ WORKDIR /workspace
149
+
150
+ # Switch to node user
151
+ USER node
152
+ ${claudeCodeSetup}`;
153
+ await fs_extra_1.default.writeFile(path_1.default.join(devcontainerDir, 'Dockerfile'), content);
154
+ }
155
+ /**
156
+ * Create docker-compose.yml
157
+ */
158
+ async function createDockerCompose(devcontainerDir, data, config) {
159
+ const dbName = data.projectName.replace(/-/g, '_') + '_db';
160
+ const services = [];
161
+ const volumes = [];
162
+ const appDependsOn = [];
163
+ const appEnv = [
164
+ 'NODE_ENV: development',
165
+ ];
166
+ const appVolumes = [
167
+ '../:/workspace:cached',
168
+ ];
169
+ // PostgreSQL service
170
+ if (config.postgres) {
171
+ services.push(` # PostgreSQL Database
172
+ postgres:
173
+ image: postgres:15-alpine
174
+ environment:
175
+ POSTGRES_DB: ${dbName}
176
+ POSTGRES_USER: postgres
177
+ POSTGRES_PASSWORD: postgres
178
+ ports:
179
+ - "5432:5432"
180
+ volumes:
181
+ - postgres_data:/var/lib/postgresql/data
182
+ healthcheck:
183
+ test: ["CMD-SHELL", "pg_isready -U postgres"]
184
+ interval: 5s
185
+ timeout: 5s
186
+ retries: 5
187
+ `);
188
+ volumes.push('postgres_data');
189
+ appDependsOn.push(` postgres:
190
+ condition: service_healthy`);
191
+ appEnv.push(`DATABASE_URL: postgresql://postgres:postgres@postgres:5432/${dbName}`);
192
+ }
193
+ // Redis service
194
+ if (config.redis) {
195
+ services.push(` # Redis Cache
196
+ redis:
197
+ image: redis:7-alpine
198
+ ports:
199
+ - "6379:6379"
200
+ volumes:
201
+ - redis_data:/data
202
+ healthcheck:
203
+ test: ["CMD", "redis-cli", "ping"]
204
+ interval: 5s
205
+ timeout: 5s
206
+ retries: 5
207
+ `);
208
+ volumes.push('redis_data');
209
+ appDependsOn.push(` redis:
210
+ condition: service_healthy`);
211
+ appEnv.push('REDIS_URL: redis://redis:6379');
212
+ }
213
+ // Claude Code config
214
+ if (config.claudeCode) {
215
+ appEnv.push('CLAUDE_CONFIG_DIR: /home/node/.claude-code');
216
+ appVolumes.push('claude_data:/home/node/.claude-code');
217
+ volumes.push('claude_data');
218
+ }
219
+ // Chrome service
220
+ if (config.chrome) {
221
+ services.push(` # Headless Chrome Browser (for Playwright)
222
+ chrome:
223
+ image: browserless/chrome:latest
224
+ environment:
225
+ - CONNECTION_TIMEOUT=600000
226
+ - MAX_CONCURRENT_SESSIONS=10
227
+ - ENABLE_DEBUGGER=true
228
+ - PREBOOT_CHROME=true
229
+ ports:
230
+ - "3100:3000"
231
+ shm_size: "2gb"
232
+ dns:
233
+ - 8.8.8.8
234
+ - 8.8.4.4
235
+ extra_hosts:
236
+ - "localhost:host-gateway"
237
+ - "host.docker.internal:host-gateway"
238
+ healthcheck:
239
+ test: ["CMD", "curl", "-f", "http://localhost:3000/json/version"]
240
+ interval: 10s
241
+ timeout: 5s
242
+ retries: 3
243
+ `);
244
+ appEnv.push('BROWSER_WS_ENDPOINT: ws://chrome:3000');
245
+ }
246
+ // Build the depends_on section
247
+ const dependsOnSection = appDependsOn.length > 0
248
+ ? ` depends_on:
249
+ ${appDependsOn.join('\n')}`
250
+ : '';
251
+ // Build app service
252
+ const appService = ` # Development Service (for devcontainer)
253
+ app:
254
+ build:
255
+ context: .
256
+ dockerfile: Dockerfile
257
+ environment:
258
+ ${appEnv.join('\n ')}
259
+ ports:
260
+ - "3000:3000" # API server
261
+ - "5173:5173" # Vite dev server
262
+ - "8081:8081" # Metro bundler
263
+ - "19006:19006" # Expo dev tools
264
+ volumes:
265
+ - ${appVolumes.join('\n - ')}
266
+ ${dependsOnSection}
267
+ command: sleep infinity
268
+ `;
269
+ const volumesSection = volumes.length > 0
270
+ ? `volumes:
271
+ ${volumes.map(v => ` ${v}:`).join('\n')}
272
+ `
273
+ : '';
274
+ const content = `services:
275
+ ${services.join('\n')}
276
+ ${appService}
277
+ ${volumesSection}`;
278
+ await fs_extra_1.default.writeFile(path_1.default.join(devcontainerDir, 'docker-compose.yml'), content);
279
+ }
280
+ /**
281
+ * Create devcontainer.json
282
+ */
283
+ async function createDevcontainerJson(devcontainerDir, data, config) {
284
+ // Build forward ports list
285
+ const forwardPorts = [
286
+ 3000, // API server
287
+ 5173, // Vite dev server
288
+ 8081, // Metro Bundler
289
+ 19006, // Expo dev tools
290
+ ];
291
+ const portsAttributes = {
292
+ '3000': {
293
+ label: 'API Server',
294
+ onAutoForward: 'notify',
295
+ },
296
+ '5173': {
297
+ label: 'Vite Dev Server',
298
+ onAutoForward: 'openBrowser',
299
+ },
300
+ '8081': {
301
+ label: 'Metro Bundler',
302
+ onAutoForward: 'notify',
303
+ },
304
+ '19006': {
305
+ label: 'Expo Dev Tools',
306
+ onAutoForward: 'openBrowser',
307
+ },
308
+ };
309
+ if (config.postgres) {
310
+ forwardPorts.push(5432);
311
+ portsAttributes['5432'] = {
312
+ label: 'PostgreSQL Database',
313
+ onAutoForward: 'silent',
314
+ };
315
+ }
316
+ if (config.redis) {
317
+ forwardPorts.push(6379);
318
+ portsAttributes['6379'] = {
319
+ label: 'Redis Cache',
320
+ onAutoForward: 'silent',
321
+ };
322
+ }
323
+ if (config.chrome) {
324
+ forwardPorts.push(3100);
325
+ portsAttributes['3100'] = {
326
+ label: 'Browserless Chrome',
327
+ onAutoForward: 'silent',
328
+ };
329
+ }
330
+ const devcontainerJson = {
331
+ name: `${data.appDisplayName} Development`,
332
+ dockerComposeFile: 'docker-compose.yml',
333
+ service: 'app',
334
+ workspaceFolder: '/workspace',
335
+ forwardPorts,
336
+ portsAttributes,
337
+ customizations: {
338
+ vscode: {
339
+ extensions: [
340
+ // React Native/React development
341
+ 'msjsdiag.vscode-react-native',
342
+ // TypeScript/JavaScript
343
+ 'ms-vscode.vscode-typescript-next',
344
+ 'dbaeumer.vscode-eslint',
345
+ 'esbenp.prettier-vscode',
346
+ // General development
347
+ 'ms-vscode.vscode-json',
348
+ 'redhat.vscode-yaml',
349
+ 'ms-azuretools.vscode-docker',
350
+ 'christian-kohler.path-intellisense',
351
+ 'formulahendry.auto-rename-tag',
352
+ // Testing
353
+ 'orta.vscode-jest',
354
+ // Git
355
+ 'mhutchie.git-graph',
356
+ 'eamodio.gitlens',
357
+ 'github.vscode-pull-request-github',
358
+ // AI
359
+ 'github.copilot',
360
+ 'github.copilot-chat',
361
+ ],
362
+ settings: {
363
+ 'terminal.integrated.defaultProfile.linux': 'bash',
364
+ 'typescript.preferences.includePackageJsonAutoImports': 'auto',
365
+ 'editor.formatOnSave': true,
366
+ 'editor.defaultFormatter': 'esbenp.prettier-vscode',
367
+ 'editor.codeActionsOnSave': {
368
+ 'source.fixAll.eslint': 'explicit',
369
+ 'source.organizeImports': 'explicit',
370
+ },
371
+ 'files.watcherExclude': {
372
+ '**/node_modules/**': true,
373
+ '**/.git/**': true,
374
+ '**/dist/**': true,
375
+ '**/coverage/**': true,
376
+ },
377
+ 'search.exclude': {
378
+ '**/node_modules': true,
379
+ '**/dist': true,
380
+ '**/coverage': true,
381
+ '**/.yarn': true,
382
+ },
383
+ 'jest.jestCommandLine': 'yarn test',
384
+ 'jest.autoRun': 'off',
385
+ },
386
+ },
387
+ },
388
+ remoteUser: 'node',
389
+ postCreateCommand: 'bash .devcontainer/setup.sh',
390
+ };
391
+ // Add post-start command only if Claude Code is enabled
392
+ if (config.claudeCode) {
393
+ devcontainerJson.postStartCommand = 'bash .devcontainer/setup-claude.sh';
394
+ }
395
+ await fs_extra_1.default.writeJson(path_1.default.join(devcontainerDir, 'devcontainer.json'), devcontainerJson, { spaces: 2 });
396
+ }
397
+ /**
398
+ * Create setup.sh script
399
+ */
400
+ async function createSetupScript(devcontainerDir, data, config) {
401
+ const dbName = data.projectName.replace(/-/g, '_') + '_db';
402
+ const envVars = [
403
+ '# API Configuration',
404
+ 'API_PORT=3000',
405
+ 'JWT_SECRET=change-this-in-production',
406
+ '',
407
+ '# Web Configuration',
408
+ 'WEB_PORT=5173',
409
+ '',
410
+ '# Development Configuration',
411
+ 'NODE_ENV=development',
412
+ 'LOG_LEVEL=debug',
413
+ ];
414
+ if (config.postgres) {
415
+ envVars.unshift('# Database Configuration', `DATABASE_URL=postgresql://postgres:postgres@postgres:5432/${dbName}`, `POSTGRES_DB=${dbName}`, 'POSTGRES_USER=postgres', 'POSTGRES_PASSWORD=postgres', '');
416
+ }
417
+ if (config.redis) {
418
+ envVars.push('', '# Redis Configuration', 'REDIS_URL=redis://redis:6379');
419
+ }
420
+ if (config.chrome) {
421
+ envVars.push('', '# Browserless Chrome (for Playwright)', 'BROWSER_WS_ENDPOINT=ws://chrome:3000');
422
+ }
423
+ // Build wait sections
424
+ const waitSections = [];
425
+ if (config.postgres) {
426
+ waitSections.push(`
427
+ # Wait for database to be ready (timeout: 30s)
428
+ echo "⏳ Waiting for database to be ready..."
429
+ TIMEOUT=30
430
+ ELAPSED=0
431
+ until pg_isready -h postgres -p 5432 -U postgres > /dev/null 2>&1; do
432
+ if [ $ELAPSED -ge $TIMEOUT ]; then
433
+ echo "⚠️ Database not available after \${TIMEOUT}s - continuing anyway"
434
+ break
435
+ fi
436
+ echo "Database is unavailable - sleeping"
437
+ sleep 1
438
+ ELAPSED=$((ELAPSED + 1))
439
+ done
440
+ [ $ELAPSED -lt $TIMEOUT ] && echo "✅ Database is ready!"`);
441
+ }
442
+ if (config.redis) {
443
+ waitSections.push(`
444
+ # Wait for Redis to be ready (timeout: 30s)
445
+ echo "⏳ Waiting for Redis to be ready..."
446
+ TIMEOUT=30
447
+ ELAPSED=0
448
+ until redis-cli -h redis ping > /dev/null 2>&1; do
449
+ if [ $ELAPSED -ge $TIMEOUT ]; then
450
+ echo "⚠️ Redis not available after \${TIMEOUT}s - continuing anyway"
451
+ break
452
+ fi
453
+ echo "Redis is unavailable - sleeping"
454
+ sleep 1
455
+ ELAPSED=$((ELAPSED + 1))
456
+ done
457
+ [ $ELAPSED -lt $TIMEOUT ] && echo "✅ Redis is ready!"`);
458
+ }
459
+ if (config.chrome) {
460
+ waitSections.push(`
461
+ # Wait for Chrome to be ready (timeout: 30s)
462
+ echo "⏳ Waiting for Chrome browser to be ready..."
463
+ TIMEOUT=30
464
+ ELAPSED=0
465
+ until curl -s http://chrome:3000/json/version > /dev/null; do
466
+ if [ $ELAPSED -ge $TIMEOUT ]; then
467
+ echo "⚠️ Chrome not available after \${TIMEOUT}s - continuing anyway"
468
+ break
469
+ fi
470
+ echo "Chrome is unavailable - sleeping"
471
+ sleep 1
472
+ ELAPSED=$((ELAPSED + 1))
473
+ done
474
+ [ $ELAPSED -lt $TIMEOUT ] && echo "✅ Chrome browser is ready!"`);
475
+ }
476
+ // Claude Code setup - generate commands for selected MCP servers
477
+ const claudeSetup = config.claudeCode && config.mcpServers.length > 0
478
+ ? `
479
+ # Setup Claude Code MCP servers
480
+ echo "🤖 Configuring Claude Code MCP servers..."
481
+ ${generateMcpSetupCommands(config.mcpServers, config)}
482
+ `
483
+ : '';
484
+ // Prisma setup
485
+ const prismaSetup = data.hasPrisma
486
+ ? `
487
+ # Generate Prisma client
488
+ echo "🗄️ Generating Prisma client..."
489
+ yarn db:generate
490
+
491
+ # Run database migrations (if any exist)
492
+ if [ -d "packages/database/prisma/migrations" ]; then
493
+ echo "🗄️ Running database migrations..."
494
+ yarn db:migrate
495
+ fi
496
+ `
497
+ : '';
498
+ // Available commands
499
+ const commands = [
500
+ 'echo " yarn dev - Start all development servers"',
501
+ 'echo " yarn web:dev - Start web dev server only"',
502
+ 'echo " yarn mobile:start - Start mobile dev server only"',
503
+ ];
504
+ if (data.hasApi) {
505
+ commands.push('echo " yarn api:dev - Start API server only"');
506
+ }
507
+ if (data.hasPrisma) {
508
+ commands.push('echo " yarn db:studio - Open Prisma Studio"');
509
+ }
510
+ const content = `#!/bin/bash
511
+
512
+ echo "🚀 Setting up ${data.appDisplayName} development environment..."
513
+
514
+ # Create environment file if it doesn't exist
515
+ if [ ! -f ".env" ]; then
516
+ echo "📝 Creating .env file..."
517
+ cat > .env << EOF
518
+ ${envVars.join('\n')}
519
+ EOF
520
+ fi
521
+ ${waitSections.join('\n')}
522
+
523
+ # Install dependencies
524
+ echo "📦 Installing dependencies..."
525
+ yarn install
526
+ ${claudeSetup}${prismaSetup}
527
+ echo ""
528
+ echo "✅ Development environment is ready!"
529
+ echo ""
530
+ echo "🎉 You can now start developing your ${data.appDisplayName} application!"
531
+ echo ""
532
+ echo "Available commands:"
533
+ ${commands.join('\n')}
534
+ echo ""
535
+ `;
536
+ const scriptPath = path_1.default.join(devcontainerDir, 'setup.sh');
537
+ await fs_extra_1.default.writeFile(scriptPath, content);
538
+ await fs_extra_1.default.chmod(scriptPath, 0o755);
539
+ }
540
+ /**
541
+ * Create setup-claude.sh script
542
+ */
543
+ async function createClaudeSetupScript(devcontainerDir) {
544
+ const content = `#!/bin/bash
545
+
546
+ # Setup Claude Code data directory in the dev container
547
+ # This creates a persistent volume-backed directory for all Claude Code data
548
+
549
+ echo "Setting up Claude Code data directory..."
550
+
551
+ # Create the Claude Code directory structure if it doesn't exist
552
+ mkdir -p /home/node/.claude-code/.claude
553
+ mkdir -p /home/node/.claude-code/.claude/session-env
554
+ mkdir -p /home/node/.claude-code/.claude/projects
555
+
556
+ # Create symlinks from default locations to the persisted volume
557
+ # Remove any existing files/dirs first
558
+ rm -rf /home/node/.claude 2>/dev/null || true
559
+ rm -f /home/node/.claude.json 2>/dev/null || true
560
+
561
+ # Create symlinks to the volume-backed directory
562
+ ln -sf /home/node/.claude-code/.claude /home/node/.claude
563
+ ln -sf /home/node/.claude-code/.claude.json /home/node/.claude.json 2>/dev/null || true
564
+
565
+ # Set proper permissions
566
+ chmod -R 700 /home/node/.claude-code 2>/dev/null || true
567
+
568
+ echo "Claude Code data directory configured at /home/node/.claude-code"
569
+ echo "All Claude Code data will persist across container rebuilds"
570
+ `;
571
+ const scriptPath = path_1.default.join(devcontainerDir, 'setup-claude.sh');
572
+ await fs_extra_1.default.writeFile(scriptPath, content);
573
+ await fs_extra_1.default.chmod(scriptPath, 0o755);
574
+ }
575
+ //# sourceMappingURL=devcontainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devcontainer.js","sourceRoot":"","sources":["../../../src/generators/extensions/devcontainer.ts"],"names":[],"mappings":"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"}