zudojs-cli 0.1.2 → 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 +169 -51
  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 +72 -43
  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 -0
  87. package/dist/src/templates/microservice/microservice.template.js +148 -162
  88. package/dist/src/templates/modular-monolith/modularMonolith.template.js +45 -76
  89. package/dist/src/templates/monolith/monolith.template.d.ts +1 -0
  90. package/dist/src/templates/monolith/monolith.template.js +48 -68
  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 -150
  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
@@ -17,72 +17,111 @@
17
17
  * ├── infrastructure/
18
18
  * ├── package.json
19
19
  * ├── pnpm-workspace.yaml
20
+ * ├── zudojs.config.ts
20
21
  * ├── docker-compose.yml
21
22
  * └── README.md
22
23
  * ```
23
24
  */
25
+ import { ZUDOJS_PACKAGES_VERSION } from "../../constants/index.js";
26
+ import { normalizeName } from "../../utils/utils.name.js";
27
+ import { RUNTIME_APP_DEPENDENCIES, moduleSpec, renderAppFile, renderModuleFile, renderServerFile, renderZudojsConfig, } from "../shared/index.js";
28
+ /** Default service names used when none are provided. */
29
+ export const DEFAULT_MICROSERVICE_SERVICES = [
30
+ "identity",
31
+ "enrollment",
32
+ "assessment",
33
+ "notification",
34
+ ];
35
+ /**
36
+ * The gateway app is always generated at `apps/gateway`, so "gateway" is a
37
+ * reserved name: a service called `gateway` would produce a second, competing
38
+ * gateway at `apps/services/gateway`.
39
+ */
40
+ export const RESERVED_MICROSERVICE_APP_NAMES = ["gateway"];
41
+ /**
42
+ * Normalizes a requested service list into the service apps generated under
43
+ * `apps/services/`. Reserved names and duplicates are dropped; an empty list
44
+ * falls back to DEFAULT_MICROSERVICE_SERVICES.
45
+ */
46
+ export function resolveMicroserviceServices(requested) {
47
+ const normalized = requested
48
+ .map((service) => normalizeName(service))
49
+ .filter((service) => service.length > 0 &&
50
+ !RESERVED_MICROSERVICE_APP_NAMES.some((reserved) => reserved === service));
51
+ const unique = [...new Set(normalized)];
52
+ return unique.length > 0 ? unique : [...DEFAULT_MICROSERVICE_SERVICES];
53
+ }
24
54
  export function generateMicroserviceFiles(options) {
25
55
  const nameSlug = options.projectName
26
56
  .replace(/[^a-z0-9-]+/gi, "-")
27
57
  .toLowerCase();
28
- const services = options.services.length > 0
29
- ? options.services
30
- : ["identity", "enrollment", "assessment", "notification"];
58
+ const services = resolveMicroserviceServices(options.services);
31
59
  const files = {};
32
60
  // Root package.json (workspace root)
33
61
  const rootScripts = {
34
62
  dev: options.packageManager === "npm"
35
- ? "npm run dev --workspaces"
63
+ ? "npm run dev --workspaces --if-present"
36
64
  : options.packageManager === "yarn"
37
- ? "yarn dev"
65
+ ? "yarn workspaces run dev"
38
66
  : options.packageManager === "bun"
39
- ? "bun run dev"
67
+ ? "bun run --filter '*' dev"
40
68
  : "pnpm -r run dev",
41
69
  build: options.packageManager === "npm"
42
- ? "npm run build --workspaces"
70
+ ? "npm run build --workspaces --if-present"
43
71
  : options.packageManager === "yarn"
44
- ? "yarn build"
72
+ ? "yarn workspaces run build"
45
73
  : options.packageManager === "bun"
46
- ? "bun run build"
74
+ ? "bun run --filter '*' build"
47
75
  : "pnpm -r run build",
48
76
  typecheck: options.packageManager === "npm"
49
- ? "npm run typecheck --workspaces"
77
+ ? "npm run typecheck --workspaces --if-present"
50
78
  : options.packageManager === "yarn"
51
- ? "yarn typecheck"
79
+ ? "yarn workspaces run typecheck"
52
80
  : options.packageManager === "bun"
53
- ? "bun run typecheck"
81
+ ? "bun run --filter '*' typecheck"
54
82
  : "pnpm -r run typecheck",
55
83
  };
84
+ const workspaceGlobs = ["apps/gateway", "apps/services/*"];
56
85
  files["package.json"] =
57
86
  JSON.stringify({
58
87
  name: nameSlug,
59
88
  version: "0.1.0",
60
89
  private: true,
90
+ type: "module",
61
91
  description: `Microservice architecture built with Zudojs framework`,
92
+ zudojs: {
93
+ projectType: "backend",
94
+ architecture: "microservice",
95
+ features: [],
96
+ },
97
+ ...(options.packageManager === "pnpm"
98
+ ? {}
99
+ : { workspaces: workspaceGlobs }),
62
100
  scripts: rootScripts,
63
101
  devDependencies: {
64
102
  tsx: "^4.7.0",
65
103
  typescript: "^5.7.0",
66
104
  },
67
105
  }, null, 2) + "\n";
68
- files["pnpm-workspace.yaml"] = `packages:
69
- - gateway
70
- - services/*
71
- `;
72
- // Docker Compose
106
+ if (options.packageManager === "pnpm") {
107
+ files["pnpm-workspace.yaml"] = `packages:
108
+ ${workspaceGlobs.map((g) => ` - "${g}"`).join("\n")}
109
+ `;
110
+ }
111
+ // Docker Compose — gateway on 3000, service i on 3001+i.
73
112
  let composeServices = "";
74
113
  for (let i = 0; i < services.length; i++) {
75
114
  const svc = services[i];
76
- const port = 3000 + i;
115
+ const port = 3001 + i;
77
116
  composeServices += ` ${svc}:
78
117
  build:
79
118
  context: .
80
119
  dockerfile: apps/services/${svc}/Dockerfile
81
120
  ports:
82
- - "${port}:3000"
121
+ - "${port}:${port}"
83
122
  environment:
84
123
  - NODE_ENV=development
85
- - PORT=3000
124
+ - PORT=${port}
86
125
  depends_on: []
87
126
  `;
88
127
  }
@@ -100,13 +139,19 @@ ${composeServices}
100
139
  volumes:
101
140
  ${services.map((s) => `${s}-data:`).join("\n ")}
102
141
  `;
142
+ files["zudojs.config.ts"] = renderZudojsConfig({
143
+ projectName: nameSlug,
144
+ projectType: "backend",
145
+ architecture: "microservice",
146
+ });
103
147
  files[".env.example"] = `NODE_ENV=development
104
148
  PORT=3000
105
149
  `;
106
150
  files[".gitignore"] = `node_modules/
107
151
  dist/
108
152
  .env
109
- *.log.data/
153
+ *.log
154
+ .data/
110
155
  `;
111
156
  files["README.md"] = `# ${options.projectName}
112
157
 
@@ -114,13 +159,14 @@ A microservice architecture built with the Zudojs framework.
114
159
 
115
160
  ## Services
116
161
 
117
- ${services.map((s, i) => `- **${s}** - Port ${3000 + i}`).join("\n")}
162
+ - **gateway** - Port 3000
163
+ ${services.map((s, i) => `- **${s}** - Port ${3001 + i}`).join("\n")}
118
164
 
119
165
  ## Getting Started
120
166
 
121
167
  \`\`\`bash
122
- ${options.packageManager === "npm" ? "<SECRET_3ff5e0e0> install" : options.packageManager === "yarn" ? "yarn install" : options.packageManager === "bun" ? "bun install" : "pnpm install"}
123
- ${options.packageManager === "npm" ? "<SECRET_3ff5e0e0> run dev" : options.packageManager === "yarn" ? "yarn dev" : options.packageManager === "bun" ? "bun run dev" : "pnpm dev"}
168
+ ${options.packageManager === "npm" ? "npm install" : options.packageManager === "yarn" ? "yarn install" : options.packageManager === "bun" ? "bun install" : "pnpm install"}
169
+ ${options.packageManager === "npm" ? "npm run dev" : options.packageManager === "yarn" ? "yarn dev" : options.packageManager === "bun" ? "bun run dev" : "pnpm dev"}
124
170
  \`\`\`
125
171
 
126
172
  ## Docker
@@ -135,35 +181,21 @@ MIT
135
181
  `;
136
182
  // Shared types
137
183
  files["src/types/index.ts"] = ``;
138
- // Gateway service
139
- const gatewayDeps = ["@zudojs/http", "@zudojs/config", "@zudojs/logger"];
140
- files["apps/gateway/package.json"] =
141
- JSON.stringify({
142
- name: "@zudojs/gateway",
143
- version: "0.1.0",
144
- private: true,
145
- type: "module",
146
- scripts: {
147
- dev: "node --import tsx watch src/server.ts",
148
- start: "node dist/server.js",
149
- build: "tsc",
150
- typecheck: "tsc --noEmit",
151
- },
152
- dependencies: Object.fromEntries(gatewayDeps.map((d) => [d, "workspace:*"])),
153
- devDependencies: {
154
- tsx: "^4.7.0",
155
- typescript: "^5.7.0",
156
- "@types/node": "^22.0.0",
157
- },
158
- }, null, 2) + "\n";
159
- files["apps/gateway/tsconfig.json"] = `{
184
+ // Install command used inside Dockerfiles (no lockfile is generated, so
185
+ // never use `npm ci`; enable corepack for pnpm/yarn on bare node images).
186
+ const dockerInstall = options.packageManager === "pnpm"
187
+ ? "corepack enable && pnpm install"
188
+ : options.packageManager === "yarn"
189
+ ? "corepack enable && yarn install"
190
+ : "npm install";
191
+ const appTsconfig = `{
160
192
  "compilerOptions": {
161
193
  "target": "ES2024",
162
194
  "module": "Node16",
163
195
  "moduleResolution": "Node16",
164
- "allowImportingTsExtensions": true,
196
+ "outDir": "dist",
197
+ "rootDir": "src",
165
198
  "strict": true,
166
- "noEmit": true,
167
199
  "skipLibCheck": true,
168
200
  "esModuleInterop": true,
169
201
  "lib": ["ES2024"],
@@ -172,10 +204,37 @@ MIT
172
204
  "include": ["src/**/*"]
