@kabyeon/nexusjs 0.6.5

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 (669) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +860 -0
  3. package/dist/auth/auth.controller.d.ts +175 -0
  4. package/dist/auth/auth.controller.d.ts.map +1 -0
  5. package/dist/auth/auth.d.ts +47 -0
  6. package/dist/auth/auth.d.ts.map +1 -0
  7. package/dist/auth/auth.module.d.ts +34 -0
  8. package/dist/auth/auth.module.d.ts.map +1 -0
  9. package/dist/auth/auth.service.d.ts +192 -0
  10. package/dist/auth/auth.service.d.ts.map +1 -0
  11. package/dist/auth/decorators/current-user.d.ts +58 -0
  12. package/dist/auth/decorators/current-user.d.ts.map +1 -0
  13. package/dist/auth/index.d.ts +43 -0
  14. package/dist/auth/index.d.ts.map +1 -0
  15. package/dist/auth/index.js +730 -0
  16. package/dist/auth/index.js.map +25 -0
  17. package/dist/auth/middleware.d.ts +50 -0
  18. package/dist/auth/middleware.d.ts.map +1 -0
  19. package/dist/auth/types.d.ts +135 -0
  20. package/dist/auth/types.d.ts.map +1 -0
  21. package/dist/cache/cache.module.d.ts +22 -0
  22. package/dist/cache/cache.module.d.ts.map +1 -0
  23. package/dist/cache/cache.service.d.ts +37 -0
  24. package/dist/cache/cache.service.d.ts.map +1 -0
  25. package/dist/cache/index.d.ts +9 -0
  26. package/dist/cache/index.d.ts.map +1 -0
  27. package/dist/cache/index.js +814 -0
  28. package/dist/cache/index.js.map +25 -0
  29. package/dist/cache/stores/drizzle.d.ts +76 -0
  30. package/dist/cache/stores/drizzle.d.ts.map +1 -0
  31. package/dist/cache/stores/index.d.ts +10 -0
  32. package/dist/cache/stores/index.d.ts.map +1 -0
  33. package/dist/cache/stores/memory.d.ts +34 -0
  34. package/dist/cache/stores/memory.d.ts.map +1 -0
  35. package/dist/cache/stores/redis.d.ts +46 -0
  36. package/dist/cache/stores/redis.d.ts.map +1 -0
  37. package/dist/cache/types.d.ts +88 -0
  38. package/dist/cache/types.d.ts.map +1 -0
  39. package/dist/cli/commands/config.d.ts +44 -0
  40. package/dist/cli/commands/config.d.ts.map +1 -0
  41. package/dist/cli/commands/db-generate.d.ts +20 -0
  42. package/dist/cli/commands/db-generate.d.ts.map +1 -0
  43. package/dist/cli/commands/db-migrate.d.ts +33 -0
  44. package/dist/cli/commands/db-migrate.d.ts.map +1 -0
  45. package/dist/cli/commands/db-seed.d.ts +43 -0
  46. package/dist/cli/commands/db-seed.d.ts.map +1 -0
  47. package/dist/cli/commands/index.d.ts +11 -0
  48. package/dist/cli/commands/index.d.ts.map +1 -0
  49. package/dist/cli/commands/info.d.ts +11 -0
  50. package/dist/cli/commands/info.d.ts.map +1 -0
  51. package/dist/cli/commands/init.d.ts +38 -0
  52. package/dist/cli/commands/init.d.ts.map +1 -0
  53. package/dist/cli/commands/make-auth.d.ts +17 -0
  54. package/dist/cli/commands/make-auth.d.ts.map +1 -0
  55. package/dist/cli/commands/make-controller.d.ts +16 -0
  56. package/dist/cli/commands/make-controller.d.ts.map +1 -0
  57. package/dist/cli/commands/make-crud.d.ts +28 -0
  58. package/dist/cli/commands/make-crud.d.ts.map +1 -0
  59. package/dist/cli/commands/make-listener.d.ts +15 -0
  60. package/dist/cli/commands/make-listener.d.ts.map +1 -0
  61. package/dist/cli/commands/make-middleware.d.ts +7 -0
  62. package/dist/cli/commands/make-middleware.d.ts.map +1 -0
  63. package/dist/cli/commands/make-migration.d.ts +21 -0
  64. package/dist/cli/commands/make-migration.d.ts.map +1 -0
  65. package/dist/cli/commands/make-model.d.ts +22 -0
  66. package/dist/cli/commands/make-model.d.ts.map +1 -0
  67. package/dist/cli/commands/make-module.d.ts +11 -0
  68. package/dist/cli/commands/make-module.d.ts.map +1 -0
  69. package/dist/cli/commands/make-queue.d.ts +17 -0
  70. package/dist/cli/commands/make-queue.d.ts.map +1 -0
  71. package/dist/cli/commands/make-schedule.d.ts +17 -0
  72. package/dist/cli/commands/make-schedule.d.ts.map +1 -0
  73. package/dist/cli/commands/make-service.d.ts +7 -0
  74. package/dist/cli/commands/make-service.d.ts.map +1 -0
  75. package/dist/cli/commands/make-session.d.ts +15 -0
  76. package/dist/cli/commands/make-session.d.ts.map +1 -0
  77. package/dist/cli/commands/make-validator.d.ts +7 -0
  78. package/dist/cli/commands/make-validator.d.ts.map +1 -0
  79. package/dist/cli/commands/new.d.ts +14 -0
  80. package/dist/cli/commands/new.d.ts.map +1 -0
  81. package/dist/cli/commands/repl.d.ts +42 -0
  82. package/dist/cli/commands/repl.d.ts.map +1 -0
  83. package/dist/cli/commands/route-list.d.ts +12 -0
  84. package/dist/cli/commands/route-list.d.ts.map +1 -0
  85. package/dist/cli/core/args.d.ts +29 -0
  86. package/dist/cli/core/args.d.ts.map +1 -0
  87. package/dist/cli/core/config.d.ts +137 -0
  88. package/dist/cli/core/config.d.ts.map +1 -0
  89. package/dist/cli/core/fs.d.ts +38 -0
  90. package/dist/cli/core/fs.d.ts.map +1 -0
  91. package/dist/cli/core/index.d.ts +42 -0
  92. package/dist/cli/core/index.d.ts.map +1 -0
  93. package/dist/cli/core/logger.d.ts +46 -0
  94. package/dist/cli/core/logger.d.ts.map +1 -0
  95. package/dist/cli/core/loose-json.d.ts +26 -0
  96. package/dist/cli/core/loose-json.d.ts.map +1 -0
  97. package/dist/cli/core/prompts.d.ts +22 -0
  98. package/dist/cli/core/prompts.d.ts.map +1 -0
  99. package/dist/cli/core/template.d.ts +26 -0
  100. package/dist/cli/core/template.d.ts.map +1 -0
  101. package/dist/cli/index.d.ts +1 -0
  102. package/dist/cli/index.d.ts.map +1 -0
  103. package/dist/cli/index.js +6136 -0
  104. package/dist/cli/index.js.map +91 -0
  105. package/dist/cli/templates/controller/adonis.d.ts +10 -0
  106. package/dist/cli/templates/controller/adonis.d.ts.map +1 -0
  107. package/dist/cli/templates/controller/functional.d.ts +9 -0
  108. package/dist/cli/templates/controller/functional.d.ts.map +1 -0
  109. package/dist/cli/templates/controller/nest.d.ts +17 -0
  110. package/dist/cli/templates/controller/nest.d.ts.map +1 -0
  111. package/dist/cli/templates/crud/controller.d.ts +8 -0
  112. package/dist/cli/templates/crud/controller.d.ts.map +1 -0
  113. package/dist/cli/templates/crud/dto.d.ts +8 -0
  114. package/dist/cli/templates/crud/dto.d.ts.map +1 -0
  115. package/dist/cli/templates/crud/index.d.ts +33 -0
  116. package/dist/cli/templates/crud/index.d.ts.map +1 -0
  117. package/dist/cli/templates/crud/module.d.ts +6 -0
  118. package/dist/cli/templates/crud/module.d.ts.map +1 -0
  119. package/dist/cli/templates/crud/test.d.ts +10 -0
  120. package/dist/cli/templates/crud/test.d.ts.map +1 -0
  121. package/dist/cli/templates/index.d.ts +39 -0
  122. package/dist/cli/templates/index.d.ts.map +1 -0
  123. package/dist/cli/templates/middleware/middleware.d.ts +8 -0
  124. package/dist/cli/templates/middleware/middleware.d.ts.map +1 -0
  125. package/dist/cli/templates/migration/drizzle.d.ts +12 -0
  126. package/dist/cli/templates/migration/drizzle.d.ts.map +1 -0
  127. package/dist/cli/templates/migration/sql.d.ts +10 -0
  128. package/dist/cli/templates/migration/sql.d.ts.map +1 -0
  129. package/dist/cli/templates/model/drizzle-dialect.d.ts +29 -0
  130. package/dist/cli/templates/model/drizzle-dialect.d.ts.map +1 -0
  131. package/dist/cli/templates/model/drizzle.d.ts +14 -0
  132. package/dist/cli/templates/model/drizzle.d.ts.map +1 -0
  133. package/dist/cli/templates/model/kysely.d.ts +12 -0
  134. package/dist/cli/templates/model/kysely.d.ts.map +1 -0
  135. package/dist/cli/templates/model/prisma.d.ts +12 -0
  136. package/dist/cli/templates/model/prisma.d.ts.map +1 -0
  137. package/dist/cli/templates/module/module.d.ts +16 -0
  138. package/dist/cli/templates/module/module.d.ts.map +1 -0
  139. package/dist/cli/templates/project/drizzle.config.d.ts +12 -0
  140. package/dist/cli/templates/project/drizzle.config.d.ts.map +1 -0
  141. package/dist/cli/templates/project/nx.config.d.ts +7 -0
  142. package/dist/cli/templates/project/nx.config.d.ts.map +1 -0
  143. package/dist/cli/templates/repository/repository.d.ts +13 -0
  144. package/dist/cli/templates/repository/repository.d.ts.map +1 -0
  145. package/dist/cli/templates/service/service.d.ts +12 -0
  146. package/dist/cli/templates/service/service.d.ts.map +1 -0
  147. package/dist/cli/templates/validator/validator.d.ts +8 -0
  148. package/dist/cli/templates/validator/validator.d.ts.map +1 -0
  149. package/dist/config/config.module.d.ts +39 -0
  150. package/dist/config/config.module.d.ts.map +1 -0
  151. package/dist/config/config.service.d.ts +47 -0
  152. package/dist/config/config.service.d.ts.map +1 -0
  153. package/dist/config/index.d.ts +39 -0
  154. package/dist/config/index.d.ts.map +1 -0
  155. package/dist/config/index.js +436 -0
  156. package/dist/config/index.js.map +21 -0
  157. package/dist/config/types.d.ts +78 -0
  158. package/dist/config/types.d.ts.map +1 -0
  159. package/dist/core/application.d.ts +77 -0
  160. package/dist/core/application.d.ts.map +1 -0
  161. package/dist/core/constants.d.ts +48 -0
  162. package/dist/core/constants.d.ts.map +1 -0
  163. package/dist/core/decorators/controller.d.ts +21 -0
  164. package/dist/core/decorators/controller.d.ts.map +1 -0
  165. package/dist/core/decorators/http-methods.d.ts +33 -0
  166. package/dist/core/decorators/http-methods.d.ts.map +1 -0
  167. package/dist/core/decorators/index.d.ts +12 -0
  168. package/dist/core/decorators/index.d.ts.map +1 -0
  169. package/dist/core/decorators/injectable.d.ts +42 -0
  170. package/dist/core/decorators/injectable.d.ts.map +1 -0
  171. package/dist/core/decorators/metadata.d.ts +7 -0
  172. package/dist/core/decorators/metadata.d.ts.map +1 -0
  173. package/dist/core/decorators/module.d.ts +23 -0
  174. package/dist/core/decorators/module.d.ts.map +1 -0
  175. package/dist/core/decorators/params.d.ts +33 -0
  176. package/dist/core/decorators/params.d.ts.map +1 -0
  177. package/dist/core/decorators/repository.d.ts +24 -0
  178. package/dist/core/decorators/repository.d.ts.map +1 -0
  179. package/dist/core/decorators/validate.d.ts +21 -0
  180. package/dist/core/decorators/validate.d.ts.map +1 -0
  181. package/dist/core/di/container.d.ts +70 -0
  182. package/dist/core/di/container.d.ts.map +1 -0
  183. package/dist/core/di/index.d.ts +9 -0
  184. package/dist/core/di/index.d.ts.map +1 -0
  185. package/dist/core/di/request-middleware.d.ts +36 -0
  186. package/dist/core/di/request-middleware.d.ts.map +1 -0
  187. package/dist/core/di/request-scope.d.ts +45 -0
  188. package/dist/core/di/request-scope.d.ts.map +1 -0
  189. package/dist/core/di/scanner.d.ts +36 -0
  190. package/dist/core/di/scanner.d.ts.map +1 -0
  191. package/dist/core/di/tokens.d.ts +98 -0
  192. package/dist/core/di/tokens.d.ts.map +1 -0
  193. package/dist/core/http/context.d.ts +30 -0
  194. package/dist/core/http/context.d.ts.map +1 -0
  195. package/dist/core/http/index.d.ts +8 -0
  196. package/dist/core/http/index.d.ts.map +1 -0
  197. package/dist/core/http/middleware.d.ts +31 -0
  198. package/dist/core/http/middleware.d.ts.map +1 -0
  199. package/dist/core/http/router.d.ts +46 -0
  200. package/dist/core/http/router.d.ts.map +1 -0
  201. package/dist/core/http/server.d.ts +58 -0
  202. package/dist/core/http/server.d.ts.map +1 -0
  203. package/dist/core/index.d.ts +20 -0
  204. package/dist/core/index.d.ts.map +1 -0
  205. package/dist/core/orm/drizzle-adapter.d.ts +73 -0
  206. package/dist/core/orm/drizzle-adapter.d.ts.map +1 -0
  207. package/dist/core/orm/index.d.ts +5 -0
  208. package/dist/core/orm/index.d.ts.map +1 -0
  209. package/dist/core/runtime/bun.d.ts +13 -0
  210. package/dist/core/runtime/bun.d.ts.map +1 -0
  211. package/dist/core/runtime/cloudflare.d.ts +18 -0
  212. package/dist/core/runtime/cloudflare.d.ts.map +1 -0
  213. package/dist/core/runtime/index.d.ts +11 -0
  214. package/dist/core/runtime/index.d.ts.map +1 -0
  215. package/dist/core/runtime/node.d.ts +10 -0
  216. package/dist/core/runtime/node.d.ts.map +1 -0
  217. package/dist/core/validation/index.d.ts +5 -0
  218. package/dist/core/validation/index.d.ts.map +1 -0
  219. package/dist/core/validation/validator.d.ts +46 -0
  220. package/dist/core/validation/validator.d.ts.map +1 -0
  221. package/dist/crypto/encryption.d.ts +71 -0
  222. package/dist/crypto/encryption.d.ts.map +1 -0
  223. package/dist/crypto/hash.d.ts +52 -0
  224. package/dist/crypto/hash.d.ts.map +1 -0
  225. package/dist/crypto/index.d.ts +49 -0
  226. package/dist/crypto/index.d.ts.map +1 -0
  227. package/dist/crypto/index.js +533 -0
  228. package/dist/crypto/index.js.map +14 -0
  229. package/dist/crypto/module.d.ts +28 -0
  230. package/dist/crypto/module.d.ts.map +1 -0
  231. package/dist/crypto/types.d.ts +81 -0
  232. package/dist/crypto/types.d.ts.map +1 -0
  233. package/dist/drive/drive.module.d.ts +20 -0
  234. package/dist/drive/drive.module.d.ts.map +1 -0
  235. package/dist/drive/drive.service.d.ts +21 -0
  236. package/dist/drive/drive.service.d.ts.map +1 -0
  237. package/dist/drive/drivers/index.d.ts +9 -0
  238. package/dist/drive/drivers/index.d.ts.map +1 -0
  239. package/dist/drive/drivers/local.d.ts +24 -0
  240. package/dist/drive/drivers/local.d.ts.map +1 -0
  241. package/dist/drive/drivers/memory.d.ts +19 -0
  242. package/dist/drive/drivers/memory.d.ts.map +1 -0
  243. package/dist/drive/drivers/s3.d.ts +44 -0
  244. package/dist/drive/drivers/s3.d.ts.map +1 -0
  245. package/dist/drive/index.d.ts +9 -0
  246. package/dist/drive/index.d.ts.map +1 -0
  247. package/dist/drive/index.js +714 -0
  248. package/dist/drive/index.js.map +25 -0
  249. package/dist/drive/types.d.ts +97 -0
  250. package/dist/drive/types.d.ts.map +1 -0
  251. package/dist/drizzle/decorators/columns.d.ts +16 -0
  252. package/dist/drizzle/decorators/columns.d.ts.map +1 -0
  253. package/dist/drizzle/decorators/index.d.ts +6 -0
  254. package/dist/drizzle/decorators/index.d.ts.map +1 -0
  255. package/dist/drizzle/drivers/base.d.ts +32 -0
  256. package/dist/drizzle/drivers/base.d.ts.map +1 -0
  257. package/dist/drizzle/drivers/bun-sqlite.d.ts +6 -0
  258. package/dist/drizzle/drivers/bun-sqlite.d.ts.map +1 -0
  259. package/dist/drizzle/drivers/d1.d.ts +7 -0
  260. package/dist/drizzle/drivers/d1.d.ts.map +1 -0
  261. package/dist/drizzle/drivers/index.d.ts +14 -0
  262. package/dist/drizzle/drivers/index.d.ts.map +1 -0
  263. package/dist/drizzle/drivers/mysql.d.ts +6 -0
  264. package/dist/drizzle/drivers/mysql.d.ts.map +1 -0
  265. package/dist/drizzle/drivers/postgres.d.ts +12 -0
  266. package/dist/drizzle/drivers/postgres.d.ts.map +1 -0
  267. package/dist/drizzle/drivers/sqlite.d.ts +8 -0
  268. package/dist/drizzle/drivers/sqlite.d.ts.map +1 -0
  269. package/dist/drizzle/drizzle.module.d.ts +29 -0
  270. package/dist/drizzle/drizzle.module.d.ts.map +1 -0
  271. package/dist/drizzle/drizzle.service.d.ts +52 -0
  272. package/dist/drizzle/drizzle.service.d.ts.map +1 -0
  273. package/dist/drizzle/index.d.ts +13 -0
  274. package/dist/drizzle/index.d.ts.map +1 -0
  275. package/dist/drizzle/index.js +979 -0
  276. package/dist/drizzle/index.js.map +32 -0
  277. package/dist/drizzle/model.d.ts +26 -0
  278. package/dist/drizzle/model.d.ts.map +1 -0
  279. package/dist/drizzle/raw-query.d.ts +41 -0
  280. package/dist/drizzle/raw-query.d.ts.map +1 -0
  281. package/dist/drizzle/repository/index.d.ts +6 -0
  282. package/dist/drizzle/repository/index.d.ts.map +1 -0
  283. package/dist/drizzle/repository/repository.d.ts +60 -0
  284. package/dist/drizzle/repository/repository.d.ts.map +1 -0
  285. package/dist/drizzle/types.d.ts +160 -0
  286. package/dist/drizzle/types.d.ts.map +1 -0
  287. package/dist/events/decorators/on-event.d.ts +49 -0
  288. package/dist/events/decorators/on-event.d.ts.map +1 -0
  289. package/dist/events/emitter.d.ts +52 -0
  290. package/dist/events/emitter.d.ts.map +1 -0
  291. package/dist/events/event.service.d.ts +27 -0
  292. package/dist/events/event.service.d.ts.map +1 -0
  293. package/dist/events/events.module.d.ts +35 -0
  294. package/dist/events/events.module.d.ts.map +1 -0
  295. package/dist/events/index.d.ts +43 -0
  296. package/dist/events/index.d.ts.map +1 -0
  297. package/dist/events/index.js +646 -0
  298. package/dist/events/index.js.map +23 -0
  299. package/dist/events/types.d.ts +120 -0
  300. package/dist/events/types.d.ts.map +1 -0
  301. package/dist/grpc/decorators.d.ts +34 -0
  302. package/dist/grpc/decorators.d.ts.map +1 -0
  303. package/dist/grpc/index.d.ts +70 -0
  304. package/dist/grpc/index.d.ts.map +1 -0
  305. package/dist/grpc/index.js +528 -0
  306. package/dist/grpc/index.js.map +22 -0
  307. package/dist/grpc/module.d.ts +32 -0
  308. package/dist/grpc/module.d.ts.map +1 -0
  309. package/dist/grpc/service.d.ts +60 -0
  310. package/dist/grpc/service.d.ts.map +1 -0
  311. package/dist/grpc/types.d.ts +79 -0
  312. package/dist/grpc/types.d.ts.map +1 -0
  313. package/dist/health/health.controller.d.ts +61 -0
  314. package/dist/health/health.controller.d.ts.map +1 -0
  315. package/dist/health/health.module.d.ts +29 -0
  316. package/dist/health/health.module.d.ts.map +1 -0
  317. package/dist/health/health.service.d.ts +34 -0
  318. package/dist/health/health.service.d.ts.map +1 -0
  319. package/dist/health/index.d.ts +38 -0
  320. package/dist/health/index.d.ts.map +1 -0
  321. package/dist/health/index.js +599 -0
  322. package/dist/health/index.js.map +25 -0
  323. package/dist/health/indicators/drizzle.d.ts +18 -0
  324. package/dist/health/indicators/drizzle.d.ts.map +1 -0
  325. package/dist/health/indicators/index.d.ts +59 -0
  326. package/dist/health/indicators/index.d.ts.map +1 -0
  327. package/dist/health/types.d.ts +105 -0
  328. package/dist/health/types.d.ts.map +1 -0
  329. package/dist/i18n/decorators.d.ts +14 -0
  330. package/dist/i18n/decorators.d.ts.map +1 -0
  331. package/dist/i18n/index.d.ts +48 -0
  332. package/dist/i18n/index.d.ts.map +1 -0
  333. package/dist/i18n/index.js +589 -0
  334. package/dist/i18n/index.js.map +17 -0
  335. package/dist/i18n/middleware.d.ts +26 -0
  336. package/dist/i18n/middleware.d.ts.map +1 -0
  337. package/dist/i18n/module.d.ts +39 -0
  338. package/dist/i18n/module.d.ts.map +1 -0
  339. package/dist/i18n/service.d.ts +130 -0
  340. package/dist/i18n/service.d.ts.map +1 -0
  341. package/dist/i18n/types.d.ts +65 -0
  342. package/dist/i18n/types.d.ts.map +1 -0
  343. package/dist/index.d.ts +2 -0
  344. package/dist/index.js +2056 -0
  345. package/dist/index.js.map +53 -0
  346. package/dist/limiter/backends/drizzle.d.ts +40 -0
  347. package/dist/limiter/backends/drizzle.d.ts.map +1 -0
  348. package/dist/limiter/backends/index.d.ts +6 -0
  349. package/dist/limiter/backends/index.d.ts.map +1 -0
  350. package/dist/limiter/backends/memory.d.ts +28 -0
  351. package/dist/limiter/backends/memory.d.ts.map +1 -0
  352. package/dist/limiter/index.d.ts +9 -0
  353. package/dist/limiter/index.d.ts.map +1 -0
  354. package/dist/limiter/index.js +640 -0
  355. package/dist/limiter/index.js.map +25 -0
  356. package/dist/limiter/limiter.middleware.d.ts +11 -0
  357. package/dist/limiter/limiter.middleware.d.ts.map +1 -0
  358. package/dist/limiter/limiter.module.d.ts +23 -0
  359. package/dist/limiter/limiter.module.d.ts.map +1 -0
  360. package/dist/limiter/limiter.service.d.ts +18 -0
  361. package/dist/limiter/limiter.service.d.ts.map +1 -0
  362. package/dist/limiter/types.d.ts +99 -0
  363. package/dist/limiter/types.d.ts.map +1 -0
  364. package/dist/logger/index.d.ts +36 -0
  365. package/dist/logger/index.d.ts.map +1 -0
  366. package/dist/logger/index.js +538 -0
  367. package/dist/logger/index.js.map +22 -0
  368. package/dist/logger/logger.module.d.ts +35 -0
  369. package/dist/logger/logger.module.d.ts.map +1 -0
  370. package/dist/logger/logger.service.d.ts +55 -0
  371. package/dist/logger/logger.service.d.ts.map +1 -0
  372. package/dist/logger/transports/index.d.ts +35 -0
  373. package/dist/logger/transports/index.d.ts.map +1 -0
  374. package/dist/logger/types.d.ts +58 -0
  375. package/dist/logger/types.d.ts.map +1 -0
  376. package/dist/mail/index.d.ts +9 -0
  377. package/dist/mail/index.d.ts.map +1 -0
  378. package/dist/mail/index.js +479 -0
  379. package/dist/mail/index.js.map +25 -0
  380. package/dist/mail/mail.module.d.ts +21 -0
  381. package/dist/mail/mail.module.d.ts.map +1 -0
  382. package/dist/mail/mail.service.d.ts +18 -0
  383. package/dist/mail/mail.service.d.ts.map +1 -0
  384. package/dist/mail/transports/file.d.ts +19 -0
  385. package/dist/mail/transports/file.d.ts.map +1 -0
  386. package/dist/mail/transports/index.d.ts +9 -0
  387. package/dist/mail/transports/index.d.ts.map +1 -0
  388. package/dist/mail/transports/null.d.ts +11 -0
  389. package/dist/mail/transports/null.d.ts.map +1 -0
  390. package/dist/mail/transports/smtp.d.ts +40 -0
  391. package/dist/mail/transports/smtp.d.ts.map +1 -0
  392. package/dist/mail/types.d.ts +73 -0
  393. package/dist/mail/types.d.ts.map +1 -0
  394. package/dist/metrics/controller.d.ts +27 -0
  395. package/dist/metrics/controller.d.ts.map +1 -0
  396. package/dist/metrics/counter.d.ts +36 -0
  397. package/dist/metrics/counter.d.ts.map +1 -0
  398. package/dist/metrics/decorators/counted.d.ts +26 -0
  399. package/dist/metrics/decorators/counted.d.ts.map +1 -0
  400. package/dist/metrics/decorators/index.d.ts +3 -0
  401. package/dist/metrics/decorators/index.d.ts.map +1 -0
  402. package/dist/metrics/decorators/timed.d.ts +25 -0
  403. package/dist/metrics/decorators/timed.d.ts.map +1 -0
  404. package/dist/metrics/gauge.d.ts +38 -0
  405. package/dist/metrics/gauge.d.ts.map +1 -0
  406. package/dist/metrics/histogram.d.ts +52 -0
  407. package/dist/metrics/histogram.d.ts.map +1 -0
  408. package/dist/metrics/index.d.ts +35 -0
  409. package/dist/metrics/index.d.ts.map +1 -0
  410. package/dist/metrics/index.js +1033 -0
  411. package/dist/metrics/index.js.map +21 -0
  412. package/dist/metrics/module.d.ts +33 -0
  413. package/dist/metrics/module.d.ts.map +1 -0
  414. package/dist/metrics/registry.d.ts +52 -0
  415. package/dist/metrics/registry.d.ts.map +1 -0
  416. package/dist/metrics/service.d.ts +42 -0
  417. package/dist/metrics/service.d.ts.map +1 -0
  418. package/dist/metrics/summary.d.ts +50 -0
  419. package/dist/metrics/summary.d.ts.map +1 -0
  420. package/dist/metrics/types.d.ts +115 -0
  421. package/dist/metrics/types.d.ts.map +1 -0
  422. package/dist/openapi/decorators/body.d.ts +9 -0
  423. package/dist/openapi/decorators/body.d.ts.map +1 -0
  424. package/dist/openapi/decorators/index.d.ts +11 -0
  425. package/dist/openapi/decorators/index.d.ts.map +1 -0
  426. package/dist/openapi/decorators/operation.d.ts +9 -0
  427. package/dist/openapi/decorators/operation.d.ts.map +1 -0
  428. package/dist/openapi/decorators/param.d.ts +17 -0
  429. package/dist/openapi/decorators/param.d.ts.map +1 -0
  430. package/dist/openapi/decorators/property.d.ts +24 -0
  431. package/dist/openapi/decorators/property.d.ts.map +1 -0
  432. package/dist/openapi/decorators/response.d.ts +10 -0
  433. package/dist/openapi/decorators/response.d.ts.map +1 -0
  434. package/dist/openapi/decorators/security.d.ts +9 -0
  435. package/dist/openapi/decorators/security.d.ts.map +1 -0
  436. package/dist/openapi/decorators/tags.d.ts +2 -0
  437. package/dist/openapi/decorators/tags.d.ts.map +1 -0
  438. package/dist/openapi/index.d.ts +10 -0
  439. package/dist/openapi/index.d.ts.map +1 -0
  440. package/dist/openapi/index.js +974 -0
  441. package/dist/openapi/index.js.map +31 -0
  442. package/dist/openapi/openapi.module.d.ts +46 -0
  443. package/dist/openapi/openapi.module.d.ts.map +1 -0
  444. package/dist/openapi/openapi.service.d.ts +55 -0
  445. package/dist/openapi/openapi.service.d.ts.map +1 -0
  446. package/dist/openapi/scalar.d.ts +16 -0
  447. package/dist/openapi/scalar.d.ts.map +1 -0
  448. package/dist/openapi/types.d.ts +266 -0
  449. package/dist/openapi/types.d.ts.map +1 -0
  450. package/dist/openapi/zod-to-json-schema.d.ts +34 -0
  451. package/dist/openapi/zod-to-json-schema.d.ts.map +1 -0
  452. package/dist/package.json +59 -0
  453. package/dist/queue/backends/bullmq.d.ts +41 -0
  454. package/dist/queue/backends/bullmq.d.ts.map +1 -0
  455. package/dist/queue/backends/cloudflare.d.ts +84 -0
  456. package/dist/queue/backends/cloudflare.d.ts.map +1 -0
  457. package/dist/queue/backends/index.d.ts +7 -0
  458. package/dist/queue/backends/index.d.ts.map +1 -0
  459. package/dist/queue/backends/memory.d.ts +24 -0
  460. package/dist/queue/backends/memory.d.ts.map +1 -0
  461. package/dist/queue/decorators/on-queue-ready.d.ts +43 -0
  462. package/dist/queue/decorators/on-queue-ready.d.ts.map +1 -0
  463. package/dist/queue/index.d.ts +57 -0
  464. package/dist/queue/index.d.ts.map +1 -0
  465. package/dist/queue/index.js +961 -0
  466. package/dist/queue/index.js.map +25 -0
  467. package/dist/queue/queue.module.d.ts +46 -0
  468. package/dist/queue/queue.module.d.ts.map +1 -0
  469. package/dist/queue/queue.service.d.ts +61 -0
  470. package/dist/queue/queue.service.d.ts.map +1 -0
  471. package/dist/queue/types.d.ts +204 -0
  472. package/dist/queue/types.d.ts.map +1 -0
  473. package/dist/redis/adapters/bun.d.ts +27 -0
  474. package/dist/redis/adapters/bun.d.ts.map +1 -0
  475. package/dist/redis/adapters/cloudflare.d.ts +51 -0
  476. package/dist/redis/adapters/cloudflare.d.ts.map +1 -0
  477. package/dist/redis/adapters/index.d.ts +29 -0
  478. package/dist/redis/adapters/index.d.ts.map +1 -0
  479. package/dist/redis/adapters/memory.d.ts +28 -0
  480. package/dist/redis/adapters/memory.d.ts.map +1 -0
  481. package/dist/redis/adapters/node.d.ts +36 -0
  482. package/dist/redis/adapters/node.d.ts.map +1 -0
  483. package/dist/redis/index.d.ts +33 -0
  484. package/dist/redis/index.d.ts.map +1 -0
  485. package/dist/redis/index.js +667 -0
  486. package/dist/redis/index.js.map +25 -0
  487. package/dist/redis/module.d.ts +32 -0
  488. package/dist/redis/module.d.ts.map +1 -0
  489. package/dist/redis/types.d.ts +146 -0
  490. package/dist/redis/types.d.ts.map +1 -0
  491. package/dist/schedule/backends/cloudflare.d.ts +55 -0
  492. package/dist/schedule/backends/cloudflare.d.ts.map +1 -0
  493. package/dist/schedule/backends/index.d.ts +3 -0
  494. package/dist/schedule/backends/index.d.ts.map +1 -0
  495. package/dist/schedule/backends/memory.d.ts +39 -0
  496. package/dist/schedule/backends/memory.d.ts.map +1 -0
  497. package/dist/schedule/cron-parser.d.ts +48 -0
  498. package/dist/schedule/cron-parser.d.ts.map +1 -0
  499. package/dist/schedule/decorators/cron.d.ts +71 -0
  500. package/dist/schedule/decorators/cron.d.ts.map +1 -0
  501. package/dist/schedule/index.d.ts +51 -0
  502. package/dist/schedule/index.d.ts.map +1 -0
  503. package/dist/schedule/index.js +1108 -0
  504. package/dist/schedule/index.js.map +25 -0
  505. package/dist/schedule/schedule.module.d.ts +44 -0
  506. package/dist/schedule/schedule.module.d.ts.map +1 -0
  507. package/dist/schedule/schedule.service.d.ts +51 -0
  508. package/dist/schedule/schedule.service.d.ts.map +1 -0
  509. package/dist/schedule/types.d.ts +150 -0
  510. package/dist/schedule/types.d.ts.map +1 -0
  511. package/dist/session/backends/cookie.d.ts +56 -0
  512. package/dist/session/backends/cookie.d.ts.map +1 -0
  513. package/dist/session/backends/drizzle.d.ts +65 -0
  514. package/dist/session/backends/drizzle.d.ts.map +1 -0
  515. package/dist/session/backends/index.d.ts +6 -0
  516. package/dist/session/backends/index.d.ts.map +1 -0
  517. package/dist/session/backends/memory.d.ts +32 -0
  518. package/dist/session/backends/memory.d.ts.map +1 -0
  519. package/dist/session/backends/redis.d.ts +53 -0
  520. package/dist/session/backends/redis.d.ts.map +1 -0
  521. package/dist/session/decorators/current-session.d.ts +56 -0
  522. package/dist/session/decorators/current-session.d.ts.map +1 -0
  523. package/dist/session/index.d.ts +42 -0
  524. package/dist/session/index.d.ts.map +1 -0
  525. package/dist/session/index.js +1498 -0
  526. package/dist/session/index.js.map +28 -0
  527. package/dist/session/session-middleware.d.ts +29 -0
  528. package/dist/session/session-middleware.d.ts.map +1 -0
  529. package/dist/session/session.module.d.ts +35 -0
  530. package/dist/session/session.module.d.ts.map +1 -0
  531. package/dist/session/session.service.d.ts +49 -0
  532. package/dist/session/session.service.d.ts.map +1 -0
  533. package/dist/session/types.d.ts +201 -0
  534. package/dist/session/types.d.ts.map +1 -0
  535. package/dist/shield/guards/csrf.d.ts +33 -0
  536. package/dist/shield/guards/csrf.d.ts.map +1 -0
  537. package/dist/shield/guards/headers.d.ts +22 -0
  538. package/dist/shield/guards/headers.d.ts.map +1 -0
  539. package/dist/shield/guards/index.d.ts +6 -0
  540. package/dist/shield/guards/index.d.ts.map +1 -0
  541. package/dist/shield/index.d.ts +8 -0
  542. package/dist/shield/index.d.ts.map +1 -0
  543. package/dist/shield/index.js +728 -0
  544. package/dist/shield/index.js.map +25 -0
  545. package/dist/shield/shield.module.d.ts +25 -0
  546. package/dist/shield/shield.module.d.ts.map +1 -0
  547. package/dist/shield/shield.service.d.ts +21 -0
  548. package/dist/shield/shield.service.d.ts.map +1 -0
  549. package/dist/shield/types.d.ts +95 -0
  550. package/dist/shield/types.d.ts.map +1 -0
  551. package/dist/sse/index.d.ts +7 -0
  552. package/dist/sse/index.d.ts.map +1 -0
  553. package/dist/sse/index.js +214 -0
  554. package/dist/sse/index.js.map +13 -0
  555. package/dist/sse/sse-stream.d.ts +46 -0
  556. package/dist/sse/sse-stream.d.ts.map +1 -0
  557. package/dist/sse/sse.d.ts +24 -0
  558. package/dist/sse/sse.d.ts.map +1 -0
  559. package/dist/sse/types.d.ts +84 -0
  560. package/dist/sse/types.d.ts.map +1 -0
  561. package/dist/static/index.d.ts +41 -0
  562. package/dist/static/index.d.ts.map +1 -0
  563. package/dist/static/index.js +313 -0
  564. package/dist/static/index.js.map +13 -0
  565. package/dist/static/static.module.d.ts +41 -0
  566. package/dist/static/static.module.d.ts.map +1 -0
  567. package/dist/static/static.service.d.ts +38 -0
  568. package/dist/static/static.service.d.ts.map +1 -0
  569. package/dist/tracing/decorators/index.d.ts +2 -0
  570. package/dist/tracing/decorators/index.d.ts.map +1 -0
  571. package/dist/tracing/decorators/trace.d.ts +37 -0
  572. package/dist/tracing/decorators/trace.d.ts.map +1 -0
  573. package/dist/tracing/hono-instrumentation.d.ts +21 -0
  574. package/dist/tracing/hono-instrumentation.d.ts.map +1 -0
  575. package/dist/tracing/index.d.ts +29 -0
  576. package/dist/tracing/index.d.ts.map +1 -0
  577. package/dist/tracing/index.js +782 -0
  578. package/dist/tracing/index.js.map +24 -0
  579. package/dist/tracing/module.d.ts +45 -0
  580. package/dist/tracing/module.d.ts.map +1 -0
  581. package/dist/tracing/propagation.d.ts +53 -0
  582. package/dist/tracing/propagation.d.ts.map +1 -0
  583. package/dist/tracing/service.d.ts +95 -0
  584. package/dist/tracing/service.d.ts.map +1 -0
  585. package/dist/tracing/types.d.ts +90 -0
  586. package/dist/tracing/types.d.ts.map +1 -0
  587. package/dist/upload/decorators/index.d.ts +6 -0
  588. package/dist/upload/decorators/index.d.ts.map +1 -0
  589. package/dist/upload/decorators/upload.d.ts +16 -0
  590. package/dist/upload/decorators/upload.d.ts.map +1 -0
  591. package/dist/upload/decorators/uploaded-file.d.ts +10 -0
  592. package/dist/upload/decorators/uploaded-file.d.ts.map +1 -0
  593. package/dist/upload/index.d.ts +9 -0
  594. package/dist/upload/index.d.ts.map +1 -0
  595. package/dist/upload/index.js +553 -0
  596. package/dist/upload/index.js.map +25 -0
  597. package/dist/upload/types.d.ts +103 -0
  598. package/dist/upload/types.d.ts.map +1 -0
  599. package/dist/upload/upload.middleware.d.ts +15 -0
  600. package/dist/upload/upload.middleware.d.ts.map +1 -0
  601. package/dist/upload/upload.module.d.ts +33 -0
  602. package/dist/upload/upload.module.d.ts.map +1 -0
  603. package/dist/upload/upload.service.d.ts +29 -0
  604. package/dist/upload/upload.service.d.ts.map +1 -0
  605. package/dist/view/edge.d.ts +23 -0
  606. package/dist/view/edge.d.ts.map +1 -0
  607. package/dist/view/eta.d.ts +30 -0
  608. package/dist/view/eta.d.ts.map +1 -0
  609. package/dist/view/index.d.ts +34 -0
  610. package/dist/view/index.d.ts.map +1 -0
  611. package/dist/view/index.js +240 -0
  612. package/dist/view/index.js.map +14 -0
  613. package/dist/view/inertia/default-ssr.d.ts +15 -0
  614. package/dist/view/inertia/default-ssr.d.ts.map +1 -0
  615. package/dist/view/inertia/form-helper.d.ts +102 -0
  616. package/dist/view/inertia/form-helper.d.ts.map +1 -0
  617. package/dist/view/inertia/form-middleware.d.ts +53 -0
  618. package/dist/view/inertia/form-middleware.d.ts.map +1 -0
  619. package/dist/view/inertia/helpers.d.ts +149 -0
  620. package/dist/view/inertia/helpers.d.ts.map +1 -0
  621. package/dist/view/inertia/index.d.ts +18 -0
  622. package/dist/view/inertia/index.d.ts.map +1 -0
  623. package/dist/view/inertia/inertia-adapter.d.ts +93 -0
  624. package/dist/view/inertia/inertia-adapter.d.ts.map +1 -0
  625. package/dist/view/inertia/inertia-response.d.ts +51 -0
  626. package/dist/view/inertia/inertia-response.d.ts.map +1 -0
  627. package/dist/view/inertia/ssr/index.d.ts +13 -0
  628. package/dist/view/inertia/ssr/index.d.ts.map +1 -0
  629. package/dist/view/inertia/ssr/react-adapter.d.ts +33 -0
  630. package/dist/view/inertia/ssr/react-adapter.d.ts.map +1 -0
  631. package/dist/view/inertia/ssr/registry.d.ts +42 -0
  632. package/dist/view/inertia/ssr/registry.d.ts.map +1 -0
  633. package/dist/view/inertia/ssr/solid-adapter.d.ts +31 -0
  634. package/dist/view/inertia/ssr/solid-adapter.d.ts.map +1 -0
  635. package/dist/view/inertia/ssr/svelte-adapter.d.ts +31 -0
  636. package/dist/view/inertia/ssr/svelte-adapter.d.ts.map +1 -0
  637. package/dist/view/inertia/ssr/vue-adapter.d.ts +26 -0
  638. package/dist/view/inertia/ssr/vue-adapter.d.ts.map +1 -0
  639. package/dist/view/inertia/types.d.ts +131 -0
  640. package/dist/view/inertia/types.d.ts.map +1 -0
  641. package/dist/view/rendu.d.ts +11 -0
  642. package/dist/view/rendu.d.ts.map +1 -0
  643. package/dist/view/types.d.ts +52 -0
  644. package/dist/view/types.d.ts.map +1 -0
  645. package/dist/view/view-engine.d.ts +28 -0
  646. package/dist/view/view-engine.d.ts.map +1 -0
  647. package/dist/ws/client.d.ts +42 -0
  648. package/dist/ws/client.d.ts.map +1 -0
  649. package/dist/ws/decorators.d.ts +44 -0
  650. package/dist/ws/decorators.d.ts.map +1 -0
  651. package/dist/ws/index.d.ts +57 -0
  652. package/dist/ws/index.d.ts.map +1 -0
  653. package/dist/ws/index.js +796 -0
  654. package/dist/ws/index.js.map +26 -0
  655. package/dist/ws/module.d.ts +48 -0
  656. package/dist/ws/module.d.ts.map +1 -0
  657. package/dist/ws/runtime/bun.d.ts +41 -0
  658. package/dist/ws/runtime/bun.d.ts.map +1 -0
  659. package/dist/ws/runtime/index.d.ts +14 -0
  660. package/dist/ws/runtime/index.d.ts.map +1 -0
  661. package/dist/ws/runtime/node.d.ts +46 -0
  662. package/dist/ws/runtime/node.d.ts.map +1 -0
  663. package/dist/ws/runtime/types.d.ts +18 -0
  664. package/dist/ws/runtime/types.d.ts.map +1 -0
  665. package/dist/ws/service.d.ts +65 -0
  666. package/dist/ws/service.d.ts.map +1 -0
  667. package/dist/ws/types.d.ts +77 -0
  668. package/dist/ws/types.d.ts.map +1 -0
  669. package/package.json +262 -0
