zudojs-cli 0.1.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -1
  3. package/dist/src/adapters/databases/postgres.adapter.d.ts +0 -14
  4. package/dist/src/adapters/databases/postgres.adapter.js +0 -30
  5. package/dist/src/adapters/frontend/angular.adapter.js +6 -0
  6. package/dist/src/adapters/frontend/astro.adapter.js +2 -2
  7. package/dist/src/adapters/frontend/react.adapter.js +26 -17
  8. package/dist/src/adapters/frontend/svelte.adapter.js +1 -0
  9. package/dist/src/adapters/frontend/sveltekit.adapter.js +7 -8
  10. package/dist/src/adapters/frontend/vanilla.adapter.js +1 -1
  11. package/dist/src/adapters/frontend/vue.adapter.js +1 -0
  12. package/dist/src/adapters/package-managers/bun.adapter.js +5 -5
  13. package/dist/src/adapters/package-managers/npm.adapter.js +5 -5
  14. package/dist/src/adapters/package-managers/pnpm.adapter.js +5 -5
  15. package/dist/src/adapters/package-managers/yarn.adapter.js +5 -5
  16. package/dist/src/bin/zudojs.js +42 -6
  17. package/dist/src/cliApplication/cliApplication.builtins.d.ts +11 -2
  18. package/dist/src/cliApplication/cliApplication.builtins.js +15 -4
  19. package/dist/src/cliApplication/cliApplication.core.js +20 -5
  20. package/dist/src/cliConstant/cliConstant.value.d.ts +1 -1
  21. package/dist/src/cliConstant/cliConstant.value.js +2 -1
  22. package/dist/src/cliConstant/cliVersion.d.ts +16 -0
  23. package/dist/src/cliConstant/cliVersion.js +57 -0
  24. package/dist/src/cliParser/cliParser.core.js +7 -0
  25. package/dist/src/cliParser/cliParser.shortOption.js +1 -1
  26. package/dist/src/commands/add.command.js +27 -24
  27. package/dist/src/commands/build.command.js +13 -7
  28. package/dist/src/commands/create.command.js +177 -84
  29. package/dist/src/commands/dev.command.js +62 -27
  30. package/dist/src/commands/doctor.command.js +45 -23
  31. package/dist/src/commands/generate.command.js +103 -34
  32. package/dist/src/constants/index.d.ts +3 -1
  33. package/dist/src/constants/index.js +3 -1
  34. package/dist/src/generators/command/command.generator.d.ts +1 -0
  35. package/dist/src/generators/command/command.generator.js +10 -4
  36. package/dist/src/generators/controller/controller.generator.d.ts +1 -0
  37. package/dist/src/generators/controller/controller.generator.js +12 -9
  38. package/dist/src/generators/dto/dto.generator.d.ts +1 -0
  39. package/dist/src/generators/dto/dto.generator.js +9 -3
  40. package/dist/src/generators/event/event.generator.d.ts +1 -0
  41. package/dist/src/generators/event/event.generator.js +10 -4
  42. package/dist/src/generators/frontend/frontendGenerator.core.js +4 -28
  43. package/dist/src/generators/frontend/frontendPipeline.d.ts +26 -0
  44. package/dist/src/generators/frontend/frontendPipeline.js +93 -0
  45. package/dist/src/generators/fullstack/fullstackComposer.core.d.ts +1 -2
  46. package/dist/src/generators/fullstack/fullstackComposer.core.js +68 -62
  47. package/dist/src/generators/infrastructure/infrastructure.generator.d.ts +11 -0
  48. package/dist/src/generators/infrastructure/infrastructure.generator.js +101 -61
  49. package/dist/src/generators/integration/integrationGenerator.core.d.ts +6 -0
  50. package/dist/src/generators/integration/integrationGenerator.core.js +35 -6
  51. package/dist/src/generators/job/job.generator.d.ts +1 -0
  52. package/dist/src/generators/job/job.generator.js +9 -3
  53. package/dist/src/generators/middleware/middleware.generator.d.ts +1 -0
  54. package/dist/src/generators/middleware/middleware.generator.js +10 -4
  55. package/dist/src/generators/model/model.generator.d.ts +1 -0
  56. package/dist/src/generators/model/model.generator.js +9 -3
  57. package/dist/src/generators/module/module.generator.d.ts +1 -0
  58. package/dist/src/generators/module/module.generator.js +11 -24
  59. package/dist/src/generators/project/project.generator.js +2 -23
  60. package/dist/src/generators/query/query.generator.d.ts +1 -0
  61. package/dist/src/generators/query/query.generator.js +10 -4
  62. package/dist/src/generators/repository/repository.generator.d.ts +1 -0
  63. package/dist/src/generators/repository/repository.generator.js +12 -9
  64. package/dist/src/generators/route/route.generator.d.ts +1 -0
  65. package/dist/src/generators/route/route.generator.js +11 -5
  66. package/dist/src/generators/service/service.generator.d.ts +1 -0
  67. package/dist/src/generators/service/service.generator.js +12 -9
  68. package/dist/src/generators/validator/validator.generator.d.ts +1 -0
  69. package/dist/src/generators/validator/validator.generator.js +9 -3
  70. package/dist/src/installers/dependency.installer.js +6 -2
  71. package/dist/src/manifest/manifestManager.core.d.ts +3 -0
  72. package/dist/src/prompts/backend/index.d.ts +1 -0
  73. package/dist/src/prompts/backend/index.js +1 -0
  74. package/dist/src/prompts/backend/services.prompt.d.ts +7 -0
  75. package/dist/src/prompts/backend/services.prompt.js +39 -0
  76. package/dist/src/prompts/index.d.ts +0 -1
  77. package/dist/src/prompts/index.js +0 -1
  78. package/dist/src/rollback/rollbackManager.core.js +0 -1
  79. package/dist/src/runners/process/processRunner.core.d.ts +4 -0
  80. package/dist/src/runners/process/processRunner.core.js +17 -3
  81. package/dist/src/scaffolders/framework.scaffolder.js +9 -6
  82. package/dist/src/scaffolders/scaffolder.helper.js +7 -2
  83. package/dist/src/scripts/postinstall.cjs +24 -3
  84. package/dist/src/templates/microservice/index.d.ts +1 -1
  85. package/dist/src/templates/microservice/index.js +1 -1
  86. package/dist/src/templates/microservice/microservice.template.d.ts +15 -1
  87. package/dist/src/templates/microservice/microservice.template.js +165 -183
  88. package/dist/src/templates/modular-monolith/modularMonolith.template.js +54 -106
  89. package/dist/src/templates/monolith/monolith.template.d.ts +1 -0
  90. package/dist/src/templates/monolith/monolith.template.js +50 -94
  91. package/dist/src/templates/shared/appRuntime.template.d.ts +71 -0
  92. package/dist/src/templates/shared/appRuntime.template.js +209 -0
  93. package/dist/src/templates/shared/index.d.ts +5 -0
  94. package/dist/src/templates/shared/index.js +5 -0
  95. package/dist/src/utils/index.d.ts +3 -3
  96. package/dist/src/utils/index.js +3 -3
  97. package/dist/src/utils/utils.exec.d.ts +19 -1
  98. package/dist/src/utils/utils.exec.js +37 -3
  99. package/dist/src/utils/utils.fileSystem.d.ts +6 -0
  100. package/dist/src/utils/utils.fileSystem.js +19 -0
  101. package/dist/src/utils/utils.name.d.ts +26 -0
  102. package/dist/src/utils/utils.name.js +51 -1
  103. package/package.json +29 -22
  104. package/src/scripts/postinstall.cjs +24 -3
  105. package/dist/.tsbuildinfo +0 -1
  106. package/dist/src/adapters/databases/index.d.ts.map +0 -1
  107. package/dist/src/adapters/databases/index.js.map +0 -1
  108. package/dist/src/adapters/databases/mysql.adapter.d.ts.map +0 -1
  109. package/dist/src/adapters/databases/mysql.adapter.js.map +0 -1
  110. package/dist/src/adapters/databases/postgres.adapter.d.ts.map +0 -1
  111. package/dist/src/adapters/databases/postgres.adapter.js.map +0 -1
  112. package/dist/src/adapters/databases/sqlite.adapter.d.ts.map +0 -1
  113. package/dist/src/adapters/databases/sqlite.adapter.js.map +0 -1
  114. package/dist/src/adapters/frontend/angular.adapter.d.ts.map +0 -1
  115. package/dist/src/adapters/frontend/angular.adapter.js.map +0 -1
  116. package/dist/src/adapters/frontend/astro.adapter.d.ts.map +0 -1
  117. package/dist/src/adapters/frontend/astro.adapter.js.map +0 -1
  118. package/dist/src/adapters/frontend/flutter.adapter.d.ts.map +0 -1
  119. package/dist/src/adapters/frontend/flutter.adapter.js.map +0 -1
  120. package/dist/src/adapters/frontend/frontendAdapter.type.d.ts.map +0 -1
  121. package/dist/src/adapters/frontend/frontendAdapter.type.js.map +0 -1
  122. package/dist/src/adapters/frontend/index.d.ts.map +0 -1
  123. package/dist/src/adapters/frontend/index.js.map +0 -1
  124. package/dist/src/adapters/frontend/next.adapter.d.ts.map +0 -1
  125. package/dist/src/adapters/frontend/next.adapter.js.map +0 -1
  126. package/dist/src/adapters/frontend/nuxt.adapter.d.ts.map +0 -1
  127. package/dist/src/adapters/frontend/nuxt.adapter.js.map +0 -1
  128. package/dist/src/adapters/frontend/react-native.adapter.d.ts.map +0 -1
  129. package/dist/src/adapters/frontend/react-native.adapter.js.map +0 -1
  130. package/dist/src/adapters/frontend/react.adapter.d.ts.map +0 -1
  131. package/dist/src/adapters/frontend/react.adapter.js.map +0 -1
  132. package/dist/src/adapters/frontend/svelte.adapter.d.ts.map +0 -1
  133. package/dist/src/adapters/frontend/svelte.adapter.js.map +0 -1
  134. package/dist/src/adapters/frontend/sveltekit.adapter.d.ts.map +0 -1
  135. package/dist/src/adapters/frontend/sveltekit.adapter.js.map +0 -1
  136. package/dist/src/adapters/frontend/vanilla.adapter.d.ts.map +0 -1
  137. package/dist/src/adapters/frontend/vanilla.adapter.js.map +0 -1
  138. package/dist/src/adapters/frontend/vue.adapter.d.ts.map +0 -1
  139. package/dist/src/adapters/frontend/vue.adapter.js.map +0 -1
  140. package/dist/src/adapters/package-managers/bun.adapter.d.ts.map +0 -1
  141. package/dist/src/adapters/package-managers/bun.adapter.js.map +0 -1
  142. package/dist/src/adapters/package-managers/index.d.ts.map +0 -1
  143. package/dist/src/adapters/package-managers/index.js.map +0 -1
  144. package/dist/src/adapters/package-managers/npm.adapter.d.ts.map +0 -1
  145. package/dist/src/adapters/package-managers/npm.adapter.js.map +0 -1
  146. package/dist/src/adapters/package-managers/packageManager.type.d.ts.map +0 -1
  147. package/dist/src/adapters/package-managers/packageManager.type.js.map +0 -1
  148. package/dist/src/adapters/package-managers/pnpm.adapter.d.ts.map +0 -1
  149. package/dist/src/adapters/package-managers/pnpm.adapter.js.map +0 -1
  150. package/dist/src/adapters/package-managers/yarn.adapter.d.ts.map +0 -1
  151. package/dist/src/adapters/package-managers/yarn.adapter.js.map +0 -1
  152. package/dist/src/bin/zudojs.d.ts.map +0 -1
  153. package/dist/src/bin/zudojs.js.map +0 -1
  154. package/dist/src/cliApplication/cliApplication.builtins.d.ts.map +0 -1
  155. package/dist/src/cliApplication/cliApplication.builtins.js.map +0 -1
  156. package/dist/src/cliApplication/cliApplication.core.d.ts.map +0 -1
  157. package/dist/src/cliApplication/cliApplication.core.js.map +0 -1
  158. package/dist/src/cliApplication/cliApplication.writer.d.ts.map +0 -1
  159. package/dist/src/cliApplication/cliApplication.writer.js.map +0 -1
  160. package/dist/src/cliApplication/index.d.ts.map +0 -1
  161. package/dist/src/cliApplication/index.js.map +0 -1
  162. package/dist/src/cliCommand/cliCommand.builder.d.ts.map +0 -1
  163. package/dist/src/cliCommand/cliCommand.builder.js.map +0 -1
  164. package/dist/src/cliCommand/cliCommand.factory.d.ts.map +0 -1
  165. package/dist/src/cliCommand/cliCommand.factory.js.map +0 -1
  166. package/dist/src/cliCommand/cliCommand.registry.d.ts.map +0 -1
  167. package/dist/src/cliCommand/cliCommand.registry.js.map +0 -1
  168. package/dist/src/cliCommand/cliCommand.validator.d.ts.map +0 -1
  169. package/dist/src/cliCommand/cliCommand.validator.js.map +0 -1
  170. package/dist/src/cliCommand/index.d.ts.map +0 -1
  171. package/dist/src/cliCommand/index.js.map +0 -1
  172. package/dist/src/cliConstant/cliConstant.value.d.ts.map +0 -1
  173. package/dist/src/cliConstant/cliConstant.value.js.map +0 -1
  174. package/dist/src/cliConstant/index.d.ts.map +0 -1
  175. package/dist/src/cliConstant/index.js.map +0 -1
  176. package/dist/src/cliError/cliError.argument.d.ts.map +0 -1
  177. package/dist/src/cliError/cliError.argument.js.map +0 -1
  178. package/dist/src/cliError/cliError.base.d.ts.map +0 -1
  179. package/dist/src/cliError/cliError.base.js.map +0 -1
  180. package/dist/src/cliError/cliError.command.d.ts.map +0 -1
  181. package/dist/src/cliError/cliError.command.js.map +0 -1
  182. package/dist/src/cliError/cliError.execution.d.ts.map +0 -1
  183. package/dist/src/cliError/cliError.execution.js.map +0 -1
  184. package/dist/src/cliError/cliError.option.d.ts.map +0 -1
  185. package/dist/src/cliError/cliError.option.js.map +0 -1
  186. package/dist/src/cliError/index.d.ts.map +0 -1
  187. package/dist/src/cliError/index.js.map +0 -1
  188. package/dist/src/cliParser/cliParser.core.d.ts.map +0 -1
  189. package/dist/src/cliParser/cliParser.core.js.map +0 -1
  190. package/dist/src/cliParser/cliParser.helper.d.ts.map +0 -1
  191. package/dist/src/cliParser/cliParser.helper.js.map +0 -1
  192. package/dist/src/cliParser/cliParser.longOption.d.ts.map +0 -1
  193. package/dist/src/cliParser/cliParser.longOption.js.map +0 -1
  194. package/dist/src/cliParser/cliParser.shortOption.d.ts.map +0 -1
  195. package/dist/src/cliParser/cliParser.shortOption.js.map +0 -1
  196. package/dist/src/cliParser/index.d.ts.map +0 -1
  197. package/dist/src/cliParser/index.js.map +0 -1
  198. package/dist/src/cliType/cliType.type.d.ts.map +0 -1
  199. package/dist/src/cliType/cliType.type.js.map +0 -1
  200. package/dist/src/cliType/index.d.ts.map +0 -1
  201. package/dist/src/cliType/index.js.map +0 -1
  202. package/dist/src/cliVersion/cliVersion.core.d.ts.map +0 -1
  203. package/dist/src/cliVersion/cliVersion.core.js.map +0 -1
  204. package/dist/src/cliVersion/index.d.ts.map +0 -1
  205. package/dist/src/cliVersion/index.js.map +0 -1
  206. package/dist/src/commands/add.command.d.ts.map +0 -1
  207. package/dist/src/commands/add.command.js.map +0 -1
  208. package/dist/src/commands/build.command.d.ts.map +0 -1
  209. package/dist/src/commands/build.command.js.map +0 -1
  210. package/dist/src/commands/create.command.d.ts.map +0 -1
  211. package/dist/src/commands/create.command.js.map +0 -1
  212. package/dist/src/commands/dev.command.d.ts.map +0 -1
  213. package/dist/src/commands/dev.command.js.map +0 -1
  214. package/dist/src/commands/doctor.command.d.ts.map +0 -1
  215. package/dist/src/commands/doctor.command.js.map +0 -1
  216. package/dist/src/commands/generate.command.d.ts.map +0 -1
  217. package/dist/src/commands/generate.command.js.map +0 -1
  218. package/dist/src/commands/index.d.ts.map +0 -1
  219. package/dist/src/commands/index.js.map +0 -1
  220. package/dist/src/commands/info.command.d.ts.map +0 -1
  221. package/dist/src/commands/info.command.js.map +0 -1
  222. package/dist/src/constants/index.d.ts.map +0 -1
  223. package/dist/src/constants/index.js.map +0 -1
  224. package/dist/src/errors/index.d.ts.map +0 -1
  225. package/dist/src/errors/index.js.map +0 -1
  226. package/dist/src/generators/backend/backend.generator.d.ts.map +0 -1
  227. package/dist/src/generators/backend/backend.generator.js.map +0 -1
  228. package/dist/src/generators/backend/index.d.ts.map +0 -1
  229. package/dist/src/generators/backend/index.js.map +0 -1
  230. package/dist/src/generators/command/command.generator.d.ts.map +0 -1
  231. package/dist/src/generators/command/command.generator.js.map +0 -1
  232. package/dist/src/generators/controller/controller.generator.d.ts.map +0 -1
  233. package/dist/src/generators/controller/controller.generator.js.map +0 -1
  234. package/dist/src/generators/dto/dto.generator.d.ts.map +0 -1
  235. package/dist/src/generators/dto/dto.generator.js.map +0 -1
  236. package/dist/src/generators/dto/index.d.ts.map +0 -1
  237. package/dist/src/generators/dto/index.js.map +0 -1
  238. package/dist/src/generators/event/event.generator.d.ts.map +0 -1
  239. package/dist/src/generators/event/event.generator.js.map +0 -1
  240. package/dist/src/generators/event/index.d.ts.map +0 -1
  241. package/dist/src/generators/event/index.js.map +0 -1
  242. package/dist/src/generators/frontend/frontendGenerator.core.d.ts.map +0 -1
  243. package/dist/src/generators/frontend/frontendGenerator.core.js.map +0 -1
  244. package/dist/src/generators/frontend/index.d.ts.map +0 -1
  245. package/dist/src/generators/frontend/index.js.map +0 -1
  246. package/dist/src/generators/fullstack/fullstackComposer.core.d.ts.map +0 -1
  247. package/dist/src/generators/fullstack/fullstackComposer.core.js.map +0 -1
  248. package/dist/src/generators/fullstack/index.d.ts.map +0 -1
  249. package/dist/src/generators/fullstack/index.js.map +0 -1
  250. package/dist/src/generators/index.d.ts.map +0 -1
  251. package/dist/src/generators/index.js.map +0 -1
  252. package/dist/src/generators/infrastructure/index.d.ts.map +0 -1
  253. package/dist/src/generators/infrastructure/index.js.map +0 -1
  254. package/dist/src/generators/infrastructure/infrastructure.generator.d.ts.map +0 -1
  255. package/dist/src/generators/infrastructure/infrastructure.generator.js.map +0 -1
  256. package/dist/src/generators/integration/index.d.ts.map +0 -1
  257. package/dist/src/generators/integration/index.js.map +0 -1
  258. package/dist/src/generators/integration/integrationGenerator.core.d.ts.map +0 -1
  259. package/dist/src/generators/integration/integrationGenerator.core.js.map +0 -1
  260. package/dist/src/generators/job/index.d.ts.map +0 -1
  261. package/dist/src/generators/job/index.js.map +0 -1
  262. package/dist/src/generators/job/job.generator.d.ts.map +0 -1
  263. package/dist/src/generators/job/job.generator.js.map +0 -1
  264. package/dist/src/generators/middleware/index.d.ts.map +0 -1
  265. package/dist/src/generators/middleware/index.js.map +0 -1
  266. package/dist/src/generators/middleware/middleware.generator.d.ts.map +0 -1
  267. package/dist/src/generators/middleware/middleware.generator.js.map +0 -1
  268. package/dist/src/generators/model/index.d.ts.map +0 -1
  269. package/dist/src/generators/model/index.js.map +0 -1
  270. package/dist/src/generators/model/model.generator.d.ts.map +0 -1
  271. package/dist/src/generators/model/model.generator.js.map +0 -1
  272. package/dist/src/generators/module/module.generator.d.ts.map +0 -1
  273. package/dist/src/generators/module/module.generator.js.map +0 -1
  274. package/dist/src/generators/project/project.generator.d.ts.map +0 -1
  275. package/dist/src/generators/project/project.generator.js.map +0 -1
  276. package/dist/src/generators/query/query.generator.d.ts.map +0 -1
  277. package/dist/src/generators/query/query.generator.js.map +0 -1
  278. package/dist/src/generators/repository/repository.generator.d.ts.map +0 -1
  279. package/dist/src/generators/repository/repository.generator.js.map +0 -1
  280. package/dist/src/generators/route/index.d.ts.map +0 -1
  281. package/dist/src/generators/route/index.js.map +0 -1
  282. package/dist/src/generators/route/route.generator.d.ts.map +0 -1
  283. package/dist/src/generators/route/route.generator.js.map +0 -1
  284. package/dist/src/generators/service/service.generator.d.ts.map +0 -1
  285. package/dist/src/generators/service/service.generator.js.map +0 -1
  286. package/dist/src/generators/validator/index.d.ts.map +0 -1
  287. package/dist/src/generators/validator/index.js.map +0 -1
  288. package/dist/src/generators/validator/validator.generator.d.ts.map +0 -1
  289. package/dist/src/generators/validator/validator.generator.js.map +0 -1
  290. package/dist/src/index.d.ts.map +0 -1
  291. package/dist/src/index.js.map +0 -1
  292. package/dist/src/installers/dependency.installer.d.ts.map +0 -1
  293. package/dist/src/installers/dependency.installer.js.map +0 -1
  294. package/dist/src/installers/index.d.ts.map +0 -1
  295. package/dist/src/installers/index.js.map +0 -1
  296. package/dist/src/manifest/index.d.ts.map +0 -1
  297. package/dist/src/manifest/index.js.map +0 -1
  298. package/dist/src/manifest/manifestManager.core.d.ts.map +0 -1
  299. package/dist/src/manifest/manifestManager.core.js.map +0 -1
  300. package/dist/src/prompts/backend/api-style.prompt.d.ts.map +0 -1
  301. package/dist/src/prompts/backend/api-style.prompt.js.map +0 -1
  302. package/dist/src/prompts/backend/backend-architecture.prompt.d.ts.map +0 -1
  303. package/dist/src/prompts/backend/backend-architecture.prompt.js.map +0 -1
  304. package/dist/src/prompts/backend/database.prompt.d.ts.map +0 -1
  305. package/dist/src/prompts/backend/database.prompt.js.map +0 -1
  306. package/dist/src/prompts/backend/index.d.ts.map +0 -1
  307. package/dist/src/prompts/backend/index.js.map +0 -1
  308. package/dist/src/prompts/capabilities/capabilities.prompt.d.ts.map +0 -1
  309. package/dist/src/prompts/capabilities/capabilities.prompt.js.map +0 -1
  310. package/dist/src/prompts/capabilities/index.d.ts.map +0 -1
  311. package/dist/src/prompts/capabilities/index.js.map +0 -1
  312. package/dist/src/prompts/frontend/framework.prompt.d.ts.map +0 -1
  313. package/dist/src/prompts/frontend/framework.prompt.js.map +0 -1
  314. package/dist/src/prompts/frontend/frontend-architecture.prompt.d.ts.map +0 -1
  315. package/dist/src/prompts/frontend/frontend-architecture.prompt.js.map +0 -1
  316. package/dist/src/prompts/frontend/index.d.ts.map +0 -1
  317. package/dist/src/prompts/frontend/index.js.map +0 -1
  318. package/dist/src/prompts/index.d.ts.map +0 -1
  319. package/dist/src/prompts/index.js.map +0 -1
  320. package/dist/src/prompts/project/confirmation.prompt.d.ts.map +0 -1
  321. package/dist/src/prompts/project/confirmation.prompt.js.map +0 -1
  322. package/dist/src/prompts/project/index.d.ts.map +0 -1
  323. package/dist/src/prompts/project/index.js.map +0 -1
  324. package/dist/src/prompts/project/project-name.prompt.d.ts.map +0 -1
  325. package/dist/src/prompts/project/project-name.prompt.js.map +0 -1
  326. package/dist/src/prompts/project/project-type.prompt.d.ts.map +0 -1
  327. package/dist/src/prompts/project/project-type.prompt.js.map +0 -1
  328. package/dist/src/prompts/prompts.createProject.d.ts +0 -33
  329. package/dist/src/prompts/prompts.createProject.d.ts.map +0 -1
  330. package/dist/src/prompts/prompts.createProject.js +0 -143
  331. package/dist/src/prompts/prompts.createProject.js.map +0 -1
  332. package/dist/src/prompts/workspace/index.d.ts.map +0 -1
  333. package/dist/src/prompts/workspace/index.js.map +0 -1
  334. package/dist/src/prompts/workspace/package-manager.prompt.d.ts.map +0 -1
  335. package/dist/src/prompts/workspace/package-manager.prompt.js.map +0 -1
  336. package/dist/src/registries/adapter/frontendAdapterRegistry.core.d.ts.map +0 -1
  337. package/dist/src/registries/adapter/frontendAdapterRegistry.core.js.map +0 -1
  338. package/dist/src/registries/adapter/packageManagerRegistry.core.d.ts.map +0 -1
  339. package/dist/src/registries/adapter/packageManagerRegistry.core.js.map +0 -1
  340. package/dist/src/registries/dependency/dependencyRegistry.core.d.ts.map +0 -1
  341. package/dist/src/registries/dependency/dependencyRegistry.core.js.map +0 -1
  342. package/dist/src/registries/dependency/index.d.ts.map +0 -1
  343. package/dist/src/registries/dependency/index.js.map +0 -1
  344. package/dist/src/registries/generator/generatorRegistry.core.d.ts.map +0 -1
  345. package/dist/src/registries/generator/generatorRegistry.core.js.map +0 -1
  346. package/dist/src/registries/generator/index.d.ts.map +0 -1
  347. package/dist/src/registries/generator/index.js.map +0 -1
  348. package/dist/src/registries/index.d.ts.map +0 -1
  349. package/dist/src/registries/index.js.map +0 -1
  350. package/dist/src/resolvers/architecture.resolver.d.ts.map +0 -1
  351. package/dist/src/resolvers/architecture.resolver.js.map +0 -1
  352. package/dist/src/resolvers/capability/capabilityResolver.core.d.ts.map +0 -1
  353. package/dist/src/resolvers/capability/capabilityResolver.core.js.map +0 -1
  354. package/dist/src/resolvers/capability/index.d.ts.map +0 -1
  355. package/dist/src/resolvers/capability/index.js.map +0 -1
  356. package/dist/src/resolvers/configuration/configurationResolver.core.d.ts.map +0 -1
  357. package/dist/src/resolvers/configuration/configurationResolver.core.js.map +0 -1
  358. package/dist/src/resolvers/configuration/index.d.ts.map +0 -1
  359. package/dist/src/resolvers/configuration/index.js.map +0 -1
  360. package/dist/src/resolvers/dependency/dependencyResolver.core.d.ts.map +0 -1
  361. package/dist/src/resolvers/dependency/dependencyResolver.core.js.map +0 -1
  362. package/dist/src/resolvers/dependency/index.d.ts.map +0 -1
  363. package/dist/src/resolvers/dependency/index.js.map +0 -1
  364. package/dist/src/resolvers/index.d.ts.map +0 -1
  365. package/dist/src/resolvers/index.js.map +0 -1
  366. package/dist/src/resolvers/project.resolver.d.ts.map +0 -1
  367. package/dist/src/resolvers/project.resolver.js.map +0 -1
  368. package/dist/src/rollback/index.d.ts.map +0 -1
  369. package/dist/src/rollback/index.js.map +0 -1
  370. package/dist/src/rollback/rollbackManager.core.d.ts.map +0 -1
  371. package/dist/src/rollback/rollbackManager.core.js.map +0 -1
  372. package/dist/src/runners/package-manager/index.d.ts.map +0 -1
  373. package/dist/src/runners/package-manager/index.js.map +0 -1
  374. package/dist/src/runners/package-manager/packageManagerRunner.core.d.ts.map +0 -1
  375. package/dist/src/runners/package-manager/packageManagerRunner.core.js.map +0 -1
  376. package/dist/src/runners/process/index.d.ts.map +0 -1
  377. package/dist/src/runners/process/index.js.map +0 -1
  378. package/dist/src/runners/process/processRunner.core.d.ts.map +0 -1
  379. package/dist/src/runners/process/processRunner.core.js.map +0 -1
  380. package/dist/src/runners/task/index.d.ts.map +0 -1
  381. package/dist/src/runners/task/index.js.map +0 -1
  382. package/dist/src/runners/task/taskRunner.core.d.ts.map +0 -1
  383. package/dist/src/runners/task/taskRunner.core.js.map +0 -1
  384. package/dist/src/scaffolders/framework.scaffolder.d.ts.map +0 -1
  385. package/dist/src/scaffolders/framework.scaffolder.js.map +0 -1
  386. package/dist/src/scaffolders/index.d.ts.map +0 -1
  387. package/dist/src/scaffolders/index.js.map +0 -1
  388. package/dist/src/scaffolders/scaffolder.helper.d.ts.map +0 -1
  389. package/dist/src/scaffolders/scaffolder.helper.js.map +0 -1
  390. package/dist/src/templates/microservice/index.d.ts.map +0 -1
  391. package/dist/src/templates/microservice/index.js.map +0 -1
  392. package/dist/src/templates/microservice/microservice.template.d.ts.map +0 -1
  393. package/dist/src/templates/microservice/microservice.template.js.map +0 -1
  394. package/dist/src/templates/modular-monolith/index.d.ts.map +0 -1
  395. package/dist/src/templates/modular-monolith/index.js.map +0 -1
  396. package/dist/src/templates/modular-monolith/modularMonolith.template.d.ts.map +0 -1
  397. package/dist/src/templates/modular-monolith/modularMonolith.template.js.map +0 -1
  398. package/dist/src/templates/monolith/index.d.ts.map +0 -1
  399. package/dist/src/templates/monolith/index.js.map +0 -1
  400. package/dist/src/templates/monolith/monolith.template.d.ts.map +0 -1
  401. package/dist/src/templates/monolith/monolith.template.js.map +0 -1
  402. package/dist/src/types/index.d.ts.map +0 -1
  403. package/dist/src/types/index.js.map +0 -1
  404. package/dist/src/types/projectConfiguration.type.d.ts.map +0 -1
  405. package/dist/src/types/projectConfiguration.type.js.map +0 -1
  406. package/dist/src/types/scaffold.type.d.ts.map +0 -1
  407. package/dist/src/types/scaffold.type.js.map +0 -1
  408. package/dist/src/utils/index.d.ts.map +0 -1
  409. package/dist/src/utils/index.js.map +0 -1
  410. package/dist/src/utils/utils.detect.d.ts.map +0 -1
  411. package/dist/src/utils/utils.detect.js.map +0 -1
  412. package/dist/src/utils/utils.exec.d.ts.map +0 -1
  413. package/dist/src/utils/utils.exec.js.map +0 -1
  414. package/dist/src/utils/utils.fileSystem.d.ts.map +0 -1
  415. package/dist/src/utils/utils.fileSystem.js.map +0 -1
  416. package/dist/src/utils/utils.name.d.ts.map +0 -1
  417. package/dist/src/utils/utils.name.js.map +0 -1
  418. package/dist/src/validators/compatibility/compatibilityValidator.core.d.ts.map +0 -1
  419. package/dist/src/validators/compatibility/compatibilityValidator.core.js.map +0 -1
  420. package/dist/src/validators/compatibility/index.d.ts.map +0 -1
  421. package/dist/src/validators/compatibility/index.js.map +0 -1
  422. package/dist/src/validators/environment/environmentValidator.core.d.ts.map +0 -1
  423. package/dist/src/validators/environment/environmentValidator.core.js.map +0 -1
  424. package/dist/src/validators/environment/index.d.ts.map +0 -1
  425. package/dist/src/validators/environment/index.js.map +0 -1
  426. package/dist/src/validators/index.d.ts.map +0 -1
  427. package/dist/src/validators/index.js.map +0 -1
  428. package/dist/src/validators/project/index.d.ts.map +0 -1
  429. package/dist/src/validators/project/index.js.map +0 -1
  430. package/dist/src/validators/project/projectValidator.core.d.ts.map +0 -1
  431. package/dist/src/validators/project/projectValidator.core.js.map +0 -1
