zudojs-cli 0.1.1 → 1.0.0

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 (431) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -1
  3. package/dist/src/adapters/databases/postgres.adapter.d.ts +0 -14
  4. package/dist/src/adapters/databases/postgres.adapter.js +0 -30
  5. package/dist/src/adapters/frontend/angular.adapter.js +6 -0
  6. package/dist/src/adapters/frontend/astro.adapter.js +2 -2
  7. package/dist/src/adapters/frontend/react.adapter.js +26 -17
  8. package/dist/src/adapters/frontend/svelte.adapter.js +1 -0
  9. package/dist/src/adapters/frontend/sveltekit.adapter.js +7 -8
  10. package/dist/src/adapters/frontend/vanilla.adapter.js +1 -1
  11. package/dist/src/adapters/frontend/vue.adapter.js +1 -0
  12. package/dist/src/adapters/package-managers/bun.adapter.js +5 -5
  13. package/dist/src/adapters/package-managers/npm.adapter.js +5 -5
  14. package/dist/src/adapters/package-managers/pnpm.adapter.js +5 -5
  15. package/dist/src/adapters/package-managers/yarn.adapter.js +5 -5
  16. package/dist/src/bin/zudojs.js +42 -6
  17. package/dist/src/cliApplication/cliApplication.builtins.d.ts +11 -2
  18. package/dist/src/cliApplication/cliApplication.builtins.js +15 -4
  19. package/dist/src/cliApplication/cliApplication.core.js +20 -5
  20. package/dist/src/cliConstant/cliConstant.value.d.ts +1 -1
  21. package/dist/src/cliConstant/cliConstant.value.js +2 -1
  22. package/dist/src/cliConstant/cliVersion.d.ts +16 -0
  23. package/dist/src/cliConstant/cliVersion.js +57 -0
  24. package/dist/src/cliParser/cliParser.core.js +7 -0
  25. package/dist/src/cliParser/cliParser.shortOption.js +1 -1
  26. package/dist/src/commands/add.command.js +27 -24
  27. package/dist/src/commands/build.command.js +13 -7
  28. package/dist/src/commands/create.command.js +177 -84
  29. package/dist/src/commands/dev.command.js +62 -27
  30. package/dist/src/commands/doctor.command.js +45 -23
  31. package/dist/src/commands/generate.command.js +103 -34
  32. package/dist/src/constants/index.d.ts +3 -1
  33. package/dist/src/constants/index.js +3 -1
  34. package/dist/src/generators/command/command.generator.d.ts +1 -0
  35. package/dist/src/generators/command/command.generator.js +10 -4
  36. package/dist/src/generators/controller/controller.generator.d.ts +1 -0
  37. package/dist/src/generators/controller/controller.generator.js +12 -9
  38. package/dist/src/generators/dto/dto.generator.d.ts +1 -0
  39. package/dist/src/generators/dto/dto.generator.js +9 -3
  40. package/dist/src/generators/event/event.generator.d.ts +1 -0
  41. package/dist/src/generators/event/event.generator.js +10 -4
  42. package/dist/src/generators/frontend/frontendGenerator.core.js +4 -28
  43. package/dist/src/generators/frontend/frontendPipeline.d.ts +26 -0
  44. package/dist/src/generators/frontend/frontendPipeline.js +93 -0
  45. package/dist/src/generators/fullstack/fullstackComposer.core.d.ts +1 -2
  46. package/dist/src/generators/fullstack/fullstackComposer.core.js +68 -62
  47. package/dist/src/generators/infrastructure/infrastructure.generator.d.ts +11 -0
  48. package/dist/src/generators/infrastructure/infrastructure.generator.js +101 -61
  49. package/dist/src/generators/integration/integrationGenerator.core.d.ts +6 -0
  50. package/dist/src/generators/integration/integrationGenerator.core.js +35 -6
  51. package/dist/src/generators/job/job.generator.d.ts +1 -0
  52. package/dist/src/generators/job/job.generator.js +9 -3
  53. package/dist/src/generators/middleware/middleware.generator.d.ts +1 -0
  54. package/dist/src/generators/middleware/middleware.generator.js +10 -4
  55. package/dist/src/generators/model/model.generator.d.ts +1 -0
  56. package/dist/src/generators/model/model.generator.js +9 -3
  57. package/dist/src/generators/module/module.generator.d.ts +1 -0
  58. package/dist/src/generators/module/module.generator.js +11 -24
  59. package/dist/src/generators/project/project.generator.js +2 -23
  60. package/dist/src/generators/query/query.generator.d.ts +1 -0
  61. package/dist/src/generators/query/query.generator.js +10 -4
  62. package/dist/src/generators/repository/repository.generator.d.ts +1 -0
  63. package/dist/src/generators/repository/repository.generator.js +12 -9
  64. package/dist/src/generators/route/route.generator.d.ts +1 -0
  65. package/dist/src/generators/route/route.generator.js +11 -5
  66. package/dist/src/generators/service/service.generator.d.ts +1 -0
  67. package/dist/src/generators/service/service.generator.js +12 -9
  68. package/dist/src/generators/validator/validator.generator.d.ts +1 -0
  69. package/dist/src/generators/validator/validator.generator.js +9 -3
  70. package/dist/src/installers/dependency.installer.js +6 -2
  71. package/dist/src/manifest/manifestManager.core.d.ts +3 -0
  72. package/dist/src/prompts/backend/index.d.ts +1 -0
  73. package/dist/src/prompts/backend/index.js +1 -0
  74. package/dist/src/prompts/backend/services.prompt.d.ts +7 -0
  75. package/dist/src/prompts/backend/services.prompt.js +39 -0
  76. package/dist/src/prompts/index.d.ts +0 -1
  77. package/dist/src/prompts/index.js +0 -1
  78. package/dist/src/rollback/rollbackManager.core.js +0 -1
  79. package/dist/src/runners/process/processRunner.core.d.ts +4 -0
  80. package/dist/src/runners/process/processRunner.core.js +17 -3
  81. package/dist/src/scaffolders/framework.scaffolder.js +9 -6
  82. package/dist/src/scaffolders/scaffolder.helper.js +7 -2
  83. package/dist/src/scripts/postinstall.cjs +24 -3
  84. package/dist/src/templates/microservice/index.d.ts +1 -1
  85. package/dist/src/templates/microservice/index.js +1 -1
  86. package/dist/src/templates/microservice/microservice.template.d.ts +15 -1
  87. package/dist/src/templates/microservice/microservice.template.js +165 -183
  88. package/dist/src/templates/modular-monolith/modularMonolith.template.js +54 -106
  89. package/dist/src/templates/monolith/monolith.template.d.ts +1 -0
  90. package/dist/src/templates/monolith/monolith.template.js +50 -94
  91. package/dist/src/templates/shared/appRuntime.template.d.ts +71 -0
  92. package/dist/src/templates/shared/appRuntime.template.js +209 -0
  93. package/dist/src/templates/shared/index.d.ts +5 -0
  94. package/dist/src/templates/shared/index.js +5 -0
  95. package/dist/src/utils/index.d.ts +3 -3
  96. package/dist/src/utils/index.js +3 -3
  97. package/dist/src/utils/utils.exec.d.ts +19 -1
  98. package/dist/src/utils/utils.exec.js +37 -3
  99. package/dist/src/utils/utils.fileSystem.d.ts +6 -0
  100. package/dist/src/utils/utils.fileSystem.js +19 -0
  101. package/dist/src/utils/utils.name.d.ts +26 -0
  102. package/dist/src/utils/utils.name.js +51 -1
  103. package/package.json +29 -22
  104. package/src/scripts/postinstall.cjs +24 -3
  105. package/dist/.tsbuildinfo +0 -1
  106. package/dist/src/adapters/databases/index.d.ts.map +0 -1
  107. package/dist/src/adapters/databases/index.js.map +0 -1
  108. package/dist/src/adapters/databases/mysql.adapter.d.ts.map +0 -1
  109. package/dist/src/adapters/databases/mysql.adapter.js.map +0 -1
  110. package/dist/src/adapters/databases/postgres.adapter.d.ts.map +0 -1
  111. package/dist/src/adapters/databases/postgres.adapter.js.map +0 -1
  112. package/dist/src/adapters/databases/sqlite.adapter.d.ts.map +0 -1
  113. package/dist/src/adapters/databases/sqlite.adapter.js.map +0 -1
  114. package/dist/src/adapters/frontend/angular.adapter.d.ts.map +0 -1
  115. package/dist/src/adapters/frontend/angular.adapter.js.map +0 -1
  116. package/dist/src/adapters/frontend/astro.adapter.d.ts.map +0 -1
  117. package/dist/src/adapters/frontend/astro.adapter.js.map +0 -1
  118. package/dist/src/adapters/frontend/flutter.adapter.d.ts.map +0 -1
  119. package/dist/src/adapters/frontend/flutter.adapter.js.map +0 -1
  120. package/dist/src/adapters/frontend/frontendAdapter.type.d.ts.map +0 -1
  121. package/dist/src/adapters/frontend/frontendAdapter.type.js.map +0 -1
  122. package/dist/src/adapters/frontend/index.d.ts.map +0 -1
  123. package/dist/src/adapters/frontend/index.js.map +0 -1
  124. package/dist/src/adapters/frontend/next.adapter.d.ts.map +0 -1
  125. package/dist/src/adapters/frontend/next.adapter.js.map +0 -1
  126. package/dist/src/adapters/frontend/nuxt.adapter.d.ts.map +0 -1
  127. package/dist/src/adapters/frontend/nuxt.adapter.js.map +0 -1
  128. package/dist/src/adapters/frontend/react-native.adapter.d.ts.map +0 -1
  129. package/dist/src/adapters/frontend/react-native.adapter.js.map +0 -1
  130. package/dist/src/adapters/frontend/react.adapter.d.ts.map +0 -1
  131. package/dist/src/adapters/frontend/react.adapter.js.map +0 -1
  132. package/dist/src/adapters/frontend/svelte.adapter.d.ts.map +0 -1
  133. package/dist/src/adapters/frontend/svelte.adapter.js.map +0 -1
  134. package/dist/src/adapters/frontend/sveltekit.adapter.d.ts.map +0 -1
  135. package/dist/src/adapters/frontend/sveltekit.adapter.js.map +0 -1
  136. package/dist/src/adapters/frontend/vanilla.adapter.d.ts.map +0 -1
  137. package/dist/src/adapters/frontend/vanilla.adapter.js.map +0 -1
  138. package/dist/src/adapters/frontend/vue.adapter.d.ts.map +0 -1
  139. package/dist/src/adapters/frontend/vue.adapter.js.map +0 -1
  140. package/dist/src/adapters/package-managers/bun.adapter.d.ts.map +0 -1
  141. package/dist/src/adapters/package-managers/bun.adapter.js.map +0 -1
  142. package/dist/src/adapters/package-managers/index.d.ts.map +0 -1
  143. package/dist/src/adapters/package-managers/index.js.map +0 -1
  144. package/dist/src/adapters/package-managers/npm.adapter.d.ts.map +0 -1
  145. package/dist/src/adapters/package-managers/npm.adapter.js.map +0 -1
  146. package/dist/src/adapters/package-managers/packageManager.type.d.ts.map +0 -1
  147. package/dist/src/adapters/package-managers/packageManager.type.js.map +0 -1
  148. package/dist/src/adapters/package-managers/pnpm.adapter.d.ts.map +0 -1
  149. package/dist/src/adapters/package-managers/pnpm.adapter.js.map +0 -1
  150. package/dist/src/adapters/package-managers/yarn.adapter.d.ts.map +0 -1
  151. package/dist/src/adapters/package-managers/yarn.adapter.js.map +0 -1
  152. package/dist/src/bin/zudojs.d.ts.map +0 -1
  153. package/dist/src/bin/zudojs.js.map +0 -1
  154. package/dist/src/cliApplication/cliApplication.builtins.d.ts.map +0 -1
  155. package/dist/src/cliApplication/cliApplication.builtins.js.map +0 -1
  156. package/dist/src/cliApplication/cliApplication.core.d.ts.map +0 -1
  157. package/dist/src/cliApplication/cliApplication.core.js.map +0 -1
  158. package/dist/src/cliApplication/cliApplication.writer.d.ts.map +0 -1
  159. package/dist/src/cliApplication/cliApplication.writer.js.map +0 -1
  160. package/dist/src/cliApplication/index.d.ts.map +0 -1
  161. package/dist/src/cliApplication/index.js.map +0 -1
  162. package/dist/src/cliCommand/cliCommand.builder.d.ts.map +0 -1
  163. package/dist/src/cliCommand/cliCommand.builder.js.map +0 -1
  164. package/dist/src/cliCommand/cliCommand.factory.d.ts.map +0 -1
  165. package/dist/src/cliCommand/cliCommand.factory.js.map +0 -1
  166. package/dist/src/cliCommand/cliCommand.registry.d.ts.map +0 -1
  167. package/dist/src/cliCommand/cliCommand.registry.js.map +0 -1
  168. package/dist/src/cliCommand/cliCommand.validator.d.ts.map +0 -1
  169. package/dist/src/cliCommand/cliCommand.validator.js.map +0 -1
  170. package/dist/src/cliCommand/index.d.ts.map +0 -1
  171. package/dist/src/cliCommand/index.js.map +0 -1
  172. package/dist/src/cliConstant/cliConstant.value.d.ts.map +0 -1
  173. package/dist/src/cliConstant/cliConstant.value.js.map +0 -1
  174. package/dist/src/cliConstant/index.d.ts.map +0 -1
  175. package/dist/src/cliConstant/index.js.map +0 -1
  176. package/dist/src/cliError/cliError.argument.d.ts.map +0 -1
  177. package/dist/src/cliError/cliError.argument.js.map +0 -1
  178. package/dist/src/cliError/cliError.base.d.ts.map +0 -1
  179. package/dist/src/cliError/cliError.base.js.map +0 -1
  180. package/dist/src/cliError/cliError.command.d.ts.map +0 -1
  181. package/dist/src/cliError/cliError.command.js.map +0 -1
  182. package/dist/src/cliError/cliError.execution.d.ts.map +0 -1
  183. package/dist/src/cliError/cliError.execution.js.map +0 -1
  184. package/dist/src/cliError/cliError.option.d.ts.map +0 -1
  185. package/dist/src/cliError/cliError.option.js.map +0 -1
  186. package/dist/src/cliError/index.d.ts.map +0 -1
  187. package/dist/src/cliError/index.js.map +0 -1
  188. package/dist/src/cliParser/cliParser.core.d.ts.map +0 -1
  189. package/dist/src/cliParser/cliParser.core.js.map +0 -1
  190. package/dist/src/cliParser/cliParser.helper.d.ts.map +0 -1
  191. package/dist/src/cliParser/cliParser.helper.js.map +0 -1
  192. package/dist/src/cliParser/cliParser.longOption.d.ts.map +0 -1
  193. package/dist/src/cliParser/cliParser.longOption.js.map +0 -1
  194. package/dist/src/cliParser/cliParser.shortOption.d.ts.map +0 -1
  195. package/dist/src/cliParser/cliParser.shortOption.js.map +0 -1
  196. package/dist/src/cliParser/index.d.ts.map +0 -1
  197. package/dist/src/cliParser/index.js.map +0 -1
  198. package/dist/src/cliType/cliType.type.d.ts.map +0 -1
  199. package/dist/src/cliType/cliType.type.js.map +0 -1
  200. package/dist/src/cliType/index.d.ts.map +0 -1
  201. package/dist/src/cliType/index.js.map +0 -1
  202. package/dist/src/cliVersion/cliVersion.core.d.ts.map +0 -1
  203. package/dist/src/cliVersion/cliVersion.core.js.map +0 -1
  204. package/dist/src/cliVersion/index.d.ts.map +0 -1
  205. package/dist/src/cliVersion/index.js.map +0 -1
  206. package/dist/src/commands/add.command.d.ts.map +0 -1
  207. package/dist/src/commands/add.command.js.map +0 -1
  208. package/dist/src/commands/build.command.d.ts.map +0 -1
  209. package/dist/src/commands/build.command.js.map +0 -1
  210. package/dist/src/commands/create.command.d.ts.map +0 -1
  211. package/dist/src/commands/create.command.js.map +0 -1
  212. package/dist/src/commands/dev.command.d.ts.map +0 -1
  213. package/dist/src/commands/dev.command.js.map +0 -1
  214. package/dist/src/commands/doctor.command.d.ts.map +0 -1
  215. package/dist/src/commands/doctor.command.js.map +0 -1
  216. package/dist/src/commands/generate.command.d.ts.map +0 -1
  217. package/dist/src/commands/generate.command.js.map +0 -1
  218. package/dist/src/commands/index.d.ts.map +0 -1
  219. package/dist/src/commands/index.js.map +0 -1
  220. package/dist/src/commands/info.command.d.ts.map +0 -1
  221. package/dist/src/commands/info.command.js.map +0 -1
  222. package/dist/src/constants/index.d.ts.map +0 -1
  223. package/dist/src/constants/index.js.map +0 -1
  224. package/dist/src/errors/index.d.ts.map +0 -1
  225. package/dist/src/errors/index.js.map +0 -1
  226. package/dist/src/generators/backend/backend.generator.d.ts.map +0 -1
  227. package/dist/src/generators/backend/backend.generator.js.map +0 -1
  228. package/dist/src/generators/backend/index.d.ts.map +0 -1
  229. package/dist/src/generators/backend/index.js.map +0 -1
  230. package/dist/src/generators/command/command.generator.d.ts.map +0 -1
  231. package/dist/src/generators/command/command.generator.js.map +0 -1
  232. package/dist/src/generators/controller/controller.generator.d.ts.map +0 -1
  233. package/dist/src/generators/controller/controller.generator.js.map +0 -1
  234. package/dist/src/generators/dto/dto.generator.d.ts.map +0 -1
  235. package/dist/src/generators/dto/dto.generator.js.map +0 -1
  236. package/dist/src/generators/dto/index.d.ts.map +0 -1
  237. package/dist/src/generators/dto/index.js.map +0 -1
  238. package/dist/src/generators/event/event.generator.d.ts.map +0 -1
  239. package/dist/src/generators/event/event.generator.js.map +0 -1
  240. package/dist/src/generators/event/index.d.ts.map +0 -1
  241. package/dist/src/generators/event/index.js.map +0 -1
  242. package/dist/src/generators/frontend/frontendGenerator.core.d.ts.map +0 -1
  243. package/dist/src/generators/frontend/frontendGenerator.core.js.map +0 -1
  244. package/dist/src/generators/frontend/index.d.ts.map +0 -1
  245. package/dist/src/generators/frontend/index.js.map +0 -1
  246. package/dist/src/generators/fullstack/fullstackComposer.core.d.ts.map +0 -1
  247. package/dist/src/generators/fullstack/fullstackComposer.core.js.map +0 -1
  248. package/dist/src/generators/fullstack/index.d.ts.map +0 -1
  249. package/dist/src/generators/fullstack/index.js.map +0 -1
  250. package/dist/src/generators/index.d.ts.map +0 -1
  251. package/dist/src/generators/index.js.map +0 -1
  252. package/dist/src/generators/infrastructure/index.d.ts.map +0 -1
  253. package/dist/src/generators/infrastructure/index.js.map +0 -1
  254. package/dist/src/generators/infrastructure/infrastructure.generator.d.ts.map +0 -1
  255. package/dist/src/generators/infrastructure/infrastructure.generator.js.map +0 -1
  256. package/dist/src/generators/integration/index.d.ts.map +0 -1
  257. package/dist/src/generators/integration/index.js.map +0 -1
  258. package/dist/src/generators/integration/integrationGenerator.core.d.ts.map +0 -1
  259. package/dist/src/generators/integration/integrationGenerator.core.js.map +0 -1
  260. package/dist/src/generators/job/index.d.ts.map +0 -1
  261. package/dist/src/generators/job/index.js.map +0 -1
  262. package/dist/src/generators/job/job.generator.d.ts.map +0 -1
  263. package/dist/src/generators/job/job.generator.js.map +0 -1
  264. package/dist/src/generators/middleware/index.d.ts.map +0 -1
  265. package/dist/src/generators/middleware/index.js.map +0 -1
  266. package/dist/src/generators/middleware/middleware.generator.d.ts.map +0 -1
  267. package/dist/src/generators/middleware/middleware.generator.js.map +0 -1
  268. package/dist/src/generators/model/index.d.ts.map +0 -1
  269. package/dist/src/generators/model/index.js.map +0 -1
  270. package/dist/src/generators/model/model.generator.d.ts.map +0 -1
  271. package/dist/src/generators/model/model.generator.js.map +0 -1
  272. package/dist/src/generators/module/module.generator.d.ts.map +0 -1
  273. package/dist/src/generators/module/module.generator.js.map +0 -1
  274. package/dist/src/generators/project/project.generator.d.ts.map +0 -1
  275. package/dist/src/generators/project/project.generator.js.map +0 -1
  276. package/dist/src/generators/query/query.generator.d.ts.map +0 -1
  277. package/dist/src/generators/query/query.generator.js.map +0 -1
  278. package/dist/src/generators/repository/repository.generator.d.ts.map +0 -1
  279. package/dist/src/generators/repository/repository.generator.js.map +0 -1
  280. package/dist/src/generators/route/index.d.ts.map +0 -1
  281. package/dist/src/generators/route/index.js.map +0 -1
  282. package/dist/src/generators/route/route.generator.d.ts.map +0 -1
  283. package/dist/src/generators/route/route.generator.js.map +0 -1
  284. package/dist/src/generators/service/service.generator.d.ts.map +0 -1
  285. package/dist/src/generators/service/service.generator.js.map +0 -1
  286. package/dist/src/generators/validator/index.d.ts.map +0 -1
  287. package/dist/src/generators/validator/index.js.map +0 -1
  288. package/dist/src/generators/validator/validator.generator.d.ts.map +0 -1
  289. package/dist/src/generators/validator/validator.generator.js.map +0 -1
  290. package/dist/src/index.d.ts.map +0 -1
  291. package/dist/src/index.js.map +0 -1
  292. package/dist/src/installers/dependency.installer.d.ts.map +0 -1
  293. package/dist/src/installers/dependency.installer.js.map +0 -1
  294. package/dist/src/installers/index.d.ts.map +0 -1
  295. package/dist/src/installers/index.js.map +0 -1
  296. package/dist/src/manifest/index.d.ts.map +0 -1
  297. package/dist/src/manifest/index.js.map +0 -1
  298. package/dist/src/manifest/manifestManager.core.d.ts.map +0 -1
  299. package/dist/src/manifest/manifestManager.core.js.map +0 -1
  300. package/dist/src/prompts/backend/api-style.prompt.d.ts.map +0 -1
  301. package/dist/src/prompts/backend/api-style.prompt.js.map +0 -1
  302. package/dist/src/prompts/backend/backend-architecture.prompt.d.ts.map +0 -1
  303. package/dist/src/prompts/backend/backend-architecture.prompt.js.map +0 -1
  304. package/dist/src/prompts/backend/database.prompt.d.ts.map +0 -1
  305. package/dist/src/prompts/backend/database.prompt.js.map +0 -1
  306. package/dist/src/prompts/backend/index.d.ts.map +0 -1
  307. package/dist/src/prompts/backend/index.js.map +0 -1
  308. package/dist/src/prompts/capabilities/capabilities.prompt.d.ts.map +0 -1
  309. package/dist/src/prompts/capabilities/capabilities.prompt.js.map +0 -1
  310. package/dist/src/prompts/capabilities/index.d.ts.map +0 -1
  311. package/dist/src/prompts/capabilities/index.js.map +0 -1
  312. package/dist/src/prompts/frontend/framework.prompt.d.ts.map +0 -1
  313. package/dist/src/prompts/frontend/framework.prompt.js.map +0 -1
  314. package/dist/src/prompts/frontend/frontend-architecture.prompt.d.ts.map +0 -1
  315. package/dist/src/prompts/frontend/frontend-architecture.prompt.js.map +0 -1
  316. package/dist/src/prompts/frontend/index.d.ts.map +0 -1
  317. package/dist/src/prompts/frontend/index.js.map +0 -1
  318. package/dist/src/prompts/index.d.ts.map +0 -1
  319. package/dist/src/prompts/index.js.map +0 -1
  320. package/dist/src/prompts/project/confirmation.prompt.d.ts.map +0 -1
  321. package/dist/src/prompts/project/confirmation.prompt.js.map +0 -1
  322. package/dist/src/prompts/project/index.d.ts.map +0 -1
  323. package/dist/src/prompts/project/index.js.map +0 -1
  324. package/dist/src/prompts/project/project-name.prompt.d.ts.map +0 -1
  325. package/dist/src/prompts/project/project-name.prompt.js.map +0 -1
  326. package/dist/src/prompts/project/project-type.prompt.d.ts.map +0 -1
  327. package/dist/src/prompts/project/project-type.prompt.js.map +0 -1
  328. package/dist/src/prompts/prompts.createProject.d.ts +0 -33
  329. package/dist/src/prompts/prompts.createProject.d.ts.map +0 -1
  330. package/dist/src/prompts/prompts.createProject.js +0 -143
  331. package/dist/src/prompts/prompts.createProject.js.map +0 -1
  332. package/dist/src/prompts/workspace/index.d.ts.map +0 -1
  333. package/dist/src/prompts/workspace/index.js.map +0 -1
  334. package/dist/src/prompts/workspace/package-manager.prompt.d.ts.map +0 -1
  335. package/dist/src/prompts/workspace/package-manager.prompt.js.map +0 -1
  336. package/dist/src/registries/adapter/frontendAdapterRegistry.core.d.ts.map +0 -1
  337. package/dist/src/registries/adapter/frontendAdapterRegistry.core.js.map +0 -1
  338. package/dist/src/registries/adapter/packageManagerRegistry.core.d.ts.map +0 -1
  339. package/dist/src/registries/adapter/packageManagerRegistry.core.js.map +0 -1
  340. package/dist/src/registries/dependency/dependencyRegistry.core.d.ts.map +0 -1
  341. package/dist/src/registries/dependency/dependencyRegistry.core.js.map +0 -1
  342. package/dist/src/registries/dependency/index.d.ts.map +0 -1
  343. package/dist/src/registries/dependency/index.js.map +0 -1
  344. package/dist/src/registries/generator/generatorRegistry.core.d.ts.map +0 -1
  345. package/dist/src/registries/generator/generatorRegistry.core.js.map +0 -1
  346. package/dist/src/registries/generator/index.d.ts.map +0 -1
  347. package/dist/src/registries/generator/index.js.map +0 -1
  348. package/dist/src/registries/index.d.ts.map +0 -1
  349. package/dist/src/registries/index.js.map +0 -1
  350. package/dist/src/resolvers/architecture.resolver.d.ts.map +0 -1
  351. package/dist/src/resolvers/architecture.resolver.js.map +0 -1
  352. package/dist/src/resolvers/capability/capabilityResolver.core.d.ts.map +0 -1
  353. package/dist/src/resolvers/capability/capabilityResolver.core.js.map +0 -1
  354. package/dist/src/resolvers/capability/index.d.ts.map +0 -1
  355. package/dist/src/resolvers/capability/index.js.map +0 -1
  356. package/dist/src/resolvers/configuration/configurationResolver.core.d.ts.map +0 -1
  357. package/dist/src/resolvers/configuration/configurationResolver.core.js.map +0 -1
  358. package/dist/src/resolvers/configuration/index.d.ts.map +0 -1
  359. package/dist/src/resolvers/configuration/index.js.map +0 -1
  360. package/dist/src/resolvers/dependency/dependencyResolver.core.d.ts.map +0 -1
  361. package/dist/src/resolvers/dependency/dependencyResolver.core.js.map +0 -1
  362. package/dist/src/resolvers/dependency/index.d.ts.map +0 -1
  363. package/dist/src/resolvers/dependency/index.js.map +0 -1
  364. package/dist/src/resolvers/index.d.ts.map +0 -1
  365. package/dist/src/resolvers/index.js.map +0 -1
  366. package/dist/src/resolvers/project.resolver.d.ts.map +0 -1
  367. package/dist/src/resolvers/project.resolver.js.map +0 -1
  368. package/dist/src/rollback/index.d.ts.map +0 -1
  369. package/dist/src/rollback/index.js.map +0 -1
  370. package/dist/src/rollback/rollbackManager.core.d.ts.map +0 -1
  371. package/dist/src/rollback/rollbackManager.core.js.map +0 -1
  372. package/dist/src/runners/package-manager/index.d.ts.map +0 -1
  373. package/dist/src/runners/package-manager/index.js.map +0 -1
  374. package/dist/src/runners/package-manager/packageManagerRunner.core.d.ts.map +0 -1
  375. package/dist/src/runners/package-manager/packageManagerRunner.core.js.map +0 -1
  376. package/dist/src/runners/process/index.d.ts.map +0 -1
  377. package/dist/src/runners/process/index.js.map +0 -1
  378. package/dist/src/runners/process/processRunner.core.d.ts.map +0 -1
  379. package/dist/src/runners/process/processRunner.core.js.map +0 -1
  380. package/dist/src/runners/task/index.d.ts.map +0 -1
  381. package/dist/src/runners/task/index.js.map +0 -1
  382. package/dist/src/runners/task/taskRunner.core.d.ts.map +0 -1
  383. package/dist/src/runners/task/taskRunner.core.js.map +0 -1
  384. package/dist/src/scaffolders/framework.scaffolder.d.ts.map +0 -1
  385. package/dist/src/scaffolders/framework.scaffolder.js.map +0 -1
  386. package/dist/src/scaffolders/index.d.ts.map +0 -1
  387. package/dist/src/scaffolders/index.js.map +0 -1
  388. package/dist/src/scaffolders/scaffolder.helper.d.ts.map +0 -1
  389. package/dist/src/scaffolders/scaffolder.helper.js.map +0 -1
  390. package/dist/src/templates/microservice/index.d.ts.map +0 -1
  391. package/dist/src/templates/microservice/index.js.map +0 -1
  392. package/dist/src/templates/microservice/microservice.template.d.ts.map +0 -1
  393. package/dist/src/templates/microservice/microservice.template.js.map +0 -1
  394. package/dist/src/templates/modular-monolith/index.d.ts.map +0 -1
  395. package/dist/src/templates/modular-monolith/index.js.map +0 -1
  396. package/dist/src/templates/modular-monolith/modularMonolith.template.d.ts.map +0 -1
  397. package/dist/src/templates/modular-monolith/modularMonolith.template.js.map +0 -1
  398. package/dist/src/templates/monolith/index.d.ts.map +0 -1
  399. package/dist/src/templates/monolith/index.js.map +0 -1
  400. package/dist/src/templates/monolith/monolith.template.d.ts.map +0 -1
  401. package/dist/src/templates/monolith/monolith.template.js.map +0 -1
  402. package/dist/src/types/index.d.ts.map +0 -1
  403. package/dist/src/types/index.js.map +0 -1
  404. package/dist/src/types/projectConfiguration.type.d.ts.map +0 -1
  405. package/dist/src/types/projectConfiguration.type.js.map +0 -1
  406. package/dist/src/types/scaffold.type.d.ts.map +0 -1
  407. package/dist/src/types/scaffold.type.js.map +0 -1
  408. package/dist/src/utils/index.d.ts.map +0 -1
  409. package/dist/src/utils/index.js.map +0 -1
  410. package/dist/src/utils/utils.detect.d.ts.map +0 -1
  411. package/dist/src/utils/utils.detect.js.map +0 -1
  412. package/dist/src/utils/utils.exec.d.ts.map +0 -1
  413. package/dist/src/utils/utils.exec.js.map +0 -1
  414. package/dist/src/utils/utils.fileSystem.d.ts.map +0 -1
  415. package/dist/src/utils/utils.fileSystem.js.map +0 -1
  416. package/dist/src/utils/utils.name.d.ts.map +0 -1
  417. package/dist/src/utils/utils.name.js.map +0 -1
  418. package/dist/src/validators/compatibility/compatibilityValidator.core.d.ts.map +0 -1
  419. package/dist/src/validators/compatibility/compatibilityValidator.core.js.map +0 -1
  420. package/dist/src/validators/compatibility/index.d.ts.map +0 -1
  421. package/dist/src/validators/compatibility/index.js.map +0 -1
  422. package/dist/src/validators/environment/environmentValidator.core.d.ts.map +0 -1
  423. package/dist/src/validators/environment/environmentValidator.core.js.map +0 -1
  424. package/dist/src/validators/environment/index.d.ts.map +0 -1
  425. package/dist/src/validators/environment/index.js.map +0 -1
  426. package/dist/src/validators/index.d.ts.map +0 -1
  427. package/dist/src/validators/index.js.map +0 -1
  428. package/dist/src/validators/project/index.d.ts.map +0 -1
  429. package/dist/src/validators/project/index.js.map +0 -1
  430. package/dist/src/validators/project/projectValidator.core.d.ts.map +0 -1
  431. package/dist/src/validators/project/projectValidator.core.js.map +0 -1