@@ -0,0 +1,25 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/constants.ts", "../src/core/decorators/controller.ts", "../src/core/decorators/http-methods.ts", "../src/core/decorators/params.ts", "../src/core/decorators/validate.ts", "../src/cache/types.ts", "../src/cache/stores/memory.ts", "../src/cache/stores/drizzle.ts", "../src/cache/stores/redis.ts", "../src/core/decorators/module.ts", "../src/core/decorators/index.ts", "../src/core/decorators/injectable.ts", "../src/core/decorators/repository.ts", "../src/core/decorators/metadata.ts", "../src/cache/cache.service.ts", "../src/cache/cache.module.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Metadata keys used by reflect-metadata for storing decorator data.\n *\n * These constants are the contract between decorators and the framework\n * core (DI container, router, validator).\n */\nexport const METADATA_KEY = {\n\t/** Marks a class as a Nest-style controller, stores route prefix. */\n\tCONTROLLER: \"nexus:controller\",\n\n\t/** Marks a class as an injectable provider. */\n\tINJECTABLE: \"nexus:injectable\",\n\n\t/** Marks a class as a repository. */\n\tREPOSITORY: \"nexus:repository\",\n\n\t/** Marks a class as a module. Stores module options. */\n\tMODULE: \"nexus:module\",\n\n\t/** HTTP method routes registered on a controller (Get/Post/...). */\n\tROUTES: \"nexus:routes\",\n\n\t/** Method parameter type metadata (body/query/param/headers/ctx). */\n\tPARAMS: \"nexus:params\",\n\n\t/** Validation schema per method (Zod schema or class). */\n\tVALIDATE: \"nexus:validate\",\n\n\t/** Class-level design:paramtypes (built-in). */\n\tPARAMTYPES: \"design:paramtypes\",\n\n\t/** Class-level design:type (built-in). */\n\tTYPE: \"design:type\",\n\n\t/** Class-level design:returntype (built-in). */\n\tRETURNTYPE: \"design:returntype\",\n\n\t/** Provider token to inject for a parameter (for custom tokens). */\n\tINJECT: \"nexus:inject\",\n} as const;\n\nexport type MetadataKey = (typeof METADATA_KEY)[keyof typeof METADATA_KEY];\n\n/** Available parameter decorator locations. */\nexport const PARAM_TYPES = {\n\tREQUEST: 0,\n\tRESPONSE: 1,\n\tNEXT: 2,\n\tBODY: 3,\n\tQUERY: 4,\n\tPARAM: 5,\n\tHEADERS: 6,\n\tCTX: 7,\n\tUSER: 8,\n} as const;\n\nexport type ParamType = (typeof PARAM_TYPES)[keyof typeof PARAM_TYPES];\n\n/** HTTP methods supported by the router. */\nexport const HTTP_METHODS = [\n\t\"GET\",\n\t\"POST\",\n\t\"PUT\",\n\t\"DELETE\",\n\t\"PATCH\",\n\t\"OPTIONS\",\n\t\"HEAD\",\n] as const;\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n",
6
+ "/**\n * @Controller decorator.\n *\n * Marks a class as a controller and registers a route prefix.\n * Routes inside the controller class are decorated with @Get/@Post/etc.\n *\n * @example\n * ```ts\n * @Controller('/users')\n * class UserController {\n * @Get('/')\n * list() { ... }\n * }\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\nimport type { ControllerMetadata } from \"../di/tokens.js\";\n\nexport function Controller(prefix: string = \"/\"): ClassDecorator {\n\treturn (target: object) => {\n\t\tconst normalized = normalizePrefix(prefix);\n\t\tconst meta: ControllerMetadata = { prefix: normalized };\n\t\tReflect.defineMetadata(METADATA_KEY.CONTROLLER, meta, target);\n\t};\n}\n\nexport function getControllerMetadata(target: any): ControllerMetadata {\n\treturn (\n\t\tReflect.getMetadata(METADATA_KEY.CONTROLLER, target) ?? { prefix: \"/\" }\n\t);\n}\n\nexport function isController(target: any): boolean {\n\treturn Reflect.hasMetadata(METADATA_KEY.CONTROLLER, target);\n}\n\n/**\n * Normalize a prefix so we can safely concatenate it with handler paths.\n * - Empty string becomes '/'.\n * - Trailing slashes are trimmed (we re-add them on the join).\n * - No leading slash is added; the router always joins with `/`.\n */\nfunction normalizePrefix(prefix: string): string {\n\tif (!prefix) return \"\";\n\tif (prefix !== \"/\" && prefix.endsWith(\"/\")) {\n\t\treturn prefix.slice(0, -1);\n\t}\n\treturn prefix;\n}\n",
7
+ "/**\n * HTTP method decorators.\n *\n * `@Get`, `@Post`, `@Put`, `@Delete`, `@Patch`, `@Options`, `@Head` mark a\n * controller method as a route handler. The path argument is appended to\n * the controller's prefix.\n *\n * @example\n * ```ts\n * @Controller('/users')\n * class UserController {\n * @Get('/')\n * list() {}\n *\n * @Post('/')\n * create(@Body() body: CreateUserDto) {}\n * }\n * ```\n */\nimport \"reflect-metadata\";\nimport { HTTP_METHODS, METADATA_KEY, type HttpMethod } from \"../constants.js\";\nimport type { RouteMetadata } from \"../di/tokens.js\";\n\nfunction defineRoute(method: HttpMethod, path: string): MethodDecorator {\n\treturn (\n\t\ttarget: object,\n\t\tpropertyKey: string | symbol,\n\t\tdescriptor: PropertyDescriptor,\n\t) => {\n\t\tconst routes: RouteMetadata[] =\n\t\t\tReflect.getMetadata(METADATA_KEY.ROUTES, target.constructor) ?? [];\n\n\t\troutes.push({\n\t\t\tmethod,\n\t\t\tpath: normalizePath(path),\n\t\t\tpropertyKey,\n\t\t\thandler: descriptor.value,\n\t\t});\n\n\t\tReflect.defineMetadata(METADATA_KEY.ROUTES, routes, target.constructor);\n\t};\n}\n\nfunction normalizePath(path: string): string {\n\tif (!path || path === \"/\") return \"/\";\n\treturn path.startsWith(\"/\") ? path : `/${path}`;\n}\n\nexport const Get = (path: string = \"/\") => defineRoute(\"GET\", path);\nexport const Post = (path: string = \"/\") => defineRoute(\"POST\", path);\nexport const Put = (path: string = \"/\") => defineRoute(\"PUT\", path);\nexport const Delete = (path: string = \"/\") => defineRoute(\"DELETE\", path);\nexport const Patch = (path: string = \"/\") => defineRoute(\"PATCH\", path);\nexport const Options = (path: string = \"/\") => defineRoute(\"OPTIONS\", path);\nexport const Head = (path: string = \"/\") => defineRoute(\"HEAD\", path);\n\nexport function getRoutes(target: any): RouteMetadata[] {\n\treturn Reflect.getMetadata(METADATA_KEY.ROUTES, target) ?? [];\n}\n\nexport { HTTP_METHODS };\nexport type { RouteMetadata };\n",
8
+ "/**\n * Parameter decorators.\n *\n * These mark a controller method argument as a source of request data:\n * - `@Req()` → Hono context\n * - `@Res()` → Response helper\n * - `@Next()` → next() callback (for middleware-style handlers)\n * - `@Body()` → request body (parsed)\n * - `@Query('key')` → a single query param, or full query object\n * - `@Param('key')` → a single path param, or full params object\n * - `@Headers('k')` → a single header, or full headers object\n * - `@Ctx()` → Hono context (alias for @Req)\n * - `@User()` → authenticated user (resolved via auth provider)\n *\n * The metadata is read by the router at mount time to build the\n * handler invocation list.\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY, PARAM_TYPES } from \"../constants.js\";\nimport type { ParamMetadata } from \"../di/tokens.js\";\n\nexport function createParamDecorator(\n\ttype: number,\n\tdata?: string | object,\n): ParameterDecorator {\n\treturn (\n\t\ttarget: object,\n\t\tpropertyKey: string | symbol | undefined,\n\t\tparameterIndex: number,\n\t) => {\n\t\t// Method parameter: target is the prototype, propertyKey is the method name.\n\t\t// Constructor parameter: target is the class, propertyKey is undefined.\n\t\tif (propertyKey !== undefined) {\n\t\t\tconst params: ParamMetadata[] =\n\t\t\t\tReflect.getMetadata(METADATA_KEY.PARAMS, target, propertyKey) ?? [];\n\t\t\tparams.push({\n\t\t\t\tindex: parameterIndex,\n\t\t\t\ttype,\n\t\t\t\tname: typeof data === \"string\" ? data : undefined,\n\t\t\t\tdata: typeof data === \"object\" ? data : undefined,\n\t\t\t});\n\t\t\tReflect.defineMetadata(METADATA_KEY.PARAMS, params, target, propertyKey);\n\t\t} else {\n\t\t\tconst params: ParamMetadata[] =\n\t\t\t\tReflect.getMetadata(METADATA_KEY.PARAMS, target) ?? [];\n\t\t\tparams.push({\n\t\t\t\tindex: parameterIndex,\n\t\t\t\ttype,\n\t\t\t\tname: typeof data === \"string\" ? data : undefined,\n\t\t\t\tdata: typeof data === \"object\" ? data : undefined,\n\t\t\t});\n\t\t\tReflect.defineMetadata(METADATA_KEY.PARAMS, params, target);\n\t\t}\n\t};\n}\n\nexport const Req = () => createParamDecorator(PARAM_TYPES.REQUEST);\nexport const Res = () => createParamDecorator(PARAM_TYPES.RESPONSE);\nexport const Next = () => createParamDecorator(PARAM_TYPES.NEXT);\nexport const Body = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.BODY, key);\nexport const Query = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.QUERY, key);\nexport const Param = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.PARAM, key);\nexport const Headers = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.HEADERS, key);\nexport const Ctx = () => createParamDecorator(PARAM_TYPES.CTX);\nexport const User = () => createParamDecorator(PARAM_TYPES.USER);\n\nexport function getParamMetadata(\n\ttarget: any,\n\tpropertyKey: string | symbol,\n): ParamMetadata[] {\n\treturn Reflect.getMetadata(METADATA_KEY.PARAMS, target, propertyKey) ?? [];\n}\n\nexport { PARAM_TYPES };\n",
9
+ "/**\n * @Validate decorator.\n *\n * Attaches Zod schemas (or class validators) to a route handler. Each\n * schema is run against the corresponding request part before the handler\n * executes; failed validation throws or returns a 400 response.\n *\n * @example\n * ```ts\n * const UserSchema = z.object({ name: z.string(), email: z.email() });\n *\n * @Post('/')\n * @Validate({ body: UserSchema })\n * create(@Body() body: z.infer<typeof UserSchema>) { ... }\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\nimport type { ValidationMetadata } from \"../di/tokens.js\";\n\nexport function Validate(options: ValidationMetadata): MethodDecorator {\n\treturn (\n\t\ttarget: object,\n\t\tpropertyKey: string | symbol,\n\t\tdescriptor: PropertyDescriptor,\n\t) => {\n\t\tReflect.defineMetadata(\n\t\t\tMETADATA_KEY.VALIDATE,\n\t\t\toptions,\n\t\t\ttarget.constructor,\n\t\t\tpropertyKey,\n\t\t);\n\t};\n}\n\nexport function getValidationMetadata(\n\ttarget: any,\n\tpropertyKey: string | symbol,\n): ValidationMetadata | undefined {\n\treturn Reflect.getMetadata(METADATA_KEY.VALIDATE, target, propertyKey);\n}\n",
10
+ "/**\n * `nexusjs/cache` — application-level caching.\n *\n * Two backends ship out of the box:\n * - `MemoryStore` — single-process LRU with TTL eviction\n * - `RedisStore` — multi-pod via ioredis (peer dep, optional)\n *\n * const cache = new CacheService({ store: new MemoryStore({ max: 10_000 }) });\n * await cache.set('user:42', user, 60); // 60-second TTL\n * const u = await cache.get<User>('user:42');\n *\n * Decorators are also provided for service methods:\n *\n * @Cacheable('user', (id: string) => id, 60)\n * async findById(id: string) { ... }\n */\n\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../core/constants.js\";\n\n/** A single cache entry. */\nexport interface CacheEntry<T = unknown> {\n\tvalue: T;\n\t/** Unix-ms timestamp when this entry expires. 0 = never. */\n\texpiresAt: number;\n\t/** Stash tags for invalidation. */\n\ttags?: string[];\n}\n\n/** Storage backend for cache entries. */\nexport interface CacheStore {\n\treadonly kind: string;\n\t/** Get a value. Returns `undefined` if missing or expired. */\n\tget<T = unknown>(key: string): Promise<T | undefined>;\n\t/** Set a value with optional TTL (seconds) and tags. */\n\tset<T = unknown>(\n\t\tkey: string,\n\t\tvalue: T,\n\t\topts?: CacheSetOptions,\n\t): Promise<void>;\n\t/** Delete a single key. */\n\tdelete(key: string): Promise<boolean>;\n\t/** Delete every key matching `pattern` (glob: `*`, `**`). */\n\tclear(pattern?: string): Promise<number>;\n\t/** Wrap a function with cache-or-compute semantics. */\n\twrap<T>(key: string, fn: () => Promise<T>, ttl?: number): Promise<T>;\n\t/**\n\t * Remove every entry tagged with `tag`. Backends without a tag\n\t * index (e.g. MemoryStore) return 0.\n\t */\n\tinvalidateByTag?(tag: string): Promise<number>;\n\t/** Sweep expired entries. Backends without a sweep loop return 0. */\n\tgc?(): Promise<number>;\n\t/** Optional: free resources. */\n\tclose?(): Promise<void>;\n}\n\n/** Options for `set()`. */\nexport interface CacheSetOptions {\n\t/** Time-to-live in seconds. 0 = forever. */\n\tttl?: number;\n\t/** Tags for grouped invalidation. */\n\ttags?: string[];\n}\n\nexport interface CacheConfig {\n\t/** Storage backend. Default: in-memory LRU. */\n\tstore?: CacheStore;\n\t/** Default TTL in seconds when none is provided. Default: 60. */\n\tdefaultTtl?: number;\n\t/** Prefix prepended to all keys. Default: 'nexusjs'. */\n\tprefix?: string;\n}\n\n/** Internal metadata key. */\nexport const CACHEABLE_META = \"nexus:cache:cacheable\";\nexport const CACHE_INVALIDATE_META = \"nexus:cache:invalidate\";\n\n/** @Cacheable decorator. Caches the result of a method. */\nexport function Cacheable(\n\tprefix: string,\n\tkeyFn: (...args: any[]) => string,\n\tttlSeconds = 60,\n): MethodDecorator {\n\treturn (\n\t\ttarget: any,\n\t\tpropertyKey: string | symbol,\n\t\tdescriptor: PropertyDescriptor,\n\t) => {\n\t\tconst existing: CacheableSpec[] =\n\t\t\tReflect.getMetadata(CACHEABLE_META, target.constructor) ?? [];\n\t\texisting.push({\n\t\t\tprefix,\n\t\t\tkeyFn,\n\t\t\tttl: ttlSeconds,\n\t\t\tpropertyKey,\n\t\t\toriginal: descriptor.value,\n\t\t});\n\t\tReflect.defineMetadata(CACHEABLE_META, existing, target.constructor);\n\t};\n}\n\n/** @CacheInvalidate decorator. Removes matching keys after a method runs. */\nexport function CacheInvalidate(\n\tprefix: string,\n\tkeyFn: (...args: any[]) => string,\n): MethodDecorator {\n\treturn (\n\t\ttarget: any,\n\t\tpropertyKey: string | symbol,\n\t\tdescriptor: PropertyDescriptor,\n\t) => {\n\t\tconst existing: CacheInvalidateSpec[] =\n\t\t\tReflect.getMetadata(CACHE_INVALIDATE_META, target.constructor) ?? [];\n\t\texisting.push({ prefix, keyFn, propertyKey, original: descriptor.value });\n\t\tReflect.defineMetadata(CACHE_INVALIDATE_META, existing, target.constructor);\n\t};\n}\n\nexport interface CacheableSpec {\n\tprefix: string;\n\tkeyFn: (...args: any[]) => string;\n\tttl: number;\n\tpropertyKey: string | symbol;\n\toriginal: (...args: any[]) => any;\n}\n\nexport interface CacheInvalidateSpec {\n\tprefix: string;\n\tkeyFn: (...args: any[]) => string;\n\tpropertyKey: string | symbol;\n\toriginal: (...args: any[]) => any;\n}\n\nexport function getCacheableSpecs(target: any): CacheableSpec[] {\n\treturn Reflect.getMetadata(CACHEABLE_META, target) ?? [];\n}\nexport function getCacheInvalidateSpecs(target: any): CacheInvalidateSpec[] {\n\treturn Reflect.getMetadata(CACHE_INVALIDATE_META, target) ?? [];\n}\n\nexport { METADATA_KEY };\n",
11
+ "/**\n * In-memory LRU cache store with TTL eviction.\n *\n * Simple and fast; not cluster-safe. Use `RedisStore` for shared state\n * across multiple Bun processes.\n */\nimport type { CacheEntry, CacheSetOptions, CacheStore } from \"../types.js\";\n\nexport interface MemoryStoreOptions {\n\t/** Maximum number of entries. Default: 10_000. */\n\tmax?: number;\n\t/** Sweep interval for expired entries. Default: 30_000 ms. 0 = no sweep. */\n\tsweepIntervalMs?: number;\n}\n\nexport class MemoryStore implements CacheStore {\n\treadonly kind = \"memory\";\n\tprivate data = new Map<string, CacheEntry>();\n\tprivate tagIndex = new Map<string, Set<string>>();\n\tprivate readonly max: number;\n\tprivate sweepTimer: ReturnType<typeof setInterval> | null = null;\n\n\tconstructor(opts: MemoryStoreOptions = {}) {\n\t\tthis.max = opts.max ?? 10_000;\n\t\tconst sweepMs = opts.sweepIntervalMs ?? 30_000;\n\t\tif (sweepMs > 0) {\n\t\t\tthis.sweepTimer = setInterval(() => this.sweepExpired(), sweepMs);\n\t\t\t// Don't keep the event loop alive for the sweep timer.\n\t\t\tif (typeof this.sweepTimer === \"object\" && this.sweepTimer !== null) {\n\t\t\t\t(this.sweepTimer as any).unref?.();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync get<T = unknown>(key: string): Promise<T | undefined> {\n\t\tconst e = this.data.get(key);\n\t\tif (!e) return undefined;\n\t\tif (e.expiresAt > 0 && e.expiresAt <= Date.now()) {\n\t\t\tthis.data.delete(key);\n\t\t\treturn undefined;\n\t\t}\n\t\t// Touch for LRU.\n\t\tthis.data.delete(key);\n\t\tthis.data.set(key, e);\n\t\treturn e.value as T;\n\t}\n\n\tasync set<T = unknown>(\n\t\tkey: string,\n\t\tvalue: T,\n\t\topts: CacheSetOptions = {},\n\t): Promise<void> {\n\t\tconst ttl = opts.ttl ?? 0;\n\t\tconst entry: CacheEntry<T> = {\n\t\t\tvalue,\n\t\t\texpiresAt: ttl > 0 ? Date.now() + ttl * 1000 : 0,\n\t\t\ttags: opts.tags,\n\t\t};\n\t\t// Insert (and possibly evict).\n\t\tif (!this.data.has(key) && this.data.size >= this.max) {\n\t\t\t// Evict oldest (first key in iteration order).\n\t\t\tconst oldest = this.data.keys().next().value;\n\t\t\tif (oldest !== undefined) {\n\t\t\t\tthis.data.delete(oldest);\n\t\t\t\tfor (const keys of this.tagIndex.values()) keys.delete(oldest);\n\t\t\t}\n\t\t}\n\t\tthis.data.set(key, entry);\n\t\t// Refresh tag index: remove old tag associations for this key, then add new ones.\n\t\tif (opts.tags) {\n\t\t\tfor (const [, keys] of this.tagIndex.entries()) keys.delete(key);\n\t\t\tfor (const tag of opts.tags) {\n\t\t\t\tlet set = this.tagIndex.get(tag);\n\t\t\t\tif (!set) {\n\t\t\t\t\tset = new Set();\n\t\t\t\t\tthis.tagIndex.set(tag, set);\n\t\t\t\t}\n\t\t\t\tset.add(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync delete(key: string): Promise<boolean> {\n\t\tconst deleted = this.data.delete(key);\n\t\t// Remove this key from every tag index.\n\t\tfor (const keys of this.tagIndex.values()) keys.delete(key);\n\t\treturn deleted;\n\t}\n\n\tasync clear(pattern?: string): Promise<number> {\n\t\tif (!pattern) {\n\t\t\tconst n = this.data.size;\n\t\t\tthis.data.clear();\n\t\t\tthis.tagIndex.clear();\n\t\t\treturn n;\n\t\t}\n\t\tconst rx = globToRegExp(pattern);\n\t\tlet n = 0;\n\t\tfor (const k of [...this.data.keys()]) {\n\t\t\tif (rx.test(k)) {\n\t\t\t\tthis.data.delete(k);\n\t\t\t\tfor (const keys of this.tagIndex.values()) keys.delete(k);\n\t\t\t\tn++;\n\t\t\t}\n\t\t}\n\t\treturn n;\n\t}\n\n\tasync wrap<T>(key: string, fn: () => Promise<T>, ttl?: number): Promise<T> {\n\t\tconst v = await this.get<T>(key);\n\t\tif (v !== undefined) return v;\n\t\tconst result = await fn();\n\t\tawait this.set(key, result, { ttl });\n\t\treturn result;\n\t}\n\n\t/**\n\t * Tag-based invalidation. Maintains a `tag -> Set<key>` index in\n\t * addition to the main map. Returns the number of keys removed.\n\t */\n\tasync invalidateByTag(tag: string): Promise<number> {\n\t\tconst keys = this.tagIndex.get(tag);\n\t\tif (!keys) return 0;\n\t\tlet n = 0;\n\t\tfor (const k of keys) {\n\t\t\tif (this.data.delete(k)) n++;\n\t\t}\n\t\tthis.tagIndex.delete(tag);\n\t\treturn n;\n\t}\n\n\tasync close(): Promise<void> {\n\t\tif (this.sweepTimer) clearInterval(this.sweepTimer);\n\t\tthis.sweepTimer = null;\n\t\tthis.data.clear();\n\t\tthis.tagIndex.clear();\n\t}\n\n\tprivate sweepExpired(): void {\n\t\tconst now = Date.now();\n\t\tfor (const [k, e] of this.data.entries()) {\n\t\t\tif (e.expiresAt > 0 && e.expiresAt <= now) this.data.delete(k);\n\t\t}\n\t\t// Drop tags whose keys are all gone.\n\t\tfor (const [tag, keys] of this.tagIndex.entries()) {\n\t\t\tfor (const k of keys) {\n\t\t\t\tif (!this.data.has(k)) keys.delete(k);\n\t\t\t}\n\t\t\tif (keys.size === 0) this.tagIndex.delete(tag);\n\t\t}\n\t}\n}\n\nfunction globToRegExp(pattern: string): RegExp {\n\treturn new RegExp(\n\t\t\"^\" +\n\t\t\tpattern\n\t\t\t\t.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n\t\t\t\t.replace(/\\*\\*/g, \"::DBL::\")\n\t\t\t\t.replace(/\\*/g, \"[^:]+\")\n\t\t\t\t.replace(/::DBL::/g, \".*\") +\n\t\t\t\"$\",\n\t);\n}\n",
12
+ "/**\n * `DrizzleCacheStore` — cache entries backed by any Drizzle database.\n *\n * import { DrizzleService } from 'nexusjs/drizzle';\n * import { DrizzleCacheStore } from 'nexusjs/cache';\n *\n * const db = new DrizzleService({ dialect: 'postgres', connection: {...} });\n * await db.open();\n *\n * const store = new DrizzleCacheStore(db, {\n * tableName: 'nexus_cache',\n * });\n *\n * CacheModule.forRoot({ store, defaultTtl: 300 });\n *\n * Schema (managed by your migration):\n *\n * CREATE TABLE nexus_cache (\n * key TEXT PRIMARY KEY,\n * value TEXT NOT NULL, -- JSON-encoded\n * expires_at TEXT, -- ISO timestamp, null = never\n * created_at TEXT NOT NULL,\n * updated_at TEXT NOT NULL\n * );\n *\n * CREATE TABLE nexus_cache_tags ( -- tag → key index\n * tag TEXT NOT NULL,\n * key TEXT NOT NULL,\n * PRIMARY KEY (tag, key)\n * );\n * CREATE INDEX nexus_cache_tags_key_idx ON nexus_cache_tags(key);\n *\n * Why a tag table? It enables true `invalidateByTag('users')` that\n * removes every entry tagged 'users' in a single statement, regardless\n * of how many keys share the tag.\n */\nimport type { DrizzleService } from \"../../drizzle/drizzle.service.js\";\nimport type { CacheSetOptions, CacheStore } from \"../types.js\";\n\nexport interface DrizzleCacheOptions {\n\tdb: DrizzleService;\n\t/** Cache row table. Default: 'nexus_cache'. */\n\ttableName?: string;\n\t/** Tag index table. Default: 'nexus_cache_tags'. */\n\ttagsTableName?: string;\n\t/** Column names — override to match your schema. */\n\tcolumns?: {\n\t\tkey?: string;\n\t\tvalue?: string;\n\t\texpiresAt?: string;\n\t\tcreatedAt?: string;\n\t\tupdatedAt?: string;\n\t\ttag?: string;\n\t};\n}\n\ntype CacheRow = Record<string, string | null>;\ntype TagRow = Record<string, string>;\n\nexport class DrizzleCacheStore implements CacheStore {\n\treadonly kind = \"drizzle\" as const;\n\n\tprivate db: DrizzleService;\n\tprivate t: string;\n\tprivate tagsT: string;\n\tprivate c: {\n\t\tkey: string;\n\t\tvalue: string;\n\t\texpiresAt: string;\n\t\tcreatedAt: string;\n\t\tupdatedAt: string;\n\t\ttag: string;\n\t};\n\n\tconstructor(db: DrizzleService, options: Omit<DrizzleCacheOptions, \"db\"> = {}) {\n\t\tthis.db = db;\n\t\tthis.t = options.tableName ?? \"nexus_cache\";\n\t\tthis.tagsT = options.tagsTableName ?? \"nexus_cache_tags\";\n\t\tthis.c = {\n\t\t\tkey: options.columns?.key ?? \"key\",\n\t\t\tvalue: options.columns?.value ?? \"value\",\n\t\t\texpiresAt: options.columns?.expiresAt ?? \"expires_at\",\n\t\t\tcreatedAt: options.columns?.createdAt ?? \"created_at\",\n\t\t\tupdatedAt: options.columns?.updatedAt ?? \"updated_at\",\n\t\t\ttag: options.columns?.tag ?? \"tag\",\n\t\t};\n\t}\n\n\tasync get<T = unknown>(key: string): Promise<T | undefined> {\n\t\tconst rows = await this.db.rawQuery<CacheRow>(\n\t\t\t`SELECT * FROM ${this.t} WHERE ${this.c.key} = ? LIMIT 1`,\n\t\t\t[key],\n\t\t);\n\t\tconst row = rows[0];\n\t\tif (!row) return undefined;\n\t\tconst expiresAt = row[this.c.expiresAt];\n\t\tif (expiresAt && new Date(expiresAt).getTime() <= Date.now()) {\n\t\t\t// Expired — clean up lazily.\n\t\t\tawait this.delete(key);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst raw = row[this.c.value];\n\t\tif (raw === null || raw === undefined) return undefined;\n\t\ttry {\n\t\t\treturn JSON.parse(String(raw)) as T;\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync set<T = unknown>(\n\t\tkey: string,\n\t\tvalue: T,\n\t\topts: CacheSetOptions = {},\n\t): Promise<void> {\n\t\tconst now = new Date().toISOString();\n\t\tconst expiresAt =\n\t\t\topts.ttl && opts.ttl > 0\n\t\t\t\t? new Date(Date.now() + opts.ttl * 1000).toISOString()\n\t\t\t\t: null;\n\t\tconst serialized = JSON.stringify(value);\n\n\t\t// Upsert the cache row. Different dialects use different syntax;\n\t\t// we use the simple INSERT ... ON CONFLICT pattern (works in\n\t\t// sqlite, postgres, mysql 8+).\n\t\tawait this.db.rawQuery(\n\t\t\t`INSERT INTO ${this.t} (${this.c.key}, ${this.c.value}, ${this.c.expiresAt}, ${this.c.createdAt}, ${this.c.updatedAt})\n\t\t\t VALUES (?, ?, ?, ?, ?)\n\t\t\t ON CONFLICT (${this.c.key}) DO UPDATE SET\n\t\t\t ${this.c.value} = excluded.${this.c.value},\n\t\t\t ${this.c.expiresAt} = excluded.${this.c.expiresAt},\n\t\t\t ${this.c.updatedAt} = excluded.${this.c.updatedAt}`,\n\t\t\t[key, serialized, expiresAt, now, now],\n\t\t);\n\n\t\t// Refresh tag index: delete old tags, then insert new ones.\n\t\tif (opts.tags && opts.tags.length > 0) {\n\t\t\tawait this.db.rawQuery(\n\t\t\t\t`DELETE FROM ${this.tagsT} WHERE ${this.c.key} = ?`,\n\t\t\t\t[key],\n\t\t\t);\n\t\t\tfor (const tag of opts.tags) {\n\t\t\t\tawait this.db.rawQuery(\n\t\t\t\t\t`INSERT OR IGNORE INTO ${this.tagsT} (${this.c.tag}, ${this.c.key}) VALUES (?, ?)`,\n\t\t\t\t\t[tag, key],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync delete(key: string): Promise<boolean> {\n\t\t// Cheap probe: does the row exist at all (even expired)?\n\t\tconst probe = await this.db.rawQuery<CacheRow>(\n\t\t\t`SELECT ${this.c.key} FROM ${this.t} WHERE ${this.c.key} = ? LIMIT 1`,\n\t\t\t[key],\n\t\t);\n\t\tif (probe.length === 0) return false;\n\t\tawait this.db.rawQuery(`DELETE FROM ${this.t} WHERE ${this.c.key} = ?`, [key]);\n\t\tawait this.db.rawQuery(\n\t\t\t`DELETE FROM ${this.tagsT} WHERE ${this.c.key} = ?`,\n\t\t\t[key],\n\t\t);\n\t\treturn true;\n\t}\n\n\tasync clear(pattern?: string): Promise<number> {\n\t\tif (!pattern) {\n\t\t\tawait this.db.rawQuery(`DELETE FROM ${this.tagsT}`);\n\t\t\tconst before = await this.db.rawQuery<unknown>(\n\t\t\t\t`SELECT COUNT(*) as n FROM ${this.t}`,\n\t\t\t);\n\t\t\tawait this.db.rawQuery(`DELETE FROM ${this.t}`);\n\t\t\tconst n = Number((before[0] as { n?: number } | undefined)?.n ?? 0);\n\t\t\treturn n;\n\t\t}\n\t\t// Translate glob to SQL LIKE. `*` -> `%`.\n\t\tconst likePattern = pattern\n\t\t\t.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n\t\t\t.replace(/\\*\\*/g, \"%\")\n\t\t\t.replace(/\\*/g, \"%\");\n\t\tconst before = await this.db.rawQuery<unknown>(\n\t\t\t`SELECT COUNT(*) as n FROM ${this.t} WHERE ${this.c.key} LIKE ? ESCAPE '\\\\'`,\n\t\t\t[likePattern],\n\t\t);\n\t\tawait this.db.rawQuery(\n\t\t\t`DELETE FROM ${this.t} WHERE ${this.c.key} LIKE ? ESCAPE '\\\\'`,\n\t\t\t[likePattern],\n\t\t);\n\t\treturn Number((before[0] as { n?: number } | undefined)?.n ?? 0);\n\t}\n\n\tasync wrap<T>(key: string, fn: () => Promise<T>, ttl?: number): Promise<T> {\n\t\tconst hit = await this.get<T>(key);\n\t\tif (hit !== undefined) return hit;\n\t\tconst v = await fn();\n\t\tawait this.set(key, v, { ttl });\n\t\treturn v;\n\t}\n\n\t/**\n\t * Remove every cache entry that has been tagged with `tag`.\n\t * Returns the number of keys removed.\n\t */\n\tasync invalidateByTag(tag: string): Promise<number> {\n\t\tconst tagRows = await this.db.rawQuery<TagRow>(\n\t\t\t`SELECT ${this.c.key} FROM ${this.tagsT} WHERE ${this.c.tag} = ?`,\n\t\t\t[tag],\n\t\t);\n\t\tconst keys = tagRows.map((r) => r[this.c.key]);\n\t\tif (keys.length === 0) return 0;\n\t\t// Use a parameter list to safely delete. We chunk in case there\n\t\t// are many keys (some DBs cap the parameter count).\n\t\tconst chunkSize = 100;\n\t\tlet removed = 0;\n\t\tfor (let i = 0; i < keys.length; i += chunkSize) {\n\t\t\tconst chunk = keys.slice(i, i + chunkSize);\n\t\t\tconst placeholders = chunk.map(() => \"?\").join(\", \");\n\t\t\tconst r1 = await this.db.rawQuery<unknown>(\n\t\t\t\t`DELETE FROM ${this.t} WHERE ${this.c.key} IN (${placeholders})`,\n\t\t\t\tchunk,\n\t\t\t);\n\t\t\tconst r2 = await this.db.rawQuery<unknown>(\n\t\t\t\t`DELETE FROM ${this.tagsT} WHERE ${this.c.key} IN (${placeholders})`,\n\t\t\t\tchunk,\n\t\t\t);\n\t\t\tremoved += Math.max(r1.length, r2.length, chunk.length);\n\t\t}\n\t\treturn removed;\n\t}\n\n\t/** Clean up expired entries. */\n\tasync gc(): Promise<number> {\n\t\tconst now = new Date().toISOString();\n\t\tconst before = await this.db.rawQuery<unknown>(\n\t\t\t`SELECT COUNT(*) as n FROM ${this.t} WHERE ${this.c.expiresAt} IS NOT NULL AND ${this.c.expiresAt} <= ?`,\n\t\t\t[now],\n\t\t);\n\t\tawait this.db.rawQuery(\n\t\t\t`DELETE FROM ${this.t} WHERE ${this.c.expiresAt} IS NOT NULL AND ${this.c.expiresAt} <= ?`,\n\t\t\t[now],\n\t\t);\n\t\t// Drop dangling tag rows.\n\t\tawait this.db.rawQuery(\n\t\t\t`DELETE FROM ${this.tagsT} WHERE ${this.c.key} NOT IN (SELECT ${this.c.key} FROM ${this.t})`,\n\t\t);\n\t\treturn Number((before[0] as { n?: number } | undefined)?.n ?? 0);\n\t}\n\n\tasync close(): Promise<void> {\n\t\t// No resources to release — the underlying db is owned by the user.\n\t}\n}\n",
13
+ "/**\n * `RedisCacheStore` — a `CacheStore` backed by `nexusjs/redis`.\n *\n * Works on **Bun** (`Bun.redis`), **Node** (`ioredis`), and\n * **Cloudflare Workers KV** (via `CloudflareKVAdapter`). The\n * same adapter selection applies as for sessions.\n *\n * import { CacheService } from 'nexusjs/cache';\n * import { RedisCacheStore, createRedisClient } from 'nexusjs/redis';\n *\n * const cache = new CacheService({\n * store: new RedisCacheStore(createRedisClient({ url: 'redis://localhost:6379' }), {\n * keyPrefix: 'cache:',\n * }),\n * });\n *\n * Values are JSON-serialized. The store uses the KV backend's\n * own TTL (Redis `EX` / KV `expirationTtl`).\n *\n * Tag-based invalidation is supported on the Redis and Node\n * adapters (a per-tag Set is maintained as a separate KV key).\n * On Cloudflare KV, tag invalidation degrades to a SCAN — slower\n * but correct.\n */\n\nimport type { RedisClient } from \"../../redis/types.js\";\nimport type { CacheEntry, CacheSetOptions, CacheStore } from \"../types.js\";\n\nconst DEFAULT_KEY_PREFIX = \"cache:\";\n\nexport interface RedisCacheStoreOptions {\n\t/** Key prefix. Default: \"cache:\". */\n\tkeyPrefix?: string;\n}\n\nexport class RedisCacheStore implements CacheStore {\n\treadonly kind = \"redis\";\n\t#client: RedisClient;\n\t#keyPrefix: string;\n\t#tagKeyPrefix: string;\n\n\tconstructor(client: RedisClient, options: RedisCacheStoreOptions = {}) {\n\t\tthis.#client = client;\n\t\tthis.#keyPrefix = options.keyPrefix ?? DEFAULT_KEY_PREFIX;\n\t\tthis.#tagKeyPrefix = `${this.#keyPrefix}tag:`;\n\t}\n\n\t#key(key: string): string {\n\t\treturn `${this.#keyPrefix}${key}`;\n\t}\n\n\t#tagKey(tag: string): string {\n\t\treturn `${this.#tagKeyPrefix}${crc32(tag)}`;\n\t}\n\n\tasync get<T = unknown>(key: string): Promise<T | undefined> {\n\t\tconst raw = await this.#client.get(this.#key(key));\n\t\tif (raw === null) return undefined;\n\t\ttry {\n\t\t\tconst entry = JSON.parse(raw) as CacheEntry<T>;\n\t\t\tif (entry.expiresAt && entry.expiresAt <= Date.now()) {\n\t\t\t\tawait this.#client.del(this.#key(key));\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn entry.value;\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync set<T = unknown>(\n\t\tkey: string,\n\t\tvalue: T,\n\t\topts?: CacheSetOptions,\n\t): Promise<void> {\n\t\tconst ttl = opts?.ttl ?? 0;\n\t\tconst tags = opts?.tags ?? [];\n\t\tconst entry: CacheEntry<T> = {\n\t\t\tvalue,\n\t\t\texpiresAt: ttl > 0 ? Date.now() + ttl * 1000 : 0,\n\t\t\t...(tags.length > 0 ? { tags } : {}),\n\t\t};\n\t\tconst fullKey = this.#key(key);\n\t\tconst ex = ttl > 0 ? ttl : undefined;\n\t\tawait this.#client.set(fullKey, JSON.stringify(entry), ex ? { ex } : undefined);\n\t\t// Update per-tag indexes.\n\t\tfor (const tag of tags) {\n\t\t\tawait this.#addToTagIndex(tag, key);\n\t\t}\n\t}\n\n\tasync delete(key: string): Promise<boolean> {\n\t\tconst fullKey = this.#key(key);\n\t\tconst existed = (await this.#client.get(fullKey)) !== null;\n\t\tawait this.#client.del(fullKey);\n\t\t// The tag indexes are best-effort — leave them; gc() will\n\t\t// eventually prune orphans. (A full implementation would\n\t\t// need to read the entry to find its tags before deleting,\n\t\t// which is an extra round-trip.)\n\t\treturn existed;\n\t}\n\n\tasync has(key: string): Promise<boolean> {\n\t\treturn this.#client.exists(this.#key(key));\n\t}\n\n\tasync clear(): Promise<number> {\n\t\tlet n = 0;\n\t\tlet cursor: string | number = \"0\";\n\t\tdo {\n\t\t\tconst res = await this.#client.scan({\n\t\t\t\tmatch: `${this.#keyPrefix}*`,\n\t\t\t\tcursor,\n\t\t\t\tcount: 100,\n\t\t\t});\n\t\t\tfor (const k of res.keys) {\n\t\t\t\tawait this.#client.del(this.#keyPrefix + k);\n\t\t\t\tn++;\n\t\t\t}\n\t\t\tcursor = res.cursor;\n\t\t} while (cursor !== \"0\" && cursor !== 0);\n\t\treturn n;\n\t}\n\n\tasync gc(): Promise<number> {\n\t\t// The KV store evicts on TTL. Here we clean up orphan tag\n\t\t// indexes — keys in the tag set that no longer exist in\n\t\t// the value store.\n\t\tlet removed = 0;\n\t\tlet cursor: string | number = \"0\";\n\t\tdo {\n\t\t\tconst res = await this.#client.scan({\n\t\t\t\tmatch: `${this.#tagKeyPrefix}*`,\n\t\t\t\tcursor,\n\t\t\t\tcount: 100,\n\t\t\t});\n\t\t\tfor (const k of res.keys) {\n\t\t\t\tconst raw = await this.#client.get(this.#keyPrefix + k);\n\t\t\t\tconst ids = raw ? safeParseStringArray(raw) : [];\n\t\t\t\tconst live: string[] = [];\n\t\t\t\tfor (const id of ids) {\n\t\t\t\t\tif (await this.#client.exists(this.#key(id))) live.push(id);\n\t\t\t\t}\n\t\t\t\tif (live.length === 0) {\n\t\t\t\t\tawait this.#client.del(this.#keyPrefix + k);\n\t\t\t\t\tremoved++;\n\t\t\t\t} else if (live.length !== ids.length) {\n\t\t\t\t\tawait this.#client.set(\n\t\t\t\t\t\tthis.#keyPrefix + k,\n\t\t\t\t\t\tJSON.stringify(live),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcursor = res.cursor;\n\t\t} while (cursor !== \"0\" && cursor !== 0);\n\t\treturn removed;\n\t}\n\n\tasync invalidateByTag(tag: string): Promise<number> {\n\t\tconst tagK = this.#tagKey(tag);\n\t\tconst raw = await this.#client.get(tagK);\n\t\tif (!raw) return 0;\n\t\tconst keys = safeParseStringArray(raw);\n\t\tlet n = 0;\n\t\tfor (const k of keys) {\n\t\t\tawait this.#client.del(this.#key(k));\n\t\t\tn++;\n\t\t}\n\t\tawait this.#client.del(tagK);\n\t\treturn n;\n\t}\n\n\tasync invalidateByTags(tags: string[]): Promise<number> {\n\t\tlet n = 0;\n\t\tfor (const t of tags) n += await this.invalidateByTag(t);\n\t\treturn n;\n\t}\n\n\tasync wrap<T>(key: string, fn: () => Promise<T>, ttl?: number): Promise<T> {\n\t\tconst hit = await this.get<T>(key);\n\t\tif (hit !== undefined) return hit;\n\t\tconst value = await fn();\n\t\tawait this.set(key, value, ttl !== undefined ? { ttl } : undefined);\n\t\treturn value;\n\t}\n\n\tasync close(): Promise<void> {\n\t\tawait this.#client.close();\n\t}\n\n\tasync #addToTagIndex(tag: string, key: string): Promise<void> {\n\t\tconst k = this.#tagKey(tag);\n\t\tconst raw = await this.#client.get(k);\n\t\tconst ids = raw ? safeParseStringArray(raw) : [];\n\t\tif (!ids.includes(key)) ids.push(key);\n\t\tawait this.#client.set(k, JSON.stringify(ids));\n\t}\n}\n\nfunction safeParseStringArray(raw: string): string[] {\n\ttry {\n\t\tconst v = JSON.parse(raw);\n\t\treturn Array.isArray(v) ? v.filter((x) => typeof x === \"string\") : [];\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction crc32(s: string): string {\n\tlet c = 0xffffffff;\n\tfor (let i = 0; i < s.length; i++) {\n\t\tc ^= s.charCodeAt(i);\n\t\tfor (let k = 0; k < 8; k++) {\n\t\t\tc = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n\t\t}\n\t}\n\treturn (c ^ 0xffffffff).toString(16);\n}\n",
14
+ "/**\n * @Module decorator.\n *\n * Marks a class as a Nest-style module: a logical grouping of\n * controllers and providers with explicit imports/exports.\n *\n * @example\n * ```ts\n * @Module({\n * imports: [UserModule],\n * controllers: [UserController],\n * providers: [UserService],\n * exports: [UserService],\n * })\n * class AppModule {}\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\nimport type { ModuleOptions, Type } from \"../di/tokens.js\";\n\nexport function Module(options: ModuleOptions = {}): ClassDecorator {\n\treturn (target: object) => {\n\t\tReflect.defineMetadata(METADATA_KEY.MODULE, options, target);\n\t};\n}\n\n/** Read the @Module options from a class. */\nexport function getModuleOptions(target: Type<any>): ModuleOptions {\n\treturn Reflect.getMetadata(METADATA_KEY.MODULE, target) ?? {};\n}\n",
15
+ "/**\n * Convenience barrel for all decorators.\n */\nexport * from \"./module.js\";\nexport * from \"./controller.js\";\nexport * from \"./injectable.js\";\nexport * from \"./http-methods.js\";\nexport * from \"./params.js\";\nexport * from \"./validate.js\";\nexport * from \"./repository.js\";\nexport * from \"./metadata.js\";\n",
16
+ "/**\n * @Injectable decorator.\n *\n * Marks a class as available for DI. The container uses reflect-metadata's\n * `design:paramtypes` to read constructor parameter types and resolve them\n * automatically.\n *\n * @example\n * ```ts\n * @Injectable()\n * class UserService {\n * constructor(private repo: UserRepository) {}\n * }\n *\n * @Injectable({ scope: 'request' })\n * class RequestContext {\n * constructor(@Inject(REQUEST) private req: any) {}\n * }\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\n\nexport interface InjectableOptions {\n\tscope?: \"singleton\" | \"request\" | \"transient\";\n}\n\nexport function Injectable(options: InjectableOptions = {}): ClassDecorator {\n\treturn (target: object) => {\n\t\tReflect.defineMetadata(METADATA_KEY.INJECTABLE, true, target);\n\t\tif (options.scope) {\n\t\t\tReflect.defineMetadata(\n\t\t\t\t\"nexus:di:scope\",\n\t\t\t\toptions.scope,\n\t\t\t\ttarget,\n\t\t\t);\n\t\t}\n\t};\n}\n\nexport function isInjectable(target: any): boolean {\n\treturn Reflect.hasMetadata(METADATA_KEY.INJECTABLE, target);\n}\n\n/**\n * Read the scope declared on a class via `@Injectable({ scope })`.\n * Returns undefined when no scope is declared (defaults to singleton).\n */\nexport function getScope(\n\ttarget: any,\n): \"singleton\" | \"request\" | \"transient\" | undefined {\n\treturn Reflect.getMetadata(\"nexus:di:scope\", target);\n}\n\n/**\n * Mark a parameter as resolved by a specific token instead of its declared\n * type. Useful for interfaces, abstract classes, or string tokens.\n *\n * @example\n * ```ts\n * constructor(@Inject('CONFIG') private config: AppConfig) {}\n * ```\n */\nexport function Inject<T = any>(token: any): ParameterDecorator {\n\treturn (\n\t\ttarget: object,\n\t\tpropertyKey: string | symbol | undefined,\n\t\tparameterIndex: number,\n\t) => {\n\t\tconst existing: Map<number, any> =\n\t\t\tReflect.getMetadata(METADATA_KEY.INJECT, target) ?? new Map();\n\t\texisting.set(parameterIndex, token);\n\t\tReflect.defineMetadata(METADATA_KEY.INJECT, existing, target);\n\t};\n}",
17
+ "/**\n * @Repository decorator.\n *\n * Marks a class as a Spring-style repository. Repositories are normal\n * `@Injectable()` classes; the decorator is a marker so the framework\n * can register them with a database adapter (Drizzle/Prisma) and emit\n * a friendly error if you forget to wire one.\n *\n * @example\n * ```ts\n * @Repository()\n * class UserRepository {\n * findAll() { return db.select().from(users); }\n * }\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\nimport type { InjectionToken } from \"../di/tokens.js\";\n\nexport function Repository(entityToken?: InjectionToken<any>): ClassDecorator {\n\treturn (target: object) => {\n\t\tReflect.defineMetadata(\n\t\t\tMETADATA_KEY.REPOSITORY,\n\t\t\t{ entity: entityToken },\n\t\t\ttarget,\n\t\t);\n\t\tReflect.defineMetadata(METADATA_KEY.INJECTABLE, true, target);\n\t};\n}\n\nexport function getRepositoryMetadata(\n\ttarget: any,\n): { entity?: InjectionToken<any> } | undefined {\n\treturn Reflect.getMetadata(METADATA_KEY.REPOSITORY, target);\n}\n\nexport function isRepository(target: any): boolean {\n\treturn Reflect.hasMetadata(METADATA_KEY.REPOSITORY, target);\n}\n",
18
+ "/**\n * Reflect-metadata helper. Centralizes the keys the framework uses so\n * decorator files stay clean.\n */\nexport { METADATA_KEY, PARAM_TYPES, HTTP_METHODS } from \"../constants.js\";\nexport type { MetadataKey, ParamType, HttpMethod } from \"../constants.js\";\n",
19
+ "/**\n * `CacheService` — main entry point for caching.\n *\n * const cache = new CacheService({ store: new MemoryStore() });\n * await cache.set('user:42', user, { ttl: 60 });\n * const u = await cache.get<User>('user:42');\n *\n * Provides:\n * - `get`, `set`, `delete`, `clear` — direct key operations\n * - `wrap` — cache-or-compute\n * - `getOrSet` — alias for wrap with a default TTL\n * - `invalidateByTag`, `invalidateByPrefix` — bulk removal\n * - `applyDecorators(target)` — wires @Cacheable / @CacheInvalidate\n * onto an existing service instance.\n */\nimport { Inject, Injectable } from \"../core/decorators/index.js\";\nimport { MemoryStore } from \"./stores/memory.js\";\nimport type { CacheConfig, CacheStore } from \"./types.js\";\nimport {\n\tgetCacheableSpecs,\n\tgetCacheInvalidateSpecs,\n} from \"./types.js\";\n\n@Injectable()\nexport class CacheService {\n\t/** DI token. */\n\tstatic readonly TOKEN = Symbol.for(\"nexus:CacheService\");\n\n\tstore: CacheStore;\n\tdefaultTtl: number;\n\tprefix: string;\n\n\tconstructor(@Inject(\"CACHE_CONFIG\") config: CacheConfig = {}) {\n\t\tthis.store = config.store ?? new MemoryStore();\n\t\tthis.defaultTtl = config.defaultTtl ?? 60;\n\t\tthis.prefix = config.prefix ?? \"nexusjs\";\n\t}\n\n\tprivate key(k: string): string {\n\t\treturn `${this.prefix}:${k}`;\n\t}\n\n\tasync get<T = unknown>(k: string): Promise<T | undefined> {\n\t\treturn this.store.get<T>(this.key(k));\n\t}\n\n\tasync set<T = unknown>(k: string, value: T, ttl?: number): Promise<void>;\n\tasync set<T = unknown>(k: string, value: T, opts: { ttl?: number; tags?: string[] }): Promise<void>;\n\tasync set<T = unknown>(\n\t\tk: string,\n\t\tvalue: T,\n\t\toptsOrTtl: number | { ttl?: number; tags?: string[] } = this.defaultTtl,\n\t): Promise<void> {\n\t\tconst opts =\n\t\t\ttypeof optsOrTtl === \"number\"\n\t\t\t\t? { ttl: optsOrTtl }\n\t\t\t\t: { ttl: optsOrTtl.ttl ?? this.defaultTtl, tags: optsOrTtl.tags };\n\t\tawait this.store.set<T>(this.key(k), value, opts);\n\t}\n\n\tasync delete(k: string): Promise<boolean> {\n\t\treturn this.store.delete(this.key(k));\n\t}\n\n\tasync clear(pattern?: string): Promise<number> {\n\t\treturn this.store.clear(pattern ? `${this.prefix}:${pattern}` : undefined);\n\t}\n\n\t/** Get or compute-and-store. */\n\tasync wrap<T>(k: string, fn: () => Promise<T>, ttl?: number): Promise<T> {\n\t\treturn this.store.wrap<T>(this.key(k), fn, ttl ?? this.defaultTtl);\n\t}\n\n\t/**\n\t * Tag-based invalidation. Delegates to the underlying store.\n\t * Stores without a tag index (the default `MemoryStore`) return 0.\n\t * Use `DrizzleCacheStore` (or implement `invalidateByTag` on a\n\t * custom store) for true tag-based removal.\n\t */\n\tasync invalidateByTag(tag: string): Promise<number> {\n\t\tif (typeof (this.store as any).invalidateByTag === \"function\") {\n\t\t\treturn await (this.store as any).invalidateByTag(this.prefixedTag(tag));\n\t\t}\n\t\treturn 0;\n\t}\n\n\t/** Sweep expired entries. No-op on stores that don't implement `gc()`. */\n\tasync gc(): Promise<number> {\n\t\tif (typeof this.store.gc === \"function\") {\n\t\t\treturn await this.store.gc();\n\t\t}\n\t\treturn 0;\n\t}\n\n\t/** Apply the configured prefix to a tag name. */\n\tprivate prefixedTag(tag: string): string {\n\t\treturn `${this.prefix}:${tag}`;\n\t}\n\n\t/**\n\t * Apply @Cacheable / @CacheInvalidate decorators to an existing service\n\t * instance. The framework's DI container does this automatically.\n\t */\n\tapplyDecorators(target: any): void {\n\t\tconst ctor = target.constructor;\n\t\tconst cacheables = getCacheableSpecs(ctor);\n\t\tfor (const spec of cacheables) {\n\t\t\tconst original = spec.original;\n\t\t\t(target as any)[spec.propertyKey] = async (...args: any[]) => {\n\t\t\t\tconst subKey = spec.keyFn(...args);\n\t\t\t\treturn this.wrap(`${spec.prefix}:${subKey}`, () =>\n\t\t\t\t\toriginal.apply(target, args),\n\t\t\t\t);\n\t\t\t};\n\t\t}\n\t\tconst invalidates = getCacheInvalidateSpecs(ctor);\n\t\tfor (const spec of invalidates) {\n\t\t\tconst original = spec.original;\n\t\t\t(target as any)[spec.propertyKey] = async (...args: any[]) => {\n\t\t\t\tconst result = await original.apply(target, args);\n\t\t\t\tconst subKey = spec.keyFn(...args);\n\t\t\t\tawait this.clear(`${spec.prefix}:${subKey}*`);\n\t\t\t\treturn result;\n\t\t\t};\n\t\t}\n\t}\n}\n",
20
+ "/**\n * `CacheModule` — drop-in caching.\n *\n * @Module({\n * imports: [\n * CacheModule.forRoot({\n * store: new MemoryStore({ max: 50_000 }),\n * defaultTtl: 300, // 5 min\n * prefix: 'myapp',\n * }),\n * ],\n * })\n * export class AppModule {}\n */\nimport \"reflect-metadata\";\nimport { Module } from \"../core/decorators/module.js\";\nimport { CacheService } from \"./cache.service.js\";\nimport { MemoryStore } from \"./stores/memory.js\";\nimport type { CacheConfig } from \"./types.js\";\n\n@Module({\n\tproviders: [\n\t\tCacheService,\n\t\t{ provide: CacheService.TOKEN, useExisting: CacheService },\n\t],\n\texports: [CacheService, CacheService.TOKEN],\n})\nexport class CacheModule {\n\tstatic forRoot(config: CacheConfig = {}) {\n\t\tconst cfg: CacheConfig = {\n\t\t\tstore: new MemoryStore(),\n\t\t\t...config,\n\t\t};\n\t\t@Module({\n\t\t\tproviders: [\n\t\t\t\tCacheService,\n\t\t\t\t{ provide: CacheService.TOKEN, useExisting: CacheService },\n\t\t\t\t{ provide: \"CACHE_CONFIG\", useValue: cfg },\n\t\t\t],\n\t\t\texports: [CacheService, CacheService.TOKEN],\n\t\t})\n\t\tclass ConfiguredCacheModule {}\n\t\tObject.defineProperty(ConfiguredCacheModule, \"name\", {\n\t\t\tvalue: \"ConfiguredCacheModule\",\n\t\t});\n\t\treturn ConfiguredCacheModule;\n\t}\n}\n"
21
+ ],
22
+ "mappings": "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",
23
+ "debugId": "BEF376EA3BCD922764756E2164756E21",
24
+ "names": []
25
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * `DrizzleCacheStore` — cache entries backed by any Drizzle database.
3
+ *
4
+ * import { DrizzleService } from 'nexusjs/drizzle';
5
+ * import { DrizzleCacheStore } from 'nexusjs/cache';
6
+ *
7
+ * const db = new DrizzleService({ dialect: 'postgres', connection: {...} });
8
+ * await db.open();
9
+ *
10
+ * const store = new DrizzleCacheStore(db, {
11
+ * tableName: 'nexus_cache',
12
+ * });
13
+ *
14
+ * CacheModule.forRoot({ store, defaultTtl: 300 });
15
+ *
16
+ * Schema (managed by your migration):
17
+ *
18
+ * CREATE TABLE nexus_cache (
19
+ * key TEXT PRIMARY KEY,
20
+ * value TEXT NOT NULL, -- JSON-encoded
21
+ * expires_at TEXT, -- ISO timestamp, null = never
22
+ * created_at TEXT NOT NULL,
23
+ * updated_at TEXT NOT NULL
24
+ * );
25
+ *
26
+ * CREATE TABLE nexus_cache_tags ( -- tag → key index
27
+ * tag TEXT NOT NULL,
28
+ * key TEXT NOT NULL,
29
+ * PRIMARY KEY (tag, key)
30
+ * );
31
+ * CREATE INDEX nexus_cache_tags_key_idx ON nexus_cache_tags(key);
32
+ *
33
+ * Why a tag table? It enables true `invalidateByTag('users')` that
34
+ * removes every entry tagged 'users' in a single statement, regardless
35
+ * of how many keys share the tag.
36
+ */
37
+ import type { DrizzleService } from "../../drizzle/drizzle.service.js";
38
+ import type { CacheSetOptions, CacheStore } from "../types.js";
39
+ export interface DrizzleCacheOptions {
40
+ db: DrizzleService;
41
+ /** Cache row table. Default: 'nexus_cache'. */
42
+ tableName?: string;
43
+ /** Tag index table. Default: 'nexus_cache_tags'. */
44
+ tagsTableName?: string;
45
+ /** Column names — override to match your schema. */
46
+ columns?: {
47
+ key?: string;
48
+ value?: string;
49
+ expiresAt?: string;
50
+ createdAt?: string;
51
+ updatedAt?: string;
52
+ tag?: string;
53
+ };
54
+ }
55
+ export declare class DrizzleCacheStore implements CacheStore {
56
+ readonly kind: "drizzle";
57
+ private db;
58
+ private t;
59
+ private tagsT;
60
+ private c;
61
+ constructor(db: DrizzleService, options?: Omit<DrizzleCacheOptions, "db">);
62
+ get<T = unknown>(key: string): Promise<T | undefined>;
63
+ set<T = unknown>(key: string, value: T, opts?: CacheSetOptions): Promise<void>;
64
+ delete(key: string): Promise<boolean>;
65
+ clear(pattern?: string): Promise<number>;
66
+ wrap<T>(key: string, fn: () => Promise<T>, ttl?: number): Promise<T>;
67
+ /**
68
+ * Remove every cache entry that has been tagged with `tag`.
69
+ * Returns the number of keys removed.
70
+ */
71
+ invalidateByTag(tag: string): Promise<number>;
72
+ /** Clean up expired entries. */
73
+ gc(): Promise<number>;
74
+ close(): Promise<void>;
75
+ }
76
+ //# sourceMappingURL=drizzle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../../src/cache/stores/drizzle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IACnC,EAAE,EAAE,cAAc,CAAC;IACnB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,OAAO,CAAC,EAAE;QACT,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACF;AAKD,qBAAa,iBAAkB,YAAW,UAAU;IACnD,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAEnC,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,CAAC,CAAS;IAClB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,CAAC,CAOP;gBAEU,EAAE,EAAE,cAAc,EAAE,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAM;IAcvE,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAsBrD,GAAG,CAAC,CAAC,GAAG,OAAO,EACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,IAAI,GAAE,eAAoB,GACxB,OAAO,CAAC,IAAI,CAAC;IAoCV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAerC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BxC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAQ1E;;;OAGG;IACG,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BnD,gCAAgC;IAC1B,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC;IAiBrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Stores barrel.
3
+ */
4
+ export { MemoryStore } from "./memory.js";
5
+ export type { MemoryStoreOptions } from "./memory.js";
6
+ export { DrizzleCacheStore } from "./drizzle.js";
7
+ export type { DrizzleCacheOptions } from "./drizzle.js";
8
+ export { RedisCacheStore } from "./redis.js";
9
+ export type { RedisCacheStoreOptions } from "./redis.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cache/stores/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * In-memory LRU cache store with TTL eviction.
3
+ *
4
+ * Simple and fast; not cluster-safe. Use `RedisStore` for shared state
5
+ * across multiple Bun processes.
6
+ */
7
+ import type { CacheSetOptions, CacheStore } from "../types.js";
8
+ export interface MemoryStoreOptions {
9
+ /** Maximum number of entries. Default: 10_000. */
10
+ max?: number;
11
+ /** Sweep interval for expired entries. Default: 30_000 ms. 0 = no sweep. */
12
+ sweepIntervalMs?: number;
13
+ }
14
+ export declare class MemoryStore implements CacheStore {
15
+ readonly kind = "memory";
16
+ private data;
17
+ private tagIndex;
18
+ private readonly max;
19
+ private sweepTimer;
20
+ constructor(opts?: MemoryStoreOptions);
21
+ get<T = unknown>(key: string): Promise<T | undefined>;
22
+ set<T = unknown>(key: string, value: T, opts?: CacheSetOptions): Promise<void>;
23
+ delete(key: string): Promise<boolean>;
24
+ clear(pattern?: string): Promise<number>;
25
+ wrap<T>(key: string, fn: () => Promise<T>, ttl?: number): Promise<T>;
26
+ /**
27
+ * Tag-based invalidation. Maintains a `tag -> Set<key>` index in
28
+ * addition to the main map. Returns the number of keys removed.
29
+ */
30
+ invalidateByTag(tag: string): Promise<number>;
31
+ close(): Promise<void>;
32
+ private sweepExpired;
33
+ }
34
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/cache/stores/memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAc,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IAClC,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,WAAY,YAAW,UAAU;IAC7C,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,UAAU,CAA+C;gBAErD,IAAI,GAAE,kBAAuB;IAYnC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAarD,GAAG,CAAC,CAAC,GAAG,OAAO,EACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,IAAI,GAAE,eAAoB,GACxB,OAAO,CAAC,IAAI,CAAC;IA+BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBxC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAQ1E;;;OAGG;IACG,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,CAAC,YAAY;CAapB"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * `RedisCacheStore` — a `CacheStore` backed by `nexusjs/redis`.
3
+ *
4
+ * Works on **Bun** (`Bun.redis`), **Node** (`ioredis`), and
5
+ * **Cloudflare Workers KV** (via `CloudflareKVAdapter`). The
6
+ * same adapter selection applies as for sessions.
7
+ *
8
+ * import { CacheService } from 'nexusjs/cache';
9
+ * import { RedisCacheStore, createRedisClient } from 'nexusjs/redis';
10
+ *
11
+ * const cache = new CacheService({
12
+ * store: new RedisCacheStore(createRedisClient({ url: 'redis://localhost:6379' }), {
13
+ * keyPrefix: 'cache:',
14
+ * }),
15
+ * });
16
+ *
17
+ * Values are JSON-serialized. The store uses the KV backend's
18
+ * own TTL (Redis `EX` / KV `expirationTtl`).
19
+ *
20
+ * Tag-based invalidation is supported on the Redis and Node
21
+ * adapters (a per-tag Set is maintained as a separate KV key).
22
+ * On Cloudflare KV, tag invalidation degrades to a SCAN — slower
23
+ * but correct.
24
+ */
25
+ import type { RedisClient } from "../../redis/types.js";
26
+ import type { CacheSetOptions, CacheStore } from "../types.js";
27
+ export interface RedisCacheStoreOptions {
28
+ /** Key prefix. Default: "cache:". */
29
+ keyPrefix?: string;
30
+ }
31
+ export declare class RedisCacheStore implements CacheStore {
32
+ #private;
33
+ readonly kind = "redis";
34
+ constructor(client: RedisClient, options?: RedisCacheStoreOptions);
35
+ get<T = unknown>(key: string): Promise<T | undefined>;
36
+ set<T = unknown>(key: string, value: T, opts?: CacheSetOptions): Promise<void>;
37
+ delete(key: string): Promise<boolean>;
38
+ has(key: string): Promise<boolean>;
39
+ clear(): Promise<number>;
40
+ gc(): Promise<number>;
41
+ invalidateByTag(tag: string): Promise<number>;
42
+ invalidateByTags(tags: string[]): Promise<number>;
43
+ wrap<T>(key: string, fn: () => Promise<T>, ttl?: number): Promise<T>;
44
+ close(): Promise<void>;
45
+ }
46
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/cache/stores/redis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAc,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI3E,MAAM,WAAW,sBAAsB;IACtC,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,eAAgB,YAAW,UAAU;;IACjD,QAAQ,CAAC,IAAI,WAAW;gBAKZ,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,sBAA2B;IAc/D,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAerD,GAAG,CAAC,CAAC,GAAG,OAAO,EACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,IAAI,CAAC,EAAE,eAAe,GACpB,OAAO,CAAC,IAAI,CAAC;IAiBV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBxB,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC;IAkCrB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAc7C,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAMjD,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAQpE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAW5B"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * `nexusjs/cache` — application-level caching.
3
+ *
4
+ * Two backends ship out of the box:
5
+ * - `MemoryStore` — single-process LRU with TTL eviction
6
+ * - `RedisStore` — multi-pod via ioredis (peer dep, optional)
7
+ *
8
+ * const cache = new CacheService({ store: new MemoryStore({ max: 10_000 }) });
9
+ * await cache.set('user:42', user, 60); // 60-second TTL
10
+ * const u = await cache.get<User>('user:42');
11
+ *
12
+ * Decorators are also provided for service methods:
13
+ *
14
+ * @Cacheable('user', (id: string) => id, 60)
15
+ * async findById(id: string) { ... }
16
+ */
17
+ import "reflect-metadata";
18
+ import { METADATA_KEY } from "../core/constants.js";
19
+ /** A single cache entry. */
20
+ export interface CacheEntry<T = unknown> {
21
+ value: T;
22
+ /** Unix-ms timestamp when this entry expires. 0 = never. */
23
+ expiresAt: number;
24
+ /** Stash tags for invalidation. */
25
+ tags?: string[];
26
+ }
27
+ /** Storage backend for cache entries. */
28
+ export interface CacheStore {
29
+ readonly kind: string;
30
+ /** Get a value. Returns `undefined` if missing or expired. */
31
+ get<T = unknown>(key: string): Promise<T | undefined>;
32
+ /** Set a value with optional TTL (seconds) and tags. */
33
+ set<T = unknown>(key: string, value: T, opts?: CacheSetOptions): Promise<void>;
34
+ /** Delete a single key. */
35
+ delete(key: string): Promise<boolean>;
36
+ /** Delete every key matching `pattern` (glob: `*`, `**`). */
37
+ clear(pattern?: string): Promise<number>;
38
+ /** Wrap a function with cache-or-compute semantics. */
39
+ wrap<T>(key: string, fn: () => Promise<T>, ttl?: number): Promise<T>;
40
+ /**
41
+ * Remove every entry tagged with `tag`. Backends without a tag
42
+ * index (e.g. MemoryStore) return 0.
43
+ */
44
+ invalidateByTag?(tag: string): Promise<number>;
45
+ /** Sweep expired entries. Backends without a sweep loop return 0. */
46
+ gc?(): Promise<number>;
47
+ /** Optional: free resources. */
48
+ close?(): Promise<void>;
49
+ }
50
+ /** Options for `set()`. */
51
+ export interface CacheSetOptions {
52
+ /** Time-to-live in seconds. 0 = forever. */
53
+ ttl?: number;
54
+ /** Tags for grouped invalidation. */
55
+ tags?: string[];
56
+ }
57
+ export interface CacheConfig {
58
+ /** Storage backend. Default: in-memory LRU. */
59
+ store?: CacheStore;
60
+ /** Default TTL in seconds when none is provided. Default: 60. */
61
+ defaultTtl?: number;
62
+ /** Prefix prepended to all keys. Default: 'nexusjs'. */
63
+ prefix?: string;
64
+ }
65
+ /** Internal metadata key. */
66
+ export declare const CACHEABLE_META = "nexus:cache:cacheable";
67
+ export declare const CACHE_INVALIDATE_META = "nexus:cache:invalidate";
68
+ /** @Cacheable decorator. Caches the result of a method. */
69
+ export declare function Cacheable(prefix: string, keyFn: (...args: any[]) => string, ttlSeconds?: number): MethodDecorator;
70
+ /** @CacheInvalidate decorator. Removes matching keys after a method runs. */
71
+ export declare function CacheInvalidate(prefix: string, keyFn: (...args: any[]) => string): MethodDecorator;
72
+ export interface CacheableSpec {
73
+ prefix: string;
74
+ keyFn: (...args: any[]) => string;
75
+ ttl: number;
76
+ propertyKey: string | symbol;
77
+ original: (...args: any[]) => any;
78
+ }
79
+ export interface CacheInvalidateSpec {
80
+ prefix: string;
81
+ keyFn: (...args: any[]) => string;
82
+ propertyKey: string | symbol;
83
+ original: (...args: any[]) => any;
84
+ }
85
+ export declare function getCacheableSpecs(target: any): CacheableSpec[];
86
+ export declare function getCacheInvalidateSpecs(target: any): CacheInvalidateSpec[];
87
+ export { METADATA_KEY };
88
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cache/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,4BAA4B;AAC5B,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACtC,KAAK,EAAE,CAAC,CAAC;IACT,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,yCAAyC;AACzC,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACtD,wDAAwD;IACxD,GAAG,CAAC,CAAC,GAAG,OAAO,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,IAAI,CAAC,EAAE,eAAe,GACpB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,2BAA2B;IAC3B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,6DAA6D;IAC7D,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,uDAAuD;IACvD,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrE;;;OAGG;IACH,eAAe,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,qEAAqE;IACrE,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACvB,gCAAgC;IAChC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,2BAA2B;AAC3B,MAAM,WAAW,eAAe;IAC/B,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC3B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,6BAA6B;AAC7B,eAAO,MAAM,cAAc,0BAA0B,CAAC;AACtD,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAE9D,2DAA2D;AAC3D,wBAAgB,SAAS,CACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,EACjC,UAAU,SAAK,GACb,eAAe,CAiBjB;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,GAC/B,eAAe,CAWjB;AAED,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;CAClC;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,EAAE,CAE9D;AACD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,GAAG,GAAG,mBAAmB,EAAE,CAE1E;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * `nx config` — update or create nx.config.ts (+ drizzle.config.ts
3
+ * if Drizzle is selected).
4
+ *
5
+ * Companion to `nx init`:
6
+ * - `nx init` → scaffold the whole project (config + src/app + README)
7
+ * - `nx config` → only the config files; idempotent
8
+ *
9
+ * Behaviour:
10
+ * - If nx.config.ts exists, parses the current values, merges
11
+ * with any flag values (flags win), and re-renders.
12
+ * - If it does not exist, creates it from scratch with the
13
+ * provided (or prompted) values.
14
+ * - If ORM is `drizzle`, also writes drizzle.config.ts.
15
+ * - If ORM is NOT `drizzle`, an existing drizzle.config.ts is
16
+ * left alone (the user may have it intentionally).
17
+ *
18
+ * Typical use cases:
19
+ * - "I want to switch from bun-sqlite to postgres"
20
+ * → nx config --db postgres
21
+ * - "I want to add Drizzle to an existing project"
22
+ * → nx config --orm drizzle
23
+ * - "I want to change the Inertia frontend from React to Vue"
24
+ * → nx config --frontend vue
25
+ * - "I haven't decided yet, just show me the prompts"
26
+ * → nx config --no-interaction=false
27
+ *
28
+ * Flags:
29
+ * --target <dir> Target directory (default: cwd)
30
+ * --style <name> Routing style (nest|adonis|functional)
31
+ * --view <name> View engine (rendu|edge|inertia|none)
32
+ * --orm <name> ORM driver (drizzle|prisma|kysely|none)
33
+ * --db <name> Database driver
34
+ * --db-url <url> Database URL (used when DATABASE_URL is unset)
35
+ * --frontend <name> Inertia frontend (react|vue|svelte|solid)
36
+ * --ssr Enable Inertia SSR
37
+ * --no-ssr Disable Inertia SSR
38
+ * --force Overwrite even if file already exists
39
+ * --no-interaction Skip interactive prompts
40
+ */
41
+ import type { Command } from "../core/index.js";
42
+ export declare const configCommand: Command;
43
+ export default configCommand;
44
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AAwFhE,eAAO,MAAM,aAAa,EAAE,OAqK3B,CAAC;AAmBF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `nx db:generate <name>` — generate a new migration file from schema changes.
3
+ *
4
+ * Wraps `drizzle-kit generate` with the project's config, so you
5
+ * don't need to pass `--config` every time.
6
+ *
7
+ * Examples:
8
+ * nx db:generate add_users_table
9
+ * nx db:generate add_posts_table --dialect postgres
10
+ * nx db:generate --sql # raw SQL file (no drizzle-kit)
11
+ *
12
+ * See also:
13
+ * nx db:migrate — apply pending migrations
14
+ * nx db:seed — run database seeds
15
+ * nx make:migration — scaffold an empty migration file
16
+ */
17
+ import type { Command } from "../core/index.js";
18
+ export declare const dbGenerateCommand: Command;
19
+ export default dbGenerateCommand;
20
+ //# sourceMappingURL=db-generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/db-generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AAIhE,eAAO,MAAM,iBAAiB,EAAE,OA+C/B,CAAC;AA6BF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * `nx db:migrate` — apply pending database migrations.
3
+ *
4
+ * Two modes:
5
+ *
6
+ * 1. **Default**: scan the project's `nx.config.ts` for
7
+ * `paths.migrations` and run every pending file through the
8
+ * drizzle-kit-equivalent migrator path.
9
+ *
10
+ * Implementation: spawns `bunx drizzle-kit migrate` if the
11
+ * drizzle-kit binary is on PATH; otherwise runs an in-process
12
+ * migration script that uses `nexusjs/drizzle`'s
13
+ * `db.migrate(folder)` directly.
14
+ *
15
+ * 2. **`--status`**: list applied migrations + pending count.
16
+ *
17
+ * 3. **`--generate "<name>"`**: wrapper around `drizzle-kit
18
+ * generate` — useful when you want to commit a migration file
19
+ * but prefer the `nx` alias over the bare command.
20
+ *
21
+ * Examples:
22
+ * nx db:migrate
23
+ * nx db:migrate --status
24
+ * nx db:migrate --generate "add_user_email"
25
+ * nx db:migrate --folder ./drizzle --dialect postgres
26
+ *
27
+ * See also: `nx db:seed` for inserting fixture data.
28
+ */
29
+ import type { Command } from "../core/index.js";
30
+ export declare const dbMigrateCommand: Command;
31
+ export declare function runDrizzleKit(cwd: string, args: string[]): Promise<number>;
32
+ export default dbMigrateCommand;
33
+ //# sourceMappingURL=db-migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-migrate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/db-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AAGhE,eAAO,MAAM,gBAAgB,EAAE,OAyE9B,CAAC;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAe1E;AA4ED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * `nx db:seed` — run database seed scripts.
3
+ *
4
+ * Seeds are TypeScript (or JavaScript) files that populate the
5
+ * database with fixture data. The command:
6
+ *
7
+ * 1. Scans the configured `seeds` directory (default
8
+ * `./db/seeds` — overridable via `paths.seeds` in
9
+ * `nx.config.ts`).
10
+ * 2. Loads every `*.ts` (or `*.js` / `*.mjs`) file in
11
+ * alphabetical order.
12
+ * 3. Invokes the default export as an async function, passing
13
+ * a `SeedContext` that exposes the active DrizzleService,
14
+ * logger, and a few helpers (see below).
15
+ *
16
+ * Examples:
17
+ * nx db:seed # run all seeds in db/seeds/
18
+ * nx db:seed --file 01_users # run a single seed
19
+ * nx db:seed --reset # clear all tables first (DESTRUCTIVE)
20
+ * nx db:seed --create users # scaffold a new seed file
21
+ * nx db:seed --folder ./seeds # custom folder
22
+ *
23
+ * Seed file example:
24
+ *
25
+ * // db/seeds/01_users.ts
26
+ * import type { SeedContext } from "nexusjs/cli";
27
+ *
28
+ * export default async function seed(ctx: SeedContext) {
29
+ * await ctx.db.insert(users).values([
30
+ * { email: "alice@example.com" },
31
+ * { email: "bob@example.com" },
32
+ * ]);
33
+ * ctx.logger.info(`Inserted 2 users`);
34
+ * }
35
+ *
36
+ * The "01_users.ts" naming convention (zero-padded numbers as
37
+ * prefixes) is recommended but not required — alphabetical
38
+ * ordering is the only rule.
39
+ */
40
+ import type { Command } from "../core/index.js";
41
+ export declare const dbSeedCommand: Command;
42
+ export default dbSeedCommand;
43
+ //# sourceMappingURL=db-seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-seed.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/db-seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AA6BhE,eAAO,MAAM,aAAa,EAAE,OAsK3B,CAAC;AAoEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * CLI command registry. Imported by `src/cli/index.ts`.
3
+ *
4
+ * Each command is a `Command` object (see `core/index.ts`). The order
5
+ * here is the order commands appear in `nx help`.
6
+ */
7
+ import type { Command } from "../core/index.js";
8
+ export declare const commands: Command[];
9
+ /** Look up a command by primary name OR by any alias. */
10
+ export declare function findCommand(name: string): Command | undefined;
11
+ //# sourceMappingURL=index.d.ts.map