zudojs-cli 2.1.2 → 2.2.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 (572) hide show
  1. package/README.md +6 -3
  2. package/dist/src/adapters/databases/databaseAdapter.resolver.d.ts +0 -1
  3. package/dist/src/adapters/databases/databaseAdapter.resolver.js +0 -1
  4. package/dist/src/adapters/databases/index.d.ts +0 -1
  5. package/dist/src/adapters/databases/index.js +0 -1
  6. package/dist/src/adapters/databases/mysql.adapter.d.ts +0 -1
  7. package/dist/src/adapters/databases/mysql.adapter.js +0 -1
  8. package/dist/src/adapters/databases/postgres.adapter.d.ts +0 -1
  9. package/dist/src/adapters/databases/postgres.adapter.js +0 -1
  10. package/dist/src/adapters/databases/sqlite.adapter.d.ts +0 -1
  11. package/dist/src/adapters/databases/sqlite.adapter.js +0 -1
  12. package/dist/src/adapters/frontend/angular.adapter.d.ts +0 -1
  13. package/dist/src/adapters/frontend/angular.adapter.js +0 -1
  14. package/dist/src/adapters/frontend/astro.adapter.d.ts +0 -1
  15. package/dist/src/adapters/frontend/astro.adapter.js +0 -1
  16. package/dist/src/adapters/frontend/fallback/fallback.helper.d.ts +0 -1
  17. package/dist/src/adapters/frontend/fallback/fallback.helper.js +0 -1
  18. package/dist/src/adapters/frontend/fallback/framework/angular/angular.fallback.d.ts +0 -1
  19. package/dist/src/adapters/frontend/fallback/framework/angular/angular.fallback.js +0 -1
  20. package/dist/src/adapters/frontend/fallback/framework/angular/angularWorkspace.fallback.d.ts +0 -1
  21. package/dist/src/adapters/frontend/fallback/framework/angular/angularWorkspace.fallback.js +0 -1
  22. package/dist/src/adapters/frontend/fallback/framework/angular/index.d.ts +0 -1
  23. package/dist/src/adapters/frontend/fallback/framework/angular/index.js +0 -1
  24. package/dist/src/adapters/frontend/fallback/framework/astro.fallback.d.ts +0 -1
  25. package/dist/src/adapters/frontend/fallback/framework/astro.fallback.js +0 -1
  26. package/dist/src/adapters/frontend/fallback/framework/index.d.ts +0 -1
  27. package/dist/src/adapters/frontend/fallback/framework/index.js +0 -1
  28. package/dist/src/adapters/frontend/fallback/framework/next.fallback.d.ts +0 -1
  29. package/dist/src/adapters/frontend/fallback/framework/next.fallback.js +0 -1
  30. package/dist/src/adapters/frontend/fallback/framework/nuxt.fallback.d.ts +0 -1
  31. package/dist/src/adapters/frontend/fallback/framework/nuxt.fallback.js +0 -1
  32. package/dist/src/adapters/frontend/fallback/framework/sveltekit.fallback.d.ts +0 -1
  33. package/dist/src/adapters/frontend/fallback/framework/sveltekit.fallback.js +0 -1
  34. package/dist/src/adapters/frontend/fallback/index.d.ts +0 -1
  35. package/dist/src/adapters/frontend/fallback/index.js +0 -1
  36. package/dist/src/adapters/frontend/fallback/vite/index.d.ts +0 -1
  37. package/dist/src/adapters/frontend/fallback/vite/index.js +0 -1
  38. package/dist/src/adapters/frontend/fallback/vite/react.fallback.d.ts +0 -1
  39. package/dist/src/adapters/frontend/fallback/vite/react.fallback.js +0 -1
  40. package/dist/src/adapters/frontend/fallback/vite/svelte.fallback.d.ts +0 -1
  41. package/dist/src/adapters/frontend/fallback/vite/svelte.fallback.js +0 -1
  42. package/dist/src/adapters/frontend/fallback/vite/vanilla.fallback.d.ts +0 -1
  43. package/dist/src/adapters/frontend/fallback/vite/vanilla.fallback.js +0 -1
  44. package/dist/src/adapters/frontend/fallback/vite/vue.fallback.d.ts +0 -1
  45. package/dist/src/adapters/frontend/fallback/vite/vue.fallback.js +0 -1
  46. package/dist/src/adapters/frontend/flutter.adapter.d.ts +0 -1
  47. package/dist/src/adapters/frontend/flutter.adapter.js +0 -1
  48. package/dist/src/adapters/frontend/frontendAdapter.type.d.ts +0 -1
  49. package/dist/src/adapters/frontend/frontendAdapter.type.js +0 -1
  50. package/dist/src/adapters/frontend/index.d.ts +0 -1
  51. package/dist/src/adapters/frontend/index.js +0 -1
  52. package/dist/src/adapters/frontend/next.adapter.d.ts +0 -1
  53. package/dist/src/adapters/frontend/next.adapter.js +0 -1
  54. package/dist/src/adapters/frontend/nuxt.adapter.d.ts +0 -1
  55. package/dist/src/adapters/frontend/nuxt.adapter.js +0 -1
  56. package/dist/src/adapters/frontend/react-native.adapter.d.ts +0 -1
  57. package/dist/src/adapters/frontend/react-native.adapter.js +0 -1
  58. package/dist/src/adapters/frontend/react.adapter.d.ts +0 -1
  59. package/dist/src/adapters/frontend/react.adapter.js +0 -1
  60. package/dist/src/adapters/frontend/svelte.adapter.d.ts +0 -1
  61. package/dist/src/adapters/frontend/svelte.adapter.js +0 -1
  62. package/dist/src/adapters/frontend/sveltekit.adapter.d.ts +0 -1
  63. package/dist/src/adapters/frontend/sveltekit.adapter.js +0 -1
  64. package/dist/src/adapters/frontend/vanilla.adapter.d.ts +0 -1
  65. package/dist/src/adapters/frontend/vanilla.adapter.js +0 -1
  66. package/dist/src/adapters/frontend/vue.adapter.d.ts +0 -1
  67. package/dist/src/adapters/frontend/vue.adapter.js +0 -1
  68. package/dist/src/adapters/package-managers/bun.adapter.d.ts +0 -1
  69. package/dist/src/adapters/package-managers/bun.adapter.js +0 -1
  70. package/dist/src/adapters/package-managers/index.d.ts +0 -1
  71. package/dist/src/adapters/package-managers/index.js +0 -1
  72. package/dist/src/adapters/package-managers/npm.adapter.d.ts +0 -1
  73. package/dist/src/adapters/package-managers/npm.adapter.js +0 -1
  74. package/dist/src/adapters/package-managers/packageManager.type.d.ts +0 -1
  75. package/dist/src/adapters/package-managers/packageManager.type.js +0 -1
  76. package/dist/src/adapters/package-managers/pnpm.adapter.d.ts +0 -1
  77. package/dist/src/adapters/package-managers/pnpm.adapter.js +0 -1
  78. package/dist/src/adapters/package-managers/yarn.adapter.d.ts +0 -1
  79. package/dist/src/adapters/package-managers/yarn.adapter.js +0 -1
  80. package/dist/src/bin/bin.menu.d.ts +0 -1
  81. package/dist/src/bin/bin.menu.js +0 -1
  82. package/dist/src/bin/bin.runner.d.ts +0 -1
  83. package/dist/src/bin/bin.runner.js +0 -1
  84. package/dist/src/bin/index.d.ts +0 -1
  85. package/dist/src/bin/index.js +0 -1
  86. package/dist/src/bin/zudojs.d.ts +0 -1
  87. package/dist/src/bin/zudojs.js +1 -2
  88. package/dist/src/cliApplication/cliApplication.builtins.d.ts +0 -1
  89. package/dist/src/cliApplication/cliApplication.builtins.js +0 -1
  90. package/dist/src/cliApplication/cliApplication.core.d.ts +0 -1
  91. package/dist/src/cliApplication/cliApplication.core.js +0 -1
  92. package/dist/src/cliApplication/cliApplication.help.d.ts +0 -1
  93. package/dist/src/cliApplication/cliApplication.help.js +0 -1
  94. package/dist/src/cliApplication/cliApplication.logger.d.ts +0 -1
  95. package/dist/src/cliApplication/cliApplication.logger.js +0 -1
  96. package/dist/src/cliApplication/cliApplication.writer.d.ts +0 -1
  97. package/dist/src/cliApplication/cliApplication.writer.js +0 -1
  98. package/dist/src/cliApplication/index.d.ts +0 -1
  99. package/dist/src/cliApplication/index.js +0 -1
  100. package/dist/src/cliApplication/invocation/index.d.ts +0 -1
  101. package/dist/src/cliApplication/invocation/index.js +0 -1
  102. package/dist/src/cliApplication/invocation/invocation.hint.d.ts +0 -7
  103. package/dist/src/cliApplication/invocation/invocation.hint.js +14 -1
  104. package/dist/src/cliApplication/invocation/invocation.locate.d.ts +0 -1
  105. package/dist/src/cliApplication/invocation/invocation.locate.js +0 -1
  106. package/dist/src/cliApplication/invocation/invocation.name.d.ts +0 -1
  107. package/dist/src/cliApplication/invocation/invocation.name.js +0 -1
  108. package/dist/src/cliApplication/invocation/invocation.sanitize.d.ts +0 -1
  109. package/dist/src/cliApplication/invocation/invocation.sanitize.js +0 -1
  110. package/dist/src/cliCommand/cliCommand.builder.d.ts +0 -1
  111. package/dist/src/cliCommand/cliCommand.builder.js +0 -1
  112. package/dist/src/cliCommand/cliCommand.factory.d.ts +0 -1
  113. package/dist/src/cliCommand/cliCommand.factory.js +0 -1
  114. package/dist/src/cliCommand/cliCommand.registry.d.ts +0 -1
  115. package/dist/src/cliCommand/cliCommand.registry.js +0 -1
  116. package/dist/src/cliCommand/cliCommand.validator.d.ts +0 -1
  117. package/dist/src/cliCommand/cliCommand.validator.js +0 -1
  118. package/dist/src/cliCommand/index.d.ts +0 -1
  119. package/dist/src/cliCommand/index.js +0 -1
  120. package/dist/src/cliConstant/cliConstant.value.d.ts +0 -1
  121. package/dist/src/cliConstant/cliConstant.value.js +0 -1
  122. package/dist/src/cliConstant/cliVersion.d.ts +0 -1
  123. package/dist/src/cliConstant/cliVersion.js +0 -1
  124. package/dist/src/cliConstant/index.d.ts +0 -1
  125. package/dist/src/cliConstant/index.js +0 -1
  126. package/dist/src/cliError/cliError.argument.d.ts +0 -1
  127. package/dist/src/cliError/cliError.argument.js +0 -1
  128. package/dist/src/cliError/cliError.base.d.ts +0 -1
  129. package/dist/src/cliError/cliError.base.js +0 -1
  130. package/dist/src/cliError/cliError.command.d.ts +0 -1
  131. package/dist/src/cliError/cliError.command.js +0 -1
  132. package/dist/src/cliError/cliError.execution.d.ts +0 -1
  133. package/dist/src/cliError/cliError.execution.js +0 -1
  134. package/dist/src/cliError/cliError.option.d.ts +0 -1
  135. package/dist/src/cliError/cliError.option.js +0 -1
  136. package/dist/src/cliError/index.d.ts +0 -1
  137. package/dist/src/cliError/index.js +0 -1
  138. package/dist/src/cliParser/cliParser.core.d.ts +0 -1
  139. package/dist/src/cliParser/cliParser.core.js +0 -1
  140. package/dist/src/cliParser/cliParser.helper.d.ts +0 -1
  141. package/dist/src/cliParser/cliParser.helper.js +0 -1
  142. package/dist/src/cliParser/cliParser.longOption.d.ts +0 -1
  143. package/dist/src/cliParser/cliParser.longOption.js +0 -1
  144. package/dist/src/cliParser/cliParser.shortOption.d.ts +0 -1
  145. package/dist/src/cliParser/cliParser.shortOption.js +0 -1
  146. package/dist/src/cliParser/index.d.ts +0 -1
  147. package/dist/src/cliParser/index.js +0 -1
  148. package/dist/src/cliType/cliType.type.d.ts +0 -1
  149. package/dist/src/cliType/cliType.type.js +0 -1
  150. package/dist/src/cliType/index.d.ts +0 -1
  151. package/dist/src/cliType/index.js +0 -1
  152. package/dist/src/cliVersion/cliVersion.core.d.ts +0 -1
  153. package/dist/src/cliVersion/cliVersion.core.js +0 -1
  154. package/dist/src/cliVersion/cliVersion.update.d.ts +0 -1
  155. package/dist/src/cliVersion/cliVersion.update.js +0 -1
  156. package/dist/src/cliVersion/index.d.ts +0 -1
  157. package/dist/src/cliVersion/index.js +0 -1
  158. package/dist/src/commands/add.command.d.ts +0 -1
  159. package/dist/src/commands/add.command.js +1 -2
  160. package/dist/src/commands/build.command.d.ts +0 -1
  161. package/dist/src/commands/build.command.js +0 -1
  162. package/dist/src/commands/commandError.helper.d.ts +0 -1
  163. package/dist/src/commands/commandError.helper.js +0 -1
  164. package/dist/src/commands/create.command.d.ts +0 -1
  165. package/dist/src/commands/create.command.js +0 -1
  166. package/dist/src/commands/dev/dev.plan.d.ts +39 -0
  167. package/dist/src/commands/dev/dev.plan.js +83 -0
  168. package/dist/src/commands/dev/index.d.ts +4 -0
  169. package/dist/src/commands/dev/index.js +4 -0
  170. package/dist/src/commands/dev.command.d.ts +4 -30
  171. package/dist/src/commands/dev.command.js +10 -80
  172. package/dist/src/commands/doctor.command.d.ts +0 -1
  173. package/dist/src/commands/doctor.command.js +0 -1
  174. package/dist/src/commands/generate.command.d.ts +0 -1
  175. package/dist/src/commands/generate.command.js +30 -10
  176. package/dist/src/commands/index.d.ts +0 -1
  177. package/dist/src/commands/index.js +0 -1
  178. package/dist/src/commands/info.command.d.ts +0 -1
  179. package/dist/src/commands/info.command.js +0 -1
  180. package/dist/src/constants/index.d.ts +0 -1
  181. package/dist/src/constants/index.js +0 -1
  182. package/dist/src/constants/zudojsVersions.generated.d.ts +0 -1
  183. package/dist/src/constants/zudojsVersions.generated.js +38 -39
  184. package/dist/src/constants/zudojsVersions.helper.d.ts +0 -1
  185. package/dist/src/constants/zudojsVersions.helper.js +0 -1
  186. package/dist/src/errors/index.d.ts +0 -1
  187. package/dist/src/errors/index.js +0 -1
  188. package/dist/src/generators/backend/backend.generator.d.ts +0 -1
  189. package/dist/src/generators/backend/backend.generator.js +0 -1
  190. package/dist/src/generators/backend/index.d.ts +0 -1
  191. package/dist/src/generators/backend/index.js +0 -1
  192. package/dist/src/generators/command/command.generator.d.ts +0 -1
  193. package/dist/src/generators/command/command.generator.js +0 -1
  194. package/dist/src/generators/command/command.template.d.ts +0 -1
  195. package/dist/src/generators/command/command.template.js +0 -1
  196. package/dist/src/generators/command/index.d.ts +0 -1
  197. package/dist/src/generators/command/index.js +0 -1
  198. package/dist/src/generators/event/event.generator.d.ts +0 -1
  199. package/dist/src/generators/event/event.generator.js +0 -1
  200. package/dist/src/generators/event/index.d.ts +0 -1
  201. package/dist/src/generators/event/index.js +0 -1
  202. package/dist/src/generators/frontend/frontendGenerator.core.d.ts +0 -1
  203. package/dist/src/generators/frontend/frontendGenerator.core.js +0 -1
  204. package/dist/src/generators/frontend/frontendPipeline.d.ts +0 -1
  205. package/dist/src/generators/frontend/frontendPipeline.js +0 -1
  206. package/dist/src/generators/frontend/index.d.ts +0 -1
  207. package/dist/src/generators/frontend/index.js +0 -1
  208. package/dist/src/generators/fullstack/fullstackBackend.layout.d.ts +0 -1
  209. package/dist/src/generators/fullstack/fullstackBackend.layout.js +0 -1
  210. package/dist/src/generators/fullstack/fullstackComposer.core.d.ts +0 -1
  211. package/dist/src/generators/fullstack/fullstackComposer.core.js +0 -1
  212. package/dist/src/generators/fullstack/index.d.ts +0 -1
  213. package/dist/src/generators/fullstack/index.js +0 -1
  214. package/dist/src/generators/index.d.ts +0 -1
  215. package/dist/src/generators/index.js +0 -1
  216. package/dist/src/generators/infrastructure/index.d.ts +0 -1
  217. package/dist/src/generators/infrastructure/index.js +0 -1
  218. package/dist/src/generators/infrastructure/infrastructure.generator.d.ts +0 -1
  219. package/dist/src/generators/infrastructure/infrastructure.generator.js +0 -1
  220. package/dist/src/generators/integration/index.d.ts +0 -1
  221. package/dist/src/generators/integration/index.js +0 -1
  222. package/dist/src/generators/integration/integrationGenerator.core.d.ts +0 -1
  223. package/dist/src/generators/integration/integrationGenerator.core.js +0 -1
  224. package/dist/src/generators/job/index.d.ts +0 -1
  225. package/dist/src/generators/job/index.js +0 -1
  226. package/dist/src/generators/job/job.generator.d.ts +0 -1
  227. package/dist/src/generators/job/job.generator.js +0 -1
  228. package/dist/src/generators/middleware/index.d.ts +2 -2
  229. package/dist/src/generators/middleware/index.js +2 -2
  230. package/dist/src/generators/middleware/middleware.generator.d.ts +28 -2
  231. package/dist/src/generators/middleware/middleware.generator.js +60 -16
  232. package/dist/src/generators/middleware/middleware.template.d.ts +20 -0
  233. package/dist/src/generators/middleware/middleware.template.js +34 -0
  234. package/dist/src/generators/model/index.d.ts +0 -1
  235. package/dist/src/generators/model/index.js +0 -1
  236. package/dist/src/generators/model/model.generator.d.ts +0 -1
  237. package/dist/src/generators/model/model.generator.js +0 -1
  238. package/dist/src/generators/module/index.d.ts +0 -1
  239. package/dist/src/generators/module/index.js +0 -1
  240. package/dist/src/generators/module/module.generator.d.ts +0 -1
  241. package/dist/src/generators/module/module.generator.js +27 -11
  242. package/dist/src/generators/module/module.registration.d.ts +4 -3
  243. package/dist/src/generators/module/module.registration.js +5 -4
  244. package/dist/src/generators/project/project.generator.d.ts +0 -1
  245. package/dist/src/generators/project/project.generator.js +0 -1
  246. package/dist/src/generators/query/index.d.ts +0 -1
  247. package/dist/src/generators/query/index.js +0 -1
  248. package/dist/src/generators/query/query.generator.d.ts +0 -1
  249. package/dist/src/generators/query/query.generator.js +0 -1
  250. package/dist/src/generators/query/query.template.d.ts +0 -1
  251. package/dist/src/generators/query/query.template.js +0 -1
  252. package/dist/src/generators/resource/index.d.ts +0 -1
  253. package/dist/src/generators/resource/index.js +0 -1
  254. package/dist/src/generators/resource/resource.checks.d.ts +31 -0
  255. package/dist/src/generators/resource/resource.checks.js +52 -0
  256. package/dist/src/generators/resource/resource.generator.d.ts +5 -3
  257. package/dist/src/generators/resource/resource.generator.js +23 -36
  258. package/dist/src/generators/resource/resource.layout.d.ts +0 -1
  259. package/dist/src/generators/resource/resource.layout.js +0 -1
  260. package/dist/src/generators/resource/resource.plan.d.ts +0 -1
  261. package/dist/src/generators/resource/resource.plan.js +0 -1
  262. package/dist/src/generators/resource/resource.run.d.ts +12 -2
  263. package/dist/src/generators/resource/resource.run.js +33 -9
  264. package/dist/src/generators/validator/index.d.ts +0 -1
  265. package/dist/src/generators/validator/index.js +0 -1
  266. package/dist/src/generators/validator/validator.generator.d.ts +6 -2
  267. package/dist/src/generators/validator/validator.generator.js +31 -10
  268. package/dist/src/index.d.ts +0 -1
  269. package/dist/src/index.js +0 -1
  270. package/dist/src/installers/dependency.installer.d.ts +0 -1
  271. package/dist/src/installers/dependency.installer.js +0 -1
  272. package/dist/src/installers/index.d.ts +0 -1
  273. package/dist/src/installers/index.js +0 -1
  274. package/dist/src/manifest/index.d.ts +0 -1
  275. package/dist/src/manifest/index.js +0 -1
  276. package/dist/src/manifest/manifestFile.helper.d.ts +0 -1
  277. package/dist/src/manifest/manifestFile.helper.js +0 -1
  278. package/dist/src/manifest/manifestManager.core.d.ts +0 -1
  279. package/dist/src/manifest/manifestManager.core.js +0 -1
  280. package/dist/src/prompts/backend/api-style.prompt.d.ts +0 -1
  281. package/dist/src/prompts/backend/api-style.prompt.js +0 -1
  282. package/dist/src/prompts/backend/backend-architecture.prompt.d.ts +0 -1
  283. package/dist/src/prompts/backend/backend-architecture.prompt.js +0 -1
  284. package/dist/src/prompts/backend/database.prompt.d.ts +0 -1
  285. package/dist/src/prompts/backend/database.prompt.js +0 -1
  286. package/dist/src/prompts/backend/index.d.ts +0 -1
  287. package/dist/src/prompts/backend/index.js +0 -1
  288. package/dist/src/prompts/backend/services.prompt.d.ts +0 -1
  289. package/dist/src/prompts/backend/services.prompt.js +0 -1
  290. package/dist/src/prompts/cancel.prompt.d.ts +0 -1
  291. package/dist/src/prompts/cancel.prompt.js +0 -1
  292. package/dist/src/prompts/capabilities/capabilities.prompt.d.ts +0 -1
  293. package/dist/src/prompts/capabilities/capabilities.prompt.js +0 -1
  294. package/dist/src/prompts/capabilities/index.d.ts +0 -1
  295. package/dist/src/prompts/capabilities/index.js +0 -1
  296. package/dist/src/prompts/frontend/framework.prompt.d.ts +0 -1
  297. package/dist/src/prompts/frontend/framework.prompt.js +0 -1
  298. package/dist/src/prompts/frontend/frontend-architecture.prompt.d.ts +0 -1
  299. package/dist/src/prompts/frontend/frontend-architecture.prompt.js +0 -1
  300. package/dist/src/prompts/frontend/index.d.ts +0 -1
  301. package/dist/src/prompts/frontend/index.js +0 -1
  302. package/dist/src/prompts/index.d.ts +0 -1
  303. package/dist/src/prompts/index.js +0 -1
  304. package/dist/src/prompts/menu/index.d.ts +0 -1
  305. package/dist/src/prompts/menu/index.js +0 -1
  306. package/dist/src/prompts/menu/menu.adapter.d.ts +0 -1
  307. package/dist/src/prompts/menu/menu.adapter.js +0 -1
  308. package/dist/src/prompts/menu/menu.constant.d.ts +0 -1
  309. package/dist/src/prompts/menu/menu.constant.js +0 -1
  310. package/dist/src/prompts/menu/menu.flow.d.ts +0 -1
  311. package/dist/src/prompts/menu/menu.flow.js +0 -1
  312. package/dist/src/prompts/menu/menu.select.d.ts +0 -1
  313. package/dist/src/prompts/menu/menu.select.js +0 -1
  314. package/dist/src/prompts/menu/menu.type.d.ts +0 -1
  315. package/dist/src/prompts/menu/menu.type.js +0 -1
  316. package/dist/src/prompts/project/confirmation.prompt.d.ts +0 -1
  317. package/dist/src/prompts/project/confirmation.prompt.js +0 -1
  318. package/dist/src/prompts/project/index.d.ts +0 -1
  319. package/dist/src/prompts/project/index.js +0 -1
  320. package/dist/src/prompts/project/project-name.prompt.d.ts +0 -1
  321. package/dist/src/prompts/project/project-name.prompt.js +0 -1
  322. package/dist/src/prompts/project/project-type.prompt.d.ts +0 -1
  323. package/dist/src/prompts/project/project-type.prompt.js +0 -1
  324. package/dist/src/prompts/workspace/index.d.ts +0 -1
  325. package/dist/src/prompts/workspace/index.js +0 -1
  326. package/dist/src/prompts/workspace/package-manager.prompt.d.ts +0 -1
  327. package/dist/src/prompts/workspace/package-manager.prompt.js +0 -1
  328. package/dist/src/recipes/apply/index.d.ts +0 -1
  329. package/dist/src/recipes/apply/index.js +0 -1
  330. package/dist/src/recipes/apply/recipeApply.app.d.ts +0 -1
  331. package/dist/src/recipes/apply/recipeApply.app.js +0 -1
  332. package/dist/src/recipes/apply/recipeApply.context.d.ts +0 -1
  333. package/dist/src/recipes/apply/recipeApply.context.js +0 -1
  334. package/dist/src/recipes/apply/recipeApply.files.d.ts +0 -1
  335. package/dist/src/recipes/apply/recipeApply.files.js +0 -1
  336. package/dist/src/recipes/apply/recipeApply.project.d.ts +13 -3
  337. package/dist/src/recipes/apply/recipeApply.project.js +56 -3
  338. package/dist/src/recipes/apply/recipeApply.report.d.ts +0 -1
  339. package/dist/src/recipes/apply/recipeApply.report.js +0 -1
  340. package/dist/src/recipes/catalog/database/database.files.d.ts +0 -1
  341. package/dist/src/recipes/catalog/database/database.files.js +0 -1
  342. package/dist/src/recipes/catalog/database/database.recipe.d.ts +0 -1
  343. package/dist/src/recipes/catalog/database/database.recipe.js +11 -2
  344. package/dist/src/recipes/catalog/database/index.d.ts +0 -1
  345. package/dist/src/recipes/catalog/database/index.js +0 -1
  346. package/dist/src/recipes/catalog/email.recipe.d.ts +0 -1
  347. package/dist/src/recipes/catalog/email.recipe.js +0 -1
  348. package/dist/src/recipes/catalog/index.d.ts +0 -1
  349. package/dist/src/recipes/catalog/index.js +0 -1
  350. package/dist/src/recipes/catalog/openapi.recipe.d.ts +0 -1
  351. package/dist/src/recipes/catalog/openapi.recipe.js +0 -1
  352. package/dist/src/recipes/catalog/platform/cache.recipe.d.ts +0 -1
  353. package/dist/src/recipes/catalog/platform/cache.recipe.js +0 -1
  354. package/dist/src/recipes/catalog/platform/index.d.ts +0 -1
  355. package/dist/src/recipes/catalog/platform/index.js +0 -1
  356. package/dist/src/recipes/catalog/platform/messaging.recipe.d.ts +0 -1
  357. package/dist/src/recipes/catalog/platform/messaging.recipe.js +0 -1
  358. package/dist/src/recipes/catalog/platform/observability.recipe.d.ts +0 -1
  359. package/dist/src/recipes/catalog/platform/observability.recipe.js +0 -1
  360. package/dist/src/recipes/catalog/platform/queue.recipe.d.ts +0 -1
  361. package/dist/src/recipes/catalog/platform/queue.recipe.js +0 -1
  362. package/dist/src/recipes/catalog/platform/scheduler.recipe.d.ts +0 -1
  363. package/dist/src/recipes/catalog/platform/scheduler.recipe.js +0 -1
  364. package/dist/src/recipes/catalog/redis.recipe.d.ts +0 -1
  365. package/dist/src/recipes/catalog/redis.recipe.js +0 -1
  366. package/dist/src/recipes/catalog/storage.recipe.d.ts +0 -1
  367. package/dist/src/recipes/catalog/storage.recipe.js +0 -1
  368. package/dist/src/recipes/catalog/websockets.recipe.d.ts +0 -1
  369. package/dist/src/recipes/catalog/websockets.recipe.js +0 -1
  370. package/dist/src/recipes/docker/docker.compose.d.ts +0 -1
  371. package/dist/src/recipes/docker/docker.compose.js +0 -1
  372. package/dist/src/recipes/docker/docker.recipe.d.ts +0 -1
  373. package/dist/src/recipes/docker/docker.recipe.js +0 -1
  374. package/dist/src/recipes/docker/docker.refresh.d.ts +0 -1
  375. package/dist/src/recipes/docker/docker.refresh.js +0 -1
  376. package/dist/src/recipes/docker/index.d.ts +0 -1
  377. package/dist/src/recipes/docker/index.js +0 -1
  378. package/dist/src/recipes/index.d.ts +0 -1
  379. package/dist/src/recipes/index.js +0 -1
  380. package/dist/src/recipes/recipe.registry.d.ts +0 -1
  381. package/dist/src/recipes/recipe.registry.js +0 -1
  382. package/dist/src/recipes/recipe.type.d.ts +6 -1
  383. package/dist/src/recipes/recipe.type.js +0 -1
  384. package/dist/src/registries/adapter/frontendAdapterRegistry.core.d.ts +0 -1
  385. package/dist/src/registries/adapter/frontendAdapterRegistry.core.js +0 -1
  386. package/dist/src/registries/adapter/packageManagerRegistry.core.d.ts +0 -1
  387. package/dist/src/registries/adapter/packageManagerRegistry.core.js +0 -1
  388. package/dist/src/registries/dependency/dependencyRegistry.core.d.ts +0 -1
  389. package/dist/src/registries/dependency/dependencyRegistry.core.js +0 -1
  390. package/dist/src/registries/dependency/index.d.ts +0 -1
  391. package/dist/src/registries/dependency/index.js +0 -1
  392. package/dist/src/registries/generator/generatorRegistry.core.d.ts +0 -1
  393. package/dist/src/registries/generator/generatorRegistry.core.js +0 -1
  394. package/dist/src/registries/generator/index.d.ts +0 -1
  395. package/dist/src/registries/generator/index.js +0 -1
  396. package/dist/src/registries/index.d.ts +0 -1
  397. package/dist/src/registries/index.js +0 -1
  398. package/dist/src/resolvers/architecture.resolver.d.ts +0 -1
  399. package/dist/src/resolvers/architecture.resolver.js +13 -3
  400. package/dist/src/resolvers/capability/capabilityResolver.core.d.ts +0 -1
  401. package/dist/src/resolvers/capability/capabilityResolver.core.js +0 -1
  402. package/dist/src/resolvers/capability/index.d.ts +0 -1
  403. package/dist/src/resolvers/capability/index.js +0 -1
  404. package/dist/src/resolvers/configuration/configurationResolver.core.d.ts +0 -1
  405. package/dist/src/resolvers/configuration/configurationResolver.core.js +0 -1
  406. package/dist/src/resolvers/configuration/index.d.ts +0 -1
  407. package/dist/src/resolvers/configuration/index.js +0 -1
  408. package/dist/src/resolvers/dependency/dependencyResolver.core.d.ts +0 -1
  409. package/dist/src/resolvers/dependency/dependencyResolver.core.js +0 -1
  410. package/dist/src/resolvers/dependency/dependencyVersions.constant.d.ts +0 -1
  411. package/dist/src/resolvers/dependency/dependencyVersions.constant.js +0 -1
  412. package/dist/src/resolvers/dependency/index.d.ts +0 -1
  413. package/dist/src/resolvers/dependency/index.js +0 -1
  414. package/dist/src/resolvers/index.d.ts +0 -1
  415. package/dist/src/resolvers/index.js +0 -1
  416. package/dist/src/resolvers/layout/index.d.ts +0 -1
  417. package/dist/src/resolvers/layout/index.js +0 -1
  418. package/dist/src/resolvers/layout/projectLayout.core.d.ts +0 -1
  419. package/dist/src/resolvers/layout/projectLayout.core.js +0 -1
  420. package/dist/src/resolvers/project.resolver.d.ts +0 -1
  421. package/dist/src/resolvers/project.resolver.js +0 -1
  422. package/dist/src/rollback/index.d.ts +0 -1
  423. package/dist/src/rollback/index.js +0 -1
  424. package/dist/src/rollback/rollbackManager.core.d.ts +0 -1
  425. package/dist/src/rollback/rollbackManager.core.js +0 -1
  426. package/dist/src/runners/package-manager/index.d.ts +0 -1
  427. package/dist/src/runners/package-manager/index.js +0 -1
  428. package/dist/src/runners/package-manager/packageManagerRunner.core.d.ts +0 -1
  429. package/dist/src/runners/package-manager/packageManagerRunner.core.js +0 -1
  430. package/dist/src/runners/process/index.d.ts +0 -1
  431. package/dist/src/runners/process/index.js +0 -1
  432. package/dist/src/runners/process/processRunner.core.d.ts +0 -1
  433. package/dist/src/runners/process/processRunner.core.js +0 -1
  434. package/dist/src/runners/task/index.d.ts +0 -1
  435. package/dist/src/runners/task/index.js +0 -1
  436. package/dist/src/runners/task/taskRunner.core.d.ts +0 -1
  437. package/dist/src/runners/task/taskRunner.core.js +0 -1
  438. package/dist/src/scaffolders/framework.scaffolder.d.ts +0 -1
  439. package/dist/src/scaffolders/framework.scaffolder.js +0 -1
  440. package/dist/src/scaffolders/index.d.ts +0 -1
  441. package/dist/src/scaffolders/index.js +0 -1
  442. package/dist/src/scaffolders/scaffolder.helper.d.ts +0 -1
  443. package/dist/src/scaffolders/scaffolder.helper.js +0 -1
  444. package/dist/src/templates/backendApp/backendApp.core.d.ts +0 -1
  445. package/dist/src/templates/backendApp/backendApp.core.js +0 -1
  446. package/dist/src/templates/backendApp/backendApp.modules.d.ts +0 -1
  447. package/dist/src/templates/backendApp/backendApp.modules.js +0 -1
  448. package/dist/src/templates/backendApp/backendApp.project.d.ts +19 -3
  449. package/dist/src/templates/backendApp/backendApp.project.js +41 -3
  450. package/dist/src/templates/backendApp/index.d.ts +0 -1
  451. package/dist/src/templates/backendApp/index.js +0 -1
  452. package/dist/src/templates/backendApp/parts/config.template.d.ts +0 -1
  453. package/dist/src/templates/backendApp/parts/config.template.js +13 -6
  454. package/dist/src/templates/backendApp/parts/httpUtils.template.d.ts +2 -2
  455. package/dist/src/templates/backendApp/parts/httpUtils.template.js +20 -6
  456. package/dist/src/templates/backendApp/parts/index.d.ts +0 -1
  457. package/dist/src/templates/backendApp/parts/index.js +0 -1
  458. package/dist/src/templates/backendApp/parts/integrations.template.d.ts +0 -1
  459. package/dist/src/templates/backendApp/parts/integrations.template.js +0 -1
  460. package/dist/src/templates/backendApp/parts/wiring.template.d.ts +3 -2
  461. package/dist/src/templates/backendApp/parts/wiring.template.js +13 -3
  462. package/dist/src/templates/microservice/index.d.ts +0 -1
  463. package/dist/src/templates/microservice/index.js +0 -1
  464. package/dist/src/templates/microservice/microservice.template.d.ts +0 -1
  465. package/dist/src/templates/microservice/microservice.template.js +6 -27
  466. package/dist/src/templates/modular-monolith/index.d.ts +0 -1
  467. package/dist/src/templates/modular-monolith/index.js +0 -1
  468. package/dist/src/templates/modular-monolith/modularMonolith.template.d.ts +0 -1
  469. package/dist/src/templates/modular-monolith/modularMonolith.template.js +3 -10
  470. package/dist/src/templates/monolith/index.d.ts +0 -1
  471. package/dist/src/templates/monolith/index.js +0 -1
  472. package/dist/src/templates/monolith/monolith.template.d.ts +0 -1
  473. package/dist/src/templates/monolith/monolith.template.js +3 -11
  474. package/dist/src/templates/resource/index.d.ts +0 -1
  475. package/dist/src/templates/resource/index.js +0 -1
  476. package/dist/src/templates/resource/layers/index.d.ts +4 -4
  477. package/dist/src/templates/resource/layers/index.js +4 -4
  478. package/dist/src/templates/resource/layers/resourceData.template.d.ts +8 -4
  479. package/dist/src/templates/resource/layers/resourceData.template.js +30 -72
  480. package/dist/src/templates/resource/layers/resourceHttp/index.d.ts +6 -0
  481. package/dist/src/templates/resource/layers/resourceHttp/index.js +6 -0
  482. package/dist/src/templates/resource/layers/resourceHttp/resourceController.template.d.ts +10 -0
  483. package/dist/src/templates/resource/layers/resourceHttp/resourceController.template.js +55 -0
  484. package/dist/src/templates/resource/layers/resourceHttp/resourceRoutes.template.d.ts +6 -0
  485. package/dist/src/templates/resource/layers/resourceHttp/resourceRoutes.template.js +77 -0
  486. package/dist/src/templates/resource/layers/resourceHttp/resourceTest.template.d.ts +11 -0
  487. package/dist/src/templates/resource/layers/resourceHttp/resourceTest.template.js +84 -0
  488. package/dist/src/templates/resource/layers/resourceMemory.template.d.ts +6 -0
  489. package/dist/src/templates/resource/layers/resourceMemory.template.js +87 -0
  490. package/dist/src/templates/resource/layers/resourcePrisma.template.d.ts +0 -1
  491. package/dist/src/templates/resource/layers/resourcePrisma.template.js +10 -9
  492. package/dist/src/templates/resource/layers/resourceService.template.d.ts +1 -8
  493. package/dist/src/templates/resource/layers/resourceService.template.js +9 -54
  494. package/dist/src/templates/resource/resource.files.d.ts +0 -1
  495. package/dist/src/templates/resource/resource.files.js +7 -6
  496. package/dist/src/templates/resource/resource.names.d.ts +0 -1
  497. package/dist/src/templates/resource/resource.names.js +0 -1
  498. package/dist/src/templates/resource/resource.type.d.ts +0 -1
  499. package/dist/src/templates/resource/resource.type.js +0 -1
  500. package/dist/src/templates/shared/appRuntime.template.d.ts +0 -1
  501. package/dist/src/templates/shared/appRuntime.template.js +6 -5
  502. package/dist/src/templates/shared/capability.template.d.ts +0 -1
  503. package/dist/src/templates/shared/capability.template.js +0 -1
  504. package/dist/src/templates/shared/dockerfile/dockerfile.install.d.ts +0 -1
  505. package/dist/src/templates/shared/dockerfile/dockerfile.install.js +0 -1
  506. package/dist/src/templates/shared/dockerfile/dockerfile.template.d.ts +0 -1
  507. package/dist/src/templates/shared/dockerfile/dockerfile.template.js +15 -5
  508. package/dist/src/templates/shared/dockerfile/index.d.ts +0 -1
  509. package/dist/src/templates/shared/dockerfile/index.js +0 -1
  510. package/dist/src/templates/shared/index.d.ts +1 -1
  511. package/dist/src/templates/shared/index.js +1 -1
  512. package/dist/src/templates/shared/pnpm.template.d.ts +0 -1
  513. package/dist/src/templates/shared/pnpm.template.js +0 -1
  514. package/dist/src/templates/shared/server.parts.d.ts +28 -0
  515. package/dist/src/templates/shared/server.parts.js +59 -0
  516. package/dist/src/templates/shared/server.template.d.ts +17 -16
  517. package/dist/src/templates/shared/server.template.js +42 -57
  518. package/dist/src/types/index.d.ts +0 -1
  519. package/dist/src/types/index.js +0 -1
  520. package/dist/src/types/projectConfiguration.type.d.ts +0 -1
  521. package/dist/src/types/projectConfiguration.type.js +0 -1
  522. package/dist/src/types/scaffold.type.d.ts +0 -1
  523. package/dist/src/types/scaffold.type.js +0 -1
  524. package/dist/src/utils/index.d.ts +0 -1
  525. package/dist/src/utils/index.js +0 -1
  526. package/dist/src/utils/utils.detect.d.ts +0 -1
  527. package/dist/src/utils/utils.detect.js +0 -1
  528. package/dist/src/utils/utils.exec.d.ts +0 -1
  529. package/dist/src/utils/utils.exec.js +0 -1
  530. package/dist/src/utils/utils.fileSystem.d.ts +0 -1
  531. package/dist/src/utils/utils.fileSystem.js +0 -1
  532. package/dist/src/utils/utils.name.d.ts +0 -1
  533. package/dist/src/utils/utils.name.js +0 -1
  534. package/dist/src/utils/utils.writeGuard.d.ts +0 -1
  535. package/dist/src/utils/utils.writeGuard.js +0 -1
  536. package/dist/src/validators/compatibility/compatibilityValidator.core.d.ts +0 -1
  537. package/dist/src/validators/compatibility/compatibilityValidator.core.js +0 -1
  538. package/dist/src/validators/compatibility/index.d.ts +0 -1
  539. package/dist/src/validators/compatibility/index.js +0 -1
  540. package/dist/src/validators/environment/environmentValidator.core.d.ts +0 -1
  541. package/dist/src/validators/environment/environmentValidator.core.js +0 -1
  542. package/dist/src/validators/environment/index.d.ts +0 -1
  543. package/dist/src/validators/environment/index.js +0 -1
  544. package/dist/src/validators/index.d.ts +0 -1
  545. package/dist/src/validators/index.js +0 -1
  546. package/dist/src/validators/project/index.d.ts +0 -1
  547. package/dist/src/validators/project/index.js +0 -1
  548. package/dist/src/validators/project/projectValidator.core.d.ts +0 -1
  549. package/dist/src/validators/project/projectValidator.core.js +0 -1
  550. package/dist/src/wiring/index.d.ts +0 -1
  551. package/dist/src/wiring/index.js +0 -1
  552. package/dist/src/wiring/wiring.dependencies.d.ts +0 -1
  553. package/dist/src/wiring/wiring.dependencies.js +0 -1
  554. package/dist/src/wiring/wiring.edits.d.ts +0 -1
  555. package/dist/src/wiring/wiring.edits.js +0 -1
  556. package/dist/src/wiring/wiring.markers.d.ts +7 -5
  557. package/dist/src/wiring/wiring.markers.js +8 -7
  558. package/package.json +6 -6
  559. package/dist/src/generators/controller/controller.generator.d.ts +0 -11
  560. package/dist/src/generators/controller/controller.generator.js +0 -47
  561. package/dist/src/generators/dto/dto.generator.d.ts +0 -12
  562. package/dist/src/generators/dto/dto.generator.js +0 -27
  563. package/dist/src/generators/dto/index.d.ts +0 -5
  564. package/dist/src/generators/dto/index.js +0 -5
  565. package/dist/src/generators/repository/repository.generator.d.ts +0 -10
  566. package/dist/src/generators/repository/repository.generator.js +0 -80
  567. package/dist/src/generators/route/index.d.ts +0 -5
  568. package/dist/src/generators/route/index.js +0 -5
  569. package/dist/src/generators/route/route.generator.d.ts +0 -12
  570. package/dist/src/generators/route/route.generator.js +0 -31
  571. package/dist/src/templates/resource/layers/resourceRoutes.template.d.ts +0 -13
  572. package/dist/src/templates/resource/layers/resourceRoutes.template.js +0 -129