@@ -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
@@ -1,8 +1,58 @@
1
+ import { CLIValidationError } from "../errors/index.js";
1
2
  export function normalizeName(name) {
2
3
  return name
3
4
  .trim()
4
5
  .toLowerCase()
5
6
  .replace(/[^a-z0-9-]+/g, "-")
6
- .replace(/^-+|-+$/g, "");
7
+ // Trim leading/trailing dashes without the quadratic `-+$` scan: the
8
+ // lookbehind pins each attempt to the start of a dash run.
9
+ .replace(/^-+/, "")
10
+ .replace(/(?<!-)-+$/, "");
11
+ }
12
+ /** Converts an arbitrary name to PascalCase (safe as a TS identifier). */
13
+ export function toPascalCase(name) {
14
+ return normalizeName(name)
15
+ .split("-")
16
+ .filter(Boolean)
17
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
18
+ .join("");
19
+ }
20
+ /** Converts an arbitrary name to camelCase (safe as a TS identifier). */
21
+ export function toCamelCase(name) {
22
+ const pascal = toPascalCase(name);
23
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
24
+ }
25
+ /**
26
+ * Pattern for names that may be used verbatim as a path segment
27
+ * (`--service`, `--module`, manifest service entries).
28
+ */
29
+ export const SAFE_PATH_SEGMENT = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
30
+ /**
31
+ * Validates a name that a generator will normalize into file paths and
32
+ * identifiers.
33
+ *
34
+ * `normalizeName` strips everything outside `[a-z0-9-]`, so a name such as
35
+ * `"..."` or `"!!!"` collapses to the empty string and the generator writes
36
+ * `src//.event.ts` with an anonymous exported class. Reject it up front.
37
+ */
38
+ export function assertGeneratableName(name, kind = "name") {
39
+ const normalized = normalizeName(name);
40
+ if (normalized === "") {
41
+ throw new CLIValidationError(`Invalid ${kind}: "${name}". It must contain at least one letter or digit.`);
42
+ }
43
+ return normalized;
44
+ }
45
+ /**
46
+ * Validates a value that is interpolated verbatim into a generated file path.
47
+ *
48
+ * Unlike {@link assertGeneratableName} this does not normalize: the value is
49
+ * used as-is, so `..` or a path separator here would let a generator write
50
+ * outside its base path.
51
+ */
52
+ export function assertSafePathSegment(value, kind = "value") {
53
+ if (!SAFE_PATH_SEGMENT.test(value)) {
54
+ throw new CLIValidationError(`Invalid ${kind}: "${value}". Only alphanumeric characters, hyphens, and underscores are allowed.`);
55
+ }
56
+ return value;
7
57
  }
