zudojs-cli 0.1.2 → 1.1.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 (469) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -3
  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/frontendAdapter.type.d.ts +6 -0
  8. package/dist/src/adapters/frontend/react.adapter.js +26 -17
  9. package/dist/src/adapters/frontend/svelte.adapter.js +1 -0
  10. package/dist/src/adapters/frontend/sveltekit.adapter.js +7 -8
  11. package/dist/src/adapters/frontend/vanilla.adapter.js +1 -1
  12. package/dist/src/adapters/frontend/vue.adapter.js +1 -0
  13. package/dist/src/adapters/package-managers/bun.adapter.js +5 -5
  14. package/dist/src/adapters/package-managers/npm.adapter.js +5 -5
  15. package/dist/src/adapters/package-managers/pnpm.adapter.js +5 -5
  16. package/dist/src/adapters/package-managers/yarn.adapter.js +5 -5
  17. package/dist/src/bin/zudojs.js +23 -11
  18. package/dist/src/cliApplication/cliApplication.builtins.d.ts +11 -2
  19. package/dist/src/cliApplication/cliApplication.builtins.js +15 -4
  20. package/dist/src/cliApplication/cliApplication.core.js +22 -7
  21. package/dist/src/cliApplication/cliApplication.logger.d.ts +28 -0
  22. package/dist/src/cliApplication/cliApplication.logger.js +68 -0
  23. package/dist/src/cliApplication/index.d.ts +1 -3
  24. package/dist/src/cliApplication/index.js +1 -3
  25. package/dist/src/cliConstant/cliConstant.value.d.ts +1 -1
  26. package/dist/src/cliConstant/cliConstant.value.js +2 -1
  27. package/dist/src/cliConstant/cliVersion.d.ts +16 -0
  28. package/dist/src/cliConstant/cliVersion.js +57 -0
  29. package/dist/src/cliParser/cliParser.core.js +7 -0
  30. package/dist/src/cliParser/cliParser.shortOption.js +1 -1
  31. package/dist/src/cliVersion/cliVersion.update.d.ts +38 -0
  32. package/dist/src/cliVersion/cliVersion.update.js +63 -0
  33. package/dist/src/cliVersion/index.d.ts +2 -1
  34. package/dist/src/cliVersion/index.js +2 -1
  35. package/dist/src/commands/add.command.d.ts +29 -0
  36. package/dist/src/commands/add.command.js +95 -107
  37. package/dist/src/commands/build.command.d.ts +8 -0
  38. package/dist/src/commands/build.command.js +24 -24
  39. package/dist/src/commands/create.command.js +176 -55
  40. package/dist/src/commands/dev.command.d.ts +30 -2
  41. package/dist/src/commands/dev.command.js +106 -150
  42. package/dist/src/commands/doctor.command.d.ts +18 -0
  43. package/dist/src/commands/doctor.command.js +160 -110
  44. package/dist/src/commands/generate.command.d.ts +2 -1
  45. package/dist/src/commands/generate.command.js +91 -41
  46. package/dist/src/commands/info.command.js +61 -30
  47. package/dist/src/constants/index.d.ts +19 -1
  48. package/dist/src/constants/index.js +32 -1
  49. package/dist/src/generators/command/command.generator.d.ts +1 -0
  50. package/dist/src/generators/command/command.generator.js +10 -4
  51. package/dist/src/generators/controller/controller.generator.d.ts +1 -0
  52. package/dist/src/generators/controller/controller.generator.js +12 -9
  53. package/dist/src/generators/dto/dto.generator.d.ts +1 -0
  54. package/dist/src/generators/dto/dto.generator.js +9 -3
  55. package/dist/src/generators/event/event.generator.d.ts +1 -0
  56. package/dist/src/generators/event/event.generator.js +10 -4
  57. package/dist/src/generators/frontend/frontendGenerator.core.d.ts +2 -0
  58. package/dist/src/generators/frontend/frontendGenerator.core.js +14 -27
  59. package/dist/src/generators/frontend/frontendPipeline.d.ts +26 -0
  60. package/dist/src/generators/frontend/frontendPipeline.js +136 -0
  61. package/dist/src/generators/fullstack/fullstackComposer.core.d.ts +3 -2
  62. package/dist/src/generators/fullstack/fullstackComposer.core.js +58 -43
  63. package/dist/src/generators/infrastructure/infrastructure.generator.d.ts +11 -0
  64. package/dist/src/generators/infrastructure/infrastructure.generator.js +101 -61
  65. package/dist/src/generators/integration/integrationGenerator.core.d.ts +6 -0
  66. package/dist/src/generators/integration/integrationGenerator.core.js +35 -6
  67. package/dist/src/generators/job/job.generator.d.ts +1 -0
  68. package/dist/src/generators/job/job.generator.js +9 -3
  69. package/dist/src/generators/middleware/middleware.generator.d.ts +1 -0
  70. package/dist/src/generators/middleware/middleware.generator.js +10 -4
  71. package/dist/src/generators/model/model.generator.d.ts +1 -0
  72. package/dist/src/generators/model/model.generator.js +9 -3
  73. package/dist/src/generators/module/module.generator.d.ts +1 -0
  74. package/dist/src/generators/module/module.generator.js +11 -24
  75. package/dist/src/generators/project/project.generator.js +2 -23
  76. package/dist/src/generators/query/query.generator.d.ts +1 -0
  77. package/dist/src/generators/query/query.generator.js +10 -4
  78. package/dist/src/generators/repository/repository.generator.d.ts +1 -0
  79. package/dist/src/generators/repository/repository.generator.js +12 -9
  80. package/dist/src/generators/route/route.generator.d.ts +1 -0
  81. package/dist/src/generators/route/route.generator.js +11 -5
  82. package/dist/src/generators/service/service.generator.d.ts +1 -0
  83. package/dist/src/generators/service/service.generator.js +12 -9
  84. package/dist/src/generators/validator/validator.generator.d.ts +1 -0
  85. package/dist/src/generators/validator/validator.generator.js +9 -3
  86. package/dist/src/index.d.ts +3 -2
  87. package/dist/src/index.js +3 -2
  88. package/dist/src/installers/dependency.installer.d.ts +9 -0
  89. package/dist/src/installers/dependency.installer.js +27 -2
  90. package/dist/src/installers/index.d.ts +1 -3
  91. package/dist/src/installers/index.js +1 -3
  92. package/dist/src/manifest/manifestManager.core.d.ts +3 -0
  93. package/dist/src/prompts/backend/index.d.ts +1 -0
  94. package/dist/src/prompts/backend/index.js +1 -0
  95. package/dist/src/prompts/backend/services.prompt.d.ts +7 -0
  96. package/dist/src/prompts/backend/services.prompt.js +39 -0
  97. package/dist/src/prompts/index.d.ts +0 -1
  98. package/dist/src/prompts/index.js +0 -1
  99. package/dist/src/resolvers/architecture.resolver.d.ts +11 -1
  100. package/dist/src/resolvers/architecture.resolver.js +12 -13
  101. package/dist/src/resolvers/configuration/configurationResolver.core.d.ts +10 -1
  102. package/dist/src/resolvers/configuration/configurationResolver.core.js +68 -29
  103. package/dist/src/resolvers/index.d.ts +1 -0
  104. package/dist/src/resolvers/index.js +1 -0
  105. package/dist/src/resolvers/layout/index.d.ts +5 -0
  106. package/dist/src/resolvers/layout/index.js +5 -0
  107. package/dist/src/resolvers/layout/projectLayout.core.d.ts +60 -0
  108. package/dist/src/resolvers/layout/projectLayout.core.js +236 -0
  109. package/dist/src/resolvers/project.resolver.d.ts +5 -0
  110. package/dist/src/resolvers/project.resolver.js +10 -6
  111. package/dist/src/rollback/rollbackManager.core.js +0 -1
  112. package/dist/src/runners/process/processRunner.core.d.ts +4 -0
  113. package/dist/src/runners/process/processRunner.core.js +17 -3
  114. package/dist/src/scaffolders/framework.scaffolder.js +9 -6
  115. package/dist/src/scaffolders/scaffolder.helper.js +7 -2
  116. package/dist/src/templates/microservice/index.d.ts +1 -1
  117. package/dist/src/templates/microservice/index.js +1 -1
  118. package/dist/src/templates/microservice/microservice.template.d.ts +14 -0
  119. package/dist/src/templates/microservice/microservice.template.js +140 -162
  120. package/dist/src/templates/modular-monolith/modularMonolith.template.d.ts +0 -1
  121. package/dist/src/templates/modular-monolith/modularMonolith.template.js +43 -77
  122. package/dist/src/templates/monolith/monolith.template.d.ts +1 -1
  123. package/dist/src/templates/monolith/monolith.template.js +46 -69
  124. package/dist/src/templates/shared/appRuntime.template.d.ts +60 -0
  125. package/dist/src/templates/shared/appRuntime.template.js +189 -0
  126. package/dist/src/templates/shared/index.d.ts +6 -0
  127. package/dist/src/templates/shared/index.js +6 -0
  128. package/dist/src/templates/shared/pnpm.template.d.ts +27 -0
  129. package/dist/src/templates/shared/pnpm.template.js +57 -0
  130. package/dist/src/utils/index.d.ts +3 -3
  131. package/dist/src/utils/index.js +3 -3
  132. package/dist/src/utils/utils.detect.d.ts +9 -0
  133. package/dist/src/utils/utils.detect.js +11 -11
  134. package/dist/src/utils/utils.exec.d.ts +35 -1
  135. package/dist/src/utils/utils.exec.js +99 -4
  136. package/dist/src/utils/utils.fileSystem.d.ts +6 -0
  137. package/dist/src/utils/utils.fileSystem.js +19 -0
  138. package/dist/src/utils/utils.name.d.ts +26 -0
  139. package/dist/src/utils/utils.name.js +51 -1
  140. package/package.json +32 -23
  141. package/dist/.tsbuildinfo +0 -1
  142. package/dist/src/adapters/databases/index.d.ts.map +0 -1
  143. package/dist/src/adapters/databases/index.js.map +0 -1
  144. package/dist/src/adapters/databases/mysql.adapter.d.ts.map +0 -1
  145. package/dist/src/adapters/databases/mysql.adapter.js.map +0 -1
  146. package/dist/src/adapters/databases/postgres.adapter.d.ts.map +0 -1
  147. package/dist/src/adapters/databases/postgres.adapter.js.map +0 -1
  148. package/dist/src/adapters/databases/sqlite.adapter.d.ts.map +0 -1
  149. package/dist/src/adapters/databases/sqlite.adapter.js.map +0 -1
  150. package/dist/src/adapters/frontend/angular.adapter.d.ts.map +0 -1
  151. package/dist/src/adapters/frontend/angular.adapter.js.map +0 -1
  152. package/dist/src/adapters/frontend/astro.adapter.d.ts.map +0 -1
  153. package/dist/src/adapters/frontend/astro.adapter.js.map +0 -1
  154. package/dist/src/adapters/frontend/flutter.adapter.d.ts.map +0 -1
  155. package/dist/src/adapters/frontend/flutter.adapter.js.map +0 -1
  156. package/dist/src/adapters/frontend/frontendAdapter.type.d.ts.map +0 -1
  157. package/dist/src/adapters/frontend/frontendAdapter.type.js.map +0 -1
  158. package/dist/src/adapters/frontend/index.d.ts.map +0 -1
  159. package/dist/src/adapters/frontend/index.js.map +0 -1
  160. package/dist/src/adapters/frontend/next.adapter.d.ts.map +0 -1
  161. package/dist/src/adapters/frontend/next.adapter.js.map +0 -1
  162. package/dist/src/adapters/frontend/nuxt.adapter.d.ts.map +0 -1
  163. package/dist/src/adapters/frontend/nuxt.adapter.js.map +0 -1
  164. package/dist/src/adapters/frontend/react-native.adapter.d.ts.map +0 -1
  165. package/dist/src/adapters/frontend/react-native.adapter.js.map +0 -1
  166. package/dist/src/adapters/frontend/react.adapter.d.ts.map +0 -1
  167. package/dist/src/adapters/frontend/react.adapter.js.map +0 -1
  168. package/dist/src/adapters/frontend/svelte.adapter.d.ts.map +0 -1
  169. package/dist/src/adapters/frontend/svelte.adapter.js.map +0 -1
  170. package/dist/src/adapters/frontend/sveltekit.adapter.d.ts.map +0 -1
  171. package/dist/src/adapters/frontend/sveltekit.adapter.js.map +0 -1
  172. package/dist/src/adapters/frontend/vanilla.adapter.d.ts.map +0 -1
  173. package/dist/src/adapters/frontend/vanilla.adapter.js.map +0 -1
  174. package/dist/src/adapters/frontend/vue.adapter.d.ts.map +0 -1
  175. package/dist/src/adapters/frontend/vue.adapter.js.map +0 -1
  176. package/dist/src/adapters/package-managers/bun.adapter.d.ts.map +0 -1
  177. package/dist/src/adapters/package-managers/bun.adapter.js.map +0 -1
  178. package/dist/src/adapters/package-managers/index.d.ts.map +0 -1
  179. package/dist/src/adapters/package-managers/index.js.map +0 -1
  180. package/dist/src/adapters/package-managers/npm.adapter.d.ts.map +0 -1
  181. package/dist/src/adapters/package-managers/npm.adapter.js.map +0 -1
  182. package/dist/src/adapters/package-managers/packageManager.type.d.ts.map +0 -1
  183. package/dist/src/adapters/package-managers/packageManager.type.js.map +0 -1
  184. package/dist/src/adapters/package-managers/pnpm.adapter.d.ts.map +0 -1
  185. package/dist/src/adapters/package-managers/pnpm.adapter.js.map +0 -1
  186. package/dist/src/adapters/package-managers/yarn.adapter.d.ts.map +0 -1
  187. package/dist/src/adapters/package-managers/yarn.adapter.js.map +0 -1
  188. package/dist/src/bin/zudojs.d.ts.map +0 -1
  189. package/dist/src/bin/zudojs.js.map +0 -1
  190. package/dist/src/cliApplication/cliApplication.builtins.d.ts.map +0 -1
  191. package/dist/src/cliApplication/cliApplication.builtins.js.map +0 -1
  192. package/dist/src/cliApplication/cliApplication.core.d.ts.map +0 -1
  193. package/dist/src/cliApplication/cliApplication.core.js.map +0 -1
  194. package/dist/src/cliApplication/cliApplication.writer.d.ts.map +0 -1
  195. package/dist/src/cliApplication/cliApplication.writer.js.map +0 -1
  196. package/dist/src/cliApplication/index.d.ts.map +0 -1
  197. package/dist/src/cliApplication/index.js.map +0 -1
  198. package/dist/src/cliCommand/cliCommand.builder.d.ts.map +0 -1
  199. package/dist/src/cliCommand/cliCommand.builder.js.map +0 -1
  200. package/dist/src/cliCommand/cliCommand.factory.d.ts.map +0 -1
  201. package/dist/src/cliCommand/cliCommand.factory.js.map +0 -1
  202. package/dist/src/cliCommand/cliCommand.registry.d.ts.map +0 -1
  203. package/dist/src/cliCommand/cliCommand.registry.js.map +0 -1
  204. package/dist/src/cliCommand/cliCommand.validator.d.ts.map +0 -1
  205. package/dist/src/cliCommand/cliCommand.validator.js.map +0 -1
  206. package/dist/src/cliCommand/index.d.ts.map +0 -1
  207. package/dist/src/cliCommand/index.js.map +0 -1
  208. package/dist/src/cliConstant/cliConstant.value.d.ts.map +0 -1
  209. package/dist/src/cliConstant/cliConstant.value.js.map +0 -1
  210. package/dist/src/cliConstant/index.d.ts.map +0 -1
  211. package/dist/src/cliConstant/index.js.map +0 -1
  212. package/dist/src/cliError/cliError.argument.d.ts.map +0 -1
  213. package/dist/src/cliError/cliError.argument.js.map +0 -1
  214. package/dist/src/cliError/cliError.base.d.ts.map +0 -1
  215. package/dist/src/cliError/cliError.base.js.map +0 -1
  216. package/dist/src/cliError/cliError.command.d.ts.map +0 -1
  217. package/dist/src/cliError/cliError.command.js.map +0 -1
  218. package/dist/src/cliError/cliError.execution.d.ts.map +0 -1
  219. package/dist/src/cliError/cliError.execution.js.map +0 -1
  220. package/dist/src/cliError/cliError.option.d.ts.map +0 -1
  221. package/dist/src/cliError/cliError.option.js.map +0 -1
  222. package/dist/src/cliError/index.d.ts.map +0 -1
  223. package/dist/src/cliError/index.js.map +0 -1
  224. package/dist/src/cliParser/cliParser.core.d.ts.map +0 -1
  225. package/dist/src/cliParser/cliParser.core.js.map +0 -1
  226. package/dist/src/cliParser/cliParser.helper.d.ts.map +0 -1
  227. package/dist/src/cliParser/cliParser.helper.js.map +0 -1
  228. package/dist/src/cliParser/cliParser.longOption.d.ts.map +0 -1
  229. package/dist/src/cliParser/cliParser.longOption.js.map +0 -1
  230. package/dist/src/cliParser/cliParser.shortOption.d.ts.map +0 -1
  231. package/dist/src/cliParser/cliParser.shortOption.js.map +0 -1
  232. package/dist/src/cliParser/index.d.ts.map +0 -1
  233. package/dist/src/cliParser/index.js.map +0 -1
  234. package/dist/src/cliType/cliType.type.d.ts.map +0 -1
  235. package/dist/src/cliType/cliType.type.js.map +0 -1
  236. package/dist/src/cliType/index.d.ts.map +0 -1
  237. package/dist/src/cliType/index.js.map +0 -1
  238. package/dist/src/cliVersion/cliVersion.core.d.ts.map +0 -1
  239. package/dist/src/cliVersion/cliVersion.core.js.map +0 -1
  240. package/dist/src/cliVersion/index.d.ts.map +0 -1
  241. package/dist/src/cliVersion/index.js.map +0 -1
  242. package/dist/src/commands/add.command.d.ts.map +0 -1
  243. package/dist/src/commands/add.command.js.map +0 -1
  244. package/dist/src/commands/build.command.d.ts.map +0 -1
  245. package/dist/src/commands/build.command.js.map +0 -1
  246. package/dist/src/commands/create.command.d.ts.map +0 -1
  247. package/dist/src/commands/create.command.js.map +0 -1
  248. package/dist/src/commands/dev.command.d.ts.map +0 -1
  249. package/dist/src/commands/dev.command.js.map +0 -1
  250. package/dist/src/commands/doctor.command.d.ts.map +0 -1
  251. package/dist/src/commands/doctor.command.js.map +0 -1
  252. package/dist/src/commands/generate.command.d.ts.map +0 -1
  253. package/dist/src/commands/generate.command.js.map +0 -1
  254. package/dist/src/commands/index.d.ts.map +0 -1
  255. package/dist/src/commands/index.js.map +0 -1
  256. package/dist/src/commands/info.command.d.ts.map +0 -1
  257. package/dist/src/commands/info.command.js.map +0 -1
  258. package/dist/src/constants/index.d.ts.map +0 -1
  259. package/dist/src/constants/index.js.map +0 -1
  260. package/dist/src/errors/index.d.ts.map +0 -1
  261. package/dist/src/errors/index.js.map +0 -1
  262. package/dist/src/generators/backend/backend.generator.d.ts.map +0 -1
  263. package/dist/src/generators/backend/backend.generator.js.map +0 -1
  264. package/dist/src/generators/backend/index.d.ts.map +0 -1
  265. package/dist/src/generators/backend/index.js.map +0 -1
  266. package/dist/src/generators/command/command.generator.d.ts.map +0 -1
  267. package/dist/src/generators/command/command.generator.js.map +0 -1
  268. package/dist/src/generators/controller/controller.generator.d.ts.map +0 -1
  269. package/dist/src/generators/controller/controller.generator.js.map +0 -1
  270. package/dist/src/generators/dto/dto.generator.d.ts.map +0 -1
  271. package/dist/src/generators/dto/dto.generator.js.map +0 -1
  272. package/dist/src/generators/dto/index.d.ts.map +0 -1
  273. package/dist/src/generators/dto/index.js.map +0 -1
  274. package/dist/src/generators/event/event.generator.d.ts.map +0 -1
  275. package/dist/src/generators/event/event.generator.js.map +0 -1
  276. package/dist/src/generators/event/index.d.ts.map +0 -1
  277. package/dist/src/generators/event/index.js.map +0 -1
  278. package/dist/src/generators/frontend/frontendGenerator.core.d.ts.map +0 -1
  279. package/dist/src/generators/frontend/frontendGenerator.core.js.map +0 -1
  280. package/dist/src/generators/frontend/index.d.ts.map +0 -1
  281. package/dist/src/generators/frontend/index.js.map +0 -1
  282. package/dist/src/generators/fullstack/fullstackComposer.core.d.ts.map +0 -1
  283. package/dist/src/generators/fullstack/fullstackComposer.core.js.map +0 -1
  284. package/dist/src/generators/fullstack/index.d.ts.map +0 -1
  285. package/dist/src/generators/fullstack/index.js.map +0 -1
  286. package/dist/src/generators/index.d.ts.map +0 -1
  287. package/dist/src/generators/index.js.map +0 -1
  288. package/dist/src/generators/infrastructure/index.d.ts.map +0 -1
  289. package/dist/src/generators/infrastructure/index.js.map +0 -1
  290. package/dist/src/generators/infrastructure/infrastructure.generator.d.ts.map +0 -1
  291. package/dist/src/generators/infrastructure/infrastructure.generator.js.map +0 -1
  292. package/dist/src/generators/integration/index.d.ts.map +0 -1
  293. package/dist/src/generators/integration/index.js.map +0 -1
  294. package/dist/src/generators/integration/integrationGenerator.core.d.ts.map +0 -1
  295. package/dist/src/generators/integration/integrationGenerator.core.js.map +0 -1
  296. package/dist/src/generators/job/index.d.ts.map +0 -1
  297. package/dist/src/generators/job/index.js.map +0 -1
  298. package/dist/src/generators/job/job.generator.d.ts.map +0 -1
  299. package/dist/src/generators/job/job.generator.js.map +0 -1
  300. package/dist/src/generators/middleware/index.d.ts.map +0 -1
  301. package/dist/src/generators/middleware/index.js.map +0 -1
  302. package/dist/src/generators/middleware/middleware.generator.d.ts.map +0 -1
  303. package/dist/src/generators/middleware/middleware.generator.js.map +0 -1
  304. package/dist/src/generators/model/index.d.ts.map +0 -1
  305. package/dist/src/generators/model/index.js.map +0 -1
  306. package/dist/src/generators/model/model.generator.d.ts.map +0 -1
  307. package/dist/src/generators/model/model.generator.js.map +0 -1
  308. package/dist/src/generators/module/module.generator.d.ts.map +0 -1
  309. package/dist/src/generators/module/module.generator.js.map +0 -1
  310. package/dist/src/generators/project/project.generator.d.ts.map +0 -1
  311. package/dist/src/generators/project/project.generator.js.map +0 -1
  312. package/dist/src/generators/query/query.generator.d.ts.map +0 -1
  313. package/dist/src/generators/query/query.generator.js.map +0 -1
  314. package/dist/src/generators/repository/repository.generator.d.ts.map +0 -1
  315. package/dist/src/generators/repository/repository.generator.js.map +0 -1
  316. package/dist/src/generators/route/index.d.ts.map +0 -1
  317. package/dist/src/generators/route/index.js.map +0 -1
  318. package/dist/src/generators/route/route.generator.d.ts.map +0 -1
  319. package/dist/src/generators/route/route.generator.js.map +0 -1
  320. package/dist/src/generators/service/service.generator.d.ts.map +0 -1
  321. package/dist/src/generators/service/service.generator.js.map +0 -1
  322. package/dist/src/generators/validator/index.d.ts.map +0 -1
  323. package/dist/src/generators/validator/index.js.map +0 -1
  324. package/dist/src/generators/validator/validator.generator.d.ts.map +0 -1
  325. package/dist/src/generators/validator/validator.generator.js.map +0 -1
  326. package/dist/src/index.d.ts.map +0 -1
  327. package/dist/src/index.js.map +0 -1
  328. package/dist/src/installers/dependency.installer.d.ts.map +0 -1
  329. package/dist/src/installers/dependency.installer.js.map +0 -1
  330. package/dist/src/installers/index.d.ts.map +0 -1
  331. package/dist/src/installers/index.js.map +0 -1
  332. package/dist/src/manifest/index.d.ts.map +0 -1
  333. package/dist/src/manifest/index.js.map +0 -1
  334. package/dist/src/manifest/manifestManager.core.d.ts.map +0 -1
  335. package/dist/src/manifest/manifestManager.core.js.map +0 -1
  336. package/dist/src/prompts/backend/api-style.prompt.d.ts.map +0 -1
  337. package/dist/src/prompts/backend/api-style.prompt.js.map +0 -1
  338. package/dist/src/prompts/backend/backend-architecture.prompt.d.ts.map +0 -1
  339. package/dist/src/prompts/backend/backend-architecture.prompt.js.map +0 -1
  340. package/dist/src/prompts/backend/database.prompt.d.ts.map +0 -1
  341. package/dist/src/prompts/backend/database.prompt.js.map +0 -1
  342. package/dist/src/prompts/backend/index.d.ts.map +0 -1
  343. package/dist/src/prompts/backend/index.js.map +0 -1
  344. package/dist/src/prompts/capabilities/capabilities.prompt.d.ts.map +0 -1
  345. package/dist/src/prompts/capabilities/capabilities.prompt.js.map +0 -1
  346. package/dist/src/prompts/capabilities/index.d.ts.map +0 -1
  347. package/dist/src/prompts/capabilities/index.js.map +0 -1
  348. package/dist/src/prompts/frontend/framework.prompt.d.ts.map +0 -1
  349. package/dist/src/prompts/frontend/framework.prompt.js.map +0 -1
  350. package/dist/src/prompts/frontend/frontend-architecture.prompt.d.ts.map +0 -1
  351. package/dist/src/prompts/frontend/frontend-architecture.prompt.js.map +0 -1
  352. package/dist/src/prompts/frontend/index.d.ts.map +0 -1
  353. package/dist/src/prompts/frontend/index.js.map +0 -1
  354. package/dist/src/prompts/index.d.ts.map +0 -1
  355. package/dist/src/prompts/index.js.map +0 -1
  356. package/dist/src/prompts/project/confirmation.prompt.d.ts.map +0 -1
  357. package/dist/src/prompts/project/confirmation.prompt.js.map +0 -1
  358. package/dist/src/prompts/project/index.d.ts.map +0 -1
  359. package/dist/src/prompts/project/index.js.map +0 -1
  360. package/dist/src/prompts/project/project-name.prompt.d.ts.map +0 -1
  361. package/dist/src/prompts/project/project-name.prompt.js.map +0 -1
  362. package/dist/src/prompts/project/project-type.prompt.d.ts.map +0 -1
  363. package/dist/src/prompts/project/project-type.prompt.js.map +0 -1
  364. package/dist/src/prompts/prompts.createProject.d.ts +0 -33
  365. package/dist/src/prompts/prompts.createProject.d.ts.map +0 -1
  366. package/dist/src/prompts/prompts.createProject.js +0 -150
  367. package/dist/src/prompts/prompts.createProject.js.map +0 -1
  368. package/dist/src/prompts/workspace/index.d.ts.map +0 -1
  369. package/dist/src/prompts/workspace/index.js.map +0 -1
  370. package/dist/src/prompts/workspace/package-manager.prompt.d.ts.map +0 -1
  371. package/dist/src/prompts/workspace/package-manager.prompt.js.map +0 -1
  372. package/dist/src/registries/adapter/frontendAdapterRegistry.core.d.ts.map +0 -1
  373. package/dist/src/registries/adapter/frontendAdapterRegistry.core.js.map +0 -1
  374. package/dist/src/registries/adapter/packageManagerRegistry.core.d.ts.map +0 -1
  375. package/dist/src/registries/adapter/packageManagerRegistry.core.js.map +0 -1
  376. package/dist/src/registries/dependency/dependencyRegistry.core.d.ts.map +0 -1
  377. package/dist/src/registries/dependency/dependencyRegistry.core.js.map +0 -1
  378. package/dist/src/registries/dependency/index.d.ts.map +0 -1
  379. package/dist/src/registries/dependency/index.js.map +0 -1
  380. package/dist/src/registries/generator/generatorRegistry.core.d.ts.map +0 -1
  381. package/dist/src/registries/generator/generatorRegistry.core.js.map +0 -1
  382. package/dist/src/registries/generator/index.d.ts.map +0 -1
  383. package/dist/src/registries/generator/index.js.map +0 -1
  384. package/dist/src/registries/index.d.ts.map +0 -1
  385. package/dist/src/registries/index.js.map +0 -1
  386. package/dist/src/resolvers/architecture.resolver.d.ts.map +0 -1
  387. package/dist/src/resolvers/architecture.resolver.js.map +0 -1
  388. package/dist/src/resolvers/capability/capabilityResolver.core.d.ts.map +0 -1
  389. package/dist/src/resolvers/capability/capabilityResolver.core.js.map +0 -1
  390. package/dist/src/resolvers/capability/index.d.ts.map +0 -1
  391. package/dist/src/resolvers/capability/index.js.map +0 -1
  392. package/dist/src/resolvers/configuration/configurationResolver.core.d.ts.map +0 -1
  393. package/dist/src/resolvers/configuration/configurationResolver.core.js.map +0 -1
  394. package/dist/src/resolvers/configuration/index.d.ts.map +0 -1
  395. package/dist/src/resolvers/configuration/index.js.map +0 -1
  396. package/dist/src/resolvers/dependency/dependencyResolver.core.d.ts.map +0 -1
  397. package/dist/src/resolvers/dependency/dependencyResolver.core.js.map +0 -1
  398. package/dist/src/resolvers/dependency/index.d.ts.map +0 -1
  399. package/dist/src/resolvers/dependency/index.js.map +0 -1
  400. package/dist/src/resolvers/index.d.ts.map +0 -1
  401. package/dist/src/resolvers/index.js.map +0 -1
  402. package/dist/src/resolvers/project.resolver.d.ts.map +0 -1
  403. package/dist/src/resolvers/project.resolver.js.map +0 -1
  404. package/dist/src/rollback/index.d.ts.map +0 -1
  405. package/dist/src/rollback/index.js.map +0 -1
  406. package/dist/src/rollback/rollbackManager.core.d.ts.map +0 -1
  407. package/dist/src/rollback/rollbackManager.core.js.map +0 -1
  408. package/dist/src/runners/package-manager/index.d.ts.map +0 -1
  409. package/dist/src/runners/package-manager/index.js.map +0 -1
  410. package/dist/src/runners/package-manager/packageManagerRunner.core.d.ts.map +0 -1
  411. package/dist/src/runners/package-manager/packageManagerRunner.core.js.map +0 -1
  412. package/dist/src/runners/process/index.d.ts.map +0 -1
  413. package/dist/src/runners/process/index.js.map +0 -1
  414. package/dist/src/runners/process/processRunner.core.d.ts.map +0 -1
  415. package/dist/src/runners/process/processRunner.core.js.map +0 -1
  416. package/dist/src/runners/task/index.d.ts.map +0 -1
  417. package/dist/src/runners/task/index.js.map +0 -1
  418. package/dist/src/runners/task/taskRunner.core.d.ts.map +0 -1
  419. package/dist/src/runners/task/taskRunner.core.js.map +0 -1
  420. package/dist/src/scaffolders/framework.scaffolder.d.ts.map +0 -1
  421. package/dist/src/scaffolders/framework.scaffolder.js.map +0 -1
  422. package/dist/src/scaffolders/index.d.ts.map +0 -1
  423. package/dist/src/scaffolders/index.js.map +0 -1
  424. package/dist/src/scaffolders/scaffolder.helper.d.ts.map +0 -1
  425. package/dist/src/scaffolders/scaffolder.helper.js.map +0 -1
  426. package/dist/src/scripts/postinstall.cjs +0 -56
  427. package/dist/src/templates/microservice/index.d.ts.map +0 -1
  428. package/dist/src/templates/microservice/index.js.map +0 -1
  429. package/dist/src/templates/microservice/microservice.template.d.ts.map +0 -1
  430. package/dist/src/templates/microservice/microservice.template.js.map +0 -1
  431. package/dist/src/templates/modular-monolith/index.d.ts.map +0 -1
  432. package/dist/src/templates/modular-monolith/index.js.map +0 -1
  433. package/dist/src/templates/modular-monolith/modularMonolith.template.d.ts.map +0 -1
  434. package/dist/src/templates/modular-monolith/modularMonolith.template.js.map +0 -1
  435. package/dist/src/templates/monolith/index.d.ts.map +0 -1
  436. package/dist/src/templates/monolith/index.js.map +0 -1
  437. package/dist/src/templates/monolith/monolith.template.d.ts.map +0 -1
  438. package/dist/src/templates/monolith/monolith.template.js.map +0 -1
  439. package/dist/src/types/index.d.ts.map +0 -1
  440. package/dist/src/types/index.js.map +0 -1
  441. package/dist/src/types/projectConfiguration.type.d.ts.map +0 -1
  442. package/dist/src/types/projectConfiguration.type.js.map +0 -1
  443. package/dist/src/types/scaffold.type.d.ts.map +0 -1
  444. package/dist/src/types/scaffold.type.js.map +0 -1
  445. package/dist/src/utils/index.d.ts.map +0 -1
  446. package/dist/src/utils/index.js.map +0 -1
  447. package/dist/src/utils/utils.detect.d.ts.map +0 -1
  448. package/dist/src/utils/utils.detect.js.map +0 -1
  449. package/dist/src/utils/utils.exec.d.ts.map +0 -1
  450. package/dist/src/utils/utils.exec.js.map +0 -1
  451. package/dist/src/utils/utils.fileSystem.d.ts.map +0 -1
  452. package/dist/src/utils/utils.fileSystem.js.map +0 -1
  453. package/dist/src/utils/utils.name.d.ts.map +0 -1
  454. package/dist/src/utils/utils.name.js.map +0 -1
  455. package/dist/src/validators/compatibility/compatibilityValidator.core.d.ts.map +0 -1
  456. package/dist/src/validators/compatibility/compatibilityValidator.core.js.map +0 -1
  457. package/dist/src/validators/compatibility/index.d.ts.map +0 -1
  458. package/dist/src/validators/compatibility/index.js.map +0 -1
  459. package/dist/src/validators/environment/environmentValidator.core.d.ts.map +0 -1
  460. package/dist/src/validators/environment/environmentValidator.core.js.map +0 -1
  461. package/dist/src/validators/environment/index.d.ts.map +0 -1
  462. package/dist/src/validators/environment/index.js.map +0 -1
  463. package/dist/src/validators/index.d.ts.map +0 -1
  464. package/dist/src/validators/index.js.map +0 -1
  465. package/dist/src/validators/project/index.d.ts.map +0 -1
  466. package/dist/src/validators/project/index.js.map +0 -1
  467. package/dist/src/validators/project/projectValidator.core.d.ts.map +0 -1
  468. package/dist/src/validators/project/projectValidator.core.js.map +0 -1
  469. package/src/scripts/postinstall.cjs +0 -56
