stratal 0.0.13 → 0.0.14

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 (1032) hide show
  1. package/dist/base-email.provider-bzdAYp8Z.mjs +42 -0
  2. package/dist/base-email.provider-bzdAYp8Z.mjs.map +1 -0
  3. package/dist/cache/index.d.mts +219 -0
  4. package/dist/cache/index.d.mts.map +1 -0
  5. package/dist/cache/index.mjs +247 -0
  6. package/dist/cache/index.mjs.map +1 -0
  7. package/dist/chunk-D1SwGrFN.mjs +27 -0
  8. package/dist/config/index.d.mts +273 -0
  9. package/dist/config/index.d.mts.map +1 -0
  10. package/dist/config/index.mjs +235 -0
  11. package/dist/config/index.mjs.map +1 -0
  12. package/dist/cron/index.d.mts +128 -0
  13. package/dist/cron/index.d.mts.map +1 -0
  14. package/dist/cron/index.mjs +4 -0
  15. package/dist/cron-manager-CpS_hrDD.mjs +107 -0
  16. package/dist/cron-manager-CpS_hrDD.mjs.map +1 -0
  17. package/dist/di/index.d.mts +2 -0
  18. package/dist/di/index.mjs +3 -0
  19. package/dist/email/index.d.mts +532 -0
  20. package/dist/email/index.d.mts.map +1 -0
  21. package/dist/email/index.mjs +476 -0
  22. package/dist/email/index.mjs.map +1 -0
  23. package/dist/en-C9U5-ETs.mjs +317 -0
  24. package/dist/en-C9U5-ETs.mjs.map +1 -0
  25. package/dist/errors/index.d.mts +2 -0
  26. package/dist/errors/index.mjs +3 -0
  27. package/dist/errors-BRJgVd5-.mjs +704 -0
  28. package/dist/errors-BRJgVd5-.mjs.map +1 -0
  29. package/dist/events/index.d.mts +210 -0
  30. package/dist/events/index.d.mts.map +1 -0
  31. package/dist/events/index.mjs +3 -0
  32. package/dist/events-CQyvSyrQ.mjs +190 -0
  33. package/dist/events-CQyvSyrQ.mjs.map +1 -0
  34. package/dist/gateway-context-D7TFPLi5.mjs +226 -0
  35. package/dist/gateway-context-D7TFPLi5.mjs.map +1 -0
  36. package/dist/guards/index.d.mts +172 -0
  37. package/dist/guards/index.d.mts.map +1 -0
  38. package/dist/guards/index.mjs +2 -0
  39. package/dist/guards-B5o618bL.mjs +151 -0
  40. package/dist/guards-B5o618bL.mjs.map +1 -0
  41. package/dist/i18n/index.d.mts +3 -0
  42. package/dist/i18n/index.mjs +11 -0
  43. package/dist/i18n/messages/en/index.d.mts +2 -0
  44. package/dist/i18n/messages/en/index.mjs +2 -0
  45. package/dist/i18n/validation/index.d.mts +4 -0
  46. package/dist/i18n/validation/index.mjs +3 -0
  47. package/dist/i18n.module-C9wQr_2k.mjs +1792 -0
  48. package/dist/i18n.module-C9wQr_2k.mjs.map +1 -0
  49. package/dist/index-3TtGtYlJ.d.mts +263 -0
  50. package/dist/index-3TtGtYlJ.d.mts.map +1 -0
  51. package/dist/index-BWEwA_XK.d.mts +317 -0
  52. package/dist/index-BWEwA_XK.d.mts.map +1 -0
  53. package/dist/index-C9bIk5tt.d.mts +2613 -0
  54. package/dist/index-C9bIk5tt.d.mts.map +1 -0
  55. package/dist/index-Dl4RvzNp.d.mts +185 -0
  56. package/dist/index-Dl4RvzNp.d.mts.map +1 -0
  57. package/dist/index-zKURVFOC.d.mts +632 -0
  58. package/dist/index-zKURVFOC.d.mts.map +1 -0
  59. package/dist/index.d.mts +144 -0
  60. package/dist/index.d.mts.map +1 -0
  61. package/dist/index.mjs +14 -0
  62. package/dist/logger/index.d.mts +2 -0
  63. package/dist/logger/index.mjs +2 -0
  64. package/dist/logger-Bg-CuidS.mjs +417 -0
  65. package/dist/logger-Bg-CuidS.mjs.map +1 -0
  66. package/dist/middleware/index.d.mts +2 -0
  67. package/dist/middleware/index.mjs +5 -0
  68. package/dist/middleware-B3tx1u1K.mjs +362 -0
  69. package/dist/middleware-B3tx1u1K.mjs.map +1 -0
  70. package/dist/module/index.d.mts +130 -0
  71. package/dist/module/index.d.mts.map +1 -0
  72. package/dist/module/index.mjs +7 -0
  73. package/dist/module-Dvzm4dhS.mjs +331 -0
  74. package/dist/module-Dvzm4dhS.mjs.map +1 -0
  75. package/dist/openapi/index.d.mts +202 -0
  76. package/dist/openapi/index.d.mts.map +1 -0
  77. package/dist/openapi/index.mjs +11 -0
  78. package/dist/queue/index.d.mts +2 -0
  79. package/dist/queue/index.mjs +80 -0
  80. package/dist/queue/index.mjs.map +1 -0
  81. package/dist/queue.module-ZqaZ2iY0.mjs +403 -0
  82. package/dist/queue.module-ZqaZ2iY0.mjs.map +1 -0
  83. package/dist/resend.provider-BFGt6fS4.mjs +69 -0
  84. package/dist/resend.provider-BFGt6fS4.mjs.map +1 -0
  85. package/dist/router/index.d.mts +2 -0
  86. package/dist/router/index.mjs +11 -0
  87. package/dist/router-context-DlTxpJUG.mjs +264 -0
  88. package/dist/router-context-DlTxpJUG.mjs.map +1 -0
  89. package/dist/smtp.provider-BYY-AdmU.mjs +77 -0
  90. package/dist/smtp.provider-BYY-AdmU.mjs.map +1 -0
  91. package/dist/storage/index.d.mts +743 -0
  92. package/dist/storage/index.d.mts.map +1 -0
  93. package/dist/storage/index.mjs +9 -0
  94. package/dist/storage-dgi7MG6z.mjs +787 -0
  95. package/dist/storage-dgi7MG6z.mjs.map +1 -0
  96. package/dist/stratal-D4MS_7pI.mjs +270 -0
  97. package/dist/stratal-D4MS_7pI.mjs.map +1 -0
  98. package/dist/{types.d.ts → types-JUIHSW_a.d.mts} +5 -2
  99. package/dist/types-JUIHSW_a.d.mts.map +1 -0
  100. package/dist/validation-DA5nptIp.mjs +194 -0
  101. package/dist/validation-DA5nptIp.mjs.map +1 -0
  102. package/dist/websocket/index.d.mts +168 -0
  103. package/dist/websocket/index.d.mts.map +1 -0
  104. package/dist/websocket/index.mjs +5 -0
  105. package/dist/workers/index.d.mts +90 -0
  106. package/dist/workers/index.d.mts.map +1 -0
  107. package/dist/workers/index.mjs +116 -0
  108. package/dist/workers/index.mjs.map +1 -0
  109. package/package.json +84 -28
  110. package/dist/application.d.ts +0 -101
  111. package/dist/application.d.ts.map +0 -1
  112. package/dist/application.js +0 -230
  113. package/dist/application.js.map +0 -1
  114. package/dist/cache/cache.module.d.ts +0 -14
  115. package/dist/cache/cache.module.d.ts.map +0 -1
  116. package/dist/cache/cache.module.js +0 -32
  117. package/dist/cache/cache.module.js.map +0 -1
  118. package/dist/cache/cache.tokens.d.ts +0 -5
  119. package/dist/cache/cache.tokens.d.ts.map +0 -1
  120. package/dist/cache/cache.tokens.js +0 -4
  121. package/dist/cache/cache.tokens.js.map +0 -1
  122. package/dist/cache/errors/cache-delete.error.d.ts +0 -11
  123. package/dist/cache/errors/cache-delete.error.d.ts.map +0 -1
  124. package/dist/cache/errors/cache-delete.error.js +0 -14
  125. package/dist/cache/errors/cache-delete.error.js.map +0 -1
  126. package/dist/cache/errors/cache-get.error.d.ts +0 -11
  127. package/dist/cache/errors/cache-get.error.d.ts.map +0 -1
  128. package/dist/cache/errors/cache-get.error.js +0 -14
  129. package/dist/cache/errors/cache-get.error.js.map +0 -1
  130. package/dist/cache/errors/cache-list.error.d.ts +0 -10
  131. package/dist/cache/errors/cache-list.error.d.ts.map +0 -1
  132. package/dist/cache/errors/cache-list.error.js +0 -13
  133. package/dist/cache/errors/cache-list.error.js.map +0 -1
  134. package/dist/cache/errors/cache-put.error.d.ts +0 -11
  135. package/dist/cache/errors/cache-put.error.d.ts.map +0 -1
  136. package/dist/cache/errors/cache-put.error.js +0 -14
  137. package/dist/cache/errors/cache-put.error.js.map +0 -1
  138. package/dist/cache/errors/index.d.ts +0 -5
  139. package/dist/cache/errors/index.d.ts.map +0 -1
  140. package/dist/cache/errors/index.js +0 -5
  141. package/dist/cache/errors/index.js.map +0 -1
  142. package/dist/cache/index.d.ts +0 -5
  143. package/dist/cache/index.d.ts.map +0 -1
  144. package/dist/cache/index.js +0 -5
  145. package/dist/cache/index.js.map +0 -1
  146. package/dist/cache/services/cache.service.d.ts +0 -152
  147. package/dist/cache/services/cache.service.d.ts.map +0 -1
  148. package/dist/cache/services/cache.service.js +0 -223
  149. package/dist/cache/services/cache.service.js.map +0 -1
  150. package/dist/cache/services/index.d.ts +0 -2
  151. package/dist/cache/services/index.d.ts.map +0 -1
  152. package/dist/cache/services/index.js +0 -2
  153. package/dist/cache/services/index.js.map +0 -1
  154. package/dist/config/config.module.d.ts +0 -79
  155. package/dist/config/config.module.d.ts.map +0 -1
  156. package/dist/config/config.module.js +0 -121
  157. package/dist/config/config.module.js.map +0 -1
  158. package/dist/config/config.tokens.d.ts +0 -4
  159. package/dist/config/config.tokens.d.ts.map +0 -1
  160. package/dist/config/config.tokens.js +0 -4
  161. package/dist/config/config.tokens.js.map +0 -1
  162. package/dist/config/config.types.d.ts +0 -68
  163. package/dist/config/config.types.d.ts.map +0 -1
  164. package/dist/config/config.types.js +0 -9
  165. package/dist/config/config.types.js.map +0 -1
  166. package/dist/config/errors/config-module-not-initialized.error.d.ts +0 -10
  167. package/dist/config/errors/config-module-not-initialized.error.d.ts.map +0 -1
  168. package/dist/config/errors/config-module-not-initialized.error.js +0 -12
  169. package/dist/config/errors/config-module-not-initialized.error.js.map +0 -1
  170. package/dist/config/errors/config-not-initialized.error.d.ts +0 -12
  171. package/dist/config/errors/config-not-initialized.error.d.ts.map +0 -1
  172. package/dist/config/errors/config-not-initialized.error.js +0 -15
  173. package/dist/config/errors/config-not-initialized.error.js.map +0 -1
  174. package/dist/config/errors/index.d.ts +0 -3
  175. package/dist/config/errors/index.d.ts.map +0 -1
  176. package/dist/config/errors/index.js +0 -3
  177. package/dist/config/errors/index.js.map +0 -1
  178. package/dist/config/index.d.ts +0 -7
  179. package/dist/config/index.d.ts.map +0 -1
  180. package/dist/config/index.js +0 -9
  181. package/dist/config/index.js.map +0 -1
  182. package/dist/config/register-as.d.ts +0 -62
  183. package/dist/config/register-as.d.ts.map +0 -1
  184. package/dist/config/register-as.js +0 -48
  185. package/dist/config/register-as.js.map +0 -1
  186. package/dist/config/services/config.service.d.ts +0 -59
  187. package/dist/config/services/config.service.d.ts.map +0 -1
  188. package/dist/config/services/config.service.js +0 -140
  189. package/dist/config/services/config.service.js.map +0 -1
  190. package/dist/cron/cron-job.d.ts +0 -54
  191. package/dist/cron/cron-job.d.ts.map +0 -1
  192. package/dist/cron/cron-job.js +0 -2
  193. package/dist/cron/cron-job.js.map +0 -1
  194. package/dist/cron/cron-manager.d.ts +0 -60
  195. package/dist/cron/cron-manager.d.ts.map +0 -1
  196. package/dist/cron/cron-manager.js +0 -120
  197. package/dist/cron/cron-manager.js.map +0 -1
  198. package/dist/cron/errors/cron-execution.error.d.ts +0 -10
  199. package/dist/cron/errors/cron-execution.error.d.ts.map +0 -1
  200. package/dist/cron/errors/cron-execution.error.js +0 -17
  201. package/dist/cron/errors/cron-execution.error.js.map +0 -1
  202. package/dist/cron/index.d.ts +0 -4
  203. package/dist/cron/index.d.ts.map +0 -1
  204. package/dist/cron/index.js +0 -3
  205. package/dist/cron/index.js.map +0 -1
  206. package/dist/di/conditional-binding-builder.d.ts +0 -93
  207. package/dist/di/conditional-binding-builder.d.ts.map +0 -1
  208. package/dist/di/conditional-binding-builder.js +0 -115
  209. package/dist/di/conditional-binding-builder.js.map +0 -1
  210. package/dist/di/container.d.ts +0 -131
  211. package/dist/di/container.d.ts.map +0 -1
  212. package/dist/di/container.js +0 -177
  213. package/dist/di/container.js.map +0 -1
  214. package/dist/di/decorators/inject-param.decorator.d.ts +0 -67
  215. package/dist/di/decorators/inject-param.decorator.d.ts.map +0 -1
  216. package/dist/di/decorators/inject-param.decorator.js +0 -53
  217. package/dist/di/decorators/inject-param.decorator.js.map +0 -1
  218. package/dist/di/decorators.d.ts +0 -57
  219. package/dist/di/decorators.d.ts.map +0 -1
  220. package/dist/di/decorators.js +0 -74
  221. package/dist/di/decorators.js.map +0 -1
  222. package/dist/di/errors/conditional-binding-fallback.error.d.ts +0 -16
  223. package/dist/di/errors/conditional-binding-fallback.error.d.ts.map +0 -1
  224. package/dist/di/errors/conditional-binding-fallback.error.js +0 -19
  225. package/dist/di/errors/conditional-binding-fallback.error.js.map +0 -1
  226. package/dist/di/errors/index.d.ts +0 -3
  227. package/dist/di/errors/index.d.ts.map +0 -1
  228. package/dist/di/errors/index.js +0 -3
  229. package/dist/di/errors/index.js.map +0 -1
  230. package/dist/di/errors/request-scope-operation-not-allowed.error.d.ts +0 -11
  231. package/dist/di/errors/request-scope-operation-not-allowed.error.d.ts.map +0 -1
  232. package/dist/di/errors/request-scope-operation-not-allowed.error.js +0 -14
  233. package/dist/di/errors/request-scope-operation-not-allowed.error.js.map +0 -1
  234. package/dist/di/index.d.ts +0 -12
  235. package/dist/di/index.d.ts.map +0 -1
  236. package/dist/di/index.js +0 -10
  237. package/dist/di/index.js.map +0 -1
  238. package/dist/di/tokens.d.ts +0 -26
  239. package/dist/di/tokens.d.ts.map +0 -1
  240. package/dist/di/tokens.js +0 -29
  241. package/dist/di/tokens.js.map +0 -1
  242. package/dist/di/types.d.ts +0 -56
  243. package/dist/di/types.d.ts.map +0 -1
  244. package/dist/di/types.js +0 -34
  245. package/dist/di/types.js.map +0 -1
  246. package/dist/email/consumers/email.consumer.d.ts +0 -43
  247. package/dist/email/consumers/email.consumer.d.ts.map +0 -1
  248. package/dist/email/consumers/email.consumer.js +0 -129
  249. package/dist/email/consumers/email.consumer.js.map +0 -1
  250. package/dist/email/consumers/index.d.ts +0 -2
  251. package/dist/email/consumers/index.d.ts.map +0 -1
  252. package/dist/email/consumers/index.js +0 -2
  253. package/dist/email/consumers/index.js.map +0 -1
  254. package/dist/email/contracts/email-attachment.d.ts +0 -61
  255. package/dist/email/contracts/email-attachment.d.ts.map +0 -1
  256. package/dist/email/contracts/email-attachment.js +0 -58
  257. package/dist/email/contracts/email-attachment.js.map +0 -1
  258. package/dist/email/contracts/email-message.contract.d.ts +0 -58
  259. package/dist/email/contracts/email-message.contract.d.ts.map +0 -1
  260. package/dist/email/contracts/email-message.contract.js +0 -62
  261. package/dist/email/contracts/email-message.contract.js.map +0 -1
  262. package/dist/email/contracts/index.d.ts +0 -4
  263. package/dist/email/contracts/index.d.ts.map +0 -1
  264. package/dist/email/contracts/index.js +0 -4
  265. package/dist/email/contracts/index.js.map +0 -1
  266. package/dist/email/contracts/send-email.input.d.ts +0 -72
  267. package/dist/email/contracts/send-email.input.d.ts.map +0 -1
  268. package/dist/email/contracts/send-email.input.js +0 -28
  269. package/dist/email/contracts/send-email.input.js.map +0 -1
  270. package/dist/email/email.module.d.ts +0 -122
  271. package/dist/email/email.module.d.ts.map +0 -1
  272. package/dist/email/email.module.js +0 -129
  273. package/dist/email/email.module.js.map +0 -1
  274. package/dist/email/email.tokens.d.ts +0 -33
  275. package/dist/email/email.tokens.d.ts.map +0 -1
  276. package/dist/email/email.tokens.js +0 -33
  277. package/dist/email/email.tokens.js.map +0 -1
  278. package/dist/email/errors/email-provider-not-supported.error.d.ts +0 -13
  279. package/dist/email/errors/email-provider-not-supported.error.d.ts.map +0 -1
  280. package/dist/email/errors/email-provider-not-supported.error.js +0 -15
  281. package/dist/email/errors/email-provider-not-supported.error.js.map +0 -1
  282. package/dist/email/errors/email-resend-api-failed.error.d.ts +0 -13
  283. package/dist/email/errors/email-resend-api-failed.error.d.ts.map +0 -1
  284. package/dist/email/errors/email-resend-api-failed.error.js +0 -15
  285. package/dist/email/errors/email-resend-api-failed.error.js.map +0 -1
  286. package/dist/email/errors/email-smtp-connection-failed.error.d.ts +0 -13
  287. package/dist/email/errors/email-smtp-connection-failed.error.d.ts.map +0 -1
  288. package/dist/email/errors/email-smtp-connection-failed.error.js +0 -15
  289. package/dist/email/errors/email-smtp-connection-failed.error.js.map +0 -1
  290. package/dist/email/errors/index.d.ts +0 -7
  291. package/dist/email/errors/index.d.ts.map +0 -1
  292. package/dist/email/errors/index.js +0 -7
  293. package/dist/email/errors/index.js.map +0 -1
  294. package/dist/email/errors/resend-api-key-missing.error.d.ts +0 -13
  295. package/dist/email/errors/resend-api-key-missing.error.d.ts.map +0 -1
  296. package/dist/email/errors/resend-api-key-missing.error.js +0 -15
  297. package/dist/email/errors/resend-api-key-missing.error.js.map +0 -1
  298. package/dist/email/errors/smtp-configuration-missing.error.d.ts +0 -13
  299. package/dist/email/errors/smtp-configuration-missing.error.d.ts.map +0 -1
  300. package/dist/email/errors/smtp-configuration-missing.error.js +0 -15
  301. package/dist/email/errors/smtp-configuration-missing.error.js.map +0 -1
  302. package/dist/email/errors/smtp-host-missing.error.d.ts +0 -13
  303. package/dist/email/errors/smtp-host-missing.error.d.ts.map +0 -1
  304. package/dist/email/errors/smtp-host-missing.error.js +0 -15
  305. package/dist/email/errors/smtp-host-missing.error.js.map +0 -1
  306. package/dist/email/index.d.ts +0 -6
  307. package/dist/email/index.d.ts.map +0 -1
  308. package/dist/email/index.js +0 -8
  309. package/dist/email/index.js.map +0 -1
  310. package/dist/email/providers/base-email.provider.d.ts +0 -22
  311. package/dist/email/providers/base-email.provider.d.ts.map +0 -1
  312. package/dist/email/providers/base-email.provider.js +0 -43
  313. package/dist/email/providers/base-email.provider.js.map +0 -1
  314. package/dist/email/providers/email-provider.interface.d.ts +0 -66
  315. package/dist/email/providers/email-provider.interface.d.ts.map +0 -1
  316. package/dist/email/providers/email-provider.interface.js +0 -2
  317. package/dist/email/providers/email-provider.interface.js.map +0 -1
  318. package/dist/email/providers/index.d.ts +0 -5
  319. package/dist/email/providers/index.d.ts.map +0 -1
  320. package/dist/email/providers/index.js +0 -5
  321. package/dist/email/providers/index.js.map +0 -1
  322. package/dist/email/providers/resend.provider.d.ts +0 -26
  323. package/dist/email/providers/resend.provider.d.ts.map +0 -1
  324. package/dist/email/providers/resend.provider.js +0 -84
  325. package/dist/email/providers/resend.provider.js.map +0 -1
  326. package/dist/email/providers/smtp.provider.d.ts +0 -25
  327. package/dist/email/providers/smtp.provider.d.ts.map +0 -1
  328. package/dist/email/providers/smtp.provider.js +0 -86
  329. package/dist/email/providers/smtp.provider.js.map +0 -1
  330. package/dist/email/services/email-provider-factory.d.ts +0 -24
  331. package/dist/email/services/email-provider-factory.d.ts.map +0 -1
  332. package/dist/email/services/email-provider-factory.js +0 -59
  333. package/dist/email/services/email-provider-factory.js.map +0 -1
  334. package/dist/email/services/email.service.d.ts +0 -51
  335. package/dist/email/services/email.service.d.ts.map +0 -1
  336. package/dist/email/services/email.service.js +0 -75
  337. package/dist/email/services/email.service.js.map +0 -1
  338. package/dist/email/services/index.d.ts +0 -3
  339. package/dist/email/services/index.d.ts.map +0 -1
  340. package/dist/email/services/index.js +0 -3
  341. package/dist/email/services/index.js.map +0 -1
  342. package/dist/env.d.ts +0 -21
  343. package/dist/env.d.ts.map +0 -1
  344. package/dist/env.js +0 -2
  345. package/dist/env.js.map +0 -1
  346. package/dist/errors/application-error.d.ts +0 -87
  347. package/dist/errors/application-error.d.ts.map +0 -1
  348. package/dist/errors/application-error.js +0 -130
  349. package/dist/errors/application-error.js.map +0 -1
  350. package/dist/errors/error-codes.d.ts +0 -202
  351. package/dist/errors/error-codes.d.ts.map +0 -1
  352. package/dist/errors/error-codes.js +0 -184
  353. package/dist/errors/error-codes.js.map +0 -1
  354. package/dist/errors/error-response.d.ts +0 -32
  355. package/dist/errors/error-response.d.ts.map +0 -1
  356. package/dist/errors/error-response.js +0 -14
  357. package/dist/errors/error-response.js.map +0 -1
  358. package/dist/errors/get-http-status.d.ts +0 -12
  359. package/dist/errors/get-http-status.d.ts.map +0 -1
  360. package/dist/errors/get-http-status.js +0 -62
  361. package/dist/errors/get-http-status.js.map +0 -1
  362. package/dist/errors/global-error-handler.d.ts +0 -81
  363. package/dist/errors/global-error-handler.d.ts.map +0 -1
  364. package/dist/errors/global-error-handler.js +0 -176
  365. package/dist/errors/global-error-handler.js.map +0 -1
  366. package/dist/errors/index.d.ts +0 -10
  367. package/dist/errors/index.d.ts.map +0 -1
  368. package/dist/errors/index.js +0 -10
  369. package/dist/errors/index.js.map +0 -1
  370. package/dist/errors/internal-error.d.ts +0 -16
  371. package/dist/errors/internal-error.d.ts.map +0 -1
  372. package/dist/errors/internal-error.js +0 -19
  373. package/dist/errors/internal-error.js.map +0 -1
  374. package/dist/errors/is-application-error.d.ts +0 -9
  375. package/dist/errors/is-application-error.d.ts.map +0 -1
  376. package/dist/errors/is-application-error.js +0 -11
  377. package/dist/errors/is-application-error.js.map +0 -1
  378. package/dist/errors/request-container-not-initialized.error.d.ts +0 -12
  379. package/dist/errors/request-container-not-initialized.error.d.ts.map +0 -1
  380. package/dist/errors/request-container-not-initialized.error.js +0 -15
  381. package/dist/errors/request-container-not-initialized.error.js.map +0 -1
  382. package/dist/errors/stratal-not-initialized.error.d.ts +0 -11
  383. package/dist/errors/stratal-not-initialized.error.d.ts.map +0 -1
  384. package/dist/errors/stratal-not-initialized.error.js +0 -14
  385. package/dist/errors/stratal-not-initialized.error.js.map +0 -1
  386. package/dist/events/constants.d.ts +0 -11
  387. package/dist/events/constants.d.ts.map +0 -1
  388. package/dist/events/constants.js +0 -11
  389. package/dist/events/constants.js.map +0 -1
  390. package/dist/events/decorators/index.d.ts +0 -3
  391. package/dist/events/decorators/index.d.ts.map +0 -1
  392. package/dist/events/decorators/index.js +0 -3
  393. package/dist/events/decorators/index.js.map +0 -1
  394. package/dist/events/decorators/listener.decorator.d.ts +0 -24
  395. package/dist/events/decorators/listener.decorator.d.ts.map +0 -1
  396. package/dist/events/decorators/listener.decorator.js +0 -33
  397. package/dist/events/decorators/listener.decorator.js.map +0 -1
  398. package/dist/events/decorators/on.decorator.d.ts +0 -28
  399. package/dist/events/decorators/on.decorator.d.ts.map +0 -1
  400. package/dist/events/decorators/on.decorator.js +0 -41
  401. package/dist/events/decorators/on.decorator.js.map +0 -1
  402. package/dist/events/event-registry.d.ts +0 -26
  403. package/dist/events/event-registry.d.ts.map +0 -1
  404. package/dist/events/event-registry.js +0 -156
  405. package/dist/events/event-registry.js.map +0 -1
  406. package/dist/events/index.d.ts +0 -5
  407. package/dist/events/index.d.ts.map +0 -1
  408. package/dist/events/index.js +0 -4
  409. package/dist/events/index.js.map +0 -1
  410. package/dist/events/types.d.ts +0 -116
  411. package/dist/events/types.d.ts.map +0 -1
  412. package/dist/events/types.js +0 -23
  413. package/dist/events/types.js.map +0 -1
  414. package/dist/execution-context.d.ts +0 -4
  415. package/dist/execution-context.d.ts.map +0 -1
  416. package/dist/execution-context.js +0 -2
  417. package/dist/execution-context.js.map +0 -1
  418. package/dist/guards/guard-execution.service.d.ts +0 -37
  419. package/dist/guards/guard-execution.service.d.ts.map +0 -1
  420. package/dist/guards/guard-execution.service.js +0 -74
  421. package/dist/guards/guard-execution.service.js.map +0 -1
  422. package/dist/guards/index.d.ts +0 -12
  423. package/dist/guards/index.d.ts.map +0 -1
  424. package/dist/guards/index.js +0 -12
  425. package/dist/guards/index.js.map +0 -1
  426. package/dist/guards/types.d.ts +0 -60
  427. package/dist/guards/types.d.ts.map +0 -1
  428. package/dist/guards/types.js +0 -5
  429. package/dist/guards/types.js.map +0 -1
  430. package/dist/guards/use-guards.decorator.d.ts +0 -73
  431. package/dist/guards/use-guards.decorator.d.ts.map +0 -1
  432. package/dist/guards/use-guards.decorator.js +0 -89
  433. package/dist/guards/use-guards.decorator.js.map +0 -1
  434. package/dist/i18n/errors/index.d.ts +0 -6
  435. package/dist/i18n/errors/index.d.ts.map +0 -1
  436. package/dist/i18n/errors/index.js +0 -6
  437. package/dist/i18n/errors/index.js.map +0 -1
  438. package/dist/i18n/errors/locale-not-supported.error.d.ts +0 -12
  439. package/dist/i18n/errors/locale-not-supported.error.d.ts.map +0 -1
  440. package/dist/i18n/errors/locale-not-supported.error.js +0 -15
  441. package/dist/i18n/errors/locale-not-supported.error.js.map +0 -1
  442. package/dist/i18n/errors/translation-missing.error.d.ts +0 -12
  443. package/dist/i18n/errors/translation-missing.error.d.ts.map +0 -1
  444. package/dist/i18n/errors/translation-missing.error.js +0 -14
  445. package/dist/i18n/errors/translation-missing.error.js.map +0 -1
  446. package/dist/i18n/i18n.module.d.ts +0 -60
  447. package/dist/i18n/i18n.module.d.ts.map +0 -1
  448. package/dist/i18n/i18n.module.js +0 -103
  449. package/dist/i18n/i18n.module.js.map +0 -1
  450. package/dist/i18n/i18n.options.d.ts +0 -60
  451. package/dist/i18n/i18n.options.d.ts.map +0 -1
  452. package/dist/i18n/i18n.options.js +0 -18
  453. package/dist/i18n/i18n.options.js.map +0 -1
  454. package/dist/i18n/i18n.tokens.d.ts +0 -13
  455. package/dist/i18n/i18n.tokens.d.ts.map +0 -1
  456. package/dist/i18n/i18n.tokens.js +0 -13
  457. package/dist/i18n/i18n.tokens.js.map +0 -1
  458. package/dist/i18n/i18n.types.d.ts +0 -78
  459. package/dist/i18n/i18n.types.d.ts.map +0 -1
  460. package/dist/i18n/i18n.types.js +0 -8
  461. package/dist/i18n/i18n.types.js.map +0 -1
  462. package/dist/i18n/index.d.ts +0 -12
  463. package/dist/i18n/index.d.ts.map +0 -1
  464. package/dist/i18n/index.js +0 -12
  465. package/dist/i18n/index.js.map +0 -1
  466. package/dist/i18n/messages/en/common.d.ts +0 -19
  467. package/dist/i18n/messages/en/common.d.ts.map +0 -1
  468. package/dist/i18n/messages/en/common.js +0 -19
  469. package/dist/i18n/messages/en/common.js.map +0 -1
  470. package/dist/i18n/messages/en/emails.d.ts +0 -12
  471. package/dist/i18n/messages/en/emails.d.ts.map +0 -1
  472. package/dist/i18n/messages/en/emails.js +0 -12
  473. package/dist/i18n/messages/en/emails.js.map +0 -1
  474. package/dist/i18n/messages/en/errors.d.ts +0 -113
  475. package/dist/i18n/messages/en/errors.d.ts.map +0 -1
  476. package/dist/i18n/messages/en/errors.js +0 -130
  477. package/dist/i18n/messages/en/errors.js.map +0 -1
  478. package/dist/i18n/messages/en/index.d.ts +0 -13
  479. package/dist/i18n/messages/en/index.d.ts.map +0 -1
  480. package/dist/i18n/messages/en/index.js +0 -13
  481. package/dist/i18n/messages/en/index.js.map +0 -1
  482. package/dist/i18n/messages/en/validation.d.ts +0 -38
  483. package/dist/i18n/messages/en/validation.d.ts.map +0 -1
  484. package/dist/i18n/messages/en/validation.js +0 -38
  485. package/dist/i18n/messages/en/validation.js.map +0 -1
  486. package/dist/i18n/messages/en/zod.d.ts +0 -125
  487. package/dist/i18n/messages/en/zod.d.ts.map +0 -1
  488. package/dist/i18n/messages/en/zod.js +0 -132
  489. package/dist/i18n/messages/en/zod.js.map +0 -1
  490. package/dist/i18n/messages/index.d.ts +0 -27
  491. package/dist/i18n/messages/index.d.ts.map +0 -1
  492. package/dist/i18n/messages/index.js +0 -25
  493. package/dist/i18n/messages/index.js.map +0 -1
  494. package/dist/i18n/middleware/i18n-context.middleware.d.ts +0 -15
  495. package/dist/i18n/middleware/i18n-context.middleware.d.ts.map +0 -1
  496. package/dist/i18n/middleware/i18n-context.middleware.js +0 -42
  497. package/dist/i18n/middleware/i18n-context.middleware.js.map +0 -1
  498. package/dist/i18n/middleware/index.d.ts +0 -6
  499. package/dist/i18n/middleware/index.d.ts.map +0 -1
  500. package/dist/i18n/middleware/index.js +0 -6
  501. package/dist/i18n/middleware/index.js.map +0 -1
  502. package/dist/i18n/middleware/locale-extraction.middleware.d.ts +0 -19
  503. package/dist/i18n/middleware/locale-extraction.middleware.d.ts.map +0 -1
  504. package/dist/i18n/middleware/locale-extraction.middleware.js +0 -49
  505. package/dist/i18n/middleware/locale-extraction.middleware.js.map +0 -1
  506. package/dist/i18n/services/i18n.service.d.ts +0 -50
  507. package/dist/i18n/services/i18n.service.d.ts.map +0 -1
  508. package/dist/i18n/services/i18n.service.js +0 -82
  509. package/dist/i18n/services/i18n.service.js.map +0 -1
  510. package/dist/i18n/services/message-loader.service.d.ts +0 -65
  511. package/dist/i18n/services/message-loader.service.d.ts.map +0 -1
  512. package/dist/i18n/services/message-loader.service.js +0 -175
  513. package/dist/i18n/services/message-loader.service.js.map +0 -1
  514. package/dist/i18n/setup.d.ts +0 -27
  515. package/dist/i18n/setup.d.ts.map +0 -1
  516. package/dist/i18n/setup.js +0 -40
  517. package/dist/i18n/setup.js.map +0 -1
  518. package/dist/i18n/validation/index.d.ts +0 -9
  519. package/dist/i18n/validation/index.d.ts.map +0 -1
  520. package/dist/i18n/validation/index.js +0 -10
  521. package/dist/i18n/validation/index.js.map +0 -1
  522. package/dist/i18n/validation/validation.context.d.ts +0 -34
  523. package/dist/i18n/validation/validation.context.d.ts.map +0 -1
  524. package/dist/i18n/validation/validation.context.js +0 -42
  525. package/dist/i18n/validation/validation.context.js.map +0 -1
  526. package/dist/i18n/validation/validation.error-map.d.ts +0 -8
  527. package/dist/i18n/validation/validation.error-map.d.ts.map +0 -1
  528. package/dist/i18n/validation/validation.error-map.js +0 -158
  529. package/dist/i18n/validation/validation.error-map.js.map +0 -1
  530. package/dist/i18n/validation/validation.types.d.ts +0 -44
  531. package/dist/i18n/validation/validation.types.d.ts.map +0 -1
  532. package/dist/i18n/validation/validation.types.js +0 -2
  533. package/dist/i18n/validation/validation.types.js.map +0 -1
  534. package/dist/i18n/validation/with-i18n.d.ts +0 -29
  535. package/dist/i18n/validation/with-i18n.d.ts.map +0 -1
  536. package/dist/i18n/validation/with-i18n.js +0 -40
  537. package/dist/i18n/validation/with-i18n.js.map +0 -1
  538. package/dist/index.d.ts +0 -6
  539. package/dist/index.d.ts.map +0 -1
  540. package/dist/index.js +0 -6
  541. package/dist/index.js.map +0 -1
  542. package/dist/logger/contracts/index.d.ts +0 -4
  543. package/dist/logger/contracts/index.d.ts.map +0 -1
  544. package/dist/logger/contracts/index.js +0 -4
  545. package/dist/logger/contracts/index.js.map +0 -1
  546. package/dist/logger/contracts/log-context.d.ts +0 -14
  547. package/dist/logger/contracts/log-context.d.ts.map +0 -1
  548. package/dist/logger/contracts/log-context.js +0 -2
  549. package/dist/logger/contracts/log-context.js.map +0 -1
  550. package/dist/logger/contracts/log-entry.d.ts +0 -17
  551. package/dist/logger/contracts/log-entry.d.ts.map +0 -1
  552. package/dist/logger/contracts/log-entry.js +0 -2
  553. package/dist/logger/contracts/log-entry.js.map +0 -1
  554. package/dist/logger/contracts/log-level.d.ts +0 -16
  555. package/dist/logger/contracts/log-level.d.ts.map +0 -1
  556. package/dist/logger/contracts/log-level.js +0 -22
  557. package/dist/logger/contracts/log-level.js.map +0 -1
  558. package/dist/logger/formatters/formatter.interface.d.ts +0 -14
  559. package/dist/logger/formatters/formatter.interface.d.ts.map +0 -1
  560. package/dist/logger/formatters/formatter.interface.js +0 -2
  561. package/dist/logger/formatters/formatter.interface.js.map +0 -1
  562. package/dist/logger/formatters/index.d.ts +0 -4
  563. package/dist/logger/formatters/index.d.ts.map +0 -1
  564. package/dist/logger/formatters/index.js +0 -4
  565. package/dist/logger/formatters/index.js.map +0 -1
  566. package/dist/logger/formatters/json-formatter.d.ts +0 -21
  567. package/dist/logger/formatters/json-formatter.d.ts.map +0 -1
  568. package/dist/logger/formatters/json-formatter.js +0 -27
  569. package/dist/logger/formatters/json-formatter.js.map +0 -1
  570. package/dist/logger/formatters/pretty-formatter.d.ts +0 -18
  571. package/dist/logger/formatters/pretty-formatter.d.ts.map +0 -1
  572. package/dist/logger/formatters/pretty-formatter.js +0 -41
  573. package/dist/logger/formatters/pretty-formatter.js.map +0 -1
  574. package/dist/logger/index.d.ts +0 -7
  575. package/dist/logger/index.d.ts.map +0 -1
  576. package/dist/logger/index.js +0 -10
  577. package/dist/logger/index.js.map +0 -1
  578. package/dist/logger/logger.tokens.d.ts +0 -29
  579. package/dist/logger/logger.tokens.d.ts.map +0 -1
  580. package/dist/logger/logger.tokens.js +0 -29
  581. package/dist/logger/logger.tokens.js.map +0 -1
  582. package/dist/logger/services/index.d.ts +0 -2
  583. package/dist/logger/services/index.d.ts.map +0 -1
  584. package/dist/logger/services/index.js +0 -2
  585. package/dist/logger/services/index.js.map +0 -1
  586. package/dist/logger/services/logger.service.d.ts +0 -73
  587. package/dist/logger/services/logger.service.d.ts.map +0 -1
  588. package/dist/logger/services/logger.service.js +0 -156
  589. package/dist/logger/services/logger.service.js.map +0 -1
  590. package/dist/logger/transports/base-transport.d.ts +0 -24
  591. package/dist/logger/transports/base-transport.d.ts.map +0 -1
  592. package/dist/logger/transports/base-transport.js +0 -23
  593. package/dist/logger/transports/base-transport.js.map +0 -1
  594. package/dist/logger/transports/console-transport.d.ts +0 -19
  595. package/dist/logger/transports/console-transport.d.ts.map +0 -1
  596. package/dist/logger/transports/console-transport.js +0 -53
  597. package/dist/logger/transports/console-transport.js.map +0 -1
  598. package/dist/logger/transports/index.d.ts +0 -4
  599. package/dist/logger/transports/index.d.ts.map +0 -1
  600. package/dist/logger/transports/index.js +0 -4
  601. package/dist/logger/transports/index.js.map +0 -1
  602. package/dist/logger/transports/transport.interface.d.ts +0 -21
  603. package/dist/logger/transports/transport.interface.d.ts.map +0 -1
  604. package/dist/logger/transports/transport.interface.js +0 -2
  605. package/dist/logger/transports/transport.interface.js.map +0 -1
  606. package/dist/middleware/index.d.ts +0 -24
  607. package/dist/middleware/index.d.ts.map +0 -1
  608. package/dist/middleware/index.js +0 -23
  609. package/dist/middleware/index.js.map +0 -1
  610. package/dist/middleware/middleware-configuration.service.d.ts +0 -70
  611. package/dist/middleware/middleware-configuration.service.d.ts.map +0 -1
  612. package/dist/middleware/middleware-configuration.service.js +0 -239
  613. package/dist/middleware/middleware-configuration.service.js.map +0 -1
  614. package/dist/middleware/middleware-consumer.d.ts +0 -57
  615. package/dist/middleware/middleware-consumer.d.ts.map +0 -1
  616. package/dist/middleware/middleware-consumer.js +0 -130
  617. package/dist/middleware/middleware-consumer.js.map +0 -1
  618. package/dist/middleware/types.d.ts +0 -96
  619. package/dist/middleware/types.d.ts.map +0 -1
  620. package/dist/middleware/types.js +0 -2
  621. package/dist/middleware/types.js.map +0 -1
  622. package/dist/module/errors/index.d.ts +0 -5
  623. package/dist/module/errors/index.d.ts.map +0 -1
  624. package/dist/module/errors/index.js +0 -5
  625. package/dist/module/errors/index.js.map +0 -1
  626. package/dist/module/errors/invalid-module-provider.error.d.ts +0 -11
  627. package/dist/module/errors/invalid-module-provider.error.d.ts.map +0 -1
  628. package/dist/module/errors/invalid-module-provider.error.js +0 -13
  629. package/dist/module/errors/invalid-module-provider.error.js.map +0 -1
  630. package/dist/module/errors/module-already-registered.error.d.ts +0 -11
  631. package/dist/module/errors/module-already-registered.error.d.ts.map +0 -1
  632. package/dist/module/errors/module-already-registered.error.js +0 -13
  633. package/dist/module/errors/module-already-registered.error.js.map +0 -1
  634. package/dist/module/errors/module-circular-dependency.error.d.ts +0 -11
  635. package/dist/module/errors/module-circular-dependency.error.d.ts.map +0 -1
  636. package/dist/module/errors/module-circular-dependency.error.js +0 -14
  637. package/dist/module/errors/module-circular-dependency.error.js.map +0 -1
  638. package/dist/module/errors/module-dependency-not-found.error.d.ts +0 -11
  639. package/dist/module/errors/module-dependency-not-found.error.d.ts.map +0 -1
  640. package/dist/module/errors/module-dependency-not-found.error.js +0 -13
  641. package/dist/module/errors/module-dependency-not-found.error.js.map +0 -1
  642. package/dist/module/index.d.ts +0 -4
  643. package/dist/module/index.d.ts.map +0 -1
  644. package/dist/module/index.js +0 -7
  645. package/dist/module/index.js.map +0 -1
  646. package/dist/module/module-registry.d.ts +0 -110
  647. package/dist/module/module-registry.d.ts.map +0 -1
  648. package/dist/module/module-registry.js +0 -299
  649. package/dist/module/module-registry.js.map +0 -1
  650. package/dist/module/module.decorator.d.ts +0 -34
  651. package/dist/module/module.decorator.d.ts.map +0 -1
  652. package/dist/module/module.decorator.js +0 -107
  653. package/dist/module/module.decorator.js.map +0 -1
  654. package/dist/module/types.d.ts +0 -240
  655. package/dist/module/types.d.ts.map +0 -1
  656. package/dist/module/types.js +0 -8
  657. package/dist/module/types.js.map +0 -1
  658. package/dist/openapi/index.d.ts +0 -5
  659. package/dist/openapi/index.d.ts.map +0 -1
  660. package/dist/openapi/index.js +0 -7
  661. package/dist/openapi/index.js.map +0 -1
  662. package/dist/openapi/openapi.module.d.ts +0 -52
  663. package/dist/openapi/openapi.module.d.ts.map +0 -1
  664. package/dist/openapi/openapi.module.js +0 -109
  665. package/dist/openapi/openapi.module.js.map +0 -1
  666. package/dist/openapi/openapi.tokens.d.ts +0 -12
  667. package/dist/openapi/openapi.tokens.d.ts.map +0 -1
  668. package/dist/openapi/openapi.tokens.js +0 -12
  669. package/dist/openapi/openapi.tokens.js.map +0 -1
  670. package/dist/openapi/services/index.d.ts +0 -3
  671. package/dist/openapi/services/index.d.ts.map +0 -1
  672. package/dist/openapi/services/index.js +0 -3
  673. package/dist/openapi/services/index.js.map +0 -1
  674. package/dist/openapi/services/openapi-config.service.d.ts +0 -43
  675. package/dist/openapi/services/openapi-config.service.d.ts.map +0 -1
  676. package/dist/openapi/services/openapi-config.service.js +0 -98
  677. package/dist/openapi/services/openapi-config.service.js.map +0 -1
  678. package/dist/openapi/services/openapi.service.d.ts +0 -52
  679. package/dist/openapi/services/openapi.service.d.ts.map +0 -1
  680. package/dist/openapi/services/openapi.service.js +0 -231
  681. package/dist/openapi/services/openapi.service.js.map +0 -1
  682. package/dist/openapi/types.d.ts +0 -84
  683. package/dist/openapi/types.d.ts.map +0 -1
  684. package/dist/openapi/types.js +0 -2
  685. package/dist/openapi/types.js.map +0 -1
  686. package/dist/queue/consumer-registry.d.ts +0 -77
  687. package/dist/queue/consumer-registry.d.ts.map +0 -1
  688. package/dist/queue/consumer-registry.js +0 -110
  689. package/dist/queue/consumer-registry.js.map +0 -1
  690. package/dist/queue/decorators/index.d.ts +0 -2
  691. package/dist/queue/decorators/index.d.ts.map +0 -1
  692. package/dist/queue/decorators/index.js +0 -2
  693. package/dist/queue/decorators/index.js.map +0 -1
  694. package/dist/queue/decorators/inject-queue.decorator.d.ts +0 -31
  695. package/dist/queue/decorators/inject-queue.decorator.d.ts.map +0 -1
  696. package/dist/queue/decorators/inject-queue.decorator.js +0 -33
  697. package/dist/queue/decorators/inject-queue.decorator.js.map +0 -1
  698. package/dist/queue/errors/index.d.ts +0 -3
  699. package/dist/queue/errors/index.d.ts.map +0 -1
  700. package/dist/queue/errors/index.js +0 -3
  701. package/dist/queue/errors/index.js.map +0 -1
  702. package/dist/queue/errors/queue-binding-not-found.error.d.ts +0 -12
  703. package/dist/queue/errors/queue-binding-not-found.error.d.ts.map +0 -1
  704. package/dist/queue/errors/queue-binding-not-found.error.js +0 -14
  705. package/dist/queue/errors/queue-binding-not-found.error.js.map +0 -1
  706. package/dist/queue/errors/queue-provider-not-supported.error.d.ts +0 -13
  707. package/dist/queue/errors/queue-provider-not-supported.error.d.ts.map +0 -1
  708. package/dist/queue/errors/queue-provider-not-supported.error.js +0 -15
  709. package/dist/queue/errors/queue-provider-not-supported.error.js.map +0 -1
  710. package/dist/queue/index.d.ts +0 -14
  711. package/dist/queue/index.d.ts.map +0 -1
  712. package/dist/queue/index.js +0 -21
  713. package/dist/queue/index.js.map +0 -1
  714. package/dist/queue/providers/cloudflare-queue.provider.d.ts +0 -42
  715. package/dist/queue/providers/cloudflare-queue.provider.d.ts.map +0 -1
  716. package/dist/queue/providers/cloudflare-queue.provider.js +0 -73
  717. package/dist/queue/providers/cloudflare-queue.provider.js.map +0 -1
  718. package/dist/queue/providers/index.d.ts +0 -4
  719. package/dist/queue/providers/index.d.ts.map +0 -1
  720. package/dist/queue/providers/index.js +0 -4
  721. package/dist/queue/providers/index.js.map +0 -1
  722. package/dist/queue/providers/queue-provider.interface.d.ts +0 -34
  723. package/dist/queue/providers/queue-provider.interface.d.ts.map +0 -1
  724. package/dist/queue/providers/queue-provider.interface.js +0 -2
  725. package/dist/queue/providers/queue-provider.interface.js.map +0 -1
  726. package/dist/queue/providers/sync-queue.provider.d.ts +0 -48
  727. package/dist/queue/providers/sync-queue.provider.d.ts.map +0 -1
  728. package/dist/queue/providers/sync-queue.provider.js +0 -89
  729. package/dist/queue/providers/sync-queue.provider.js.map +0 -1
  730. package/dist/queue/queue-consumer.d.ts +0 -62
  731. package/dist/queue/queue-consumer.d.ts.map +0 -1
  732. package/dist/queue/queue-consumer.js +0 -2
  733. package/dist/queue/queue-consumer.js.map +0 -1
  734. package/dist/queue/queue-manager.d.ts +0 -36
  735. package/dist/queue/queue-manager.d.ts.map +0 -1
  736. package/dist/queue/queue-manager.js +0 -80
  737. package/dist/queue/queue-manager.js.map +0 -1
  738. package/dist/queue/queue-name.d.ts +0 -50
  739. package/dist/queue/queue-name.d.ts.map +0 -1
  740. package/dist/queue/queue-name.js +0 -21
  741. package/dist/queue/queue-name.js.map +0 -1
  742. package/dist/queue/queue-registry.d.ts +0 -46
  743. package/dist/queue/queue-registry.d.ts.map +0 -1
  744. package/dist/queue/queue-registry.js +0 -78
  745. package/dist/queue/queue-registry.js.map +0 -1
  746. package/dist/queue/queue-sender.d.ts +0 -38
  747. package/dist/queue/queue-sender.d.ts.map +0 -1
  748. package/dist/queue/queue-sender.interface.d.ts +0 -46
  749. package/dist/queue/queue-sender.interface.d.ts.map +0 -1
  750. package/dist/queue/queue-sender.interface.js +0 -2
  751. package/dist/queue/queue-sender.interface.js.map +0 -1
  752. package/dist/queue/queue-sender.js +0 -54
  753. package/dist/queue/queue-sender.js.map +0 -1
  754. package/dist/queue/queue.module.d.ts +0 -80
  755. package/dist/queue/queue.module.d.ts.map +0 -1
  756. package/dist/queue/queue.module.js +0 -113
  757. package/dist/queue/queue.module.js.map +0 -1
  758. package/dist/queue/queue.tokens.d.ts +0 -7
  759. package/dist/queue/queue.tokens.d.ts.map +0 -1
  760. package/dist/queue/queue.tokens.js +0 -6
  761. package/dist/queue/queue.tokens.js.map +0 -1
  762. package/dist/queue/services/index.d.ts +0 -2
  763. package/dist/queue/services/index.d.ts.map +0 -1
  764. package/dist/queue/services/index.js +0 -2
  765. package/dist/queue/services/index.js.map +0 -1
  766. package/dist/queue/services/queue-provider-factory.d.ts +0 -41
  767. package/dist/queue/services/queue-provider-factory.d.ts.map +0 -1
  768. package/dist/queue/services/queue-provider-factory.js +0 -78
  769. package/dist/queue/services/queue-provider-factory.js.map +0 -1
  770. package/dist/router/constants.d.ts +0 -87
  771. package/dist/router/constants.d.ts.map +0 -1
  772. package/dist/router/constants.js +0 -69
  773. package/dist/router/constants.js.map +0 -1
  774. package/dist/router/controller.d.ts +0 -56
  775. package/dist/router/controller.d.ts.map +0 -1
  776. package/dist/router/controller.js +0 -2
  777. package/dist/router/controller.js.map +0 -1
  778. package/dist/router/decorators/controller.decorator.d.ts +0 -46
  779. package/dist/router/decorators/controller.decorator.d.ts.map +0 -1
  780. package/dist/router/decorators/controller.decorator.js +0 -70
  781. package/dist/router/decorators/controller.decorator.js.map +0 -1
  782. package/dist/router/decorators/http-method.decorator.d.ts +0 -83
  783. package/dist/router/decorators/http-method.decorator.d.ts.map +0 -1
  784. package/dist/router/decorators/http-method.decorator.js +0 -113
  785. package/dist/router/decorators/http-method.decorator.js.map +0 -1
  786. package/dist/router/decorators/index.d.ts +0 -4
  787. package/dist/router/decorators/index.d.ts.map +0 -1
  788. package/dist/router/decorators/index.js +0 -6
  789. package/dist/router/decorators/index.js.map +0 -1
  790. package/dist/router/decorators/route.decorator.d.ts +0 -90
  791. package/dist/router/decorators/route.decorator.d.ts.map +0 -1
  792. package/dist/router/decorators/route.decorator.js +0 -102
  793. package/dist/router/decorators/route.decorator.js.map +0 -1
  794. package/dist/router/errors/controller-method-not-found.error.d.ts +0 -11
  795. package/dist/router/errors/controller-method-not-found.error.d.ts.map +0 -1
  796. package/dist/router/errors/controller-method-not-found.error.js +0 -13
  797. package/dist/router/errors/controller-method-not-found.error.js.map +0 -1
  798. package/dist/router/errors/controller-registration.error.d.ts +0 -15
  799. package/dist/router/errors/controller-registration.error.d.ts.map +0 -1
  800. package/dist/router/errors/controller-registration.error.js +0 -20
  801. package/dist/router/errors/controller-registration.error.js.map +0 -1
  802. package/dist/router/errors/hono-app-already-configured.error.d.ts +0 -10
  803. package/dist/router/errors/hono-app-already-configured.error.d.ts.map +0 -1
  804. package/dist/router/errors/hono-app-already-configured.error.js +0 -12
  805. package/dist/router/errors/hono-app-already-configured.error.js.map +0 -1
  806. package/dist/router/errors/index.d.ts +0 -8
  807. package/dist/router/errors/index.d.ts.map +0 -1
  808. package/dist/router/errors/index.js +0 -8
  809. package/dist/router/errors/index.js.map +0 -1
  810. package/dist/router/errors/openapi-route-registration.error.d.ts +0 -17
  811. package/dist/router/errors/openapi-route-registration.error.d.ts.map +0 -1
  812. package/dist/router/errors/openapi-route-registration.error.js +0 -19
  813. package/dist/router/errors/openapi-route-registration.error.js.map +0 -1
  814. package/dist/router/errors/openapi-validation.error.d.ts +0 -19
  815. package/dist/router/errors/openapi-validation.error.d.ts.map +0 -1
  816. package/dist/router/errors/openapi-validation.error.js +0 -21
  817. package/dist/router/errors/openapi-validation.error.js.map +0 -1
  818. package/dist/router/errors/route-not-found.error.d.ts +0 -11
  819. package/dist/router/errors/route-not-found.error.d.ts.map +0 -1
  820. package/dist/router/errors/route-not-found.error.js +0 -13
  821. package/dist/router/errors/route-not-found.error.js.map +0 -1
  822. package/dist/router/errors/schema-validation.error.d.ts +0 -11
  823. package/dist/router/errors/schema-validation.error.d.ts.map +0 -1
  824. package/dist/router/errors/schema-validation.error.js +0 -17
  825. package/dist/router/errors/schema-validation.error.js.map +0 -1
  826. package/dist/router/hono-app.d.ts +0 -38
  827. package/dist/router/hono-app.d.ts.map +0 -1
  828. package/dist/router/hono-app.js +0 -126
  829. package/dist/router/hono-app.js.map +0 -1
  830. package/dist/router/index.d.ts +0 -16
  831. package/dist/router/index.d.ts.map +0 -1
  832. package/dist/router/index.js +0 -21
  833. package/dist/router/index.js.map +0 -1
  834. package/dist/router/middleware/index.d.ts +0 -2
  835. package/dist/router/middleware/index.d.ts.map +0 -1
  836. package/dist/router/middleware/index.js +0 -4
  837. package/dist/router/middleware/index.js.map +0 -1
  838. package/dist/router/middleware/logger.middleware.d.ts +0 -19
  839. package/dist/router/middleware/logger.middleware.d.ts.map +0 -1
  840. package/dist/router/middleware/logger.middleware.js +0 -32
  841. package/dist/router/middleware/logger.middleware.js.map +0 -1
  842. package/dist/router/middleware.interface.d.ts +0 -38
  843. package/dist/router/middleware.interface.d.ts.map +0 -1
  844. package/dist/router/middleware.interface.js +0 -2
  845. package/dist/router/middleware.interface.js.map +0 -1
  846. package/dist/router/router-context.d.ts +0 -143
  847. package/dist/router/router-context.d.ts.map +0 -1
  848. package/dist/router/router-context.js +0 -179
  849. package/dist/router/router-context.js.map +0 -1
  850. package/dist/router/router.tokens.d.ts +0 -11
  851. package/dist/router/router.tokens.d.ts.map +0 -1
  852. package/dist/router/router.tokens.js +0 -11
  853. package/dist/router/router.tokens.js.map +0 -1
  854. package/dist/router/schemas/common.schemas.d.ts +0 -148
  855. package/dist/router/schemas/common.schemas.d.ts.map +0 -1
  856. package/dist/router/schemas/common.schemas.js +0 -88
  857. package/dist/router/schemas/common.schemas.js.map +0 -1
  858. package/dist/router/schemas/index.d.ts +0 -2
  859. package/dist/router/schemas/index.d.ts.map +0 -1
  860. package/dist/router/schemas/index.js +0 -2
  861. package/dist/router/schemas/index.js.map +0 -1
  862. package/dist/router/services/index.d.ts +0 -6
  863. package/dist/router/services/index.d.ts.map +0 -1
  864. package/dist/router/services/index.js +0 -6
  865. package/dist/router/services/index.js.map +0 -1
  866. package/dist/router/services/route-registration.service.d.ts +0 -129
  867. package/dist/router/services/route-registration.service.d.ts.map +0 -1
  868. package/dist/router/services/route-registration.service.js +0 -700
  869. package/dist/router/services/route-registration.service.js.map +0 -1
  870. package/dist/router/types.d.ts +0 -187
  871. package/dist/router/types.d.ts.map +0 -1
  872. package/dist/router/types.js +0 -2
  873. package/dist/router/types.js.map +0 -1
  874. package/dist/storage/contracts/delete-file.input.d.ts +0 -7
  875. package/dist/storage/contracts/delete-file.input.d.ts.map +0 -1
  876. package/dist/storage/contracts/delete-file.input.js +0 -6
  877. package/dist/storage/contracts/delete-file.input.js.map +0 -1
  878. package/dist/storage/contracts/download-result.d.ts +0 -28
  879. package/dist/storage/contracts/download-result.d.ts.map +0 -1
  880. package/dist/storage/contracts/download-result.js +0 -2
  881. package/dist/storage/contracts/download-result.js.map +0 -1
  882. package/dist/storage/contracts/file-exists.input.d.ts +0 -7
  883. package/dist/storage/contracts/file-exists.input.d.ts.map +0 -1
  884. package/dist/storage/contracts/file-exists.input.js +0 -6
  885. package/dist/storage/contracts/file-exists.input.js.map +0 -1
  886. package/dist/storage/contracts/get-presigned-url.input.d.ts +0 -26
  887. package/dist/storage/contracts/get-presigned-url.input.d.ts.map +0 -1
  888. package/dist/storage/contracts/get-presigned-url.input.js +0 -14
  889. package/dist/storage/contracts/get-presigned-url.input.js.map +0 -1
  890. package/dist/storage/contracts/index.d.ts +0 -6
  891. package/dist/storage/contracts/index.d.ts.map +0 -1
  892. package/dist/storage/contracts/index.js +0 -6
  893. package/dist/storage/contracts/index.js.map +0 -1
  894. package/dist/storage/contracts/upload-file.input.d.ts +0 -34
  895. package/dist/storage/contracts/upload-file.input.d.ts.map +0 -1
  896. package/dist/storage/contracts/upload-file.input.js +0 -10
  897. package/dist/storage/contracts/upload-file.input.js.map +0 -1
  898. package/dist/storage/dom.polyfill.d.ts +0 -2
  899. package/dist/storage/dom.polyfill.d.ts.map +0 -1
  900. package/dist/storage/dom.polyfill.js +0 -30
  901. package/dist/storage/dom.polyfill.js.map +0 -1
  902. package/dist/storage/errors/disk-not-configured.error.d.ts +0 -5
  903. package/dist/storage/errors/disk-not-configured.error.d.ts.map +0 -1
  904. package/dist/storage/errors/disk-not-configured.error.js +0 -7
  905. package/dist/storage/errors/disk-not-configured.error.js.map +0 -1
  906. package/dist/storage/errors/file-not-found.error.d.ts +0 -5
  907. package/dist/storage/errors/file-not-found.error.d.ts.map +0 -1
  908. package/dist/storage/errors/file-not-found.error.js +0 -8
  909. package/dist/storage/errors/file-not-found.error.js.map +0 -1
  910. package/dist/storage/errors/file-too-large.error.d.ts +0 -5
  911. package/dist/storage/errors/file-too-large.error.d.ts.map +0 -1
  912. package/dist/storage/errors/file-too-large.error.js +0 -11
  913. package/dist/storage/errors/file-too-large.error.js.map +0 -1
  914. package/dist/storage/errors/index.d.ts +0 -9
  915. package/dist/storage/errors/index.d.ts.map +0 -1
  916. package/dist/storage/errors/index.js +0 -9
  917. package/dist/storage/errors/index.js.map +0 -1
  918. package/dist/storage/errors/invalid-disk.error.d.ts +0 -5
  919. package/dist/storage/errors/invalid-disk.error.d.ts.map +0 -1
  920. package/dist/storage/errors/invalid-disk.error.js +0 -8
  921. package/dist/storage/errors/invalid-disk.error.js.map +0 -1
  922. package/dist/storage/errors/invalid-file-type.error.d.ts +0 -5
  923. package/dist/storage/errors/invalid-file-type.error.d.ts.map +0 -1
  924. package/dist/storage/errors/invalid-file-type.error.js +0 -10
  925. package/dist/storage/errors/invalid-file-type.error.js.map +0 -1
  926. package/dist/storage/errors/presigned-url-invalid-expiry.error.d.ts +0 -5
  927. package/dist/storage/errors/presigned-url-invalid-expiry.error.d.ts.map +0 -1
  928. package/dist/storage/errors/presigned-url-invalid-expiry.error.js +0 -12
  929. package/dist/storage/errors/presigned-url-invalid-expiry.error.js.map +0 -1
  930. package/dist/storage/errors/storage-provider-not-supported.error.d.ts +0 -5
  931. package/dist/storage/errors/storage-provider-not-supported.error.d.ts.map +0 -1
  932. package/dist/storage/errors/storage-provider-not-supported.error.js +0 -8
  933. package/dist/storage/errors/storage-provider-not-supported.error.js.map +0 -1
  934. package/dist/storage/errors/storage-response-body-missing.error.d.ts +0 -5
  935. package/dist/storage/errors/storage-response-body-missing.error.d.ts.map +0 -1
  936. package/dist/storage/errors/storage-response-body-missing.error.js +0 -8
  937. package/dist/storage/errors/storage-response-body-missing.error.js.map +0 -1
  938. package/dist/storage/index.d.ts +0 -15
  939. package/dist/storage/index.d.ts.map +0 -1
  940. package/dist/storage/index.js +0 -18
  941. package/dist/storage/index.js.map +0 -1
  942. package/dist/storage/providers/s3-multipart-provider.interface.d.ts +0 -194
  943. package/dist/storage/providers/s3-multipart-provider.interface.d.ts.map +0 -1
  944. package/dist/storage/providers/s3-multipart-provider.interface.js +0 -2
  945. package/dist/storage/providers/s3-multipart-provider.interface.js.map +0 -1
  946. package/dist/storage/providers/s3-storage.provider.d.ts +0 -77
  947. package/dist/storage/providers/s3-storage.provider.d.ts.map +0 -1
  948. package/dist/storage/providers/s3-storage.provider.js +0 -310
  949. package/dist/storage/providers/s3-storage.provider.js.map +0 -1
  950. package/dist/storage/providers/storage-provider.interface.d.ts +0 -58
  951. package/dist/storage/providers/storage-provider.interface.d.ts.map +0 -1
  952. package/dist/storage/providers/storage-provider.interface.js +0 -2
  953. package/dist/storage/providers/storage-provider.interface.js.map +0 -1
  954. package/dist/storage/services/storage-manager.service.d.ts +0 -48
  955. package/dist/storage/services/storage-manager.service.d.ts.map +0 -1
  956. package/dist/storage/services/storage-manager.service.js +0 -111
  957. package/dist/storage/services/storage-manager.service.js.map +0 -1
  958. package/dist/storage/services/storage.service.d.ts +0 -137
  959. package/dist/storage/services/storage.service.d.ts.map +0 -1
  960. package/dist/storage/services/storage.service.js +0 -229
  961. package/dist/storage/services/storage.service.js.map +0 -1
  962. package/dist/storage/storage.module.d.ts +0 -52
  963. package/dist/storage/storage.module.d.ts.map +0 -1
  964. package/dist/storage/storage.module.js +0 -81
  965. package/dist/storage/storage.module.js.map +0 -1
  966. package/dist/storage/storage.tokens.d.ts +0 -10
  967. package/dist/storage/storage.tokens.d.ts.map +0 -1
  968. package/dist/storage/storage.tokens.js +0 -10
  969. package/dist/storage/storage.tokens.js.map +0 -1
  970. package/dist/storage/types.d.ts +0 -31
  971. package/dist/storage/types.d.ts.map +0 -1
  972. package/dist/storage/types.js +0 -2
  973. package/dist/storage/types.js.map +0 -1
  974. package/dist/stratal.d.ts +0 -39
  975. package/dist/stratal.d.ts.map +0 -1
  976. package/dist/stratal.js +0 -77
  977. package/dist/stratal.js.map +0 -1
  978. package/dist/types.d.ts.map +0 -1
  979. package/dist/types.js +0 -2
  980. package/dist/types.js.map +0 -1
  981. package/dist/websocket/decorators/gateway.decorator.d.ts +0 -39
  982. package/dist/websocket/decorators/gateway.decorator.d.ts.map +0 -1
  983. package/dist/websocket/decorators/gateway.decorator.js +0 -55
  984. package/dist/websocket/decorators/gateway.decorator.js.map +0 -1
  985. package/dist/websocket/decorators/index.d.ts +0 -3
  986. package/dist/websocket/decorators/index.d.ts.map +0 -1
  987. package/dist/websocket/decorators/index.js +0 -3
  988. package/dist/websocket/decorators/index.js.map +0 -1
  989. package/dist/websocket/decorators/ws-event.decorator.d.ts +0 -59
  990. package/dist/websocket/decorators/ws-event.decorator.d.ts.map +0 -1
  991. package/dist/websocket/decorators/ws-event.decorator.js +0 -94
  992. package/dist/websocket/decorators/ws-event.decorator.js.map +0 -1
  993. package/dist/websocket/errors/websocket-body-not-available.error.d.ts +0 -5
  994. package/dist/websocket/errors/websocket-body-not-available.error.d.ts.map +0 -1
  995. package/dist/websocket/errors/websocket-body-not-available.error.js +0 -7
  996. package/dist/websocket/errors/websocket-body-not-available.error.js.map +0 -1
  997. package/dist/websocket/errors/websocket-duplicate-event-handler.error.d.ts +0 -5
  998. package/dist/websocket/errors/websocket-duplicate-event-handler.error.d.ts.map +0 -1
  999. package/dist/websocket/errors/websocket-duplicate-event-handler.error.js +0 -7
  1000. package/dist/websocket/errors/websocket-duplicate-event-handler.error.js.map +0 -1
  1001. package/dist/websocket/gateway-context.d.ts +0 -51
  1002. package/dist/websocket/gateway-context.d.ts.map +0 -1
  1003. package/dist/websocket/gateway-context.js +0 -66
  1004. package/dist/websocket/gateway-context.js.map +0 -1
  1005. package/dist/websocket/index.d.ts +0 -7
  1006. package/dist/websocket/index.d.ts.map +0 -1
  1007. package/dist/websocket/index.js +0 -5
  1008. package/dist/websocket/index.js.map +0 -1
  1009. package/dist/websocket/types.d.ts +0 -7
  1010. package/dist/websocket/types.d.ts.map +0 -1
  1011. package/dist/websocket/types.js +0 -2
  1012. package/dist/websocket/types.js.map +0 -1
  1013. package/dist/workers/index.d.ts +0 -5
  1014. package/dist/workers/index.d.ts.map +0 -1
  1015. package/dist/workers/index.js +0 -5
  1016. package/dist/workers/index.js.map +0 -1
  1017. package/dist/workers/run-in-scope.d.ts +0 -9
  1018. package/dist/workers/run-in-scope.d.ts.map +0 -1
  1019. package/dist/workers/run-in-scope.js +0 -13
  1020. package/dist/workers/run-in-scope.js.map +0 -1
  1021. package/dist/workers/stratal-durable-object.d.ts +0 -28
  1022. package/dist/workers/stratal-durable-object.d.ts.map +0 -1
  1023. package/dist/workers/stratal-durable-object.js +0 -34
  1024. package/dist/workers/stratal-durable-object.js.map +0 -1
  1025. package/dist/workers/stratal-worker-entrypoint.d.ts +0 -27
  1026. package/dist/workers/stratal-worker-entrypoint.d.ts.map +0 -1
  1027. package/dist/workers/stratal-worker-entrypoint.js +0 -28
  1028. package/dist/workers/stratal-worker-entrypoint.js.map +0 -1
  1029. package/dist/workers/stratal-workflow.d.ts +0 -27
  1030. package/dist/workers/stratal-workflow.d.ts.map +0 -1
  1031. package/dist/workers/stratal-workflow.js +0 -28
  1032. package/dist/workers/stratal-workflow.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors-BRJgVd5-.mjs","names":[],"sources":["../src/errors/application-error.ts","../src/errors/error-response.ts","../src/errors/error-codes.ts","../src/errors/get-http-status.ts","../src/router/router.tokens.ts","../src/di/errors/conditional-binding-fallback.error.ts","../src/di/errors/request-scope-operation-not-allowed.error.ts","../src/di/conditional-binding-builder.ts","../src/di/container.ts","../src/di/types.ts","../src/i18n/i18n.tokens.ts","../src/errors/internal-error.ts","../src/errors/is-application-error.ts","../src/errors/global-error-handler.ts","../src/errors/request-container-not-initialized.error.ts","../src/errors/stratal-not-initialized.error.ts"],"sourcesContent":["import type { Environment, ErrorResponse } from './error-response'\nimport type { MessageKeys } from '../i18n'\nimport type { ErrorCode } from './error-codes'\n\n/**\n * ApplicationError\n *\n * Abstract base class for all application errors.\n * This class should never be used directly - always extend it to create specific error types.\n *\n * Features:\n * - Type-safe error codes from ERROR_CODES registry\n * - Type-safe message keys from i18n module\n * - Localized message keys (translated by GlobalErrorHandler)\n * - Structured metadata for logging and interpolation\n * - Proper Error prototype chain\n * - Automatic timestamp generation\n * - Serialization for RPC transmission\n *\n * Message Localization:\n * - Each error class passes an i18n key (e.g., 'errors.userNotFound') to super()\n * - `Error.message` contains the i18n key for useful stack traces and fallback display\n * - Metadata provides interpolation parameters (e.g., { userId: '123' })\n * - GlobalErrorHandler translates the message key using I18nService before sending response\n * - This ensures errors are localized based on the user's locale (from X-Locale header)\n */\nexport abstract class ApplicationError extends Error {\n /**\n * Controls whether stack traces are captured.\n * Set to false in production to skip the expensive Error.captureStackTrace() call,\n * since stack traces are stripped from responses in production anyway.\n */\n static captureStackTraces = true\n\n /**\n * Type-safe error code from ERROR_CODES registry\n * See error-codes.ts for the complete registry\n */\n public readonly code: ErrorCode\n\n /**\n * ISO timestamp when the error was created\n */\n public readonly timestamp: string\n\n /**\n * Additional structured data about the error\n * Used for:\n * 1. Logging and debugging\n * 2. Message interpolation (e.g., { userId: '123', email: 'user@example.com' })\n */\n public readonly metadata?: Record<string, unknown>\n\n /**\n * @param i18nKey - Type-safe i18n message key (e.g., 'errors.userNotFound')\n * @param code - Type-safe error code from ERROR_CODES registry\n * @param metadata - Optional data for logging and interpolation\n */\n constructor(\n i18nKey: MessageKeys,\n code: ErrorCode,\n metadata?: Record<string, unknown>\n ) {\n // Pass i18nKey to Error.message for useful stack traces (e.g., \"InternalError: errors.internalError\")\n super(i18nKey)\n\n // Maintains proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, new.target.prototype)\n\n this.name = this.constructor.name\n this.code = code\n this.timestamp = new Date().toISOString()\n this.metadata = metadata\n\n // Capture stack trace, excluding constructor call from it\n // Skip in production where stack traces are stripped from responses anyway\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- captureStackTrace is V8-specific, not always present\n if (ApplicationError.captureStackTraces && Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n\n /**\n * Filter metadata to include only user-facing properties\n *\n * User-facing properties (validation/constraint errors):\n * - issues: Validation errors from SchemaValidationError\n * - fields: Constraint violation fields\n * - field: Single field constraint/foreign key\n *\n * Internal properties (excluded from response):\n * - path, method: Route debugging\n * - controllerName, reason: Controller errors\n * - details, etc.: Internal debugging info\n *\n * @param metadata - Raw metadata object\n * @returns Filtered metadata with only whitelisted properties\n */\n private static filterMetadata(\n metadata?: Record<string, unknown>\n ): Record<string, unknown> | undefined {\n if (!metadata) return undefined\n\n // Whitelist of user-facing metadata properties\n const whitelist = ['issues', 'fields', 'field']\n\n const filtered: Record<string, unknown> = {}\n let hasUserFacingData = false\n\n for (const key of whitelist) {\n if (key in metadata && metadata[key] !== undefined) {\n filtered[key] = metadata[key]\n hasUserFacingData = true\n }\n }\n\n // Only return metadata if there's actual user-facing data\n return hasUserFacingData ? filtered : undefined\n }\n\n /**\n * Serialize error to ErrorResponse format for RPC transmission\n *\n * @param env - Environment (development | production)\n * @param translatedMessage - Optional translated message (from GlobalErrorHandler)\n * @returns ErrorResponse object suitable for JSON serialization\n */\n toErrorResponse(env: Environment, translatedMessage?: string): ErrorResponse {\n const message = translatedMessage ?? this.message\n\n return {\n code: this.code,\n message,\n timestamp: this.timestamp,\n // Include filtered user-facing metadata in all environments\n metadata: ApplicationError.filterMetadata(this.metadata),\n // Stack trace only in development for debugging\n // Rewrite first line with translated message for readable debugging\n stack: env === 'development'\n ? this.stack?.replace(this.message, message)\n : undefined,\n }\n }\n\n /**\n * JSON serialization (used by JSON.stringify)\n * Defaults to development mode for backward compatibility\n * Note: This will use the untranslated message key - use GlobalErrorHandler for proper localization\n */\n toJSON(): ErrorResponse {\n return this.toErrorResponse('development')\n }\n}\n","export type Environment = 'development' | 'staging' | 'production'\n\nexport interface ErrorResponse {\n /**\n * Numeric error code for identification and escalation\n * See error-codes.ts for the complete registry\n */\n code: number\n\n /**\n * Human-readable error message\n * Fixed per error type, not customizable\n */\n message: string\n\n /**\n * ISO timestamp when the error occurred\n */\n timestamp: string\n\n /**\n * Additional structured data about the error\n * Only included in development environment\n */\n metadata?: Record<string, unknown>\n\n /**\n * Stack trace for debugging\n * Only included in development environment\n */\n stack?: string\n}\n\n/**\n * Type guard to check if an object is an ErrorResponse\n */\nexport function isErrorResponse(obj: unknown): obj is ErrorResponse {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'code' in obj &&\n typeof (obj as ErrorResponse).code === 'number' &&\n 'message' in obj &&\n typeof (obj as ErrorResponse).message === 'string' &&\n 'timestamp' in obj &&\n typeof (obj as ErrorResponse).timestamp === 'string'\n )\n}\n","/**\n * Centralized Error Code Registry\n *\n * Error codes are organized by category with specific ranges:\n * - 1000-1999: Validation errors\n * - 2000-2999: Database errors (generic)\n * - 3000-3999: Authentication & Authorization\n * - 4000-4999: Resource errors\n * - 5000-5999: Domain-specific business logic (per module)\n * - 9000-9999: System/Internal errors\n * - 9000-9099: Router errors\n * - 9100-9199: Configuration errors\n * - 9200-9299: Infrastructure errors\n * - 9300-9399: I18n errors\n */\n\nexport const ERROR_CODES = {\n /**\n * Database Errors (2000-2999)\n * Generic database errors thrown by Prisma client extensions\n */\n DATABASE: {\n /** Generic database error */\n GENERIC: 2000,\n /** Record not found in database */\n RECORD_NOT_FOUND: 2001,\n /** Unique constraint violation */\n UNIQUE_CONSTRAINT: 2002,\n /** Foreign key constraint violation */\n FOREIGN_KEY_CONSTRAINT: 2003,\n /** Database connection failed */\n CONNECTION_FAILED: 2004,\n /** Database timeout */\n TIMEOUT: 2005,\n /** Null constraint violation */\n NULL_CONSTRAINT: 2006,\n /** Too many database connections */\n TOO_MANY_CONNECTIONS: 2007,\n /** Transaction conflict or deadlock */\n TRANSACTION_CONFLICT: 2008,\n },\n\n /**\n * Authentication Errors (3000-3099)\n * Authentication-related failures\n */\n AUTH: {\n /** Invalid credentials provided */\n INVALID_CREDENTIALS: 3000,\n /** Session expired or invalid */\n SESSION_EXPIRED: 3001,\n /** Account locked or disabled */\n ACCOUNT_LOCKED: 3002,\n /** Invalid or expired token */\n INVALID_TOKEN: 3003,\n /** Context not initialized */\n CONTEXT_NOT_INITIALIZED: 3004,\n /** User not authenticated */\n USER_NOT_AUTHENTICATED: 3005,\n /** Email verification required before login */\n EMAIL_NOT_VERIFIED: 3007,\n /** Password doesn't meet minimum length */\n PASSWORD_TOO_SHORT: 3008,\n /** Password exceeds maximum length */\n PASSWORD_TOO_LONG: 3009,\n /** Account with email already exists */\n ACCOUNT_ALREADY_EXISTS: 3010,\n /** User creation failed */\n FAILED_TO_CREATE_USER: 3011,\n /** Session creation failed */\n FAILED_TO_CREATE_SESSION: 3012,\n /** User update failed */\n FAILED_TO_UPDATE_USER: 3013,\n /** Social account already linked */\n SOCIAL_ACCOUNT_LINKED: 3014,\n /** Last account cannot be unlinked */\n CANNOT_UNLINK_LAST_ACCOUNT: 3015,\n },\n\n /**\n * Authorization Errors (3100-3199)\n * Permission and access control failures\n */\n AUTHZ: {\n /** Insufficient permissions */\n FORBIDDEN: 3100,\n /** Resource access denied */\n ACCESS_DENIED: 3101,\n /** User lacks required role */\n INSUFFICIENT_PERMISSIONS: 3102,\n },\n\n /**\n * Resource Errors (4000-4999)\n * Generic resource-related errors\n */\n RESOURCE: {\n /** Generic resource not found */\n NOT_FOUND: 4000,\n /** Route/endpoint not found */\n ROUTE_NOT_FOUND: 4004,\n /** Resource conflict or duplicate */\n CONFLICT: 4100,\n /** Resource already exists */\n ALREADY_EXISTS: 4101,\n },\n\n /**\n * Validation Errors (1000-1999)\n * Input validation failures\n */\n VALIDATION: {\n /** Generic validation error */\n GENERIC: 1000,\n /** Required field missing */\n REQUIRED_FIELD: 1001,\n /** Invalid format */\n INVALID_FORMAT: 1002,\n /** Schema validation failed */\n SCHEMA_VALIDATION: 1003,\n /** Request validation failed (OpenAPI, etc.) */\n REQUEST_VALIDATION: 1004,\n },\n\n /**\n * Router Errors (9000-9099)\n * Router and controller-related INTERNAL errors\n */\n ROUTER: {\n /** Controller registration error */\n CONTROLLER_REGISTRATION_ERROR: 9005,\n /** Controller method not found */\n CONTROLLER_METHOD_NOT_FOUND: 9006,\n /** OpenAPI route registration failed */\n OPENAPI_ROUTE_REGISTRATION: 9008,\n },\n\n /**\n * I18n Errors (9300-9399)\n * Internationalization and localization errors\n */\n I18N: {\n /** Translation key missing from all locales */\n TRANSLATION_MISSING: 9300,\n /** Requested locale not supported */\n LOCALE_NOT_SUPPORTED: 9301,\n },\n\n /**\n * System Errors (9000-9999)\n * Internal system errors and unexpected failures\n */\n SYSTEM: {\n /** Internal server error */\n INTERNAL_ERROR: 9000,\n\n // Configuration Errors (9100-9199)\n /** Generic configuration error */\n CONFIGURATION_ERROR: 9100,\n /** ConfigService not initialized */\n CONFIG_NOT_INITIALIZED: 9101,\n /** Module already registered */\n MODULE_ALREADY_REGISTERED: 9102,\n /** Circular module dependency detected */\n MODULE_CIRCULAR_DEPENDENCY: 9103,\n /** Module dependency not found */\n MODULE_DEPENDENCY_NOT_FOUND: 9104,\n /** Invalid error code range */\n INVALID_ERROR_CODE_RANGE: 9105,\n /** Invalid module provider configuration */\n INVALID_MODULE_PROVIDER: 9106,\n /** ConfigModule.forRoot() was not called */\n CONFIG_MODULE_NOT_INITIALIZED: 9107,\n\n // Infrastructure Errors (9200-9299)\n /** Generic infrastructure error */\n INFRASTRUCTURE_ERROR: 9200,\n /** Execution context not initialized */\n EXECUTION_CONTEXT_NOT_INITIALIZED: 9201,\n /** Request container not initialized */\n REQUEST_CONTAINER_NOT_INITIALIZED: 9202,\n /** Queue binding not found */\n QUEUE_BINDING_NOT_FOUND: 9203,\n /** Cron job execution failed */\n CRON_EXECUTION_FAILED: 9204,\n /** Queue provider not supported */\n QUEUE_PROVIDER_NOT_SUPPORTED: 9205,\n /** body() called on WebSocket gateway context */\n WEBSOCKET_BODY_NOT_AVAILABLE: 9206,\n /** Duplicate WebSocket event decorator on a gateway */\n WEBSOCKET_DUPLICATE_EVENT_HANDLER: 9207,\n },\n} as const\n\n/**\n * Recursively extract all leaf values from a nested object type\n * Similar to DeepKeys but extracts values instead of keys\n *\n * Example:\n * { DATABASE: { GENERIC: 2000, NOT_FOUND: 2001 }, AUTH: { INVALID: 3000 } }\n * becomes\n * 2000 | 2001 | 3000\n */\ntype DeepValues<T> = T extends object\n ? { [K in keyof T]: DeepValues<T[K]> }[keyof T]\n : T\n\n/**\n * Type helper to extract all error code values\n * Union type of all numeric error codes defined in ERROR_CODES\n *\n * Type: 2000 | 2001 | 2002 | ... | 9203\n */\nexport type ErrorCode = DeepValues<typeof ERROR_CODES>\n","import type { ContentfulStatusCode } from 'hono/utils/http-status'\nimport { ERROR_CODES } from './error-codes'\n\n/**\n * Maps error codes to HTTP status codes\n *\n * This utility is used by the frontend to set appropriate HTTP status codes\n * when returning errors from API routes.\n *\n * @param code - Numeric error code from ERROR_CODES registry\n * @returns HTTP status code (200-599)\n */\nexport function getHttpStatus(code: number): ContentfulStatusCode {\n // Validation errors (1000-1999) → 400 Bad Request\n if (code >= 1000 && code < 2000) {\n return 400\n }\n\n // Database errors (2000-2999)\n if (code >= 2000 && code < 3000) {\n // Record not found → 404\n if (code === ERROR_CODES.DATABASE.RECORD_NOT_FOUND) return 404\n // Unique constraint / conflict → 409\n if (code === ERROR_CODES.DATABASE.UNIQUE_CONSTRAINT) return 409\n // Other database errors → 500\n return 500\n }\n\n // Authentication errors (3000-3099) → 401 Unauthorized\n if (code >= 3000 && code < 3100) {\n return 401\n }\n\n // Authorization errors (3100-3199) → 403 Forbidden\n if (code >= 3100 && code < 3200) {\n return 403\n }\n\n // Resource not found (4000-4099) → 404 Not Found\n if (code >= 4000 && code < 4100) {\n return 404\n }\n\n // Resource conflict (4100-4199) → 409 Conflict\n if (code >= 4100 && code < 4200) {\n return 409\n }\n\n // Business logic errors (5000-5999)\n if (code >= 5000 && code < 6000) {\n // Domain-specific NOT_FOUND errors → 404\n // 5000: NOTES.NOT_FOUND\n // 5100: USERS.NOT_FOUND\n // 5200: APPLICATIONS.NOT_FOUND\n if (code === 5000 || code === 5100 || code === 5200) {\n return 404\n }\n // Other business logic errors → 422 Unprocessable Entity\n return 422\n }\n\n // System errors (9000-9999) → 500 Internal Server Error\n if (code >= 9000) {\n return 500\n }\n\n // Default to 500 for unknown codes\n return 500\n}\n","/**\n * Dependency injection tokens for the router system\n */\nexport const ROUTER_TOKENS = {\n /**\n * Token for RouterContext (request-scoped)\n * Contains Hono context wrapper with helper methods\n */\n RouterContext: Symbol.for('stratal:router:context'),\n} as const\n","import { ERROR_CODES } from '../../errors'\nimport { ApplicationError } from '../../errors'\n\n/**\n * ConditionalBindingFallbackError\n *\n * Thrown when a conditional binding predicate returns false but no fallback\n * implementation was provided and no existing registration exists for the token.\n *\n * This typically indicates a misconfiguration in the DI setup where:\n * - A `when().use().give()` chain was used without `otherwise()`\n * - AND the token wasn't previously registered\n * - AND the predicate evaluated to false at resolution time\n */\nexport class ConditionalBindingFallbackError extends ApplicationError {\n constructor(token: string) {\n super(\n 'errors.conditionalBindingFallback',\n ERROR_CODES.SYSTEM.INFRASTRUCTURE_ERROR,\n { token }\n )\n }\n}\n","import { ERROR_CODES } from '../../errors'\nimport { ApplicationError } from '../../errors'\n\n/**\n * RequestScopeOperationNotAllowedError\n *\n * Thrown when attempting to call a method that is not allowed on the current container scope.\n * - `createRequestScope()` and `runInRequestScope()` can only be called on global containers\n */\nexport class RequestScopeOperationNotAllowedError extends ApplicationError {\n constructor(methodName: string) {\n super(\n 'errors.requestScopeOperationNotAllowed',\n ERROR_CODES.SYSTEM.INFRASTRUCTURE_ERROR,\n { methodName }\n )\n }\n}\n","/**\n * Conditional Binding Builder\n *\n * Provides a fluent API for predicate-based service registration.\n * The predicate is evaluated lazily at resolution time using tsyringe's\n * predicateAwareClassFactory.\n *\n * @example With explicit fallback\n * ```typescript\n * container\n * .when((c) => c.resolve(CONFIG_TOKEN).get('env') === 'development')\n * .use(FORMATTER_TOKEN)\n * .give(PrettyFormatter)\n * .otherwise(JsonFormatter)\n * ```\n *\n * @example Without fallback (uses existing registration)\n * ```typescript\n * container\n * .when((c) => c.resolve(FEATURE_FLAG_TOKEN).isEnabled('newFeature'))\n * .use(SERVICE_TOKEN)\n * .give(NewServiceImpl) // Falls back to existing if predicate is false\n * ```\n */\n\nimport type { DependencyContainer } from 'tsyringe'\nimport { predicateAwareClassFactory } from 'tsyringe'\nimport type InjectionToken from 'tsyringe/dist/typings/providers/injection-token'\nimport type { Constructor } from '../types'\nimport { ConditionalBindingFallbackError } from './errors'\nimport type { WhenOptions } from './types'\n\n/**\n * Container interface for predicate functions\n * Using a minimal interface to avoid circular imports\n */\nexport interface PredicateContainer {\n resolve<T>(token: InjectionToken<T>): T\n isRegistered<T>(token: InjectionToken<T>): boolean\n}\n\n/**\n * Initial builder returned by container.when()\n */\nexport interface ConditionalBindingBuilder {\n /**\n * Specify the token to conditionally bind\n *\n * @param token - DI token for the service\n * @returns Builder for specifying implementations\n */\n use<T extends object>(token: InjectionToken<T>): ConditionalBindingUse<T>\n}\n\n/**\n * Builder after specifying token with use()\n */\nexport interface ConditionalBindingUse<T extends object> {\n /**\n * Specify the implementation when predicate returns true.\n * Registration is completed immediately.\n *\n * If predicate is false at resolution time:\n * - Uses `otherwise()` implementation if provided\n * - Falls back to existing registration if available\n * - Throws error if no fallback exists\n *\n * @param implementation - Service class to use when predicate is true\n * @returns Builder for optional fallback specification\n */\n give(implementation: Constructor<T>): ConditionalBindingGive<T>\n}\n\n/**\n * Builder after specifying true implementation with give()\n * Registration is already complete at this point.\n */\nexport interface ConditionalBindingGive<T extends object> {\n /**\n * Optionally specify a fallback implementation when predicate returns false.\n * This re-registers with the explicit fallback instead of existing registration.\n *\n * @param implementation - Service class to use when predicate is false\n */\n otherwise(implementation: Constructor<T>): void\n}\n\n/**\n * Implementation of ConditionalBindingBuilder\n *\n * @internal\n */\nexport class ConditionalBindingBuilderImpl implements ConditionalBindingBuilder {\n constructor(\n private readonly tsyringeContainer: DependencyContainer,\n private readonly predicateContainer: PredicateContainer,\n private readonly predicate: (container: PredicateContainer) => boolean,\n private readonly options: WhenOptions\n ) { }\n\n use<T extends object>(token: InjectionToken<T>): ConditionalBindingUse<T> {\n return new ConditionalBindingUseImpl<T>(\n this.tsyringeContainer,\n this.predicateContainer,\n this.predicate,\n this.options,\n token\n )\n }\n}\n\n/**\n * Implementation of ConditionalBindingUse\n *\n * @internal\n */\nclass ConditionalBindingUseImpl<T extends object> implements ConditionalBindingUse<T> {\n constructor(\n private readonly tsyringeContainer: DependencyContainer,\n private readonly predicateContainer: PredicateContainer,\n private readonly predicate: (container: PredicateContainer) => boolean,\n private readonly options: WhenOptions,\n private readonly token: InjectionToken<T>\n ) { }\n\n give(trueImplementation: Constructor<T>): ConditionalBindingGive<T> {\n // Get fallback: existing registration or a class that throws\n const falseImplementation = this.getFallbackImplementation()\n\n // Register using predicateAwareClassFactory\n this.registerWithPredicate(trueImplementation, falseImplementation)\n\n // Return builder for optional otherwise()\n return {\n otherwise: (implementation: Constructor<T>) => {\n this.registerWithPredicate(trueImplementation, implementation,)\n },\n }\n }\n\n /**\n * Get fallback implementation: existing registration or throw-on-resolve class\n */\n private getFallbackImplementation(): Constructor<T> {\n // Check if token is already registered\n if (this.tsyringeContainer.isRegistered(this.token)) {\n // Create a class that resolves the existing registration\n // We need to capture the current registration before we overwrite it\n const existingInstance = this.tsyringeContainer.resolve<T>(this.token)\n\n // Return a \"class\" that just returns the existing instance\n // Using a factory wrapper since predicateAwareClassFactory expects a constructor\n return class ExistingInstanceWrapper {\n static instance = existingInstance\n constructor() {\n return ExistingInstanceWrapper.instance as unknown as ExistingInstanceWrapper\n }\n } as unknown as Constructor<T>\n }\n\n // No existing registration - create a class that throws\n const tokenStr = typeof this.token === 'symbol'\n ? (this.token.description ?? 'unknown')\n : typeof this.token === 'function'\n ? this.token.name\n // eslint-disable-next-line @typescript-eslint/no-base-to-string -- token can be string or object; String() is intentional fallback\n : String(this.token)\n return class NoFallbackError {\n constructor() {\n throw new ConditionalBindingFallbackError(tokenStr)\n }\n } as unknown as Constructor<T>\n }\n\n private registerWithPredicate(\n trueImplementation: Constructor<T>,\n falseImplementation: Constructor<T>\n ): void {\n const { predicate, predicateContainer, options } = this\n\n this.tsyringeContainer.register(this.token, {\n useFactory: predicateAwareClassFactory<T>(\n () => predicate(predicateContainer),\n trueImplementation,\n falseImplementation,\n options.cache ?? false\n )\n })\n }\n}\n","/**\n * Unified DI Container\n *\n * Provides a developer-friendly wrapper around tsyringe with:\n * - Auto-token extraction from decorator metadata\n * - Auto-scope detection from decorator metadata\n * - Seamless global/request scope interoperability\n * - Request scope lifecycle management\n *\n * **Two-Tier Container Architecture:**\n * ```\n * Global Container (managed by Container)\n * ↓\n * All services registered here\n * (singletons + container-scoped)\n * ↓\n * Request Container (child, per request)\n * ↓\n * Fresh instances for ContainerScoped services\n * RouterContext registered per request\n * ```\n */\nimport { type DependencyContainer, type Lifecycle } from 'tsyringe'\nimport type InjectionToken from 'tsyringe/dist/typings/providers/injection-token'\nimport type { RouterContext } from '../router/router-context'\nimport { ROUTER_TOKENS } from '../router/router.tokens'\nimport type { Constructor } from '../types'\nimport { ConditionalBindingBuilderImpl, type ConditionalBindingBuilder, type PredicateContainer } from './conditional-binding-builder'\nimport { RequestScopeOperationNotAllowedError } from './errors/request-scope-operation-not-allowed.error'\nimport { CONTAINER_TOKEN } from './tokens'\nimport type { ExtensionDecorator, Scope, WhenOptions } from './types'\n\n/**\n * Options for creating a Container instance\n */\nexport interface ContainerOptions {\n /** Pre-created DependencyContainer */\n container: DependencyContainer\n /** Whether this is a request-scoped container */\n isRequestScoped?: boolean\n}\n\n/**\n * Unified Container for DI management\n *\n * Manages the two-tier container hierarchy:\n * - Global scope: Singletons, base instances of request-scoped services\n * - Request scope: Context-enriched instances per HTTP request\n *\n * @example Basic registration\n * ```typescript\n * import { container as tsyringeRootContainer } from 'tsyringe'\n *\n * const container = new Container({\n * container: tsyringeRootContainer.createChildContainer()\n * })\n *\n * container.register(I18nService)\n * container.register(MY_TOKEN, MyService)\n * container.registerSingleton(ConfigService)\n * container.registerValue(MY_TOKEN, myInstance)\n * ```\n *\n * @example Request scope (automatic lifecycle)\n * ```typescript\n * await container.runInRequestScope(routerContext, async (requestContainer) => {\n * const i18n = requestContainer.resolve(I18N_TOKEN)\n * })\n * ```\n */\nexport class Container {\n private readonly container: DependencyContainer\n private readonly isRequestScoped: boolean\n\n constructor(options: ContainerOptions) {\n this.isRequestScoped = options.isRequestScoped ?? false\n this.container = options.container\n\n // Only register CONTAINER_TOKEN for global container (not request-scoped)\n if (!this.isRequestScoped) {\n this.container.register(CONTAINER_TOKEN, { useValue: this })\n }\n }\n\n // ============================================================\n // Registration Methods\n // ============================================================\n\n /**\n * Register a service with optional explicit token and scope\n */\n register<T extends object>(serviceClass: Constructor<T>, scope?: Scope): void\n register<T extends object>(token: InjectionToken<T>, serviceClass: Constructor<T>, scope?: Scope): void\n register<T extends object>(\n tokenOrClass: InjectionToken<T> | Constructor<T>,\n serviceClassOrScope?: Constructor<T> | Scope,\n scope?: Scope\n ): void {\n let token: InjectionToken<T>\n let serviceClass: Constructor<T>\n let lifecycle: Lifecycle | undefined\n\n if (typeof serviceClassOrScope === 'function') {\n // Called as register(token, class, scope?)\n token = tokenOrClass as InjectionToken<T>\n serviceClass = serviceClassOrScope\n lifecycle = scope as Lifecycle | undefined\n } else {\n // Called as register(class, scope?)\n token = tokenOrClass as Constructor<T>\n serviceClass = tokenOrClass as Constructor<T>\n lifecycle = serviceClassOrScope as Lifecycle | undefined\n }\n\n if (lifecycle !== undefined) {\n this.container.register(token, { useClass: serviceClass }, { lifecycle })\n } else {\n this.container.register(token, { useClass: serviceClass })\n }\n }\n\n /**\n * Register a service as singleton\n */\n registerSingleton<T extends object>(serviceClass: Constructor<T>): void\n registerSingleton<T extends object>(token: InjectionToken<T>, serviceClass: Constructor<T>): void\n registerSingleton<T extends object>(\n tokenOrClass: InjectionToken<T> | Constructor<T>,\n serviceClass?: Constructor<T>\n ): void {\n if (serviceClass !== undefined) {\n this.container.registerSingleton(tokenOrClass as InjectionToken<T>, serviceClass)\n } else {\n const targetClass = tokenOrClass as Constructor<T>\n this.container.registerSingleton(targetClass, targetClass)\n }\n }\n\n /**\n * Register a value (instance) directly\n */\n registerValue<T>(token: InjectionToken<T>, value: T): void {\n this.container.register(token, { useValue: value })\n }\n\n /**\n * Register with factory function\n */\n registerFactory<T>(\n token: InjectionToken<T>,\n factory: (container: Container) => T\n ): void {\n this.container.register(token, { useFactory: () => factory(this) })\n }\n\n /**\n * Register an alias to an existing token\n */\n registerExisting<T>(alias: InjectionToken<T>, target: InjectionToken<T>): void {\n this.container.register(alias, { useToken: target })\n }\n\n // ============================================================\n // Resolution Methods\n // ============================================================\n\n /**\n * Resolve a service from the container\n */\n resolve<T>(token: InjectionToken<T>): T {\n return this.container.resolve<T>(token)\n }\n\n /**\n * Check if a token is registered\n */\n isRegistered<T>(token: InjectionToken<T>): boolean {\n return this.container.isRegistered(token)\n }\n\n // ============================================================\n // Conditional Registration Methods\n // ============================================================\n\n /**\n * Start a conditional binding with predicate evaluation\n */\n when(\n predicate: (container: PredicateContainer) => boolean,\n options: WhenOptions = {}\n ): ConditionalBindingBuilder {\n return new ConditionalBindingBuilderImpl(\n this.container,\n this,\n predicate,\n options\n )\n }\n\n /**\n * Replace a service registration with a decorated version\n */\n extend<T>(token: InjectionToken<T>, decorator: ExtensionDecorator<T>): void {\n const currentInstance = this.container.resolve<T>(token)\n const decoratedInstance = decorator(currentInstance, this)\n this.container.register(token, { useValue: decoratedInstance })\n }\n\n // ============================================================\n // Request Scope Management\n // ============================================================\n\n /**\n * Run callback within request scope\n *\n * Creates a child container with fresh instances for services registered with `scope: Scope.Request`.\n * Callback receives the request-scoped container as argument.\n *\n * Can only be called on global container (not request-scoped).\n */\n async runInRequestScope<T>(\n routerContext: RouterContext,\n callback: (requestContainer: Container) => T | Promise<T>\n ): Promise<T> {\n if (this.isRequestScoped) {\n throw new RequestScopeOperationNotAllowedError('runInRequestScope')\n }\n\n const requestContainer = this.createRequestScope(routerContext)\n try {\n return await callback(requestContainer)\n } finally {\n await requestContainer.dispose()\n }\n }\n\n /**\n * Create request scope container\n *\n * Can only be called on global container (not request-scoped).\n */\n createRequestScope(routerContext: RouterContext): Container {\n if (this.isRequestScoped) {\n throw new RequestScopeOperationNotAllowedError('createRequestScope')\n }\n\n const childContainer = this.container.createChildContainer()\n childContainer.register(ROUTER_TOKENS.RouterContext, { useValue: routerContext })\n\n return new Container({ container: childContainer, isRequestScoped: true })\n }\n\n // ============================================================\n // Escape Hatches\n // ============================================================\n\n /**\n * Get underlying tsyringe container\n */\n getTsyringeContainer(): DependencyContainer {\n return this.container\n }\n\n dispose() {\n return this.container.dispose()\n }\n}\n\n// Re-export tsyringe utilities for convenience\nexport { container, delay, inject, injectable, instancePerContainerCachingFactory, singleton } from 'tsyringe'\nexport type { DependencyContainer } from 'tsyringe'\n\n","/**\n * DI Type Definitions\n *\n * Core type definitions for the dependency injection system.\n * Simplified after removing LazyProxy - no more type wrappers needed.\n */\n\nimport { Lifecycle } from 'tsyringe'\nimport type InjectionToken from 'tsyringe/dist/typings/providers/injection-token'\n\n/**\n * Service scope for DI registration\n *\n * Maps directly to tsyringe's Lifecycle enum.\n * Scope is specified at registration time via provider configuration,\n * not at class decoration time.\n *\n * @example\n * ```typescript\n * // In module providers:\n * { provide: MY_TOKEN, useClass: MyService, scope: Scope.Singleton }\n *\n * // In Application.ts:\n * container.register(MY_TOKEN, MyService, Scope.Request)\n * ```\n */\n/* eslint-disable @typescript-eslint/prefer-literal-enum-member -- values must stay in sync with tsyringe Lifecycle */\nexport enum Scope {\n /** New instance per resolution (default) */\n Transient = Lifecycle.Transient,\n /** Single instance shared globally */\n Singleton = Lifecycle.Singleton,\n /** New instance per child container (per request) */\n Request = Lifecycle.ContainerScoped,\n}\n/* eslint-enable @typescript-eslint/prefer-literal-enum-member */\n\n/**\n * Options for conditional binding with `when()` method\n */\nexport interface WhenOptions {\n /**\n * Cache predicate result after first evaluation.\n * When true, the predicate is evaluated once and the result is reused.\n * When false (default), predicate is evaluated on each resolution.\n */\n cache?: boolean\n}\n\n/**\n * Decorator function type for extend() method\n *\n * @template T The service type being decorated\n */\nexport type ExtensionDecorator<T> = (service: T, container: ContainerLike) => T\n\n/**\n * Minimal container interface for decorator functions\n * Avoids circular dependency with Container class\n */\nexport interface ContainerLike {\n resolve<T>(token: InjectionToken<T>): T\n}\n\n","/**\n * I18n Module DI Tokens\n * Symbol-based tokens to avoid string collisions\n */\n\nexport const I18N_TOKENS = {\n /** MessageLoaderService - loads and caches locale messages */\n MessageLoader: Symbol.for('stratal:i18n:message:loader'),\n /** I18nService - request-scoped translation service */\n I18nService: Symbol.for('stratal:i18n:service'),\n /** I18nModuleOptions - configuration options from forRoot() */\n Options: Symbol.for('stratal:i18n:options')\n} as const\n","import { ERROR_CODES } from './error-codes'\nimport { ApplicationError } from './application-error'\n\n/**\n * InternalError\n *\n * Represents an unexpected internal server error.\n * Used to wrap unknown errors that don't fit into specific error categories.\n *\n * This error is thrown when:\n * - An unexpected exception occurs\n * - An error type is not recognized\n * - A system-level failure happens\n */\nexport class InternalError extends ApplicationError {\n constructor(metadata?: Record<string, unknown>) {\n super(\n 'errors.internalError',\n ERROR_CODES.SYSTEM.INTERNAL_ERROR,\n metadata\n )\n }\n}\n","import { ApplicationError } from './application-error'\n\n/**\n * Type guard to check if an error is an ApplicationError\n *\n * @param error - The error to check\n * @returns True if the error is an ApplicationError instance\n */\nexport function isApplicationError(error: unknown): error is ApplicationError {\n return error instanceof ApplicationError\n}\n","import { inject } from 'tsyringe'\nimport { DI_TOKENS } from '../di'\nimport { Transient } from '../di/decorators'\nimport { type StratalEnv } from '../env'\nimport { I18N_TOKENS } from '../i18n/i18n.tokens'\nimport type { II18nService, MessageKeys } from '../i18n/i18n.types'\nimport { LOGGER_TOKENS, type LoggerService } from '../logger'\nimport { ApplicationError } from './application-error'\nimport type { Environment, ErrorResponse } from './error-response'\nimport { InternalError } from './internal-error'\nimport { isApplicationError } from './is-application-error'\n\n/**\n * Log severity levels\n */\ntype LogSeverity = 'error' | 'warn' | 'info'\n\n/**\n * GlobalErrorHandler\n *\n * Centralized error handler registered in the DI container.\n * Responsible for:\n * - Intercepting all errors in the application\n * - Logging errors with appropriate severity via Logger service\n * - Translating error message keys using I18nService (when available)\n * - Serializing errors for RPC transmission\n * - Wrapping unexpected errors in InternalError\n *\n * **Translation Availability by Context:**\n *\n * ✅ **HTTP Requests**: Errors are fully translated\n * - GlobalErrorHandler resolved from request container\n * - I18nService available via AsyncLocalStorage with user's locale\n * - Full translation with parameter interpolation\n *\n * ✅ **Queue Processing**: Errors are fully translated\n * - Error handling executes inside AsyncLocalStorage scope\n * - Locale extracted from queue message metadata\n * - Request container created with mock RouterContext\n * - I18nService available with correct locale\n *\n * ⚠️ **RPC/Startup**: Message keys returned as-is (i18n unavailable)\n * - No request context available during service binding or startup\n * - No locale information available\n * - Frontend can translate message keys using its own i18n if needed\n * - This is expected behavior, not a bug\n *\n * **Implementation Note:**\n * The `isAvailable()` check exists to gracefully handle RPC/startup contexts\n * where no request container exists. For HTTP and Queue contexts, i18n is\n * always available thanks to AsyncLocalStorage scope propagation. This follows\n * the \"Laravel philosophy\" - transparent dependency injection for request contexts,\n * with explicit handling only for legitimate non-request edge cases.\n */\n@Transient()\nexport class GlobalErrorHandler {\n private readonly environment: Environment\n constructor(\n @inject(LOGGER_TOKENS.LoggerService) private readonly logger: LoggerService,\n @inject(I18N_TOKENS.I18nService) private readonly i18n: II18nService,\n @inject(DI_TOKENS.CloudflareEnv)\n private readonly env: StratalEnv,\n ) {\n this.environment = this.env.ENVIRONMENT as Environment\n }\n\n /**\n * Handle an error, log it, and serialize for response\n *\n * @param error - The error to handle\n * @returns Serialized ErrorResponse for RPC transmission\n */\n handle(error: unknown): ErrorResponse {\n // Check if it's an ApplicationError\n if (isApplicationError(error)) {\n // Translate once, use for both logging and response\n const translatedMessage = this.translateError(error)\n\n this.log(error, translatedMessage)\n\n return error.toErrorResponse(this.environment, translatedMessage)\n }\n\n // Unexpected error - wrap in InternalError\n this.logUnexpectedError(error)\n\n const internalError = new InternalError({\n originalError: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n })\n\n const translatedMessage = this.translateError(internalError)\n\n return internalError.toErrorResponse(this.environment, translatedMessage)\n }\n\n /**\n * Translate error message key using I18nService\n * Uses error metadata as interpolation parameters\n *\n * No try/catch - if translation fails, it's a bug that should fail loudly\n *\n * **Note**: This method is only called when isAvailable() returns true,\n * so the service is guaranteed to be resolved.\n *\n * @param error - ApplicationError with messageKey and metadata\n * @returns Translated message string\n */\n private translateError(error: ApplicationError): string {\n // Cast metadata to MessageParams (assuming values are string | number)\n const params = error.metadata as Record<string, string | number> | undefined\n return this.i18n.t(error.message as MessageKeys, params)\n }\n\n /**\n * Log an ApplicationError with appropriate severity\n */\n private log(error: ApplicationError, translatedMessage: string): void {\n const severity = this.getSeverity(error.code)\n\n const logData = {\n code: error.code,\n message: translatedMessage,\n timestamp: error.timestamp,\n metadata: error.metadata,\n name: error.name,\n }\n\n switch (severity) {\n case 'error':\n this.logger.error('[ApplicationError]', logData)\n break\n case 'warn':\n this.logger.warn('[ApplicationError]', logData)\n break\n case 'info':\n this.logger.info('[ApplicationError]', logData)\n break\n }\n }\n\n /**\n * Log an unexpected error\n */\n private logUnexpectedError(error: unknown): void {\n this.logger.error('[UnexpectedError]', {\n error: error instanceof Error ? {\n message: error.message,\n stack: error.stack,\n name: error.name,\n } : String(error),\n timestamp: new Date().toISOString(),\n })\n }\n\n /**\n * Determine log severity based on error code\n */\n private getSeverity(code: number): LogSeverity {\n // System errors (9000+) are critical\n if (code >= 9000) return 'error'\n\n // Database errors (2000-2999) are errors\n if (code >= 2000 && code < 3000) return 'error'\n\n // Business logic errors (5000-5999) are warnings\n if (code >= 5000 && code < 6000) return 'warn'\n\n // Validation errors (1000-1999) are info\n if (code >= 1000 && code < 2000) return 'info'\n\n // Auth/Resource errors (3000-4999) are warnings\n if (code >= 3000 && code < 5000) return 'warn'\n\n // Default to error\n return 'error'\n }\n}\n","import { ApplicationError } from './application-error'\nimport { ERROR_CODES } from './error-codes'\n\n/**\n * RequestContainerNotInitializedError\n *\n * Thrown when attempting to access the request-scoped container before it has been initialized.\n * This typically indicates that the RouterService middleware hasn't run yet,\n * or the router context is being accessed outside of a request lifecycle.\n */\nexport class RequestContainerNotInitializedError extends ApplicationError {\n constructor() {\n super(\n 'errors.requestContainerNotInitialized',\n ERROR_CODES.SYSTEM.REQUEST_CONTAINER_NOT_INITIALIZED\n )\n }\n}\n","import { ApplicationError } from './application-error'\nimport { ERROR_CODES } from './error-codes'\n\n/**\n * StratalNotInitializedError\n *\n * Thrown when attempting to resolve the Application instance before Stratal has been instantiated.\n * This typically indicates that the Stratal instance is not exported as the default export.\n */\nexport class StratalNotInitializedError extends ApplicationError {\n constructor() {\n super(\n 'errors.stratalNotInitialized',\n ERROR_CODES.SYSTEM.INFRASTRUCTURE_ERROR\n )\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ import { t as Constructor } from "../types-JUIHSW_a.mjs";
2
+ import { i as LoggerService } from "../index-3TtGtYlJ.mjs";
3
+
4
+ //#region src/events/constants.d.ts
5
+ /**
6
+ * Metadata keys for event listener decorators.
7
+ *
8
+ * Uses `Symbol.for()` (global symbol registry) so that both core and
9
+ * framework packages can reference the same symbols without cross-imports.
10
+ */
11
+ declare const LISTENER_METADATA_KEYS: {
12
+ readonly IS_LISTENER: symbol;
13
+ readonly EVENT_HANDLERS: symbol;
14
+ };
15
+ //#endregion
16
+ //#region src/events/decorators/listener.decorator.d.ts
17
+ /**
18
+ * Mark a class as an event listener.
19
+ *
20
+ * Applies `@Transient()` for DI and sets metadata so the module system
21
+ * can auto-discover and wire listener handlers at bootstrap time.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * @Listener()
26
+ * export class UserCreatedListener {
27
+ * @On('after.User.create')
28
+ * async sendWelcomeEmail(context: EventContext<'after.User.create'>) {
29
+ * // ...
30
+ * }
31
+ * }
32
+ * ```
33
+ */
34
+ declare function Listener(): <T extends Constructor>(target: T) => T;
35
+ /**
36
+ * Check if a class is decorated with `@Listener()`
37
+ */
38
+ declare function isListener(target: Constructor): boolean;
39
+ //#endregion
40
+ //#region src/events/types.d.ts
41
+ /**
42
+ * Core Event System Types
43
+ *
44
+ * Provides a generic, augmentable event system for Stratal.
45
+ * Core owns the base types; framework's database module augments
46
+ * `CustomEventRegistry` with richly typed database event contexts.
47
+ *
48
+ * ## Custom Events
49
+ *
50
+ * Custom application events can be added via module augmentation:
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * declare module 'stratal/events' {
55
+ * interface CustomEventRegistry {
56
+ * 'user.verified': CustomEventContext<{ userId: string; email: string }>
57
+ * 'email.sent': CustomEventContext<{ to: string; subject: string }>
58
+ * }
59
+ * }
60
+ * ```
61
+ */
62
+ /**
63
+ * Augmentable event registry.
64
+ * Maps event name -> full context type.
65
+ *
66
+ * Framework's database module augments this with `DatabaseEvents`.
67
+ * Users augment for custom events using `CustomEventContext<TData>`.
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * declare module 'stratal/events' {
72
+ * interface CustomEventRegistry {
73
+ * 'user.verified': CustomEventContext<{ userId: string; email: string }>
74
+ * }
75
+ * }
76
+ * ```
77
+ */
78
+ interface CustomEventRegistry {}
79
+ /**
80
+ * All valid event names.
81
+ * Falls back to `string` when no events are registered in CustomEventRegistry.
82
+ */
83
+ type EventName = keyof CustomEventRegistry extends never ? string : Extract<keyof CustomEventRegistry, string>;
84
+ /**
85
+ * Helper for user-defined custom events.
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * declare module 'stratal/events' {
90
+ * interface CustomEventRegistry {
91
+ * 'user.verified': CustomEventContext<{ userId: string; email: string }>
92
+ * }
93
+ * }
94
+ * ```
95
+ */
96
+ interface CustomEventContext<TData = unknown> {
97
+ data: TData;
98
+ metadata?: Record<string, unknown>;
99
+ }
100
+ /**
101
+ * Event context — looks up the full context type from CustomEventRegistry.
102
+ * For database events, this includes typed data and result from ZenStack schema.
103
+ * Falls back to a generic context shape for unregistered events.
104
+ */
105
+ type EventContext<E extends EventName = EventName> = E extends keyof CustomEventRegistry ? CustomEventRegistry[E] : {
106
+ data?: unknown;
107
+ result?: unknown;
108
+ };
109
+ /**
110
+ * Options for registering event handlers
111
+ */
112
+ interface EventOptions {
113
+ /** Handler execution priority. Higher values execute first. @default 0 */
114
+ priority?: number;
115
+ /**
116
+ * Whether to force blocking (await) vs non-blocking (waitUntil) behavior.
117
+ *
118
+ * Default behavior:
119
+ * - `before.*` events: Always blocking (true)
120
+ * - `after.*` events: Non-blocking via waitUntil (false)
121
+ * - Custom events: Blocking (true)
122
+ */
123
+ blocking?: boolean;
124
+ }
125
+ /**
126
+ * Event handler function signature with typed context
127
+ */
128
+ type EventHandler<E extends EventName = EventName> = (context: EventContext<E>) => Promise<void> | void;
129
+ /**
130
+ * Internal structure for storing registered handlers
131
+ * @internal
132
+ */
133
+ interface RegisteredHandler {
134
+ handler: EventHandler;
135
+ priority: number;
136
+ blocking?: boolean;
137
+ }
138
+ /**
139
+ * EventRegistry interface — main API for event system
140
+ */
141
+ interface IEventRegistry {
142
+ on<E extends EventName>(event: E, handler: EventHandler<E>, options?: EventOptions): void;
143
+ emit<E extends EventName>(event: E, context?: Partial<EventContext<E>>): Promise<void>;
144
+ off<E extends EventName>(event: E, handler: EventHandler<E>): void;
145
+ once<E extends EventName>(event: E, handler: EventHandler<E>, options?: EventOptions): void;
146
+ }
147
+ /**
148
+ * Metadata stored by `@On()` decorator for each handler method
149
+ */
150
+ interface ListenerHandlerMetadata {
151
+ methodName: string;
152
+ event: string;
153
+ options?: EventOptions;
154
+ }
155
+ //#endregion
156
+ //#region src/events/decorators/on.decorator.d.ts
157
+ /**
158
+ * Register a method as an event handler within a `@Listener()` class.
159
+ *
160
+ * Accumulates handler metadata on the class so the framework can
161
+ * auto-wire handlers with the EventRegistry at bootstrap time.
162
+ *
163
+ * @param event - Event name to listen for (fully typed with autocomplete)
164
+ * @param options - Optional handler options (priority, blocking)
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * @Listener()
169
+ * export class AuditListener {
170
+ * @On('after.User.create')
171
+ * async logCreate(context: EventContext<'after.User.create'>) { ... }
172
+ *
173
+ * @On('after.User.delete', { priority: 10 })
174
+ * async logDelete(context: EventContext<'after.User.delete'>) { ... }
175
+ * }
176
+ * ```
177
+ */
178
+ declare function On<E extends EventName>(event: E, options?: EventOptions): (target: object, propertyKey: string, _descriptor: PropertyDescriptor) => void;
179
+ /**
180
+ * Get all `@On()` handler metadata from a listener class
181
+ */
182
+ declare function getListenerHandlers(target: object): ListenerHandlerMetadata[];
183
+ //#endregion
184
+ //#region src/events/event-registry.d.ts
185
+ declare class EventRegistry implements IEventRegistry {
186
+ private readonly ctx;
187
+ private readonly logger;
188
+ private handlers;
189
+ constructor(ctx: ExecutionContext, logger: LoggerService);
190
+ on<E extends EventName>(event: E, handler: EventHandler<E>, options?: EventOptions): void;
191
+ emit<E extends EventName>(event: E, context?: Partial<EventContext<E>>): Promise<void>;
192
+ off<E extends EventName>(event: E, handler: EventHandler<E>): void;
193
+ once<E extends EventName>(event: E, handler: EventHandler<E>, options?: EventOptions): void;
194
+ /**
195
+ * Find all handlers matching the event using pattern matching.
196
+ * Order: exact match -> model wildcard -> operation wildcard -> global wildcard
197
+ */
198
+ private findMatchingHandlers;
199
+ /**
200
+ * Determine if we should use ctx.waitUntil (non-blocking) or await (blocking)
201
+ */
202
+ private shouldUseWaitUntil;
203
+ /**
204
+ * Execute a single handler with error isolation
205
+ */
206
+ private executeHandler;
207
+ }
208
+ //#endregion
209
+ export { type CustomEventContext, type CustomEventRegistry, type EventContext, type EventHandler, type EventName, type EventOptions, EventRegistry, type IEventRegistry, LISTENER_METADATA_KEYS, Listener, type ListenerHandlerMetadata, On, type RegisteredHandler, getListenerHandlers, isListener };
210
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/events/constants.ts","../../src/events/decorators/listener.decorator.ts","../../src/events/types.ts","../../src/events/decorators/on.decorator.ts","../../src/events/event-registry.ts"],"mappings":";;;;;;;;AAMA;;cAAa,sBAAA;EAAA,SAGH,WAAA;EAAA,SAAA,cAAA;AAAA;;;;;;AAHV;;;;;;;;ACeA;;;;;;iBAAgB,QAAA,CAAA,cACa,WAAA,EAAa,MAAA,EAAQ,CAAA,KAAC,CAAA;;;;iBAUnC,UAAA,CAAW,MAAA,EAAQ,WAAA;;;;;;;AD1BnC;;;;;;;;ACeA;;;;;;;;;;;;;;;AAWA;;;;;;;;ACUA;;UAAiB,mBAAA;;AAMjB;;;KAAY,SAAA,SAAkB,mBAAA,0BAE1B,OAAA,OAAc,mBAAA;;;;;;;;;;AAkBlB;;;UAAiB,kBAAA;EACf,IAAA,EAAM,KAAA;EACN,QAAA,GAAW,MAAA;AAAA;;;;;AAQb;KAAY,YAAA,WAAuB,SAAA,GAAY,SAAA,IAC7C,CAAA,eAAgB,mBAAA,GACd,mBAAA,CAAoB,CAAA;EAClB,IAAA;EAAgB,MAAA;AAAA;;;;UASL,YAAA;EAVQ;EAYvB,QAAA;EAduB;;;;;;;;EAuBvB,QAAA;AAAA;;AAXF;;KAiBY,YAAA,WAAuB,SAAA,GAAY,SAAA,KAC7C,OAAA,EAAS,YAAA,CAAa,CAAA,MACnB,OAAA;;;AAFL;;UAQiB,iBAAA;EACf,OAAA,EAAS,YAAA;EACT,QAAA;EACA,QAAA;AAAA;;;;UAMe,cAAA;EACf,EAAA,WAAa,SAAA,EACX,KAAA,EAAO,CAAA,EACP,OAAA,EAAS,YAAA,CAAa,CAAA,GACtB,OAAA,GAAU,YAAA;EAGZ,IAAA,WAAe,SAAA,EACb,KAAA,EAAO,CAAA,EACP,OAAA,GAAU,OAAA,CAAQ,YAAA,CAAa,CAAA,KAC9B,OAAA;EAEH,GAAA,WAAc,SAAA,EAAW,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,YAAA,CAAa,CAAA;EAEzD,IAAA,WAAe,SAAA,EACb,KAAA,EAAO,CAAA,EACP,OAAA,EAAS,YAAA,CAAa,CAAA,GACtB,OAAA,GAAU,YAAA;AAAA;;;;UAWG,uBAAA;EACf,UAAA;EACA,KAAA;EACA,OAAA,GAAU,YAAA;AAAA;;;;;;AFrJZ;;;;;;;;ACeA;;;;;;;;;;iBEGgB,EAAA,WAAa,SAAA,CAAA,CAAW,KAAA,EAAO,CAAA,EAAG,OAAA,GAAU,YAAA,IAExD,MAAA,UACA,WAAA,UACA,WAAA,EAAa,kBAAA;;;;iBAsBD,mBAAA,CAAoB,MAAA,WAAiB,uBAAA;;;cCpCxC,aAAA,YAAyB,cAAA;EAAA,iBAImB,GAAA;EAAA,iBACC,MAAA;EAAA,QAJhD,QAAA;cAG+C,GAAA,EAAK,gBAAA,EACJ,MAAA,EAAQ,aAAA;EAGhE,EAAA,WAAa,SAAA,CAAA,CAAW,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,YAAA,CAAa,CAAA,GAAI,OAAA,GAAU,YAAA;EAkBhE,IAAA,WAAe,SAAA,CAAA,CACnB,KAAA,EAAO,CAAA,EACP,OAAA,GAAU,OAAA,CAAQ,YAAA,CAAa,CAAA,KAC9B,OAAA;EAmCH,GAAA,WAAc,SAAA,CAAA,CAAW,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,YAAA,CAAa,CAAA;EAczD,IAAA,WAAe,SAAA,CAAA,CAAW,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,YAAA,CAAa,CAAA,GAAI,OAAA,GAAU,YAAA;;AHvE1E;;;UGoFU,oBAAA;EHnFwC;;;EAAA,QGwHxC,kBAAA;EHxHS;;;EAAA,QG2IH,cAAA;AAAA"}
@@ -0,0 +1,3 @@
1
+ import "../logger-Bg-CuidS.mjs";
2
+ import { a as isListener, i as Listener, n as On, o as LISTENER_METADATA_KEYS, r as getListenerHandlers, t as EventRegistry } from "../events-CQyvSyrQ.mjs";
3
+ export { EventRegistry, LISTENER_METADATA_KEYS, Listener, On, getListenerHandlers, isListener };
@@ -0,0 +1,190 @@
1
+ import { a as __decorate, d as Transient, g as DI_TOKENS, o as __decorateParam, s as __decorateMetadata, u as LOGGER_TOKENS } from "./logger-Bg-CuidS.mjs";
2
+ import { inject } from "tsyringe";
3
+ //#region src/events/constants.ts
4
+ /**
5
+ * Metadata keys for event listener decorators.
6
+ *
7
+ * Uses `Symbol.for()` (global symbol registry) so that both core and
8
+ * framework packages can reference the same symbols without cross-imports.
9
+ */
10
+ const LISTENER_METADATA_KEYS = {
11
+ IS_LISTENER: Symbol.for("stratal:listener"),
12
+ EVENT_HANDLERS: Symbol.for("stratal:listener:handlers")
13
+ };
14
+ //#endregion
15
+ //#region src/events/decorators/listener.decorator.ts
16
+ /**
17
+ * Mark a class as an event listener.
18
+ *
19
+ * Applies `@Transient()` for DI and sets metadata so the module system
20
+ * can auto-discover and wire listener handlers at bootstrap time.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * @Listener()
25
+ * export class UserCreatedListener {
26
+ * @On('after.User.create')
27
+ * async sendWelcomeEmail(context: EventContext<'after.User.create'>) {
28
+ * // ...
29
+ * }
30
+ * }
31
+ * ```
32
+ */
33
+ function Listener() {
34
+ return function(target) {
35
+ Transient()(target);
36
+ Reflect.defineMetadata(LISTENER_METADATA_KEYS.IS_LISTENER, true, target);
37
+ return target;
38
+ };
39
+ }
40
+ /**
41
+ * Check if a class is decorated with `@Listener()`
42
+ */
43
+ function isListener(target) {
44
+ return Reflect.getMetadata(LISTENER_METADATA_KEYS.IS_LISTENER, target) === true;
45
+ }
46
+ //#endregion
47
+ //#region src/events/decorators/on.decorator.ts
48
+ /**
49
+ * Register a method as an event handler within a `@Listener()` class.
50
+ *
51
+ * Accumulates handler metadata on the class so the framework can
52
+ * auto-wire handlers with the EventRegistry at bootstrap time.
53
+ *
54
+ * @param event - Event name to listen for (fully typed with autocomplete)
55
+ * @param options - Optional handler options (priority, blocking)
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * @Listener()
60
+ * export class AuditListener {
61
+ * @On('after.User.create')
62
+ * async logCreate(context: EventContext<'after.User.create'>) { ... }
63
+ *
64
+ * @On('after.User.delete', { priority: 10 })
65
+ * async logDelete(context: EventContext<'after.User.delete'>) { ... }
66
+ * }
67
+ * ```
68
+ */
69
+ function On(event, options) {
70
+ return function(target, propertyKey, _descriptor) {
71
+ const existingHandlers = Reflect.getMetadata(LISTENER_METADATA_KEYS.EVENT_HANDLERS, target.constructor) ?? [];
72
+ existingHandlers.push({
73
+ methodName: propertyKey,
74
+ event,
75
+ options
76
+ });
77
+ Reflect.defineMetadata(LISTENER_METADATA_KEYS.EVENT_HANDLERS, existingHandlers, target.constructor);
78
+ };
79
+ }
80
+ /**
81
+ * Get all `@On()` handler metadata from a listener class
82
+ */
83
+ function getListenerHandlers(target) {
84
+ const metadataTarget = typeof target === "function" ? target : target.constructor;
85
+ return Reflect.getMetadata(LISTENER_METADATA_KEYS.EVENT_HANDLERS, metadataTarget) ?? [];
86
+ }
87
+ //#endregion
88
+ //#region src/events/event-registry.ts
89
+ var _ref;
90
+ let EventRegistry = class EventRegistry {
91
+ handlers = /* @__PURE__ */ new Map();
92
+ constructor(ctx, logger) {
93
+ this.ctx = ctx;
94
+ this.logger = logger;
95
+ }
96
+ on(event, handler, options) {
97
+ const registered = {
98
+ handler,
99
+ priority: options?.priority ?? 0,
100
+ blocking: options?.blocking
101
+ };
102
+ const existingHandlers = this.handlers.get(event) ?? [];
103
+ existingHandlers.push(registered);
104
+ this.handlers.set(event, existingHandlers);
105
+ this.logger.debug("Event handler registered", {
106
+ event,
107
+ priority: registered.priority,
108
+ blocking: registered.blocking
109
+ });
110
+ }
111
+ async emit(event, context) {
112
+ const fullContext = { ...context };
113
+ const matchingHandlers = this.findMatchingHandlers(event);
114
+ if (matchingHandlers.length === 0) return;
115
+ const sortedHandlers = [...matchingHandlers].sort((a, b) => b.priority - a.priority);
116
+ const shouldUseWaitUntil = this.shouldUseWaitUntil(event, sortedHandlers);
117
+ const promises = sortedHandlers.map((registered) => this.executeHandler(registered.handler, fullContext, event));
118
+ if (shouldUseWaitUntil) this.ctx.waitUntil(Promise.all(promises));
119
+ else await Promise.all(promises);
120
+ }
121
+ off(event, handler) {
122
+ const existingHandlers = this.handlers.get(event);
123
+ if (!existingHandlers) return;
124
+ const filtered = existingHandlers.filter((h) => h.handler !== handler);
125
+ if (filtered.length > 0) this.handlers.set(event, filtered);
126
+ else this.handlers.delete(event);
127
+ this.logger.debug("Event handler unregistered", { event });
128
+ }
129
+ once(event, handler, options) {
130
+ const wrappedHandler = (async (context) => {
131
+ await handler(context);
132
+ this.off(event, wrappedHandler);
133
+ });
134
+ this.on(event, wrappedHandler, options);
135
+ }
136
+ /**
137
+ * Find all handlers matching the event using pattern matching.
138
+ * Order: exact match -> model wildcard -> operation wildcard -> global wildcard
139
+ */
140
+ findMatchingHandlers(event) {
141
+ const handlers = [];
142
+ const parts = event.split(".");
143
+ if (parts.length === 3) {
144
+ const [phase, model, operation] = parts;
145
+ handlers.push(...this.handlers.get(event) ?? []);
146
+ handlers.push(...this.handlers.get(`${phase}.${model}`) ?? []);
147
+ handlers.push(...this.handlers.get(`${phase}.${operation}`) ?? []);
148
+ handlers.push(...this.handlers.get(phase) ?? []);
149
+ } else if (parts.length === 2) {
150
+ handlers.push(...this.handlers.get(event) ?? []);
151
+ if (parts[0] === "before" || parts[0] === "after") handlers.push(...this.handlers.get(parts[0]) ?? []);
152
+ } else handlers.push(...this.handlers.get(event) ?? []);
153
+ return handlers;
154
+ }
155
+ /**
156
+ * Determine if we should use ctx.waitUntil (non-blocking) or await (blocking)
157
+ */
158
+ shouldUseWaitUntil(event, handlers) {
159
+ if (handlers.some((h) => h.blocking === true)) return false;
160
+ if (handlers.some((h) => h.blocking === false)) return true;
161
+ const phase = event.split(".")[0];
162
+ if (phase === "before") return false;
163
+ if (phase === "after") return true;
164
+ return false;
165
+ }
166
+ /**
167
+ * Execute a single handler with error isolation
168
+ */
169
+ async executeHandler(handler, context, event) {
170
+ try {
171
+ await handler(context);
172
+ } catch (error) {
173
+ this.logger.error("Event handler error", {
174
+ event,
175
+ error: error instanceof Error ? error.message : String(error),
176
+ stack: error instanceof Error ? error.stack : void 0
177
+ });
178
+ }
179
+ }
180
+ };
181
+ EventRegistry = __decorate([
182
+ Transient(),
183
+ __decorateParam(0, inject(DI_TOKENS.ExecutionContext)),
184
+ __decorateParam(1, inject(LOGGER_TOKENS.LoggerService)),
185
+ __decorateMetadata("design:paramtypes", [typeof (_ref = typeof ExecutionContext !== "undefined" && ExecutionContext) === "function" ? _ref : Object, Object])
186
+ ], EventRegistry);
187
+ //#endregion
188
+ export { isListener as a, Listener as i, On as n, LISTENER_METADATA_KEYS as o, getListenerHandlers as r, EventRegistry as t };
189
+
190
+ //# sourceMappingURL=events-CQyvSyrQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-CQyvSyrQ.mjs","names":[],"sources":["../src/events/constants.ts","../src/events/decorators/listener.decorator.ts","../src/events/decorators/on.decorator.ts","../src/events/event-registry.ts"],"sourcesContent":["/**\n * Metadata keys for event listener decorators.\n *\n * Uses `Symbol.for()` (global symbol registry) so that both core and\n * framework packages can reference the same symbols without cross-imports.\n */\nexport const LISTENER_METADATA_KEYS = {\n IS_LISTENER: Symbol.for('stratal:listener'),\n EVENT_HANDLERS: Symbol.for('stratal:listener:handlers'),\n} as const\n","import { Transient } from '../../di/decorators'\nimport type { Constructor } from '../../types'\nimport { LISTENER_METADATA_KEYS } from '../constants'\n\n/**\n * Mark a class as an event listener.\n *\n * Applies `@Transient()` for DI and sets metadata so the module system\n * can auto-discover and wire listener handlers at bootstrap time.\n *\n * @example\n * ```typescript\n * @Listener()\n * export class UserCreatedListener {\n * @On('after.User.create')\n * async sendWelcomeEmail(context: EventContext<'after.User.create'>) {\n * // ...\n * }\n * }\n * ```\n */\nexport function Listener() {\n return function <T extends Constructor>(target: T) {\n Transient()(target)\n Reflect.defineMetadata(LISTENER_METADATA_KEYS.IS_LISTENER, true, target)\n return target\n }\n}\n\n/**\n * Check if a class is decorated with `@Listener()`\n */\nexport function isListener(target: Constructor): boolean {\n return Reflect.getMetadata(LISTENER_METADATA_KEYS.IS_LISTENER, target) === true\n}\n","import { LISTENER_METADATA_KEYS } from '../constants'\nimport type { EventName, EventOptions, ListenerHandlerMetadata } from '../types'\n\n/**\n * Register a method as an event handler within a `@Listener()` class.\n *\n * Accumulates handler metadata on the class so the framework can\n * auto-wire handlers with the EventRegistry at bootstrap time.\n *\n * @param event - Event name to listen for (fully typed with autocomplete)\n * @param options - Optional handler options (priority, blocking)\n *\n * @example\n * ```typescript\n * @Listener()\n * export class AuditListener {\n * @On('after.User.create')\n * async logCreate(context: EventContext<'after.User.create'>) { ... }\n *\n * @On('after.User.delete', { priority: 10 })\n * async logDelete(context: EventContext<'after.User.delete'>) { ... }\n * }\n * ```\n */\nexport function On<E extends EventName>(event: E, options?: EventOptions) {\n return function (\n target: object,\n propertyKey: string,\n _descriptor: PropertyDescriptor\n ) {\n const existingHandlers: ListenerHandlerMetadata[] =\n (Reflect.getMetadata(LISTENER_METADATA_KEYS.EVENT_HANDLERS, target.constructor) as ListenerHandlerMetadata[] | undefined) ?? []\n\n existingHandlers.push({\n methodName: propertyKey,\n event: event as string,\n options,\n })\n\n Reflect.defineMetadata(\n LISTENER_METADATA_KEYS.EVENT_HANDLERS,\n existingHandlers,\n target.constructor\n )\n }\n}\n\n/**\n * Get all `@On()` handler metadata from a listener class\n */\nexport function getListenerHandlers(target: object): ListenerHandlerMetadata[] {\n const metadataTarget = typeof target === 'function' ? target : target.constructor\n return (Reflect.getMetadata(LISTENER_METADATA_KEYS.EVENT_HANDLERS, metadataTarget) as ListenerHandlerMetadata[] | undefined) ?? []\n}\n","import { inject } from 'tsyringe'\nimport { Transient } from '../di/decorators'\nimport { DI_TOKENS } from '../di/tokens'\nimport { LOGGER_TOKENS, type LoggerService } from '../logger'\nimport type {\n EventContext,\n EventHandler,\n EventName,\n EventOptions,\n IEventRegistry,\n RegisteredHandler\n} from './types'\n\n@Transient()\nexport class EventRegistry implements IEventRegistry {\n private handlers = new Map<string, RegisteredHandler[]>()\n\n constructor(\n @inject(DI_TOKENS.ExecutionContext) private readonly ctx: ExecutionContext,\n @inject(LOGGER_TOKENS.LoggerService) private readonly logger: LoggerService\n ) { }\n\n on<E extends EventName>(event: E, handler: EventHandler<E>, options?: EventOptions): void {\n const registered: RegisteredHandler = {\n handler: handler as EventHandler,\n priority: options?.priority ?? 0,\n blocking: options?.blocking\n }\n\n const existingHandlers = this.handlers.get(event) ?? []\n existingHandlers.push(registered)\n this.handlers.set(event, existingHandlers)\n\n this.logger.debug('Event handler registered', {\n event,\n priority: registered.priority,\n blocking: registered.blocking\n })\n }\n\n async emit<E extends EventName>(\n event: E,\n context?: Partial<EventContext<E>>\n ): Promise<void> {\n // Build full context with caller-provided fields\n const fullContext = {\n ...context\n } as EventContext<E>\n\n // Find matching handlers using pattern matching\n const matchingHandlers = this.findMatchingHandlers(event)\n\n if (matchingHandlers.length === 0) {\n return\n }\n\n // Sort by priority (higher first)\n const sortedHandlers = [...matchingHandlers].sort(\n (a, b) => b.priority - a.priority\n )\n\n // Determine if we should use waitUntil\n const shouldUseWaitUntil = this.shouldUseWaitUntil(event, sortedHandlers)\n\n // Execute handlers\n const promises = sortedHandlers.map((registered) =>\n this.executeHandler(registered.handler, fullContext, event)\n )\n\n if (shouldUseWaitUntil) {\n // Non-blocking: use ctx.waitUntil\n this.ctx.waitUntil(Promise.all(promises))\n } else {\n // Blocking: await all handlers\n await Promise.all(promises)\n }\n }\n\n off<E extends EventName>(event: E, handler: EventHandler<E>): void {\n const existingHandlers = this.handlers.get(event)\n if (!existingHandlers) return\n\n const filtered = existingHandlers.filter((h) => h.handler !== handler)\n if (filtered.length > 0) {\n this.handlers.set(event, filtered)\n } else {\n this.handlers.delete(event)\n }\n\n this.logger.debug('Event handler unregistered', { event })\n }\n\n once<E extends EventName>(event: E, handler: EventHandler<E>, options?: EventOptions): void {\n const wrappedHandler = (async (context: EventContext<E>) => {\n await handler(context)\n this.off(event, wrappedHandler)\n }) as EventHandler<E>\n\n this.on(event, wrappedHandler, options)\n }\n\n /**\n * Find all handlers matching the event using pattern matching.\n * Order: exact match -> model wildcard -> operation wildcard -> global wildcard\n */\n private findMatchingHandlers(event: string): RegisteredHandler[] {\n const handlers: RegisteredHandler[] = []\n\n const parts = event.split('.')\n\n if (parts.length === 3) {\n // Database event: \"phase.model.operation\"\n const [phase, model, operation] = parts\n\n // 1. Exact match: \"after.user.create\"\n handlers.push(...(this.handlers.get(event) ?? []))\n\n // 2. Model wildcard: \"after.user\"\n handlers.push(...(this.handlers.get(`${phase}.${model}`) ?? []))\n\n // 3. Operation wildcard: \"after.create\"\n handlers.push(...(this.handlers.get(`${phase}.${operation}`) ?? []))\n\n // 4. Global wildcard: \"after\"\n handlers.push(...(this.handlers.get(phase) ?? []))\n } else if (parts.length === 2) {\n // Could be wildcard like \"after.user\" or custom event like \"auth.verified\"\n handlers.push(...(this.handlers.get(event) ?? []))\n\n if (parts[0] === 'before' || parts[0] === 'after') {\n handlers.push(...(this.handlers.get(parts[0]) ?? []))\n }\n } else {\n handlers.push(...(this.handlers.get(event) ?? []))\n }\n\n return handlers\n }\n\n /**\n * Determine if we should use ctx.waitUntil (non-blocking) or await (blocking)\n */\n private shouldUseWaitUntil(\n event: string,\n handlers: RegisteredHandler[]\n ): boolean {\n const hasBlockingHandler = handlers.some((h) => h.blocking === true)\n if (hasBlockingHandler) return false\n\n const hasNonBlockingHandler = handlers.some((h) => h.blocking === false)\n if (hasNonBlockingHandler) return true\n\n const phase = event.split('.')[0]\n if (phase === 'before') return false\n if (phase === 'after') return true\n return false // Custom events block by default\n }\n\n /**\n * Execute a single handler with error isolation\n */\n private async executeHandler<E extends EventName>(\n handler: EventHandler,\n context: EventContext<E>,\n event: string\n ): Promise<void> {\n try {\n await handler(context as EventContext)\n } catch (error) {\n this.logger.error('Event handler error', {\n event,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n })\n }\n }\n}\n"],"mappings":"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"}