zudojs-cli 2.1.3 → 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 +19 -8
  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 +0 -1
  229. package/dist/src/generators/middleware/index.js +0 -1
  230. package/dist/src/generators/middleware/middleware.generator.d.ts +0 -1
  231. package/dist/src/generators/middleware/middleware.generator.js +0 -1
  232. package/dist/src/generators/middleware/middleware.template.d.ts +0 -1
  233. package/dist/src/generators/middleware/middleware.template.js +0 -1
  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 -23
  517. package/dist/src/templates/shared/server.template.js +42 -69
  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,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
@@ -12,15 +12,26 @@ import { lockedInstallSteps, workspaceMemberInstallSteps, } from "./dockerfile.i
12
12
  function runnerFor(packageManager) {
13
13
  return packageManager === "npm" || packageManager === "bun" ? "npm" : packageManager;
14
14
  }
15
- /** The runtime stage of a single-package image. */
16
- function runtimeStage(port, dist, from) {
15
+ /**
16
+ * The runtime stage of a single-package image. With Prisma, the schema,
17
+ * migrations and `prisma.config.ts` come along (the CLI is a runtime
18
+ * dependency), so the same image applies migrations.
19
+ */
20
+ function runtimeStage(port, dist, from, prisma = false) {
21
+ const migrations = prisma
22
+ ? `COPY --from=build --chown=node:node ${from}/prisma ./prisma
23
+ COPY --from=build --chown=node:node ${from}/prisma.config.ts ./
24
+ # Apply migrations with this image before starting a new version:
25
+ # docker run --rm --env-file .env <image> npx prisma migrate deploy
26
+ `
27
+ : "";
17
28
  return `FROM node:24-alpine AS runtime
18
29
  ENV NODE_ENV=production
19
30
  WORKDIR /app
20
31
  COPY --from=build --chown=node:node ${from}/package.json ./
21
32
  COPY --from=build --chown=node:node ${from}/node_modules ./node_modules
22
33
  COPY --from=build --chown=node:node ${from}/${dist} ./${dist}
23
- USER node
34
+ ${migrations}USER node
24
35
  EXPOSE ${port}
25
36
  HEALTHCHECK --interval=30s --timeout=5s --start-period=15s CMD ["node", "-e", "fetch('http://127.0.0.1:${port}/health').then((r) => process.exit(r.ok ? 0 : 1), () => process.exit(1))"]
26
37
  CMD ["node", "${dist}/server.js"]
@@ -58,7 +69,7 @@ export function renderAppPackageDockerfile(options) {
58
69
  ...(steps.prune === undefined ? [] : [`RUN ${steps.prune}`]),
59
70
  "",
60
71
  ];
61
- return `${lines.join("\n")}\n${runtimeStage(options.port, "dist", "/app")}`;
72
+ return `${lines.join("\n")}\n${runtimeStage(options.port, "dist", "/app", options.prisma === true)}`;
62
73
  }
63
74
  /**
64
75
  * A Dockerfile for a workspace whose server lives in `appDirectory`. The whole
@@ -92,4 +103,3 @@ HEALTHCHECK --interval=30s --timeout=5s --start-period=15s CMD ["node", "-e", "f
92
103
  CMD ["node", "${dist}/server.js"]
93
104
  `;
94
105
  }
95
- //# sourceMappingURL=dockerfile.template.js.map
@@ -3,4 +3,3 @@
3
3
  */
4
4
  export * from "./dockerfile.template.js";
5
5
  export * from "./dockerfile.install.js";
6
- //# sourceMappingURL=index.d.ts.map
@@ -3,4 +3,3 @@
3
3
  */
4
4
  export * from "./dockerfile.template.js";
5
5
  export * from "./dockerfile.install.js";
6
- //# sourceMappingURL=index.js.map
@@ -5,5 +5,5 @@ export * from "./appRuntime.template.js";
5
5
  export * from "./capability.template.js";
6
6
  export * from "./dockerfile/index.js";
7
7
  export * from "./pnpm.template.js";
8
+ export { renderShutdownBlock } from "./server.parts.js";
8
9
  export * from "./server.template.js";
9
- //# sourceMappingURL=index.d.ts.map
@@ -5,5 +5,5 @@ export * from "./appRuntime.template.js";
5
5
  export * from "./capability.template.js";
6
6
  export * from "./dockerfile/index.js";
7
7
  export * from "./pnpm.template.js";
8
+ export { renderShutdownBlock } from "./server.parts.js";
8
9
  export * from "./server.template.js";
9
- //# sourceMappingURL=index.js.map
@@ -30,4 +30,3 @@ export declare const PNPM_ALLOWED_BUILD_SCRIPTS: readonly ["esbuild", "@swc/core
30
30
  * when it writes the file itself.
31
31
  */
32
32
  export declare function renderPnpmWorkspaceFile(packages?: readonly string[]): string;
33
- //# sourceMappingURL=pnpm.template.d.ts.map
@@ -62,4 +62,3 @@ export function renderPnpmWorkspaceFile(packages = []) {
62
62
  lines.push("");
63
63
  return lines.join("\n");
64
64
  }
65
- //# sourceMappingURL=pnpm.template.js.map
@@ -0,0 +1,28 @@
1
+ /**
2
+ * zudojs-cli — Fragments of the generated `src/server.ts`.
3
+ *
4
+ * The OpenAPI lines (also inserted by `zudojs add openapi`) and the
5
+ * shutdown block. `server.template.ts` assembles them.
6
+ */
7
+ /**
8
+ * The lines `zudojs add openapi` (or `create`) puts in server.ts.
9
+ *
10
+ * The documentation page is served in every environment but production:
11
+ * it lists every route and its schemas, which a public deployment should
12
+ * not hand out by default. `/openapi.json` stays, for clients and tooling.
13
+ */
14
+ export declare function openApiServerLines(title: string): {
15
+ readonly importLine: string;
16
+ readonly mountLine: string;
17
+ };
18
+ /**
19
+ * The SIGINT/SIGTERM handlers and the "Listening on" line.
20
+ *
21
+ * The signal listeners stay registered (`process.on`, not `once`) for the
22
+ * whole shutdown. Under `tsx watch`, Ctrl+C delivers SIGINT twice (from the
23
+ * terminal and forwarded by the watcher); with `once` the second signal
24
+ * found no listener and Node's default action killed the process before
25
+ * the runtime had stopped or logged anything. "Listening on" is logged once
26
+ * the listeners are in place, so a signal sent after it is always handled.
27
+ */
28
+ export declare function renderShutdownBlock(): string;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * zudojs-cli — Fragments of the generated `src/server.ts`.
3
+ *
4
+ * The OpenAPI lines (also inserted by `zudojs add openapi`) and the
5
+ * shutdown block. `server.template.ts` assembles them.
6
+ */
7
+ /** Emits a string as a TypeScript string literal that cannot break out. */
8
+ function literal(value) {
9
+ return JSON.stringify(value);
10
+ }
11
+ /**
12
+ * The lines `zudojs add openapi` (or `create`) puts in server.ts.
13
+ *
14
+ * The documentation page is served in every environment but production:
15
+ * it lists every route and its schemas, which a public deployment should
16
+ * not hand out by default. `/openapi.json` stays, for clients and tooling.
17
+ */
18
+ export function openApiServerLines(title) {
19
+ return {
20
+ importLine: `import { mountOpenAPI } from "@zudojs/http";`,
21
+ mountLine: `mountOpenAPI(router, { info: { title: ${literal(title)}, version: "0.1.0" }, docsPath: config.nodeEnv === "production" ? false : "/docs" });`,
22
+ };
23
+ }
24
+ /**
25
+ * The SIGINT/SIGTERM handlers and the "Listening on" line.
26
+ *
27
+ * The signal listeners stay registered (`process.on`, not `once`) for the
28
+ * whole shutdown. Under `tsx watch`, Ctrl+C delivers SIGINT twice (from the
29
+ * terminal and forwarded by the watcher); with `once` the second signal
30
+ * found no listener and Node's default action killed the process before
31
+ * the runtime had stopped or logged anything. "Listening on" is logged once
32
+ * the listeners are in place, so a signal sent after it is always handled.
33
+ */
34
+ export function renderShutdownBlock() {
35
+ return `let stopping = false;
36
+ for (const signal of ["SIGINT", "SIGTERM"] as const) {
37
+ process.on(signal, () => {
38
+ if (stopping) {
39
+ console.log(\`Received \${signal} again: already shutting down.\`);
40
+ return;
41
+ }
42
+ stopping = true;
43
+ console.log(\`Received \${signal}: shutting down.\`);
44
+ void drainIntegrations(integrations)
45
+ .then(() => server.stop())
46
+ .then(() => runtime.stop())
47
+ .then(() => {
48
+ process.exit(0);
49
+ })
50
+ .catch((error: unknown) => {
51
+ console.error(error);
52
+ process.exit(1);
53
+ });
54
+ });
55
+ }
56
+
57
+ console.log(\`Listening on http://\${config.host}:\${server.address?.port ?? config.port}\`);
58
+ `;
59
+ }
@@ -1,27 +1,27 @@
1
1
  /**
2
2
  * zudojs-cli — Generated `src/server.ts`
3
3
  *
4
- * The entry point loads the configuration, builds a router with
5
- * `createRouter()`, registers every route through `registerRoutes` (from
6
- * the composition root in `container.ts`), mounts the OpenAPI document and
7
- * `/docs` page when the `openapi` capability is on, and serves the router
8
- * with `createHttpServer` + `createNodeHttpAdapter`.
4
+ * The entry point loads the configuration, builds the runtime with
5
+ * `createApp()`, constructs the composition root (`container.ts`) and
6
+ * registers it in the runtime's DI container, builds a router with
7
+ * `createRouter()`, registers every route through `registerRoutes`, mounts
8
+ * the OpenAPI document (and, outside production, the `/docs` page) when the
9
+ * `openapi` capability is on, and serves the router with `createHttpServer`
10
+ * + `createNodeHttpAdapter`.
9
11
  *
10
12
  * Every response passes through the @zudojs/security default headers, a
11
13
  * CORS policy that allows only `CORS_ORIGINS` (none by default) and a
12
- * per-client rate limit (`RATE_LIMIT_MAX` per `RATE_LIMIT_WINDOW_MS`). Exposed
13
- * 4xx errors are answered with their status; anything else is a generic
14
- * 500. On SIGINT/SIGTERM integrations drain, HTTP stops, then the runtime
15
- * stops. `tests/generatedProject.typecheck.test.ts` type-checks the output
16
- * against the current `@zudojs/*` sources.
17
- *
18
- * The signal listeners stay registered (`process.on`, not `once`) for the
19
- * whole shutdown. Under `tsx watch`, Ctrl+C delivers SIGINT twice (from the
20
- * terminal and forwarded by the watcher); with `once` the second signal
21
- * found no listener and Node's default action killed the process before
22
- * the runtime had stopped or logged anything. "Listening on" is logged once
23
- * the listeners are in place, so a signal sent after it is always handled.
14
+ * per-client rate limit (`RATE_LIMIT_MAX` per `RATE_LIMIT_WINDOW_MS`; 0
15
+ * turns it off). Exposed errors are answered with their status; anything
16
+ * else is logged with the runtime's logger and answered with a generic 500
17
+ * built inside the pipeline, so it carries the security headers too. It
18
+ * used to rethrow, which left the adapter to answer a bare 500 that nothing
19
+ * logged. On SIGINT/SIGTERM integrations drain, HTTP stops, then the
20
+ * runtime stops (see `server.parts.ts`).
21
+ * `tests/generatedProject.typecheck.test.ts` type-checks the output against
22
+ * the current `@zudojs/*` sources; `tests/cli.round12.server.test.ts` runs it.
24
23
  */
24
+ export { openApiServerLines } from "./server.parts.js";
25
25
  /** Options for {@link renderServerFile}. */
26
26
  export interface ServerFileOptions {
27
27
  /** Title of the OpenAPI document. */
@@ -29,11 +29,5 @@ export interface ServerFileOptions {
29
29
  /** Whether `/openapi.json` and `/docs` are mounted. */
30
30
  readonly openapi: boolean;
31
31
  }
32
- /** The lines `zudojs add openapi` (or `create`) puts in server.ts. */
33
- export declare function openApiServerLines(title: string): {
34
- readonly importLine: string;
35
- readonly mountLine: string;
36
- };
37
32
  /** Renders `src/server.ts`. */
38
33
  export declare function renderServerFile(options: ServerFileOptions): string;
39
- //# sourceMappingURL=server.template.d.ts.map