8
58
  //# sourceMappingURL=utils.name.js.map
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "zudojs-cli",
3
- "version": "0.1.1",
3
+ "version": "1.0.0",
4
4
  "description": "Command-line interface for scaffolding, generating, and managing Zudojs framework projects.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
- "main": "./dist/index.js",
8
- "module": "./dist/index.js",
9
- "types": "./dist/index.d.ts",
7
+ "main": "./dist/src/index.js",
8
+ "module": "./dist/src/index.js",
9
+ "types": "./dist/src/index.d.ts",
10
10
  "exports": {
11
11
  ".": {
12
- "types": "./dist/index.d.ts",
13
- "import": "./dist/index.js"
12
+ "types": "./dist/src/index.d.ts",
13
+ "import": "./dist/src/index.js"
14
14
  }
15
15
  },
16
16
  "bin": {
@@ -18,28 +18,22 @@
18
18
  },
19
19
  "files": [
20
20
  "dist",
21
+ "!dist/**/*.map",
22
+ "!dist/**/*.tsbuildinfo",
23
+ "!dist/.tsbuildinfo",
21
24
  "src/scripts/postinstall.cjs"
22
25
  ],
23
- "scripts": {
24
- "build": "tsc -p tsconfig.json && mkdir -p dist/src/scripts && cp src/scripts/postinstall.cjs dist/src/scripts/postinstall.cjs",
25
- "dev": "tsx src/bin/zudojs.ts",
26
- "typecheck": "tsc -p tsconfig.json --noEmit",
27
- "clean": "rm -rf dist",
28
- "test": "vitest run",
29
- "test:watch": "vitest",
30
- "postinstall": "node src/scripts/postinstall.cjs"
31
- },
32
26
  "dependencies": {
33
27
  "@clack/prompts": "^1.7.0",
34
- "@zudojs/config": "0.1.0",
35
- "@zudojs/core": "0.1.0",
36
- "@zudojs/errors": "0.1.0",
37
- "@zudojs/logger": "0.1.0"
28
+ "@zudojs/config": "1.0.0",
29
+ "@zudojs/core": "1.0.0",
30
+ "@zudojs/errors": "1.0.0",
31
+ "@zudojs/logger": "1.0.0"
38
32
  },