173
205
  }
174
206
  `;
207
+ const appDevDeps = {
208
+ tsx: "^4.7.0",
209
+ typescript: "^5.7.0",
210
+ "@types/node": "^24.0.0",
211
+ };
212
+ // Gateway service
213
+ const gatewayDeps = [
214
+ ...RUNTIME_APP_DEPENDENCIES,
215
+ "@zudojs/http",
216
+ "@zudojs/config",
217
+ ];
218
+ files["apps/gateway/package.json"] =
219
+ JSON.stringify({
220
+ name: `${nameSlug}-gateway`,
221
+ version: "0.1.0",
222
+ private: true,
223
+ type: "module",
224
+ scripts: {
225
+ dev: "tsx watch src/server.ts",
226
+ start: "node dist/server.js",
227
+ build: "tsc",
228
+ typecheck: "tsc --noEmit",
229
+ },
230
+ dependencies: Object.fromEntries([...new Set(gatewayDeps)].map((d) => [d, ZUDOJS_PACKAGES_VERSION])),
231
+ devDependencies: appDevDeps,
232
+ }, null, 2) + "\n";
233
+ files["apps/gateway/tsconfig.json"] = appTsconfig;
175
234
  files["apps/gateway/Dockerfile"] = `FROM node:24-alpine AS builder
