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
@@ -24,6 +24,7 @@
24
24
  * │ ├── loggers/
25
25
  * │ ├── middlewares/
26
26
  * │ ├── models/
27
+ * │ ├── modules/
27
28
  * │ ├── repositories/
28
29
  * │ ├── routes/
29
30
  * │ ├── services/
@@ -37,16 +38,16 @@
37
38
  * └── README.md
38
39
  * ```
39
40
  */
41
+ import { ZUDOJS_PACKAGES_VERSION } from "../../constants/index.js";
42
+ import { normalizeName, toPascalCase } from "../../utils/utils.name.js";
43
+ import { RUNTIME_APP_DEPENDENCIES, moduleSpec, renderAppFile, renderModuleFile, renderServerFile, renderServiceFile, renderZudojsConfig, } from "../shared/index.js";
40
44
  export function generateMonolithFiles(options) {
41
45
  const name = options.projectName;
42
46
  const nameSlug = name.replace(/[^a-z0-9-]+/gi, "-").toLowerCase();
43
47
  const deps = [
44
- "@zudojs/core",
45
- "@zudojs/container",
48
+ ...RUNTIME_APP_DEPENDENCIES,
46
49
  "@zudojs/config",
47
- "@zudojs/logger",
48
50
  "@zudojs/errors",
49
- "@zudojs/constants",
50
51
  "@zudojs/types",
51
52
  "@zudojs/validation",
52
53
  "@zudojs/schema",
@@ -67,7 +68,12 @@ export function generateMonolithFiles(options) {
67
68
  if (options.enableOpenAPI) {
68
69
  deps.push("@zudojs/openapi");
69
70
  }
70
- const devDeps = ["tsx", "typescript", "@types/node", "vitest"];
71
+ const devDeps = {
72
+ tsx: "^4.7.0",
73
+ typescript: "^5.7.0",
74
+ "@types/node": "^24.0.0",
75
+ vitest: "^3.0.0",
76
+ };
71
77
  const files = {};
72
78
  // Root files
73
79
  files["package.json"] =
@@ -77,16 +83,21 @@ export function generateMonolithFiles(options) {
77
83
  private: true,
78
84
  type: "module",
79
85
  license: "MIT",
86
+ zudojs: {
87
+ projectType: "backend",
88
+ architecture: "monolith",
89
+ features: [],
90
+ },
80
91
  scripts: {
81
- dev: "node --import tsx watch src/server.ts",
92
+ dev: "tsx watch src/server.ts",
82
93
  start: "node dist/server.js",
83
94
  build: "tsc",
84
95
  typecheck: "tsc --noEmit",
85
96
  test: "vitest run",
86
97
  lint: "tsc --noEmit",
87
98
  },
88
- dependencies: Object.fromEntries([...new Set(deps)].map((d) => [d, "workspace:*"])),
89
- devDependencies: Object.fromEntries(devDeps.map((d) => [d, "^1.0.0"])),
99
+ dependencies: Object.fromEntries([...new Set(deps)].map((d) => [d, ZUDOJS_PACKAGES_VERSION])),
100
+ devDependencies: devDeps,
90
101
  }, null, 2) + "\n";
91
102
  // tsconfig
92
103
  files["tsconfig.json"] = `{
@@ -94,9 +105,9 @@ export function generateMonolithFiles(options) {
94
105
  "target": "ES2024",
95
106
  "module": "Node16",
96
107
  "moduleResolution": "Node16",
97
- "allowImportingTsExtensions": true,
108
+ "outDir": "dist",
109
+ "rootDir": "src",
98
110
  "strict": true,
99
- "noEmit": true,
100
111
  "skipLibCheck": true,
101
112
  "esModuleInterop": true,
102
113
  "resolveJsonModule": true,
@@ -107,6 +118,11 @@ export function generateMonolithFiles(options) {
107
118
  "exclude": ["node_modules", "dist", "**/*.test.ts"]
108
119
  }
109
120
  `;
121
+ files["zudojs.config.ts"] = renderZudojsConfig({
122
+ projectName: nameSlug,
123
+ projectType: "backend",
124
+ architecture: "monolith",
125
+ });
110
126
  // Environment
111
127
  files[".env.example"] = `NODE_ENV=development
112
128
  PORT=3000
@@ -127,7 +143,7 @@ A Zudojs framework application.
127
143
  ## Getting Started
128
144
 
129
145
  \`\`\`bash
130
- ${options.packageManager === "npm" ? "<SECRET_3ff5e0e0> run dev" : options.packageManager === "yarn" ? "yarn dev" : options.packageManager === "bun" ? "bun run dev" : "pnpm run dev"}
146
+ ${options.packageManager === "npm" ? "npm run dev" : options.packageManager === "yarn" ? "yarn dev" : options.packageManager === "bun" ? "bun run dev" : "pnpm run dev"}
131
147
  \`\`\`
132
148
 
133
149
  ## Structure
@@ -150,6 +166,7 @@ src/
150
166
  ├── loggers/ # Logger configuration
151
167
  ├── middlewares/ # HTTP middleware
152
168
  ├── models/ # Data models
169
+ ├── modules/ # Runtime modules
153
170
  ├── repositories/ # Data repositories
154
171
  ├── routes/ # HTTP routes
155
172
  ├── services/ # Application services
@@ -165,47 +182,24 @@ MIT
165
182
  // src/ entry points
166
183
  files["src/index.ts"] = `export { createApp } from "./app.js";
167
184
  `;
168
- files["src/server.ts"] = `import { createApp } from "./app.js";
169
- import { createRuntime } from "@zudojs/runtime";
170
- import { logger } from "@zudojs/logger";
171
-
172
- const app = await createApp();
173
-
174
- const runtime = createRuntime({
175
- onShutdown: async () => {
176
- await app.stop();
177
- },
178
- });
179
-
180
- await runtime.start();
181
-
182
- const server = await app.listen();
183
-
184
- process.on("SIGTERM", async () => {
185
- await runtime.stop();
186
- process.exit(0);
187
- });
188
- `;
189
- files["src/app.ts"] = `import { logger } from "@zudojs/logger";
190
- import { createContainer } from "@zudojs/container";
191
-
192
- export async function createApp() {
193
- const log = logger.child({ service: "app" });
194
- const container = createContainer();
195
-
196
- log.info("${nameSlug} v0.1.0 starting...");
197
-
198
- return {
199
- container,
200
- listen: async () => {
201
- log.info("Server started");
202
- },
203
- stop: async () => {
204
- log.info("Shutting down...");
205
- },
206
- };
207
- }
208
- `;
185
+ files["src/server.ts"] = renderServerFile();
186
+ // Normalized: the name becomes a file path segment and a class name.
187
+ const moduleName = normalizeName(options.services[0] ?? "app") || "app";
188
+ const serviceClassName = `${toPascalCase(moduleName)}Service`;
189
+ const appModule = moduleSpec(moduleName, "./modules/index.js");
190
+ files["src/app.ts"] = renderAppFile({
191
+ applicationName: nameSlug,
192
+ modules: [appModule],
193
+ });
194
+ files[`src/modules/${moduleName}.module.ts`] = renderModuleFile({
195
+ module: appModule,
196
+ service: {
197
+ className: serviceClassName,
198
+ importPath: "../services/index.js",
199
+ },
200
+ });
201
+ files["src/modules/index.ts"] =
202
+ `export { ${appModule.className} } from "./${moduleName}.module.js";\n`;
209
203
  // Shared directories with empty index.ts
210
204
  const sharedDirs = [
211
205
  "configs",
@@ -232,23 +226,9 @@ export async function createApp() {
232
226
  files[`src/${dir}/index.ts`] = "";
233
227
  }
234
228
  // Services
235
- const serviceName = options.services[0] ?? "app";
236
- const serviceNamePascal = serviceName
237
- .replace(/-([a-z])/g, (_m, c) => c.toUpperCase())
238
- .replace(/^./, (c) => c.toUpperCase());
239
- files[`src/services/${serviceName}.service.ts`] = `import { createLogger } from "@zudojs/logger";
240
-
241
- export class ${serviceNamePascal}Service {
242
- private readonly logger = createLogger({ service: "${serviceName}" });
243
-
244
- async initialize(): Promise<void> {
245
- this.logger.info("${serviceName} service initialized");
246
- }
247
- }
248
- `;
229
+ files[`src/services/${moduleName}.service.ts`] = renderServiceFile(moduleName);
249
230
  files["src/services/index.ts"] =
250
- `export { ${serviceNamePascal}Service } from "./${serviceName}.service.js";
251
- `;
231
+ `export { ${serviceClassName} } from "./${moduleName}.service.js";\n`;
252
232
  // Controllers
253
233
  files["src/controllers/health.controller.ts"] =
254
234
  `export class HealthController {
@@ -0,0 +1,71 @@
1
+ /**
2
+ * zudojs-cli — Shared Runtime App Templates
3
+ *
4
+ * Every architecture template assembles the same four framework pieces:
5
+ * a logger, a container, an event bus and a set of modules, handed to
6
+ * `createRuntime(dependencies, options)`.
7
+ *
8
+ * The emitted source is kept here rather than duplicated per architecture
9
+ * so it can be verified against the real `@zudojs/*` packages in one place.
10
+ * `tests/generatedProject.typecheck.test.ts` type-checks the output of every
11
+ * template against `packages/<name>/src/index.ts`, so any drift between these
12
+ * snippets and the framework API fails the CLI test suite.
13
+ */
14
+ /** Packages every generated runtime entry point imports from. */
15
+ export declare const RUNTIME_APP_DEPENDENCIES: readonly ["@zudojs/core", "@zudojs/runtime", "@zudojs/container", "@zudojs/events", "@zudojs/logger", "@zudojs/constants"];
16
+ /** A module registered with the runtime by the generated `createApp`. */
17
+ export interface RuntimeModuleSpec {
18
+ /** Slug used for the module id, file name and log messages. */
19
+ readonly name: string;
20
+ /** PascalCase class name. */
21
+ readonly className: string;
22
+ /** Import specifier the module class is imported from, relative to app.ts. */
23
+ readonly importPath: string;
24
+ }
25
+ /** Builds a module spec from a raw name. */
26
+ export declare function moduleSpec(name: string, importPath: string): RuntimeModuleSpec;
27
+ /**
28
+ * Renders `zudojs.config.ts`.
29
+ *
30
+ * The shape matches what the fullstack composer writes and what
31
+ * `zudojs generate` parses to detect the project architecture.
32
+ */
33
+ export declare function renderZudojsConfig(options: {
34
+ readonly projectName: string;
35
+ readonly projectType: string;
36
+ readonly architecture: string;
37
+ }): string;
38
+ /**
39
+ * Renders `src/app.ts`: assembles the runtime dependencies and returns a
40
+ * started-on-demand `Runtime`.
41
+ */
42
+ export declare function renderAppFile(options: {
43
+ readonly applicationName: string;
44
+ readonly modules: readonly RuntimeModuleSpec[];
45
+ /**
46
+ * Port this app is deployed on. Recorded as runtime metadata so the value
47
+ * in docker-compose.yml and the Dockerfile is also visible from the app.
48
+ */
49
+ readonly port?: number;
50
+ }): string;
51
+ /**
52
+ * Renders `src/server.ts`: the process entry point. Starts the runtime and
53
+ * stops it cleanly on SIGINT/SIGTERM.
54
+ */
55
+ export declare function renderServerFile(appImportPath?: string): string;
56
+ /**
57
+ * Renders a module class extending `BaseModule`.
58
+ *
59
+ * `BaseModule`'s constructor is protected, so the generated class declares a
60
+ * public constructor — without one the class cannot be instantiated.
61
+ */
62
+ export declare function renderModuleFile(options: {
63
+ readonly module: RuntimeModuleSpec;
64
+ readonly service?: {
65
+ readonly className: string;
66
+ readonly importPath: string;
67
+ };
68
+ }): string;
69
+ /** Renders a service class using the real `createLogger` factory. */
70
+ export declare function renderServiceFile(name: string): string;
71
+ //# sourceMappingURL=appRuntime.template.d.ts.map
@@ -0,0 +1,209 @@
1
+ /**
2
+ * zudojs-cli — Shared Runtime App Templates
3
+ *
4
+ * Every architecture template assembles the same four framework pieces:
5
+ * a logger, a container, an event bus and a set of modules, handed to
6
+ * `createRuntime(dependencies, options)`.
7
+ *
8
+ * The emitted source is kept here rather than duplicated per architecture
9
+ * so it can be verified against the real `@zudojs/*` packages in one place.
10
+ * `tests/generatedProject.typecheck.test.ts` type-checks the output of every
11
+ * template against `packages/<name>/src/index.ts`, so any drift between these
12
+ * snippets and the framework API fails the CLI test suite.
13
+ */
14
+ import { toPascalCase } from "../../utils/utils.name.js";
15
+ /** Packages every generated runtime entry point imports from. */
16
+ export const RUNTIME_APP_DEPENDENCIES = [
17
+ "@zudojs/core",
18
+ "@zudojs/runtime",
19
+ "@zudojs/container",
20
+ "@zudojs/events",
21
+ "@zudojs/logger",
22
+ "@zudojs/constants",
23
+ ];
24
+ /** Builds a module spec from a raw name. */
25
+ export function moduleSpec(name, importPath) {
26
+ return {
27
+ name,
28
+ className: `${toPascalCase(name)}Module`,
29
+ importPath,
30
+ };
31
+ }
32
+ /** Emits a string as a TypeScript string literal that cannot break out. */
33
+ function literal(value) {
34
+ return JSON.stringify(value);
35
+ }
36
+ /**
37
+ * Renders `zudojs.config.ts`.
38
+ *
39
+ * The shape matches what the fullstack composer writes and what
40
+ * `zudojs generate` parses to detect the project architecture.
41
+ */
42
+ export function renderZudojsConfig(options) {
43
+ return `/**
44
+ * Zudojs project configuration.
45
+ *
46
+ * Read by the \`zudojs\` CLI to detect this project's architecture.
47
+ */
48
+
49
+ export default {
50
+ name: ${literal(options.projectName)},
51
+ projectType: ${literal(options.projectType)},
52
+ architecture: ${literal(options.architecture)},
53
+ };
54
+ `;
55
+ }
56
+ /**
57
+ * Renders `src/app.ts`: assembles the runtime dependencies and returns a
58
+ * started-on-demand `Runtime`.
59
+ */
60
+ export function renderAppFile(options) {
61
+ const imports = [...options.modules]
62
+ .map((m) => `import { ${m.className} } from ${literal(m.importPath)};`)
63
+ .join("\n");
64
+ // An empty array literal would make the loop variable `never`, so the
65
+ // registration loop is only emitted when there is at least one module.
66
+ const registration = options.modules.length > 0
67
+ ? ` for (const module of [
68
+ ${options.modules.map((m) => ` new ${m.className}(),`).join("\n")}
69
+ ]) {
70
+ modules.set(module.id, module);
71
+ }
72
+ `
73
+ : "";
74
+ const metadata = options.port === undefined
75
+ ? ""
76
+ : `\n metadata: { port: ${options.port} },`;
77
+ return `import type { Environment } from "@zudojs/constants";
78
+ import { createContainer } from "@zudojs/container";
79
+ import type { Module } from "@zudojs/core";
80
+ import { createEventBus } from "@zudojs/events";
81
+ import { createLogger } from "@zudojs/logger";
82
+ import { createRuntime, type Runtime } from "@zudojs/runtime";
83
+ ${imports}
84
+
85
+ const ENVIRONMENTS: readonly Environment[] = [
86
+ "development",
87
+ "test",
88
+ "staging",
89
+ "production",
90
+ ];
91
+
92
+ /** Narrows NODE_ENV to a framework Environment without an unchecked cast. */
93
+ function resolveEnvironment(): Environment {
94
+ const value = process.env["NODE_ENV"];
95
+ return ENVIRONMENTS.find((candidate) => candidate === value) ?? "development";
96
+ }
97
+
98
+ /**
99
+ * Assembles the application runtime.
100
+ *
101
+ * \`createRuntime\` takes two arguments: the dependencies the runtime and its
102
+ * modules share, and the options describing this application.
103
+ */
104
+ export function createApp(): Runtime {
105
+ const logger = createLogger({ name: ${literal(options.applicationName)} });
106
+ const container = createContainer();
107
+ const eventBus = createEventBus();
108
+
109
+ const modules = new Map<string, Module>();
110
+ ${registration}
111
+ const runtime = createRuntime(
112
+ { modules, logger, container, eventBus },
113
+ {
114
+ applicationName: ${literal(options.applicationName)},
115
+ applicationVersion: "0.1.0",
116
+ environment: resolveEnvironment(),
117
+ // Signals are handled explicitly in server.ts.
118
+ handleSignals: false,${metadata}
119
+ },
120
+ );
121
+
122
+ runtime.registerReadinessCheck("modules", () => runtime.state === "running");
123
+
124
+ return runtime;
125
+ }
126
+ `;
127
+ }
128
+ /**
129
+ * Renders `src/server.ts`: the process entry point. Starts the runtime and
130
+ * stops it cleanly on SIGINT/SIGTERM.
131
+ */
132
+ export function renderServerFile(appImportPath = "./app.js") {
133
+ return `import { createApp } from ${literal(appImportPath)};
134
+
135
+ const runtime = createApp();
136
+
137
+ await runtime.start();
138
+
139
+ for (const signal of ["SIGINT", "SIGTERM"] as const) {
140
+ process.once(signal, () => {
141
+ void runtime
142
+ .stop()
143
+ .then(() => {
144
+ process.exit(0);
145
+ })
146
+ .catch((error: unknown) => {
147
+ console.error(error);
148
+ process.exit(1);
149
+ });
150
+ });
151
+ }
152
+ `;
153
+ }
154
+ /**
155
+ * Renders a module class extending `BaseModule`.
156
+ *
157
+ * `BaseModule`'s constructor is protected, so the generated class declares a
158
+ * public constructor — without one the class cannot be instantiated.
159
+ */
160
+ export function renderModuleFile(options) {
161
+ const { module, service } = options;
162
+ const serviceImport = service
163
+ ? `import { ${service.className} } from ${literal(service.importPath)};\n`
164
+ : "";
165
+ const serviceField = service
166
+ ? ` private readonly service = new ${service.className}();\n\n`
167
+ : "";
168
+ const serviceInit = service ? " await this.service.initialize();\n" : "";
169
+ return `import { BaseModule, type ModuleContext } from "@zudojs/core";
170
+ ${serviceImport}
171
+ /**
172
+ * ${module.name} module.
173
+ *
174
+ * Registered with the runtime in app.ts. The runtime calls onInitialize
175
+ * during start and onShutdown during stop.
176
+ */
177
+ export class ${module.className} extends BaseModule {
178
+ public readonly id = ${literal(module.name)};
179
+ public readonly name = ${literal(module.name)};
180
+
181
+ ${serviceField} public constructor() {
182
+ super({ version: "0.1.0" });
183
+ }
184
+
185
+ public override async onInitialize(context: ModuleContext): Promise<void> {
186
+ ${serviceInit} context.logger.info(${literal(`${module.name} module initialized`)});
187
+ }
188
+
189
+ public override async onShutdown(context: ModuleContext): Promise<void> {
190
+ context.logger.info(${literal(`${module.name} module stopped`)});
191
+ }
192
+ }
193
+ `;
194
+ }
195
+ /** Renders a service class using the real `createLogger` factory. */
196
+ export function renderServiceFile(name) {
197
+ const className = `${toPascalCase(name)}Service`;
198
+ return `import { createLogger } from "@zudojs/logger";
199
+
200
+ export class ${className} {
201
+ private readonly logger = createLogger({ name: ${literal(`${name}-service`)} });
202
+
203
+ public async initialize(): Promise<void> {
204
+ this.logger.info(${literal(`${name} service initialized`)});
205
+ }
206
+ }
207
+ `;
208
+ }
209
+ //# sourceMappingURL=appRuntime.template.js.map
@@ -0,0 +1,5 @@
1
+ /**
2
+ * zudojs-cli — Shared Template Fragments
3
+ */
4
+ export * from "./appRuntime.template.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,5 @@
1
+ /**
2
+ * zudojs-cli — Shared Template Fragments
3
+ */
4
+ export * from "./appRuntime.template.js";
5
+ //# sourceMappingURL=index.js.map
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * Shared utility functions for the CLI scaffolding system.
5
5
  */
6
- export { writeFile, writeFileTree } from "./utils.fileSystem.js";
7
- export { normalizeName } from "./utils.name.js";
6
+ export { writeFile, writeFileTree, mergeBarrelExport, } from "./utils.fileSystem.js";
7
+ export { normalizeName, toPascalCase, toCamelCase } from "./utils.name.js";
8
8
  export { detectArchitecture } from "./utils.detect.js";
9
- export { execCommand } from "./utils.exec.js";
9
+ export { execCommand, runStreaming } from "./utils.exec.js";
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * Shared utility functions for the CLI scaffolding system.
5
5
  */
6
- export { writeFile, writeFileTree } from "./utils.fileSystem.js";
7
- export { normalizeName } from "./utils.name.js";
6
+ export { writeFile, writeFileTree, mergeBarrelExport, } from "./utils.fileSystem.js";
7
+ export { normalizeName, toPascalCase, toCamelCase } from "./utils.name.js";
8
8
  export { detectArchitecture } from "./utils.detect.js";
9
- export { execCommand } from "./utils.exec.js";
9
+ export { execCommand, runStreaming } from "./utils.exec.js";
10
10
  //# sourceMappingURL=index.js.map
@@ -2,5 +2,23 @@ export interface ExecResult {
2
2
  readonly stdout: string;
3
3
  readonly stderr: string;
4
4
  }
5
- export declare function execCommand(file: string, args: readonly string[], cwd: string): Promise<ExecResult>;
5
+ export interface ExecOptions {
6
+ readonly env?: NodeJS.ProcessEnv;
7
+ readonly timeout?: number;
8
+ }
9
+ /**
10
+ * Runs a short-lived command and buffers its output.
11
+ *
12
+ * Suitable for quick probes (version checks, git commands). Do NOT use this
13
+ * for long-running processes such as dev servers or dependency installs —
14
+ * use {@link runStreaming} instead.
15
+ */
16
+ export declare function execCommand(file: string, args: readonly string[], cwd: string, options?: ExecOptions): Promise<ExecResult>;
17
+ /**
18
+ * Runs a command with inherited stdio and no timeout.
19
+ *
20
+ * Use for long-running processes (dev servers) and for dependency installs
21
+ * so output streams to the user and slow commands are not killed.
22
+ */
23
+ export declare function runStreaming(file: string, args: readonly string[], cwd: string, options?: ExecOptions): Promise<void>;
6
24
  //# sourceMappingURL=utils.exec.d.ts.map
@@ -1,11 +1,45 @@
1
- import { execFile } from "node:child_process";
1
+ import { execFile, spawn } from "node:child_process";
2
2
  import { promisify } from "node:util";
3
3
  const execFileAsync = promisify(execFile);
4
- export async function execCommand(file, args, cwd) {
4
+ /**
5
+ * Runs a short-lived command and buffers its output.
6
+ *
7
+ * Suitable for quick probes (version checks, git commands). Do NOT use this
8
+ * for long-running processes such as dev servers or dependency installs —
9
+ * use {@link runStreaming} instead.
10
+ */
11
+ export async function execCommand(file, args, cwd, options = {}) {
5
12
  const { stdout, stderr } = await execFileAsync(file, args, {
6
13
  cwd,
7
- timeout: 120000,
14
+ timeout: options.timeout ?? 120000,
15
+ ...(options.env ? { env: options.env } : {}),
8
16
  });
9
17
  return { stdout, stderr };
10
18
  }
19
+ /**
20
+ * Runs a command with inherited stdio and no timeout.
21
+ *
22
+ * Use for long-running processes (dev servers) and for dependency installs
23
+ * so output streams to the user and slow commands are not killed.
24
+ */
25
+ export function runStreaming(file, args, cwd, options = {}) {
26
+ return new Promise((resolve, reject) => {
27
+ const child = spawn(file, Array.from(args), {
28
+ cwd,
29
+ stdio: "inherit",
30
+ ...(options.env ? { env: options.env } : {}),
31
+ });
32
+ child.on("error", (error) => {
33
+ reject(error);
34
+ });
35
+ child.on("exit", (code, signal) => {
36
+ if (code === 0) {
37
+ resolve();
38
+ }
39
+ else {
40
+ reject(new Error(`Command "${file} ${args.join(" ")}" exited with ${signal ? `signal ${signal}` : `code ${code}`}`));
41
+ }
42
+ });
43
+ });
44
+ }
11
45
  //# sourceMappingURL=utils.exec.js.map
@@ -1,3 +1,9 @@
1
1
  export declare function writeFile(basePath: string, filePath: string, content: string): Promise<void>;
2
2
  export declare function writeFileTree(basePath: string, files: Readonly<Record<string, string>>): Promise<void>;
3
+ /**
4
+ * Returns the content of a barrel index file with `exportLine` appended,
5
+ * preserving any existing exports. If the line is already present, the
6
+ * existing content is returned unchanged.
7
+ */
8
+ export declare function mergeBarrelExport(basePath: string, indexPath: string, exportLine: string): string;
3
9
  //# sourceMappingURL=utils.fileSystem.d.ts.map
@@ -1,3 +1,4 @@
1
+ import { existsSync, readFileSync } from "node:fs";
1
2
  import { mkdir, writeFile as writeFileAsync } from "node:fs/promises";
2
3
  import { dirname, join, relative } from "node:path";
3
4
  function assertSafePath(basePath, filePath) {
@@ -18,4 +19,22 @@ export async function writeFileTree(basePath, files) {
18
19
  await writeFile(basePath, filePath, content);
19
20
  }
20
21
  }
22
+ /**
23
+ * Returns the content of a barrel index file with `exportLine` appended,
24
+ * preserving any existing exports. If the line is already present, the
25
+ * existing content is returned unchanged.
26
+ */
27
+ export function mergeBarrelExport(basePath, indexPath, exportLine) {
28
+ const fullPath = join(basePath, indexPath);
29
+ const line = exportLine.trim();
30
+ let existing = "";
31
+ if (existsSync(fullPath)) {
32
+ existing = readFileSync(fullPath, "utf-8");
33
+ }
34
+ if (existing.includes(line)) {
35
+ return existing;
36
+ }
37
+ const separator = existing.length > 0 && !existing.endsWith("\n") ? "\n" : "";
38
+ return existing + separator + line + "\n";
39
+ }
21
40
  //# sourceMappingURL=utils.fileSystem.js.map
@@ -1,2 +1,28 @@
1
1
  export declare function normalizeName(name: string): string;
2
+ /** Converts an arbitrary name to PascalCase (safe as a TS identifier). */
3
+ export declare function toPascalCase(name: string): string;
4
+ /** Converts an arbitrary name to camelCase (safe as a TS identifier). */
5
+ export declare function toCamelCase(name: string): string;
6
+ /**
7
+ * Pattern for names that may be used verbatim as a path segment
8
+ * (`--service`, `--module`, manifest service entries).
9
+ */
10
+ export declare const SAFE_PATH_SEGMENT: RegExp;
11
+ /**
12
+ * Validates a name that a generator will normalize into file paths and
13
+ * identifiers.
14
+ *
15
+ * `normalizeName` strips everything outside `[a-z0-9-]`, so a name such as
16
+ * `"..."` or `"!!!"` collapses to the empty string and the generator writes
17
+ * `src//.event.ts` with an anonymous exported class. Reject it up front.
18
+ */
19
+ export declare function assertGeneratableName(name: string, kind?: string): string;
20
+ /**
21
+ * Validates a value that is interpolated verbatim into a generated file path.
22
+ *
23
+ * Unlike {@link assertGeneratableName} this does not normalize: the value is
24
+ * used as-is, so `..` or a path separator here would let a generator write
25
+ * outside its base path.
26
+ */
27
+ export declare function assertSafePathSegment(value: string, kind?: string): string;
2
28
  //# sourceMappingURL=utils.name.d.ts.map