39
33
  "devDependencies": {
40
34
  "@types/node": "^26.4.1",
41
35
  "tsx": "^4.23.12",
42
- "typescript": "^7.0.2",
36
+ "typescript": "7.0.2",
43
37
  "vitest": "^4.1.11"
44
38
  },
45
39
  "engines": {
@@ -56,8 +50,21 @@
56
50
  "dev"
57
51
  ],
58
52
  "homepage": "https://github.com/oyinlola-tech/zudo#readme",
53
+ "bugs": {
54
+ "url": "https://github.com/oyinlola-tech/zudo/issues"
55
+ },
59
56
  "repository": {
60
57
  "type": "git",
61
- "url": "https://github.com/oyinlola-tech/zudo"
58
+ "url": "https://github.com/oyinlola-tech/zudo",
59
+ "directory": "packages/cli"
60
+ },
61
+ "scripts": {
62
+ "build": "tsc -p tsconfig.json && mkdir -p dist/src/scripts && cp src/scripts/postinstall.cjs dist/src/scripts/postinstall.cjs",
63
+ "dev": "tsx src/bin/zudojs.ts",
64
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
65
+ "clean": "rm -rf dist",
66
+ "test": "vitest run",
67
+ "test:watch": "vitest",
68
+ "postinstall": "node src/scripts/postinstall.cjs"
62
69
  }