176
235
  WORKDIR /app
177
- COPY apps/gateway/package*.json ./
178
- RUN npm ci
236
+ COPY apps/gateway/package.json ./
237
+ RUN ${dockerInstall}
179
238
  COPY apps/gateway/tsconfig.json ./
180
239
  COPY apps/gateway/src ./src
181
240
  RUN npx tsc
@@ -183,106 +242,61 @@ RUN npx tsc
183
242
  FROM node:24-alpine AS runtime
184
243
  WORKDIR /app
185
244
  COPY --from=builder /app/dist ./dist
245
+ COPY --from=builder /app/node_modules ./node_modules
246
+ COPY --from=builder /app/package.json ./
186
247
  EXPOSE 3000
187
248
  CMD ["node", "dist/server.js"]
188
249
  `;
189
250
  files["apps/gateway/src/index.ts"] =
190
- `export { createGateway } from "./app.js";
191
- `;
192
- files["apps/gateway/src/app.ts"] = `import { logger } from "@zudojs/logger";
193
-
194
- export async function createGateway() {
195
- const log = logger.child({ service: "gateway" });
196
- log.info("Gateway starting...");
197
-
198
- return {
199
- listen: async () => {
200
- log.info("Gateway listening on port 3000");
201
- },
202
- stop: async () => {
203
- log.info("Gateway shutting down...");
204
- },
205
- };
206
- }
207
- `;
208
- files["apps/gateway/src/server.ts"] =
209
- `import { createGateway } from "./app.js";
210
- import { createRuntime } from "@zudojs/runtime";
211
-
212
- const app = await createGateway();
213
-
214
- const runtime = createRuntime({
215
- onShutdown: async () => {
216
- await app.stop();
217
- },
218
- });
219
-
220
- await runtime.start();
221
- await app.listen();
222
-
223
- process.on("SIGTERM", async () => {
224
- await runtime.stop();
225
- process.exit(0);
226
- });
251
+ `export { createApp } from "./app.js";
227
252
  `;