@@ -2,10 +2,9 @@
2
2
  * zudojs-cli — Generate Command
3
3
  *
4
4
  * The `zudojs generate` (alias: `g`) command.
5
- * Reads zudojs.config.ts to determine project architecture.
5
+ * Reads the project manifest to determine the architecture and where the
6
+ * backend lives, then places the schematic accordingly.
6
7
  */
7
- import { existsSync, readFileSync } from "node:fs";
8
- import { join } from "node:path";
9
8
  import { generateService } from "../generators/service/service.generator.js";
10
9
  import { generateModule } from "../generators/module/module.generator.js";
11
10
  import { generateCommand } from "../generators/command/command.generator.js";
@@ -19,8 +18,9 @@ import { generateRoute } from "../generators/route/route.generator.js";
19
18
  import { generateModel } from "../generators/model/model.generator.js";
20
19
  import { generateDto } from "../generators/dto/dto.generator.js";
21
20
  import { generateValidator } from "../generators/validator/validator.generator.js";
22
- import { ManifestManager } from "../manifest/manifestManager.core.js";
23
21
  import { CLIGenerationError, CLIValidationError } from "../errors/index.js";
22
+ import { assertGeneratableName, assertSafePathSegment, } from "../utils/utils.name.js";
23
+ import { resolveProjectLayout } from "../resolvers/layout/projectLayout.core.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") {
@@ -56,19 +82,20 @@ function getBasePath(architecture, schematic) {
56
82
  return "src";
57
83
  }
58
84
  }