@@ -6,9 +6,10 @@
6
6
  */
7
7
  import { existsSync, readFileSync } from "node:fs";
8
8
  import { join } from "node:path";
9
- import { execCommand } from "../utils/utils.exec.js";
9
+ import { runStreaming } from "../utils/utils.exec.js";
10
10
  import { CLIValidationError, CLIGenerationError } from "../errors/index.js";
11
11
  import { ManifestManager } from "../manifest/manifestManager.core.js";
12
+ import { SAFE_PATH_SEGMENT } from "../utils/utils.name.js";
12
13
  export async function runDevCommand(context) {
13
14
  const frontendOnly = context.values["frontend-only"] === true;
14
15
  const backendOnly = context.values["backend-only"] === true;
@@ -16,7 +17,8 @@ export async function runDevCommand(context) {
16
17
  if (frontendOnly && backendOnly) {
17
18
  throw new CLIValidationError("Cannot use --frontend-only and --backend-only together.");
18
19
  }
19
- const config = readProjectConfig(context.cwd);
20
+ const manifest = await new ManifestManager(context.cwd).read();
21
+ const config = readProjectConfig(context.cwd) ?? configFromManifest(manifest);
20
22
  if (!config) {
21
23
  throw new CLIValidationError("No Zudojs project found. Run `zudojs create` first.");
22
24
  }
@@ -28,11 +30,18 @@ export async function runDevCommand(context) {
28
30
  if (config.frontend) {
29
31
  context.logger.info(`Frontend: ${config.frontend.framework}`);
30
32
  }
31
- const manifest = await new ManifestManager(context.cwd).read();
32
- const services = manifest?.capabilities ?? [];
33
+ // Service names come from a manifest file on disk and are joined into
34
+ // filesystem paths below; a crafted entry such as "../../.." would make the
35
+ // dev command probe and run outside the project.
36
+ const services = (manifest?.services ?? []).filter((service) => {
37
+ if (SAFE_PATH_SEGMENT.test(service))
38
+ return true;
39
+ context.logger.warn(`Ignoring invalid service name in .zudojs/manifest.json: "${service}"`);
40
+ return false;
41
+ });
33
42
  const processes = [];
34
- if ((!frontendOnly && config.type === "backend") ||
35
- config.type === "fullstack") {
43
+ if (!frontendOnly &&
44
+ (config.type === "backend" || config.type === "fullstack")) {
36
45
  if (config.backend?.architecture === "microservice") {
37
46
  processes.push(...startMicroserviceDev(context.cwd, services));
38
47
  }
@@ -58,6 +67,20 @@ export async function runDevCommand(context) {
58
67
  throw new CLIGenerationError("Development server failed to start.", error);
59
68
  }
60
69
  }
70
+ function configFromManifest(manifest) {
71
+ if (!manifest)
72
+ return null;
73
+ return {
74
+ name: "zudojs-project",
75
+ type: manifest.projectType ?? "backend",
76
+ backend: manifest.backend
77
+ ? { architecture: manifest.backend.architecture }
78
+ : { architecture: manifest.architecture },
79
+ frontend: manifest.frontend
80
+ ? { framework: manifest.frontend.framework }
81
+ : undefined,
82
+ };
83
+ }
61
84
  function readProjectConfig(cwd) {
62
85
  const configPath = join(cwd, "zudojs.config.ts");
63
86
  const configPathJs = join(cwd, "zudojs.config.js");
@@ -113,20 +136,32 @@ function parseConfigContent(content, cwd) {
113
136
  };
114
137
  }
115
138
  async function startBackendDev(cwd, config, port) {
116
- const portFlag = port ? [`--port=${port}`] : [];
117
- if (config.backend?.architecture === "microservice") {
118
- await execCommand("tsx", ["watch", "apps/gateway/src", ...portFlag], cwd);
119
- }
120
- else {
121
- await execCommand("tsx", ["watch", "src", ...portFlag], cwd);
122
- }
139
+ // `--port=N` was appended to the tsx argv, where it became an argument of
140
+ // the watched script and was ignored. Generated servers read PORT from the
141
+ // environment, so that is where the option has to land.
142
+ const options = port !== undefined
143
+ ? { env: { ...process.env, PORT: String(port) } }
144
+ : undefined;
145
+ const entry = config.backend?.architecture === "microservice"
146
+ ? "apps/gateway/src"
147
+ : "src";
148
+ await runStreaming("tsx", ["watch", entry], cwd, options);
123
149
  }
124
150
  function startMicroserviceDev(cwd, services) {
125
- const serviceDirs = services.map((service) => join(cwd, "apps", service));
151
+ const serviceDirs = services.map((service) => {
152
+ const nested = join(cwd, "apps", "services", service);
153
+ return existsSync(join(nested, "src"))
154
+ ? nested
155
+ : join(cwd, "apps", service);
156
+ });
126
157
  const promises = [];
158
+ const gatewayDir = join(cwd, "apps", "gateway");
159
+ if (existsSync(join(gatewayDir, "src"))) {
160
+ promises.push(runStreaming("tsx", ["watch", "src"], gatewayDir));
161
+ }
127
162
  for (const dir of serviceDirs) {
128
163
  if (existsSync(join(dir, "src"))) {
129
- promises.push(execCommand("tsx", ["watch", "src"], dir).then(() => { }));
164
+ promises.push(runStreaming("tsx", ["watch", "src"], dir));
130
165
  }
131
166
  }
132
167
  return promises;
@@ -136,40 +171,40 @@ async function startFrontendDev(cwd, config) {
136
171
  const frontendDir = join(cwd, "apps", "web");
137
172
  switch (framework) {
138
173
  case "react":
139
- await execCommand("npm", ["run", "dev"], frontendDir);
174
+ await runStreaming("npm", ["run", "dev"], frontendDir);
140
175
  break;
141
176
  case "next":
142
- await execCommand("npm", ["run", "dev"], frontendDir);
177
+ await runStreaming("npm", ["run", "dev"], frontendDir);
143
178
  break;
144
179
  case "vue":
145
- await execCommand("npm", ["run", "dev"], frontendDir);
180
+ await runStreaming("npm", ["run", "dev"], frontendDir);
146
181
  break;
147
182
  case "nuxt":
148
- await execCommand("npm", ["run", "dev"], frontendDir);
183
+ await runStreaming("npm", ["run", "dev"], frontendDir);
149
184
  break;
150
185
  case "angular":
151
- await execCommand("ng", ["serve"], frontendDir);
186
+ await runStreaming("ng", ["serve"], frontendDir);
152
187
  break;
153
188
  case "svelte":
154
- await execCommand("npm", ["run", "dev"], frontendDir);
189
+ await runStreaming("npm", ["run", "dev"], frontendDir);
155
190
  break;
156
191
  case "sveltekit":
157
- await execCommand("npm", ["run", "dev"], frontendDir);
192
+ await runStreaming("npm", ["run", "dev"], frontendDir);
158
193
  break;
159
194
  case "astro":
160
- await execCommand("npm", ["run", "dev"], frontendDir);
195
+ await runStreaming("npm", ["run", "dev"], frontendDir);
161
196
  break;
162
197
  case "vanilla":
163
- await execCommand("npm", ["run", "dev"], frontendDir);
198
+ await runStreaming("npm", ["run", "dev"], frontendDir);
164
199
  break;
165
200
  case "flutter":
166
- await execCommand("flutter", ["run", "--debug"], frontendDir);
201
+ await runStreaming("flutter", ["run", "--debug"], frontendDir);
167
202
  break;
168
203
  case "react-native":
169
- await execCommand("npx", ["react-native", "start"], frontendDir);
204
+ await runStreaming("npx", ["react-native", "start"], frontendDir);
170
205
  break;
171
206
  default:
172
- await execCommand("npm", ["run", "dev"], frontendDir);
207
+ await runStreaming("npm", ["run", "dev"], frontendDir);
173
208
  }
174
209
  }
175
210
  //# sourceMappingURL=dev.command.js.map
@@ -5,24 +5,29 @@
5
5
  */
6
6
  import { existsSync, readFileSync } from "node:fs";
7
7
  import { join } from "node:path";
8
- import { execFileSync } from "node:child_process";
8
+ import { CLIValidationError } from "../errors/index.js";
9
9
  export async function runDoctorCommand(context) {
10
10
  const checks = [];
11
11
  const warnings = [];
12
12
  const errors = [];
13
13
  checks.push(checkNodeVersion());
14
- checks.push(checkPackageManager());
15
- checks.push(checkTypeScriptConfig());
16
- checks.push(checkZudojsConfig());
14
+ checks.push(checkPackageManager(context.cwd));
15
+ checks.push(checkTypeScriptConfig(context.cwd));
16
+ checks.push(checkZudojsConfig(context.cwd));
17
17
  checks.push(checkDependencies(context));
18
- checks.push(checkArchitectureViolations());
18
+ checks.push(checkArchitectureViolations(context.cwd));
19
19
  context.logger.info("Zudojs Doctor - Project Diagnostics");
20
20
  context.logger.info("");
21
21
  for (const check of checks) {
22
22
  const symbol = check.passed ? "✔" : "✖";
23
23
  context.logger.info(`${symbol} ${check.name}: ${check.message}`);
24
24
  if (!check.passed) {
25
- errors.push(`${check.name}: ${check.message}`);
25
+ if (check.severity === "warning") {
26
+ warnings.push(`${check.name}: ${check.message}`);
27
+ }
28
+ else {
29
+ errors.push(`${check.name}: ${check.message}`);
30
+ }
26
31
  }
27
32
  }
28
33
  if (warnings.length > 0) {
@@ -40,7 +45,9 @@ export async function runDoctorCommand(context) {
40
45
  }
41
46
  context.logger.info("");
42
47
  context.logger.info("Please fix the errors above before deploying.");
43
- return;
48
+ // Throwing is what gives `zudojs doctor` a non-zero exit code; returning
49
+ // here would report success to CI while diagnostics failed.
50
+ throw new CLIValidationError(`Zudojs doctor found ${errors.length} problem(s): ${errors.join("; ")}`);
44
51
  }
45
52
  context.logger.info("");
46
53
  context.logger.info("All checks passed!");
@@ -51,35 +58,40 @@ function checkNodeVersion() {
51
58
  const passed = major >= 24;
52
59
  return {
53
60
  name: "Node.js version",
61
+ severity: "error",
54
62
  passed,
55
63
  message: passed
56
64
  ? `Node.js ${version} (✓ meets minimum v24)`
57
65
  : `Node.js ${version} (✗ requires >= v24)`,
58
66
  };
59
67
  }
60
- function checkPackageManager() {
61
- const hasPnpm = existsSync("pnpm-lock.yaml");
62
- const hasNpm = existsSync("package-lock.json");
63
- const hasYarn = existsSync("yarn.lock");
68
+ function checkPackageManager(cwd) {
69
+ const hasPnpm = existsSync(join(cwd, "pnpm-lock.yaml"));
70
+ const hasNpm = existsSync(join(cwd, "package-lock.json"));
71
+ const hasYarn = existsSync(join(cwd, "yarn.lock"));
64
72
  const passed = hasPnpm || hasNpm || hasYarn;
65
73
  const manager = hasPnpm ? "pnpm" : hasNpm ? "npm" : hasYarn ? "yarn" : "none";
66
74
  return {
67
75
  name: "Package manager",
76
+ severity: "warning",
68
77
  passed,
69
78
  message: passed ? `Detected: ${manager}` : "No lock file found",
70
79
  };
71
80
  }
72
- function checkTypeScriptConfig() {
73
- const passed = existsSync("tsconfig.json") || existsSync("tsconfig.base.json");
81
+ function checkTypeScriptConfig(cwd) {
82
+ const passed = existsSync(join(cwd, "tsconfig.json")) ||
83
+ existsSync(join(cwd, "tsconfig.base.json"));
74
84
  return {
75
85
  name: "TypeScript configuration",
86
+ severity: "error",
76
87
  passed,
77
88
  message: passed ? "tsconfig.json found" : "No tsconfig.json found",
78
89
  };
79
90
  }
80
- function checkZudojsConfig() {
81
- const hasPkgConfig = checkZudojsInPackageJson();
82
- const hasConfig = existsSync("zudojs.config.ts") || existsSync("zudojs.config.js");
91
+ function checkZudojsConfig(cwd) {
92
+ const hasPkgConfig = checkZudojsInPackageJson(cwd);
93
+ const hasConfig = existsSync(join(cwd, "zudojs.config.ts")) ||
94
+ existsSync(join(cwd, "zudojs.config.js"));
83
95
  const passed = hasPkgConfig || hasConfig;
84
96
  let message = "No Zudojs configuration found.";
85
97
  if (passed) {
@@ -89,11 +101,16 @@ function checkZudojsConfig() {
89
101
  ? "zudojs.config.ts found"
90
102
  : "Zudojs config in package.json";
91
103
  }
92
- return { name: "Zudojs configuration", passed, message };
104
+ return {
105
+ name: "Zudojs configuration",
106
+ severity: "error",
107
+ passed,
108
+ message,
109
+ };
93
110
  }
94
- function checkZudojsInPackageJson() {
111
+ function checkZudojsInPackageJson(cwd) {
95
112
  try {
96
- const pkgPath = join(process.cwd(), "package.json");
113
+ const pkgPath = join(cwd, "package.json");
97
114
  if (!existsSync(pkgPath))
98
115
  return false;
99
116
  const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
@@ -108,6 +125,7 @@ function checkDependencies(context) {
108
125
  if (!existsSync(pkgPath)) {
109
126
  return {
110
127
  name: "Dependencies",
128
+ severity: "error",
111
129
  passed: false,
112
130
  message: "No package.json found",
113
131
  };
@@ -118,6 +136,7 @@ function checkDependencies(context) {
118
136
  const passed = zudojsDeps.length > 0;
119
137
  return {
120
138
  name: "Zudojs dependencies",
139
+ severity: "warning",
121
140
  passed,
122
141
  message: passed
123
142
  ? `${zudojsDeps.length} Zudojs packages installed`
@@ -127,22 +146,24 @@ function checkDependencies(context) {
127
146
  catch {
128
147
  return {
129
148
  name: "Dependencies",
149
+ severity: "error",
130
150
  passed: false,
131
151
  message: "Failed to read package.json",
132
152
  };
133
153
  }
134
154
  }
135
- function checkArchitectureViolations() {
136
- const srcDir = join(process.cwd(), "src");
155
+ function checkArchitectureViolations(cwd) {
156
+ const srcDir = join(cwd, "src");
137
157
  const violations = [];
138
158
  if (!existsSync(srcDir)) {
139
159
  return {
140
160
  name: "Architecture",
161
+ severity: "warning",
141
162
  passed: true,
142
163
  message: "No src/ directory (not a Zudojs project?)",
143
164
  };
144
165
  }
145
- const configPath = join(process.cwd(), "zudojs.config.ts");
166
+ const configPath = join(cwd, "zudojs.config.ts");
146
167
  let architecture = "monolith";
147
168
  if (existsSync(configPath)) {
148
169
  const configContent = readFileSync(configPath, "utf-8");
@@ -163,7 +184,7 @@ function checkArchitectureViolations() {
163
184
  violations.push("src/modules/ found in monolith architecture — consider modular-monolith or microservice architecture");
164
185
  }
165
186
  }
166
- const pkgPath = join(process.cwd(), "package.json");
187
+ const pkgPath = join(cwd, "package.json");
167
188
  if (existsSync(pkgPath)) {
168
189
  try {
169
190
  const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
@@ -182,6 +203,7 @@ function checkArchitectureViolations() {
182
203
  }
183
204
  return {
184
205
  name: "Architecture",
206
+ severity: "warning",
185
207
  passed: violations.length === 0,
186
208
  message: violations.length === 0
187
209
  ? "No violations detected"
@@ -19,8 +19,8 @@ import { generateRoute } from "../generators/route/route.generator.js";
19
19
  import { generateModel } from "../generators/model/model.generator.js";
20
20
  import { generateDto } from "../generators/dto/dto.generator.js";
21
21
  import { generateValidator } from "../generators/validator/validator.generator.js";
22
- import { ManifestManager } from "../manifest/manifestManager.core.js";
23
22
  import { CLIGenerationError, CLIValidationError } from "../errors/index.js";
23
+ import { assertGeneratableName, assertSafePathSegment, } from "../utils/utils.name.js";
24
24
  const VALID_SCHEMATICS = [
25
25
  "service",
26
26
  "module",
@@ -36,7 +36,28 @@ const VALID_SCHEMATICS = [
36
36
  "dto",
37
37
  "validator",
38
38
  ];
39
- function getBasePath(architecture, schematic) {
39
+ /**
40
+ * Resolves the directory a schematic is generated into.
41
+ *
42
+ * `moduleName` comes from `--module`, which was previously accepted,
43
+ * documented and then never read by any schematic. It is validated as a
44
+ * single safe path segment by the caller before it reaches here.
45
+ */
46
+ function getBasePath(architecture, schematic, moduleName, serviceName) {
47
+ const root = getArchitectureRoot(architecture, schematic, serviceName);
48
+ if (moduleName !== undefined && schematic !== "module") {
49
+ return `${root}/modules/${moduleName}`;
50
+ }
51
+ return root;
52
+ }
53
+ /**
54
+ * Resolves the directory a schematic is generated into for an architecture.
55
+ *
56
+ * The microservice layout produced by `zudojs create` is
57
+ * `apps/gateway/src` plus `apps/services/<name>/src`; the previous
58
+ * `apps/default` root matched no directory the scaffolder ever writes.
59
+ */
60
+ function getArchitectureRoot(architecture, schematic, serviceName) {
40
61
  switch (architecture) {
41
62
  case "modular-monolith":
42
63
  if (schematic === "module") {
@@ -45,9 +66,14 @@ function getBasePath(architecture, schematic) {
45
66
  return "src";
46
67
  case "microservice":
47
68
  if (schematic === "service") {
48
- return "apps";
69
+ // A new service is a new app in the workspace.
70
+ return "apps/services";
49
71
  }
50
- return "apps/default";
72
+ // `--service <name>` selects which app the schematic belongs to.
73
+ // Without it the gateway app — the one app always generated — is used.
74
+ return serviceName !== undefined
75
+ ? `apps/services/${serviceName}/src`
76
+ : "apps/gateway/src";
51
77
  case "monolith":
52
78
  default:
53
79
  if (schematic === "module") {
@@ -57,18 +83,40 @@ function getBasePath(architecture, schematic) {
57
83
  }
58
84
  }
59
85
  function readZudojsArchitecture(cwd) {
60
- const configPath = join(cwd, "zudojs.config.ts");
61
- if (!existsSync(configPath)) {
62
- const configPathJs = join(cwd, "zudojs.config.js");
63
- if (!existsSync(configPathJs))
64
- return null;
65
- const content = readFileSync(configPathJs, "utf-8");
66
- const match = content.match(/architecture:\s*["'](\w[\w-]*)["']/);
67
- return match?.[1] ?? null;
68
- }
69
- const content = readFileSync(configPath, "utf-8");
70
- const match = content.match(/architecture:\s*["'](\w[\w-]*)["']/);
71
- return match?.[1] ?? null;
86
+ for (const configFile of ["zudojs.config.ts", "zudojs.config.js"]) {
87
+ const configPath = join(cwd, configFile);
88
+ if (existsSync(configPath)) {
89
+ const content = readFileSync(configPath, "utf-8");
90
+ const match = content.match(/architecture:\s*["'](\w[\w-]*)["']/);
91
+ if (match?.[1])
92
+ return match[1];
93
+ }
94
+ }
95
+ // Fall back to the machine-managed manifest written by `zudojs create`.
96
+ const manifestPath = join(cwd, ".zudojs", "manifest.json");
97
+ if (existsSync(manifestPath)) {
98
+ try {
99
+ const manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
100
+ if (manifest.architecture)
101
+ return manifest.architecture;
102
+ }
103
+ catch {
104
+ // ignore malformed manifest
105
+ }
106
+ }
107
+ // Fall back to the zudojs field in package.json.
108
+ const pkgPath = join(cwd, "package.json");
109
+ if (existsSync(pkgPath)) {
110
+ try {
111
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
112
+ if (pkg.zudojs?.architecture)
113
+ return pkg.zudojs.architecture;
114
+ }
115
+ catch {
116
+ // ignore malformed package.json
117
+ }
118
+ }
119
+ return null;
72
120
  }
73
121
  export async function runGenerateCommand(context) {
74
122
  const schematic = context.values.schematic;
@@ -83,14 +131,25 @@ export async function runGenerateCommand(context) {
83
131
  if (!name) {
84
132
  throw new CLIValidationError("Resource name is required.");
85
133
  }
134
+ // Reject names that normalize to nothing (`zudojs generate event "..."`
135
+ // wrote src/events/.event.ts with an anonymous export), and reject option
136
+ // values that are interpolated verbatim into a generated path. `--service ..`
137
+ // used to place files outside the schematic's base directory.
138
+ assertGeneratableName(name, "resource name");
139
+ if (service !== undefined) {
140
+ assertSafePathSegment(service, "--service");
141
+ }
142
+ if (moduleName !== undefined) {
143
+ assertSafePathSegment(moduleName, "--module");
144
+ }
86
145
  const cwd = context.cwd;
87
146
  const architecture = readZudojsArchitecture(cwd);
88
- const manifest = await new ManifestManager(cwd).read();
89
147
  if (architecture) {
90
148
  context.logger.info(`Detected architecture: ${architecture}`);
91
149
  }
92
150
  else {
93
- context.logger.warn("No zudojs.config.ts found. Run `zudojs create` first to scaffold a Zudojs project.");
151
+ context.logger.warn("No Zudojs project detected (no zudojs.config.ts, .zudojs/manifest.json " +
152
+ "or `zudojs` field in package.json). Run `zudojs create` first.");
94
153
  }
95
154
  if (architecture === "microservice" && schematic === "service") {
96
155
  context.logger.warn('In microservice architecture, prefer "zudojs generate module" — services are top-level apps.');
@@ -104,42 +163,52 @@ export async function runGenerateCommand(context) {
104
163
  dryRun,
105
164
  architecture: architecture ?? undefined,
106
165
  }, cwd);
107
- context.logger.info(`Generated ${result.length} files:`);
166
+ if (dryRun) {
167
+ context.logger.info(`Dry run: ${result.length} files would be generated (nothing written):`);
168
+ }
169
+ else {
170
+ context.logger.info(`Generated ${result.length} files:`);
171
+ }
108
172
  for (const file of result) {
109
173
  context.logger.info(` - ${file}`);
110
174
  }
111
175
  }
112
176
  async function runSchematic(schematic, name, options, cwd) {
113
177
  try {
114
- const basePath = getBasePath(options.architecture, schematic);
115
- const moduleName = options.module ?? name;
178
+ const basePath = getBasePath(options.architecture, schematic, options.module, options.service);
179
+ const dryRun = options.dryRun;
180
+ // In the microservice layout `--service` selected the owning app and is
181
+ // already part of basePath, so it must not nest the schematic again.
182
+ const cqrsService = options.architecture === "microservice"
183
+ ? undefined
184
+ : (options.service ?? "default");
116
185
  switch (schematic) {
117
186
  case "service":
118
- return await generateService({ name, basePath }, cwd);
187
+ return await generateService({ name, basePath, dryRun }, cwd);
119
188
  case "module":
120
- return await generateModule({ name, feature: true, basePath }, cwd);
189
+ return await generateModule({ name, feature: true, basePath, dryRun }, cwd);
121
190
  case "command":
122
- return await generateCommand({ name, service: options.service ?? "default", basePath }, cwd);
191
+ return await generateCommand({ name, ...(cqrsService ? { service: cqrsService } : {}), basePath, dryRun }, cwd);
123
192
  case "query":
124
- return await generateQuery({ name, service: options.service ?? "default", basePath }, cwd);
193
+ return await generateQuery({ name, ...(cqrsService ? { service: cqrsService } : {}), basePath, dryRun }, cwd);
125
194
  case "controller":
126
- return await generateController({ name, basePath }, cwd);
195
+ return await generateController({ name, basePath, dryRun }, cwd);
127
196
  case "repository":
128
- return await generateRepository({ name, basePath }, cwd);
197
+ return await generateRepository({ name, basePath, dryRun }, cwd);
129
198
  case "middleware":
130
- return await generateMiddleware({ name, basePath }, cwd);
199
+ return await generateMiddleware({ name, basePath, dryRun }, cwd);
131
200
  case "event":
132
- return await generateEvent({ name, basePath }, cwd);
201
+ return await generateEvent({ name, basePath, dryRun }, cwd);
133
202
  case "job":
134
- return await generateJob({ name, basePath }, cwd);
203
+ return await generateJob({ name, basePath, dryRun }, cwd);
135
204
  case "route":
136
- return await generateRoute({ name, basePath }, cwd);
205
+ return await generateRoute({ name, basePath, dryRun }, cwd);
137
206
  case "model":
138
- return await generateModel({ name, basePath }, cwd);
207
+ return await generateModel({ name, basePath, dryRun }, cwd);
139
208
  case "dto":
140
- return await generateDto({ name, basePath }, cwd);
209
+ return await generateDto({ name, basePath, dryRun }, cwd);
141
210
  case "validator":
142
- return await generateValidator({ name, basePath }, cwd);
211
+ return await generateValidator({ name, basePath, dryRun }, cwd);
143
212
  default:
144
213
  throw new CLIValidationError(`Unknown schematic: "${schematic}". Available: ${VALID_SCHEMATICS.join(", ")}.`);
145
214
  }
@@ -3,7 +3,9 @@
3
3
  *
4
4
  * Constants used by the CLI scaffolding system.
5
5
  */
6
- export declare const CLI_VERSION: "0.1.0";
6
+ export { CLI_VERSION } from "../cliConstant/cliVersion.js";
7
+ /** Published version of all @zudojs/* framework packages. */
8
+ export declare const ZUDOJS_PACKAGES_VERSION: "1.0.0";
7
9
  export declare const ARCHITECTURE_CHOICES: readonly [{
8
10
  readonly value: "monolith";
9
11
  readonly label: "Monolith";
@@ -3,7 +3,9 @@
3
3
  *
4
4
  * Constants used by the CLI scaffolding system.
5
5
  */
6
- export const CLI_VERSION = "0.1.0";
6
+ export { CLI_VERSION } from "../cliConstant/cliVersion.js";
7
+ /** Published version of all @zudojs/* framework packages. */
8
+ export const ZUDOJS_PACKAGES_VERSION = "1.0.0";
7
9
  export const ARCHITECTURE_CHOICES = [
8
10
  { value: "monolith", label: "Monolith" },
9
11
  { value: "modular-monolith", label: "Modular Monolith" },
@@ -7,6 +7,7 @@ export interface GenerateCommandOptions {
7
7
  readonly name: string;
8
8
  readonly service?: string;
9
9
  readonly basePath?: string;
10
+ readonly dryRun?: boolean;
10
11
  }
11
12
  export declare function generateCommand(options: GenerateCommandOptions, cwd: string): Promise<string[]>;
12
13
  //# sourceMappingURL=command.generator.d.ts.map
@@ -4,16 +4,19 @@
4
4
  * Generates a CQRS command with handler.
5
5
  */
6
6
  import { writeFileTree } from "../../utils/utils.fileSystem.js";
7
- import { CLIGenerationError, CLIValidationError } from "../../errors/index.js";
7
+ import { CLIGenerationError } from "../../errors/index.js";
8
8
  import { normalizeName } from "../../utils/utils.name.js";
9
9
  export async function generateCommand(options, cwd) {
10
10
  const name = normalizeName(options.name);
11
11
  const nameCamel = name
12
12
  .replace(/-([a-z])/g, (_m, c) => c.toUpperCase())
13
13
  .replace(/^./, (c) => c.toUpperCase());
14
- const service = options.service ?? "default";
14
+ const service = options.service;
15
15
  const basePath = options.basePath ?? "services";
16
- const servicePath = `${basePath}/${service}`;
16
+ // When no service grouping is given the schematic is written directly under
17
+ // basePath. Callers that resolved the owning app into basePath (the
18
+ // microservice layout) pass no service, so the path is not nested twice.
19
+ const servicePath = service ? `${basePath}/${service}` : basePath;
17
20
  const files = {
18
21
  [`${servicePath}/commands/${name}/${name}.command.ts`]: `import type { BaseCommand } from "@zudojs/cqrs";
19
22
 
@@ -48,12 +51,15 @@ export class ${nameCamel}CommandHandler implements CommandHandler<${nameCamel}Co
48
51
  export { ${nameCamel}CommandHandler } from "./${name}.handler.js";
49
52
  `,
50
53
  };
54
+ if (options.dryRun) {
55
+ return Object.keys(files);
56
+ }
51
57
  try {
52
58
  await writeFileTree(cwd, files);
53
59
  return Object.keys(files);
54
60
  }
55
61
  catch (error) {
56
- throw new CLIGenerationError(`Failed to generate command: ${name} for service: ${service}`, error);
62
+ throw new CLIGenerationError(`Failed to generate command: ${name} in ${servicePath}`, error);
57
63
  }
58
64
  }
59
65
  //# sourceMappingURL=command.generator.js.map
@@ -5,6 +5,7 @@ export interface GenerateControllerOptions {
5
5
  readonly name: string;
6
6
  readonly service?: string;
7
7
  readonly basePath?: string;
8
+ readonly dryRun?: boolean;
8
9
  }
9
10
  export declare function generateController(options: GenerateControllerOptions, cwd: string): Promise<string[]>;
10
11
  //# sourceMappingURL=controller.generator.d.ts.map