253
+ const gatewayModule = moduleSpec("gateway", "./modules/index.js");
254
+ files["apps/gateway/src/app.ts"] = renderAppFile({
255
+ applicationName: `${nameSlug}-gateway`,
256
+ modules: [gatewayModule],
257
+ port: 3000,
258
+ });
259
+ files["apps/gateway/src/modules/gateway.module.ts"] = renderModuleFile({
260
+ module: gatewayModule,
261
+ });
262
+ files["apps/gateway/src/modules/index.ts"] =
263
+ `export { ${gatewayModule.className} } from "./gateway.module.js";\n`;
264
+ files["apps/gateway/src/server.ts"] = renderServerFile();
228
265
  // Generate each service
229
266
  const serviceDeps = [
230
- "@zudojs/core",
231
- "@zudojs/container",
267
+ ...RUNTIME_APP_DEPENDENCIES,
232
268
  "@zudojs/config",
233
- "@zudojs/logger",
234
269
  "@zudojs/errors",
235
- "@zudojs/constants",
236
270
  "@zudojs/http",
237
271
  ];
238
272
  if (options.enableCQRS) {
239
- serviceDeps.push("@zudojs/cqrs", "@zudojs/events");
273
+ serviceDeps.push("@zudojs/cqrs");
240
274
  }
241
275
  for (const svc of services) {
242
276
  const svcName = svc;
243
277
  const svcIndex = services.indexOf(svcName);
244
- const port = 3000 + svcIndex + 1;
278
+ const port = 3001 + svcIndex;
245
279
  files[`apps/services/${svcName}/package.json`] =
246
280
  JSON.stringify({
247
- name: `@zudojs/${nameSlug}-${svcName}`,
281
+ name: `${nameSlug}-${svcName}`,
248
282
  version: "0.1.0",
249
283
  private: true,
250
284
  type: "module",
251
285
  scripts: {
252
- dev: "node --import tsx watch src/server.ts",
286
+ dev: "tsx watch src/server.ts",
253
287
  start: "node dist/server.js",
254
288
  build: "tsc",
255
289
  typecheck: "tsc --noEmit",
256
290
  },
257
- dependencies: Object.fromEntries([...new Set(serviceDeps)].map((d) => [d, "workspace:*"])),
258
- devDependencies: {
259
- tsx: "^4.7.0",
260
- typescript: "^5.7.0",
261
- "@types/node": "^22.0.0",
262
- },
291
+ dependencies: Object.fromEntries([...new Set(serviceDeps)].map((d) => [d, ZUDOJS_PACKAGES_VERSION])),
292
+ devDependencies: appDevDeps,
263
293
  }, null, 2) + "\n";
264
- files[`apps/services/${svcName}/tsconfig.json`] = `{
265
- "compilerOptions": {
266
- "target": "ES2024",
267
- "module": "Node16",
268
- "moduleResolution": "Node16",
269
- "allowImportingTsExtensions": true,
270
- "strict": true,
271
- "noEmit": true,
272
- "skipLibCheck": true,
273
- "esModuleInterop": true,
274
- "lib": ["ES2024"],
275
- "types": ["node"]
276
- },
277
- "include": ["src/**/*"]
278
- }
279
- `;
294
+ files[`apps/services/${svcName}/tsconfig.json`] = appTsconfig;
280
295
  files[`apps/services/${svcName}/Dockerfile`] =
281
296
  `FROM node:24-alpine AS builder
282
297
  WORKDIR /app
283
- COPY apps/services/${svcName}/package*.json ./
284
- RUN npm ci
285
- COPY tsconfig.base.json ../../tsconfig.base.json
298
+ COPY apps/services/${svcName}/package.json ./
299
+ RUN ${dockerInstall}
286
300
  COPY apps/services/${svcName}/tsconfig.json ./
287
301
  COPY apps/services/${svcName}/src ./src
288
302
  RUN npx tsc
@@ -290,6 +304,8 @@ RUN npx tsc
290
304
  FROM node:24-alpine AS runtime
291
305
  WORKDIR /app
292
306
  COPY --from=builder /app/dist ./dist
307
+ COPY --from=builder /app/node_modules ./node_modules
308
+ COPY --from=builder /app/package.json ./
293
309
  EXPOSE ${port}
294
310
  CMD ["node", "dist/server.js"]
295
311
  `;
@@ -318,48 +334,18 @@ CMD ["node", "dist/server.js"]
318
334
  ];
