@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,17 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/constants.ts", "../src/core/decorators/params.ts", "../src/i18n/service.ts", "../src/core/decorators/module.ts", "../src/core/decorators/injectable.ts", "../src/i18n/module.ts", "../src/i18n/middleware.ts", "../src/i18n/decorators.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 * 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",
7
+ "/**\n * `I18nService` — locale-aware translation + formatting.\n *\n * Usage:\n *\n * const i18n = new I18nService({\n * defaultLocale: \"en\",\n * messages: {\n * en: { hello: \"Hello, :name!\" },\n * ko: { hello: \"안녕하세요, :name님!\" },\n * },\n * });\n *\n * i18n.t(\"hello\", { name: \"Alice\" }); // → \"Hello, Alice!\"\n * i18n.t(\"hello\", { name: \"Alice\" }, \"ko\"); // → \"안녕하세요, Alice님!\"\n *\n * The service is registered as a DI singleton by\n * `I18nModule.forRoot(config)`. The Hono middleware (built-in)\n * extracts the locale from the request and stores it in the\n * request context. Controllers can read it via the\n * `@CurrentLocale()` decorator.\n *\n * Message format:\n *\n * \"auth.welcome\": \"Welcome, :name!\" # interpolation\n * \"items.count\": \"no items|:count items\" # pluralization (| separator)\n * \"deep.key\": \"value\" # nested lookup\n *\n * The plural-form separator uses `Intl.PluralRules` to pick the\n * right form. The number of `|` segments is configurable per\n * locale via the `pluralCategories()` helper.\n *\n * Locale fallback chain:\n * - Exact match (`fr-CA`)\n * - Region fallback (`fr`)\n * - Default locale\n */\n\nimport type {\n\tLocale,\n\tMessageCatalog,\n\tMessageDict,\n\tTranslateArgs,\n\tPluralCategory,\n\tCurrencyFormatOptions,\n\tDateFormatOptions,\n\tNumberFormatOptions,\n} from \"./types.js\";\n\nconst DEFAULT_PLURAL_CATEGORIES: PluralCategory[] = [\n\t\"zero\",\n\t\"one\",\n\t\"two\",\n\t\"few\",\n\t\"many\",\n\t\"other\",\n];\n\nexport const I18N_SERVICE_TOKEN = Symbol.for(\"nexus:I18nService\");\n\nexport class I18nService {\n\tprivate messages: MessageCatalog = {};\n\tprivate defaultLocale: Locale;\n\tprivate fallback: boolean;\n\tprivate fallbackToDefault: boolean;\n\tprivate supportedLocales: Set<Locale> | null = null;\n\t/** Cached `Intl.PluralRules` per locale. */\n\tprivate pluralRulesCache = new Map<Locale, Intl.PluralRules>();\n\t/** Cached `Intl.DateTimeFormat` per (locale, options) key. */\n\tprivate dateFormatCache = new Map<string, Intl.DateTimeFormat>();\n\t/** Cached `Intl.NumberFormat` per (locale, options) key. */\n\tprivate numberFormatCache = new Map<string, Intl.NumberFormat>();\n\t/** Cached `Intl.Collator` per locale. */\n\tprivate collatorCache = new Map<Locale, Intl.Collator>();\n\n\tconstructor(config: {\n\t\tdefaultLocale?: Locale;\n\t\tfallback?: boolean;\n\t\tfallbackToDefault?: boolean;\n\t\tsupportedLocales?: Locale[];\n\t\tmessages?: MessageCatalog;\n\t} = {}) {\n\t\tthis.defaultLocale = config.defaultLocale ?? \"en\";\n\t\tthis.fallback = config.fallback ?? true;\n\t\tthis.fallbackToDefault = config.fallbackToDefault ?? true;\n\t\tif (config.supportedLocales && config.supportedLocales.length > 0) {\n\t\t\tthis.supportedLocales = new Set(config.supportedLocales);\n\t\t}\n\t\tif (config.messages) {\n\t\t\tfor (const [locale, dict] of Object.entries(config.messages)) {\n\t\t\t\tthis.addMessages(locale, dict);\n\t\t\t}\n\t\t}\n\t}\n\n\t/* ---------------- messages ---------------- */\n\n\t/**\n\t * Add (or merge) messages for a locale. Nested dicts are merged\n\t * recursively — so you can call `addMessages` multiple times\n\t * for the same locale.\n\t */\n\taddMessages(locale: Locale, dict: MessageDict): void {\n\t\tconst existing = this.messages[locale] ?? {};\n\t\tthis.messages[locale] = mergeDict(existing, dict);\n\t}\n\n\t/** Replace the entire message catalog. */\n\tsetMessages(catalog: MessageCatalog): void {\n\t\tthis.messages = {};\n\t\tfor (const [locale, dict] of Object.entries(catalog)) {\n\t\t\tthis.addMessages(locale, dict);\n\t\t}\n\t}\n\n\t/** True if a message key exists in the given locale. */\n\thasMessage(key: string, locale: Locale = this.defaultLocale): boolean {\n\t\treturn resolveKey(this.messages[locale], key) !== undefined;\n\t}\n\n\t/** Get a raw message string (with no interpolation or pluralization). */\n\tgetRaw(key: string, locale: Locale = this.defaultLocale): string | undefined {\n\t\tconst value = resolveKey(this.messages[locale], key);\n\t\treturn typeof value === \"string\" ? value : undefined;\n\t}\n\n\t/* ---------------- translation ---------------- */\n\n\t/**\n\t * Translate a key.\n\t *\n\t * - `args` interpolates `:name`-style placeholders.\n\t * - If the value contains `|` segments, the appropriate plural\n\t * form is selected based on `args.count` (or the first\n\t * numeric arg).\n\t * - `locale` defaults to the configured default locale. Pass\n\t * an explicit locale to override.\n\t *\n\t * If the key is missing in `locale`, the service falls back to\n\t * the default locale (if `fallbackToDefault` is true) and then\n\t * to the key itself (so the developer sees what's missing).\n\t */\n\tt(\n\t\tkey: string,\n\t\targs?: TranslateArgs,\n\t\tlocale: Locale = this.defaultLocale,\n\t): string {\n\t\tconst raw = this.lookupRaw(key, locale);\n\t\tif (raw === undefined) {\n\t\t\t// Key not found. Return the key itself, optionally\n\t\t\t// bracketed, so the developer can spot it.\n\t\t\treturn key;\n\t\t}\n\t\treturn this.format(raw, args, locale);\n\t}\n\n\t/**\n\t * Translate a key; if not found, return the fallback string\n\t * (no `[]` brackets). Useful for optional UI text.\n\t */\n\ttOr(\n\t\tkey: string,\n\t\tfallback: string,\n\t\targs?: TranslateArgs,\n\t\tlocale: Locale = this.defaultLocale,\n\t): string {\n\t\tconst raw = this.lookupRaw(key, locale);\n\t\tif (raw === undefined) return this.format(fallback, args, locale);\n\t\treturn this.format(raw, args, locale);\n\t}\n\n\t/**\n\t * Translate a key with explicit plural control. The `count`\n\t * argument is used to select the plural form.\n\t */\n\ttChoice(\n\t\tkey: string,\n\t\tcount: number,\n\t\targs: TranslateArgs = {},\n\t\tlocale: Locale = this.defaultLocale,\n\t): string {\n\t\treturn this.t(key, { ...args, count }, locale);\n\t}\n\n\t/**\n\t * Format a raw message template with args (interpolation +\n\t * plural selection). Exposed for users who want to format\n\t * messages outside the catalog.\n\t */\n\tformat(template: string, args: TranslateArgs = {}, locale: Locale = this.defaultLocale): string {\n\t\t// 1. Select plural form (if any)\n\t\tconst selected = this.selectPluralForm(template, args, locale);\n\t\t// 2. Interpolate :name placeholders\n\t\treturn this.interpolate(selected, args);\n\t}\n\n\t/* ---------------- pluralization ---------------- */\n\n\t/**\n\t * Return the plural category for `count` in the given locale.\n\t * Wraps `Intl.PluralRules`.\n\t */\n\tpluralCategory(count: number, locale: Locale = this.defaultLocale): PluralCategory {\n\t\tconst rules = this.getPluralRules(locale);\n\t\treturn rules.select(count) as PluralCategory;\n\t}\n\n\t/* ---------------- formatters ---------------- */\n\n\tformatDate(\n\t\tdate: Date | number | string,\n\t\toptions: DateFormatOptions = {},\n\t\tlocale?: Locale,\n\t): string {\n\t\tconst useLocale = options.locale ?? locale ?? this.defaultLocale;\n\t\tconst key = `${useLocale}|${stableStringify(options)}`;\n\t\tlet fmt = this.dateFormatCache.get(key);\n\t\tif (!fmt) {\n\t\t\tfmt = new Intl.DateTimeFormat(useLocale, options);\n\t\t\tthis.dateFormatCache.set(key, fmt);\n\t\t}\n\t\treturn fmt.format(typeof date === \"string\" ? new Date(date) : new Date(date));\n\t}\n\n\tformatNumber(\n\t\tvalue: number,\n\t\toptions: NumberFormatOptions = {},\n\t\tlocale?: Locale,\n\t): string {\n\t\tconst useLocale = options.locale ?? locale ?? this.defaultLocale;\n\t\tconst key = `${useLocale}|${stableStringify(options)}`;\n\t\tlet fmt = this.numberFormatCache.get(key);\n\t\tif (!fmt) {\n\t\t\tfmt = new Intl.NumberFormat(useLocale, options);\n\t\t\tthis.numberFormatCache.set(key, fmt);\n\t\t}\n\t\treturn fmt.format(value);\n\t}\n\n\tformatCurrency(\n\t\tamount: number,\n\t\toptions: CurrencyFormatOptions,\n\t\tlocale?: Locale,\n\t): string {\n\t\tconst useLocale = options.locale ?? locale ?? this.defaultLocale;\n\t\tconst { locale: _omit, ...opts } = options;\n\t\tconst key = `${useLocale}|${stableStringify(opts)}`;\n\t\tlet fmt = this.numberFormatCache.get(key);\n\t\tif (!fmt) {\n\t\t\tfmt = new Intl.NumberFormat(useLocale, { style: \"currency\", ...opts });\n\t\t\tthis.numberFormatCache.set(key, fmt);\n\t\t}\n\t\treturn fmt.format(amount);\n\t}\n\n\t/**\n\t * Compare two strings using locale-aware ordering.\n\t * Returns negative if a < b, positive if a > b, 0 if equal.\n\t */\n\tcompare(a: string, b: string, locale: Locale = this.defaultLocale): number {\n\t\tlet c = this.collatorCache.get(locale);\n\t\tif (!c) {\n\t\t\tc = new Intl.Collator(locale);\n\t\t\tthis.collatorCache.set(locale, c);\n\t\t}\n\t\treturn c.compare(a, b);\n\t}\n\n\t/* ---------------- locales ---------------- */\n\n\tgetDefaultLocale(): Locale {\n\t\treturn this.defaultLocale;\n\t}\n\n\t/** Locales currently registered (in the catalog). */\n\tgetLocales(): Locale[] {\n\t\treturn Object.keys(this.messages);\n\t}\n\n\t/** True if the locale is in the supported set (or all are allowed). */\n\tisSupported(locale: Locale): boolean {\n\t\tif (!this.supportedLocales) return true;\n\t\treturn this.supportedLocales.has(locale);\n\t}\n\n\t/** Negotiate a locale from a list of candidates. */\n\tnegotiateLocale(\n\t\tpreferred: Locale[] = [],\n\t\tacceptLanguage?: string,\n\t): Locale {\n\t\t// Combine preferred (in order) with Accept-Language (sorted by\n\t\t// quality). Preferred wins because the caller may have already\n\t\t// applied query/cookie priorities.\n\t\tconst candidates: Locale[] = [...preferred];\n\t\tif (acceptLanguage) {\n\t\t\tfor (const tag of parseAcceptLanguage(acceptLanguage)) {\n\t\t\t\tif (!candidates.includes(tag)) candidates.push(tag);\n\t\t\t}\n\t\t}\n\t\tfor (const cand of candidates) {\n\t\t\tif (this.isSupported(cand) && this.messages[cand]) return cand;\n\t\t\tif (this.fallback) {\n\t\t\t\tconst lang = cand.split(\"-\")[0];\n\t\t\t\tif (lang && lang !== cand && this.isSupported(lang) && this.messages[lang]) {\n\t\t\t\t\treturn lang;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this.defaultLocale;\n\t}\n\n\t/* ---------------- internals ---------------- */\n\n\tprivate lookupRaw(key: string, locale: Locale): string | undefined {\n\t\t// 1. Exact match\n\t\tconst v = resolveKey(this.messages[locale], key);\n\t\tif (typeof v === \"string\") return v;\n\n\t\t// 2. Region fallback\n\t\tif (this.fallback) {\n\t\t\tconst lang = locale.split(\"-\")[0];\n\t\t\tif (lang && lang !== locale) {\n\t\t\t\tconst v2 = resolveKey(this.messages[lang], key);\n\t\t\t\tif (typeof v2 === \"string\") return v2;\n\t\t\t}\n\t\t}\n\n\t\t// 3. Default-locale fallback\n\t\tif (this.fallbackToDefault && locale !== this.defaultLocale) {\n\t\t\tconst v3 = resolveKey(this.messages[this.defaultLocale], key);\n\t\t\tif (typeof v3 === \"string\") return v3;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate selectPluralForm(\n\t\ttemplate: string,\n\t\targs: TranslateArgs,\n\t\tlocale: Locale,\n\t): string {\n\t\tif (!template.includes(\"|\")) return template;\n\t\tconst segments = template.split(\"|\");\n\t\tif (segments.length === 1) return template;\n\n\t\t// Find a count in args\n\t\tconst count = pickCount(args);\n\t\tif (count === undefined) {\n\t\t\t// No count → use the \"other\" form (last segment).\n\t\t\treturn segments[segments.length - 1]!;\n\t\t}\n\n\t\tconst category = this.pluralCategory(count, locale);\n\t\tconst idx = this.pluralIndex(category, segments.length);\n\t\treturn segments[idx]!;\n\t}\n\n\tprivate pluralIndex(category: PluralCategory, segmentCount: number): number {\n\t\t// Map plural category to a segment index. The number of\n\t\t// segments the user provides maps to CLDR categories as\n\t\t// follows (the AdonisJS / i18next convention):\n\t\t// 1 segment → other\n\t\t// 2 segments → one | other\n\t\t// 3 segments → zero | one | other\n\t\t// 4 segments → zero | one | two | other\n\t\t// 5 segments → zero | one | two | few | other\n\t\t// 6 segments → zero | one | two | few | many | other\n\t\t// Categories not in the table (e.g. \"few\" with 3 segments)\n\t\t// fall back to the last segment (\"other\").\n\t\tif (segmentCount <= 1) return segmentCount - 1;\n\t\t// Build a mapping table.\n\t\tconst table: Record<number, PluralCategory[]> = {\n\t\t\t2: [\"one\", \"other\"],\n\t\t\t3: [\"zero\", \"one\", \"other\"],\n\t\t\t4: [\"zero\", \"one\", \"two\", \"other\"],\n\t\t\t5: [\"zero\", \"one\", \"two\", \"few\", \"other\"],\n\t\t\t6: [\"zero\", \"one\", \"two\", \"few\", \"many\", \"other\"],\n\t\t};\n\t\tconst cats = table[segmentCount] ?? [\"other\"];\n\t\tconst i = cats.indexOf(category);\n\t\tif (i < 0) return segmentCount - 1;\n\t\treturn i;\n\t}\n\n\tprivate getPluralRules(locale: Locale): Intl.PluralRules {\n\t\tlet r = this.pluralRulesCache.get(locale);\n\t\tif (!r) {\n\t\t\ttry {\n\t\t\t\tr = new Intl.PluralRules(locale);\n\t\t\t} catch {\n\t\t\t\tr = new Intl.PluralRules(this.defaultLocale);\n\t\t\t}\n\t\t\tthis.pluralRulesCache.set(locale, r);\n\t\t}\n\t\treturn r;\n\t}\n\n\tprivate interpolate(template: string, args: TranslateArgs): string {\n\t\tif (Object.keys(args).length === 0) return template;\n\t\treturn template.replace(/:([A-Za-z_][A-Za-z0-9_]*)/g, (match, name: string) => {\n\t\t\tif (name in args) {\n\t\t\t\treturn String(args[name]);\n\t\t\t}\n\t\t\treturn match;\n\t\t});\n\t}\n}\n\n/* ------------------------------------------------------------------ *\n * Helpers\n * ------------------------------------------------------------------ */\n\nfunction resolveKey(\n\tdict: MessageDict | undefined,\n\tkey: string,\n): string | MessageDict | undefined {\n\tif (!dict) return undefined;\n\tconst parts = key.split(\".\");\n\tlet cur: string | MessageDict | undefined = dict;\n\tfor (const p of parts) {\n\t\tif (cur && typeof cur === \"object\" && p in (cur as MessageDict)) {\n\t\t\tcur = (cur as MessageDict)[p];\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn cur;\n}\n\nfunction mergeDict(target: MessageDict, source: MessageDict): MessageDict {\n\tconst out: MessageDict = { ...target };\n\tfor (const [k, v] of Object.entries(source)) {\n\t\tconst existing = out[k];\n\t\tif (\n\t\t\texisting &&\n\t\t\ttypeof existing === \"object\" &&\n\t\t\t!Array.isArray(existing) &&\n\t\t\tv &&\n\t\t\ttypeof v === \"object\" &&\n\t\t\t!Array.isArray(v)\n\t\t) {\n\t\t\tout[k] = mergeDict(existing as MessageDict, v as MessageDict);\n\t\t} else {\n\t\t\tout[k] = v;\n\t\t}\n\t}\n\treturn out;\n}\n\nfunction pickCount(args: TranslateArgs): number | undefined {\n\tif (\"count\" in args && typeof args.count === \"number\") return args.count;\n\tfor (const v of Object.values(args)) {\n\t\tif (typeof v === \"number\") return v;\n\t}\n\treturn undefined;\n}\n\nfunction parseAcceptLanguage(header: string): Locale[] {\n\treturn header\n\t\t.split(\",\")\n\t\t.map((part) => {\n\t\t\tconst [tag, qPart] = part.trim().split(\";\");\n\t\t\tconst q = qPart?.startsWith(\"q=\") ? Number(qPart.slice(2)) : 1;\n\t\t\treturn { tag: tag?.trim() ?? \"\", q: isFinite(q) ? q : 1 };\n\t\t})\n\t\t.filter((e) => e.tag.length > 0)\n\t\t.sort((a, b) => b.q - a.q)\n\t\t.map((e) => e.tag);\n}\n\nfunction stableStringify(obj: object): string {\n\treturn JSON.stringify(obj, (_k, v) => {\n\t\tif (v && typeof v === \"object\" && !Array.isArray(v)) {\n\t\t\tconst sorted: Record<string, unknown> = {};\n\t\t\tfor (const key of Object.keys(v).sort()) {\n\t\t\t\tsorted[key] = (v as Record<string, unknown>)[key];\n\t\t\t}\n\t\t\treturn sorted;\n\t\t}\n\t\treturn v;\n\t});\n}\n",
8
+ "/**\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",
9
+ "/**\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}",
10
+ "/**\n * `I18nModule` — wires `I18nService` into the DI container.\n *\n * Usage:\n *\n * @Module({\n * imports: [\n * I18nModule.forRoot({\n * defaultLocale: \"en\",\n * messages: {\n * en: { hello: \"Hello, :name!\" },\n * ko: { hello: \"안녕하세요, :name님!\" },\n * },\n * }),\n * ],\n * })\n * class AppModule {}\n *\n * The middleware is also exported (`i18nMiddleware()`) and\n * installed by the module's static `install()` helper:\n *\n * const app = new Application(AppModule);\n * I18nModule.install(app, container); // or via @Module middleware config\n */\n\nimport { Module } from \"../core/decorators/module.js\";\nimport { Inject } from \"../core/decorators/injectable.js\";\nimport \"reflect-metadata\";\nimport type { Application } from \"../core/application.js\";\nimport {\n\tI18nService,\n\tI18N_SERVICE_TOKEN,\n} from \"./service.js\";\nimport { i18nMiddleware } from \"./middleware.js\";\nimport type { I18nConfig, Locale, MessageCatalog } from \"./types.js\";\n\n@Module({\n\tproviders: [\n\t\tI18nService,\n\t\t{ provide: I18N_SERVICE_TOKEN, useExisting: I18nService },\n\t],\n\texports: [I18nService, I18N_SERVICE_TOKEN],\n})\nexport class I18nModule {\n\tstatic forRoot(config: I18nConfig = {}) {\n\t\tconst fullConfig: Required<I18nConfig> = {\n\t\t\tdefaultLocale: config.defaultLocale ?? \"en\",\n\t\t\tfallback: config.fallback ?? true,\n\t\t\tfallbackToDefault: config.fallbackToDefault ?? true,\n\t\t\tsupportedLocales: config.supportedLocales ?? [],\n\t\t\tmessages: config.messages ?? {},\n\t\t\tmessagesDir: config.messagesDir ?? \"\",\n\t\t\tdetectQueryKey: config.detectQueryKey ?? \"lang\",\n\t\t\tdetectCookieKey: config.detectCookieKey ?? \"lang\",\n\t\t};\n\n\t\t@Module({\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: I18nService,\n\t\t\t\t\tuseFactory: () => {\n\t\t\t\t\t\tconst svc = new I18nService({\n\t\t\t\t\t\t\tdefaultLocale: fullConfig.defaultLocale,\n\t\t\t\t\t\t\tfallback: fullConfig.fallback,\n\t\t\t\t\t\t\tfallbackToDefault: fullConfig.fallbackToDefault,\n\t\t\t\t\t\t\tsupportedLocales: fullConfig.supportedLocales,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (fullConfig.messages) {\n\t\t\t\t\t\t\tsvc.setMessages(fullConfig.messages as MessageCatalog);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (fullConfig.messagesDir) {\n\t\t\t\t\t\t\tloadFromDir(svc, fullConfig.messagesDir);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn svc;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ provide: I18N_SERVICE_TOKEN, useExisting: I18nService },\n\t\t\t\t{ provide: \"I18N_CONFIG\", useValue: fullConfig },\n\t\t\t],\n\t\t\texports: [I18nService, I18N_SERVICE_TOKEN, \"I18N_CONFIG\"],\n\t\t})\n\t\tclass ConfiguredI18nModule {\n\t\t\tconstructor(@Inject(I18N_SERVICE_TOKEN) readonly service: I18nService) {}\n\n\t\t\t/** Returns a Hono middleware bound to the configured service. */\n\t\t\tmiddleware() {\n\t\t\t\treturn i18nMiddleware(this.service, {\n\t\t\t\t\tqueryKey: fullConfig.detectQueryKey,\n\t\t\t\t\tcookieKey: fullConfig.detectCookieKey,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tObject.defineProperty(ConfiguredI18nModule, \"name\", {\n\t\t\tvalue: \"ConfiguredI18nModule\",\n\t\t});\n\n\t\t// Add static `install` helper.\n\t\t(ConfiguredI18nModule as unknown as { install: (app: Application) => void }).install = (\n\t\t\tapp: Application,\n\t\t) => {\n\t\t\t// Lazy: the module is constructed when the app boots.\n\t\t\t// The user typically accesses the middleware via\n\t\t\t// `app.i18nMiddleware()` instead.\n\t\t\tvoid app;\n\t\t};\n\n\t\treturn ConfiguredI18nModule as unknown as typeof ConfiguredI18nModule & {\n\t\t\treadonly config: typeof fullConfig;\n\t\t};\n\t}\n}\n\n/* ------------------------------------------------------------------ *\n * Loader: messages from disk\n * ------------------------------------------------------------------ */\n\nfunction loadFromDir(svc: I18nService, dir: string): void {\n\t// Lazy-import `node:fs` so this module is edge-safe.\n\tlet fs: typeof import(\"node:fs\");\n\tlet path: typeof import(\"node:path\");\n\ttry {\n\t\tfs = require(\"node:fs\");\n\t\tpath = require(\"node:path\");\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"I18nModule messagesDir requires a Node-like runtime. \" +\n\t\t\t\t\"On Cloudflare Workers, register messages programmatically \" +\n\t\t\t\t\"via I18nModule.forRoot({ messages: {...} }).\",\n\t\t);\n\t}\n\n\tconst stat = fs.statSync(dir);\n\tif (!stat.isDirectory()) {\n\t\tthrow new Error(`I18nModule messagesDir is not a directory: ${dir}`);\n\t}\n\tfor (const file of fs.readdirSync(dir)) {\n\t\tif (!file.endsWith(\".json\")) continue;\n\t\tconst locale = file.replace(/\\.json$/, \"\");\n\t\tconst content = fs.readFileSync(path.join(dir, file), \"utf8\");\n\t\ttry {\n\t\t\tconst dict = JSON.parse(content);\n\t\t\tsvc.addMessages(locale, dict);\n\t\t} catch (err) {\n\t\t\tthrow new Error(\n\t\t\t\t`I18nModule: failed to parse ${file}: ${(err as Error).message}`,\n\t\t\t);\n\t\t}\n\t}\n}\n",
11
+ "/**\n * Hono middleware that detects the active locale for a request\n * and stores it in the Hono context (`c.var.locale`).\n *\n * Detection priority:\n * 1. Query string: `?lang=ko`\n * 2. Cookie: `lang=ko`\n * 3. `Accept-Language` header\n * 4. Default locale\n *\n * The middleware uses `I18nService.negotiateLocale()` to pick\n * the best locale based on the request headers and the\n * service's registered catalog.\n */\n\nimport type { Context, MiddlewareHandler, Next } from \"hono\";\nimport type { I18nService } from \"./service.js\";\nimport type { DetectOptions, Locale } from \"./types.js\";\n\n/** Augment Hono's `c.var` with the active locale. */\ndeclare module \"hono\" {\n\tinterface ContextVariableMap {\n\t\tlocale?: Locale;\n\t\ti18n?: I18nService;\n\t}\n}\n\nexport function i18nMiddleware(\n\tservice: I18nService,\n\toptions: DetectOptions = {},\n): MiddlewareHandler {\n\tconst queryKey = options.queryKey ?? \"lang\";\n\tconst cookieKey = options.cookieKey ?? \"lang\";\n\tconst defaultLocale = options.defaultLocale ?? service.getDefaultLocale();\n\n\treturn async (c: Context, next: Next) => {\n\t\tconst fromQuery = c.req.query(queryKey);\n\t\tconst fromCookie = getCookie(c, cookieKey);\n\t\tconst acceptLanguage = c.req.header(\"accept-language\");\n\n\t\tconst preferred: Locale[] = [];\n\t\tif (fromQuery) preferred.push(fromQuery);\n\t\tif (fromCookie) preferred.push(fromCookie);\n\t\tif (acceptLanguage) {\n\t\t\tpreferred.push(...parseAcceptLanguage(acceptLanguage));\n\t\t}\n\t\tpreferred.push(defaultLocale);\n\n\t\tconst locale = service.negotiateLocale(preferred, acceptLanguage);\n\t\tc.set(\"locale\", locale);\n\t\tc.set(\"i18n\", service);\n\t\tawait next();\n\t};\n}\n\n/* ------------------------------------------------------------------ *\n * Helpers\n * ------------------------------------------------------------------ */\n\nfunction getCookie(c: Context, name: string): string | undefined {\n\t// Hono parses cookies lazily via `c.req.header(\"cookie\")`. We\n\t// parse a small subset here; for production apps with many\n\t// cookies, prefer `hono/cookie`.\n\tconst raw = c.req.header(\"cookie\");\n\tif (!raw) return undefined;\n\tfor (const part of raw.split(\";\")) {\n\t\tconst [k, ...rest] = part.trim().split(\"=\");\n\t\tif (k === name) return decodeURIComponent(rest.join(\"=\"));\n\t}\n\treturn undefined;\n}\n\nfunction parseAcceptLanguage(header: string): Locale[] {\n\treturn header\n\t\t.split(\",\")\n\t\t.map((part) => {\n\t\t\tconst [tag, qPart] = part.trim().split(\";\");\n\t\t\tconst q = qPart?.startsWith(\"q=\") ? Number(qPart.slice(2)) : 1;\n\t\t\treturn { tag: tag?.trim() ?? \"\", q: isFinite(q) ? q : 1 };\n\t\t})\n\t\t.filter((e) => e.tag.length > 0)\n\t\t.sort((a, b) => b.q - a.q)\n\t\t.map((e) => e.tag);\n}\n",
12
+ "/**\n * `@CurrentLocale()` — controller parameter decorator that\n * injects the active locale string (e.g. `\"en\"`, `\"ko\"`).\n *\n * Requires that `i18nMiddleware()` has been installed upstream.\n *\n * @Get('/')\n * index(@CurrentLocale() locale: string) {\n * return { locale };\n * }\n */\n\nimport \"reflect-metadata\";\nimport { createParamDecorator } from \"../core/decorators/params.js\";\nimport { PARAM_TYPES } from \"../core/constants.js\";\nimport type { Locale } from \"./types.js\";\n\nexport function CurrentLocale(): ParameterDecorator {\n\treturn createParamDecorator(PARAM_TYPES.USER, {} as never) as ParameterDecorator;\n}\n"
13
+ ],
14
+ "mappings": "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",
15
+ "debugId": "1C79ABD6524A60BB64756E2164756E21",
16
+ "names": []
17
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Hono middleware that detects the active locale for a request
3
+ * and stores it in the Hono context (`c.var.locale`).
4
+ *
5
+ * Detection priority:
6
+ * 1. Query string: `?lang=ko`
7
+ * 2. Cookie: `lang=ko`
8
+ * 3. `Accept-Language` header
9
+ * 4. Default locale
10
+ *
11
+ * The middleware uses `I18nService.negotiateLocale()` to pick
12
+ * the best locale based on the request headers and the
13
+ * service's registered catalog.
14
+ */
15
+ import type { MiddlewareHandler } from "hono";
16
+ import type { I18nService } from "./service.js";
17
+ import type { DetectOptions, Locale } from "./types.js";
18
+ /** Augment Hono's `c.var` with the active locale. */
19
+ declare module "hono" {
20
+ interface ContextVariableMap {
21
+ locale?: Locale;
22
+ i18n?: I18nService;
23
+ }
24
+ }
25
+ export declare function i18nMiddleware(service: I18nService, options?: DetectOptions): MiddlewareHandler;
26
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/i18n/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAW,iBAAiB,EAAQ,MAAM,MAAM,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAExD,qDAAqD;AACrD,OAAO,QAAQ,MAAM,CAAC;IACrB,UAAU,kBAAkB;QAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,WAAW,CAAC;KACnB;CACD;AAED,wBAAgB,cAAc,CAC7B,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,aAAkB,GACzB,iBAAiB,CAuBnB"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * `I18nModule` — wires `I18nService` into the DI container.
3
+ *
4
+ * Usage:
5
+ *
6
+ * @Module({
7
+ * imports: [
8
+ * I18nModule.forRoot({
9
+ * defaultLocale: "en",
10
+ * messages: {
11
+ * en: { hello: "Hello, :name!" },
12
+ * ko: { hello: "안녕하세요, :name님!" },
13
+ * },
14
+ * }),
15
+ * ],
16
+ * })
17
+ * class AppModule {}
18
+ *
19
+ * The middleware is also exported (`i18nMiddleware()`) and
20
+ * installed by the module's static `install()` helper:
21
+ *
22
+ * const app = new Application(AppModule);
23
+ * I18nModule.install(app, container); // or via @Module middleware config
24
+ */
25
+ import "reflect-metadata";
26
+ import { I18nService } from "./service.js";
27
+ import type { I18nConfig } from "./types.js";
28
+ export declare class I18nModule {
29
+ static forRoot(config?: I18nConfig): {
30
+ new (service: I18nService): {
31
+ readonly service: I18nService;
32
+ /** Returns a Hono middleware bound to the configured service. */
33
+ middleware(): import("hono").MiddlewareHandler;
34
+ };
35
+ } & {
36
+ readonly config: Required<I18nConfig>;
37
+ };
38
+ }
39
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/i18n/module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EACN,WAAW,EAEX,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,YAAY,CAAC;AAErE,qBAOa,UAAU;IACtB,MAAM,CAAC,OAAO,CAAC,MAAM,GAAE,UAAe,GA8DK;sBAxBiB,WAAW;8BAAX,WAAW;YAErE,iEAAiE;;;QAsBM;QACvE,QAAQ,CAAC,MAAM,uBAAoB;KACnC;CAEF"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * `I18nService` — locale-aware translation + formatting.
3
+ *
4
+ * Usage:
5
+ *
6
+ * const i18n = new I18nService({
7
+ * defaultLocale: "en",
8
+ * messages: {
9
+ * en: { hello: "Hello, :name!" },
10
+ * ko: { hello: "안녕하세요, :name님!" },
11
+ * },
12
+ * });
13
+ *
14
+ * i18n.t("hello", { name: "Alice" }); // → "Hello, Alice!"
15
+ * i18n.t("hello", { name: "Alice" }, "ko"); // → "안녕하세요, Alice님!"
16
+ *
17
+ * The service is registered as a DI singleton by
18
+ * `I18nModule.forRoot(config)`. The Hono middleware (built-in)
19
+ * extracts the locale from the request and stores it in the
20
+ * request context. Controllers can read it via the
21
+ * `@CurrentLocale()` decorator.
22
+ *
23
+ * Message format:
24
+ *
25
+ * "auth.welcome": "Welcome, :name!" # interpolation
26
+ * "items.count": "no items|:count items" # pluralization (| separator)
27
+ * "deep.key": "value" # nested lookup
28
+ *
29
+ * The plural-form separator uses `Intl.PluralRules` to pick the
30
+ * right form. The number of `|` segments is configurable per
31
+ * locale via the `pluralCategories()` helper.
32
+ *
33
+ * Locale fallback chain:
34
+ * - Exact match (`fr-CA`)
35
+ * - Region fallback (`fr`)
36
+ * - Default locale
37
+ */
38
+ import type { Locale, MessageCatalog, MessageDict, TranslateArgs, PluralCategory, CurrencyFormatOptions, DateFormatOptions, NumberFormatOptions } from "./types.js";
39
+ export declare const I18N_SERVICE_TOKEN: unique symbol;
40
+ export declare class I18nService {
41
+ private messages;
42
+ private defaultLocale;
43
+ private fallback;
44
+ private fallbackToDefault;
45
+ private supportedLocales;
46
+ /** Cached `Intl.PluralRules` per locale. */
47
+ private pluralRulesCache;
48
+ /** Cached `Intl.DateTimeFormat` per (locale, options) key. */
49
+ private dateFormatCache;
50
+ /** Cached `Intl.NumberFormat` per (locale, options) key. */
51
+ private numberFormatCache;
52
+ /** Cached `Intl.Collator` per locale. */
53
+ private collatorCache;
54
+ constructor(config?: {
55
+ defaultLocale?: Locale;
56
+ fallback?: boolean;
57
+ fallbackToDefault?: boolean;
58
+ supportedLocales?: Locale[];
59
+ messages?: MessageCatalog;
60
+ });
61
+ /**
62
+ * Add (or merge) messages for a locale. Nested dicts are merged
63
+ * recursively — so you can call `addMessages` multiple times
64
+ * for the same locale.
65
+ */
66
+ addMessages(locale: Locale, dict: MessageDict): void;
67
+ /** Replace the entire message catalog. */
68
+ setMessages(catalog: MessageCatalog): void;
69
+ /** True if a message key exists in the given locale. */
70
+ hasMessage(key: string, locale?: Locale): boolean;
71
+ /** Get a raw message string (with no interpolation or pluralization). */
72
+ getRaw(key: string, locale?: Locale): string | undefined;
73
+ /**
74
+ * Translate a key.
75
+ *
76
+ * - `args` interpolates `:name`-style placeholders.
77
+ * - If the value contains `|` segments, the appropriate plural
78
+ * form is selected based on `args.count` (or the first
79
+ * numeric arg).
80
+ * - `locale` defaults to the configured default locale. Pass
81
+ * an explicit locale to override.
82
+ *
83
+ * If the key is missing in `locale`, the service falls back to
84
+ * the default locale (if `fallbackToDefault` is true) and then
85
+ * to the key itself (so the developer sees what's missing).
86
+ */
87
+ t(key: string, args?: TranslateArgs, locale?: Locale): string;
88
+ /**
89
+ * Translate a key; if not found, return the fallback string
90
+ * (no `[]` brackets). Useful for optional UI text.
91
+ */
92
+ tOr(key: string, fallback: string, args?: TranslateArgs, locale?: Locale): string;
93
+ /**
94
+ * Translate a key with explicit plural control. The `count`
95
+ * argument is used to select the plural form.
96
+ */
97
+ tChoice(key: string, count: number, args?: TranslateArgs, locale?: Locale): string;
98
+ /**
99
+ * Format a raw message template with args (interpolation +
100
+ * plural selection). Exposed for users who want to format
101
+ * messages outside the catalog.
102
+ */
103
+ format(template: string, args?: TranslateArgs, locale?: Locale): string;
104
+ /**
105
+ * Return the plural category for `count` in the given locale.
106
+ * Wraps `Intl.PluralRules`.
107
+ */
108
+ pluralCategory(count: number, locale?: Locale): PluralCategory;
109
+ formatDate(date: Date | number | string, options?: DateFormatOptions, locale?: Locale): string;
110
+ formatNumber(value: number, options?: NumberFormatOptions, locale?: Locale): string;
111
+ formatCurrency(amount: number, options: CurrencyFormatOptions, locale?: Locale): string;
112
+ /**
113
+ * Compare two strings using locale-aware ordering.
114
+ * Returns negative if a < b, positive if a > b, 0 if equal.
115
+ */
116
+ compare(a: string, b: string, locale?: Locale): number;
117
+ getDefaultLocale(): Locale;
118
+ /** Locales currently registered (in the catalog). */
119
+ getLocales(): Locale[];
120
+ /** True if the locale is in the supported set (or all are allowed). */
121
+ isSupported(locale: Locale): boolean;
122
+ /** Negotiate a locale from a list of candidates. */
123
+ negotiateLocale(preferred?: Locale[], acceptLanguage?: string): Locale;
124
+ private lookupRaw;
125
+ private selectPluralForm;
126
+ private pluralIndex;
127
+ private getPluralRules;
128
+ private interpolate;
129
+ }
130
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/i18n/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Public types for `nexusjs/i18n`.
3
+ *
4
+ * `nexusjs/i18n` provides locale-aware translation and formatting
5
+ * for the Bun-native stack. It uses Node's built-in `Intl` API
6
+ * for date / number / currency / pluralization — zero external
7
+ * dependencies.
8
+ */
9
+ /** A locale identifier. e.g. `"en"`, `"en-US"`, `"fr-CA"`, `"ko"`. */
10
+ export type Locale = string;
11
+ /** A message dictionary. Values can be strings (terminal) or nested dicts. */
12
+ export type MessageDict = {
13
+ [key: string]: string | MessageDict;
14
+ };
15
+ /** A flat `locale → messages` map. */
16
+ export type MessageCatalog = Record<Locale, MessageDict>;
17
+ /** Arguments passed to `t()`. Values are coerced to strings. */
18
+ export type TranslateArgs = Record<string, string | number | boolean>;
19
+ /** A plural rule key. Matches `Intl.PluralRule` outputs. */
20
+ export type PluralCategory = "zero" | "one" | "two" | "few" | "many" | "other";
21
+ /** A plural form for a single message. Use `|` to separate forms. */
22
+ export type PluralForm = `${string | number}${string}`;
23
+ export interface I18nConfig {
24
+ /** Default locale. Default: `"en"`. */
25
+ defaultLocale?: Locale;
26
+ /** Whether to fall back to a more general locale (e.g. `fr-CA` → `fr`)
27
+ * when an exact match is not found. Default: `true`. */
28
+ fallback?: boolean;
29
+ /** Whether to fall back to the default locale when a key is missing
30
+ * in the requested locale. Default: `true`. */
31
+ fallbackToDefault?: boolean;
32
+ /** Whitelist of supported locales. Empty / undefined = all. */
33
+ supportedLocales?: Locale[];
34
+ /** Initial messages (also useful for tests). */
35
+ messages?: MessageCatalog;
36
+ /** When set, load `*.json` files from this directory on boot. */
37
+ messagesDir?: string;
38
+ /** Query string key for locale detection. Default: `"lang"`. */
39
+ detectQueryKey?: string;
40
+ /** Cookie name for locale detection. Default: `"lang"`. */
41
+ detectCookieKey?: string;
42
+ }
43
+ export interface DetectOptions {
44
+ /** Override the query key. */
45
+ queryKey?: string;
46
+ /** Override the cookie name. */
47
+ cookieKey?: string;
48
+ /** Override the default locale. */
49
+ defaultLocale?: Locale;
50
+ }
51
+ export interface DateFormatOptions extends Intl.DateTimeFormatOptions {
52
+ /** IETF locale tag. Defaults to the active locale. */
53
+ locale?: Locale;
54
+ }
55
+ export interface NumberFormatOptions extends Intl.NumberFormatOptions {
56
+ /** IETF locale tag. Defaults to the active locale. */
57
+ locale?: Locale;
58
+ }
59
+ export interface CurrencyFormatOptions extends Intl.NumberFormatOptions {
60
+ /** IETF locale tag. Defaults to the active locale. */
61
+ locale?: Locale;
62
+ /** ISO 4217 currency code (e.g. `"USD"`, `"KRW"`). */
63
+ currency: string;
64
+ }
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,sEAAsE;AACtE,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAM5B,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;CACpC,CAAC;AAEF,sCAAsC;AACtC,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAMzD,gEAAgE;AAChE,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAMtE,4DAA4D;AAC5D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/E,qEAAqE;AACrE,MAAM,MAAM,UAAU,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAMvD,MAAM,WAAW,UAAU;IAC1B,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;4DACwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;mDAC+C;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD,MAAM,WAAW,aAAa;IAC7B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,qBAAqB;IACpE,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,mBAAmB;IACpE,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,mBAAmB;IACtE,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export * from './core/index.js';
2
+ export { default } from './core/application.js';