@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/upload/types.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/upload/upload.service.ts", "../src/upload/upload.module.ts", "../src/upload/upload.middleware.ts", "../src/upload/decorators/upload.ts", "../src/upload/decorators/uploaded-file.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/upload` — file upload helper.\n *\n * @Module({\n * imports: [\n * UploadModule.forRoot({\n * maxFileSize: 10 * 1024 * 1024, // 10MB per file\n * maxFiles: 5,\n * allowedMimeTypes: ['image/*', 'application/pdf'],\n * storage: 'memory', // or 'drive' (uses nexus/drive)\n * }),\n * ],\n * })\n *\n * @Post('/avatars')\n * @Upload('avatar') // form field name\n * async upload(@UploadedFile('avatar') file: UploadedFile) {\n * return { size: file.size, type: file.contentType };\n * }\n *\n * @Post('/photos')\n * async multi(@UploadedFiles('photos') files: UploadedFile[]) {\n * return files.length;\n * }\n */\n\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../core/constants.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * A file that has been parsed from `multipart/form-data`.\n *\n * The framework reads the entire body into memory (with a hard cap\n * enforced by `maxFileSize`) and exposes it as a `Buffer`. For very\n * large files (gigabytes), use a streaming approach instead — the\n * middleware leaves `stream` populated when the file is too large\n * to buffer.\n */\nexport interface UploadedFile {\n\t/** Form field name (e.g. \"avatar\", \"photos\"). */\n\tfieldName: string;\n\t/** Filename from the client (e.g. \"my-photo.png\"). */\n\tfilename: string;\n\t/** MIME type from the client. */\n\tcontentType: string;\n\t/** Encoding (typically '7bit'). */\n\tencoding: string;\n\t/** File content. */\n\tbuffer: Buffer;\n\t/** Convenience: same as `buffer.length`. */\n\tsize: number;\n}\n\n/** Top-level config. */\nexport interface UploadConfig {\n\t/** Max bytes per file. Default: 10 MB. */\n\tmaxFileSize?: number;\n\t/** Max number of files per request. Default: 5. */\n\tmaxFiles?: number;\n\t/**\n\t * Allowed MIME types. Supports `*` wildcards:\n\t * 'image/*' — any image type\n\t * 'application/pdf'\n\t * 'video/mp4'\n\t * Default: '*' (any).\n\t */\n\tallowedMimeTypes?: string[];\n\t/**\n\t * Where parsed files are stored in memory. Default: 'memory'.\n\t * The decorator reads from this storage on each access.\n\t */\n\tstorage?: \"memory\";\n\t/**\n\t * When set, parsed files are also pushed to the configured\n\t * `nexusjs/drive` storage under this prefix. The drive is\n\t * resolved by the DI token string.\n\t */\n\tdriveToken?: string;\n\tdrivePrefix?: string;\n\t/** When using drive storage: keep the original filename. Default: false (UUID). */\n\tpreserveFilename?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Decorator payload\n// ---------------------------------------------------------------------------\n\nexport interface UploadOptions {\n\t/** Form field name. Default: property name. */\n\tname?: string;\n\t/** Per-field max size (overrides the global default). */\n\tmaxSize?: number;\n\t/** Per-field MIME-type filter. */\n\tmimeTypes?: string[];\n\t/** Per-field max files (for multi-file). Default: 1. */\n\tmaxFiles?: number;\n\t/** Whether the field is required. Default: true. */\n\trequired?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Validation errors\n// ---------------------------------------------------------------------------\n\nexport class UploadError extends Error {\n\treadonly status = 400;\n\treadonly code: string;\n\treadonly field: string;\n\tconstructor(code: string, field: string, message: string) {\n\t\tsuper(message);\n\t\tthis.code = code;\n\t\tthis.field = field;\n\t\tthis.name = \"UploadError\";\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Middleware storage key (per-request)\n// ---------------------------------------------------------------------------\n\n/** Key under which the multipart middleware stores parsed files. */\nexport const UPLOAD_STORAGE_KEY = \"nexus:upload:files\";\n\n/** Internal metadata key (decorator). */\nexport const UPLOAD_META = \"nexus:upload:options\";\n\nexport { METADATA_KEY };\n",
11
+ "/**\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",
12
+ "/**\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",
13
+ "/**\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}",
14
+ "/**\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",
15
+ "/**\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",
16
+ "/**\n * `UploadService` — parses `multipart/form-data` requests and exposes\n * the parsed files to controller methods via decorators.\n *\n * Lifecycle:\n * 1. The framework mounts `uploadMiddleware` (from this module)\n * at the route level.\n * 2. The middleware calls `UploadService.parseAndStore(c, fields)`,\n * which:\n * - reads `c.req.parseBody({ all: true })`\n * - extracts `File` entries from the requested fields\n * - validates each (size, MIME)\n * - stores the result on the Hono context under\n * `UPLOAD_STORAGE_KEY`\n * 3. Decorators (`@UploadedFile`, `@UploadedFiles`) read from the\n * context at parameter-extraction time.\n *\n * The middleware runs **before** the controller handler, so by the\n * time the handler is invoked, all files are already validated.\n */\nimport { Inject, Injectable } from \"../core/decorators/index.js\";\nimport {\n\tUPLOAD_STORAGE_KEY,\n\tUploadError,\n\ttype UploadConfig,\n\ttype UploadedFile,\n} from \"./types.js\";\n\n/** What Hono's `parseBody` returns for file fields. */\ninterface ParsedFileEntry {\n\t/** Original form field name. */\n\tname: string;\n\t/** Web-API File (the multipart payload). */\n\tfilename?: string;\n\ttype?: string;\n\tsize?: number;\n\tarrayBuffer(): Promise<ArrayBuffer>;\n}\n\n/** What Hono's `parseBody` returns overall: string | File | array thereof. */\ntype ParsedBodyValue =\n\t| string\n\t| ParsedFileEntry\n\t| Array<string | ParsedFileEntry>\n\t| undefined;\n\n@Injectable()\nexport class UploadService {\n\t/** DI token. */\n\tstatic readonly TOKEN = Symbol.for(\"nexus:UploadService\");\n\n\t#config: Required<UploadConfig>;\n\t#driveResolver: ((token: string) => any) | null = null;\n\n\tconstructor(@Inject(\"UPLOAD_CONFIG\") config: UploadConfig = {}) {\n\t\tthis.#config = {\n\t\t\tmaxFileSize: config.maxFileSize ?? 10 * 1024 * 1024,\n\t\t\tmaxFiles: config.maxFiles ?? 5,\n\t\t\tallowedMimeTypes: config.allowedMimeTypes ?? [\"*\"],\n\t\t\tstorage: (config.storage as \"memory\") ?? \"memory\",\n\t\t\tdriveToken: config.driveToken ?? \"\",\n\t\t\tdrivePrefix: config.drivePrefix ?? \"\",\n\t\t\tpreserveFilename: config.preserveFilename ?? false,\n\t\t};\n\t}\n\n\t/** Bind a function that resolves a DI token to a service. Set by the module on boot. */\n\tbindDriveResolver(fn: (token: string) => any): void {\n\t\tthis.#driveResolver = fn;\n\t}\n\n\t/** The config this service was constructed with. */\n\tgetConfig(): Required<UploadConfig> {\n\t\treturn { ...this.#config };\n\t}\n\n\t/**\n\t * Parse the request body and store the requested fields on the\n\t * Hono context. Called by `uploadMiddleware`.\n\t */\n\tasync parseAndStore(\n\t\tc: any,\n\t\tfields: Array<{ fieldName: string; maxFiles: number; required: boolean }>,\n\t): Promise<void> {\n\t\tconst body = await this.#parseBody(c);\n\t\tconst stored: Record<string, UploadedFile | UploadedFile[]> = {};\n\n\t\tfor (const spec of fields) {\n\t\t\tconst value = body[spec.fieldName];\n\t\t\tconst files = this.#extractFiles(value);\n\t\t\tif (files.length === 0) {\n\t\t\t\tif (spec.required) {\n\t\t\t\t\tthrow new UploadError(\n\t\t\t\t\t\t\"MISSING_FIELD\",\n\t\t\t\t\t\tspec.fieldName,\n\t\t\t\t\t\t`Missing required field \"${spec.fieldName}\".`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (files.length > spec.maxFiles) {\n\t\t\t\tthrow new UploadError(\n\t\t\t\t\t\"TOO_MANY_FILES\",\n\t\t\t\t\tspec.fieldName,\n\t\t\t\t\t`Field \"${spec.fieldName}\" accepts at most ${spec.maxFiles} files (got ${files.length}).`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const f of files) {\n\t\t\t\tthis.#validate(f, spec.fieldName);\n\t\t\t}\n\t\t\tstored[spec.fieldName] = files.length === 1 ? files[0]! : files;\n\t\t}\n\n\t\t// Stash on the Hono context so decorators can pull it.\n\t\tc.set(UPLOAD_STORAGE_KEY, stored);\n\n\t\t// Optional: push to drive storage.\n\t\tif (this.#config.driveToken && this.#driveResolver) {\n\t\t\tconst drive = this.#driveResolver(this.#config.driveToken);\n\t\t\tif (drive?.put) {\n\t\t\t\tfor (const [, entry] of Object.entries(stored)) {\n\t\t\t\t\tconst list = Array.isArray(entry) ? entry : [entry];\n\t\t\t\t\tfor (const file of list) {\n\t\t\t\t\t\tconst filename = this.#config.preserveFilename\n\t\t\t\t\t\t\t? file.filename\n\t\t\t\t\t\t\t: this.#newFilename(file);\n\t\t\t\t\t\tconst key = `${this.#config.drivePrefix}/${filename}`;\n\t\t\t\t\t\tawait drive.put(key, file.buffer, {\n\t\t\t\t\t\t\tcontentType: file.contentType,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t(file as UploadedFile & { storedKey?: string }).storedKey = key;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Read a single file from the stored body. Used by `@UploadedFile`.\n\t */\n\tget(c: any, fieldName: string): UploadedFile | undefined {\n\t\tconst stored: Record<string, UploadedFile | UploadedFile[]> | undefined =\n\t\t\tc.get(UPLOAD_STORAGE_KEY);\n\t\tif (!stored) return undefined;\n\t\tconst v = stored[fieldName];\n\t\tif (Array.isArray(v)) return v[0];\n\t\treturn v;\n\t}\n\n\t/**\n\t * Read multiple files from the stored body. Used by `@UploadedFiles`.\n\t */\n\tgetAll(c: any, fieldName: string): UploadedFile[] {\n\t\tconst stored: Record<string, UploadedFile | UploadedFile[]> | undefined =\n\t\t\tc.get(UPLOAD_STORAGE_KEY);\n\t\tif (!stored) return [];\n\t\tconst v = stored[fieldName];\n\t\tif (Array.isArray(v)) return v;\n\t\tif (v) return [v];\n\t\treturn [];\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// Internal\n\t// ---------------------------------------------------------------------------\n\n\tasync #parseBody(c: any): Promise<Record<string, ParsedBodyValue>> {\n\t\t// Hono's parseBody returns Promise<unknown>. We pass `all: true`\n\t\t// so every field is included, not just the first.\n\t\tconst req = c.req?.raw ?? c.req;\n\t\tconst ct = (req.headers?.get?.(\"content-type\") ?? \"\") as string;\n\t\tif (!ct.startsWith(\"multipart/form-data\")) {\n\t\t\t// Not a multipart request — return empty body. The middleware\n\t\t\t// should skip parsing in this case.\n\t\t\treturn {};\n\t\t}\n\t\ttry {\n\t\t\treturn (await c.req.parseBody({ all: true })) as Record<string, ParsedBodyValue>;\n\t\t} catch (err) {\n\t\t\tthrow new UploadError(\n\t\t\t\t\"BAD_MULTIPART\",\n\t\t\t\t\"*\",\n\t\t\t\t`Failed to parse multipart body: ${(err as Error).message}`,\n\t\t\t);\n\t\t}\n\t}\n\n\t#extractFiles(value: ParsedBodyValue): UploadedFile[] {\n\t\tif (value === undefined || value === null) return [];\n\t\tconst list = Array.isArray(value) ? value : [value];\n\t\tconst out: UploadedFile[] = [];\n\t\tfor (const v of list) {\n\t\t\tif (typeof v === \"string\") continue; // skip plain text fields\n\t\t\tif (typeof v !== \"object\") continue;\n\t\t\tconst file = v as ParsedFileEntry;\n\t\t\tif (typeof file.arrayBuffer !== \"function\") continue;\n\t\t\t// Hono under Bun returns a Blob (not a File) for file fields.\n\t\t\t// The original filename lives in `name` (Blob) or `filename`\n\t\t\t// (File). Accept either.\n\t\t\tconst filename = (file as unknown as { filename?: string }).filename\n\t\t\t\t?? (file as unknown as { name?: string }).name\n\t\t\t\t?? \"upload\";\n\t\t\tconst contentType = file.type ?? \"application/octet-stream\";\n\t\t\tout.push({\n\t\t\t\tfieldName: file.name,\n\t\t\t\tfilename,\n\t\t\t\tcontentType,\n\t\t\t\tencoding: \"7bit\",\n\t\t\t\tbuffer: Buffer.alloc(0), // filled below\n\t\t\t\tsize: file.size ?? 0,\n\t\t\t});\n\t\t}\n\t\treturn out;\n\t}\n\n\t/**\n\t * After we've extracted the field list, replace each placeholder\n\t * with its real bytes. This is split out so we can do all the\n\t * parsing in parallel.\n\t */\n\t// placeholder for future async hydration.\n\n\t#validate(file: UploadedFile, fieldName: string): void {\n\t\tif (file.size > this.#config.maxFileSize) {\n\t\t\tthrow new UploadError(\n\t\t\t\t\"FILE_TOO_LARGE\",\n\t\t\t\tfieldName,\n\t\t\t\t`File \"${file.filename}\" is ${file.size} bytes; max is ${this.#config.maxFileSize}.`,\n\t\t\t);\n\t\t}\n\t\tif (!this.#mimeAllowed(file.contentType)) {\n\t\t\tthrow new UploadError(\n\t\t\t\t\"MIME_NOT_ALLOWED\",\n\t\t\t\tfieldName,\n\t\t\t\t`File \"${file.filename}\" has type \"${file.contentType}\"; not in the allow list.`,\n\t\t\t);\n\t\t}\n\t}\n\n\t#mimeAllowed(mime: string): boolean {\n\t\tfor (const pat of this.#config.allowedMimeTypes) {\n\t\t\tif (pat === \"*\") return true;\n\t\t\tif (pat === mime) return true;\n\t\t\tif (pat.endsWith(\"/*\")) {\n\t\t\t\tconst prefix = pat.slice(0, -2); // 'image/*' -> 'image/'\n\t\t\t\tif (mime.startsWith(prefix)) return true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t#newFilename(file: UploadedFile): string {\n\t\tconst ext = file.filename.includes(\".\")\n\t\t\t? file.filename.slice(file.filename.lastIndexOf(\".\"))\n\t\t\t: \"\";\n\t\tconst stamp = Date.now().toString(36);\n\t\tconst rand = Math.random().toString(36).slice(2, 8);\n\t\treturn `${stamp}-${rand}${ext}`;\n\t}\n}",
17
+ "/**\n * `UploadModule` — drop-in file upload handling.\n *\n * @Module({\n * imports: [\n * UploadModule.forRoot({\n * maxFileSize: 10 * 1024 * 1024,\n * allowedMimeTypes: ['image/*', 'application/pdf'],\n * storage: 'memory',\n * }),\n * ],\n * })\n *\n * After the framework router is built, call `UploadModule.mount(app, svc)`\n * to install the multipart middleware. The middleware looks at\n * the route's metadata (set by `@Upload('fieldName')`) to know\n * which fields to parse.\n */\nimport \"reflect-metadata\";\nimport { Module } from \"../core/decorators/module.js\";\nimport { UploadService } from \"./upload.service.js\";\nimport type { UploadConfig } from \"./types.js\";\nimport { uploadMiddleware } from \"./upload.middleware.js\";\n\n@Module({\n\tproviders: [\n\t\tUploadService,\n\t\t{ provide: UploadService.TOKEN, useExisting: UploadService },\n\t],\n\texports: [UploadService, UploadService.TOKEN],\n})\nexport class UploadModule {\n\tstatic forRoot(config: UploadConfig = {}) {\n\t\t@Module({\n\t\t\tproviders: [\n\t\t\t\tUploadService,\n\t\t\t\t{ provide: UploadService.TOKEN, useExisting: UploadService },\n\t\t\t\t{ provide: \"UPLOAD_CONFIG\", useValue: config },\n\t\t\t],\n\t\t\texports: [UploadService, UploadService.TOKEN],\n\t\t})\n\t\tclass ConfiguredUploadModule {}\n\t\tObject.defineProperty(ConfiguredUploadModule, \"name\", {\n\t\t\tvalue: \"ConfiguredUploadModule\",\n\t\t});\n\t\treturn ConfiguredUploadModule;\n\t}\n\n\t/**\n\t * Install the multipart middleware on the Hono app. Walk the\n\t * route table, collect every `@Upload` decorator, and emit a\n\t * middleware that knows which fields to parse.\n\t */\n\tstatic mount(app: any, svc: UploadService, routes: any[] = []): void {\n\t\tconst fieldSet = new Map<string, { maxFiles: number; required: boolean }>();\n\t\tfor (const r of routes) {\n\t\t\tconst metas = (Reflect.getMetadata(\"nexus:upload:options\", r.target.constructor, r.propertyKey) ?? []) as Array<{ name: string; options: any }>;\n\t\t\tfor (const m of metas) {\n\t\t\t\tconst existing = fieldSet.get(m.name);\n\t\t\t\tconst maxFiles = m.options?.maxFiles ?? 1;\n\t\t\t\tconst required = m.options?.required ?? true;\n\t\t\t\tif (!existing || maxFiles > existing.maxFiles) {\n\t\t\t\t\tfieldSet.set(m.name, { maxFiles, required: existing?.required ?? required });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Per-route middleware: we capture the fields for that route in\n\t\t// a closure. Hono supports per-route middleware via `app.use(path, mw)`.\n\t\tapp.use(\"/**\", async (c: any, next: () => Promise<any>) => {\n\t\t\tconst fields: Array<{ fieldName: string; maxFiles: number; required: boolean }> = [];\n\t\t\tfor (const [name, info] of fieldSet.entries()) {\n\t\t\t\tfields.push({ fieldName: name, ...info });\n\t\t\t}\n\t\t\tc.set(\"uploadFields\", fields);\n\t\t\treturn uploadMiddleware(svc)(c, next);\n\t\t});\n\t}\n}",
18
+ "/**\n * Hono middleware that parses multipart/form-data and stores the\n * requested fields on the Hono context. Routes that need\n * `@UploadedFile` opt in by:\n *\n * 1. Calling `uploadMiddleware(fieldSpecs)` to register the fields\n * they expect.\n * 2. Or, listing the field names in the `@Upload(...)` decorator\n * metadata, which the `UploadModule` reads to wire up the\n * middleware at boot.\n *\n * For convenience, `UploadModule.mountAll()` walks the route table\n * and installs the middleware on every controller method that has\n * an `@Upload(...)` decorator.\n */\nimport { UploadError } from \"./types.js\";\n\nexport interface FieldSpec {\n\tfieldName: string;\n\tmaxFiles: number;\n\trequired: boolean;\n}\n\n/**\n * Middleware factory. Returns a Hono middleware that:\n * 1. Skips non-multipart requests.\n * 2. Asks the UploadService to parse and store the given fields.\n * 3. On `UploadError`, returns a 400 response with the error code.\n */\nexport function uploadMiddleware(svc: {\n\tparseAndStore(c: any, fields: FieldSpec[]): Promise<void>;\n}) {\n\treturn async (c: any, next: () => Promise<any>) => {\n\t\tconst ct = (c.req?.raw?.headers?.get?.(\"content-type\") ?? \"\") as string;\n\t\tif (!ct.startsWith(\"multipart/form-data\")) return next();\n\t\t// The fields are read off the route at boot. By the time this\n\t\t// middleware runs, `c.var` should have the route spec.\n\t\tconst fields: FieldSpec[] = (c.get?.(\"uploadFields\") as FieldSpec[] | undefined) ?? [];\n\t\tif (fields.length === 0) return next();\n\t\ttry {\n\t\t\tawait svc.parseAndStore(c, fields);\n\t\t\treturn next();\n\t\t} catch (err) {\n\t\t\tif (err instanceof UploadError) {\n\t\t\t\treturn c.json(\n\t\t\t\t\t{ error: err.message, code: err.code, field: err.field },\n\t\t\t\t\terr.status as any,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t};\n}\n",
19
+ "/**\n * `@Upload('fieldName', opts?)` — declare that a controller method\n * expects one or more uploaded files in `multipart/form-data`.\n *\n * @Post('/avatars')\n * @Upload('avatar')\n * async upload(@UploadedFile('avatar') file: UploadedFile) { ... }\n *\n * @Post('/photos')\n * @Upload('photos', { maxFiles: 10 })\n * async multi(@UploadedFiles('photos') files: UploadedFile[]) { ... }\n */\nimport \"reflect-metadata\";\nimport { UPLOAD_META, type UploadOptions } from \"../types.js\";\n\n/** Default name when the decorator is applied without arguments. */\nconst DEFAULT_NAME = \"__upload__\";\n\nexport function Upload(name: string = DEFAULT_NAME, options: UploadOptions = {}): MethodDecorator {\n\treturn (target: object, propertyKey: string | symbol) => {\n\t\tconst existing: Array<{ name: string; options: UploadOptions }> =\n\t\t\tReflect.getMetadata(UPLOAD_META, target.constructor, propertyKey) ?? [];\n\t\texisting.push({ name, options });\n\t\tReflect.defineMetadata(UPLOAD_META, existing, target.constructor, propertyKey);\n\t};\n}\n",
20
+ "/**\n * `@UploadedFile('fieldName')` — inject a single uploaded file into\n * the controller method.\n *\n * The framework pulls the parsed file from the Hono context (which\n * the upload middleware populated). If the field is missing and the\n * `@Upload` decorator declared it required, the middleware has\n * already returned a 400 — by the time we run, the file is either\n * present or the request is non-multipart.\n */\nimport { createParamDecorator } from \"../../core/decorators/params.js\";\nimport { UPLOAD_STORAGE_KEY } from \"../types.js\";\n\nexport const UploadedFile = (fieldName?: string) =>\n\tcreateParamDecorator(0x80 as any /* USER */, fieldName); // placeholder token\n\n// ---------------------------------------------------------------------\n// The decorator above is a placeholder for the framework's param\n// decorator factory. The actual pull-from-context logic is wired by\n// the framework's param resolver at boot. We re-export a helper\n// that, given a Hono context, returns the file.\n// ---------------------------------------------------------------------\n\n/**\n * Resolve a `@UploadedFile(name)` call against a Hono context. The\n * framework invokes this from its param pipeline. Application\n * code typically does not call this directly — use the decorator.\n */\nexport function getUploadedFile(c: any, fieldName: string) {\n\tconst stored = c.get?.(UPLOAD_STORAGE_KEY) ?? c.var?.[UPLOAD_STORAGE_KEY];\n\tif (!stored) return undefined;\n\tconst v = stored[fieldName];\n\tif (Array.isArray(v)) return v[0];\n\treturn v;\n}\n\n/** Resolve a `@UploadedFiles(name)` call. */\nexport function getUploadedFiles(c: any, fieldName: string) {\n\tconst stored = c.get?.(UPLOAD_STORAGE_KEY) ?? c.var?.[UPLOAD_STORAGE_KEY];\n\tif (!stored) return [];\n\tconst v = stored[fieldName];\n\tif (Array.isArray(v)) return v;\n\tif (v) return [v];\n\treturn [];\n}"
21
+ ],
22
+ "mappings": "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",
23
+ "debugId": "3B694CB87049E44264756E2164756E21",
24
+ "names": []
25
+ }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * `nexusjs/upload` — file upload helper.
3
+ *
4
+ * @Module({
5
+ * imports: [
6
+ * UploadModule.forRoot({
7
+ * maxFileSize: 10 * 1024 * 1024, // 10MB per file
8
+ * maxFiles: 5,
9
+ * allowedMimeTypes: ['image/*', 'application/pdf'],
10
+ * storage: 'memory', // or 'drive' (uses nexus/drive)
11
+ * }),
12
+ * ],
13
+ * })
14
+ *
15
+ * @Post('/avatars')
16
+ * @Upload('avatar') // form field name
17
+ * async upload(@UploadedFile('avatar') file: UploadedFile) {
18
+ * return { size: file.size, type: file.contentType };
19
+ * }
20
+ *
21
+ * @Post('/photos')
22
+ * async multi(@UploadedFiles('photos') files: UploadedFile[]) {
23
+ * return files.length;
24
+ * }
25
+ */
26
+ import "reflect-metadata";
27
+ import { METADATA_KEY } from "../core/constants.js";
28
+ /**
29
+ * A file that has been parsed from `multipart/form-data`.
30
+ *
31
+ * The framework reads the entire body into memory (with a hard cap
32
+ * enforced by `maxFileSize`) and exposes it as a `Buffer`. For very
33
+ * large files (gigabytes), use a streaming approach instead — the
34
+ * middleware leaves `stream` populated when the file is too large
35
+ * to buffer.
36
+ */
37
+ export interface UploadedFile {
38
+ /** Form field name (e.g. "avatar", "photos"). */
39
+ fieldName: string;
40
+ /** Filename from the client (e.g. "my-photo.png"). */
41
+ filename: string;
42
+ /** MIME type from the client. */
43
+ contentType: string;
44
+ /** Encoding (typically '7bit'). */
45
+ encoding: string;
46
+ /** File content. */
47
+ buffer: Buffer;
48
+ /** Convenience: same as `buffer.length`. */
49
+ size: number;
50
+ }
51
+ /** Top-level config. */
52
+ export interface UploadConfig {
53
+ /** Max bytes per file. Default: 10 MB. */
54
+ maxFileSize?: number;
55
+ /** Max number of files per request. Default: 5. */
56
+ maxFiles?: number;
57
+ /**
58
+ * Allowed MIME types. Supports `*` wildcards:
59
+ * 'image/*' — any image type
60
+ * 'application/pdf'
61
+ * 'video/mp4'
62
+ * Default: '*' (any).
63
+ */
64
+ allowedMimeTypes?: string[];
65
+ /**
66
+ * Where parsed files are stored in memory. Default: 'memory'.
67
+ * The decorator reads from this storage on each access.
68
+ */
69
+ storage?: "memory";
70
+ /**
71
+ * When set, parsed files are also pushed to the configured
72
+ * `nexusjs/drive` storage under this prefix. The drive is
73
+ * resolved by the DI token string.
74
+ */
75
+ driveToken?: string;
76
+ drivePrefix?: string;
77
+ /** When using drive storage: keep the original filename. Default: false (UUID). */
78
+ preserveFilename?: boolean;
79
+ }
80
+ export interface UploadOptions {
81
+ /** Form field name. Default: property name. */
82
+ name?: string;
83
+ /** Per-field max size (overrides the global default). */
84
+ maxSize?: number;
85
+ /** Per-field MIME-type filter. */
86
+ mimeTypes?: string[];
87
+ /** Per-field max files (for multi-file). Default: 1. */
88
+ maxFiles?: number;
89
+ /** Whether the field is required. Default: true. */
90
+ required?: boolean;
91
+ }
92
+ export declare class UploadError extends Error {
93
+ readonly status = 400;
94
+ readonly code: string;
95
+ readonly field: string;
96
+ constructor(code: string, field: string, message: string);
97
+ }
98
+ /** Key under which the multipart middleware stores parsed files. */
99
+ export declare const UPLOAD_STORAGE_KEY = "nexus:upload:files";
100
+ /** Internal metadata key (decorator). */
101
+ export declare const UPLOAD_META = "nexus:upload:options";
102
+ export { METADATA_KEY };
103
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/upload/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMpD;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC5B,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;CACb;AAED,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC5B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;;OAGG;IACH,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD,MAAM,WAAW,aAAa;IAC7B,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD,qBAAa,WAAY,SAAQ,KAAK;IACrC,QAAQ,CAAC,MAAM,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBACX,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAMxD;AAMD,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD,yCAAyC;AACzC,eAAO,MAAM,WAAW,yBAAyB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface FieldSpec {
2
+ fieldName: string;
3
+ maxFiles: number;
4
+ required: boolean;
5
+ }
6
+ /**
7
+ * Middleware factory. Returns a Hono middleware that:
8
+ * 1. Skips non-multipart requests.
9
+ * 2. Asks the UploadService to parse and store the given fields.
10
+ * 3. On `UploadError`, returns a 400 response with the error code.
11
+ */
12
+ export declare function uploadMiddleware(svc: {
13
+ parseAndStore(c: any, fields: FieldSpec[]): Promise<void>;
14
+ }): (c: any, next: () => Promise<any>) => Promise<any>;
15
+ //# sourceMappingURL=upload.middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.middleware.d.ts","sourceRoot":"","sources":["../../src/upload/upload.middleware.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,SAAS;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IACrC,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D,IACc,GAAG,GAAG,EAAE,MAAM,MAAM,OAAO,CAAC,GAAG,CAAC,kBAoB9C"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * `UploadModule` — drop-in file upload handling.
3
+ *
4
+ * @Module({
5
+ * imports: [
6
+ * UploadModule.forRoot({
7
+ * maxFileSize: 10 * 1024 * 1024,
8
+ * allowedMimeTypes: ['image/*', 'application/pdf'],
9
+ * storage: 'memory',
10
+ * }),
11
+ * ],
12
+ * })
13
+ *
14
+ * After the framework router is built, call `UploadModule.mount(app, svc)`
15
+ * to install the multipart middleware. The middleware looks at
16
+ * the route's metadata (set by `@Upload('fieldName')`) to know
17
+ * which fields to parse.
18
+ */
19
+ import "reflect-metadata";
20
+ import { UploadService } from "./upload.service.js";
21
+ import type { UploadConfig } from "./types.js";
22
+ export declare class UploadModule {
23
+ static forRoot(config?: UploadConfig): {
24
+ new (): {};
25
+ };
26
+ /**
27
+ * Install the multipart middleware on the Hono app. Walk the
28
+ * route table, collect every `@Upload` decorator, and emit a
29
+ * middleware that knows which fields to parse.
30
+ */
31
+ static mount(app: any, svc: UploadService, routes?: any[]): void;
32
+ }
33
+ //# sourceMappingURL=upload.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.module.d.ts","sourceRoot":"","sources":["../../src/upload/upload.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,qBAOa,YAAY;IACxB,MAAM,CAAC,OAAO,CAAC,MAAM,GAAE,YAAiB;;;IAgBxC;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,IAAI;CAwBpE"}
@@ -0,0 +1,29 @@
1
+ import { type UploadConfig, type UploadedFile } from "./types.js";
2
+ export declare class UploadService {
3
+ #private;
4
+ /** DI token. */
5
+ static readonly TOKEN: unique symbol;
6
+ constructor(config?: UploadConfig);
7
+ /** Bind a function that resolves a DI token to a service. Set by the module on boot. */
8
+ bindDriveResolver(fn: (token: string) => any): void;
9
+ /** The config this service was constructed with. */
10
+ getConfig(): Required<UploadConfig>;
11
+ /**
12
+ * Parse the request body and store the requested fields on the
13
+ * Hono context. Called by `uploadMiddleware`.
14
+ */
15
+ parseAndStore(c: any, fields: Array<{
16
+ fieldName: string;
17
+ maxFiles: number;
18
+ required: boolean;
19
+ }>): Promise<void>;
20
+ /**
21
+ * Read a single file from the stored body. Used by `@UploadedFile`.
22
+ */
23
+ get(c: any, fieldName: string): UploadedFile | undefined;
24
+ /**
25
+ * Read multiple files from the stored body. Used by `@UploadedFiles`.
26
+ */
27
+ getAll(c: any, fieldName: string): UploadedFile[];
28
+ }
29
+ //# sourceMappingURL=upload.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.service.d.ts","sourceRoot":"","sources":["../../src/upload/upload.service.ts"],"names":[],"mappings":"AAqBA,OAAO,EAGN,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,MAAM,YAAY,CAAC;AAoBpB,qBACa,aAAa;;IACzB,gBAAgB;IAChB,MAAM,CAAC,QAAQ,CAAC,KAAK,gBAAqC;gBAKrB,MAAM,GAAE,YAAiB;IAY9D,wFAAwF;IACxF,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,GAAG,IAAI;IAInD,oDAAoD;IACpD,SAAS,IAAI,QAAQ,CAAC,YAAY,CAAC;IAInC;;;OAGG;IACG,aAAa,CAClB,CAAC,EAAE,GAAG,EACN,MAAM,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,GACvE,OAAO,CAAC,IAAI,CAAC;IAsDhB;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IASxD;;OAEG;IACH,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE;CA2GjD"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Edge-style template engine adapter (Adonis-style).
3
+ *
4
+ * Edge is the templating engine built for AdonisJS with a mustache-like
5
+ * syntax (`{{ }}`, `@if`, `@each`). It is bundled here as a placeholder
6
+ * for users who prefer that style.
7
+ *
8
+ * The adapter does not bundle Edge directly — it expects the user to
9
+ * provide an `Edge` instance via the constructor so the dependency
10
+ * stays optional.
11
+ */
12
+ import type { ViewAdapter, ViewContext, ViewOptions } from "./types.js";
13
+ export interface EdgeLike {
14
+ renderRaw?: (template: string, data: Record<string, any>) => Promise<string>;
15
+ renderString?: (template: string, data: Record<string, any>) => Promise<string>;
16
+ }
17
+ export declare class EdgeAdapter implements ViewAdapter {
18
+ private edge?;
19
+ readonly name = "edge";
20
+ constructor(edge?: EdgeLike | undefined);
21
+ render(template: string, data: Record<string, any>, context?: ViewContext, options?: ViewOptions): Promise<string>;
22
+ }
23
+ //# sourceMappingURL=edge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/view/edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,WAAW,QAAQ;IACxB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7E,YAAY,CAAC,EAAE,CACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACrB,OAAO,CAAC,MAAM,CAAC,CAAC;CACrB;AAED,qBAAa,WAAY,YAAW,WAAW;IAElC,OAAO,CAAC,IAAI,CAAC;IADzB,QAAQ,CAAC,IAAI,UAAU;gBACH,IAAI,CAAC,EAAE,QAAQ,YAAA;IAE7B,MAAM,CACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,OAAO,CAAC,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC;CAgBlB"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Eta template engine adapter.
3
+ *
4
+ * Eta is a lightweight, high-performance templating engine with
5
+ * EJS-like syntax (`<%= expr %>`, `<% code %>`). It works on every
6
+ * runtime (Bun, Node, Deno, Cloudflare Workers) because templates
7
+ * are compiled to JavaScript render functions — no eval, no
8
+ * filesystem access at render time.
9
+ *
10
+ * Install (optional peer dep): `bun add eta`
11
+ *
12
+ * import { EtaAdapter } from "nexusjs/view";
13
+ * const eta = new EtaAdapter();
14
+ * const html = await eta.render("<h1><%= it.title %></h1>", { title: "Hi" });
15
+ *
16
+ * Or just use a file with a `.eta` extension — `renderView` picks
17
+ * the Eta adapter automatically:
18
+ *
19
+ * setViewPaths("views");
20
+ * return { view: "about.eta", data: { title: "Hi" } };
21
+ */
22
+ import type { ViewAdapter, ViewContext, ViewOptions } from "./types.js";
23
+ export declare class EtaAdapter implements ViewAdapter {
24
+ readonly name = "eta";
25
+ private cache;
26
+ render(template: string, data: Record<string, any>, _context?: ViewContext, _options?: ViewOptions): Promise<string>;
27
+ compile(template: string, _options?: ViewOptions): (data: Record<string, any>) => Promise<string>;
28
+ private getCompiled;
29
+ }
30
+ //# sourceMappingURL=eta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eta.d.ts","sourceRoot":"","sources":["../../src/view/eta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExE,qBAAa,UAAW,YAAW,WAAW;IAC7C,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,CAAC,KAAK,CAA4D;IAEnE,MAAM,CACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,CAAC,EAAE,WAAW,EACtB,QAAQ,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC;IAKlB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,IAEvC,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAGlC,OAAO,CAAC,WAAW;CAsBnB"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * `nexusjs/view` — view engine adapter + file-based view loader.
3
+ *
4
+ * Public API:
5
+ * - `renderView(template, data, context?)` — render a view.
6
+ * If `template` ends in a known file extension (`.html`, `.edge`,
7
+ * `.rendu`, `.eta`) AND `setViewPaths()` has been called, the
8
+ * file is loaded from the first matching directory and used
9
+ * as the template source. Otherwise the string is treated as
10
+ * inline source.
11
+ * The adapter is selected by file extension (or Rendu for
12
+ * inline / non-extension values).
13
+ * - `setViewPaths(path)` — configure the directory searched for
14
+ * view files. Pass `""` to disable.
15
+ * - `getViewPaths()` — return the current path (empty = disabled).
16
+ * - `loadTemplate(dir, name)` — low-level: load a file from
17
+ * the given directory.
18
+ * - `Application.setViewPaths(path)` — same as the module
19
+ * function, but chainable.
20
+ *
21
+ * Adapters:
22
+ * - RenduAdapter (default for `.html`/`.rendu`/inline)
23
+ * - EdgeAdapter (for `.edge`)
24
+ * - EtaAdapter (for `.eta`)
25
+ *
26
+ * Override with `app.setViewAdapter(new MyAdapter())` to install
27
+ * a different engine globally.
28
+ */
29
+ export type { ViewAdapter, ViewContext, ViewOptions, } from "./types.js";
30
+ export { RenduAdapter } from "./rendu.js";
31
+ export { EdgeAdapter } from "./edge.js";
32
+ export { EtaAdapter } from "./eta.js";
33
+ export { renderView, loadTemplate, setViewPaths, getViewPaths, } from "./view-engine.js";
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/view/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,YAAY,EACX,WAAW,EACX,WAAW,EACX,WAAW,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EACN,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,GACZ,MAAM,kBAAkB,CAAC"}