319
335
  files[`apps/services/${svcName}/src/index.ts`] =
320
336
  `export { createApp } from "./app.js";
321
- `;
322
- files[`apps/services/${svcName}/src/app.ts`] =
323
- `import { logger } from "@zudojs/logger";
324
- import { createContainer } from "@zudojs/container";
325
-
326
- export async function createApp() {
327
- const log = logger.child({ service: "${svcName}" });
328
- const container = createContainer();
329
-
330
- log.info("${svcName} v0.1.0 starting...");
331
-
332
- return {
333
- container,
334
- listen: async () => {
335
- log.info("Listening on port ${port}");
336
- },
337
- stop: async () => {
338
- log.info("Shutting down...");
339
- },
340
- };
341
- }
342
- `;
343
- files[`apps/services/${svcName}/src/server.ts`] =
344
- `import { createApp } from "./app.js";
345
- import { createRuntime } from "@zudojs/runtime";
346
-
347
- const app = await createApp();
348
-
349
- const runtime = createRuntime({
350
- onShutdown: async () => {
351
- await app.stop();
352
- },
353
- });
354
-
355
- await runtime.start();
356
- await app.listen();
357
-
358
- process.on("SIGTERM", async () => {
359
- await runtime.stop();
360
- process.exit(0);
361
- });
362
- `;
337
+ `;
338
+ const svcModule = moduleSpec(svcName, "./modules/index.js");
339
+ files[`apps/services/${svcName}/src/app.ts`] = renderAppFile({
340
+ applicationName: `${nameSlug}-${svcName}`,
341
+ modules: [svcModule],
342
+ port,
343
+ });
344
+ files[`apps/services/${svcName}/src/modules/${svcName}.module.ts`] =
345
+ renderModuleFile({ module: svcModule });
346
+ files[`apps/services/${svcName}/src/modules/index.ts`] =
347
+ `export { ${svcModule.className} } from "./${svcName}.module.js";\n`;
348
+ files[`apps/services/${svcName}/src/server.ts`] = renderServerFile();
363
349
  for (const dir of svcDirs) {
364
350
  files[`apps/services/${svcName}/src/${dir}/index.ts`] = "";
365
351
  }
@@ -32,28 +32,35 @@
32
32
  * └── README.md
33
33
  * ```
34
34
  */
