stratal 0.0.13 → 0.0.15

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 (1062) hide show
  1. package/dist/application-Du0d8O_e.d.mts +116 -0
  2. package/dist/application-Du0d8O_e.d.mts.map +1 -0
  3. package/dist/base-email.provider-CNwsPbwm.mjs +42 -0
  4. package/dist/base-email.provider-CNwsPbwm.mjs.map +1 -0
  5. package/dist/bin/cloudflare-workers-loader.mjs +34 -0
  6. package/dist/bin/cloudflare-workers-loader.mjs.map +1 -0
  7. package/dist/bin/quarry.mjs +164 -0
  8. package/dist/bin/quarry.mjs.map +1 -0
  9. package/dist/cache/index.d.mts +219 -0
  10. package/dist/cache/index.d.mts.map +1 -0
  11. package/dist/cache/index.mjs +251 -0
  12. package/dist/cache/index.mjs.map +1 -0
  13. package/dist/chunk-D1SwGrFN.mjs +27 -0
  14. package/dist/command-DG_u5ob2.mjs +192 -0
  15. package/dist/command-DG_u5ob2.mjs.map +1 -0
  16. package/dist/command-DcebcSrL.d.mts +120 -0
  17. package/dist/command-DcebcSrL.d.mts.map +1 -0
  18. package/dist/config/index.d.mts +273 -0
  19. package/dist/config/index.d.mts.map +1 -0
  20. package/dist/config/index.mjs +239 -0
  21. package/dist/config/index.mjs.map +1 -0
  22. package/dist/cron/index.d.mts +128 -0
  23. package/dist/cron/index.d.mts.map +1 -0
  24. package/dist/cron/index.mjs +5 -0
  25. package/dist/cron-manager-BRh86QCS.mjs +107 -0
  26. package/dist/cron-manager-BRh86QCS.mjs.map +1 -0
  27. package/dist/decorate-D5j-d9_z.mjs +171 -0
  28. package/dist/decorate-D5j-d9_z.mjs.map +1 -0
  29. package/dist/di/index.d.mts +2 -0
  30. package/dist/di/index.mjs +4 -0
  31. package/dist/email/index.d.mts +532 -0
  32. package/dist/email/index.d.mts.map +1 -0
  33. package/dist/email/index.mjs +480 -0
  34. package/dist/email/index.mjs.map +1 -0
  35. package/dist/en-uVIaxFXR.mjs +319 -0
  36. package/dist/en-uVIaxFXR.mjs.map +1 -0
  37. package/dist/errors/index.d.mts +2 -0
  38. package/dist/errors/index.mjs +4 -0
  39. package/dist/errors-CtCi1wn6.mjs +707 -0
  40. package/dist/errors-CtCi1wn6.mjs.map +1 -0
  41. package/dist/events/index.d.mts +210 -0
  42. package/dist/events/index.d.mts.map +1 -0
  43. package/dist/events/index.mjs +4 -0
  44. package/dist/events-CXl-o1Ad.mjs +191 -0
  45. package/dist/events-CXl-o1Ad.mjs.map +1 -0
  46. package/dist/gateway-context-90CQEQDR.mjs +226 -0
  47. package/dist/gateway-context-90CQEQDR.mjs.map +1 -0
  48. package/dist/guards/index.d.mts +172 -0
  49. package/dist/guards/index.d.mts.map +1 -0
  50. package/dist/guards/index.mjs +2 -0
  51. package/dist/guards-DMbsAxSX.mjs +151 -0
  52. package/dist/guards-DMbsAxSX.mjs.map +1 -0
  53. package/dist/i18n/index.d.mts +3 -0
  54. package/dist/i18n/index.mjs +15 -0
  55. package/dist/i18n/messages/en/index.d.mts +2 -0
  56. package/dist/i18n/messages/en/index.mjs +2 -0
  57. package/dist/i18n/validation/index.d.mts +4 -0
  58. package/dist/i18n/validation/index.mjs +3 -0
  59. package/dist/i18n.module-qNrpIVts.mjs +1791 -0
  60. package/dist/i18n.module-qNrpIVts.mjs.map +1 -0
  61. package/dist/index-CSuHOJc3.d.mts +319 -0
  62. package/dist/index-CSuHOJc3.d.mts.map +1 -0
  63. package/dist/index-Cfkie8JM.d.mts +263 -0
  64. package/dist/index-Cfkie8JM.d.mts.map +1 -0
  65. package/dist/index-CpAN9ENH.d.mts +185 -0
  66. package/dist/index-CpAN9ENH.d.mts.map +1 -0
  67. package/dist/index-D69rxo8H.d.mts +2616 -0
  68. package/dist/index-D69rxo8H.d.mts.map +1 -0
  69. package/dist/index-H-Su81aK.d.mts +632 -0
  70. package/dist/index-H-Su81aK.d.mts.map +1 -0
  71. package/dist/index.d.mts +41 -0
  72. package/dist/index.d.mts.map +1 -0
  73. package/dist/index.mjs +20 -0
  74. package/dist/is-command-MZDCH-0T.mjs +14 -0
  75. package/dist/is-command-MZDCH-0T.mjs.map +1 -0
  76. package/dist/is-seeder-BN9Ej1r7.mjs +28 -0
  77. package/dist/is-seeder-BN9Ej1r7.mjs.map +1 -0
  78. package/dist/logger/index.d.mts +2 -0
  79. package/dist/logger/index.mjs +3 -0
  80. package/dist/logger-BR1-s1Um.mjs +252 -0
  81. package/dist/logger-BR1-s1Um.mjs.map +1 -0
  82. package/dist/middleware/index.d.mts +2 -0
  83. package/dist/middleware/index.mjs +6 -0
  84. package/dist/middleware-iRhNjsPH.mjs +362 -0
  85. package/dist/middleware-iRhNjsPH.mjs.map +1 -0
  86. package/dist/module/index.d.mts +148 -0
  87. package/dist/module/index.d.mts.map +1 -0
  88. package/dist/module/index.mjs +11 -0
  89. package/dist/module-BH7t7BGG.mjs +370 -0
  90. package/dist/module-BH7t7BGG.mjs.map +1 -0
  91. package/dist/openapi/index.d.mts +202 -0
  92. package/dist/openapi/index.d.mts.map +1 -0
  93. package/dist/openapi/index.mjs +15 -0
  94. package/dist/quarry/index.d.mts +112 -0
  95. package/dist/quarry/index.d.mts.map +1 -0
  96. package/dist/quarry/index.mjs +6 -0
  97. package/dist/quarry-registry-BPmKVjhG.mjs +302 -0
  98. package/dist/quarry-registry-BPmKVjhG.mjs.map +1 -0
  99. package/dist/queue/index.d.mts +2 -0
  100. package/dist/queue/index.mjs +84 -0
  101. package/dist/queue/index.mjs.map +1 -0
  102. package/dist/queue.module-BdXWUvIM.mjs +403 -0
  103. package/dist/queue.module-BdXWUvIM.mjs.map +1 -0
  104. package/dist/resend.provider-CQT5be5E.mjs +70 -0
  105. package/dist/resend.provider-CQT5be5E.mjs.map +1 -0
  106. package/dist/router/index.d.mts +2 -0
  107. package/dist/router/index.mjs +15 -0
  108. package/dist/router-context-BLn4PrRG.mjs +264 -0
  109. package/dist/router-context-BLn4PrRG.mjs.map +1 -0
  110. package/dist/seeder/index.d.mts +77 -0
  111. package/dist/seeder/index.d.mts.map +1 -0
  112. package/dist/seeder/index.mjs +7 -0
  113. package/dist/seeder-DatfjJvU.mjs +132 -0
  114. package/dist/seeder-DatfjJvU.mjs.map +1 -0
  115. package/dist/smtp.provider-Cj7BUFbJ.mjs +78 -0
  116. package/dist/smtp.provider-Cj7BUFbJ.mjs.map +1 -0
  117. package/dist/storage/index.d.mts +743 -0
  118. package/dist/storage/index.d.mts.map +1 -0
  119. package/dist/storage/index.mjs +13 -0
  120. package/dist/storage-BtcfgibD.mjs +787 -0
  121. package/dist/storage-BtcfgibD.mjs.map +1 -0
  122. package/dist/stratal-Cm0Yy8v4.mjs +305 -0
  123. package/dist/stratal-Cm0Yy8v4.mjs.map +1 -0
  124. package/dist/{types.d.ts → types-Cu4jkeiH.d.mts} +5 -2
  125. package/dist/types-Cu4jkeiH.d.mts.map +1 -0
  126. package/dist/types-N84Ak6YT.d.mts +64 -0
  127. package/dist/types-N84Ak6YT.d.mts.map +1 -0
  128. package/dist/usage-generator-BTZDk5zx.mjs +75 -0
  129. package/dist/usage-generator-BTZDk5zx.mjs.map +1 -0
  130. package/dist/validation-Dbt-snjx.mjs +194 -0
  131. package/dist/validation-Dbt-snjx.mjs.map +1 -0
  132. package/dist/websocket/index.d.mts +168 -0
  133. package/dist/websocket/index.d.mts.map +1 -0
  134. package/dist/websocket/index.mjs +6 -0
  135. package/dist/workers/index.d.mts +90 -0
  136. package/dist/workers/index.d.mts.map +1 -0
  137. package/dist/workers/index.mjs +122 -0
  138. package/dist/workers/index.mjs.map +1 -0
  139. package/package.json +98 -28
  140. package/dist/application.d.ts +0 -101
  141. package/dist/application.d.ts.map +0 -1
  142. package/dist/application.js +0 -230
  143. package/dist/application.js.map +0 -1
  144. package/dist/cache/cache.module.d.ts +0 -14
  145. package/dist/cache/cache.module.d.ts.map +0 -1
  146. package/dist/cache/cache.module.js +0 -32
  147. package/dist/cache/cache.module.js.map +0 -1
  148. package/dist/cache/cache.tokens.d.ts +0 -5
  149. package/dist/cache/cache.tokens.d.ts.map +0 -1
  150. package/dist/cache/cache.tokens.js +0 -4
  151. package/dist/cache/cache.tokens.js.map +0 -1
  152. package/dist/cache/errors/cache-delete.error.d.ts +0 -11
  153. package/dist/cache/errors/cache-delete.error.d.ts.map +0 -1
  154. package/dist/cache/errors/cache-delete.error.js +0 -14
  155. package/dist/cache/errors/cache-delete.error.js.map +0 -1
  156. package/dist/cache/errors/cache-get.error.d.ts +0 -11
  157. package/dist/cache/errors/cache-get.error.d.ts.map +0 -1
  158. package/dist/cache/errors/cache-get.error.js +0 -14
  159. package/dist/cache/errors/cache-get.error.js.map +0 -1
  160. package/dist/cache/errors/cache-list.error.d.ts +0 -10
  161. package/dist/cache/errors/cache-list.error.d.ts.map +0 -1
  162. package/dist/cache/errors/cache-list.error.js +0 -13
  163. package/dist/cache/errors/cache-list.error.js.map +0 -1
  164. package/dist/cache/errors/cache-put.error.d.ts +0 -11
  165. package/dist/cache/errors/cache-put.error.d.ts.map +0 -1
  166. package/dist/cache/errors/cache-put.error.js +0 -14
  167. package/dist/cache/errors/cache-put.error.js.map +0 -1
  168. package/dist/cache/errors/index.d.ts +0 -5
  169. package/dist/cache/errors/index.d.ts.map +0 -1
  170. package/dist/cache/errors/index.js +0 -5
  171. package/dist/cache/errors/index.js.map +0 -1
  172. package/dist/cache/index.d.ts +0 -5
  173. package/dist/cache/index.d.ts.map +0 -1
  174. package/dist/cache/index.js +0 -5
  175. package/dist/cache/index.js.map +0 -1
  176. package/dist/cache/services/cache.service.d.ts +0 -152
  177. package/dist/cache/services/cache.service.d.ts.map +0 -1
  178. package/dist/cache/services/cache.service.js +0 -223
  179. package/dist/cache/services/cache.service.js.map +0 -1
  180. package/dist/cache/services/index.d.ts +0 -2
  181. package/dist/cache/services/index.d.ts.map +0 -1
  182. package/dist/cache/services/index.js +0 -2
  183. package/dist/cache/services/index.js.map +0 -1
  184. package/dist/config/config.module.d.ts +0 -79
  185. package/dist/config/config.module.d.ts.map +0 -1
  186. package/dist/config/config.module.js +0 -121
  187. package/dist/config/config.module.js.map +0 -1
  188. package/dist/config/config.tokens.d.ts +0 -4
  189. package/dist/config/config.tokens.d.ts.map +0 -1
  190. package/dist/config/config.tokens.js +0 -4
  191. package/dist/config/config.tokens.js.map +0 -1
  192. package/dist/config/config.types.d.ts +0 -68
  193. package/dist/config/config.types.d.ts.map +0 -1
  194. package/dist/config/config.types.js +0 -9
  195. package/dist/config/config.types.js.map +0 -1
  196. package/dist/config/errors/config-module-not-initialized.error.d.ts +0 -10
  197. package/dist/config/errors/config-module-not-initialized.error.d.ts.map +0 -1
  198. package/dist/config/errors/config-module-not-initialized.error.js +0 -12
  199. package/dist/config/errors/config-module-not-initialized.error.js.map +0 -1
  200. package/dist/config/errors/config-not-initialized.error.d.ts +0 -12
  201. package/dist/config/errors/config-not-initialized.error.d.ts.map +0 -1
  202. package/dist/config/errors/config-not-initialized.error.js +0 -15
  203. package/dist/config/errors/config-not-initialized.error.js.map +0 -1
  204. package/dist/config/errors/index.d.ts +0 -3
  205. package/dist/config/errors/index.d.ts.map +0 -1
  206. package/dist/config/errors/index.js +0 -3
  207. package/dist/config/errors/index.js.map +0 -1
  208. package/dist/config/index.d.ts +0 -7
  209. package/dist/config/index.d.ts.map +0 -1
  210. package/dist/config/index.js +0 -9
  211. package/dist/config/index.js.map +0 -1
  212. package/dist/config/register-as.d.ts +0 -62
  213. package/dist/config/register-as.d.ts.map +0 -1
  214. package/dist/config/register-as.js +0 -48
  215. package/dist/config/register-as.js.map +0 -1
  216. package/dist/config/services/config.service.d.ts +0 -59
  217. package/dist/config/services/config.service.d.ts.map +0 -1
  218. package/dist/config/services/config.service.js +0 -140
  219. package/dist/config/services/config.service.js.map +0 -1
  220. package/dist/cron/cron-job.d.ts +0 -54
  221. package/dist/cron/cron-job.d.ts.map +0 -1
  222. package/dist/cron/cron-job.js +0 -2
  223. package/dist/cron/cron-job.js.map +0 -1
  224. package/dist/cron/cron-manager.d.ts +0 -60
  225. package/dist/cron/cron-manager.d.ts.map +0 -1
  226. package/dist/cron/cron-manager.js +0 -120
  227. package/dist/cron/cron-manager.js.map +0 -1
  228. package/dist/cron/errors/cron-execution.error.d.ts +0 -10
  229. package/dist/cron/errors/cron-execution.error.d.ts.map +0 -1
  230. package/dist/cron/errors/cron-execution.error.js +0 -17
  231. package/dist/cron/errors/cron-execution.error.js.map +0 -1
  232. package/dist/cron/index.d.ts +0 -4
  233. package/dist/cron/index.d.ts.map +0 -1
  234. package/dist/cron/index.js +0 -3
  235. package/dist/cron/index.js.map +0 -1
  236. package/dist/di/conditional-binding-builder.d.ts +0 -93
  237. package/dist/di/conditional-binding-builder.d.ts.map +0 -1
  238. package/dist/di/conditional-binding-builder.js +0 -115
  239. package/dist/di/conditional-binding-builder.js.map +0 -1
  240. package/dist/di/container.d.ts +0 -131
  241. package/dist/di/container.d.ts.map +0 -1
  242. package/dist/di/container.js +0 -177
  243. package/dist/di/container.js.map +0 -1
  244. package/dist/di/decorators/inject-param.decorator.d.ts +0 -67
  245. package/dist/di/decorators/inject-param.decorator.d.ts.map +0 -1
  246. package/dist/di/decorators/inject-param.decorator.js +0 -53
  247. package/dist/di/decorators/inject-param.decorator.js.map +0 -1
  248. package/dist/di/decorators.d.ts +0 -57
  249. package/dist/di/decorators.d.ts.map +0 -1
  250. package/dist/di/decorators.js +0 -74
  251. package/dist/di/decorators.js.map +0 -1
  252. package/dist/di/errors/conditional-binding-fallback.error.d.ts +0 -16
  253. package/dist/di/errors/conditional-binding-fallback.error.d.ts.map +0 -1
  254. package/dist/di/errors/conditional-binding-fallback.error.js +0 -19
  255. package/dist/di/errors/conditional-binding-fallback.error.js.map +0 -1
  256. package/dist/di/errors/index.d.ts +0 -3
  257. package/dist/di/errors/index.d.ts.map +0 -1
  258. package/dist/di/errors/index.js +0 -3
  259. package/dist/di/errors/index.js.map +0 -1
  260. package/dist/di/errors/request-scope-operation-not-allowed.error.d.ts +0 -11
  261. package/dist/di/errors/request-scope-operation-not-allowed.error.d.ts.map +0 -1
  262. package/dist/di/errors/request-scope-operation-not-allowed.error.js +0 -14
  263. package/dist/di/errors/request-scope-operation-not-allowed.error.js.map +0 -1
  264. package/dist/di/index.d.ts +0 -12
  265. package/dist/di/index.d.ts.map +0 -1
  266. package/dist/di/index.js +0 -10
  267. package/dist/di/index.js.map +0 -1
  268. package/dist/di/tokens.d.ts +0 -26
  269. package/dist/di/tokens.d.ts.map +0 -1
  270. package/dist/di/tokens.js +0 -29
  271. package/dist/di/tokens.js.map +0 -1
  272. package/dist/di/types.d.ts +0 -56
  273. package/dist/di/types.d.ts.map +0 -1
  274. package/dist/di/types.js +0 -34
  275. package/dist/di/types.js.map +0 -1
  276. package/dist/email/consumers/email.consumer.d.ts +0 -43
  277. package/dist/email/consumers/email.consumer.d.ts.map +0 -1
  278. package/dist/email/consumers/email.consumer.js +0 -129
  279. package/dist/email/consumers/email.consumer.js.map +0 -1
  280. package/dist/email/consumers/index.d.ts +0 -2
  281. package/dist/email/consumers/index.d.ts.map +0 -1
  282. package/dist/email/consumers/index.js +0 -2
  283. package/dist/email/consumers/index.js.map +0 -1
  284. package/dist/email/contracts/email-attachment.d.ts +0 -61
  285. package/dist/email/contracts/email-attachment.d.ts.map +0 -1
  286. package/dist/email/contracts/email-attachment.js +0 -58
  287. package/dist/email/contracts/email-attachment.js.map +0 -1
  288. package/dist/email/contracts/email-message.contract.d.ts +0 -58
  289. package/dist/email/contracts/email-message.contract.d.ts.map +0 -1
  290. package/dist/email/contracts/email-message.contract.js +0 -62
  291. package/dist/email/contracts/email-message.contract.js.map +0 -1
  292. package/dist/email/contracts/index.d.ts +0 -4
  293. package/dist/email/contracts/index.d.ts.map +0 -1
  294. package/dist/email/contracts/index.js +0 -4
  295. package/dist/email/contracts/index.js.map +0 -1
  296. package/dist/email/contracts/send-email.input.d.ts +0 -72
  297. package/dist/email/contracts/send-email.input.d.ts.map +0 -1
  298. package/dist/email/contracts/send-email.input.js +0 -28
  299. package/dist/email/contracts/send-email.input.js.map +0 -1
  300. package/dist/email/email.module.d.ts +0 -122
  301. package/dist/email/email.module.d.ts.map +0 -1
  302. package/dist/email/email.module.js +0 -129
  303. package/dist/email/email.module.js.map +0 -1
  304. package/dist/email/email.tokens.d.ts +0 -33
  305. package/dist/email/email.tokens.d.ts.map +0 -1
  306. package/dist/email/email.tokens.js +0 -33
  307. package/dist/email/email.tokens.js.map +0 -1
  308. package/dist/email/errors/email-provider-not-supported.error.d.ts +0 -13
  309. package/dist/email/errors/email-provider-not-supported.error.d.ts.map +0 -1
  310. package/dist/email/errors/email-provider-not-supported.error.js +0 -15
  311. package/dist/email/errors/email-provider-not-supported.error.js.map +0 -1
  312. package/dist/email/errors/email-resend-api-failed.error.d.ts +0 -13
  313. package/dist/email/errors/email-resend-api-failed.error.d.ts.map +0 -1
  314. package/dist/email/errors/email-resend-api-failed.error.js +0 -15
  315. package/dist/email/errors/email-resend-api-failed.error.js.map +0 -1
  316. package/dist/email/errors/email-smtp-connection-failed.error.d.ts +0 -13
  317. package/dist/email/errors/email-smtp-connection-failed.error.d.ts.map +0 -1
  318. package/dist/email/errors/email-smtp-connection-failed.error.js +0 -15
  319. package/dist/email/errors/email-smtp-connection-failed.error.js.map +0 -1
  320. package/dist/email/errors/index.d.ts +0 -7
  321. package/dist/email/errors/index.d.ts.map +0 -1
  322. package/dist/email/errors/index.js +0 -7
  323. package/dist/email/errors/index.js.map +0 -1
  324. package/dist/email/errors/resend-api-key-missing.error.d.ts +0 -13
  325. package/dist/email/errors/resend-api-key-missing.error.d.ts.map +0 -1
  326. package/dist/email/errors/resend-api-key-missing.error.js +0 -15
  327. package/dist/email/errors/resend-api-key-missing.error.js.map +0 -1
  328. package/dist/email/errors/smtp-configuration-missing.error.d.ts +0 -13
  329. package/dist/email/errors/smtp-configuration-missing.error.d.ts.map +0 -1
  330. package/dist/email/errors/smtp-configuration-missing.error.js +0 -15
  331. package/dist/email/errors/smtp-configuration-missing.error.js.map +0 -1
  332. package/dist/email/errors/smtp-host-missing.error.d.ts +0 -13
  333. package/dist/email/errors/smtp-host-missing.error.d.ts.map +0 -1
  334. package/dist/email/errors/smtp-host-missing.error.js +0 -15
  335. package/dist/email/errors/smtp-host-missing.error.js.map +0 -1
  336. package/dist/email/index.d.ts +0 -6
  337. package/dist/email/index.d.ts.map +0 -1
  338. package/dist/email/index.js +0 -8
  339. package/dist/email/index.js.map +0 -1
  340. package/dist/email/providers/base-email.provider.d.ts +0 -22
  341. package/dist/email/providers/base-email.provider.d.ts.map +0 -1
  342. package/dist/email/providers/base-email.provider.js +0 -43
  343. package/dist/email/providers/base-email.provider.js.map +0 -1
  344. package/dist/email/providers/email-provider.interface.d.ts +0 -66
  345. package/dist/email/providers/email-provider.interface.d.ts.map +0 -1
  346. package/dist/email/providers/email-provider.interface.js +0 -2
  347. package/dist/email/providers/email-provider.interface.js.map +0 -1
  348. package/dist/email/providers/index.d.ts +0 -5
  349. package/dist/email/providers/index.d.ts.map +0 -1
  350. package/dist/email/providers/index.js +0 -5
  351. package/dist/email/providers/index.js.map +0 -1
  352. package/dist/email/providers/resend.provider.d.ts +0 -26
  353. package/dist/email/providers/resend.provider.d.ts.map +0 -1
  354. package/dist/email/providers/resend.provider.js +0 -84
  355. package/dist/email/providers/resend.provider.js.map +0 -1
  356. package/dist/email/providers/smtp.provider.d.ts +0 -25
  357. package/dist/email/providers/smtp.provider.d.ts.map +0 -1
  358. package/dist/email/providers/smtp.provider.js +0 -86
  359. package/dist/email/providers/smtp.provider.js.map +0 -1
  360. package/dist/email/services/email-provider-factory.d.ts +0 -24
  361. package/dist/email/services/email-provider-factory.d.ts.map +0 -1
  362. package/dist/email/services/email-provider-factory.js +0 -59
  363. package/dist/email/services/email-provider-factory.js.map +0 -1
  364. package/dist/email/services/email.service.d.ts +0 -51
  365. package/dist/email/services/email.service.d.ts.map +0 -1
  366. package/dist/email/services/email.service.js +0 -75
  367. package/dist/email/services/email.service.js.map +0 -1
  368. package/dist/email/services/index.d.ts +0 -3
  369. package/dist/email/services/index.d.ts.map +0 -1
  370. package/dist/email/services/index.js +0 -3
  371. package/dist/email/services/index.js.map +0 -1
  372. package/dist/env.d.ts +0 -21
  373. package/dist/env.d.ts.map +0 -1
  374. package/dist/env.js +0 -2
  375. package/dist/env.js.map +0 -1
  376. package/dist/errors/application-error.d.ts +0 -87
  377. package/dist/errors/application-error.d.ts.map +0 -1
  378. package/dist/errors/application-error.js +0 -130
  379. package/dist/errors/application-error.js.map +0 -1
  380. package/dist/errors/error-codes.d.ts +0 -202
  381. package/dist/errors/error-codes.d.ts.map +0 -1
  382. package/dist/errors/error-codes.js +0 -184
  383. package/dist/errors/error-codes.js.map +0 -1
  384. package/dist/errors/error-response.d.ts +0 -32
  385. package/dist/errors/error-response.d.ts.map +0 -1
  386. package/dist/errors/error-response.js +0 -14
  387. package/dist/errors/error-response.js.map +0 -1
  388. package/dist/errors/get-http-status.d.ts +0 -12
  389. package/dist/errors/get-http-status.d.ts.map +0 -1
  390. package/dist/errors/get-http-status.js +0 -62
  391. package/dist/errors/get-http-status.js.map +0 -1
  392. package/dist/errors/global-error-handler.d.ts +0 -81
  393. package/dist/errors/global-error-handler.d.ts.map +0 -1
  394. package/dist/errors/global-error-handler.js +0 -176
  395. package/dist/errors/global-error-handler.js.map +0 -1
  396. package/dist/errors/index.d.ts +0 -10
  397. package/dist/errors/index.d.ts.map +0 -1
  398. package/dist/errors/index.js +0 -10
  399. package/dist/errors/index.js.map +0 -1
  400. package/dist/errors/internal-error.d.ts +0 -16
  401. package/dist/errors/internal-error.d.ts.map +0 -1
  402. package/dist/errors/internal-error.js +0 -19
  403. package/dist/errors/internal-error.js.map +0 -1
  404. package/dist/errors/is-application-error.d.ts +0 -9
  405. package/dist/errors/is-application-error.d.ts.map +0 -1
  406. package/dist/errors/is-application-error.js +0 -11
  407. package/dist/errors/is-application-error.js.map +0 -1
  408. package/dist/errors/request-container-not-initialized.error.d.ts +0 -12
  409. package/dist/errors/request-container-not-initialized.error.d.ts.map +0 -1
  410. package/dist/errors/request-container-not-initialized.error.js +0 -15
  411. package/dist/errors/request-container-not-initialized.error.js.map +0 -1
  412. package/dist/errors/stratal-not-initialized.error.d.ts +0 -11
  413. package/dist/errors/stratal-not-initialized.error.d.ts.map +0 -1
  414. package/dist/errors/stratal-not-initialized.error.js +0 -14
  415. package/dist/errors/stratal-not-initialized.error.js.map +0 -1
  416. package/dist/events/constants.d.ts +0 -11
  417. package/dist/events/constants.d.ts.map +0 -1
  418. package/dist/events/constants.js +0 -11
  419. package/dist/events/constants.js.map +0 -1
  420. package/dist/events/decorators/index.d.ts +0 -3
  421. package/dist/events/decorators/index.d.ts.map +0 -1
  422. package/dist/events/decorators/index.js +0 -3
  423. package/dist/events/decorators/index.js.map +0 -1
  424. package/dist/events/decorators/listener.decorator.d.ts +0 -24
  425. package/dist/events/decorators/listener.decorator.d.ts.map +0 -1
  426. package/dist/events/decorators/listener.decorator.js +0 -33
  427. package/dist/events/decorators/listener.decorator.js.map +0 -1
  428. package/dist/events/decorators/on.decorator.d.ts +0 -28
  429. package/dist/events/decorators/on.decorator.d.ts.map +0 -1
  430. package/dist/events/decorators/on.decorator.js +0 -41
  431. package/dist/events/decorators/on.decorator.js.map +0 -1
  432. package/dist/events/event-registry.d.ts +0 -26
  433. package/dist/events/event-registry.d.ts.map +0 -1
  434. package/dist/events/event-registry.js +0 -156
  435. package/dist/events/event-registry.js.map +0 -1
  436. package/dist/events/index.d.ts +0 -5
  437. package/dist/events/index.d.ts.map +0 -1
  438. package/dist/events/index.js +0 -4
  439. package/dist/events/index.js.map +0 -1
  440. package/dist/events/types.d.ts +0 -116
  441. package/dist/events/types.d.ts.map +0 -1
  442. package/dist/events/types.js +0 -23
  443. package/dist/events/types.js.map +0 -1
  444. package/dist/execution-context.d.ts +0 -4
  445. package/dist/execution-context.d.ts.map +0 -1
  446. package/dist/execution-context.js +0 -2
  447. package/dist/execution-context.js.map +0 -1
  448. package/dist/guards/guard-execution.service.d.ts +0 -37
  449. package/dist/guards/guard-execution.service.d.ts.map +0 -1
  450. package/dist/guards/guard-execution.service.js +0 -74
  451. package/dist/guards/guard-execution.service.js.map +0 -1
  452. package/dist/guards/index.d.ts +0 -12
  453. package/dist/guards/index.d.ts.map +0 -1
  454. package/dist/guards/index.js +0 -12
  455. package/dist/guards/index.js.map +0 -1
  456. package/dist/guards/types.d.ts +0 -60
  457. package/dist/guards/types.d.ts.map +0 -1
  458. package/dist/guards/types.js +0 -5
  459. package/dist/guards/types.js.map +0 -1
  460. package/dist/guards/use-guards.decorator.d.ts +0 -73
  461. package/dist/guards/use-guards.decorator.d.ts.map +0 -1
  462. package/dist/guards/use-guards.decorator.js +0 -89
  463. package/dist/guards/use-guards.decorator.js.map +0 -1
  464. package/dist/i18n/errors/index.d.ts +0 -6
  465. package/dist/i18n/errors/index.d.ts.map +0 -1
  466. package/dist/i18n/errors/index.js +0 -6
  467. package/dist/i18n/errors/index.js.map +0 -1
  468. package/dist/i18n/errors/locale-not-supported.error.d.ts +0 -12
  469. package/dist/i18n/errors/locale-not-supported.error.d.ts.map +0 -1
  470. package/dist/i18n/errors/locale-not-supported.error.js +0 -15
  471. package/dist/i18n/errors/locale-not-supported.error.js.map +0 -1
  472. package/dist/i18n/errors/translation-missing.error.d.ts +0 -12
  473. package/dist/i18n/errors/translation-missing.error.d.ts.map +0 -1
  474. package/dist/i18n/errors/translation-missing.error.js +0 -14
  475. package/dist/i18n/errors/translation-missing.error.js.map +0 -1
  476. package/dist/i18n/i18n.module.d.ts +0 -60
  477. package/dist/i18n/i18n.module.d.ts.map +0 -1
  478. package/dist/i18n/i18n.module.js +0 -103
  479. package/dist/i18n/i18n.module.js.map +0 -1
  480. package/dist/i18n/i18n.options.d.ts +0 -60
  481. package/dist/i18n/i18n.options.d.ts.map +0 -1
  482. package/dist/i18n/i18n.options.js +0 -18
  483. package/dist/i18n/i18n.options.js.map +0 -1
  484. package/dist/i18n/i18n.tokens.d.ts +0 -13
  485. package/dist/i18n/i18n.tokens.d.ts.map +0 -1
  486. package/dist/i18n/i18n.tokens.js +0 -13
  487. package/dist/i18n/i18n.tokens.js.map +0 -1
  488. package/dist/i18n/i18n.types.d.ts +0 -78
  489. package/dist/i18n/i18n.types.d.ts.map +0 -1
  490. package/dist/i18n/i18n.types.js +0 -8
  491. package/dist/i18n/i18n.types.js.map +0 -1
  492. package/dist/i18n/index.d.ts +0 -12
  493. package/dist/i18n/index.d.ts.map +0 -1
  494. package/dist/i18n/index.js +0 -12
  495. package/dist/i18n/index.js.map +0 -1
  496. package/dist/i18n/messages/en/common.d.ts +0 -19
  497. package/dist/i18n/messages/en/common.d.ts.map +0 -1
  498. package/dist/i18n/messages/en/common.js +0 -19
  499. package/dist/i18n/messages/en/common.js.map +0 -1
  500. package/dist/i18n/messages/en/emails.d.ts +0 -12
  501. package/dist/i18n/messages/en/emails.d.ts.map +0 -1
  502. package/dist/i18n/messages/en/emails.js +0 -12
  503. package/dist/i18n/messages/en/emails.js.map +0 -1
  504. package/dist/i18n/messages/en/errors.d.ts +0 -113
  505. package/dist/i18n/messages/en/errors.d.ts.map +0 -1
  506. package/dist/i18n/messages/en/errors.js +0 -130
  507. package/dist/i18n/messages/en/errors.js.map +0 -1
  508. package/dist/i18n/messages/en/index.d.ts +0 -13
  509. package/dist/i18n/messages/en/index.d.ts.map +0 -1
  510. package/dist/i18n/messages/en/index.js +0 -13
  511. package/dist/i18n/messages/en/index.js.map +0 -1
  512. package/dist/i18n/messages/en/validation.d.ts +0 -38
  513. package/dist/i18n/messages/en/validation.d.ts.map +0 -1
  514. package/dist/i18n/messages/en/validation.js +0 -38
  515. package/dist/i18n/messages/en/validation.js.map +0 -1
  516. package/dist/i18n/messages/en/zod.d.ts +0 -125
  517. package/dist/i18n/messages/en/zod.d.ts.map +0 -1
  518. package/dist/i18n/messages/en/zod.js +0 -132
  519. package/dist/i18n/messages/en/zod.js.map +0 -1
  520. package/dist/i18n/messages/index.d.ts +0 -27
  521. package/dist/i18n/messages/index.d.ts.map +0 -1
  522. package/dist/i18n/messages/index.js +0 -25
  523. package/dist/i18n/messages/index.js.map +0 -1
  524. package/dist/i18n/middleware/i18n-context.middleware.d.ts +0 -15
  525. package/dist/i18n/middleware/i18n-context.middleware.d.ts.map +0 -1
  526. package/dist/i18n/middleware/i18n-context.middleware.js +0 -42
  527. package/dist/i18n/middleware/i18n-context.middleware.js.map +0 -1
  528. package/dist/i18n/middleware/index.d.ts +0 -6
  529. package/dist/i18n/middleware/index.d.ts.map +0 -1
  530. package/dist/i18n/middleware/index.js +0 -6
  531. package/dist/i18n/middleware/index.js.map +0 -1
  532. package/dist/i18n/middleware/locale-extraction.middleware.d.ts +0 -19
  533. package/dist/i18n/middleware/locale-extraction.middleware.d.ts.map +0 -1
  534. package/dist/i18n/middleware/locale-extraction.middleware.js +0 -49
  535. package/dist/i18n/middleware/locale-extraction.middleware.js.map +0 -1
  536. package/dist/i18n/services/i18n.service.d.ts +0 -50
  537. package/dist/i18n/services/i18n.service.d.ts.map +0 -1
  538. package/dist/i18n/services/i18n.service.js +0 -82
  539. package/dist/i18n/services/i18n.service.js.map +0 -1
  540. package/dist/i18n/services/message-loader.service.d.ts +0 -65
  541. package/dist/i18n/services/message-loader.service.d.ts.map +0 -1
  542. package/dist/i18n/services/message-loader.service.js +0 -175
  543. package/dist/i18n/services/message-loader.service.js.map +0 -1
  544. package/dist/i18n/setup.d.ts +0 -27
  545. package/dist/i18n/setup.d.ts.map +0 -1
  546. package/dist/i18n/setup.js +0 -40
  547. package/dist/i18n/setup.js.map +0 -1
  548. package/dist/i18n/validation/index.d.ts +0 -9
  549. package/dist/i18n/validation/index.d.ts.map +0 -1
  550. package/dist/i18n/validation/index.js +0 -10
  551. package/dist/i18n/validation/index.js.map +0 -1
  552. package/dist/i18n/validation/validation.context.d.ts +0 -34
  553. package/dist/i18n/validation/validation.context.d.ts.map +0 -1
  554. package/dist/i18n/validation/validation.context.js +0 -42
  555. package/dist/i18n/validation/validation.context.js.map +0 -1
  556. package/dist/i18n/validation/validation.error-map.d.ts +0 -8
  557. package/dist/i18n/validation/validation.error-map.d.ts.map +0 -1
  558. package/dist/i18n/validation/validation.error-map.js +0 -158
  559. package/dist/i18n/validation/validation.error-map.js.map +0 -1
  560. package/dist/i18n/validation/validation.types.d.ts +0 -44
  561. package/dist/i18n/validation/validation.types.d.ts.map +0 -1
  562. package/dist/i18n/validation/validation.types.js +0 -2
  563. package/dist/i18n/validation/validation.types.js.map +0 -1
  564. package/dist/i18n/validation/with-i18n.d.ts +0 -29
  565. package/dist/i18n/validation/with-i18n.d.ts.map +0 -1
  566. package/dist/i18n/validation/with-i18n.js +0 -40
  567. package/dist/i18n/validation/with-i18n.js.map +0 -1
  568. package/dist/index.d.ts +0 -6
  569. package/dist/index.d.ts.map +0 -1
  570. package/dist/index.js +0 -6
  571. package/dist/index.js.map +0 -1
  572. package/dist/logger/contracts/index.d.ts +0 -4
  573. package/dist/logger/contracts/index.d.ts.map +0 -1
  574. package/dist/logger/contracts/index.js +0 -4
  575. package/dist/logger/contracts/index.js.map +0 -1
  576. package/dist/logger/contracts/log-context.d.ts +0 -14
  577. package/dist/logger/contracts/log-context.d.ts.map +0 -1
  578. package/dist/logger/contracts/log-context.js +0 -2
  579. package/dist/logger/contracts/log-context.js.map +0 -1
  580. package/dist/logger/contracts/log-entry.d.ts +0 -17
  581. package/dist/logger/contracts/log-entry.d.ts.map +0 -1
  582. package/dist/logger/contracts/log-entry.js +0 -2
  583. package/dist/logger/contracts/log-entry.js.map +0 -1
  584. package/dist/logger/contracts/log-level.d.ts +0 -16
  585. package/dist/logger/contracts/log-level.d.ts.map +0 -1
  586. package/dist/logger/contracts/log-level.js +0 -22
  587. package/dist/logger/contracts/log-level.js.map +0 -1
  588. package/dist/logger/formatters/formatter.interface.d.ts +0 -14
  589. package/dist/logger/formatters/formatter.interface.d.ts.map +0 -1
  590. package/dist/logger/formatters/formatter.interface.js +0 -2
  591. package/dist/logger/formatters/formatter.interface.js.map +0 -1
  592. package/dist/logger/formatters/index.d.ts +0 -4
  593. package/dist/logger/formatters/index.d.ts.map +0 -1
  594. package/dist/logger/formatters/index.js +0 -4
  595. package/dist/logger/formatters/index.js.map +0 -1
  596. package/dist/logger/formatters/json-formatter.d.ts +0 -21
  597. package/dist/logger/formatters/json-formatter.d.ts.map +0 -1
  598. package/dist/logger/formatters/json-formatter.js +0 -27
  599. package/dist/logger/formatters/json-formatter.js.map +0 -1
  600. package/dist/logger/formatters/pretty-formatter.d.ts +0 -18
  601. package/dist/logger/formatters/pretty-formatter.d.ts.map +0 -1
  602. package/dist/logger/formatters/pretty-formatter.js +0 -41
  603. package/dist/logger/formatters/pretty-formatter.js.map +0 -1
  604. package/dist/logger/index.d.ts +0 -7
  605. package/dist/logger/index.d.ts.map +0 -1
  606. package/dist/logger/index.js +0 -10
  607. package/dist/logger/index.js.map +0 -1
  608. package/dist/logger/logger.tokens.d.ts +0 -29
  609. package/dist/logger/logger.tokens.d.ts.map +0 -1
  610. package/dist/logger/logger.tokens.js +0 -29
  611. package/dist/logger/logger.tokens.js.map +0 -1
  612. package/dist/logger/services/index.d.ts +0 -2
  613. package/dist/logger/services/index.d.ts.map +0 -1
  614. package/dist/logger/services/index.js +0 -2
  615. package/dist/logger/services/index.js.map +0 -1
  616. package/dist/logger/services/logger.service.d.ts +0 -73
  617. package/dist/logger/services/logger.service.d.ts.map +0 -1
  618. package/dist/logger/services/logger.service.js +0 -156
  619. package/dist/logger/services/logger.service.js.map +0 -1
  620. package/dist/logger/transports/base-transport.d.ts +0 -24
  621. package/dist/logger/transports/base-transport.d.ts.map +0 -1
  622. package/dist/logger/transports/base-transport.js +0 -23
  623. package/dist/logger/transports/base-transport.js.map +0 -1
  624. package/dist/logger/transports/console-transport.d.ts +0 -19
  625. package/dist/logger/transports/console-transport.d.ts.map +0 -1
  626. package/dist/logger/transports/console-transport.js +0 -53
  627. package/dist/logger/transports/console-transport.js.map +0 -1
  628. package/dist/logger/transports/index.d.ts +0 -4
  629. package/dist/logger/transports/index.d.ts.map +0 -1
  630. package/dist/logger/transports/index.js +0 -4
  631. package/dist/logger/transports/index.js.map +0 -1
  632. package/dist/logger/transports/transport.interface.d.ts +0 -21
  633. package/dist/logger/transports/transport.interface.d.ts.map +0 -1
  634. package/dist/logger/transports/transport.interface.js +0 -2
  635. package/dist/logger/transports/transport.interface.js.map +0 -1
  636. package/dist/middleware/index.d.ts +0 -24
  637. package/dist/middleware/index.d.ts.map +0 -1
  638. package/dist/middleware/index.js +0 -23
  639. package/dist/middleware/index.js.map +0 -1
  640. package/dist/middleware/middleware-configuration.service.d.ts +0 -70
  641. package/dist/middleware/middleware-configuration.service.d.ts.map +0 -1
  642. package/dist/middleware/middleware-configuration.service.js +0 -239
  643. package/dist/middleware/middleware-configuration.service.js.map +0 -1
  644. package/dist/middleware/middleware-consumer.d.ts +0 -57
  645. package/dist/middleware/middleware-consumer.d.ts.map +0 -1
  646. package/dist/middleware/middleware-consumer.js +0 -130
  647. package/dist/middleware/middleware-consumer.js.map +0 -1
  648. package/dist/middleware/types.d.ts +0 -96
  649. package/dist/middleware/types.d.ts.map +0 -1
  650. package/dist/middleware/types.js +0 -2
  651. package/dist/middleware/types.js.map +0 -1
  652. package/dist/module/errors/index.d.ts +0 -5
  653. package/dist/module/errors/index.d.ts.map +0 -1
  654. package/dist/module/errors/index.js +0 -5
  655. package/dist/module/errors/index.js.map +0 -1
  656. package/dist/module/errors/invalid-module-provider.error.d.ts +0 -11
  657. package/dist/module/errors/invalid-module-provider.error.d.ts.map +0 -1
  658. package/dist/module/errors/invalid-module-provider.error.js +0 -13
  659. package/dist/module/errors/invalid-module-provider.error.js.map +0 -1
  660. package/dist/module/errors/module-already-registered.error.d.ts +0 -11
  661. package/dist/module/errors/module-already-registered.error.d.ts.map +0 -1
  662. package/dist/module/errors/module-already-registered.error.js +0 -13
  663. package/dist/module/errors/module-already-registered.error.js.map +0 -1
  664. package/dist/module/errors/module-circular-dependency.error.d.ts +0 -11
  665. package/dist/module/errors/module-circular-dependency.error.d.ts.map +0 -1
  666. package/dist/module/errors/module-circular-dependency.error.js +0 -14
  667. package/dist/module/errors/module-circular-dependency.error.js.map +0 -1
  668. package/dist/module/errors/module-dependency-not-found.error.d.ts +0 -11
  669. package/dist/module/errors/module-dependency-not-found.error.d.ts.map +0 -1
  670. package/dist/module/errors/module-dependency-not-found.error.js +0 -13
  671. package/dist/module/errors/module-dependency-not-found.error.js.map +0 -1
  672. package/dist/module/index.d.ts +0 -4
  673. package/dist/module/index.d.ts.map +0 -1
  674. package/dist/module/index.js +0 -7
  675. package/dist/module/index.js.map +0 -1
  676. package/dist/module/module-registry.d.ts +0 -110
  677. package/dist/module/module-registry.d.ts.map +0 -1
  678. package/dist/module/module-registry.js +0 -299
  679. package/dist/module/module-registry.js.map +0 -1
  680. package/dist/module/module.decorator.d.ts +0 -34
  681. package/dist/module/module.decorator.d.ts.map +0 -1
  682. package/dist/module/module.decorator.js +0 -107
  683. package/dist/module/module.decorator.js.map +0 -1
  684. package/dist/module/types.d.ts +0 -240
  685. package/dist/module/types.d.ts.map +0 -1
  686. package/dist/module/types.js +0 -8
  687. package/dist/module/types.js.map +0 -1
  688. package/dist/openapi/index.d.ts +0 -5
  689. package/dist/openapi/index.d.ts.map +0 -1
  690. package/dist/openapi/index.js +0 -7
  691. package/dist/openapi/index.js.map +0 -1
  692. package/dist/openapi/openapi.module.d.ts +0 -52
  693. package/dist/openapi/openapi.module.d.ts.map +0 -1
  694. package/dist/openapi/openapi.module.js +0 -109
  695. package/dist/openapi/openapi.module.js.map +0 -1
  696. package/dist/openapi/openapi.tokens.d.ts +0 -12
  697. package/dist/openapi/openapi.tokens.d.ts.map +0 -1
  698. package/dist/openapi/openapi.tokens.js +0 -12
  699. package/dist/openapi/openapi.tokens.js.map +0 -1
  700. package/dist/openapi/services/index.d.ts +0 -3
  701. package/dist/openapi/services/index.d.ts.map +0 -1
  702. package/dist/openapi/services/index.js +0 -3
  703. package/dist/openapi/services/index.js.map +0 -1
  704. package/dist/openapi/services/openapi-config.service.d.ts +0 -43
  705. package/dist/openapi/services/openapi-config.service.d.ts.map +0 -1
  706. package/dist/openapi/services/openapi-config.service.js +0 -98
  707. package/dist/openapi/services/openapi-config.service.js.map +0 -1
  708. package/dist/openapi/services/openapi.service.d.ts +0 -52
  709. package/dist/openapi/services/openapi.service.d.ts.map +0 -1
  710. package/dist/openapi/services/openapi.service.js +0 -231
  711. package/dist/openapi/services/openapi.service.js.map +0 -1
  712. package/dist/openapi/types.d.ts +0 -84
  713. package/dist/openapi/types.d.ts.map +0 -1
  714. package/dist/openapi/types.js +0 -2
  715. package/dist/openapi/types.js.map +0 -1
  716. package/dist/queue/consumer-registry.d.ts +0 -77
  717. package/dist/queue/consumer-registry.d.ts.map +0 -1
  718. package/dist/queue/consumer-registry.js +0 -110
  719. package/dist/queue/consumer-registry.js.map +0 -1
  720. package/dist/queue/decorators/index.d.ts +0 -2
  721. package/dist/queue/decorators/index.d.ts.map +0 -1
  722. package/dist/queue/decorators/index.js +0 -2
  723. package/dist/queue/decorators/index.js.map +0 -1
  724. package/dist/queue/decorators/inject-queue.decorator.d.ts +0 -31
  725. package/dist/queue/decorators/inject-queue.decorator.d.ts.map +0 -1
  726. package/dist/queue/decorators/inject-queue.decorator.js +0 -33
  727. package/dist/queue/decorators/inject-queue.decorator.js.map +0 -1
  728. package/dist/queue/errors/index.d.ts +0 -3
  729. package/dist/queue/errors/index.d.ts.map +0 -1
  730. package/dist/queue/errors/index.js +0 -3
  731. package/dist/queue/errors/index.js.map +0 -1
  732. package/dist/queue/errors/queue-binding-not-found.error.d.ts +0 -12
  733. package/dist/queue/errors/queue-binding-not-found.error.d.ts.map +0 -1
  734. package/dist/queue/errors/queue-binding-not-found.error.js +0 -14
  735. package/dist/queue/errors/queue-binding-not-found.error.js.map +0 -1
  736. package/dist/queue/errors/queue-provider-not-supported.error.d.ts +0 -13
  737. package/dist/queue/errors/queue-provider-not-supported.error.d.ts.map +0 -1
  738. package/dist/queue/errors/queue-provider-not-supported.error.js +0 -15
  739. package/dist/queue/errors/queue-provider-not-supported.error.js.map +0 -1
  740. package/dist/queue/index.d.ts +0 -14
  741. package/dist/queue/index.d.ts.map +0 -1
  742. package/dist/queue/index.js +0 -21
  743. package/dist/queue/index.js.map +0 -1
  744. package/dist/queue/providers/cloudflare-queue.provider.d.ts +0 -42
  745. package/dist/queue/providers/cloudflare-queue.provider.d.ts.map +0 -1
  746. package/dist/queue/providers/cloudflare-queue.provider.js +0 -73
  747. package/dist/queue/providers/cloudflare-queue.provider.js.map +0 -1
  748. package/dist/queue/providers/index.d.ts +0 -4
  749. package/dist/queue/providers/index.d.ts.map +0 -1
  750. package/dist/queue/providers/index.js +0 -4
  751. package/dist/queue/providers/index.js.map +0 -1
  752. package/dist/queue/providers/queue-provider.interface.d.ts +0 -34
  753. package/dist/queue/providers/queue-provider.interface.d.ts.map +0 -1
  754. package/dist/queue/providers/queue-provider.interface.js +0 -2
  755. package/dist/queue/providers/queue-provider.interface.js.map +0 -1
  756. package/dist/queue/providers/sync-queue.provider.d.ts +0 -48
  757. package/dist/queue/providers/sync-queue.provider.d.ts.map +0 -1
  758. package/dist/queue/providers/sync-queue.provider.js +0 -89
  759. package/dist/queue/providers/sync-queue.provider.js.map +0 -1
  760. package/dist/queue/queue-consumer.d.ts +0 -62
  761. package/dist/queue/queue-consumer.d.ts.map +0 -1
  762. package/dist/queue/queue-consumer.js +0 -2
  763. package/dist/queue/queue-consumer.js.map +0 -1
  764. package/dist/queue/queue-manager.d.ts +0 -36
  765. package/dist/queue/queue-manager.d.ts.map +0 -1
  766. package/dist/queue/queue-manager.js +0 -80
  767. package/dist/queue/queue-manager.js.map +0 -1
  768. package/dist/queue/queue-name.d.ts +0 -50
  769. package/dist/queue/queue-name.d.ts.map +0 -1
  770. package/dist/queue/queue-name.js +0 -21
  771. package/dist/queue/queue-name.js.map +0 -1
  772. package/dist/queue/queue-registry.d.ts +0 -46
  773. package/dist/queue/queue-registry.d.ts.map +0 -1
  774. package/dist/queue/queue-registry.js +0 -78
  775. package/dist/queue/queue-registry.js.map +0 -1
  776. package/dist/queue/queue-sender.d.ts +0 -38
  777. package/dist/queue/queue-sender.d.ts.map +0 -1
  778. package/dist/queue/queue-sender.interface.d.ts +0 -46
  779. package/dist/queue/queue-sender.interface.d.ts.map +0 -1
  780. package/dist/queue/queue-sender.interface.js +0 -2
  781. package/dist/queue/queue-sender.interface.js.map +0 -1
  782. package/dist/queue/queue-sender.js +0 -54
  783. package/dist/queue/queue-sender.js.map +0 -1
  784. package/dist/queue/queue.module.d.ts +0 -80
  785. package/dist/queue/queue.module.d.ts.map +0 -1
  786. package/dist/queue/queue.module.js +0 -113
  787. package/dist/queue/queue.module.js.map +0 -1
  788. package/dist/queue/queue.tokens.d.ts +0 -7
  789. package/dist/queue/queue.tokens.d.ts.map +0 -1
  790. package/dist/queue/queue.tokens.js +0 -6
  791. package/dist/queue/queue.tokens.js.map +0 -1
  792. package/dist/queue/services/index.d.ts +0 -2
  793. package/dist/queue/services/index.d.ts.map +0 -1
  794. package/dist/queue/services/index.js +0 -2
  795. package/dist/queue/services/index.js.map +0 -1
  796. package/dist/queue/services/queue-provider-factory.d.ts +0 -41
  797. package/dist/queue/services/queue-provider-factory.d.ts.map +0 -1
  798. package/dist/queue/services/queue-provider-factory.js +0 -78
  799. package/dist/queue/services/queue-provider-factory.js.map +0 -1
  800. package/dist/router/constants.d.ts +0 -87
  801. package/dist/router/constants.d.ts.map +0 -1
  802. package/dist/router/constants.js +0 -69
  803. package/dist/router/constants.js.map +0 -1
  804. package/dist/router/controller.d.ts +0 -56
  805. package/dist/router/controller.d.ts.map +0 -1
  806. package/dist/router/controller.js +0 -2
  807. package/dist/router/controller.js.map +0 -1
  808. package/dist/router/decorators/controller.decorator.d.ts +0 -46
  809. package/dist/router/decorators/controller.decorator.d.ts.map +0 -1
  810. package/dist/router/decorators/controller.decorator.js +0 -70
  811. package/dist/router/decorators/controller.decorator.js.map +0 -1
  812. package/dist/router/decorators/http-method.decorator.d.ts +0 -83
  813. package/dist/router/decorators/http-method.decorator.d.ts.map +0 -1
  814. package/dist/router/decorators/http-method.decorator.js +0 -113
  815. package/dist/router/decorators/http-method.decorator.js.map +0 -1
  816. package/dist/router/decorators/index.d.ts +0 -4
  817. package/dist/router/decorators/index.d.ts.map +0 -1
  818. package/dist/router/decorators/index.js +0 -6
  819. package/dist/router/decorators/index.js.map +0 -1
  820. package/dist/router/decorators/route.decorator.d.ts +0 -90
  821. package/dist/router/decorators/route.decorator.d.ts.map +0 -1
  822. package/dist/router/decorators/route.decorator.js +0 -102
  823. package/dist/router/decorators/route.decorator.js.map +0 -1
  824. package/dist/router/errors/controller-method-not-found.error.d.ts +0 -11
  825. package/dist/router/errors/controller-method-not-found.error.d.ts.map +0 -1
  826. package/dist/router/errors/controller-method-not-found.error.js +0 -13
  827. package/dist/router/errors/controller-method-not-found.error.js.map +0 -1
  828. package/dist/router/errors/controller-registration.error.d.ts +0 -15
  829. package/dist/router/errors/controller-registration.error.d.ts.map +0 -1
  830. package/dist/router/errors/controller-registration.error.js +0 -20
  831. package/dist/router/errors/controller-registration.error.js.map +0 -1
  832. package/dist/router/errors/hono-app-already-configured.error.d.ts +0 -10
  833. package/dist/router/errors/hono-app-already-configured.error.d.ts.map +0 -1
  834. package/dist/router/errors/hono-app-already-configured.error.js +0 -12
  835. package/dist/router/errors/hono-app-already-configured.error.js.map +0 -1
  836. package/dist/router/errors/index.d.ts +0 -8
  837. package/dist/router/errors/index.d.ts.map +0 -1
  838. package/dist/router/errors/index.js +0 -8
  839. package/dist/router/errors/index.js.map +0 -1
  840. package/dist/router/errors/openapi-route-registration.error.d.ts +0 -17
  841. package/dist/router/errors/openapi-route-registration.error.d.ts.map +0 -1
  842. package/dist/router/errors/openapi-route-registration.error.js +0 -19
  843. package/dist/router/errors/openapi-route-registration.error.js.map +0 -1
  844. package/dist/router/errors/openapi-validation.error.d.ts +0 -19
  845. package/dist/router/errors/openapi-validation.error.d.ts.map +0 -1
  846. package/dist/router/errors/openapi-validation.error.js +0 -21
  847. package/dist/router/errors/openapi-validation.error.js.map +0 -1
  848. package/dist/router/errors/route-not-found.error.d.ts +0 -11
  849. package/dist/router/errors/route-not-found.error.d.ts.map +0 -1
  850. package/dist/router/errors/route-not-found.error.js +0 -13
  851. package/dist/router/errors/route-not-found.error.js.map +0 -1
  852. package/dist/router/errors/schema-validation.error.d.ts +0 -11
  853. package/dist/router/errors/schema-validation.error.d.ts.map +0 -1
  854. package/dist/router/errors/schema-validation.error.js +0 -17
  855. package/dist/router/errors/schema-validation.error.js.map +0 -1
  856. package/dist/router/hono-app.d.ts +0 -38
  857. package/dist/router/hono-app.d.ts.map +0 -1
  858. package/dist/router/hono-app.js +0 -126
  859. package/dist/router/hono-app.js.map +0 -1
  860. package/dist/router/index.d.ts +0 -16
  861. package/dist/router/index.d.ts.map +0 -1
  862. package/dist/router/index.js +0 -21
  863. package/dist/router/index.js.map +0 -1
  864. package/dist/router/middleware/index.d.ts +0 -2
  865. package/dist/router/middleware/index.d.ts.map +0 -1
  866. package/dist/router/middleware/index.js +0 -4
  867. package/dist/router/middleware/index.js.map +0 -1
  868. package/dist/router/middleware/logger.middleware.d.ts +0 -19
  869. package/dist/router/middleware/logger.middleware.d.ts.map +0 -1
  870. package/dist/router/middleware/logger.middleware.js +0 -32
  871. package/dist/router/middleware/logger.middleware.js.map +0 -1
  872. package/dist/router/middleware.interface.d.ts +0 -38
  873. package/dist/router/middleware.interface.d.ts.map +0 -1
  874. package/dist/router/middleware.interface.js +0 -2
  875. package/dist/router/middleware.interface.js.map +0 -1
  876. package/dist/router/router-context.d.ts +0 -143
  877. package/dist/router/router-context.d.ts.map +0 -1
  878. package/dist/router/router-context.js +0 -179
  879. package/dist/router/router-context.js.map +0 -1
  880. package/dist/router/router.tokens.d.ts +0 -11
  881. package/dist/router/router.tokens.d.ts.map +0 -1
  882. package/dist/router/router.tokens.js +0 -11
  883. package/dist/router/router.tokens.js.map +0 -1
  884. package/dist/router/schemas/common.schemas.d.ts +0 -148
  885. package/dist/router/schemas/common.schemas.d.ts.map +0 -1
  886. package/dist/router/schemas/common.schemas.js +0 -88
  887. package/dist/router/schemas/common.schemas.js.map +0 -1
  888. package/dist/router/schemas/index.d.ts +0 -2
  889. package/dist/router/schemas/index.d.ts.map +0 -1
  890. package/dist/router/schemas/index.js +0 -2
  891. package/dist/router/schemas/index.js.map +0 -1
  892. package/dist/router/services/index.d.ts +0 -6
  893. package/dist/router/services/index.d.ts.map +0 -1
  894. package/dist/router/services/index.js +0 -6
  895. package/dist/router/services/index.js.map +0 -1
  896. package/dist/router/services/route-registration.service.d.ts +0 -129
  897. package/dist/router/services/route-registration.service.d.ts.map +0 -1
  898. package/dist/router/services/route-registration.service.js +0 -700
  899. package/dist/router/services/route-registration.service.js.map +0 -1
  900. package/dist/router/types.d.ts +0 -187
  901. package/dist/router/types.d.ts.map +0 -1
  902. package/dist/router/types.js +0 -2
  903. package/dist/router/types.js.map +0 -1
  904. package/dist/storage/contracts/delete-file.input.d.ts +0 -7
  905. package/dist/storage/contracts/delete-file.input.d.ts.map +0 -1
  906. package/dist/storage/contracts/delete-file.input.js +0 -6
  907. package/dist/storage/contracts/delete-file.input.js.map +0 -1
  908. package/dist/storage/contracts/download-result.d.ts +0 -28
  909. package/dist/storage/contracts/download-result.d.ts.map +0 -1
  910. package/dist/storage/contracts/download-result.js +0 -2
  911. package/dist/storage/contracts/download-result.js.map +0 -1
  912. package/dist/storage/contracts/file-exists.input.d.ts +0 -7
  913. package/dist/storage/contracts/file-exists.input.d.ts.map +0 -1
  914. package/dist/storage/contracts/file-exists.input.js +0 -6
  915. package/dist/storage/contracts/file-exists.input.js.map +0 -1
  916. package/dist/storage/contracts/get-presigned-url.input.d.ts +0 -26
  917. package/dist/storage/contracts/get-presigned-url.input.d.ts.map +0 -1
  918. package/dist/storage/contracts/get-presigned-url.input.js +0 -14
  919. package/dist/storage/contracts/get-presigned-url.input.js.map +0 -1
  920. package/dist/storage/contracts/index.d.ts +0 -6
  921. package/dist/storage/contracts/index.d.ts.map +0 -1
  922. package/dist/storage/contracts/index.js +0 -6
  923. package/dist/storage/contracts/index.js.map +0 -1
  924. package/dist/storage/contracts/upload-file.input.d.ts +0 -34
  925. package/dist/storage/contracts/upload-file.input.d.ts.map +0 -1
  926. package/dist/storage/contracts/upload-file.input.js +0 -10
  927. package/dist/storage/contracts/upload-file.input.js.map +0 -1
  928. package/dist/storage/dom.polyfill.d.ts +0 -2
  929. package/dist/storage/dom.polyfill.d.ts.map +0 -1
  930. package/dist/storage/dom.polyfill.js +0 -30
  931. package/dist/storage/dom.polyfill.js.map +0 -1
  932. package/dist/storage/errors/disk-not-configured.error.d.ts +0 -5
  933. package/dist/storage/errors/disk-not-configured.error.d.ts.map +0 -1
  934. package/dist/storage/errors/disk-not-configured.error.js +0 -7
  935. package/dist/storage/errors/disk-not-configured.error.js.map +0 -1
  936. package/dist/storage/errors/file-not-found.error.d.ts +0 -5
  937. package/dist/storage/errors/file-not-found.error.d.ts.map +0 -1
  938. package/dist/storage/errors/file-not-found.error.js +0 -8
  939. package/dist/storage/errors/file-not-found.error.js.map +0 -1
  940. package/dist/storage/errors/file-too-large.error.d.ts +0 -5
  941. package/dist/storage/errors/file-too-large.error.d.ts.map +0 -1
  942. package/dist/storage/errors/file-too-large.error.js +0 -11
  943. package/dist/storage/errors/file-too-large.error.js.map +0 -1
  944. package/dist/storage/errors/index.d.ts +0 -9
  945. package/dist/storage/errors/index.d.ts.map +0 -1
  946. package/dist/storage/errors/index.js +0 -9
  947. package/dist/storage/errors/index.js.map +0 -1
  948. package/dist/storage/errors/invalid-disk.error.d.ts +0 -5
  949. package/dist/storage/errors/invalid-disk.error.d.ts.map +0 -1
  950. package/dist/storage/errors/invalid-disk.error.js +0 -8
  951. package/dist/storage/errors/invalid-disk.error.js.map +0 -1
  952. package/dist/storage/errors/invalid-file-type.error.d.ts +0 -5
  953. package/dist/storage/errors/invalid-file-type.error.d.ts.map +0 -1
  954. package/dist/storage/errors/invalid-file-type.error.js +0 -10
  955. package/dist/storage/errors/invalid-file-type.error.js.map +0 -1
  956. package/dist/storage/errors/presigned-url-invalid-expiry.error.d.ts +0 -5
  957. package/dist/storage/errors/presigned-url-invalid-expiry.error.d.ts.map +0 -1
  958. package/dist/storage/errors/presigned-url-invalid-expiry.error.js +0 -12
  959. package/dist/storage/errors/presigned-url-invalid-expiry.error.js.map +0 -1
  960. package/dist/storage/errors/storage-provider-not-supported.error.d.ts +0 -5
  961. package/dist/storage/errors/storage-provider-not-supported.error.d.ts.map +0 -1
  962. package/dist/storage/errors/storage-provider-not-supported.error.js +0 -8
  963. package/dist/storage/errors/storage-provider-not-supported.error.js.map +0 -1
  964. package/dist/storage/errors/storage-response-body-missing.error.d.ts +0 -5
  965. package/dist/storage/errors/storage-response-body-missing.error.d.ts.map +0 -1
  966. package/dist/storage/errors/storage-response-body-missing.error.js +0 -8
  967. package/dist/storage/errors/storage-response-body-missing.error.js.map +0 -1
  968. package/dist/storage/index.d.ts +0 -15
  969. package/dist/storage/index.d.ts.map +0 -1
  970. package/dist/storage/index.js +0 -18
  971. package/dist/storage/index.js.map +0 -1
  972. package/dist/storage/providers/s3-multipart-provider.interface.d.ts +0 -194
  973. package/dist/storage/providers/s3-multipart-provider.interface.d.ts.map +0 -1
  974. package/dist/storage/providers/s3-multipart-provider.interface.js +0 -2
  975. package/dist/storage/providers/s3-multipart-provider.interface.js.map +0 -1
  976. package/dist/storage/providers/s3-storage.provider.d.ts +0 -77
  977. package/dist/storage/providers/s3-storage.provider.d.ts.map +0 -1
  978. package/dist/storage/providers/s3-storage.provider.js +0 -310
  979. package/dist/storage/providers/s3-storage.provider.js.map +0 -1
  980. package/dist/storage/providers/storage-provider.interface.d.ts +0 -58
  981. package/dist/storage/providers/storage-provider.interface.d.ts.map +0 -1
  982. package/dist/storage/providers/storage-provider.interface.js +0 -2
  983. package/dist/storage/providers/storage-provider.interface.js.map +0 -1
  984. package/dist/storage/services/storage-manager.service.d.ts +0 -48
  985. package/dist/storage/services/storage-manager.service.d.ts.map +0 -1
  986. package/dist/storage/services/storage-manager.service.js +0 -111
  987. package/dist/storage/services/storage-manager.service.js.map +0 -1
  988. package/dist/storage/services/storage.service.d.ts +0 -137
  989. package/dist/storage/services/storage.service.d.ts.map +0 -1
  990. package/dist/storage/services/storage.service.js +0 -229
  991. package/dist/storage/services/storage.service.js.map +0 -1
  992. package/dist/storage/storage.module.d.ts +0 -52
  993. package/dist/storage/storage.module.d.ts.map +0 -1
  994. package/dist/storage/storage.module.js +0 -81
  995. package/dist/storage/storage.module.js.map +0 -1
  996. package/dist/storage/storage.tokens.d.ts +0 -10
  997. package/dist/storage/storage.tokens.d.ts.map +0 -1
  998. package/dist/storage/storage.tokens.js +0 -10
  999. package/dist/storage/storage.tokens.js.map +0 -1
  1000. package/dist/storage/types.d.ts +0 -31
  1001. package/dist/storage/types.d.ts.map +0 -1
  1002. package/dist/storage/types.js +0 -2
  1003. package/dist/storage/types.js.map +0 -1
  1004. package/dist/stratal.d.ts +0 -39
  1005. package/dist/stratal.d.ts.map +0 -1
  1006. package/dist/stratal.js +0 -77
  1007. package/dist/stratal.js.map +0 -1
  1008. package/dist/types.d.ts.map +0 -1
  1009. package/dist/types.js +0 -2
  1010. package/dist/types.js.map +0 -1
  1011. package/dist/websocket/decorators/gateway.decorator.d.ts +0 -39
  1012. package/dist/websocket/decorators/gateway.decorator.d.ts.map +0 -1
  1013. package/dist/websocket/decorators/gateway.decorator.js +0 -55
  1014. package/dist/websocket/decorators/gateway.decorator.js.map +0 -1
  1015. package/dist/websocket/decorators/index.d.ts +0 -3
  1016. package/dist/websocket/decorators/index.d.ts.map +0 -1
  1017. package/dist/websocket/decorators/index.js +0 -3
  1018. package/dist/websocket/decorators/index.js.map +0 -1
  1019. package/dist/websocket/decorators/ws-event.decorator.d.ts +0 -59
  1020. package/dist/websocket/decorators/ws-event.decorator.d.ts.map +0 -1
  1021. package/dist/websocket/decorators/ws-event.decorator.js +0 -94
  1022. package/dist/websocket/decorators/ws-event.decorator.js.map +0 -1
  1023. package/dist/websocket/errors/websocket-body-not-available.error.d.ts +0 -5
  1024. package/dist/websocket/errors/websocket-body-not-available.error.d.ts.map +0 -1
  1025. package/dist/websocket/errors/websocket-body-not-available.error.js +0 -7
  1026. package/dist/websocket/errors/websocket-body-not-available.error.js.map +0 -1
  1027. package/dist/websocket/errors/websocket-duplicate-event-handler.error.d.ts +0 -5
  1028. package/dist/websocket/errors/websocket-duplicate-event-handler.error.d.ts.map +0 -1
  1029. package/dist/websocket/errors/websocket-duplicate-event-handler.error.js +0 -7
  1030. package/dist/websocket/errors/websocket-duplicate-event-handler.error.js.map +0 -1
  1031. package/dist/websocket/gateway-context.d.ts +0 -51
  1032. package/dist/websocket/gateway-context.d.ts.map +0 -1
  1033. package/dist/websocket/gateway-context.js +0 -66
  1034. package/dist/websocket/gateway-context.js.map +0 -1
  1035. package/dist/websocket/index.d.ts +0 -7
  1036. package/dist/websocket/index.d.ts.map +0 -1
  1037. package/dist/websocket/index.js +0 -5
  1038. package/dist/websocket/index.js.map +0 -1
  1039. package/dist/websocket/types.d.ts +0 -7
  1040. package/dist/websocket/types.d.ts.map +0 -1
  1041. package/dist/websocket/types.js +0 -2
  1042. package/dist/websocket/types.js.map +0 -1
  1043. package/dist/workers/index.d.ts +0 -5
  1044. package/dist/workers/index.d.ts.map +0 -1
  1045. package/dist/workers/index.js +0 -5
  1046. package/dist/workers/index.js.map +0 -1
  1047. package/dist/workers/run-in-scope.d.ts +0 -9
  1048. package/dist/workers/run-in-scope.d.ts.map +0 -1
  1049. package/dist/workers/run-in-scope.js +0 -13
  1050. package/dist/workers/run-in-scope.js.map +0 -1
  1051. package/dist/workers/stratal-durable-object.d.ts +0 -28
  1052. package/dist/workers/stratal-durable-object.d.ts.map +0 -1
  1053. package/dist/workers/stratal-durable-object.js +0 -34
  1054. package/dist/workers/stratal-durable-object.js.map +0 -1
  1055. package/dist/workers/stratal-worker-entrypoint.d.ts +0 -27
  1056. package/dist/workers/stratal-worker-entrypoint.d.ts.map +0 -1
  1057. package/dist/workers/stratal-worker-entrypoint.js +0 -28
  1058. package/dist/workers/stratal-worker-entrypoint.js.map +0 -1
  1059. package/dist/workers/stratal-workflow.d.ts +0 -27
  1060. package/dist/workers/stratal-workflow.d.ts.map +0 -1
  1061. package/dist/workers/stratal-workflow.js +0 -28
  1062. package/dist/workers/stratal-workflow.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.module-qNrpIVts.mjs","names":[],"sources":["../src/i18n/middleware/i18n-context.middleware.ts","../src/i18n/middleware/locale-extraction.middleware.ts","../src/openapi/openapi.tokens.ts","../src/openapi/services/openapi-config.service.ts","../src/i18n/messages/index.ts","../src/i18n/setup.ts","../src/i18n/i18n.options.ts","../src/i18n/errors/locale-not-supported.error.ts","../src/i18n/errors/translation-missing.error.ts","../src/router/decorators/http-method.decorator.ts","../src/router/decorators/route.decorator.ts","../src/openapi/services/openapi.service.ts","../src/openapi/openapi.module.ts","../src/router/errors/controller-method-not-found.error.ts","../src/router/errors/hono-app-already-configured.error.ts","../src/router/errors/controller-registration.error.ts","../src/router/errors/openapi-route-registration.error.ts","../src/router/errors/openapi-validation.error.ts","../src/router/errors/route-not-found.error.ts","../src/router/errors/schema-validation.error.ts","../src/router/middleware/logger.middleware.ts","../src/router/schemas/common.schemas.ts","../src/router/services/route-registration.service.ts","../src/router/hono-app.ts","../src/i18n/services/i18n.service.ts","../src/i18n/services/message-loader.service.ts","../src/i18n/i18n.module.ts"],"sourcesContent":["/**\n * I18n Context Middleware\n *\n * Sets up AsyncLocalStorage context for Zod i18n validation.\n * Must run after LocaleExtractionMiddleware sets the locale.\n */\n\nimport { inject } from 'tsyringe'\nimport { Transient } from '../../di/decorators'\nimport type { Middleware } from '../../router/middleware.interface'\nimport type { RouterContext } from '../../router/router-context'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport type { I18nService } from '../services/i18n.service'\nimport { runWithErrorMapContext } from '../validation'\n\n@Transient()\nexport class I18nContextMiddleware implements Middleware {\n constructor(\n @inject(I18N_TOKENS.I18nService) private readonly i18n: I18nService\n ) {}\n\n async handle(ctx: RouterContext, next: () => Promise<void>): Promise<void> {\n const locale = ctx.getLocale()\n\n await runWithErrorMapContext(\n {\n t: (key, params) => this.i18n.t(key, params as Record<string, string | number> | undefined),\n locale,\n },\n () => next()\n )\n }\n}\n","/**\n * Locale Extraction Middleware\n *\n * Extracts locale from X-Locale header and sets it on RouterContext.\n * Validates against available locales from MessageLoaderService.\n */\n\nimport { inject } from 'tsyringe'\nimport { Transient } from '../../di/decorators'\nimport type { Middleware } from '../../router/middleware.interface'\nimport type { RouterContext } from '../../router/router-context'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport type { MessageLoaderService } from '../services/message-loader.service'\n\n@Transient()\nexport class LocaleExtractionMiddleware implements Middleware {\n\n constructor(\n @inject(I18N_TOKENS.MessageLoader) private readonly loader: MessageLoaderService,\n ) {\n }\n\n async handle(ctx: RouterContext, next: () => Promise<void>): Promise<void> {\n const locale = this.extractLocale(ctx)\n ctx.setLocale(locale)\n await next()\n }\n\n /**\n * Extract and validate locale from X-Locale header\n */\n private extractLocale(ctx: RouterContext): string {\n const requestedLocale = ctx.header('x-locale')?.toLowerCase()\n\n if (requestedLocale && this.loader.isLocaleSupported(requestedLocale)) {\n return requestedLocale\n }\n\n return this.loader.getDefaultLocale()\n }\n}\n","/**\n * OpenAPI Module DI Tokens\n */\nexport const OPENAPI_TOKENS = {\n /** Static options provided via forRoot() */\n Options: Symbol.for('stratal:openapi:options'),\n\n /** Request-scoped config service that supports runtime overrides */\n ConfigService: Symbol.for('stratal:openapi:config:service'),\n\n /** OpenAPI service that generates specs and serves endpoints */\n OpenAPIService: Symbol.for('stratal:openapi:service'),\n} as const\n","import { inject } from 'tsyringe'\nimport { Transient } from '../../di/decorators'\nimport { OPENAPI_TOKENS } from '../openapi.tokens'\nimport type {\n IOpenAPIConfigService,\n OpenAPIConfigOverride,\n OpenAPIEffectiveConfig,\n OpenAPIModuleOptions\n} from '../types'\n\n/**\n * OpenAPI Config Service\n *\n * Request-scoped service that manages OpenAPI configuration for the current request.\n * Supports runtime overrides via middleware while preserving base configuration.\n *\n * @example\n * ```typescript\n * // In middleware (e.g., RouteAccessMiddleware)\n * constructor(\n * @inject(OPENAPI_TOKENS.ConfigService) private openAPIConfig: IOpenAPIConfigService\n * ) {}\n *\n * async handle(ctx, next) {\n * this.openAPIConfig.override({\n * info: { title: 'Custom API' },\n * routeFilter: (path) => shouldInclude(path)\n * })\n * await next()\n * }\n * ```\n */\n@Transient(OPENAPI_TOKENS.ConfigService)\nexport class OpenAPIConfigService implements IOpenAPIConfigService {\n private overrides: OpenAPIConfigOverride[] = []\n\n constructor(\n @inject(OPENAPI_TOKENS.Options, { isOptional: true }) private baseOptions?: OpenAPIModuleOptions\n ) { }\n\n /**\n * Add configuration override for this request\n * Overrides are merged in the order they are added\n */\n override(config: OpenAPIConfigOverride): void {\n this.overrides.push(config)\n }\n\n /**\n * Get effective configuration (base merged with all overrides)\n */\n getEffectiveConfig(): OpenAPIEffectiveConfig {\n // Start with base options and defaults\n let effective: OpenAPIEffectiveConfig = {\n jsonPath: this.baseOptions?.jsonPath ?? '/api/openapi.json',\n ui: this.baseOptions?.ui,\n info: {\n title: this.baseOptions?.info?.title ?? 'API',\n version: this.baseOptions?.info?.version ?? '1.0.0',\n description: this.baseOptions?.info?.description\n },\n securitySchemes: this.baseOptions?.securitySchemes\n }\n\n // Merge each override in order\n for (const override of this.overrides) {\n effective = this.mergeConfig(effective, override)\n }\n\n return effective\n }\n\n /**\n * Merge override into effective config\n * Info is shallow-merged, routeFilter is replaced\n */\n private mergeConfig(\n base: OpenAPIEffectiveConfig,\n override: OpenAPIConfigOverride\n ): OpenAPIEffectiveConfig {\n return {\n ...base,\n info: {\n ...base.info,\n ...(override.info && {\n title: override.info.title ?? base.info.title,\n version: override.info.version ?? base.info.version,\n description: override.info.description ?? base.info.description\n })\n },\n // Last routeFilter wins\n routeFilter: override.routeFilter ?? base.routeFilter\n }\n }\n}\n","/**\n * Core Messages\n *\n * Messages used by packages/modules infrastructure.\n * These are automatically merged with application-specific messages.\n */\n\nimport * as en from './en'\n\n/**\n * All locale messages\n * Explicitly import and export (no filesystem scanning - Cloudflare Workers compatible)\n */\nexport const messages = { en } as const\n\n/**\n * Type for all messages\n */\nexport type Messages = typeof messages\n\n/**\n * Get messages for all locales\n */\nexport function getMessages(): Record<string, Record<string, unknown>> {\n return messages\n}\n\n/**\n * Get available locales\n */\nexport function getLocales(): string[] {\n return Object.keys(messages)\n}\n","/**\n * I18n Setup - Message Compiler Registration\n *\n * Registers a JIT (Just-In-Time) message compiler for @intlify/core-base\n * that works in Cloudflare Workers edge runtime.\n *\n * This must be called ONCE at application startup, before any I18nService instances are created.\n */\n\nimport { compile, registerMessageCompiler } from '@intlify/core-base'\n\nlet isRegistered = false\n\n/**\n * Setup JIT message compiler for i18n\n *\n * Registers a message compiler that uses JIT compilation mode.\n * In @intlify/core-base v10+, JIT mode is enabled by default, which generates\n * AST (Abstract Syntax Tree) instead of JavaScript code, making it compatible\n * with CSP-restricted environments like Cloudflare Workers.\n *\n * **IMPORTANT:** Call this function once at application startup before creating\n * any I18nService instances. Safe to call multiple times (only registers once).\n *\n * @example\n * ```typescript\n * // In application entry point (before app.initialize())\n * setupI18nCompiler()\n * ```\n */\nexport function setupI18nCompiler(): void {\n // Guard against multiple registrations\n if (isRegistered) {\n return\n }\n\n // Register the compile function from @intlify/core-base as the message compiler\n // In v11+, compile() uses JIT mode by default, generating AST instead of JavaScript code\n // This avoids CSP violations (no eval/new Function) in Cloudflare Workers\n registerMessageCompiler(compile)\n\n isRegistered = true\n}\n","/**\n * I18n Module Options\n *\n * Configuration options for the I18n dynamic module.\n * Use with I18nModule.forRoot() to configure i18n for your application.\n */\n\n/**\n * Options for configuring the I18n module\n *\n * @example\n * ```typescript\n * I18nModule.forRoot({\n * defaultLocale: 'en',\n * fallbackLocale: 'en',\n * locales: ['en', 'fr'],\n * messages: {\n * en: { common: { hello: 'Hello' } },\n * fr: { common: { hello: 'Bonjour' } }\n * }\n * })\n * ```\n */\nexport interface I18nModuleOptions {\n /**\n * Default locale for the application\n * Used when no locale is specified in request headers\n * @default 'en'\n */\n defaultLocale?: string\n\n /**\n * Fallback locale when translation is missing\n * @default 'en'\n */\n fallbackLocale?: string\n\n /**\n * List of supported locales\n * Request locales not in this list will fall back to defaultLocale\n */\n locales?: string[]\n\n /**\n * Application-specific messages to merge with system messages\n * Keys are locale codes, values are message objects\n */\n messages?: Record<string, Record<string, unknown>>\n}\n\n/**\n * Resolved options with all defaults applied\n * Used internally by I18n services\n */\nexport interface ResolvedI18nOptions {\n defaultLocale: string\n fallbackLocale: string\n locales: string[]\n messages: Record<string, Record<string, unknown>>\n}\n\n/**\n * Resolve I18n options with defaults\n */\nexport function resolveI18nOptions(options?: I18nModuleOptions): ResolvedI18nOptions {\n return {\n defaultLocale: options?.defaultLocale ?? 'en',\n fallbackLocale: options?.fallbackLocale ?? 'en',\n locales: options?.locales ?? ['en'],\n messages: options?.messages ?? {}\n }\n}\n","/**\n * Locale Not Supported Error\n * Thrown when an unsupported locale is requested\n *\n * HTTP Status: 500 Internal Server Error\n * Error Code: 9301\n */\n\nimport { ERROR_CODES } from '../../errors'\nimport { ApplicationError } from '../../errors'\n\nexport class LocaleNotSupportedError extends ApplicationError {\n constructor(locale: string, supportedLocales: string[]) {\n super(\n 'errors.localeNotSupported',\n ERROR_CODES.I18N.LOCALE_NOT_SUPPORTED,\n { locale, supportedLocales: supportedLocales.join(', ') }\n )\n }\n}\n","/**\n * Translation Missing Error\n * Thrown when a translation key is missing from all locales\n *\n * HTTP Status: 500 Internal Server Error\n * Error Code: 9300\n */\n\nimport { ApplicationError, ERROR_CODES } from '../../errors'\n\nexport class TranslationMissingError extends ApplicationError {\n constructor(key: string, locale: string) {\n super(\n 'errors.translationMissing',\n ERROR_CODES.I18N.TRANSLATION_MISSING,\n { key, locale }\n )\n }\n}\n","import { z } from '../../i18n/validation'\nimport { ROUTE_METADATA_KEYS } from '../constants'\nimport type { HttpMethod, HttpRouteMetadata, RouteConfig } from '../types'\n\n/**\n * Creates an HTTP method decorator factory for the given HTTP method.\n *\n * The returned decorator stores {@link HttpRouteMetadata} on the method and\n * tracks the method name under {@link ROUTE_METADATA_KEYS.HTTP_DECORATED_METHODS}\n * on the controller prototype so they can be discovered at registration time.\n */\nfunction createHttpMethodDecorator(method: HttpMethod) {\n return function (path: string, config?: RouteConfig) {\n return function (\n target: object,\n propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n const metadata: HttpRouteMetadata = {\n method,\n path,\n config: config ?? { response: z.any() },\n }\n\n Reflect.defineMetadata(\n ROUTE_METADATA_KEYS.HTTP_ROUTE_CONFIG,\n metadata,\n target,\n propertyKey\n )\n\n // Track this method as HTTP-decorated on the prototype\n const existing: string[] =\n (Reflect.getOwnMetadata(ROUTE_METADATA_KEYS.HTTP_DECORATED_METHODS, target) as string[] | undefined) ?? []\n existing.push(propertyKey)\n Reflect.defineMetadata(ROUTE_METADATA_KEYS.HTTP_DECORATED_METHODS, existing, target)\n\n return descriptor\n }\n }\n}\n\n/**\n * Registers a GET route on the controller method.\n *\n * @param path - Route path relative to the controller base path\n * @param config - Optional route configuration (response schema, body, params, etc.)\n *\n * @example\n * ```typescript\n * @Controller('/api/v1/users')\n * class UsersController {\n * @Get('/', { response: z.array(userSchema), summary: 'List users' })\n * async list(ctx: RouterContext) { ... }\n *\n * @Get('/:id', { params: z.object({ id: z.string().uuid() }), response: userSchema })\n * async getUser(ctx: RouterContext) { ... }\n * }\n * ```\n */\nexport const Get = createHttpMethodDecorator('get')\n\n/**\n * Registers a POST route on the controller method.\n *\n * @param path - Route path relative to the controller base path\n * @param config - Optional route configuration (response schema, body, params, etc.)\n *\n * @example\n * ```typescript\n * @Controller('/api/v1/users')\n * class UsersController {\n * @Post('/', { body: createUserSchema, response: userSchema, statusCode: 201 })\n * async createUser(ctx: RouterContext) { ... }\n * }\n * ```\n */\nexport const Post = createHttpMethodDecorator('post')\n\n/**\n * Registers a PUT route on the controller method.\n *\n * @param path - Route path relative to the controller base path\n * @param config - Optional route configuration\n */\nexport const Put = createHttpMethodDecorator('put')\n\n/**\n * Registers a PATCH route on the controller method.\n *\n * @param path - Route path relative to the controller base path\n * @param config - Optional route configuration\n */\nexport const Patch = createHttpMethodDecorator('patch')\n\n/**\n * Registers a DELETE route on the controller method.\n *\n * @param path - Route path relative to the controller base path\n * @param config - Optional route configuration\n */\nexport const Delete = createHttpMethodDecorator('delete')\n\n/**\n * Registers an ALL (any HTTP method) route on the controller method.\n * Routes using @All are automatically hidden from OpenAPI documentation\n * since OpenAPI does not support a catch-all HTTP method.\n *\n * @param path - Route path relative to the controller base path\n * @param config - Optional route configuration\n */\nexport const All = createHttpMethodDecorator('all')\n\n/**\n * Get the HTTP route metadata from a controller method decorated with\n * @Get, @Post, @Put, @Patch, @Delete, or @All.\n *\n * @param target - Controller prototype\n * @param methodName - Name of the method\n * @returns HTTP route metadata or undefined if not decorated\n */\nexport function getHttpRouteMetadata(target: object, methodName: string): HttpRouteMetadata | undefined {\n return Reflect.getMetadata(ROUTE_METADATA_KEYS.HTTP_ROUTE_CONFIG, target, methodName) as HttpRouteMetadata | undefined\n}\n\n/**\n * Get all methods decorated with HTTP method decorators from a controller class.\n *\n * @param ControllerClass - Controller class\n * @returns Array of method names that have HTTP route metadata\n */\nexport function getHttpDecoratedMethods(ControllerClass: new (...args: unknown[]) => object): string[] {\n const prototype = ControllerClass.prototype as object\n return (Reflect.getOwnMetadata(ROUTE_METADATA_KEYS.HTTP_DECORATED_METHODS, prototype) as string[] | undefined) ?? []\n}\n","import { ROUTE_METADATA_KEYS } from '../constants'\nimport type { RouteConfig } from '../types'\n\n/**\n * Decorator to add OpenAPI metadata to a controller method using convention-based routing.\n *\n * **Cannot be mixed with HTTP method decorators** (`@Get`, `@Post`, `@Put`, `@Patch`,\n * `@Delete`, `@All`) in the same controller. Use one pattern or the other.\n *\n * Stores route configuration (schemas, response, tags, security) in metadata.\n * HTTP method, path, and success status code are auto-derived from the method name:\n * - index() → GET /base-path → 200\n * - show() → GET /base-path/:id → 200\n * - create() → POST /base-path → 201\n * - update() → PUT /base-path/:id → 200\n * - patch() → PATCH /base-path/:id → 200\n * - destroy() → DELETE /base-path/:id → 200\n *\n * @param config - Route configuration (schemas, response, tags, security)\n *\n * @example\n * ```typescript\n * @Controller('/api/v1/notes', {\n * tags: ['Notes'],\n * security: ['bearerAuth']\n * })\n * export class NotesController implements Controller {\n * @Route({\n * body: createNoteSchema,\n * response: noteSchema, // 201 auto-derived from 'create' method\n * tags: ['Mutations'],\n * description: 'Create a new note'\n * })\n * async create(ctx: RouterContext): Promise<Response> {\n * // POST /api/v1/notes (auto-derived from method name)\n * // Body schema: createNoteSchema (auto-validated)\n * // Response: 201 → noteSchema (status auto-derived)\n * // Tags: ['Notes', 'Mutations'] (merged with controller)\n * // Security: ['bearerAuth'] (inherited from controller)\n * const body = ctx.body()\n * const note = await this.notesService.create(body)\n * return ctx.json(note, 201)\n * }\n *\n * @Route({\n * query: paginationSchema,\n * response: z.array(noteSchema) // 200 auto-derived from 'index' method\n * })\n * async index(ctx: RouterContext): Promise<Response> {\n * // GET /api/v1/notes (auto-derived)\n * // Query params auto-validated\n * const notes = await this.notesService.list()\n * return ctx.json(notes)\n * }\n *\n * @Route({\n * params: z.object({ id: z.string().uuid() }),\n * response: {\n * schema: noteSchema,\n * description: 'Note details'\n * },\n * security: [] // Override to make public\n * })\n * async show(ctx: RouterContext): Promise<Response> {\n * // GET /api/v1/notes/:id (auto-derived)\n * // URL params auto-validated\n * // Response: 200 → noteSchema (status auto-derived)\n * // Security: [] (public route, override controller security)\n * const id = ctx.param('id')\n * const note = await this.notesService.findById(id)\n * return ctx.json(note)\n * }\n * }\n * ```\n */\nexport function Route(config: Omit<RouteConfig, 'statusCode'>) {\n return function (\n target: object,\n propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n // Store route config metadata on the method\n Reflect.defineMetadata(\n ROUTE_METADATA_KEYS.ROUTE_CONFIG,\n config,\n target,\n propertyKey\n )\n\n return descriptor\n }\n}\n\n/**\n * Get the route configuration from a controller method\n *\n * @param target - Controller instance or prototype\n * @param methodName - Name of the method\n * @returns Route configuration or undefined if not decorated\n */\nexport function getRouteConfig(target: object, methodName: string): RouteConfig | undefined {\n return Reflect.getMetadata(ROUTE_METADATA_KEYS.ROUTE_CONFIG, target, methodName) as RouteConfig | undefined\n}\n\n/**\n * Get all methods with @Route() decorator from a controller\n *\n * @param ControllerClass - Controller class\n * @returns Array of method names that have route config\n */\nexport function getDecoratedMethods(ControllerClass: new (...args: unknown[]) => object): string[] {\n const prototype = ControllerClass.prototype as Record<string, unknown>\n const methodNames = Object.getOwnPropertyNames(prototype).filter(\n name => name !== 'constructor' && typeof prototype[name] === 'function'\n )\n\n return methodNames.filter(methodName =>\n Reflect.hasMetadata(ROUTE_METADATA_KEYS.ROUTE_CONFIG, prototype, methodName)\n )\n}\n","import { swaggerUI } from '@hono/swagger-ui'\nimport { inject } from 'tsyringe'\nimport { Transient } from '../../di/decorators'\nimport type { II18nService } from '../../i18n'\nimport { I18N_TOKENS } from '../../i18n'\nimport type { OpenAPIHono, PathItemObject } from '../../i18n/validation'\nimport { ROUTER_CONTEXT_KEYS, SECURITY_SCHEMES } from '../../router/constants'\nimport type { IController } from '../../router/controller'\nimport { getControllerOptions, getControllerRoute } from '../../router/decorators'\nimport type { RouterEnv } from '../../router/types'\nimport type { Constructor } from '../../types'\nimport { OPENAPI_TOKENS } from '../openapi.tokens'\nimport type { IOpenAPIConfigService, OpenAPIEffectiveConfig } from '../types'\n\n/**\n * RouteInfo for hideFromDocs filtering\n */\ninterface RouteInfo {\n hideFromDocs: boolean\n}\n\n/**\n * OpenAPI Service\n *\n * Generates OpenAPI specifications with support for:\n * - Runtime configuration via OpenAPIConfigService\n * - Route filtering via hideFromDocs and custom routeFilter\n * - i18n support for titles and descriptions\n * - Security scheme definitions\n *\n * Configuration is resolved per-request from OpenAPIConfigService,\n * allowing middleware to override config based on domain context.\n */\n@Transient(OPENAPI_TOKENS.OpenAPIService)\nexport class OpenAPIService {\n private routeInfoMap = new Map<string, RouteInfo>()\n\n constructor(\n @inject(OPENAPI_TOKENS.ConfigService)\n private configService: IOpenAPIConfigService\n ) { }\n\n /**\n * Setup OpenAPI documentation endpoints\n */\n setupEndpoints(app: OpenAPIHono<RouterEnv>, controllers: Constructor<IController>[]): void {\n // Build route info map for hideFromDocs filtering\n this.buildRouteInfoMap(controllers)\n\n const config = this.configService.getEffectiveConfig()\n\n // OpenAPI JSON spec endpoint\n app.get(config.jsonPath, (c) => {\n // Get request-scoped services\n const requestContainer = c.get(ROUTER_CONTEXT_KEYS.REQUEST_CONTAINER)\n const i18n = requestContainer.resolve<II18nService>(I18N_TOKENS.I18nService)\n const requestConfigService = requestContainer.resolve<IOpenAPIConfigService>(\n OPENAPI_TOKENS.ConfigService\n )\n\n // Get effective config (with any middleware overrides)\n const effectiveConfig = requestConfigService.getEffectiveConfig()\n const url = new URL(c.req.raw.url)\n\n // Generate full OpenAPI spec using Hono's built-in generator\n const fullSpec = app.getOpenAPIDocument({\n openapi: '3.0.0',\n info: {\n version: effectiveConfig.info.version,\n title: effectiveConfig.info.title,\n description: effectiveConfig.info.description\n },\n servers: [\n {\n url: `${url.protocol}//${url.host}`,\n description: i18n.t('common.api.serverDescription')\n }\n ]\n })\n\n // Add security schemes\n fullSpec.components ??= {}\n fullSpec.components.securitySchemes = this.getSecuritySchemeDefinitions(i18n)\n\n // Filter routes based on hideFromDocs and custom routeFilter\n fullSpec.paths = this.filterRoutes(\n fullSpec.paths as Record<string, PathItemObject>,\n effectiveConfig\n )\n\n // Filter unreferenced schemas\n if (fullSpec.components.schemas) {\n fullSpec.components.schemas = this.filterSchemas(fullSpec as unknown as Record<string, unknown>) as typeof fullSpec.components.schemas\n }\n\n return c.json(fullSpec)\n })\n\n // Docs UI endpoint\n if (config.ui !== false) {\n const uiPath = config.ui?.path ?? '/api/docs'\n const uiRenderer = config.ui?.renderer\n\n app.get(uiPath, (c, next) => {\n const requestContainer = c.get(ROUTER_CONTEXT_KEYS.REQUEST_CONTAINER)\n const requestConfigService = requestContainer.resolve<IOpenAPIConfigService>(\n OPENAPI_TOKENS.ConfigService\n )\n const effectiveConfig = requestConfigService.getEffectiveConfig()\n const uiContext = { specUrl: effectiveConfig.jsonPath, title: effectiveConfig.info.title }\n\n if (uiRenderer) {\n return uiRenderer(uiContext)(c, next)\n }\n\n return swaggerUI<RouterEnv>({ url: uiContext.specUrl })(c, next)\n })\n }\n }\n\n /**\n * Get localized security scheme definitions\n */\n private getSecuritySchemeDefinitions(i18n: II18nService) {\n return {\n [SECURITY_SCHEMES.BEARER_AUTH]: {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n description: i18n.t('common.api.security.bearerAuth')\n },\n [SECURITY_SCHEMES.API_KEY]: {\n type: 'apiKey',\n in: 'header',\n name: 'X-API-Key',\n description: i18n.t('common.api.security.apiKey')\n },\n [SECURITY_SCHEMES.SESSION_COOKIE]: {\n type: 'apiKey',\n in: 'cookie',\n name: 'session',\n description: i18n.t('common.api.security.sessionCookie')\n }\n } as const\n }\n\n /**\n * Build route info map from controllers\n * Maps route prefixes to their hideFromDocs flag\n */\n private buildRouteInfoMap(controllers: Constructor<IController>[]): void {\n for (const ControllerClass of controllers) {\n const route = getControllerRoute(ControllerClass)\n const options = getControllerOptions(ControllerClass)\n\n if (route) {\n this.routeInfoMap.set(route, {\n hideFromDocs: options?.hideFromDocs ?? false\n })\n }\n }\n }\n\n /**\n * Filter OpenAPI paths based on hideFromDocs and custom routeFilter\n */\n private filterRoutes(\n paths: Record<string, PathItemObject>,\n config: OpenAPIEffectiveConfig\n ): Record<string, PathItemObject> {\n const filteredPaths: Record<string, PathItemObject> = {}\n\n for (const [path, pathItem] of Object.entries(paths)) {\n // 1. Check hideFromDocs (always filtered)\n const routeInfo = this.getRouteInfo(path)\n if (routeInfo.hideFromDocs) {\n continue\n }\n\n // 2. Apply custom routeFilter if provided\n if (config.routeFilter) {\n if (!config.routeFilter(path, pathItem)) {\n continue\n }\n }\n\n filteredPaths[path] = pathItem\n }\n\n return filteredPaths\n }\n\n /**\n * Get route info by matching path against controller routes\n */\n private getRouteInfo(path: string): RouteInfo {\n for (const [route, info] of this.routeInfoMap.entries()) {\n if (path === route || path.startsWith(`${route}/`)) {\n return info\n }\n }\n\n // Default to visible for unmatched routes\n return { hideFromDocs: false }\n }\n\n /**\n * Filter unreferenced schemas from OpenAPI spec\n */\n private filterSchemas(spec: Record<string, unknown>): Record<string, unknown> {\n const referencedSchemas = new Set<string>()\n\n // Collect all schema references from paths\n this.collectSchemaRefs(spec.paths, referencedSchemas)\n\n // Filter schemas to only include referenced ones\n const filteredSchemas: Record<string, unknown> = {}\n const components = spec.components as Record<string, unknown> | undefined\n if (components?.schemas) {\n for (const [schemaName, schemaValue] of Object.entries(components.schemas as Record<string, unknown>)) {\n if (referencedSchemas.has(schemaName)) {\n filteredSchemas[schemaName] = schemaValue\n // Also collect references from this schema (for nested schemas)\n this.collectSchemaRefs(schemaValue, referencedSchemas)\n }\n }\n\n // Second pass to include any schemas referenced by included schemas\n for (const [schemaName, schemaValue] of Object.entries(components.schemas as Record<string, unknown>)) {\n if (referencedSchemas.has(schemaName) && !filteredSchemas[schemaName]) {\n filteredSchemas[schemaName] = schemaValue\n }\n }\n }\n\n return filteredSchemas\n }\n\n /**\n * Recursively collect all schema references from an object\n */\n private collectSchemaRefs(obj: unknown, refs: Set<string>): void {\n if (!obj || typeof obj !== 'object') {\n return\n }\n\n const record = obj as Record<string, unknown>\n\n // Check if this object has a $ref property\n if (record.$ref && typeof record.$ref === 'string') {\n // Extract schema name from $ref (format: #/components/schemas/SchemaName)\n const match = /^#\\/components\\/schemas\\/(.+)$/.exec(record.$ref)\n if (match) {\n refs.add(match[1])\n }\n }\n\n // Recursively check all properties\n if (Array.isArray(obj)) {\n for (const item of obj) {\n this.collectSchemaRefs(item, refs)\n }\n } else {\n for (const value of Object.values(record)) {\n this.collectSchemaRefs(value, refs)\n }\n }\n }\n}\n","/**\n * OpenAPI Module\n *\n * Provides configurable OpenAPI documentation endpoints with runtime override support.\n *\n * Features:\n * - Configurable paths for /openapi.json and /docs\n * - Runtime config overrides via middleware\n * - i18n support for titles and descriptions\n * - Route filtering via hideFromDocs and custom routeFilter\n *\n * @example Basic usage\n * ```typescript\n * @Module({\n * imports: [\n * OpenAPIModule.forRoot({\n * info: { title: 'My API', version: '1.0.0' }\n * })\n * ]\n * })\n * export class AppModule {}\n * ```\n *\n * @example With runtime override in middleware\n * ```typescript\n * // In RouteAccessMiddleware\n * constructor(\n * @inject(OPENAPI_TOKENS.ConfigService) private openAPIConfig: IOpenAPIConfigService\n * ) {}\n *\n * async handle(ctx, next) {\n * this.openAPIConfig.override({\n * info: { title: 'Custom API' },\n * routeFilter: (path) => this.shouldInclude(path)\n * })\n * await next()\n * }\n * ```\n */\n\nimport { Scope } from '../di'\nimport { Module } from '../module'\nimport type { AsyncModuleOptions, DynamicModule } from '../module/types'\nimport { OPENAPI_TOKENS } from './openapi.tokens'\nimport { OpenAPIConfigService, OpenAPIService } from './services'\nimport type { OpenAPIModuleOptions } from './types'\n\n/** Default options when none provided */\nconst DEFAULT_OPTIONS: OpenAPIModuleOptions = {\n jsonPath: '/api/openapi.json',\n info: {\n title: 'API',\n version: '1.0.0'\n }\n}\n\n@Module({\n providers: [\n // OpenAPI config service (request-scoped, supports runtime overrides)\n { provide: OPENAPI_TOKENS.ConfigService, useClass: OpenAPIConfigService, scope: Scope.Request },\n // OpenAPI service (generates specs, serves endpoints)\n { provide: OPENAPI_TOKENS.OpenAPIService, useClass: OpenAPIService },\n ],\n})\nexport class OpenAPIModule {\n /**\n * Configure OpenAPI module with static options\n *\n * @param options - OpenAPI configuration (paths, info, security schemes)\n * @returns DynamicModule with options provider\n */\n static forRoot(options: OpenAPIModuleOptions = {}): DynamicModule {\n // Merge with defaults\n const mergedOptions: OpenAPIModuleOptions = {\n ...DEFAULT_OPTIONS,\n ...options,\n info: {\n ...DEFAULT_OPTIONS.info,\n ...options.info,\n title: options.info?.title ?? DEFAULT_OPTIONS.info?.title ?? 'API',\n version: options.info?.version ?? DEFAULT_OPTIONS.info?.version ?? '1.0.0',\n }\n }\n\n return {\n module: OpenAPIModule,\n providers: [\n { provide: OPENAPI_TOKENS.Options, useValue: mergedOptions }\n ]\n }\n }\n\n static forRootAsync(options: AsyncModuleOptions<OpenAPIModuleOptions>): DynamicModule {\n return {\n module: OpenAPIModule,\n providers: [\n {\n provide: OPENAPI_TOKENS.Options,\n useFactory: options.useFactory,\n inject: options.inject\n },\n ]\n }\n }\n}\n","import { ApplicationError, ERROR_CODES } from '../../errors'\n\n/**\n * ControllerMethodNotFoundError\n *\n * Thrown when a controller method is registered but doesn't exist on the controller instance.\n * This typically indicates a mismatch between route registration and controller implementation.\n */\nexport class ControllerMethodNotFoundError extends ApplicationError {\n constructor(methodName: string, controllerName: string) {\n super(\n 'errors.controllerMethodNotFound',\n ERROR_CODES.ROUTER.CONTROLLER_METHOD_NOT_FOUND,\n { methodName, controllerName }\n )\n }\n}\n","import { ApplicationError, ERROR_CODES } from '../../errors'\n\n/**\n * Error thrown when HonoApp.configure() is called more than once.\n *\n * HonoApp can only be configured a single time during application bootstrap.\n */\nexport class HonoAppAlreadyConfiguredError extends ApplicationError {\n constructor() {\n super(\n 'errors.honoAppAlreadyConfigured',\n ERROR_CODES.SYSTEM.CONFIGURATION_ERROR\n )\n }\n}\n","import { ApplicationError, ERROR_CODES } from '../../errors'\n\n/**\n * Error thrown when a controller fails to register\n *\n * This typically happens when:\n * - Controller is missing the `@Controller` decorator\n * - Controller route metadata is not set\n * - Controller class name is invalid\n *\n * Error Code: 9005\n */\nexport class ControllerRegistrationError extends ApplicationError {\n constructor(controllerName: string, reason?: string) {\n super('errors.controllerRegistration', ERROR_CODES.ROUTER.CONTROLLER_REGISTRATION_ERROR, {\n controllerName,\n reason,\n })\n }\n}\n","import { ApplicationError, ERROR_CODES } from '../../errors'\n\n/**\n * OpenAPIRouteRegistrationError\n *\n * Thrown when an OpenAPI route fails to register properly\n * This indicates a configuration issue with route decorators or metadata\n * Uses i18n key for localized error messages\n *\n * @example\n * ```typescript\n * throw new OpenAPIRouteRegistrationError('/api/v1/users', 'Missing response schema')\n * ```\n */\nexport class OpenAPIRouteRegistrationError extends ApplicationError {\n constructor(path: string, reason: string) {\n super(\n 'errors.openapiRouteRegistration',\n ERROR_CODES.ROUTER.OPENAPI_ROUTE_REGISTRATION,\n { path, reason }\n )\n }\n}\n","import { ApplicationError, ERROR_CODES } from '../../errors'\n\n/**\n * OpenAPIValidationError\n *\n * Thrown when OpenAPI request/response validation fails\n * Uses i18n key for localized error messages\n *\n * HTTP Status: 400 Bad Request\n * Error Code: 1004\n *\n * @example\n * ```typescript\n * throw new OpenAPIValidationError('Request body missing required field: email')\n * ```\n */\nexport class OpenAPIValidationError extends ApplicationError {\n constructor(details: string) {\n super(\n 'errors.openapiValidation',\n ERROR_CODES.VALIDATION.REQUEST_VALIDATION,\n { details }\n )\n }\n}\n","import { ApplicationError, ERROR_CODES } from '../../errors'\n\n/**\n * Error thrown when a requested route is not found\n *\n * HTTP Status: 404 Not Found\n * Error Code: 4004\n */\nexport class RouteNotFoundError extends ApplicationError {\n constructor(path: string, method: string) {\n super(\n 'errors.routeNotFound',\n ERROR_CODES.RESOURCE.ROUTE_NOT_FOUND,\n { path, method }\n )\n }\n}\n","import { ApplicationError, ERROR_CODES } from '../../errors';\nimport type { ZodError } from '../../i18n/validation';\nimport { type z } from '../../i18n/validation';\n/**\n * SchemaValidationError\n *\n * Thrown when Zod schema validation fails\n */\nexport class SchemaValidationError extends ApplicationError {\n constructor(zodError: ZodError) {\n const issues = zodError.issues.map((err: z.core.$ZodIssue) => ({\n path: err.path.join('.'),\n message: err.message,\n code: err.code\n }))\n\n super(\n 'errors.schemaValidation',\n ERROR_CODES.VALIDATION.SCHEMA_VALIDATION,\n { issues }\n )\n }\n}\n","import type { MiddlewareHandler } from 'hono'\nimport type { LoggerService } from '../../logger'\n\n/**\n * Create a Hono middleware that logs HTTP requests using our Logger service\n *\n * Logs request method, path, status code, and duration in milliseconds.\n * Format: [HTTP] METHOD /path -> STATUS (duration ms)\n *\n * @param logger - Logger service instance\n * @returns Hono middleware handler\n *\n * @example\n * ```typescript\n * const logger = container.resolve<LoggerService>(LOGGER_TOKENS.LoggerService)\n * app.use('*', createLoggerMiddleware(logger))\n * ```\n */\nexport function createLoggerMiddleware(logger: LoggerService): MiddlewareHandler {\n return async (c, next) => {\n const start = Date.now()\n const method = c.req.method\n const path = c.req.path\n\n await next()\n\n const duration = Date.now() - start\n const status = c.res.status\n\n logger.info(`[HTTP] ${method} ${path} -> ${status}`, {\n method,\n path,\n status,\n duration,\n })\n }\n}\n","import { z } from '../../i18n/validation'\n\n/**\n * Common OpenAPI Schemas\n *\n * Reusable schema definitions for common API patterns:\n * - Error responses\n * - Pagination\n * - Common parameters\n */\n\n/**\n * Generic error response schema\n * Used for all error responses (4xx, 5xx)\n * Matches ApplicationError.toErrorResponse() structure\n */\nexport const errorResponseSchema = z.object({\n code: z.number().int().describe('Application error code'),\n message: z.string().describe('Human-readable error message'),\n timestamp: z.string().datetime().describe('ISO timestamp when error occurred'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional error context'),\n stack: z.string().optional().describe('Stack trace (development only)')\n}).openapi('ErrorResponse')\n\n/**\n * Validation error response schema\n * Used for 400 Bad Request with validation failures\n * Matches ApplicationError.toErrorResponse() structure with validation-specific metadata\n */\nexport const validationErrorResponseSchema = z.object({\n code: z.number().int().describe('Application error code'),\n message: z.string().describe('Human-readable error message'),\n timestamp: z.string().datetime().describe('ISO timestamp when error occurred'),\n metadata: z.object({\n issues: z.array(z.object({\n path: z.string().describe('Field path that failed validation'),\n message: z.string().describe('Validation failure message'),\n code: z.string().describe('Zod validation error code')\n }))\n }).describe('Validation error details'),\n stack: z.string().optional().describe('Stack trace (development only)')\n}).openapi('ValidationErrorResponse')\n\n/**\n * Pagination query parameters schema\n * Used for list endpoints\n */\nexport const paginationQuerySchema = z.object({\n page: z.coerce.number().int().positive().default(1).describe('Page number (1-indexed)'),\n limit: z.coerce.number().int().positive().max(100).default(20).describe('Items per page (max 100)')\n}).openapi('PaginationQuery')\n\n/**\n * Paginated response wrapper schema\n * Generic wrapper for paginated list responses\n */\nexport const paginatedResponseSchema = <T extends z.ZodType>(itemSchema: T) =>\n z.object({\n data: z.array(itemSchema).describe('Array of items for current page'),\n pagination: z.object({\n page: z.number().int().positive().describe('Current page number'),\n limit: z.number().int().positive().describe('Items per page'),\n total: z.number().int().nonnegative().describe('Total number of items'),\n totalPages: z.number().int().nonnegative().describe('Total number of pages')\n })\n })\n\n/**\n * UUID parameter schema\n * Used for :id parameters in RESTful routes\n */\nexport const uuidParamSchema = z.object({\n id: z.string().uuid().describe('Resource UUID')\n}).openapi('UUIDParam')\n\n/**\n * Success message response schema\n * Used for operations that don't return data (e.g., DELETE)\n */\nexport const successMessageSchema = z.object({\n message: z.string().describe('Success message'),\n data: z.record(z.string(), z.unknown()).optional().describe('Optional additional data')\n}).openapi('SuccessMessage')\n\n/**\n * Common HTTP status error schemas\n * Pre-configured for standard error responses\n */\nexport const commonErrorSchemas = {\n 400: { schema: validationErrorResponseSchema, description: 'Validation error' },\n 401: { schema: errorResponseSchema, description: 'Unauthorized' },\n 403: { schema: errorResponseSchema, description: 'Forbidden' },\n 404: { schema: errorResponseSchema, description: 'Not found' },\n 409: { schema: errorResponseSchema, description: 'Conflict' },\n 500: { schema: errorResponseSchema, description: 'Internal server error' }\n} as const\n","import type { Context, MiddlewareHandler } from 'hono'\nimport type { WSContext, WSEvents } from 'hono/ws'\nimport { type Container, getMethodInjections } from '../../di'\nimport {\n type Guard,\n getControllerGuards,\n getMethodGuards,\n GuardExecutionService,\n} from '../../guards'\nimport type { OpenAPIHono } from '../../i18n/validation'\nimport { createRoute } from '../../i18n/validation'\nimport { type LoggerService } from '../../logger'\nimport type { Constructor } from '../../types'\nimport { getWsOnCloseMethod, getWsOnErrorMethod, getWsOnMessageMethod, isGateway } from '../../websocket/decorators'\nimport { GatewayContext } from '../../websocket/gateway-context'\nimport { DEFAULT_CONTENT_TYPE, HTTP_METHODS, METHOD_STATUS_CODES, SECURITY_SCHEMES, VERSION_NEUTRAL } from '../constants'\nimport type { IController } from '../controller'\nimport {\n getControllerOptions,\n getControllerRoute,\n getDecoratedMethods,\n getHttpDecoratedMethods,\n getHttpRouteMetadata,\n getRouteConfig,\n} from '../decorators'\nimport {\n ControllerMethodNotFoundError,\n ControllerRegistrationError,\n OpenAPIRouteRegistrationError,\n} from '../errors'\nimport { RouterContext } from '../router-context'\nimport { commonErrorSchemas } from '../schemas/common.schemas'\nimport type {\n ControllerOptions,\n HttpMethod,\n OpenAPIRouteConfig,\n RouteBodyObject,\n RouteConfig,\n RouterEnv,\n SecuritySchemeRecord,\n VersioningOptions,\n} from '../types'\n\nconst invokeHandler = (instance: Record<string, (...args: unknown[]) => unknown>, method: string, ...args: unknown[]): Promise<unknown> => {\n try {\n return Promise.resolve(instance[method](...args))\n } catch (err: unknown) {\n return Promise.reject(err as Error)\n }\n}\n\n/**\n * Route registration service\n * Manages controller and route registration with OpenAPI support\n *\n * Responsibilities:\n * - Register RESTful controllers with OpenAPI metadata\n * - Auto-derive HTTP methods/paths from controller method names\n * - Build OpenAPI route configurations with guard execution\n * - Validate all controllers have access decorators (strict mode)\n * - Create controller handlers with DI resolution\n */\nexport class RouteRegistrationService {\n private controllerClasses = new Map<string, Constructor<IController>>()\n\n constructor(\n private logger: LoggerService,\n private versioningOptions: VersioningOptions | null = null,\n ) { }\n\n /**\n * Configure router with controllers\n *\n * @param app - OpenAPIHono application instance\n * @param controllers - Array of controller classes from modules\n */\n async configure(\n app: OpenAPIHono<RouterEnv>,\n controllers: Constructor<IController>[]\n ): Promise<void> {\n this.logger.info('Registering controllers', {\n controllerCount: controllers.length,\n })\n\n // Sort controllers: specific routes first, wildcard handlers last\n // This ensures more specific routes are matched before catch-all wildcards\n // (e.g., /api/v1/auth/magic-link matches before /api/v1/auth/:path{.+})\n const sortedControllers = [...controllers].sort((a, b) => {\n const aHasHandle = 'handle' in a.prototype\n const bHasHandle = 'handle' in b.prototype\n if (aHasHandle && !bHasHandle) return 1 // a goes after b\n if (!aHasHandle && bHasHandle) return -1 // a goes before b\n return 0 // maintain relative order\n })\n\n // Single-pass partition: gateways vs regular controllers\n const gateways: Constructor<IController>[] = []\n const regulars: Constructor<IController>[] = []\n\n for (const c of sortedControllers) {\n if (isGateway(c)) {\n gateways.push(c)\n } else {\n regulars.push(c)\n }\n }\n\n // Register WebSocket gateways\n for (const GatewayClass of gateways) {\n await this.registerGateway(app, GatewayClass)\n }\n\n // Register controllers\n for (const ControllerClass of regulars) {\n this.registerController(app, ControllerClass)\n }\n\n this.logger.info('Controller registration complete')\n }\n\n /**\n * Register a WebSocket gateway\n * Applies versioning and guards, then registers an upgradeWebSocket handler\n */\n private async registerGateway(app: OpenAPIHono<RouterEnv>, GatewayClass: Constructor<IController>): Promise<void> {\n const route = getControllerRoute(GatewayClass)\n\n if (!route) {\n throw new ControllerRegistrationError(\n GatewayClass.name,\n 'Missing @Gateway decorator or route metadata'\n )\n }\n\n const controllerOpts = getControllerOptions(GatewayClass)\n const paths = this.versioningOptions\n ? this.resolveVersionedPaths(route, controllerOpts)\n : [route]\n\n for (const fullPath of paths) {\n await this.registerGatewayRoute(app, GatewayClass, fullPath)\n }\n }\n\n /**\n * Register a single WebSocket gateway route\n */\n private async registerGatewayRoute(\n app: OpenAPIHono<RouterEnv>,\n GatewayClass: Constructor<IController>,\n fullPath: string\n ): Promise<void> {\n // Collect class-level guards\n const controllerGuards = getControllerGuards(GatewayClass)?.guards ?? []\n\n // Dynamic import: only load hono/cloudflare-workers when gateways exist\n const { upgradeWebSocket } = await import('hono/cloudflare-workers')\n\n // Cache WS metadata once at registration time (not per-connection)\n const onMsgMethod = getWsOnMessageMethod(GatewayClass)\n const onCloseMethod = getWsOnCloseMethod(GatewayClass)\n const onErrMethod = getWsOnErrorMethod(GatewayClass)\n\n const wsHandler: MiddlewareHandler<RouterEnv> = upgradeWebSocket((c) => {\n const routerCtx = new RouterContext(c as Context<RouterEnv>)\n const container = routerCtx.getContainer()\n const gateway = container.resolve(GatewayClass)\n\n // Cloudflare Workers doesn't support the `onOpen` WebSocket event;\n // the upgrade callback itself serves as the open context.\n const events: Omit<WSEvents, 'onOpen'> = {}\n\n const bindWsHandler = (\n method: string,\n onCatch?: (err: unknown, ws: WSContext) => void\n ) => {\n return (evt: MessageEvent | CloseEvent | Event, ws: WSContext) => {\n const ctx = new GatewayContext(c as Context<RouterEnv>, ws)\n c.executionCtx.waitUntil(\n invokeHandler(gateway as Record<string, (...args: unknown[]) => unknown>, method, evt, ctx).catch((err: unknown) => {\n this.logger.error(`WebSocket ${method} handler error`, { gateway: GatewayClass.name, error: err instanceof Error ? err.message : String(err) })\n onCatch?.(err, ws)\n })\n )\n }\n }\n\n if (onMsgMethod) {\n events.onMessage = bindWsHandler(onMsgMethod, (_err, ws) => ws.close(1011, 'Internal Error'))\n }\n if (onCloseMethod) {\n events.onClose = bindWsHandler(onCloseMethod)\n }\n if (onErrMethod) {\n events.onError = bindWsHandler(onErrMethod)\n }\n\n return events\n }) as MiddlewareHandler<RouterEnv>\n\n this.logger.info('Registering WebSocket gateway', {\n gateway: GatewayClass.name,\n path: fullPath,\n })\n\n const handlers: MiddlewareHandler<RouterEnv>[] = []\n\n if (controllerGuards.length > 0) {\n this.logger.info('Gateway guards', {\n gateway: GatewayClass.name,\n path: fullPath,\n guardCount: controllerGuards.length,\n })\n handlers.push(this.createGuardMiddleware(controllerGuards))\n }\n\n handlers.push(wsHandler)\n\n // Type assertion needed because Hono's overloaded .get() signatures\n // don't accept a spread of MiddlewareHandler[] alongside upgradeWebSocket's output type\n app.get(fullPath, ...(handlers as [MiddlewareHandler<RouterEnv>]))\n }\n\n /**\n * Register a single controller with all its routes\n * Validates that controller has access decorator (strict mode)\n */\n private registerController(app: OpenAPIHono<RouterEnv>, ControllerClass: Constructor<IController>): void {\n const route = getControllerRoute(ControllerClass)\n\n if (!route) {\n throw new ControllerRegistrationError(\n ControllerClass.name,\n 'Missing @Controller decorator or route metadata'\n )\n }\n\n const className = ControllerClass.name\n this.controllerClasses.set(className, ControllerClass)\n\n const prototype = ControllerClass.prototype as IController\n const controllerOpts = getControllerOptions(ControllerClass)\n\n // Handle wildcard routes (non-RESTful controllers) — check once, not per version\n if (prototype.handle) {\n if (!this.versioningOptions) {\n this.registerWildcardRoute(app, ControllerClass, route)\n } else {\n for (const versionedRoute of this.resolveVersionedPaths(route, controllerOpts)) {\n this.registerWildcardRoute(app, ControllerClass, versionedRoute)\n }\n }\n return\n }\n\n // Compute decorated methods once (loop-invariant)\n const decoratedMethods = getDecoratedMethods(ControllerClass)\n const httpDecoratedMethods = getHttpDecoratedMethods(ControllerClass)\n\n // Enforce mutual exclusivity once\n if (decoratedMethods.length > 0 && httpDecoratedMethods.length > 0) {\n throw new ControllerRegistrationError(\n ControllerClass.name,\n 'Cannot mix @Route() with HTTP method decorators (@Get, @Post, etc.) in the same controller. Use one pattern or the other.'\n )\n }\n\n // Fast path: no versioning — inline dispatch, no array allocation, no loop\n if (!this.versioningOptions) {\n this.dispatchRoutes(app, ControllerClass, route, decoratedMethods, httpDecoratedMethods, controllerOpts, prototype)\n return\n }\n\n // Versioning path: resolve versioned paths and register each\n for (const versionedRoute of this.resolveVersionedPaths(route, controllerOpts)) {\n this.dispatchRoutes(app, ControllerClass, versionedRoute, decoratedMethods, httpDecoratedMethods, controllerOpts, prototype)\n }\n }\n\n /**\n * Dispatch route registration based on decorator type\n */\n private dispatchRoutes(\n app: OpenAPIHono<RouterEnv>,\n ControllerClass: Constructor<IController>,\n path: string,\n decoratedMethods: string[],\n httpDecoratedMethods: string[],\n controllerOpts: ControllerOptions | undefined,\n prototype: IController\n ): void {\n if (httpDecoratedMethods.length > 0) {\n this.registerHttpRoutes(app, ControllerClass, path, httpDecoratedMethods, controllerOpts)\n } else if (decoratedMethods.length > 0) {\n this.registerOpenAPIRoutes(app, ControllerClass, path, decoratedMethods, controllerOpts)\n } else {\n this.registerRESTfulRoutes(app, ControllerClass, path, prototype)\n }\n }\n\n /**\n * Resolve versioned paths for a controller based on versioning configuration.\n *\n * @param basePath - The base path from @Controller decorator\n * @param controllerOpts - Controller options (may contain version)\n * @returns Array of resolved paths (with version prefix if applicable)\n */\n private resolveVersionedPaths(basePath: string, controllerOpts?: ControllerOptions): string[] {\n // Versioning disabled — always return base path\n if (!this.versioningOptions) {\n return [basePath]\n }\n\n const version = controllerOpts?.version\n\n // VERSION_NEUTRAL — explicitly opt out of versioning\n if (version === VERSION_NEUTRAL) {\n return [basePath]\n }\n\n const prefix = this.versioningOptions.prefix ?? 'v'\n\n // Explicit version(s) on the controller\n if (version !== undefined) {\n const versions = Array.isArray(version) ? version : [version]\n return versions.map(v => `/${prefix}${v}${basePath}`)\n }\n\n // No explicit version — apply defaultVersion if set\n if (this.versioningOptions.defaultVersion !== undefined) {\n const defaults = Array.isArray(this.versioningOptions.defaultVersion)\n ? this.versioningOptions.defaultVersion\n : [this.versioningOptions.defaultVersion]\n return defaults.map(v => `/${prefix}${v}${basePath}`)\n }\n\n // Versioning enabled but no version and no default — no prefix\n return [basePath]\n }\n\n /**\n * Create a guard execution middleware\n *\n * This middleware executes all guards for a route before the handler.\n * Guards are executed in order; all must pass for the request to proceed.\n *\n * @param guards - Array of guards to execute\n * @returns Hono middleware function\n */\n private createGuardMiddleware(guards: Guard[]) {\n const guardService = new GuardExecutionService(this.logger)\n\n return async (c: Context<RouterEnv>, next: () => Promise<void>) => {\n const ctx = new RouterContext(c)\n const container = ctx.getContainer()\n\n // Execute all guards - throws on failure\n await guardService.executeGuards(guards, ctx, container)\n\n // All guards passed, continue to handler\n await next()\n }\n }\n\n /**\n * Register wildcard route for non-RESTful controllers\n */\n private registerWildcardRoute(\n app: OpenAPIHono<RouterEnv>,\n ControllerClass: Constructor<IController>,\n route: string\n ): void {\n this.logger.info(`Registering wildcard route`, {\n controller: ControllerClass.name,\n route: `${route}/:path{.+}`,\n method: 'ALL',\n })\n\n const handler = this.createControllerHandler(ControllerClass, 'handle')\n // Match base route exactly\n app.all(route, handler)\n // Match all sub-paths using named regex wildcard\n app.all(`${route}/:path{.+}`, handler)\n }\n\n /**\n * Register OpenAPI routes with metadata\n */\n private registerOpenAPIRoutes(\n app: OpenAPIHono<RouterEnv>,\n ControllerClass: Constructor<IController>,\n route: string,\n decoratedMethods: string[],\n controllerOpts: ControllerOptions | undefined\n ): void {\n const className = ControllerClass.name\n const prototype = ControllerClass.prototype as IController\n\n // Check if entire controller is hidden from docs\n const controllerHidden = controllerOpts?.hideFromDocs ?? false\n\n // Collect controller-level guards\n const controllerGuards = getControllerGuards(ControllerClass)?.guards ?? []\n\n for (const methodName of decoratedMethods) {\n const routeConfig = getRouteConfig(prototype, methodName)\n if (!routeConfig) continue\n\n const derived = this.deriveHttpMethodAndPath(methodName, route)\n if (!derived) {\n this.logger.warn(`Cannot derive HTTP method/path for ${className}.${methodName}`)\n continue\n }\n\n // Check if route is hidden (route-level overrides controller-level)\n const hideFromDocs = routeConfig.hideFromDocs ?? controllerHidden\n\n if (hideFromDocs) {\n // Register route handler without OpenAPI metadata\n this.logger.info(`Registering hidden route (no OpenAPI)`, {\n controller: className,\n method: derived.method.toUpperCase(),\n path: derived.path,\n methodName,\n })\n\n this.registerRouteWithoutOpenAPI(app, ControllerClass, methodName, derived)\n continue\n }\n\n // Collect method-level guards\n const methodGuards = getMethodGuards(prototype, methodName)?.guards ?? []\n\n // Combine controller and method guards\n // Controller guards run first, then method guards\n const allGuards: Guard[] = [...controllerGuards, ...methodGuards]\n\n if (allGuards.length > 0) {\n this.logger.info(`Route guards`, {\n controller: className,\n method: derived.method.toUpperCase(),\n path: derived.path,\n methodName,\n guardCount: allGuards.length,\n })\n }\n\n // Build and register OpenAPI route\n const metadata = this.mergeMetadata(controllerOpts, routeConfig, ControllerClass, methodName)\n const openApiRoute = this.buildOpenAPIRoute(\n derived.method,\n derived.path,\n routeConfig,\n metadata,\n allGuards,\n methodName\n )\n\n this.logger.info(`Registering OpenAPI route`, {\n controller: className,\n method: derived.method.toUpperCase(),\n path: derived.path,\n methodName,\n tags: metadata.tags,\n })\n\n // Register OpenAPI route with handler\n app.openapi(openApiRoute, async (c) => {\n const ctx = new RouterContext(c)\n const requestContainer = ctx.getContainer()\n const controller = requestContainer.resolve<IController>(ControllerClass)\n const method = controller[methodName as keyof IController]\n if (typeof method === 'function') {\n const injectedArgs = this.resolveMethodInjections(prototype, methodName, requestContainer)\n return await (method as (...args: unknown[]) => Promise<Response>).call(controller, ctx, ...injectedArgs)\n }\n throw new ControllerMethodNotFoundError(methodName, className)\n })\n }\n }\n\n /**\n * Register routes using HTTP method decorators (@Get, @Post, etc.)\n * These use explicit method + path instead of convention-based derivation\n */\n private registerHttpRoutes(\n app: OpenAPIHono<RouterEnv>,\n ControllerClass: Constructor<IController>,\n basePath: string,\n httpDecoratedMethods: string[],\n controllerOpts: ControllerOptions | undefined\n ): void {\n const className = ControllerClass.name\n const prototype = ControllerClass.prototype as IController\n\n const controllerHidden = controllerOpts?.hideFromDocs ?? false\n const controllerGuards = getControllerGuards(ControllerClass)?.guards ?? []\n\n for (const methodName of httpDecoratedMethods) {\n const httpMeta = getHttpRouteMetadata(prototype, methodName)\n if (!httpMeta) continue\n\n const fullPath = this.joinPaths(basePath, httpMeta.path)\n const routeConfig = httpMeta.config\n const hideFromDocs = routeConfig.hideFromDocs ?? controllerHidden\n\n // @All routes or hidden routes are registered without OpenAPI\n if (httpMeta.method === 'all' || hideFromDocs) {\n this.logger.info(`Registering route (no OpenAPI)`, {\n controller: className,\n method: httpMeta.method.toUpperCase(),\n path: fullPath,\n methodName,\n })\n\n this.registerRouteWithoutOpenAPI(app, ControllerClass, methodName, {\n method: httpMeta.method,\n path: fullPath,\n })\n continue\n }\n\n // Collect method-level guards\n const methodGuards = getMethodGuards(prototype, methodName)?.guards ?? []\n const allGuards: Guard[] = [...controllerGuards, ...methodGuards]\n\n if (allGuards.length > 0) {\n this.logger.info(`Route guards`, {\n controller: className,\n method: httpMeta.method.toUpperCase(),\n path: fullPath,\n methodName,\n guardCount: allGuards.length,\n })\n }\n\n // Build and register OpenAPI route\n const metadata = this.mergeMetadata(controllerOpts, routeConfig, ControllerClass, methodName)\n const statusCode = routeConfig.statusCode ?? 200\n const openApiRoute = this.buildOpenAPIRoute(\n httpMeta.method,\n fullPath,\n routeConfig,\n metadata,\n allGuards,\n undefined,\n statusCode\n )\n\n this.logger.info(`Registering OpenAPI route`, {\n controller: className,\n method: httpMeta.method.toUpperCase(),\n path: fullPath,\n methodName,\n tags: metadata.tags,\n })\n\n app.openapi(openApiRoute, async (c) => {\n const ctx = new RouterContext(c)\n const requestContainer = ctx.getContainer()\n const controller = requestContainer.resolve<IController>(ControllerClass)\n const method = controller[methodName as keyof IController]\n if (typeof method === 'function') {\n const injectedArgs = this.resolveMethodInjections(prototype, methodName, requestContainer)\n return await (method as (...args: unknown[]) => Promise<Response>).call(controller, ctx, ...injectedArgs)\n }\n throw new ControllerMethodNotFoundError(methodName, className)\n })\n }\n }\n\n /**\n * Join a base path and a route path, normalizing slashes\n */\n private joinPaths(basePath: string, routePath: string): string {\n if (routePath === '/') return basePath\n return basePath + routePath\n }\n\n /**\n * Register route without OpenAPI metadata (for hidden routes)\n * Route is functional but won't appear in documentation\n */\n private registerRouteWithoutOpenAPI(\n app: OpenAPIHono<RouterEnv>,\n ControllerClass: Constructor<IController>,\n methodName: string,\n derived: { method: HttpMethod; path: string }\n ): void {\n // Create handler function\n const prototype = ControllerClass.prototype as IController\n const handler = async (c: Context<RouterEnv>) => {\n const ctx = new RouterContext(c)\n const requestContainer = ctx.getContainer()\n const controller = requestContainer.resolve<IController>(ControllerClass)\n const method = controller[methodName as keyof IController]\n if (typeof method === 'function') {\n const injectedArgs = this.resolveMethodInjections(prototype, methodName, requestContainer)\n return await (method as (...args: unknown[]) => Promise<Response>).call(controller, ctx, ...injectedArgs)\n }\n throw new ControllerMethodNotFoundError(methodName, ControllerClass.name)\n }\n\n // Register route handler without OpenAPI metadata using type-safe method dispatch\n // Note: Only common HTTP methods (get, post, put, patch, delete) are supported\n // For other methods, we fall back to all() which accepts any HTTP method\n switch (derived.method) {\n case 'get':\n app.get(derived.path, handler)\n break\n case 'post':\n app.post(derived.path, handler)\n break\n case 'put':\n app.put(derived.path, handler)\n break\n case 'patch':\n app.patch(derived.path, handler)\n break\n case 'delete':\n app.delete(derived.path, handler)\n break\n case 'all':\n app.all(derived.path, handler)\n break\n default:\n // For head, options, trace, or any other method, use all()\n app.all(derived.path, handler)\n break\n }\n }\n\n\n /**\n * Register traditional RESTful routes without OpenAPI\n */\n private registerRESTfulRoutes(\n app: OpenAPIHono<RouterEnv>,\n ControllerClass: Constructor<IController>,\n route: string,\n prototype: IController\n ): void {\n if (prototype.index) {\n app.get(route, this.createControllerHandler(ControllerClass, 'index'))\n }\n if (prototype.show) {\n app.get(`${route}/:id`, this.createControllerHandler(ControllerClass, 'show'))\n }\n if (prototype.create) {\n app.post(route, this.createControllerHandler(ControllerClass, 'create'))\n }\n if (prototype.update) {\n app.put(`${route}/:id`, this.createControllerHandler(ControllerClass, 'update'))\n }\n if (prototype.patch) {\n app.patch(`${route}/:id`, this.createControllerHandler(ControllerClass, 'patch'))\n }\n if (prototype.destroy) {\n app.delete(`${route}/:id`, this.createControllerHandler(ControllerClass, 'destroy'))\n }\n }\n\n /**\n * Auto-derive HTTP method and path from controller method name\n * Uses HTTP_METHODS constant for RESTful convention mapping\n */\n private deriveHttpMethodAndPath(methodName: string, basePath: string): { method: Exclude<HttpMethod, 'all'>; path: string } | null {\n if (!(methodName in HTTP_METHODS)) return null\n const mapping = HTTP_METHODS[methodName as keyof typeof HTTP_METHODS]\n\n return {\n method: mapping.method as Exclude<HttpMethod, 'all'>,\n path: basePath + mapping.path,\n }\n }\n\n /**\n * Merge controller-level and route-level metadata\n * Tags are merged (appended), security is merged (union)\n * Guards automatically add sessionCookie security if present\n */\n private mergeMetadata(\n controllerOpts: ControllerOptions | undefined,\n routeConfig: RouteConfig,\n ControllerClass: Constructor<IController>,\n methodName: string\n ): { tags: string[]; security: SecuritySchemeRecord[] } {\n const tags = [...(controllerOpts?.tags ?? []), ...(routeConfig.tags ?? [])]\n\n // Check if guards are present (indicates authentication is required)\n const prototype = ControllerClass.prototype as IController\n const hasMethodGuards = (getMethodGuards(prototype, methodName)?.guards.length ?? 0) > 0\n const hasControllerGuards = (getControllerGuards(ControllerClass)?.guards.length ?? 0) > 0\n const requiresAuth = hasMethodGuards || hasControllerGuards\n\n // Merge security: if route explicitly sets security (even empty array), use it\n // Otherwise inherit from controller\n let security: string[] = []\n if (routeConfig.security !== undefined) {\n // Route has explicit security (could be empty for public routes)\n security = [...(controllerOpts?.security ?? []), ...routeConfig.security]\n } else if (controllerOpts?.security) {\n // Inherit controller security\n security = controllerOpts.security\n }\n\n // Auto-add sessionCookie security if guards are present\n if (requiresAuth && !security.includes(SECURITY_SCHEMES.SESSION_COOKIE)) {\n security.push(SECURITY_SCHEMES.SESSION_COOKIE)\n }\n\n // Convert security array to OpenAPI security format\n const securityArray: SecuritySchemeRecord[] =\n security.length > 0\n ? (security.map<SecuritySchemeRecord>((scheme) => ({ [scheme]: [] }) as unknown as SecuritySchemeRecord))\n : ([] as SecuritySchemeRecord[])\n\n return { tags, security: securityArray }\n }\n\n /**\n * Build OpenAPI route configuration from metadata\n * Creates a route definition compatible with @hono/zod-openapi\n * Includes guard execution for proper access control\n *\n * Execution order: Global middlewares → Guards → Handler\n */\n private buildOpenAPIRoute(\n method: Exclude<HttpMethod, 'all'>,\n path: string,\n routeConfig: RouteConfig,\n metadata: { tags: string[]; security: Record<string, string[]>[] },\n guards: Guard[],\n methodName?: string,\n statusCodeOverride?: number\n ): OpenAPIRouteConfig {\n try {\n const route: Partial<OpenAPIRouteConfig> = {\n method,\n path,\n request: {},\n responses: {},\n }\n\n // Add guard execution middleware using Hono's built-in middleware property\n if (guards.length > 0) {\n route.middleware = [this.createGuardMiddleware(guards)]\n }\n\n // Add request body if defined\n if (routeConfig.body) {\n const bodySchema = this.isRouteBodyObject(routeConfig.body) ? routeConfig.body.schema : routeConfig.body\n const bodyContentType = this.isRouteBodyObject(routeConfig.body) ? routeConfig.body.contentType ?? DEFAULT_CONTENT_TYPE : DEFAULT_CONTENT_TYPE\n\n route.request = {\n ...route.request,\n body: {\n content: {\n [bodyContentType]: {\n schema: bodySchema,\n },\n },\n },\n }\n }\n\n // Add query parameters if defined\n if (routeConfig.query) {\n route.request = {\n ...route.request,\n query: routeConfig.query,\n }\n }\n\n // Add URL parameters if defined\n if (routeConfig.params) {\n route.request = {\n ...route.request,\n params: routeConfig.params,\n }\n }\n\n // Derive success status code from method name or use override\n const successStatus = statusCodeOverride\n ?? (methodName && METHOD_STATUS_CODES[methodName as keyof typeof METHOD_STATUS_CODES])\n ?? 200\n\n // Build responses object with auto-derived status\n const responses: NonNullable<OpenAPIRouteConfig['responses']> = {}\n\n // Add success response with derived status code\n const responseDef = routeConfig.response\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- response may be undefined at runtime\n if (responseDef) {\n if (typeof responseDef === 'object' && 'schema' in responseDef) {\n const responseContentType = responseDef.contentType ?? DEFAULT_CONTENT_TYPE\n responses[successStatus] = {\n content: {\n [responseContentType]: { schema: responseDef.schema },\n },\n description: responseDef.description ?? `Response ${successStatus}`,\n }\n } else {\n responses[successStatus] = {\n content: {\n [DEFAULT_CONTENT_TYPE]: { schema: responseDef },\n },\n description: `Response ${successStatus}`,\n }\n }\n }\n\n // Auto-merge common error schemas (400, 401, 403, 404, 409, 500)\n // Controllers only need to define success response; error responses are added automatically\n for (const [statusStr, schema] of Object.entries(commonErrorSchemas)) {\n const status = parseInt(statusStr)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- defensive: avoid overwriting success response status\n responses[status] ??= schema\n }\n\n route.responses = responses\n\n // Add tags if provided\n if (metadata.tags.length > 0) {\n route.tags = metadata.tags\n }\n\n // Add security if provided\n if (metadata.security.length > 0) {\n route.security = metadata.security\n }\n\n // Add description and summary\n if (routeConfig.description) {\n route.description = routeConfig.description\n }\n if (routeConfig.summary) {\n route.summary = routeConfig.summary\n }\n\n return createRoute(route as OpenAPIRouteConfig)\n } catch (error) {\n throw new OpenAPIRouteRegistrationError(path, error instanceof Error ? error.message : String(error))\n }\n }\n\n /**\n * Check if a body definition is a RouteBodyObject (has schema key) vs bare ZodType\n */\n private isRouteBodyObject(body: RouteConfig['body']): body is RouteBodyObject {\n return typeof body === 'object' && 'schema' in body\n }\n\n /**\n * Resolve method parameter injections from the container\n *\n * @param prototype - Controller prototype\n * @param methodName - Method name to get injections for\n * @param container - Request-scoped container\n * @returns Array of resolved dependencies in parameter order\n */\n private resolveMethodInjections(\n prototype: object,\n methodName: string,\n container: Container\n ): unknown[] {\n const injections = getMethodInjections(prototype, methodName)\n if (!injections.length) return []\n\n return injections.map((inj): unknown => container.resolve(inj.token))\n }\n\n /**\n * Create controller handler that resolves controller from request-scoped container\n * This ensures each request gets a fresh controller with request-scoped context\n */\n private createControllerHandler(\n ControllerClass: new (...args: unknown[]) => IController,\n methodName: keyof IController\n ): (c: Context<RouterEnv>) => Promise<Response> {\n return async (c: Context<RouterEnv>) => {\n this.logger.info('Handler invoked', {\n path: c.req.path,\n method: c.req.method,\n controller: ControllerClass.name,\n methodName: methodName as string,\n })\n\n try {\n const ctx = new RouterContext(c)\n const requestContainer = ctx.getContainer()\n\n // Resolve controller from request-scoped container\n // Controller will get request-scoped TenancyContext via DI\n const controller = requestContainer.resolve<IController>(ControllerClass)\n\n const method = controller[methodName]\n if (typeof method === 'function') {\n const injectedArgs = this.resolveMethodInjections(ControllerClass.prototype as object, methodName as string, requestContainer)\n return await (method as (...args: unknown[]) => Promise<Response>).apply(controller, [ctx, ...injectedArgs])\n }\n\n throw new ControllerMethodNotFoundError(methodName as string, ControllerClass.name)\n } catch (error) {\n this.logger.error('Error in controller handler', {\n controller: ControllerClass.name,\n methodName: methodName as string,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n })\n throw error\n }\n }\n }\n}\n","import type { Context, MiddlewareHandler } from 'hono'\nimport type { Container } from '../di/container'\nimport { DI_TOKENS } from '../di/tokens'\nimport { getHttpStatus, type GlobalErrorHandler } from '../errors'\nimport { OpenAPIHono } from '../i18n/validation'\nimport type { LoggerService } from '../logger'\nimport {\n MiddlewareConfigurationService,\n type MiddlewareConfigEntry,\n} from '../middleware'\nimport { OPENAPI_TOKENS, type OpenAPIService } from '../openapi'\nimport type { Constructor } from '../types'\nimport { ROUTER_CONTEXT_KEYS } from './constants'\nimport type { IController } from './controller'\nimport { RouteNotFoundError } from './errors'\nimport { HonoAppAlreadyConfiguredError } from './errors/hono-app-already-configured.error'\nimport { SchemaValidationError } from './errors/schema-validation.error'\nimport { createLoggerMiddleware } from './middleware'\nimport type { Middleware } from './middleware.interface'\nimport { RouterContext } from './router-context'\nimport { RouteRegistrationService } from './services/route-registration.service'\nimport type { RouterEnv, VersioningOptions } from './types'\n\nconst isMiddlewareClass = (arg: unknown): arg is Constructor<Middleware> =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n typeof arg === 'function' && arg.prototype && 'handle' in arg.prototype\n\n\n/**\n * HonoApp — extends OpenAPIHono with Stratal-specific setup\n *\n * Absorbs all Hono-related setup from the former RouterService and RequestScopeService:\n * - Request scope middleware (child container per request)\n * - Global middleware (CORS, logging, error handling)\n * - defaultHook for validation errors\n * - `use()` overload for Stratal middleware classes\n * - `configure()` for module middleware, OpenAPI, routes, and 404\n */\nexport class HonoApp extends OpenAPIHono<RouterEnv> {\n private configured = false\n private readonly _container: Container\n private readonly _logger: LoggerService\n\n /**\n * Reference to the original Hono `use` implementation.\n * Captured in constructor after super() sets it as an instance property.\n * Used by private methods to register middleware without going through the override.\n */\n private nativeUse!: typeof this.use\n\n constructor(\n container: Container,\n logger: LoggerService,\n ) {\n super({\n defaultHook: (result, c) => {\n if (!result.success) {\n const requestContainer = c.get(ROUTER_CONTEXT_KEYS.REQUEST_CONTAINER)\n const errorHandler = requestContainer.resolve<GlobalErrorHandler>(DI_TOKENS.ErrorHandler)\n const validationError = new SchemaValidationError(result.error)\n const errorResponse = errorHandler.handle(validationError)\n return c.json(errorResponse, getHttpStatus(errorResponse.code))\n }\n },\n })\n\n this._container = container\n this._logger = logger\n\n // Capture Hono's original `use` (set by super() as an instance property)\n this.nativeUse = this.use\n\n // Override `use` to support Stratal middleware classes alongside Hono-native handlers\n this.use = ((...args: unknown[]) => {\n if (isMiddlewareClass(args[0])) {\n this.applyMiddlewareClasses('*', args as Constructor<Middleware>[])\n return this\n }\n\n if (typeof args[0] === 'string' && args.length > 1 && isMiddlewareClass(args[1])) {\n this.applyMiddlewareClasses(args[0], args.slice(1) as Constructor<Middleware>[])\n return this\n }\n\n return (this.nativeUse as (...a: unknown[]) => unknown)(...args)\n }) as typeof this.use\n\n // Internal setup — uses nativeUse to bypass the override\n this.setupRequestScope()\n this.setupGlobalMiddleware()\n }\n\n /**\n * Configure module middleware, OpenAPI endpoints, controller routes, and 404 handler.\n * Called once by Application.initialize().\n */\n async configure(\n middlewareConfigs: MiddlewareConfigEntry[],\n controllers: Constructor<IController>[],\n versioningOptions?: VersioningOptions | null,\n ): Promise<void> {\n if (this.configured) throw new HonoAppAlreadyConfiguredError()\n\n // Module middleware\n const middlewareConfigService = new MiddlewareConfigurationService(this._logger, versioningOptions ?? null)\n middlewareConfigService.applyMiddlewares(this, middlewareConfigs, controllers, this._container)\n\n // OpenAPI endpoints\n const openAPIService = this._container.resolve<OpenAPIService>(OPENAPI_TOKENS.OpenAPIService)\n openAPIService.setupEndpoints(this, controllers)\n\n // Controller routes\n const routeRegistrationService = new RouteRegistrationService(this._logger, versioningOptions ?? null)\n await routeRegistrationService.configure(this, controllers)\n\n // 404 handler (must be last)\n this.notFound((c) => { throw new RouteNotFoundError(c.req.path, c.req.method) })\n\n this.configured = true\n }\n\n private setupRequestScope(): void {\n this.nativeUse('*', async (c: Context<RouterEnv>, next: () => Promise<void>) => {\n const routerContext = new RouterContext(c)\n const requestContainer = this._container.createRequestScope(routerContext)\n c.set(ROUTER_CONTEXT_KEYS.REQUEST_CONTAINER, requestContainer)\n try {\n await next()\n } finally {\n await requestContainer.dispose()\n }\n })\n }\n\n private setupGlobalMiddleware(): void {\n this.nativeUse('*', createLoggerMiddleware(this._logger) as MiddlewareHandler<RouterEnv>)\n this.onError((err, c) => {\n const requestContainer = c.get(ROUTER_CONTEXT_KEYS.REQUEST_CONTAINER)\n const errorHandler = requestContainer.resolve<GlobalErrorHandler>(DI_TOKENS.ErrorHandler)\n const errorResponse = errorHandler.handle(err)\n return c.json(errorResponse, getHttpStatus(errorResponse.code))\n })\n }\n\n private applyMiddlewareClasses(path: string, classes: Constructor<Middleware>[]): this {\n this.nativeUse(path, async (c: Context<RouterEnv>, next: () => Promise<void>) => {\n const requestContainer = c.get(ROUTER_CONTEXT_KEYS.REQUEST_CONTAINER)\n const ctx = new RouterContext(c)\n\n // Build chain from end to start\n let current = next\n for (let i = classes.length - 1; i >= 0; i--) {\n const prevNext = current\n const middleware = requestContainer.resolve<Middleware>(classes[i])\n current = () => middleware.handle(ctx, prevNext)\n }\n\n await current()\n })\n return this\n }\n}\n","/**\n * I18n Service\n *\n * Request-scoped service for translations.\n * Injects RouterContext to access request-specific locale.\n * Uses pre-built CoreContext from MessageLoaderService (singleton) for zero-cost lookups.\n */\n\nimport { translate } from '@intlify/core-base'\nimport { inject } from 'tsyringe'\nimport { Transient } from '../../di/decorators'\nimport { ROUTER_TOKENS, RouterContext } from '../../router'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport type { II18nService, MessageKeys, MessageParams } from '../i18n.types'\nimport type { MessageLoaderService } from './message-loader.service'\n\n/**\n * I18n Service\n *\n * Provides internationalization (i18n) support for the application.\n * Injects RouterContext to access request-specific locale.\n *\n * @example Usage in services\n * ```typescript\n * @Transient(MY_TOKENS.UserService)\n * export class UserService {\n * constructor(\n * @inject(I18N_TOKENS.I18nService) private readonly i18n: II18nService\n * ) {}\n *\n * getWelcomeMessage(): string {\n * return this.i18n.t('common.welcome')\n * }\n * }\n * ```\n */\n@Transient(I18N_TOKENS.I18nService)\nexport class I18nService implements II18nService {\n constructor(\n @inject(I18N_TOKENS.MessageLoader) private readonly loader: MessageLoaderService,\n @inject(ROUTER_TOKENS.RouterContext, { isOptional: true }) private readonly routerContext?: RouterContext\n ) {\n }\n\n /**\n * Translate a message key\n *\n * @param key - Message key (e.g., 'common.actions.save')\n * @param params - Optional parameters for interpolation\n * @returns Translated string\n */\n t(key: MessageKeys, params?: MessageParams): string {\n const context = this.loader.getCoreContext(this.getLocale())\n\n const result = params !== undefined\n ? translate(context, key, params)\n : translate(context, key)\n\n return typeof result === 'string' ? result : key\n }\n\n /**\n * Get current locale\n *\n * @returns Current locale code from RouterContext or default locale\n */\n getLocale(): string {\n return this.routerContext?.getLocale() ?? 'en'\n }\n}\n","/**\n * Message Loader Service\n *\n * Singleton service that loads and caches all locale messages at startup.\n * Merges core messages (from packages/modules) with app messages (from forRoot options).\n * Lazily builds and caches CoreContext per locale on first access.\n */\n\nimport type { CoreContext } from '@intlify/core-base'\nimport { createCoreContext } from '@intlify/core-base'\nimport { inject } from 'tsyringe'\nimport { Transient } from '../../di/decorators'\nimport type { I18nModuleOptions } from '../i18n.options'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport { getLocales, getMessages } from '../messages'\n\n@Transient(I18N_TOKENS.MessageLoader)\nexport class MessageLoaderService {\n private readonly cache: Map<string, Record<string, unknown>>\n private readonly contextCache: Map<string, CoreContext>\n private readonly locales: string[]\n private readonly defaultLocale: string\n\n constructor(\n @inject(I18N_TOKENS.Options, { isOptional: true })\n private readonly options?: I18nModuleOptions\n ) {\n this.defaultLocale = this.options?.defaultLocale ?? 'en'\n this.cache = new Map()\n this.contextCache = new Map()\n\n // Get core messages (always available)\n const coreMessages = getMessages()\n const coreLocales = getLocales()\n\n // Get app messages from options (if provided)\n const appMessages = this.options?.messages ?? {}\n\n // Determine available locales (union of core and app locales)\n const appLocales = Object.keys(appMessages)\n const allLocales = [...new Set([...coreLocales, ...appLocales])]\n this.locales = allLocales\n\n // Merge messages for each locale (CoreContext built lazily on first access)\n for (const locale of allLocales) {\n const coreLocaleMessages = coreMessages[locale] ?? {}\n const appLocaleMessages = appMessages[locale] ?? {}\n\n // Deep merge: core defaults + app overrides\n const merged = this.deepMerge(coreLocaleMessages, appLocaleMessages)\n this.cache.set(locale, merged)\n }\n }\n\n /**\n * Get CoreContext for a locale (lazily built and cached on first access)\n * Falls back to default locale if locale not found\n *\n * @param locale - Locale code\n * @returns Cached CoreContext ready for translation\n */\n getCoreContext(locale: string): CoreContext {\n const cached = this.contextCache.get(locale)\n if (cached) return cached\n\n // Resolve effective locale (fallback to default if unsupported)\n const effectiveLocale = this.cache.has(locale) ? locale : this.defaultLocale\n\n // Check if effective locale already cached (handles fallback)\n const cachedEffective = this.contextCache.get(effectiveLocale)\n if (cachedEffective) return cachedEffective\n\n // Build and cache on first access\n const messages = this.cache.get(effectiveLocale) ?? {}\n const flattened = this.flattenMessages(messages)\n const ctx = createCoreContext({\n locale: effectiveLocale,\n messages: { [effectiveLocale]: flattened },\n missingWarn: false,\n fallbackWarn: false,\n })\n this.contextCache.set(effectiveLocale, ctx)\n return ctx\n }\n\n /**\n * Get messages for a specific locale\n * Falls back to default locale if locale not found\n *\n * @param locale - Locale code\n * @returns Message object for the locale\n */\n getMessages(locale: string): Record<string, unknown> {\n const msgs = this.cache.get(locale)\n if (!msgs) {\n // Fallback to default locale\n return this.cache.get(this.defaultLocale) ?? {}\n }\n return msgs\n }\n\n /**\n * Get list of available locale codes\n *\n * @returns Array of locale codes\n */\n getAvailableLocales(): string[] {\n return this.locales\n }\n\n /**\n * Check if a locale is supported\n *\n * @param locale - Locale code to check\n * @returns true if locale is supported\n */\n isLocaleSupported(locale: string): boolean {\n return this.cache.has(locale)\n }\n\n /**\n * Get default locale\n *\n * @returns Default locale code\n */\n getDefaultLocale(): string {\n return this.defaultLocale\n }\n\n /**\n * Flatten nested messages to dot-notation\n *\n * Converts { auth: { login: { title: 'Sign In' } } }\n * to { 'auth.login.title': 'Sign In' }\n */\n private flattenMessages(\n messages: Record<string, unknown>,\n prefix = ''\n ): Record<string, string> {\n const result: Record<string, string> = {}\n\n for (const key of Object.keys(messages)) {\n const value = messages[key]\n const newKey = prefix ? `${prefix}.${key}` : key\n\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n Object.assign(result, this.flattenMessages(value as Record<string, unknown>, newKey))\n } else {\n result[newKey] = String(value)\n }\n }\n\n return result\n }\n\n /**\n * Deep merge two objects\n * App messages override core messages at leaf level\n */\n private deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n ): Record<string, unknown> {\n const result: Record<string, unknown> = { ...target }\n\n for (const key of Object.keys(source)) {\n const targetValue = target[key]\n const sourceValue = source[key]\n\n if (\n typeof targetValue === 'object' &&\n targetValue !== null &&\n !Array.isArray(targetValue) &&\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(sourceValue)\n ) {\n // Both are objects, deep merge\n result[key] = this.deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n )\n } else {\n // Source value overrides target\n result[key] = sourceValue\n }\n }\n\n return result\n }\n}\n","/**\n * I18n Module\n *\n * Core infrastructure module for internationalization.\n * Provides message translation and locale handling.\n *\n * @example Default usage (system messages only)\n * ```typescript\n * // In Application.ts - I18nModule is already included in core modules\n * // Works with system messages and 'en' default locale\n * ```\n *\n * @example With app-specific configuration\n * ```typescript\n * // In apps/backend/src/app.module.ts\n * import { i18nConfig } from './i18n'\n *\n * @Module({\n * imports: [I18nModule.forRoot(i18nConfig)],\n * })\n * export class AppModule {}\n * ```\n */\n\nimport { backendErrorMap, z } from './validation'\nimport { Scope } from '../di'\nimport type { MiddlewareConfigurable, MiddlewareConsumer } from '../middleware/types'\nimport { Module } from '../module'\nimport type { DynamicModule } from '../module/types'\nimport type { I18nModuleOptions } from './i18n.options'\nimport { I18N_TOKENS } from './i18n.tokens'\nimport { I18nContextMiddleware } from './middleware/i18n-context.middleware'\nimport { LocaleExtractionMiddleware } from './middleware/locale-extraction.middleware'\nimport { I18nService } from './services/i18n.service'\nimport { MessageLoaderService } from './services/message-loader.service'\nimport { setupI18nCompiler } from './setup'\n\n// Setup i18n JIT compiler once at module load time\n// This registers the message compiler globally for all I18nService instances\n// Must be called before any Application initialization\nsetupI18nCompiler()\n\n// Set global Zod error map for i18n support using v4 config API\n// This registers the custom error map that translates validation errors\n// Must be set once at module load time, before any schema validation\nz.config({ customError: backendErrorMap })\n\n\n@Module({\n providers: [\n // Singleton: Message loader (loaded once at startup, via Scope.Singleton)\n { provide: I18N_TOKENS.MessageLoader, useClass: MessageLoaderService, scope: Scope.Singleton },\n // Request-scoped: I18n service (per request via Scope.Request)\n { provide: I18N_TOKENS.I18nService, useClass: I18nService },\n ],\n})\nexport class I18nModule implements MiddlewareConfigurable {\n /**\n * Configure I18n with app-specific options\n *\n * Use this method in AppModule to provide custom locale configuration\n * and app-specific messages that merge with system messages.\n *\n * @param options - I18n configuration options\n * @returns Dynamic module with options provider\n *\n * @example\n * ```typescript\n * // apps/backend/src/i18n/index.ts\n * export const i18nConfig: I18nModuleOptions = {\n * defaultLocale: 'en',\n * fallbackLocale: 'en',\n * locales: ['en', 'fr'],\n * messages: appMessages\n * }\n *\n * // apps/backend/src/app.module.ts\n * @Module({\n * imports: [I18nModule.forRoot(i18nConfig)],\n * })\n * export class AppModule {}\n * ```\n */\n static forRoot(options: I18nModuleOptions = {}): DynamicModule {\n return {\n module: I18nModule,\n providers: [\n { provide: I18N_TOKENS.Options, useValue: options },\n ],\n }\n }\n\n /**\n * Configure middleware for locale extraction and i18n context\n */\n configure(consumer: MiddlewareConsumer): void {\n consumer\n .apply(LocaleExtractionMiddleware, I18nContextMiddleware)\n .forRoutes('*')\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,319 @@
1
+ //#region src/i18n/messages/en/common.d.ts
2
+ /**
3
+ * System Common Messages - English
4
+ *
5
+ * Common messages used by packages/modules infrastructure.
6
+ * These are automatically merged with application-specific messages.
7
+ */
8
+ declare const common: {
9
+ readonly api: {
10
+ readonly title: "Stratal API";
11
+ readonly description: "Platform API";
12
+ readonly serverDescription: "API server";
13
+ readonly security: {
14
+ readonly bearerAuth: "JWT Bearer token authentication";
15
+ readonly apiKey: "API key for service authentication";
16
+ readonly sessionCookie: "Session cookie for browser authentication";
17
+ };
18
+ };
19
+ };
20
+ //#endregion
21
+ //#region src/i18n/messages/en/errors.d.ts
22
+ /**
23
+ * System Error Messages - English
24
+ *
25
+ * Error messages used by packages/modules infrastructure.
26
+ * These are automatically merged with application-specific messages.
27
+ */
28
+ declare const errors: {
29
+ readonly internalError: "An internal error occurred";
30
+ readonly notFound: "Resource not found";
31
+ readonly unauthorized: "Unauthorized. Please sign in.";
32
+ readonly forbidden: "Access denied";
33
+ readonly honoAppAlreadyConfigured: "HonoApp has already been configured and can only be configured once";
34
+ readonly routeNotFound: "Route not found: {method} {path}";
35
+ readonly routeAccessDenied: "Resource not found";
36
+ readonly controllerMethodNotFound: "Method {methodName} not found on {controllerName}";
37
+ readonly controllerRegistration: "Failed to register controller {controllerName}: {reason}";
38
+ readonly websocketBodyNotAvailable: "body() is not available in WebSocket gateways. Use WebSocket messages instead.";
39
+ readonly websocketDuplicateEventHandler: "@{decorator}() is already applied to '{existingMethod}'. Only one method per gateway can handle this event.";
40
+ readonly contextNotInitialized: "Context has not been initialized";
41
+ readonly userNotAuthenticated: "User is not authenticated";
42
+ readonly insufficientPermissions: "Insufficient permissions to perform this action";
43
+ readonly requestContainerNotInitialized: "Request container has not been initialized";
44
+ readonly requestScopeOperationNotAllowed: "{methodName}() cannot be called on this container scope. Check if you are calling it on the correct container (global vs request-scoped).";
45
+ readonly conditionalBindingFallback: "Conditional binding predicate returned false for token \"{token}\" but no fallback was provided and no existing registration exists.";
46
+ readonly configNotInitialized: "Configuration service has not been initialized";
47
+ readonly configModuleNotInitialized: "ConfigModule.forRoot() was not called before module initialization";
48
+ readonly stratalNotInitialized: "Stratal has not been instantiated. Ensure you export a Stratal instance as the default export.";
49
+ readonly moduleAlreadyRegistered: "Module {moduleName} is already registered";
50
+ readonly moduleDependencyNotFound: "Module dependency {dependency} not found for module {moduleName}";
51
+ readonly moduleCircularDependency: "Circular dependency detected: {cycle}";
52
+ readonly invalidModuleProvider: "Invalid module provider configuration: {provider}";
53
+ readonly databaseGeneric: "Database error occurred";
54
+ readonly databaseRecordNotFound: "Record not found in database";
55
+ readonly databaseUniqueConstraint: "Record already exists";
56
+ readonly databaseForeignKeyConstraint: "Related record not found";
57
+ readonly databaseConnectionFailed: "Failed to connect to database";
58
+ readonly databaseTimeout: "Database query timeout";
59
+ readonly databaseNullConstraint: "Required field is missing";
60
+ readonly databaseTooManyConnections: "Too many database connections";
61
+ readonly databaseTransactionConflict: "Transaction conflict or deadlock";
62
+ readonly databaseConstraintFailed: "A database constraint was violated";
63
+ readonly databaseTableNotFound: "The specified table does not exist in the database";
64
+ readonly databaseColumnNotFound: "The specified column does not exist in the table";
65
+ readonly databaseInvalidQuery: "The database query is invalid or malformed";
66
+ readonly invalidErrorCodeRange: "Invalid error code range: {code}";
67
+ readonly queueBindingNotFound: "Queue binding {queueName} not found in environment";
68
+ readonly queueProviderNotSupported: "Queue provider \"{provider}\" is not supported. Valid providers: cloudflare, sync";
69
+ readonly cronExecutionFailed: "{count} cron job(s) failed for schedule \"{schedule}\": {jobs}";
70
+ readonly localeNotSupported: "Locale '{locale}' is not supported. Supported locales: {supportedLocales}";
71
+ readonly translationMissing: "Translation missing for key '{key}' in locale '{locale}'";
72
+ readonly schemaValidation: "Schema validation failed";
73
+ readonly openapiValidation: "OpenAPI validation failed: {details}";
74
+ readonly openapiRouteRegistration: "Failed to register OpenAPI route {path}: {reason}";
75
+ readonly email: {
76
+ readonly resendApiKeyMissing: "Resend API key not configured. Set RESEND_EMAIL_API_KEY environment variable.";
77
+ readonly smtpConfigurationMissing: "SMTP configuration missing. Set SMTP_URL environment variable.";
78
+ readonly smtpHostMissing: "SMTP host not configured. Check SMTP_URL format (smtp://user:pass@host:port).";
79
+ readonly smtpConnectionFailed: "Failed to connect to SMTP server {smtpHost}:{smtpPort}";
80
+ readonly resendApiFailed: "Resend API error";
81
+ readonly providerNotSupported: "Unsupported email provider: {provider}. Supported providers: resend, smtp";
82
+ };
83
+ readonly storage: {
84
+ readonly fileNotFound: "File at path \"{path}\" was not found";
85
+ readonly invalidDisk: "Storage disk \"{disk}\" is not configured";
86
+ readonly invalidFileType: "File type \"{mimeType}\" is not allowed";
87
+ readonly fileTooLarge: "File size {size} exceeds maximum allowed size of {maxSize}";
88
+ readonly presignedUrlInvalidExpiry: "Expiry must be between {min} and {max} seconds";
89
+ readonly diskNotConfigured: "Disk \"{disk}\" is not configured";
90
+ readonly providerNotSupported: "Storage provider \"{provider}\" is not supported";
91
+ readonly responseBodyMissing: "No body in storage response for path: {path}";
92
+ };
93
+ readonly cache: {
94
+ readonly getFailed: "Failed to retrieve value from cache for key '{key}'";
95
+ readonly putFailed: "Failed to store value in cache for key '{key}'";
96
+ readonly deleteFailed: "Failed to delete value from cache for key '{key}'";
97
+ readonly listFailed: "Failed to list cache keys";
98
+ };
99
+ readonly auth: {
100
+ readonly tokenRequired: "Verification token is required";
101
+ readonly invalidToken: "Invalid or expired verification token";
102
+ readonly verificationFailed: "Verification failed. Please try again.";
103
+ readonly userNotFound: "User not found. Please check your credentials.";
104
+ readonly invalidCredentials: "Invalid email or password";
105
+ readonly invalidPassword: "Invalid password";
106
+ readonly invalidEmail: "Invalid email address";
107
+ readonly sessionExpired: "Your session has expired. Please sign in again.";
108
+ readonly emailNotVerified: "Please verify your email address before signing in";
109
+ readonly passwordTooShort: "Password must be at least {minLength} characters";
110
+ readonly passwordTooLong: "Password must be at most {maxLength} characters";
111
+ readonly accountAlreadyExists: "An account with this email already exists";
112
+ readonly failedToCreateUser: "Failed to create user account. Please try again.";
113
+ readonly failedToCreateSession: "Failed to create session. Please try again.";
114
+ readonly failedToGetSession: "Failed to retrieve session. Please try again.";
115
+ readonly failedToUpdateUser: "Failed to update user information. Please try again.";
116
+ readonly failedToGetUserInfo: "Failed to retrieve user information. Please try again.";
117
+ readonly socialAccountLinked: "This social account is already linked to another user";
118
+ readonly providerNotFound: "Authentication provider not found";
119
+ readonly userEmailNotFound: "User email address not found";
120
+ readonly accountNotFound: "Account not found";
121
+ readonly credentialAccountNotFound: "Credential account not found";
122
+ readonly cannotUnlinkLastAccount: "Cannot unlink your last account";
123
+ readonly userAlreadyHasPassword: "User already has a password set";
124
+ readonly emailCannotBeUpdated: "Email address cannot be updated at this time";
125
+ readonly tokenExpired: "The verification token has expired. Please request a new verification email.";
126
+ };
127
+ readonly seederNameCollision: "Seeder name collision: \"{name}\" is already registered. Use distinct class names for each seeder.";
128
+ readonly seederNotRegistered: "Seeder \"{name}\" is not registered";
129
+ readonly migration: {
130
+ readonly failed: "Migration {migrationName} failed: {error}";
131
+ readonly checksumMismatch: "Migration {migrationName} checksum mismatch (expected: {expected}, actual: {actual})";
132
+ readonly alreadyApplied: "Migration {migrationName} has already been applied";
133
+ readonly notFound: "Migration {migrationName} not found";
134
+ };
135
+ };
136
+ //#endregion
137
+ //#region src/i18n/messages/en/emails.d.ts
138
+ /**
139
+ * System Email Messages - English
140
+ *
141
+ * Email-related messages used by packages/modules infrastructure.
142
+ * These are automatically merged with application-specific messages.
143
+ */
144
+ declare const emails: {
145
+ readonly magicLink: {
146
+ readonly subject: "Your sign-in link";
147
+ };
148
+ };
149
+ //#endregion
150
+ //#region src/i18n/messages/en/validation.d.ts
151
+ /**
152
+ * Form validation messages - English
153
+ */
154
+ declare const validation: {
155
+ readonly required: "This field is required";
156
+ readonly email: "Invalid email address";
157
+ readonly minLength: "Must be at least {min} characters";
158
+ readonly maxLength: "Must not exceed {max} characters";
159
+ readonly min: "Must be at least {min}";
160
+ readonly max: "Must not exceed {max}";
161
+ readonly pattern: "Invalid format";
162
+ readonly numeric: "Must be a number";
163
+ readonly url: "Invalid URL";
164
+ readonly date: "Invalid date";
165
+ readonly passwordStrength: "Password must contain at least one uppercase letter, one lowercase letter, and one number";
166
+ readonly passwordMatch: "Passwords do not match";
167
+ readonly unique: "This value already exists";
168
+ readonly phone: "Invalid phone number";
169
+ readonly fileRequired: "Please upload a file";
170
+ readonly fileTooLarge: "File must be smaller than {max}";
171
+ readonly invalidFileType: "Please upload a PDF, JPG, or PNG file";
172
+ readonly schoolTypes: {
173
+ readonly required: "School type is required";
174
+ readonly atLeastOne: "Please select at least one school type";
175
+ readonly invalidCode: "Invalid school type: {code}";
176
+ readonly notAvailableInCountry: "{schoolType} is not available in {country}";
177
+ readonly countryNotSupported: "Country {country} is not supported";
178
+ };
179
+ readonly timezone: {
180
+ readonly required: "Timezone is required";
181
+ readonly invalid: "Invalid timezone. Please select a valid IANA timezone.";
182
+ };
183
+ readonly locale: {
184
+ readonly required: "Language is required";
185
+ readonly invalid: "Invalid language. Supported languages: {locales}";
186
+ };
187
+ };
188
+ //#endregion
189
+ //#region src/i18n/messages/en/zod.d.ts
190
+ /**
191
+ * Zod validation error messages - English
192
+ *
193
+ * Comprehensive messages for all Zod validation error codes
194
+ * Structured to match Zod's issue types and validation contexts
195
+ */
196
+ declare const zodI18n: {
197
+ readonly errors: {
198
+ readonly required: "Required";
199
+ readonly invalid_type: "Expected {expected}, received {received}";
200
+ readonly invalid_literal: "Invalid literal value, expected {expected}";
201
+ readonly custom: {
202
+ readonly default: "Invalid value";
203
+ readonly emailOrTextRequired: "Either html or text content must be provided";
204
+ readonly invalidFromEmail: "Invalid from email address";
205
+ readonly fileInstanceRequired: "File must be a File instance";
206
+ readonly filePathRequired: "File path is required";
207
+ readonly diskNameRequired: "Disk name is required";
208
+ readonly endpointRequired: "Endpoint URL is required for S3";
209
+ readonly bucketNameRequired: "Bucket name is required";
210
+ readonly accessKeyRequired: "Access key ID is required";
211
+ readonly secretKeyRequired: "Secret access key is required";
212
+ readonly storageDiskRequired: "At least one storage disk is required";
213
+ readonly databaseUrlRequired: "Database URL is required";
214
+ readonly domainRequired: "Domain is required";
215
+ readonly domainTooLong: "Domain too long";
216
+ readonly invalidDomainFormat: "Invalid domain format";
217
+ };
218
+ readonly invalid_union: "Invalid input";
219
+ readonly invalid_union_discriminator: "Invalid discriminator value. Expected {options}";
220
+ readonly invalid_enum_value: "Invalid enum value. Expected {options}, received {received}";
221
+ readonly unrecognized_keys: "Unrecognized key(s) in object: {keys}";
222
+ readonly invalid_arguments: "Invalid function arguments";
223
+ readonly invalid_return_type: "Invalid function return type";
224
+ readonly invalid_date: "Invalid date";
225
+ readonly invalid_intersection_types: "Intersection results could not be merged";
226
+ readonly not_multiple_of: "Number must be a multiple of {multipleOf}";
227
+ readonly not_finite: "Number must be finite";
228
+ readonly invalid_string: {
229
+ readonly email: "Invalid email address";
230
+ readonly url: "Invalid URL";
231
+ readonly uuid: "Invalid UUID";
232
+ readonly cuid: "Invalid CUID";
233
+ readonly cuid2: "Invalid CUID2";
234
+ readonly ulid: "Invalid ULID";
235
+ readonly regex: "Invalid format";
236
+ readonly datetime: "Invalid datetime";
237
+ readonly ip: "Invalid IP address";
238
+ readonly emoji: "Invalid emoji";
239
+ readonly startsWith: "Must start with \"{startsWith}\"";
240
+ readonly endsWith: "Must end with \"{endsWith}\"";
241
+ readonly includes: "Must include \"{includes}\"";
242
+ readonly base64: "Invalid Base64";
243
+ readonly nanoid: "Invalid NanoID";
244
+ readonly cidr: "Invalid CIDR";
245
+ readonly jwt: "Invalid JWT";
246
+ readonly time: "Invalid time";
247
+ };
248
+ readonly too_small: {
249
+ readonly string: {
250
+ readonly exact: "Must be exactly {minimum} characters";
251
+ readonly inclusive: "Must be at least {minimum} characters";
252
+ readonly not_inclusive: "Must be more than {minimum} characters";
253
+ };
254
+ readonly number: {
255
+ readonly exact: "Must be exactly {minimum}";
256
+ readonly inclusive: "Must be at least {minimum}";
257
+ readonly not_inclusive: "Must be greater than {minimum}";
258
+ };
259
+ readonly array: {
260
+ readonly exact: "Must contain exactly {minimum} item(s)";
261
+ readonly inclusive: "Must contain at least {minimum} item(s)";
262
+ readonly not_inclusive: "Must contain more than {minimum} item(s)";
263
+ };
264
+ readonly set: {
265
+ readonly exact: "Must contain exactly {minimum} item(s)";
266
+ readonly inclusive: "Must contain at least {minimum} item(s)";
267
+ readonly not_inclusive: "Must contain more than {minimum} item(s)";
268
+ };
269
+ readonly date: {
270
+ readonly exact: "Date must be {minimum}";
271
+ readonly inclusive: "Date must be {minimum} or later";
272
+ readonly not_inclusive: "Date must be after {minimum}";
273
+ };
274
+ readonly bigint: {
275
+ readonly exact: "Must be exactly {minimum}";
276
+ readonly inclusive: "Must be at least {minimum}";
277
+ readonly not_inclusive: "Must be greater than {minimum}";
278
+ };
279
+ };
280
+ readonly too_big: {
281
+ readonly string: {
282
+ readonly exact: "Must be exactly {maximum} characters";
283
+ readonly inclusive: "Must be at most {maximum} characters";
284
+ readonly not_inclusive: "Must be less than {maximum} characters";
285
+ };
286
+ readonly number: {
287
+ readonly exact: "Must be exactly {maximum}";
288
+ readonly inclusive: "Must be at most {maximum}";
289
+ readonly not_inclusive: "Must be less than {maximum}";
290
+ };
291
+ readonly array: {
292
+ readonly exact: "Must contain exactly {maximum} item(s)";
293
+ readonly inclusive: "Must contain at most {maximum} item(s)";
294
+ readonly not_inclusive: "Must contain less than {maximum} item(s)";
295
+ };
296
+ readonly set: {
297
+ readonly exact: "Must contain exactly {maximum} item(s)";
298
+ readonly inclusive: "Must contain at most {maximum} item(s)";
299
+ readonly not_inclusive: "Must contain less than {maximum} item(s)";
300
+ };
301
+ readonly date: {
302
+ readonly exact: "Date must be {maximum}";
303
+ readonly inclusive: "Date must be {maximum} or earlier";
304
+ readonly not_inclusive: "Date must be before {maximum}";
305
+ };
306
+ readonly bigint: {
307
+ readonly exact: "Must be exactly {maximum}";
308
+ readonly inclusive: "Must be at most {maximum}";
309
+ readonly not_inclusive: "Must be less than {maximum}";
310
+ };
311
+ };
312
+ };
313
+ };
314
+ declare namespace index_d_exports {
315
+ export { common, emails, errors, validation, zodI18n };
316
+ }
317
+ //#endregion
318
+ export { errors as a, emails as i, zodI18n as n, common as o, validation as r, index_d_exports as t };
319
+ //# sourceMappingURL=index-CSuHOJc3.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CSuHOJc3.d.mts","names":[],"sources":["../src/i18n/messages/en/common.ts","../src/i18n/messages/en/errors.ts","../src/i18n/messages/en/emails.ts","../src/i18n/messages/en/validation.ts","../src/i18n/messages/en/zod.ts","../src/i18n/messages/en/index.ts"],"mappings":";;;;AAOA;;;cAAa,MAAA;EAAA;;;;;;;;;;;;;;;;AAAb;;;cCAa,MAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADAb;;;cEAa,MAAA;EAAA,SAIH,SAAA;IAAA,SAAA,OAAA;EAAA;AAAA;;;;;;cCPG,UAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AHGb;;;cIAa,OAAA;EAAA"}