@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,196 @@
1
+ "use strict";
2
+ /**
3
+ * Input validation utilities
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.validateProjectName = validateProjectName;
10
+ exports.validateOrgDomain = validateOrgDomain;
11
+ exports.validateAppDisplayName = validateAppDisplayName;
12
+ exports.validateBundleId = validateBundleId;
13
+ exports.validateAndroidPackageName = validateAndroidPackageName;
14
+ exports.validateExtensions = validateExtensions;
15
+ const validate_npm_package_name_1 = __importDefault(require("validate-npm-package-name"));
16
+ const constants_1 = require("../constants");
17
+ /**
18
+ * Validate a project name
19
+ */
20
+ function validateProjectName(name) {
21
+ // Check npm package name validity
22
+ const npmResult = (0, validate_npm_package_name_1.default)(name);
23
+ if (!npmResult.validForNewPackages) {
24
+ const errors = [...(npmResult.errors || []), ...(npmResult.warnings || [])];
25
+ return {
26
+ valid: false,
27
+ error: errors.join(', '),
28
+ suggestions: [
29
+ 'Use lowercase letters, numbers, and hyphens only',
30
+ 'Start with a letter',
31
+ 'Example: my-awesome-app',
32
+ ],
33
+ };
34
+ }
35
+ // Check our additional constraints
36
+ if (!constants_1.PATTERNS.PROJECT_NAME.test(name)) {
37
+ return {
38
+ valid: false,
39
+ error: 'Project name must be lowercase and start with a letter',
40
+ suggestions: [
41
+ 'Use only lowercase letters, numbers, and hyphens',
42
+ 'Start with a letter',
43
+ 'Example: my-awesome-app',
44
+ ],
45
+ };
46
+ }
47
+ // Check length
48
+ if (name.length < 2) {
49
+ return {
50
+ valid: false,
51
+ error: 'Project name must be at least 2 characters',
52
+ };
53
+ }
54
+ if (name.length > 50) {
55
+ return {
56
+ valid: false,
57
+ error: 'Project name must be 50 characters or less',
58
+ };
59
+ }
60
+ return { valid: true };
61
+ }
62
+ /**
63
+ * Validate an organization domain
64
+ */
65
+ function validateOrgDomain(domain) {
66
+ // Check basic format
67
+ if (!constants_1.PATTERNS.ORG_DOMAIN.test(domain)) {
68
+ return {
69
+ valid: false,
70
+ error: 'Domain must be lowercase with dot-separated segments',
71
+ suggestions: [
72
+ 'Use format like: com.company or io.myorg',
73
+ 'Each segment must start with a letter',
74
+ 'Only lowercase letters and numbers allowed',
75
+ ],
76
+ };
77
+ }
78
+ // Check for at least two segments
79
+ const segments = domain.split('.');
80
+ if (segments.length < 2) {
81
+ return {
82
+ valid: false,
83
+ error: 'Domain must have at least two segments',
84
+ suggestions: ['Example: com.company, io.myorg, org.example'],
85
+ };
86
+ }
87
+ // Check for Java reserved keywords
88
+ for (const segment of segments) {
89
+ if (constants_1.JAVA_RESERVED_KEYWORDS.includes(segment)) {
90
+ return {
91
+ valid: false,
92
+ error: `"${segment}" is a Java reserved keyword and cannot be used`,
93
+ suggestions: [`Change "${segment}" to something else like "${segment}app"`],
94
+ };
95
+ }
96
+ }
97
+ return { valid: true };
98
+ }
99
+ /**
100
+ * Validate an app display name
101
+ */
102
+ function validateAppDisplayName(name) {
103
+ if (!name || name.trim().length === 0) {
104
+ return {
105
+ valid: false,
106
+ error: 'App name cannot be empty',
107
+ };
108
+ }
109
+ if (name.length > 50) {
110
+ return {
111
+ valid: false,
112
+ error: 'App name must be 50 characters or less',
113
+ };
114
+ }
115
+ // Check for at least one letter
116
+ if (!/[a-zA-Z]/.test(name)) {
117
+ return {
118
+ valid: false,
119
+ error: 'App name must contain at least one letter',
120
+ };
121
+ }
122
+ return { valid: true };
123
+ }
124
+ /**
125
+ * Validate an iOS bundle ID
126
+ */
127
+ function validateBundleId(bundleId) {
128
+ // Must start with letter
129
+ if (!/^[a-zA-Z]/.test(bundleId)) {
130
+ return {
131
+ valid: false,
132
+ error: 'Bundle ID must start with a letter',
133
+ };
134
+ }
135
+ // Only alphanumeric, dots, and hyphens
136
+ if (!constants_1.PATTERNS.IOS_BUNDLE_ID.test(bundleId)) {
137
+ return {
138
+ valid: false,
139
+ error: 'Bundle ID can only contain letters, numbers, dots, and hyphens',
140
+ };
141
+ }
142
+ // Must have at least two segments
143
+ const segments = bundleId.split('.');
144
+ if (segments.length < 2) {
145
+ return {
146
+ valid: false,
147
+ error: 'Bundle ID must have at least two segments (e.g., com.app)',
148
+ };
149
+ }
150
+ return { valid: true };
151
+ }
152
+ /**
153
+ * Validate an Android package name
154
+ */
155
+ function validateAndroidPackageName(packageName) {
156
+ // Must be lowercase with dots separating segments
157
+ if (!constants_1.PATTERNS.ANDROID_PACKAGE.test(packageName)) {
158
+ return {
159
+ valid: false,
160
+ error: 'Package name must be lowercase, start with letter, and have dot-separated segments',
161
+ };
162
+ }
163
+ // Check for Java reserved keywords
164
+ const segments = packageName.split('.');
165
+ for (const segment of segments) {
166
+ if (constants_1.JAVA_RESERVED_KEYWORDS.includes(segment)) {
167
+ return {
168
+ valid: false,
169
+ error: `"${segment}" is a Java reserved keyword`,
170
+ };
171
+ }
172
+ }
173
+ return { valid: true };
174
+ }
175
+ /**
176
+ * Validate that extension dependencies are met
177
+ */
178
+ function validateExtensions(options) {
179
+ const { withApi, withTrpc, withGraphql } = options;
180
+ if (withTrpc && !withApi) {
181
+ return {
182
+ valid: false,
183
+ error: 'tRPC requires API to be enabled',
184
+ suggestions: ['Add --with-api flag to enable API server'],
185
+ };
186
+ }
187
+ if (withGraphql && !withApi) {
188
+ return {
189
+ valid: false,
190
+ error: 'GraphQL requires API to be enabled',
191
+ suggestions: ['Add --with-api flag to enable API server'],
192
+ };
193
+ }
194
+ return { valid: true };
195
+ }
196
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ /**
3
+ * Wizard orchestrator - manages the step-by-step configuration flow
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ var __importDefault = (this && this.__importDefault) || function (mod) {
20
+ return (mod && mod.__esModule) ? mod : { "default": mod };
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.runWizard = runWizard;
24
+ exports.validateNonInteractiveArgs = validateNonInteractiveArgs;
25
+ exports.buildConfigFromArgs = buildConfigFromArgs;
26
+ const chalk_1 = __importDefault(require("chalk"));
27
+ const identifiers_1 = require("../identifiers");
28
+ const steps_1 = require("./steps");
29
+ /**
30
+ * Run the interactive wizard to collect all configuration
31
+ */
32
+ async function runWizard(prefilledArgs = {}) {
33
+ console.log(chalk_1.default.blue.bold('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
34
+ console.log(chalk_1.default.blue.bold(' 🚀 Welcome to Idealyst Framework Setup!'));
35
+ console.log(chalk_1.default.blue.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
36
+ console.log(chalk_1.default.gray('\nThis wizard will guide you through setting up your new project.'));
37
+ console.log(chalk_1.default.gray('Press Ctrl+C at any time to cancel.\n'));
38
+ // Build partial config from prefilled args
39
+ const config = {
40
+ extensions: {
41
+ api: prefilledArgs.withApi ?? false,
42
+ prisma: prefilledArgs.withPrisma ?? false,
43
+ trpc: prefilledArgs.withTrpc ?? false,
44
+ graphql: prefilledArgs.withGraphql ?? false,
45
+ devcontainer: prefilledArgs.withDevcontainer ?? false,
46
+ },
47
+ };
48
+ // Step 1: Project name
49
+ if (prefilledArgs.projectName) {
50
+ config.projectName = prefilledArgs.projectName;
51
+ console.log(chalk_1.default.gray(`✓ Project name: ${config.projectName} (from arguments)`));
52
+ }
53
+ else {
54
+ config.projectName = await steps_1.projectNameStep.prompt(config);
55
+ }
56
+ // Step 2: Organization domain
57
+ if (prefilledArgs.orgDomain) {
58
+ config.orgDomain = prefilledArgs.orgDomain;
59
+ console.log(chalk_1.default.gray(`✓ Organization domain: ${config.orgDomain} (from arguments)`));
60
+ }
61
+ else {
62
+ config.orgDomain = await steps_1.orgDomainStep.prompt(config);
63
+ }
64
+ // Step 3: App display name
65
+ if (prefilledArgs.appDisplayName) {
66
+ config.appDisplayName = prefilledArgs.appDisplayName;
67
+ console.log(chalk_1.default.gray(`✓ App display name: ${config.appDisplayName} (from arguments)`));
68
+ }
69
+ else {
70
+ config.appDisplayName = await steps_1.appDisplayNameStep.prompt(config);
71
+ }
72
+ // Step 4: API extension
73
+ if (prefilledArgs.withApi !== undefined) {
74
+ console.log(chalk_1.default.gray(`✓ API server: ${prefilledArgs.withApi ? 'enabled' : 'disabled'} (from arguments)`));
75
+ }
76
+ else {
77
+ config.extensions.api = await steps_1.apiExtensionStep.prompt(config);
78
+ }
79
+ // Step 5: tRPC extension (only if API enabled)
80
+ if (config.extensions.api) {
81
+ if (prefilledArgs.withTrpc !== undefined) {
82
+ console.log(chalk_1.default.gray(`✓ tRPC: ${prefilledArgs.withTrpc ? 'enabled' : 'disabled'} (from arguments)`));
83
+ }
84
+ else {
85
+ config.extensions.trpc = await steps_1.trpcExtensionStep.prompt(config);
86
+ }
87
+ // Step 6: GraphQL extension (only if API enabled)
88
+ if (prefilledArgs.withGraphql !== undefined) {
89
+ console.log(chalk_1.default.gray(`✓ GraphQL: ${prefilledArgs.withGraphql ? 'enabled' : 'disabled'} (from arguments)`));
90
+ }
91
+ else {
92
+ config.extensions.graphql = await steps_1.graphqlExtensionStep.prompt(config);
93
+ }
94
+ }
95
+ // Step 7: Prisma extension
96
+ if (prefilledArgs.withPrisma !== undefined) {
97
+ console.log(chalk_1.default.gray(`✓ Prisma database: ${prefilledArgs.withPrisma ? 'enabled' : 'disabled'} (from arguments)`));
98
+ }
99
+ else {
100
+ config.extensions.prisma = await steps_1.prismaExtensionStep.prompt(config);
101
+ }
102
+ // Step 8: Devcontainer extension
103
+ if (prefilledArgs.withDevcontainer !== undefined) {
104
+ console.log(chalk_1.default.gray(`✓ Devcontainer: ${prefilledArgs.withDevcontainer ? 'enabled' : 'disabled'} (from arguments)`));
105
+ }
106
+ else {
107
+ config.extensions.devcontainer = await steps_1.devcontainerExtensionStep.prompt(config);
108
+ }
109
+ // Summary and confirmation
110
+ const confirmed = await steps_1.summaryStep.prompt(config);
111
+ if (!confirmed) {
112
+ console.log(chalk_1.default.yellow('\nProject creation cancelled.'));
113
+ return null;
114
+ }
115
+ // Generate mobile identifiers
116
+ const identifiers = (0, identifiers_1.generateIdentifiers)(config.orgDomain, config.projectName);
117
+ return {
118
+ projectName: config.projectName,
119
+ orgDomain: config.orgDomain,
120
+ appDisplayName: config.appDisplayName,
121
+ iosBundleId: identifiers.iosBundleId,
122
+ androidPackageName: identifiers.androidPackageName,
123
+ extensions: config.extensions,
124
+ directory: prefilledArgs.directory ?? '.',
125
+ skipInstall: prefilledArgs.skipInstall ?? false,
126
+ isInteractive: true,
127
+ };
128
+ }
129
+ /**
130
+ * Validate CLI args for non-interactive mode
131
+ */
132
+ function validateNonInteractiveArgs(args) {
133
+ const required = [
134
+ { field: 'projectName', flag: 'project-name', description: 'Project name (positional argument)' },
135
+ { field: 'orgDomain', flag: '--org-domain', description: 'Organization domain (e.g., com.company)' },
136
+ { field: 'appDisplayName', flag: '--app-name', description: 'Mobile app display name' },
137
+ ];
138
+ const missing = [];
139
+ for (const { field, flag, description } of required) {
140
+ if (!args[field]) {
141
+ missing.push(`${flag}: ${description}`);
142
+ }
143
+ }
144
+ // Validate extension dependencies
145
+ if (args.withTrpc && !args.withApi) {
146
+ missing.push('--with-api: Required when using --with-trpc');
147
+ }
148
+ if (args.withGraphql && !args.withApi) {
149
+ missing.push('--with-api: Required when using --with-graphql');
150
+ }
151
+ return { valid: missing.length === 0, missing };
152
+ }
153
+ /**
154
+ * Build a ProjectConfig from CLI arguments (for non-interactive mode)
155
+ */
156
+ function buildConfigFromArgs(args) {
157
+ const identifiers = (0, identifiers_1.generateIdentifiers)(args.orgDomain, args.projectName);
158
+ return {
159
+ projectName: args.projectName,
160
+ orgDomain: args.orgDomain,
161
+ appDisplayName: args.appDisplayName,
162
+ iosBundleId: identifiers.iosBundleId,
163
+ androidPackageName: identifiers.androidPackageName,
164
+ extensions: {
165
+ api: args.withApi ?? false,
166
+ prisma: args.withPrisma ?? false,
167
+ trpc: args.withTrpc ?? false,
168
+ graphql: args.withGraphql ?? false,
169
+ devcontainer: args.withDevcontainer ?? false,
170
+ },
171
+ directory: args.directory ?? '.',
172
+ skipInstall: args.skipInstall ?? false,
173
+ isInteractive: false,
174
+ };
175
+ }
176
+ __exportStar(require("./validators"), exports);
177
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * API extension wizard step
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.apiExtensionStep = void 0;
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const validators_1 = require("../validators");
13
+ exports.apiExtensionStep = {
14
+ id: 'extensions.api',
15
+ async prompt(currentConfig) {
16
+ console.log(chalk_1.default.bold('\nStep 4: API Server'));
17
+ console.log(chalk_1.default.dim('An Express-based API server for your backend.'));
18
+ console.log(chalk_1.default.dim('Required if you want to use tRPC or GraphQL.\n'));
19
+ const { enableApi } = await inquirer_1.default.prompt([
20
+ {
21
+ type: 'confirm',
22
+ name: 'enableApi',
23
+ message: 'Enable API server?',
24
+ default: false,
25
+ },
26
+ ]);
27
+ return enableApi;
28
+ },
29
+ validate(value) {
30
+ return (0, validators_1.validateBoolean)(value);
31
+ },
32
+ };
33
+ //# sourceMappingURL=apiExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiExtension.js","sourceRoot":"","sources":["../../../src/wizard/steps/apiExtension.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,wDAAgC;AAChC,kDAA0B;AAE1B,8CAAgD;AAEnC,QAAA,gBAAgB,GAAwB;IACnD,EAAE,EAAE,gBAAgB;IAEpB,KAAK,CAAC,MAAM,CAAC,aAAqC;QAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAEzE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YAC1C;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,oBAAoB;gBAC7B,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,KAAc;QACrB,OAAO,IAAA,4BAAe,EAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * App display name wizard step
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.appDisplayNameStep = void 0;
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const validators_1 = require("../validators");
13
+ exports.appDisplayNameStep = {
14
+ id: 'appDisplayName',
15
+ async prompt(currentConfig) {
16
+ // Suggest a display name based on project name
17
+ const suggestedName = currentConfig.projectName
18
+ ? toTitleCase(currentConfig.projectName.replace(/-/g, ' '))
19
+ : 'My App';
20
+ console.log(chalk_1.default.bold('\nStep 3: App Display Name'));
21
+ console.log(chalk_1.default.dim('This is the human-readable name shown to users.'));
22
+ console.log(chalk_1.default.dim('It will appear on the device home screen and in app stores.\n'));
23
+ const { appDisplayName } = await inquirer_1.default.prompt([
24
+ {
25
+ type: 'input',
26
+ name: 'appDisplayName',
27
+ message: 'App display name:',
28
+ default: suggestedName,
29
+ validate: (input) => {
30
+ const result = (0, validators_1.validateAppDisplayName)(input);
31
+ if (!result.valid) {
32
+ return (0, validators_1.formatValidationError)(result);
33
+ }
34
+ return true;
35
+ },
36
+ },
37
+ ]);
38
+ return appDisplayName;
39
+ },
40
+ validate(value) {
41
+ return (0, validators_1.validateAppDisplayName)(value);
42
+ },
43
+ };
44
+ /**
45
+ * Convert string to title case
46
+ */
47
+ function toTitleCase(str) {
48
+ return str
49
+ .split(' ')
50
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
51
+ .join(' ');
52
+ }
53
+ //# sourceMappingURL=appDisplayName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appDisplayName.js","sourceRoot":"","sources":["../../../src/wizard/steps/appDisplayName.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,wDAAgC;AAChC,kDAA0B;AAE1B,8CAA8E;AAEjE,QAAA,kBAAkB,GAAuB;IACpD,EAAE,EAAE,gBAAgB;IAEpB,KAAK,CAAC,MAAM,CAAC,aAAqC;QAChD,+CAA+C;QAC/C,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW;YAC7C,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC3D,CAAC,CAAC,QAAQ,CAAC;QAEb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;QAExF,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YAC/C;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,mBAAmB;gBAC5B,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC1B,MAAM,MAAM,GAAG,IAAA,mCAAsB,EAAC,KAAK,CAAC,CAAC;oBAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;wBAClB,OAAO,IAAA,kCAAqB,EAAC,MAAM,CAAC,CAAC;oBACvC,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;SACF,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,OAAO,IAAA,mCAAsB,EAAC,KAAK,CAAC,CAAC;IACvC,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG;SACP,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACvE,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * Wizard step for devcontainer extension
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.devcontainerExtensionStep = void 0;
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const types_1 = require("../../types");
13
+ exports.devcontainerExtensionStep = {
14
+ id: 'devcontainer',
15
+ async prompt(_currentConfig) {
16
+ console.log('');
17
+ console.log(chalk_1.default.blue('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
18
+ console.log(chalk_1.default.blue.bold(' Development Container Setup'));
19
+ console.log(chalk_1.default.blue('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
20
+ console.log('');
21
+ console.log(chalk_1.default.gray('A devcontainer provides a consistent development environment'));
22
+ console.log(chalk_1.default.gray('using Docker with VS Code integration.'));
23
+ console.log('');
24
+ const { enableDevcontainer } = await inquirer_1.default.prompt([
25
+ {
26
+ type: 'confirm',
27
+ name: 'enableDevcontainer',
28
+ message: 'Enable devcontainer setup?',
29
+ default: false,
30
+ },
31
+ ]);
32
+ if (!enableDevcontainer) {
33
+ return false;
34
+ }
35
+ console.log('');
36
+ console.log(chalk_1.default.gray('Select which optional services to include:'));
37
+ console.log('');
38
+ const { services } = await inquirer_1.default.prompt([
39
+ {
40
+ type: 'checkbox',
41
+ name: 'services',
42
+ message: 'Optional services:',
43
+ choices: [
44
+ {
45
+ name: 'PostgreSQL - Database server',
46
+ value: 'postgres',
47
+ checked: false,
48
+ },
49
+ {
50
+ name: 'Redis - Cache and session store',
51
+ value: 'redis',
52
+ checked: false,
53
+ },
54
+ {
55
+ name: 'Claude Code - AI assistant with MCP servers',
56
+ value: 'claudeCode',
57
+ checked: false,
58
+ },
59
+ ],
60
+ },
61
+ ]);
62
+ const hasPostgres = services.includes('postgres');
63
+ const hasClaudeCode = services.includes('claudeCode');
64
+ let mcpServers = [];
65
+ let needsChrome = false;
66
+ // If Claude Code is selected, prompt for MCP server selection
67
+ if (hasClaudeCode) {
68
+ console.log('');
69
+ console.log(chalk_1.default.gray('Select which MCP servers to configure for Claude Code:'));
70
+ console.log('');
71
+ // Build choices - Idealyst auto-selected, Playwright shows Chrome will be added, Postgres MCP disabled without Postgres
72
+ const mcpChoices = types_1.AVAILABLE_MCP_SERVERS.map((server) => {
73
+ // Postgres MCP requires PostgreSQL service
74
+ if (server.requiresPostgres && !hasPostgres) {
75
+ return {
76
+ name: `${server.name} - ${server.description} ${chalk_1.default.yellow('(requires PostgreSQL)')}`,
77
+ value: server.id,
78
+ checked: false,
79
+ disabled: 'Requires PostgreSQL service',
80
+ };
81
+ }
82
+ // Playwright will auto-add Chrome
83
+ if (server.requiresChrome) {
84
+ return {
85
+ name: `${server.name} - ${server.description} ${chalk_1.default.cyan('(will add Chrome service)')}`,
86
+ value: server.id,
87
+ checked: false,
88
+ disabled: false,
89
+ };
90
+ }
91
+ // Idealyst is auto-selected by default
92
+ const isAutoSelected = server.id === 'idealyst';
93
+ return {
94
+ name: `${server.name} - ${server.description}`,
95
+ value: server.id,
96
+ checked: isAutoSelected,
97
+ disabled: false,
98
+ };
99
+ });
100
+ const { selectedMcpServers } = await inquirer_1.default.prompt([
101
+ {
102
+ type: 'checkbox',
103
+ name: 'selectedMcpServers',
104
+ message: 'MCP servers:',
105
+ choices: mcpChoices,
106
+ },
107
+ ]);
108
+ mcpServers = selectedMcpServers;
109
+ // Check if any selected MCP server requires Chrome
110
+ needsChrome = mcpServers.some((serverId) => {
111
+ const server = types_1.AVAILABLE_MCP_SERVERS.find((s) => s.id === serverId);
112
+ return server?.requiresChrome ?? false;
113
+ });
114
+ if (needsChrome) {
115
+ console.log(chalk_1.default.cyan(' ℹ Chrome service will be added for Playwright MCP'));
116
+ }
117
+ }
118
+ return {
119
+ enabled: true,
120
+ postgres: hasPostgres,
121
+ redis: services.includes('redis'),
122
+ chrome: needsChrome,
123
+ claudeCode: hasClaudeCode,
124
+ mcpServers,
125
+ };
126
+ },
127
+ validate(value) {
128
+ return { valid: true };
129
+ },
130
+ };
131
+ //# sourceMappingURL=devcontainerExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devcontainerExtension.js","sourceRoot":"","sources":["../../../src/wizard/steps/devcontainerExtension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * GraphQL extension wizard step
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.graphqlExtensionStep = void 0;
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const validators_1 = require("../validators");
13
+ exports.graphqlExtensionStep = {
14
+ id: 'extensions.graphql',
15
+ async prompt(currentConfig) {
16
+ console.log(chalk_1.default.bold('\nStep 6: GraphQL'));
17
+ console.log(chalk_1.default.dim('GraphQL API with Pothos for type-safe schema building.'));
18
+ console.log(chalk_1.default.dim('Can be used alongside or instead of tRPC.\n'));
19
+ const { enableGraphql } = await inquirer_1.default.prompt([
20
+ {
21
+ type: 'confirm',
22
+ name: 'enableGraphql',
23
+ message: 'Enable GraphQL?',
24
+ default: false,
25
+ },
26
+ ]);
27
+ return enableGraphql;
28
+ },
29
+ validate(value) {
30
+ return (0, validators_1.validateBoolean)(value);
31
+ },
32
+ // Only show if API is enabled
33
+ shouldShow(config) {
34
+ return config.extensions?.api === true;
35
+ },
36
+ };
37
+ //# sourceMappingURL=graphqlExtension.js.map