35
+ import { ZUDOJS_PACKAGES_VERSION } from "../../constants/index.js";
36
+ import { normalizeName } from "../../utils/utils.name.js";
37
+ import { RUNTIME_APP_DEPENDENCIES, moduleSpec, renderAppFile, renderModuleFile, renderServerFile, renderZudojsConfig, } from "../shared/index.js";
35
38
  export function generateModularMonolithFiles(options) {
36
39
  const nameSlug = options.projectName
37
40
  .replace(/[^a-z0-9-]+/gi, "-")
38
41
  .toLowerCase();
39
- const modules = options.services.length > 0
42
+ // Normalized: each name becomes a directory segment and a class name.
43
+ const modules = (options.services.length > 0
40
44
  ? options.services
41
- : ["identity", "enrollment", "assessment"];
45
+ : ["identity", "enrollment", "assessment"])
46
+ .map((m) => normalizeName(m))
47
+ .filter((m) => m.length > 0);
42
48
  const deps = [
43
- "@zudojs/core",
44
- "@zudojs/container",
49
+ ...RUNTIME_APP_DEPENDENCIES,
45
50
  "@zudojs/config",
46
- "@zudojs/logger",
47
51
  "@zudojs/errors",
48
- "@zudojs/constants",
49
52
  "@zudojs/types",
50
53
  "@zudojs/validation",
51
54
  "@zudojs/cqrs",
52
- "@zudojs/events",
53
55
  "@zudojs/messaging",
54
56
  "@zudojs/http",
55
57
  ];
56
- const devDeps = ["tsx", "typescript", "@types/node", "vitest"];
58
+ const devDeps = {
59
+ tsx: "^4.7.0",
60
+ typescript: "^5.7.0",
61
+ "@types/node": "^24.0.0",
62
+ vitest: "^3.0.0",
63
+ };
57
64
  const files = {};
58
65
  // package.json
59
66
  files["package.json"] =
@@ -63,24 +70,29 @@ export function generateModularMonolithFiles(options) {
63
70
  private: true,
64
71
  type: "module",
65
72
  license: "MIT",
73
+ zudojs: {
74
+ projectType: "backend",
75
+ architecture: "modular-monolith",
76
+ features: [],
77
+ },
66
78
  scripts: {
67
- dev: "node --import tsx watch src/server.ts",
79
+ dev: "tsx watch src/server.ts",
68
80
  start: "node dist/server.js",
69
81
  build: "tsc",
70
82
  typecheck: "tsc --noEmit",
71
83
  test: "vitest run",
72
84
  },
73
- dependencies: Object.fromEntries(deps.map((d) => [d, "workspace:*"])),
74
- devDependencies: Object.fromEntries(devDeps.map((d) => [d, "^1.0.0"])),
85
+ dependencies: Object.fromEntries([...new Set(deps)].map((d) => [d, ZUDOJS_PACKAGES_VERSION])),
86
+ devDependencies: devDeps,
75
87
  }, null, 2) + "\n";
76
88
  files["tsconfig.json"] = `{
77
89
  "compilerOptions": {
78
90
  "target": "ES2024",
79
91
  "module": "Node16",
80
92
  "moduleResolution": "Node16",
81
- "allowImportingTsExtensions": true,
93
+ "outDir": "dist",
94
+ "rootDir": "src",
82
95
  "strict": true,
83
- "noEmit": true,
84
96
  "skipLibCheck": true,
85
97
  "esModuleInterop": true,
86
98
  "resolveJsonModule": true,
@@ -91,6 +103,11 @@ export function generateModularMonolithFiles(options) {
91
103
  "exclude": ["node_modules", "dist", "**/*.test.ts"]
92
104
  }
93
105
  `;
106
+ files["zudojs.config.ts"] = renderZudojsConfig({
107
+ projectName: nameSlug,
108
+ projectType: "backend",
109
+ architecture: "modular-monolith",
110
+ });
94
111
  files[".env.example"] = `NODE_ENV=development
95
112
  PORT=3000
96
113
  DATABASE_URL=postgresql://localhost:5432/${nameSlug}
@@ -113,7 +130,7 @@ ${modules.map((m) => `- **${m}**`).join("\n")}
113
130
  ## Getting Started
114
131
 
115
132
  \`\`\`bash
116
- ${options.packageManager === "npm" ? "<SECRET_3ff5e0e0> run dev" : options.packageManager === "yarn" ? "yarn dev" : options.packageManager === "bun" ? "bun run dev" : "pnpm run dev"}
133
+ ${options.packageManager === "npm" ? "npm run dev" : options.packageManager === "yarn" ? "yarn dev" : options.packageManager === "bun" ? "bun run dev" : "pnpm run dev"}
117
134
  \`\`\`
118
135
 
119
136
  ## License
@@ -123,45 +140,12 @@ MIT
123
140
  // Shared source directories
124
141
  files["src/index.ts"] = `export { createApp } from "./app.js";
