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