63
- }
70
+ }
@@ -25,7 +25,7 @@ async function checkLatestVersion(packageName) {
25
25
  const timeout = setTimeout(() => controller.abort(), 5000);
26
26
 
27
27
  const response = await fetch(
28
- `https://registry.npmjs.org/latest/${packageName}`,
28
+ `https://registry.npmjs.org/${packageName}/latest`,
29
29
  { signal: controller.signal },
30
30
  );
31
31
  clearTimeout(timeout);
@@ -41,15 +41,36 @@ async function checkLatestVersion(packageName) {
41
41
  }
42
42
  }
43
43
 
44
+ /**
45
+ * Whether the update check should be skipped.
46
+ *
47
+ * The check reaches out to registry.npmjs.org on every install. That is
48
+ * unwanted in CI, in Docker builds and on air-gapped machines, and there was
49
+ * previously no way to turn it off.
50
+ */
51
+ function shouldSkip() {
52
+ if (process.env.ZUDOJS_NO_UPDATE_CHECK) return true;
53
+ if (process.env.CI) return true;
54
+ if (process.env.NODE_ENV === "test") return true;
55
+ if (process.env.npm_config_offline === "true") return true;
56
+ // Only a global install is the one the user upgrades with `npm i -g`.
57
+ if (process.env.npm_config_global !== "true") return true;
58
+ return false;
59
+ }
60
+
44
61
  async function main() {
62
+ if (shouldSkip()) {
63
+ return;
64
+ }
65
+
45
66
  const installed = getInstalledVersion();
46
- const latest = await checkLatestVersion("@zudojs/cli");
67
+ const latest = await checkLatestVersion("zudojs-cli");
47
68
 
48
69
  if (latest && latest !== installed) {
49
70
  console.log(
50
71
  `\n zudojs ${installed} is installed, but version ${latest} is available.`,
51
72
  );
52
- console.log(` Run: npm install -g @zudojs/cli@latest\n`);
73
+ console.log(` Run: npm install -g zudojs-cli@latest\n`);
53
74
  }
54
75
  }
55
76