125
142
  `;
126
- files["src/app.ts"] = `import { logger } from "@zudojs/logger";
127
- import { createContainer } from "@zudojs/container";
128
-
129
- export async function createApp() {
130
- const log = logger.child({ service: "app" });
131
- const container = createContainer();
132
-
133
- log.info("${nameSlug} v0.1.0 starting...");
134
-
135
- return {
136
- container,
137
- listen: async () => {
138
- log.info("Server started");
139
- },
140
- stop: async () => {
141
- log.info("Shutting down...");
142
- },
143
- };
144
- }
145
- `;
146
- files["src/server.ts"] = `import { createApp } from "./app.js";
147
- import { createRuntime } from "@zudojs/runtime";
148
-
149
- const app = await createApp();
150
-
151
- const runtime = createRuntime({
152
- onShutdown: async () => {
153
- await app.stop();
154
- },
155
- });
156
-
157
- await runtime.start();
158
- await app.listen();
159
-
160
- process.on("SIGTERM", async () => {
161
- await runtime.stop();
162
- process.exit(0);
163
- });
164
- `;
143
+ const moduleSpecs = modules.map((m) => moduleSpec(m, `./modules/${m}/index.js`));
144
+ files["src/app.ts"] = renderAppFile({
145
+ applicationName: nameSlug,
146
+ modules: moduleSpecs,
147
+ });
148
+ files["src/server.ts"] = renderServerFile();
165
149
  const sharedDirs = [
166
150
  "configs",
167
151
  "constants",
@@ -190,30 +174,15 @@ process.on("SIGTERM", async () => {
190
174
  files["src/modules/index.ts"] =
191
175
  modules.map((m) => `export * from "./${m}/index.js";`).join("\n") + "\n";
192
176
  // Generate each module with CQRS structure
193
- for (const mod of modules) {
194
- const modName = mod;
195
- const modNamePascal = modName
196
- .replace(/-([a-z])/g, (_m, c) => c.toUpperCase())
197
- .replace(/^./, (c) => c.toUpperCase());
198
- files[`src/modules/${modName}/index.ts`] =
199
- `export { ${modNamePascal}Module } from "./${modName}.module.js";
200
- `;
201
- files[`src/modules/${modName}/${modName}.module.ts`] =
202
- `import { logger } from "@zudojs/logger";
203
-
204
- export class ${modNamePascal}Module {
205
- private readonly log = logger.child({ module: "${modName}" });
206
-
207
- id = "${modName}-module";
208
-
209
- initialize() {
210
- this.log.info("${modName} module initialized");
211
- }
212
- }
213
- `;
177
+ for (const spec of moduleSpecs) {
178
+ files[`src/modules/${spec.name}/index.ts`] =
179
+ `export { ${spec.className} } from "./${spec.name}.module.js";\n`;
180
+ files[`src/modules/${spec.name}/${spec.name}.module.ts`] = renderModuleFile({
181
+ module: spec,
182
+ });
214
183
  // CQRS structure
215
- files[`src/modules/${modName}/commands/index.ts`] = ``;
216
- files[`src/modules/${modName}/queries/index.ts`] = ``;
184
+ files[`src/modules/${spec.name}/commands/index.ts`] = ``;
185
+ files[`src/modules/${spec.name}/queries/index.ts`] = ``;
217
186
  }
218
187
  files["tests/index.ts"] = `import { describe, it, expect } from "vitest";
219
188
 
@@ -24,6 +24,7 @@
24
24
  * │ ├── loggers/
25
25
  * │ ├── middlewares/
26
26
  * │ ├── models/
27
+ * │ ├── modules/
27
28
  * │ ├── repositories/
28
29
  * │ ├── routes/
29
30
  * │ ├── services/