@@ -0,0 +1,55 @@
1
+ /**
2
+ * zudojs-cli — A resource's controller.
3
+ */
4
+ /**
5
+ * `controllers/<slug>.controller.ts`: validates input with the DTO schemas
6
+ * and maps service results to responses. Handlers are arrow properties so
7
+ * they can be passed to the router unbound.
8
+ */
9
+ export function renderResourceController(n, appSrcFromControllers) {
10
+ const schemas = `Create${n.entity}Schema, List${n.pascal}QuerySchema, ${n.entity}ParamsSchema, Update${n.entity}Schema`;
11
+ return `import type { HttpResponseContext, HttpRouterContext } from "@zudojs/http";
12
+
13
+ import { ${schemas} } from "../dtos/${n.slug}.dto.js";
14
+ import type { ${n.pascal}Service } from "../services/${n.slug}.service.js";
15
+ import { empty, json, readJsonBody, validationFailed } from "${appSrcFromControllers}/utils/http.js";
16
+
17
+ /** HTTP handlers for ${n.routePath}. */
18
+ export class ${n.pascal}Controller {
19
+ public constructor(private readonly service: ${n.pascal}Service) {}
20
+
21
+ public readonly list = async (ctx: HttpRouterContext): Promise<HttpResponseContext> => {
22
+ const query = List${n.pascal}QuerySchema.safeParse(ctx.query);
23
+ if (!query.success) return validationFailed(query.issues);
24
+ return json(200, await this.service.list(query.data));
25
+ };
26
+
27
+ public readonly get = async (ctx: HttpRouterContext): Promise<HttpResponseContext> => {
28
+ const params = ${n.entity}ParamsSchema.safeParse(ctx.params);
29
+ if (!params.success) return validationFailed(params.issues);
30
+ return json(200, await this.service.get(params.data.id));
31
+ };
32
+
33
+ public readonly create = async (ctx: HttpRouterContext): Promise<HttpResponseContext> => {
34
+ const body = Create${n.entity}Schema.safeParse(readJsonBody(ctx));
35
+ if (!body.success) return validationFailed(body.issues);
36
+ return json(201, await this.service.create(body.data));
37
+ };
38
+
39
+ public readonly update = async (ctx: HttpRouterContext): Promise<HttpResponseContext> => {
40
+ const params = ${n.entity}ParamsSchema.safeParse(ctx.params);
41
+ if (!params.success) return validationFailed(params.issues);
42
+ const body = Update${n.entity}Schema.safeParse(readJsonBody(ctx));
43
+ if (!body.success) return validationFailed(body.issues);
44
+ return json(200, await this.service.update(params.data.id, body.data));
45
+ };
46
+
47
+ public readonly remove = async (ctx: HttpRouterContext): Promise<HttpResponseContext> => {
48
+ const params = ${n.entity}ParamsSchema.safeParse(ctx.params);
49
+ if (!params.success) return validationFailed(params.issues);
50
+ await this.service.remove(params.data.id);
51
+ return empty(204);
52
+ };
53
+ }
54
+ `;
55
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * zudojs-cli — A resource's CRUD routes, with OpenAPI metadata.
3
+ */
4
+ import { type ResourceNames } from "../../resource.names.js";
5
+ /** `routes/<slug>.routes.ts`: `register<Pascal>Routes(router, controller)`. */
6
+ export declare function renderResourceRoutes(n: ResourceNames): string;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * zudojs-cli — A resource's CRUD routes, with OpenAPI metadata.
3
+ */
4
+ import { withArticle } from "../../resource.names.js";
5
+ /** `routes/<slug>.routes.ts`: `register<Pascal>Routes(router, controller)`. */
6
+ export function renderResourceRoutes(n) {
7
+ const schemas = [
8
+ `Create${n.entity}Schema`,
9
+ `List${n.pascal}QuerySchema`,
10
+ `${n.entity}PageSchema`,
11
+ `${n.entity}ParamsSchema`,
12
+ `${n.entity}Schema`,
13
+ `Update${n.entity}Schema`,
14
+ ].join(", ");
15
+ return `import type { HttpRouter } from "@zudojs/http";
16
+
17
+ import type { ${n.pascal}Controller } from "../controllers/${n.slug}.controller.js";
18
+ import { ${schemas} } from "../dtos/${n.slug}.dto.js";
19
+
20
+ const BASE_PATH = "${n.routePath}";
21
+ const TAGS = ["${n.slug}"];
22
+ const invalid = { description: "The request failed validation" };
23
+ const missing = { description: "No ${n.label} has this id" };
24
+
25
+ /** Registers the ${n.slug} CRUD routes. */
26
+ export function register${n.pascal}Routes(
27
+ router: HttpRouter,
28
+ controller: ${n.pascal}Controller,
29
+ ): void {
30
+ router.get(BASE_PATH, controller.list, {
31
+ openapi: {
32
+ summary: "List ${n.slug}",
33
+ tags: TAGS,
34
+ query: List${n.pascal}QuerySchema,
35
+ responses: { "200": { description: "A page of ${n.label} records", schema: ${n.entity}PageSchema }, "400": invalid },
36
+ },
37
+ });
38
+
39
+ router.get(\`\${BASE_PATH}/:id\`, controller.get, {
40
+ openapi: {
41
+ summary: "Get ${withArticle(n.label)}",
42
+ tags: TAGS,
43
+ params: ${n.entity}ParamsSchema,
44
+ responses: { "200": { description: "The ${n.label}", schema: ${n.entity}Schema }, "400": invalid, "404": missing },
45
+ },
46
+ });
47
+
48
+ router.post(BASE_PATH, controller.create, {
49
+ openapi: {
50
+ summary: "Create ${withArticle(n.label)}",
51
+ tags: TAGS,
52
+ body: Create${n.entity}Schema,
53
+ responses: { "201": { description: "Created", schema: ${n.entity}Schema }, "400": invalid },
54
+ },
55
+ });
56
+
57
+ router.patch(\`\${BASE_PATH}/:id\`, controller.update, {
58
+ openapi: {
59
+ summary: "Update ${withArticle(n.label)}",
60
+ tags: TAGS,
61
+ params: ${n.entity}ParamsSchema,
62
+ body: Update${n.entity}Schema,
63
+ responses: { "200": { description: "Updated", schema: ${n.entity}Schema }, "400": invalid, "404": missing },
64
+ },
65
+ });
66
+
67
+ router.delete(\`\${BASE_PATH}/:id\`, controller.remove, {
68
+ openapi: {
69
+ summary: "Delete ${withArticle(n.label)}",
70
+ tags: TAGS,
71
+ params: ${n.entity}ParamsSchema,
72
+ responses: { "204": { description: "Deleted" }, "400": invalid, "404": missing },
73
+ },
74
+ });
75
+ }
76
+ `;
77
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * zudojs-cli — A resource's HTTP test.
3
+ */
4
+ import { type ResourceNames } from "../../resource.names.js";
5
+ /**
6
+ * `tests/<slug>.test.ts` (or `tests/modules/<module>/<slug>.test.ts` for a
7
+ * module resource): drives the routes over real HTTP with
8
+ * `createHttpTestClient`, backed by the in-memory repository.
9
+ * `baseFromTests` is the import prefix from the test's folder to the layers.
10
+ */
11
+ export declare function renderResourceTest(n: ResourceNames, baseFromTests: string): string;
@@ -0,0 +1,84 @@
1
+ /**
2
+ * zudojs-cli — A resource's HTTP test.
3
+ */
4
+ import { withArticle } from "../../resource.names.js";
5
+ /**
6
+ * `tests/<slug>.test.ts` (or `tests/modules/<module>/<slug>.test.ts` for a
7
+ * module resource): drives the routes over real HTTP with
8
+ * `createHttpTestClient`, backed by the in-memory repository.
9
+ * `baseFromTests` is the import prefix from the test's folder to the layers.
10
+ */
11
+ export function renderResourceTest(n, baseFromTests) {
12
+ const b = baseFromTests;
13
+ return `import { afterAll, describe, expect, it } from "vitest";
14
+ import { createRouter } from "@zudojs/http";
15
+ import { createHttpTestClient } from "@zudojs/testing";
16
+
17
+ import { ${n.pascal}Controller } from "${b}/controllers/${n.slug}.controller.js";
18
+ import type { ${n.entity}Page } from "${b}/dtos/${n.slug}.dto.js";
19
+ import { InMemory${n.pascal}Repository } from "${b}/repositories/${n.slug}.repository.js";
20
+ import { register${n.pascal}Routes } from "${b}/routes/${n.slug}.routes.js";
21
+ import { ${n.pascal}Service } from "${b}/services/${n.slug}.service.js";
22
+
23
+ const router = createRouter();
24
+ register${n.pascal}Routes(
25
+ router,
26
+ new ${n.pascal}Controller(new ${n.pascal}Service(new InMemory${n.pascal}Repository())),
27
+ );
28
+ const client = createHttpTestClient(router);
29
+ afterAll(() => client.close());
30
+
31
+ describe("${n.routePath}", () => {
32
+ it("creates, reads, updates and deletes ${withArticle(n.label)}", async () => {
33
+ const created = await client
34
+ .post("${n.routePath}")
35
+ .send({ name: "Ada" })
36
+ .expect(201)
37
+ .expectJson({ name: "Ada" });
38
+ const { id } = created.json<{ id: string }>();
39
+
40
+ await client.get(\`${n.routePath}/\${id}\`).expect(200).expectJson({ id, name: "Ada" });
41
+ await client
42
+ .patch(\`${n.routePath}/\${id}\`)
43
+ .send({ name: "Grace" })
44
+ .expect(200)
45
+ .expectJson({ name: "Grace" });
46
+ await client.delete(\`${n.routePath}/\${id}\`).expect(204);
47
+ await client.get(\`${n.routePath}/\${id}\`).expect(404);
48
+ });
49
+
50
+ it("lists ${n.label} records a page at a time", async () => {
51
+ const ids: string[] = [];
52
+ for (const name of ["Ada", "Grace", "Linus"]) {
53
+ const created = await client.post("${n.routePath}").send({ name }).expect(201);
54
+ ids.push(created.json<{ id: string }>().id);
55
+ }
56
+
57
+ const seen: string[] = [];
58
+ let cursor: string | null = null;
59
+ do {
60
+ const query: string = cursor === null ? "?limit=2" : \`?limit=2&cursor=\${cursor}\`;
61
+ const page: ${n.entity}Page = (await client.get(\`${n.routePath}\${query}\`).expect(200)).json<${n.entity}Page>();
62
+ expect(page.items.length).toBeLessThanOrEqual(2);
63
+ seen.push(...page.items.map((item) => item.id));
64
+ cursor = page.nextCursor;
65
+ } while (cursor !== null);
66
+ expect(seen).toEqual(expect.arrayContaining(ids));
67
+
68
+ await client.get("${n.routePath}?limit=0").expect(400);
69
+ });
70
+
71
+ it("rejects an invalid body with 400", async () => {
72
+ await client
73
+ .post("${n.routePath}")
74
+ .send({ name: "" })
75
+ .expect(400)
76
+ .expectJson({ error: "Validation failed" });
77
+ });
78
+
79
+ it("rejects an id that is not a UUID with 400", async () => {
80
+ await client.get("${n.routePath}/not-a-uuid").expect(400);
81
+ });
82
+ });
83
+ `;
84
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * zudojs-cli — A resource's repository contract and in-memory store.
3
+ */
4
+ import type { ResourceNames } from "../resource.names.js";
5
+ /** `repositories/<slug>.repository.ts`: the contract and a memory store. */
6
+ export declare function renderResourceRepository(n: ResourceNames): string;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * zudojs-cli — A resource's repository contract and in-memory store.
3
+ */
4
+ /** `repositories/<slug>.repository.ts`: the contract and a memory store. */
5
+ export function renderResourceRepository(n) {
6
+ const types = `Create${n.entity}Input, ${n.entity}, ${n.entity}Page, ${n.entity}PageRequest, Update${n.entity}Input`;
7
+ return `import { randomUUID } from "node:crypto";
8
+
9
+ import { ConflictError } from "@zudojs/errors";
10
+
11
+ import type { ${types} } from "../dtos/${n.slug}.dto.js";
12
+
13
+ /** Storage contract for ${n.label} records; the service depends on this only. */
14
+ export interface ${n.pascal}Repository {
15
+ /** One page in creation order, continuing after \`cursor\` when given. */
16
+ list(page: ${n.entity}PageRequest): Promise<${n.entity}Page>;
17
+ findById(id: string): Promise<${n.entity} | undefined>;
18
+ create(input: Create${n.entity}Input): Promise<${n.entity}>;
19
+ update(id: string, input: Update${n.entity}Input): Promise<${n.entity} | undefined>;
20
+ delete(id: string): Promise<boolean>;
21
+ }
22
+
23
+ /** Most records the in-memory store keeps, so it cannot exhaust memory. */
24
+ const MAX_RECORDS = 10_000;
25
+
26
+ /**
27
+ * Keeps ${n.label} records in process memory: for development and tests.
28
+ * Data is lost on restart. Swap the implementation in container.ts.
29
+ */
30
+ export class InMemory${n.pascal}Repository implements ${n.pascal}Repository {
31
+ private readonly records = new Map<string, ${n.entity}>();
32
+
33
+ public async list(page: ${n.entity}PageRequest): Promise<${n.entity}Page> {
34
+ // A Map iterates in insertion order, which is creation order here.
35
+ const all = [...this.records.values()];
36
+ let start = 0;
37
+ if (page.cursor !== undefined) {
38
+ const at = all.findIndex((record) => record.id === page.cursor);
39
+ if (at === -1) return { items: [], nextCursor: null };
40
+ start = at + 1;
41
+ }
42
+ const items = all.slice(start, start + page.limit);
43
+ const last = items.at(-1);
44
+ const nextCursor = last !== undefined && start + page.limit < all.length ? last.id : null;
45
+ return { items, nextCursor };
46
+ }
47
+
48
+ public async findById(id: string): Promise<${n.entity} | undefined> {
49
+ return this.records.get(id);
50
+ }
51
+
52
+ public async create(input: Create${n.entity}Input): Promise<${n.entity}> {
53
+ if (this.records.size >= MAX_RECORDS) {
54
+ throw new ConflictError("The in-memory ${n.label} store is full.");
55
+ }
56
+ const now = new Date().toISOString();
57
+ const record: ${n.entity} = {
58
+ id: randomUUID(),
59
+ name: input.name,
60
+ createdAt: now,
61
+ updatedAt: now,
62
+ };
63
+ this.records.set(record.id, record);
64
+ return record;
65
+ }
66
+
67
+ public async update(
68
+ id: string,
69
+ input: Update${n.entity}Input,
70
+ ): Promise<${n.entity} | undefined> {
71
+ const existing = this.records.get(id);
72
+ if (existing === undefined) return undefined;
73
+ const updated: ${n.entity} = {
74
+ ...existing,
75
+ name: input.name ?? existing.name,
76
+ updatedAt: new Date().toISOString(),
77
+ };
78
+ this.records.set(id, updated);
79
+ return updated;
80
+ }
81
+
82
+ public async delete(id: string): Promise<boolean> {
83
+ return this.records.delete(id);
84
+ }
85
+ }
86
+ `;
87
+ }
@@ -12,4 +12,3 @@ export declare function renderPrismaRepository(n: ResourceNames, appSrcFromRepos
12
12
  export declare function renderPrismaModel(n: ResourceNames): string;
13
13
  /** Whether `schema` already declares a model named `entity`. */
14
14
  export declare function hasPrismaModel(schema: string, entity: string): boolean;
15
- //# sourceMappingURL=resourcePrisma.template.d.ts.map
@@ -7,7 +7,7 @@
7
7
  */
8
8
  /** `repositories/<slug>.prisma.repository.ts`. */
9
9
  export function renderPrismaRepository(n, appSrcFromRepositories) {
10
- const types = `Create${n.entity}Input, ${n.entity}, Update${n.entity}Input`;
10
+ const types = `Create${n.entity}Input, ${n.entity}, ${n.entity}Page, ${n.entity}PageRequest, Update${n.entity}Input`;
11
11
  const delegate = `prisma().${n.entityCamel}`;
12
12
  return `import { prisma } from "${appSrcFromRepositories}/integrations/database.js";
13
13
  import type { ${types} } from "../dtos/${n.slug}.dto.js";
@@ -29,17 +29,19 @@ function to${n.entity}(row: ${n.entity}Row): ${n.entity} {
29
29
  };
30
30
  }
31
31
 
32
- /** Most rows \`findAll\` returns; add pagination before raising it. */
33
- const LIST_LIMIT = 1000;
34
-
35
32
  /** Stores ${n.label} records in the \`${n.slug.replace(/-/g, "_")}\` table through Prisma. */
36
33
  export class Prisma${n.pascal}Repository implements ${n.pascal}Repository {
37
- public async findAll(): Promise<readonly ${n.entity}[]> {
34
+ public async list(page: ${n.entity}PageRequest): Promise<${n.entity}Page> {
35
+ // Keyset pagination: one row more than asked tells whether a next page
36
+ // exists; \`cursor\` names the last row seen and \`skip: 1\` steps past it.
38
37
  const rows = await ${delegate}.findMany({
39
- orderBy: { createdAt: "asc" },
40
- take: LIST_LIMIT,
38
+ orderBy: [{ createdAt: "asc" }, { id: "asc" }],
39
+ take: page.limit + 1,
40
+ ...(page.cursor === undefined ? {} : { cursor: { id: page.cursor }, skip: 1 }),
41
41
  });
42
- return rows.map(to${n.entity});
42
+ const items = rows.slice(0, page.limit).map(to${n.entity});
43
+ const last = items.at(-1);
44
+ return { items, nextCursor: rows.length > page.limit && last !== undefined ? last.id : null };
43
45
  }
44
46
 
45
47
  public async findById(id: string): Promise<${n.entity} | undefined> {
@@ -86,4 +88,3 @@ model ${n.entity} {
86
88
  export function hasPrismaModel(schema, entity) {
87
89
  return new RegExp(`^model\\s+${entity}\\s*\\{`, "m").test(schema);
88
90
  }
89
- //# sourceMappingURL=resourcePrisma.template.js.map
@@ -1,13 +1,6 @@
1
1
  /**
2
- * zudojs-cli — A resource's service and controller.
2
+ * zudojs-cli — A resource's service.
3
3
  */
4
4
  import type { ResourceNames } from "../resource.names.js";
5
5
  /** `services/<slug>.service.ts`: CRUD with NotFoundError for missing ids. */
6
6
  export declare function renderResourceService(n: ResourceNames): string;
7
- /**
8
- * `controllers/<slug>.controller.ts`: validates input with the DTO schemas
9
- * and maps service results to responses. Handlers are arrow properties so
10
- * they can be passed to the router unbound.
11
- */
12
- export declare function renderResourceController(n: ResourceNames, appSrcFromControllers: string): string;
13
- //# sourceMappingURL=resourceService.template.d.ts.map
@@ -1,11 +1,12 @@
1
1
  /**
2
- * zudojs-cli — A resource's service and controller.
2
+ * zudojs-cli — A resource's service.
3
3
  */
4
4
  /** `services/<slug>.service.ts`: CRUD with NotFoundError for missing ids. */
5
5
  export function renderResourceService(n) {
6
- const types = `Create${n.entity}Input, ${n.entity}, Update${n.entity}Input`;
6
+ const types = `Create${n.entity}Input, ${n.entity}, ${n.entity}Page, List${n.pascal}Query, Update${n.entity}Input`;
7
7
  return `import { NotFoundError } from "@zudojs/errors";
8
8
 
9
+ import { DEFAULT_PAGE_SIZE } from "../dtos/${n.slug}.dto.js";
9
10
  import type { ${types} } from "../dtos/${n.slug}.dto.js";
10
11
  import type { ${n.pascal}Repository } from "../repositories/${n.slug}.repository.js";
11
12
 
@@ -13,8 +14,12 @@ import type { ${n.pascal}Repository } from "../repositories/${n.slug}.repository
13
14
  export class ${n.pascal}Service {
14
15
  public constructor(private readonly repository: ${n.pascal}Repository) {}
15
16
 
16
- public list(): Promise<readonly ${n.entity}[]> {
17
- return this.repository.findAll();
17
+ /** One page of ${n.label} records (\`limit\` defaults to DEFAULT_PAGE_SIZE). */
18
+ public list(query: List${n.pascal}Query): Promise<${n.entity}Page> {
19
+ return this.repository.list({
20
+ limit: query.limit ?? DEFAULT_PAGE_SIZE,
21
+ ...(query.cursor === undefined ? {} : { cursor: query.cursor }),
22
+ });
18
23
  }
19
24
 
20
25
  public async get(id: string): Promise<${n.entity}> {
@@ -43,53 +48,3 @@ function notFound(id: string): NotFoundError {
43
48
  }
44
49
  `;
45
50
  }
46
- /**
47
- * `controllers/<slug>.controller.ts`: validates input with the DTO schemas
48
- * and maps service results to responses. Handlers are arrow properties so
49
- * they can be passed to the router unbound.
50
- */
51
- export function renderResourceController(n, appSrcFromControllers) {
52
- const schemas = `Create${n.entity}Schema, ${n.entity}ParamsSchema, Update${n.entity}Schema`;
53
- return `import type { HttpResponseContext, HttpRouterContext } from "@zudojs/http";
54
-
55
- import { ${schemas} } from "../dtos/${n.slug}.dto.js";
56
- import type { ${n.pascal}Service } from "../services/${n.slug}.service.js";
57
- import { empty, json, readJsonBody, validationFailed } from "${appSrcFromControllers}/utils/http.js";
58
-
59
- /** HTTP handlers for ${n.routePath}. */
60
- export class ${n.pascal}Controller {
61
- public constructor(private readonly service: ${n.pascal}Service) {}
62
-
63
- public readonly list = async (): Promise<HttpResponseContext> =>
64
- json(200, await this.service.list());
65
-
66
- public readonly get = async (ctx: HttpRouterContext): Promise<HttpResponseContext> => {
67
- const params = ${n.entity}ParamsSchema.safeParse(ctx.params);
68
- if (!params.success) return validationFailed(params.issues);
69
- return json(200, await this.service.get(params.data.id));
70
- };
71
-
72
- public readonly create = async (ctx: HttpRouterContext): Promise<HttpResponseContext> => {
73
- const body = Create${n.entity}Schema.safeParse(readJsonBody(ctx));
74
- if (!body.success) return validationFailed(body.issues);
75
- return json(201, await this.service.create(body.data));
76
- };
77
-
78
- public readonly update = async (ctx: HttpRouterContext): Promise<HttpResponseContext> => {
79
- const params = ${n.entity}ParamsSchema.safeParse(ctx.params);
80
- if (!params.success) return validationFailed(params.issues);
81
- const body = Update${n.entity}Schema.safeParse(readJsonBody(ctx));
82
- if (!body.success) return validationFailed(body.issues);
83
- return json(200, await this.service.update(params.data.id, body.data));
84
- };
85
-
86
- public readonly remove = async (ctx: HttpRouterContext): Promise<HttpResponseContext> => {
87
- const params = ${n.entity}ParamsSchema.safeParse(ctx.params);
88
- if (!params.success) return validationFailed(params.issues);
89
- await this.service.remove(params.data.id);
90
- return empty(204);
91
- };
92
- }
93
- `;
94
- }
95
- //# sourceMappingURL=resourceService.template.js.map
@@ -30,4 +30,3 @@ export interface ResourceWiring {
30
30
  }
31
31
  /** Describes how a resource is registered (see {@link ResourceWiring}). */
32
32
  export declare function resourceWiring(n: ResourceNames, layout: ResourceLayout): ResourceWiring;
33
- //# sourceMappingURL=resource.files.d.ts.map
@@ -36,7 +36,11 @@ export function resourceLayerPaths(n, layout, layer) {
36
36
  case "routes":
37
37
  return [joinPath(layout.base, "routes", `${n.slug}.routes.ts`)];
38
38
  case "test":
39
- return [joinPath(layout.appRoot, "tests", `${n.slug}.test.ts`)];
39
+ // A module resource's test sits under tests/modules/<module>/, so two
40
+ // modules can each have a resource of the same name.
41
+ return [
42
+ joinPath(layout.appRoot, "tests", posix.relative(layout.appSrc, layout.base), `${n.slug}.test.ts`),
43
+ ];
40
44
  }
41
45
  }
42
46
  /** Renders `layers` of a resource as `{ path: content }`. */
@@ -65,11 +69,9 @@ export function renderResourceLayers(n, layout, layers) {
65
69
  case "routes":
66
70
  files[path] = renderResourceRoutes(n);
67
71
  break;
68
- case "test": {
69
- const tests = joinPath(layout.appRoot, "tests");
70
- files[path] = renderResourceTest(n, posix.relative(tests, layout.base));
72
+ case "test":
73
+ files[path] = renderResourceTest(n, posix.relative(posix.dirname(path), layout.base));
71
74
  break;
72
- }
73
75
  }
74
76
  }
75
77
  return files;
@@ -96,4 +98,3 @@ export function resourceWiring(n, layout) {
96
98
  containerKey: key,
97
99
  };
98
100
  }
99
- //# sourceMappingURL=resource.files.js.map
@@ -41,4 +41,3 @@ export declare function resourceNames(raw: string): ResourceNames;
41
41
  * Pass `capitalize` for the start of a sentence ("An example").
42
42
  */
43
43
  export declare function withArticle(noun: string, capitalize?: boolean): string;
44
- //# sourceMappingURL=resource.names.d.ts.map
@@ -72,4 +72,3 @@ export function withArticle(noun, capitalize = false) {
72
72
  const article = vowel ? "an" : "a";
73
73
  return `${capitalize ? article.charAt(0).toUpperCase() + article.slice(1) : article} ${noun}`;
74
74
  }
75
- //# sourceMappingURL=resource.names.js.map
@@ -16,4 +16,3 @@ export interface ResourceLayout {
16
16
  export declare function toAppSrc(layout: ResourceLayout, layerDir: string): string;
17
17
  /** Joins path segments, dropping empty ones. */
18
18
  export declare function joinPath(...parts: readonly string[]): string;
19
- //# sourceMappingURL=resource.type.d.ts.map
@@ -12,4 +12,3 @@ export function toAppSrc(layout, layerDir) {
12
12
  export function joinPath(...parts) {
13
13
  return posix.join(...parts.filter((part) => part.length > 0));
14
14
  }
15
- //# sourceMappingURL=resource.type.js.map
@@ -52,4 +52,3 @@ export declare function renderModuleFile(options: {
52
52
  }): string;
53
53
  /** Renders a service class using the real `createLogger` factory. */
54
54
  export declare function renderServiceFile(name: string): string;
55
- //# sourceMappingURL=appRuntime.template.d.ts.map
@@ -54,7 +54,6 @@ ${options.modules.map((m) => ` new ${m.className}(),`).join("\n")}${options.m
54
54
  : `\n metadata: { port: ${options.port} },`;
55
55
  return `import type { Server } from "node:http";
56
56
 
57
- import { resolveEnvironment } from "@zudojs/constants";
58
57
  import { createContainer } from "@zudojs/container";
59
58
  import type { Module } from "@zudojs/core";
60
59
  import { createEventBus } from "@zudojs/events";
@@ -79,6 +78,10 @@ export interface AppOptions {
79
78
  * modules share, and the options describing this application. Integrations
80
79
  * (\`src/integrations\`) are registered first so they start before, and stop
81
80
  * after, every other module.
81
+ *
82
+ * The runtime's container is the one modules see as
83
+ * \`context.application.container\`; server.ts registers the composition
84
+ * root (\`container.ts\`) in it under \`APP_DEPENDENCIES\`.
82
85
  */
83
86
  export function createApp(options: AppOptions): Runtime {
84
87
  const logger = createLogger({ name: ${literal(options.applicationName)} });
@@ -97,9 +100,8 @@ ${registration}
97
100
  {
98
101
  applicationName: ${literal(options.applicationName)},
99
102
  applicationVersion: "0.1.0",
100
- // NODE_ENV is read the same way the framework reads it: \`prod\` and
101
- // \`Production\` are production, an unknown value warns once.
102
- environment: resolveEnvironment(),
103
+ // Resolved once by loadConfig (configs/index.ts) from NODE_ENV.
104
+ environment: options.config.nodeEnv,
103
105
  // Signals are handled explicitly in server.ts.
104
106
  handleSignals: false,${metadata}
105
107
  },
@@ -166,4 +168,3 @@ export class ${className} {
166
168
  }
167
169
  `;
168
170
  }
169
- //# sourceMappingURL=appRuntime.template.js.map
@@ -31,4 +31,3 @@ export declare function resolveProjectCapabilities(options: ScaffoldOptions): re
31
31
  * `zudojs add` and `zudojs doctor` use.
32
32
  */
33
33
  export declare function capabilityPackages(capabilities: readonly string[]): readonly string[];
34
- //# sourceMappingURL=capability.template.d.ts.map
@@ -59,4 +59,3 @@ export function capabilityPackages(capabilities) {
59
59
  }
60
60
  return [...packages];
61
61
  }
62
- //# sourceMappingURL=capability.template.js.map
@@ -32,4 +32,3 @@ export declare function lockedInstallSteps(packageManager: string): DockerInstal
32
32
  * package, so it cannot pin this app's isolated install.
33
33
  */
34
34
  export declare function workspaceMemberInstallSteps(packageManager: string): DockerInstallSteps;
35
- //# sourceMappingURL=dockerfile.install.d.ts.map
@@ -86,4 +86,3 @@ export function workspaceMemberInstallSteps(packageManager) {
86
86
  };
87
87
  }
88
88
  }
89
- //# sourceMappingURL=dockerfile.install.js.map
@@ -35,4 +35,3 @@ export declare function renderWorkspaceAppDockerfile(options: {
35
35
  readonly port: number;
36
36
  readonly packageManager: string;
37
37
  }): string;
38
- //# sourceMappingURL=dockerfile.template.d.ts.map