59
- 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;
85
+ /**
86
+ * Prefix under which backend schematics are generated.
87
+ *
88
+ * A fullstack project keeps its backend in `apps/api`; generating into the
89
+ * workspace root's `src/` produced files no app compiled. Microservice apps
90
+ * are addressed inside getArchitectureRoot, relative to that prefix.
91
+ */
92
+ function backendPrefix(cwd) {
93
+ const layout = resolveProjectLayout(cwd);
94
+ const [first] = layout?.backendDirs ?? [];
95
+ if (layout?.projectType === "fullstack" && first !== undefined && first !== cwd) {
96
+ return "apps/api/";
97
+ }
98
+ return "";
72
99
  }
73
100
  export async function runGenerateCommand(context) {
74
101
  const schematic = context.values.schematic;
@@ -83,14 +110,26 @@ export async function runGenerateCommand(context) {
83
110
  if (!name) {
84
111
  throw new CLIValidationError("Resource name is required.");
85
112
  }
113
+ // Reject names that normalize to nothing (`zudojs generate event "..."`
114
+ // wrote src/events/.event.ts with an anonymous export), and reject option
115
+ // values that are interpolated verbatim into a generated path. `--service ..`
116
+ // used to place files outside the schematic's base directory.
117
+ assertGeneratableName(name, "resource name");
118
+ if (service !== undefined) {
119
+ assertSafePathSegment(service, "--service");
120
+ }
121
+ if (moduleName !== undefined) {
122
+ assertSafePathSegment(moduleName, "--module");
123
+ }
86
124
  const cwd = context.cwd;
87
- const architecture = readZudojsArchitecture(cwd);
88
- const manifest = await new ManifestManager(cwd).read();
89
- if (architecture) {
90
- context.logger.info(`Detected architecture: ${architecture}`);
125
+ const layout = resolveProjectLayout(cwd);
126
+ const architecture = layout?.architecture ?? null;
127
+ if (layout) {
128
+ context.logger.info(`Detected architecture: ${layout.architecture}`);
91
129
  }
92
130
  else {
93
- context.logger.warn("No zudojs.config.ts found. Run `zudojs create` first to scaffold a Zudojs project.");
131
+ context.logger.warn("No Zudojs project detected (no .zudojs/manifest.json, zudojs.config.ts " +
132
+ "or `zudojs` field in package.json). Run `zudojs create` first.");
94
133
  }
95
134
  if (architecture === "microservice" && schematic === "service") {
96
135
  context.logger.warn('In microservice architecture, prefer "zudojs generate module" — services are top-level apps.');
@@ -104,42 +143,53 @@ export async function runGenerateCommand(context) {
104
143
  dryRun,
105
144
  architecture: architecture ?? undefined,
106
145
  }, cwd);
107
- context.logger.info(`Generated ${result.length} files:`);
146
+ if (dryRun) {
147
+ context.logger.info(`Dry run: ${result.length} files would be generated (nothing written):`);
148
+ }
149
+ else {
150
+ context.logger.info(`Generated ${result.length} files:`);
151
+ }
108
152
  for (const file of result) {
109
153
  context.logger.info(` - ${file}`);
110
154
  }
111
155
  }
112
156
  async function runSchematic(schematic, name, options, cwd) {
113
157
  try {
114
- const basePath = getBasePath(options.architecture, schematic);
115
- const moduleName = options.module ?? name;
158
+ const basePath = backendPrefix(cwd) +
159
+ getBasePath(options.architecture, schematic, options.module, options.service);
160
+ const dryRun = options.dryRun;
161
+ // In the microservice layout `--service` selected the owning app and is
162
+ // already part of basePath, so it must not nest the schematic again.
163
+ const cqrsService = options.architecture === "microservice"
164
+ ? undefined
165
+ : (options.service ?? "default");
116
166
  switch (schematic) {
117
167
  case "service":
118
- return await generateService({ name, basePath }, cwd);
168
+ return await generateService({ name, basePath, dryRun }, cwd);
119
169
  case "module":
120
- return await generateModule({ name, feature: true, basePath }, cwd);
170
+ return await generateModule({ name, feature: true, basePath, dryRun }, cwd);
121
171
  case "command":
122
- return await generateCommand({ name, service: options.service ?? "default", basePath }, cwd);
172
+ return await generateCommand({ name, ...(cqrsService ? { service: cqrsService } : {}), basePath, dryRun }, cwd);
123
173
  case "query":
124
- return await generateQuery({ name, service: options.service ?? "default", basePath }, cwd);
174
+ return await generateQuery({ name, ...(cqrsService ? { service: cqrsService } : {}), basePath, dryRun }, cwd);
125
175
  case "controller":
126
- return await generateController({ name, basePath }, cwd);
176
+ return await generateController({ name, basePath, dryRun }, cwd);
127
177
  case "repository":
128
- return await generateRepository({ name, basePath }, cwd);
178
+ return await generateRepository({ name, basePath, dryRun }, cwd);
129
179
  case "middleware":
130
- return await generateMiddleware({ name, basePath }, cwd);
180
+ return await generateMiddleware({ name, basePath, dryRun }, cwd);
131
181
  case "event":
132
- return await generateEvent({ name, basePath }, cwd);
182
+ return await generateEvent({ name, basePath, dryRun }, cwd);
133
183
  case "job":
134
- return await generateJob({ name, basePath }, cwd);
184
+ return await generateJob({ name, basePath, dryRun }, cwd);
135
185
  case "route":
136
- return await generateRoute({ name, basePath }, cwd);
186
+ return await generateRoute({ name, basePath, dryRun }, cwd);
137
187
  case "model":
138
- return await generateModel({ name, basePath }, cwd);
188
+ return await generateModel({ name, basePath, dryRun }, cwd);
139
189
  case "dto":
140
- return await generateDto({ name, basePath }, cwd);
190
+ return await generateDto({ name, basePath, dryRun }, cwd);
141
191
  case "validator":
142
- return await generateValidator({ name, basePath }, cwd);
192
+ return await generateValidator({ name, basePath, dryRun }, cwd);
143
193
  default:
144
194
  throw new CLIValidationError(`Unknown schematic: "${schematic}". Available: ${VALID_SCHEMATICS.join(", ")}.`);
145
195
  }
@@ -3,42 +3,73 @@
3
3
  *
4
4
  * The `zudojs info` command.
5
5
  */
6
- import { readFileSync, existsSync } from "node:fs";
7
- import { join } from "node:path";
6
+ import { readFileSync } from "node:fs";
7
+ import { join, relative } from "node:path";
8
+ import { CLI_VERSION } from "../constants/index.js";
9
+ import { checkForNewerVersion } from "../cliVersion/cliVersion.update.js";
10
+ import { resolveProjectLayout } from "../resolvers/layout/projectLayout.core.js";
8
11
  export async function runInfoCommand(context) {
9
- const pkgPath = join(context.cwd, "package.json");
12
+ context.logger.info("Zudojs CLI");
13
+ context.logger.info(` Version: ${CLI_VERSION}`);
14
+ context.logger.info(` Node.js: ${process.version}`);
15
+ const update = await checkForNewerVersion(CLI_VERSION, { env: context.env });
16
+ if (update.latest) {
17
+ context.logger.info(` Update available: ${update.latest} (npm install -g zudojs-cli@latest)`);
18
+ }
19
+ context.logger.info("");
20
+ const layout = resolveProjectLayout(context.cwd);
21
+ if (!layout) {
22
+ context.logger.info("Not in a Zudojs project directory.");
23
+ context.logger.info("Run `zudojs create <project-name>` to create a new project.");
24
+ return;
25
+ }
10
26
  let projectName = "unknown";
27
+ let projectVersion = "0.0.0";
11
28
  try {
12
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
13
- projectName = pkg.name ?? "unknown";
14
- const zudojsDeps = Object.entries(pkg.dependencies ?? {})
15
- .filter(([name]) => name.startsWith("@zudojs/"))
16
- .sort(([a], [b]) => a.localeCompare(b));
17
- context.logger.info("Zudojs Project Info");
18
- context.logger.info("");
19
- context.logger.info(`Project: ${projectName}`);
20
- context.logger.info(`Version: ${pkg.version ?? "0.0.0"}`);
21
- const hasPnpm = existsSync(join(context.cwd, "pnpm-lock.yaml"));
22
- const hasYarn = existsSync(join(context.cwd, "yarn.lock"));
23
- const packageManager = hasPnpm ? "pnpm" : hasYarn ? "yarn" : "npm";
24
- context.logger.info(`Package Manager: ${packageManager}`);
25
- context.logger.info("");
26
- context.logger.info("Zudojs Dependencies:");
27
- if (zudojsDeps.length === 0) {
28
- context.logger.info(" (none)");
29
- }
30
- else {
31
- for (const [name, version] of zudojsDeps) {
32
- context.logger.info(` ${name}: ${version}`);
29
+ const pkg = JSON.parse(readFileSync(join(layout.root, "package.json"), "utf-8"));
30
+ projectName = pkg.name ?? projectName;
31
+ projectVersion = pkg.version ?? projectVersion;
32
+ }
33
+ catch {
34
+ // A project without a root package.json still has a manifest.
35
+ }
36
+ context.logger.info("Project");
37
+ context.logger.info(` Name: ${projectName}`);
38
+ context.logger.info(` Version: ${projectVersion}`);
39
+ context.logger.info(` Type: ${layout.projectType}`);
40
+ if (layout.backendDirs.length > 0) {
41
+ context.logger.info(` Architecture: ${layout.architecture}`);
42
+ }
43
+ if (layout.frontendFramework) {
44
+ context.logger.info(` Frontend: ${layout.frontendFramework}`);
45
+ }
46
+ context.logger.info(` Package manager: ${layout.packageManager}`);
47
+ if (layout.services.length > 0) {
48
+ context.logger.info(` Services: ${layout.services.join(", ")}`);
49
+ }
50
+ context.logger.info("");
51
+ context.logger.info("Zudojs dependencies");
52
+ const deps = new Map();
53
+ for (const dir of layout.backendDirs) {
54
+ try {
55
+ const pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf-8"));
56
+ for (const [name, version] of Object.entries(pkg.dependencies ?? {})) {
57
+ if (name.startsWith("@zudojs/")) {
58
+ const where = relative(layout.root, dir);
59
+ deps.set(where === "" ? name : `${name} (${where})`, version);
60
+ }
33
61
  }
34
62
  }
63
+ catch {
64
+ // Reported by `zudojs doctor`.
65
+ }
35
66
  }
36
- catch {
37
- context.logger.info("Zudojs CLI Info");
38
- context.logger.info("");
39
- context.logger.info("Not in a Zudojs project directory.");
40
- context.logger.info("");
41
- context.logger.info("Run `zudojs create <project-name>` to create a new project.");
67
+ if (deps.size === 0) {
68
+ context.logger.info(" (none)");
69
+ return;
70
+ }
71
+ for (const [name, version] of [...deps.entries()].sort(([a], [b]) => a.localeCompare(b))) {
72
+ context.logger.info(` ${name}: ${version}`);
42
73
  }
43
74
  }
44
75
  //# sourceMappingURL=info.command.js.map
@@ -3,7 +3,25 @@
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
+ /**
8
+ * Version range every generated project depends on for `@zudojs/*` packages.
9
+ *
10
+ * This is a caret range, not an exact pin, on purpose. The framework
11
+ * packages are released independently, so at any moment their latest
12
+ * versions differ (`@zudojs/openapi` went to 1.1.0 while the rest stayed at
13
+ * 1.0.0). An exact `1.0.0` pin made `pnpm install` in every freshly created
14
+ * project abort with `ERR_PNPM_NO_MATCHING_VERSION` for the package that had
15
+ * moved on. A range resolves each package to its newest compatible release.
16
+ */
17
+ export declare const ZUDOJS_PACKAGES_VERSION: "^1.0.0";
18
+ /**
19
+ * Packages installed by `zudojs add <feature>`.
20
+ *
21
+ * Also used by `zudojs doctor` to verify that every feature recorded in a
22
+ * project is backed by its package.
23
+ */
24
+ export declare const FEATURE_PACKAGES: Readonly<Record<string, readonly string[]>>;
7
25
  export declare const ARCHITECTURE_CHOICES: readonly [{
8
26
  readonly value: "monolith";
9
27
  readonly label: "Monolith";
@@ -3,7 +3,38 @@
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
+ /**
8
+ * Version range every generated project depends on for `@zudojs/*` packages.
9
+ *
10
+ * This is a caret range, not an exact pin, on purpose. The framework
11
+ * packages are released independently, so at any moment their latest
12
+ * versions differ (`@zudojs/openapi` went to 1.1.0 while the rest stayed at
13
+ * 1.0.0). An exact `1.0.0` pin made `pnpm install` in every freshly created
14
+ * project abort with `ERR_PNPM_NO_MATCHING_VERSION` for the package that had
15
+ * moved on. A range resolves each package to its newest compatible release.
16
+ */
17
+ export const ZUDOJS_PACKAGES_VERSION = "^1.0.0";
18
+ /**
19
+ * Packages installed by `zudojs add <feature>`.
20
+ *
21
+ * Also used by `zudojs doctor` to verify that every feature recorded in a
22
+ * project is backed by its package.
23
+ */
24
+ export const FEATURE_PACKAGES = {
25
+ database: ["@zudojs/database"],
26
+ queue: ["@zudojs/queue"],
27
+ messaging: ["@zudojs/messaging"],
28
+ openapi: ["@zudojs/openapi"],
29
+ observability: ["@zudojs/observability"],
30
+ security: ["@zudojs/security"],
31
+ cache: ["@zudojs/cache"],
32
+ storage: ["@zudojs/storage"],
33
+ // Used to install @zudojs/queue; the scheduler package exists and is the
34
+ // one the feature name promises.
35
+ scheduler: ["@zudojs/scheduler"],
36
+ docs: ["@zudojs/docs"],
37
+ };
7
38
  export const ARCHITECTURE_CHOICES = [
8
39
  { value: "monolith", label: "Monolith" },
9
40
  { 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
@@ -1,17 +1,17 @@
1
1
  /**
2
2
  * zudojs-cli — Controller Generator
3
3
  */
4
- import { writeFileTree } from "../../utils/utils.fileSystem.js";
5
- import { CLIGenerationError, CLIValidationError } from "../../errors/index.js";
6
- import { normalizeName } from "../../utils/utils.name.js";
4
+ import { writeFileTree, mergeBarrelExport, } from "../../utils/utils.fileSystem.js";
5
+ import { CLIGenerationError } from "../../errors/index.js";
6
+ import { normalizeName, toPascalCase } from "../../utils/utils.name.js";
7
7
  export async function generateController(options, cwd) {
8
8
  const name = normalizeName(options.name);
9
- const nameCamel = name
10
- .replace(/-([a-z])/g, (_m, c) => c.toUpperCase())
11
- .replace(/^./, (c) => c.toUpperCase());
9
+ const nameCamel = toPascalCase(options.name);
12
10
  const basePath = options.basePath ?? "";
11
+ const prefix = basePath ? `${basePath}/` : "";
12
+ const indexPath = `${prefix}controllers/index.ts`;
13
13
  const files = {
14
- [`${basePath ? `${basePath}/` : ""}controllers/${name}.controller.ts`]: `import { createLogger } from "@zudojs/logger";
14
+ [`${prefix}controllers/${name}.controller.ts`]: `import { createLogger } from "@zudojs/logger";
15
15
 
16
16
  export class ${nameCamel}Controller {
17
17
  private readonly logger = createLogger({ name: "${name}-controller" });
@@ -30,9 +30,12 @@ export class ${nameCamel}Controller {
30
30
  }
31
31
  }
32
32
  `,
33
- [`${basePath ? `${basePath}/` : ""}controllers/index.ts`]: `export { ${nameCamel}Controller } from "./${name}.controller.js";
34
- `,
33
+ // Merge with any existing barrel content instead of overwriting it.
34
+ [indexPath]: mergeBarrelExport(cwd, indexPath, `export { ${nameCamel}Controller } from "./${name}.controller.js";`),
35
35
  };
36
+ if (options.dryRun) {
37
+ return Object.keys(files);
38
+ }
36
39
  try {
37
40
  await writeFileTree(cwd, files);
38
41
  return Object.keys(files);
@@ -6,6 +6,7 @@
6
6
  export interface GenerateDtoOptions {
7
7
  readonly name: string;
8
8
  readonly basePath: string;
9
+ readonly dryRun?: boolean;
9
10
  }
10
11
  export declare function generateDto(options: GenerateDtoOptions, cwd: string): Promise<string[]>;
11
12
  //# sourceMappingURL=dto.generator.d.ts.map
@@ -4,17 +4,23 @@
4
4
  * Generates DTO files.
5
5
  */
6
6
  import { writeFileTree } from "../../utils/utils.fileSystem.js";
7
+ import { normalizeName, toPascalCase } from "../../utils/utils.name.js";
7
8
  export async function generateDto(options, cwd) {
9
+ const name = normalizeName(options.name);
10
+ const namePascal = toPascalCase(options.name);
8
11
  const files = {
9
- [`${options.basePath}/dtos/${options.name}.dto.ts`]: `/**
10
- * ${options.name} DTO.
12
+ [`${options.basePath}/dtos/${name}.dto.ts`]: `/**
13
+ * ${name} DTO.
11
14
  */
12
15
 
13
- export interface Create${options.name}Dto {
16
+ export interface Create${namePascal}Dto {
14
17
  readonly name: string;
15
18
  }
16
19
  `,
17
20
  };
21
+ if (options.dryRun) {
22
+ return Object.keys(files);
23
+ }
18
24
  await writeFileTree(cwd, files);
19
25
  return Object.keys(files);
20
26
  }
@@ -6,6 +6,7 @@
6
6
  export interface GenerateEventOptions {
7
7
  readonly name: string;
8
8
  readonly basePath: string;
9
+ readonly dryRun?: boolean;
9
10
  }
10
11
  export declare function generateEvent(options: GenerateEventOptions, cwd: string): Promise<string[]>;
11
12
  //# sourceMappingURL=event.generator.d.ts.map
@@ -4,18 +4,24 @@
4
4
  * Generates event files.
5
5
  */
6
6
  import { writeFileTree } from "../../utils/utils.fileSystem.js";
7
+ import { normalizeName, toPascalCase } from "../../utils/utils.name.js";
7
8
  export async function generateEvent(options, cwd) {
9
+ const name = normalizeName(options.name);
10
+ const namePascal = toPascalCase(options.name);
8
11
  const files = {
9
- [`${options.basePath}/events/${options.name}.event.ts`]: `/**
10
- * ${options.name} event.
12
+ [`${options.basePath}/events/${name}.event.ts`]: `/**
13
+ * ${name} event.
11
14
  */
12
15
 
13
- export interface ${options.name}Event {
14
- readonly type: "${options.name}";
16
+ export interface ${namePascal}Event {
17
+ readonly type: "${name}";
15
18
  readonly timestamp: Date;
16
19
  }
17
20
  `,
18
21
  };
22
+ if (options.dryRun) {
23
+ return Object.keys(files);
24
+ }
19
25
  await writeFileTree(cwd, files);
20
26
  return Object.keys(files);
21
27
  }
@@ -14,6 +14,8 @@ export interface FrontendGenerationOptions {
14
14
  readonly architecture?: "zudojs-standard" | "feature-based" | "minimal" | "framework-default";
15
15
  readonly language?: "typescript" | "javascript";
16
16
  readonly packageManager?: "pnpm" | "npm" | "yarn" | "bun";
17
+ /** `false` records dependencies in package.json instead of installing. */
18
+ readonly installDeps?: boolean;
17
19
  }
18
20
  /**
19
21
  * Frontend generation result.
@@ -7,6 +7,9 @@ import { FrontendAdapterRegistry } from "../../registries/adapter/frontendAdapte
7
7
  import { PackageManagerRegistry } from "../../registries/adapter/packageManagerRegistry.core.js";
8
8
  import { DependencyResolver } from "../../resolvers/dependency/dependencyResolver.core.js";
9
9
  import { CLIGenerationError } from "../../errors/index.js";
10
+ import { runFrontendPipeline } from "./frontendPipeline.js";
11
+ import { writeFileTree } from "../../utils/utils.fileSystem.js";
12
+ import { renderPnpmWorkspaceFile } from "../../templates/shared/pnpm.template.js";
10
13
  /**
11
14
  * Generates frontend projects using framework adapters.
12
15
  */
@@ -39,38 +42,22 @@ export class FrontendGenerator {
39
42
  linting: true,
40
43
  formatting: true,
41
44
  },
45
+ ...(options.installDeps === false ? { skipInstall: true } : {}),
42
46
  };
43
47
  const files = [];
44
48
  const errors = [];
45
49
  try {
46
- // 1. Scaffold using official tool
47
- await adapter.scaffold(context);
48
- files.push("scaffold");
49
- // 2. Apply Zudojs structure
50
- await adapter.applyZudojsStructure(context);
51
- files.push("structure");
52
- // 3. Resolve and install dependencies
53
- const deps = adapter.getDependencies(context);
54
- const resolution = this.dependencyResolver.resolve(deps);
55
- if (resolution.conflicts.length > 0) {
56
- for (const conflict of resolution.conflicts) {
57
- errors.push(`Conflict: ${conflict.reason}`);
58
- }
59
- return { success: false, framework: options.framework, files, errors };
60
- }
61
- // 4. Install dependencies
62
- const pmName = options.packageManager ?? "pnpm";
63
- const packageManager = this.packageManagerRegistry.get(pmName);
64
- if (packageManager) {
65
- const devDeps = resolution.devDependencies.map((d) => d.name);
66
- await packageManager.addDev(options.projectPath, devDeps);
67
- files.push("dependencies");
68
- }
69
- // 5. Validate
70
- const validation = await adapter.validate(context);
71
- if (!validation.valid) {
72
- errors.push(...validation.errors);
50
+ // A frontend-only project is its own pnpm root. Vite depends on
51
+ // esbuild, whose install script pnpm 10+ refuses without this list,
52
+ // and the pipeline installs dependencies right after scaffolding.
53
+ if (context.packageManager === "pnpm") {
54
+ await writeFileTree(context.projectPath, {
55
+ "pnpm-workspace.yaml": renderPnpmWorkspaceFile(),
56
+ });
73
57
  }
58
+ const outcome = await runFrontendPipeline(adapter, context, this.packageManagerRegistry, this.dependencyResolver);
59
+ files.push(...outcome.files);
60
+ errors.push(...outcome.errors);
74
61
  }
75
62
  catch (error) {
76
63
  errors.push(error instanceof Error ? error.message : String(error));