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