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":"storage-dgi7MG6z.mjs","names":[],"sources":["../src/storage/errors/disk-not-configured.error.ts","../src/storage/errors/file-not-found.error.ts","../src/storage/errors/file-too-large.error.ts","../src/storage/errors/invalid-disk.error.ts","../src/storage/errors/invalid-file-type.error.ts","../src/storage/errors/presigned-url-invalid-expiry.error.ts","../src/storage/errors/storage-provider-not-supported.error.ts","../src/storage/errors/storage-response-body-missing.error.ts","../src/storage/providers/s3-storage.provider.ts","../src/storage/storage.tokens.ts","../src/storage/services/storage-manager.service.ts","../src/storage/dom.polyfill.ts","../src/storage/services/storage.service.ts","../src/storage/storage.module.ts","../src/storage/contracts/delete-file.input.ts","../src/storage/contracts/file-exists.input.ts","../src/storage/contracts/get-presigned-url.input.ts","../src/storage/contracts/upload-file.input.ts"],"sourcesContent":["import { ApplicationError, ERROR_CODES } from '../../errors'\n\nexport class DiskNotConfiguredError extends ApplicationError {\n constructor(disk: string) {\n super('errors.storage.diskNotConfigured', ERROR_CODES.SYSTEM.CONFIGURATION_ERROR, { disk })\n }\n}\n","import { ERROR_CODES } from '../../errors'\nimport { ApplicationError } from '../../errors'\n\nexport class FileNotFoundError extends ApplicationError {\n constructor(path: string) {\n super('errors.storage.fileNotFound', ERROR_CODES.RESOURCE.NOT_FOUND, { path })\n }\n}\n","import { ERROR_CODES } from '../../errors'\nimport { ApplicationError } from '../../errors'\n\nexport class FileTooLargeError extends ApplicationError {\n constructor(size: number, maxSize: number) {\n super('errors.storage.fileTooLarge', ERROR_CODES.VALIDATION.INVALID_FORMAT, {\n size,\n maxSize,\n })\n }\n}\n","import { ERROR_CODES } from '../../errors'\nimport { ApplicationError } from '../../errors'\n\nexport class InvalidDiskError extends ApplicationError {\n constructor(disk: string) {\n super('errors.storage.invalidDisk', ERROR_CODES.SYSTEM.CONFIGURATION_ERROR, { disk })\n }\n}\n","import { ERROR_CODES } from '../../errors'\nimport { ApplicationError } from '../../errors'\n\nexport class InvalidFileTypeError extends ApplicationError {\n constructor(mimeType: string) {\n super('errors.storage.invalidFileType', ERROR_CODES.VALIDATION.INVALID_FORMAT, {\n mimeType,\n })\n }\n}\n","import { ERROR_CODES } from '../../errors'\nimport { ApplicationError } from '../../errors'\n\nexport class PresignedUrlInvalidExpiryError extends ApplicationError {\n constructor(expiresIn: number, min: number, max: number) {\n super('errors.storage.presignedUrlInvalidExpiry', ERROR_CODES.VALIDATION.INVALID_FORMAT, {\n expiresIn,\n min,\n max,\n })\n }\n}\n","import { ERROR_CODES } from '../../errors'\nimport { ApplicationError } from '../../errors'\n\nexport class StorageProviderNotSupportedError extends ApplicationError {\n constructor(provider: string) {\n super('errors.storage.providerNotSupported', ERROR_CODES.SYSTEM.CONFIGURATION_ERROR, { provider })\n }\n}\n","import { ERROR_CODES } from '../../errors'\nimport { ApplicationError } from '../../errors'\n\nexport class StorageResponseBodyMissingError extends ApplicationError {\n constructor(path: string) {\n super(\n 'errors.storage.responseBodyMissing',\n ERROR_CODES.SYSTEM.INFRASTRUCTURE_ERROR,\n { path }\n )\n }\n}\n","import {\n AbortMultipartUploadCommand,\n CompleteMultipartUploadCommand,\n CreateMultipartUploadCommand,\n DeleteObjectCommand,\n DeleteObjectsCommand,\n GetObjectCommand,\n HeadObjectCommand,\n ListMultipartUploadsCommand,\n ListPartsCommand,\n PutObjectCommand,\n S3Client,\n UploadPartCommand\n} from '@aws-sdk/client-s3'\nimport { Upload } from '@aws-sdk/lib-storage'\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner'\nimport type { StorageEntry } from '../types'\nimport type { DownloadResult, PresignedUrlResult, UploadOptions, UploadResult } from '../contracts'\nimport { StorageResponseBodyMissingError } from '../errors'\nimport type {\n CompletedPart,\n CompleteMultipartResult,\n CreateMultipartOptions,\n CreateMultipartResult,\n DeleteObjectsResult,\n HeadObjectResult,\n IS3MultipartProvider,\n ListMultipartUploadsResult,\n ListPartsResult,\n UploadPartResult,\n} from './s3-multipart-provider.interface'\nimport type { StreamingBlobPayloadInputTypes } from './storage-provider.interface'\n\n/**\n * S3 Storage Provider\n * Implements storage operations using AWS SDK for S3-compatible storage\n * Works with AWS S3, Cloudflare R2, MinIO, and other S3-compatible services\n *\n * Implements IS3MultipartProvider for multipart upload support needed by TUS\n */\nexport class S3StorageProvider implements IS3MultipartProvider {\n private readonly client: S3Client\n private readonly bucket: string\n private readonly disk: string\n\n constructor(config: StorageEntry) {\n // Configure S3Client for S3-compatible storage\n this.client = new S3Client({\n region: config.region || 'auto',\n endpoint: config.endpoint,\n credentials: {\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n },\n forcePathStyle: true,\n })\n\n this.bucket = config.bucket\n this.disk = config.disk\n }\n\n async upload(\n body: StreamingBlobPayloadInputTypes,\n path: string,\n options: UploadOptions\n ): Promise<UploadResult> {\n const command = new PutObjectCommand({\n Bucket: this.bucket,\n Key: path,\n Body: body,\n ContentType: options.mimeType,\n ContentLength: options.size,\n Metadata: options.metadata,\n Tagging: options.tagging,\n })\n\n await this.client.send(command)\n\n return {\n path,\n disk: this.disk,\n fullPath: `${this.bucket}/${path}`,\n size: options.size,\n mimeType: options.mimeType ?? 'application/octet-stream',\n uploadedAt: new Date(),\n }\n }\n\n async download(path: string): Promise<DownloadResult> {\n const command = new GetObjectCommand({\n Bucket: this.bucket,\n Key: path,\n })\n\n const response = await this.client.send(command)\n\n if (!response.Body) {\n throw new StorageResponseBodyMissingError(path)\n }\n\n return {\n toStream: () => response.Body?.transformToWebStream(),\n contentType: response.ContentType ?? 'application/octet-stream',\n size: response.ContentLength ?? 0,\n metadata: response.Metadata,\n toString: () => response.Body?.transformToString(),\n toArrayBuffer: () => response.Body?.transformToByteArray(),\n }\n }\n\n async delete(path: string): Promise<void> {\n const command = new DeleteObjectCommand({\n Bucket: this.bucket,\n Key: path,\n })\n\n await this.client.send(command)\n }\n\n async exists(path: string): Promise<boolean> {\n try {\n const command = new HeadObjectCommand({\n Bucket: this.bucket,\n Key: path,\n })\n\n await this.client.send(command)\n return true\n } catch {\n // HeadObject throws error if file doesn't exist\n return false\n }\n }\n\n async getPresignedUrl(\n path: string,\n method: 'GET' | 'PUT' | 'DELETE' | 'HEAD',\n expiresIn: number\n ): Promise<PresignedUrlResult> {\n // Select appropriate command based on method\n let command\n switch (method) {\n case 'GET':\n command = new GetObjectCommand({ Bucket: this.bucket, Key: path })\n break\n case 'PUT':\n command = new PutObjectCommand({ Bucket: this.bucket, Key: path })\n break\n case 'DELETE':\n command = new DeleteObjectCommand({ Bucket: this.bucket, Key: path })\n break\n case 'HEAD':\n command = new HeadObjectCommand({ Bucket: this.bucket, Key: path })\n break\n }\n\n const url = await getSignedUrl(this.client, command as GetObjectCommand, { expiresIn })\n\n return {\n url,\n expiresIn,\n expiresAt: new Date(Date.now() + expiresIn * 1000),\n method,\n }\n }\n\n /**\n * Chunked upload for streaming data without known size\n * Uses @aws-sdk/lib-storage for multipart upload handling\n *\n * Benefits:\n * - Handles unknown Content-Length automatically\n * - Automatic retry on transient failures\n * - Cleanup of partial uploads on error\n * - Works with S3-compatible storage (R2, MinIO, RustFS)\n *\n * @param body - Content to upload (stream or buffer)\n * @param path - Full path including disk root\n * @param options - Upload options (mimeType required, size optional)\n * @returns Upload result with metadata\n */\n async chunkedUpload(\n body: StreamingBlobPayloadInputTypes,\n path: string,\n options: Omit<UploadOptions, 'size'> & { size?: number }\n ): Promise<UploadResult> {\n const upload = new Upload({\n client: this.client,\n params: {\n Bucket: this.bucket,\n Key: path,\n Body: body,\n ContentType: options.mimeType,\n },\n // Concurrency configuration\n queueSize: 4,\n // Part size: 5MB minimum for S3\n partSize: 5 * 1024 * 1024,\n // Don't leave orphaned parts on error\n leavePartsOnError: false,\n })\n\n await upload.done()\n\n // Get the actual uploaded size via HeadObject\n const headResponse = await this.client.send(\n new HeadObjectCommand({\n Bucket: this.bucket,\n Key: path,\n })\n )\n\n return {\n path,\n disk: this.disk,\n fullPath: `${this.bucket}/${path}`,\n size: headResponse.ContentLength ?? options.size ?? 0,\n mimeType: options.mimeType ?? 'application/octet-stream',\n uploadedAt: new Date(),\n }\n }\n\n // ============================================\n // IS3MultipartProvider - Multipart upload methods\n // ============================================\n\n /**\n * Get the bucket name\n */\n getBucket(): string {\n return this.bucket\n }\n\n /**\n * Get object metadata without downloading the body\n */\n async headObject(key: string): Promise<HeadObjectResult | null> {\n const response = await this.client.send(\n new HeadObjectCommand({\n Bucket: this.bucket,\n Key: key,\n })\n )\n return {\n size: response.ContentLength ?? 0,\n contentType: response.ContentType,\n metadata: response.Metadata,\n }\n }\n\n /**\n * Delete multiple objects in a single request\n */\n async deleteObjects(keys: string[]): Promise<DeleteObjectsResult> {\n if (keys.length === 0) {\n return { deleted: 0, errors: [] }\n }\n\n const response = await this.client.send(\n new DeleteObjectsCommand({\n Bucket: this.bucket,\n Delete: {\n Objects: keys.map((key) => ({ Key: key })),\n },\n })\n )\n\n return {\n deleted: response.Deleted?.length ?? 0,\n errors: (response.Errors ?? []).map((e) => ({\n key: e.Key ?? '',\n code: e.Code ?? 'Unknown',\n message: e.Message ?? 'Unknown error',\n })),\n }\n }\n\n /**\n * Create a multipart upload\n */\n async createMultipartUpload(\n key: string,\n options?: CreateMultipartOptions\n ): Promise<CreateMultipartResult> {\n const response = await this.client.send(\n new CreateMultipartUploadCommand({\n Bucket: this.bucket,\n Key: key,\n ContentType: options?.contentType,\n CacheControl: options?.cacheControl,\n Metadata: options?.metadata,\n Tagging: options?.tagging,\n })\n )\n\n return {\n uploadId: response.UploadId ?? '',\n key: response.Key ?? '',\n }\n }\n\n /**\n * Upload a part to an existing multipart upload\n */\n async uploadPart(\n key: string,\n uploadId: string,\n partNumber: number,\n body: Uint8Array\n ): Promise<UploadPartResult> {\n const response = await this.client.send(\n new UploadPartCommand({\n Bucket: this.bucket,\n Key: key,\n UploadId: uploadId,\n PartNumber: partNumber,\n Body: body,\n ContentLength: body.length,\n })\n )\n\n return {\n etag: response.ETag ?? '',\n partNumber,\n }\n }\n\n /**\n * Complete a multipart upload\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: CompletedPart[]\n ): Promise<CompleteMultipartResult> {\n const response = await this.client.send(\n new CompleteMultipartUploadCommand({\n Bucket: this.bucket,\n Key: key,\n UploadId: uploadId,\n MultipartUpload: {\n Parts: parts.map((p) => ({\n ETag: p.etag,\n PartNumber: p.partNumber,\n })),\n },\n })\n )\n\n return {\n location: response.Location,\n key: response.Key ?? '',\n }\n }\n\n /**\n * Abort a multipart upload\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise<void> {\n await this.client.send(\n new AbortMultipartUploadCommand({\n Bucket: this.bucket,\n Key: key,\n UploadId: uploadId,\n })\n )\n }\n\n /**\n * List parts of a multipart upload\n */\n async listParts(\n key: string,\n uploadId: string,\n partNumberMarker?: string\n ): Promise<ListPartsResult> {\n const response = await this.client.send(\n new ListPartsCommand({\n Bucket: this.bucket,\n Key: key,\n UploadId: uploadId,\n PartNumberMarker: partNumberMarker,\n })\n )\n\n return {\n parts: (response.Parts ?? []).map((p) => ({\n partNumber: p.PartNumber ?? 0,\n etag: p.ETag ?? '',\n size: p.Size ?? 0,\n })),\n isTruncated: response.IsTruncated ?? false,\n nextPartNumberMarker: response.NextPartNumberMarker?.toString(),\n }\n }\n\n /**\n * List all in-progress multipart uploads\n */\n async listMultipartUploads(\n keyMarker?: string,\n uploadIdMarker?: string\n ): Promise<ListMultipartUploadsResult> {\n const response = await this.client.send(\n new ListMultipartUploadsCommand({\n Bucket: this.bucket,\n KeyMarker: keyMarker,\n UploadIdMarker: uploadIdMarker,\n })\n )\n\n return {\n uploads: (response.Uploads ?? []).map((u) => ({\n key: u.Key ?? '',\n uploadId: u.UploadId ?? '',\n initiated: u.Initiated,\n })),\n isTruncated: response.IsTruncated ?? false,\n nextKeyMarker: response.NextKeyMarker,\n nextUploadIdMarker: response.NextUploadIdMarker,\n }\n }\n}\n","/**\n * Dependency injection tokens for the Storage module\n * Using Symbol-based tokens to avoid magic strings\n */\nexport const STORAGE_TOKENS = {\n Options: Symbol.for('stratal:storage:options'),\n StorageService: Symbol.for('stratal:storage:service'),\n StorageManager: Symbol.for('stratal:storage:manager'),\n} as const\n","import { inject } from 'tsyringe'\nimport { Transient } from '../../di/decorators'\nimport { DiskNotConfiguredError, StorageProviderNotSupportedError } from '../errors'\nimport { S3StorageProvider } from '../providers/s3-storage.provider'\nimport type { IStorageProvider } from '../providers/storage-provider.interface'\nimport { STORAGE_TOKENS } from '../storage.tokens'\nimport type { StorageConfig, StorageEntry } from '../types'\n\n/**\n * Storage Manager Service\n * Manages multiple storage providers (one per disk)\n * Handles lazy initialization and caching of S3Clients\n */\n@Transient(STORAGE_TOKENS.StorageManager)\nexport class StorageManagerService {\n private readonly providers = new Map<string, IStorageProvider>()\n private readonly diskConfigs = new Map<string, StorageEntry>()\n\n constructor(\n @inject(STORAGE_TOKENS.Options)\n private readonly options: StorageConfig\n ) {\n this.initializeDiskConfigs()\n }\n\n /**\n * Initialize disk configurations from options\n */\n private initializeDiskConfigs(): void {\n for (const entry of this.options.storage) {\n this.diskConfigs.set(entry.disk, entry)\n }\n }\n\n /**\n * Get provider for a specific disk\n * Lazily initializes provider on first access\n * @param diskName - Name of the disk\n * @returns Storage provider instance\n */\n getProvider(diskName: string): IStorageProvider {\n // Return cached provider if exists\n const cached = this.providers.get(diskName)\n if (cached) {\n return cached\n }\n\n // Get disk configuration\n const diskConfig = this.diskConfigs.get(diskName)\n if (!diskConfig) {\n throw new DiskNotConfiguredError(diskName)\n }\n\n // Create provider based on configuration\n const provider = this.createProvider(diskConfig)\n\n // Cache provider\n this.providers.set(diskName, provider)\n\n return provider\n }\n\n /**\n * Create a provider instance based on configuration\n * @param config - Storage entry configuration\n * @returns Storage provider instance\n */\n private createProvider(config: StorageEntry): IStorageProvider {\n switch (config.provider) {\n case 's3':\n return new S3StorageProvider(config)\n case 'gcs':\n throw new StorageProviderNotSupportedError(config.provider)\n default:\n throw new StorageProviderNotSupportedError(config.provider)\n }\n }\n\n /**\n * Get disk configuration\n * @param diskName - Name of the disk\n * @returns Storage entry configuration\n */\n getDiskConfig(diskName: string): StorageEntry {\n const config = this.diskConfigs.get(diskName)\n if (!config) {\n throw new DiskNotConfiguredError(diskName)\n }\n return config\n }\n\n /**\n * Check if a disk exists\n * @param diskName - Name of the disk\n * @returns True if disk exists, false otherwise\n */\n hasDisk(diskName: string): boolean {\n return this.diskConfigs.has(diskName)\n }\n\n /**\n * Get all available disk names\n * @returns Array of disk names\n */\n getAvailableDisks(): string[] {\n return Array.from(this.diskConfigs.keys())\n }\n}\n","/**\n * DOM polyfills for Cloudflare Workers\n *\n * AWS SDK v3 uses DOMParser and Node for XML parsing, which are not available in Workers.\n * This module must be imported BEFORE any AWS SDK imports (including transitive).\n *\n * @see https://github.com/aws/aws-sdk-js-v3/issues/7375\n */\nimport { DOMParser } from '@xmldom/xmldom'\n\n// DOMParser polyfill for XML response parsing\nglobalThis.DOMParser = DOMParser\n\n// Node interface polyfill with DOM node type constants\n// Required by AWS SDK for XML response parsing\nif (typeof globalThis.Node === 'undefined') {\n globalThis.Node = {\n ELEMENT_NODE: 1,\n ATTRIBUTE_NODE: 2,\n TEXT_NODE: 3,\n CDATA_SECTION_NODE: 4,\n ENTITY_REFERENCE_NODE: 5,\n ENTITY_NODE: 6,\n PROCESSING_INSTRUCTION_NODE: 7,\n COMMENT_NODE: 8,\n DOCUMENT_NODE: 9,\n DOCUMENT_TYPE_NODE: 10,\n DOCUMENT_FRAGMENT_NODE: 11,\n NOTATION_NODE: 12,\n } as unknown as typeof Node\n}\n","import '../dom.polyfill'\n\nimport { inject } from 'tsyringe'\nimport { Transient } from '../../di/decorators'\nimport type { DownloadResult, PresignedUrlResult, UploadOptions, UploadResult } from '../contracts'\nimport {\n InvalidDiskError,\n PresignedUrlInvalidExpiryError,\n} from '../errors'\nimport type { StreamingBlobPayloadInputTypes } from '../providers/storage-provider.interface'\nimport { STORAGE_TOKENS } from '../storage.tokens'\nimport type { StorageConfig } from '../types'\nimport { StorageManagerService } from './storage-manager.service'\n\n/**\n * Storage Service\n *\n * Main facade for storage operations.\n * Request-scoped for proper isolation.\n *\n * @example\n * ```typescript\n * @inject(STORAGE_TOKENS.StorageService)\n * private readonly storage: StorageService\n *\n * await this.storage.upload(file, 'documents/report.pdf')\n * ```\n */\n@Transient(STORAGE_TOKENS.StorageService)\nexport class StorageService {\n constructor(\n @inject(STORAGE_TOKENS.StorageManager)\n protected readonly storageManager: StorageManagerService,\n @inject(STORAGE_TOKENS.Options)\n protected readonly options: StorageConfig\n ) { }\n\n /**\n * Upload content to storage\n * @param body - Content to upload (stream, buffer, or string)\n * @param relativePath - Relative path within the disk\n * @param options - Upload options including size and mime type\n * @param disk - Optional disk name (uses default if not provided)\n * @returns Upload result with metadata\n */\n async upload(\n body: StreamingBlobPayloadInputTypes,\n relativePath: string,\n options: UploadOptions,\n disk?: string\n ): Promise<UploadResult> {\n const diskName = this.resolveDisk(disk)\n const provider = this.storageManager.getProvider(diskName)\n const fullPath = this.buildFullPath(relativePath, diskName)\n\n return provider.upload(body, fullPath, options)\n }\n\n /**\n * Download a file from storage\n * @param relativePath - Relative path within the disk\n * @param disk - Optional disk name (uses default if not provided)\n * @returns Download result with stream and metadata\n */\n async download(relativePath: string, disk?: string): Promise<DownloadResult> {\n const diskName = this.resolveDisk(disk)\n const provider = this.storageManager.getProvider(diskName)\n const fullPath = this.buildFullPath(relativePath, diskName)\n\n return provider.download(fullPath)\n }\n\n /**\n * Delete a file from storage\n * @param relativePath - Relative path within the disk\n * @param disk - Optional disk name (uses default if not provided)\n */\n async delete(relativePath: string, disk?: string): Promise<void> {\n const diskName = this.resolveDisk(disk)\n const provider = this.storageManager.getProvider(diskName)\n const fullPath = this.buildFullPath(relativePath, diskName)\n\n await provider.delete(fullPath)\n }\n\n /**\n * Check if a file exists in storage\n * @param relativePath - Relative path within the disk\n * @param disk - Optional disk name (uses default if not provided)\n * @returns True if file exists, false otherwise\n */\n async exists(relativePath: string, disk?: string): Promise<boolean> {\n const diskName = this.resolveDisk(disk)\n const provider = this.storageManager.getProvider(diskName)\n const fullPath = this.buildFullPath(relativePath, diskName)\n\n return provider.exists(fullPath)\n }\n\n /**\n * Generate a presigned download URL\n * @param relativePath - Relative path within the disk\n * @param expiresIn - Optional expiry time in seconds (uses default if not provided)\n * @param disk - Optional disk name (uses default if not provided)\n * @returns Presigned URL result\n */\n async getPresignedDownloadUrl(\n relativePath: string,\n expiresIn?: number,\n disk?: string\n ): Promise<PresignedUrlResult> {\n return this.getPresignedUrl(relativePath, 'GET', expiresIn, disk)\n }\n\n /**\n * Generate a presigned upload URL\n * @param relativePath - Relative path within the disk\n * @param expiresIn - Optional expiry time in seconds (uses default if not provided)\n * @param disk - Optional disk name (uses default if not provided)\n * @returns Presigned URL result\n */\n async getPresignedUploadUrl(\n relativePath: string,\n expiresIn?: number,\n disk?: string\n ): Promise<PresignedUrlResult> {\n return this.getPresignedUrl(relativePath, 'PUT', expiresIn, disk)\n }\n\n /**\n * Generate a presigned delete URL\n * @param relativePath - Relative path within the disk\n * @param expiresIn - Optional expiry time in seconds (uses default if not provided)\n * @param disk - Optional disk name (uses default if not provided)\n * @returns Presigned URL result\n */\n async getPresignedDeleteUrl(\n relativePath: string,\n expiresIn?: number,\n disk?: string\n ): Promise<PresignedUrlResult> {\n return this.getPresignedUrl(relativePath, 'DELETE', expiresIn, disk)\n }\n\n /**\n * Generate a presigned URL for any method\n * @param relativePath - Relative path within the disk\n * @param method - HTTP method (GET, PUT, DELETE, HEAD)\n * @param expiresIn - Optional expiry time in seconds (uses default if not provided)\n * @param disk - Optional disk name (uses default if not provided)\n * @returns Presigned URL result\n */\n protected async getPresignedUrl(\n relativePath: string,\n method: 'GET' | 'PUT' | 'DELETE' | 'HEAD',\n expiresIn?: number,\n disk?: string\n ): Promise<PresignedUrlResult> {\n const diskName = this.resolveDisk(disk)\n const provider = this.storageManager.getProvider(diskName)\n const fullPath = this.buildFullPath(relativePath, diskName)\n const validatedExpiresIn = this.validateExpiresIn(expiresIn)\n\n return provider.getPresignedUrl(fullPath, method, validatedExpiresIn)\n }\n\n /**\n * Resolve disk name (use default if not provided)\n * @param disk - Optional disk name\n * @returns Resolved disk name\n */\n protected resolveDisk(disk?: string): string {\n const diskName = disk ?? this.options.defaultStorageDisk\n\n if (!this.storageManager.hasDisk(diskName)) {\n throw new InvalidDiskError(diskName)\n }\n\n return diskName\n }\n\n /**\n * Build full path with disk root and path template substitution\n * @param relativePath - Relative path within the disk\n * @param diskName - Name of the disk\n * @returns Full path including disk root\n */\n protected buildFullPath(relativePath: string, diskName: string): string {\n const diskConfig = this.storageManager.getDiskConfig(diskName)\n let root = diskConfig.root || ''\n\n // Substitute template variables\n root = this.substituteTemplateVariables(root)\n\n // Combine root and relative path\n const fullPath = `${root}/${relativePath}`.replace(/\\/+/g, '/').replace(/^\\//, '')\n\n return fullPath\n }\n\n /**\n * Substitute template variables in path\n * Override this method in subclasses to add custom substitutions\n *\n * @param path - Path with template variables\n * @returns Path with substituted variables\n */\n protected substituteTemplateVariables(path: string): string {\n let result = path\n\n // Substitute {date}, {year}, {month}\n const now = new Date()\n result = result.replace(/{date}/g, now.toISOString().split('T')[0])\n result = result.replace(/{year}/g, now.getFullYear().toString())\n result = result.replace(/{month}/g, (now.getMonth() + 1).toString().padStart(2, '0'))\n\n return result\n }\n\n /**\n * Validate expiry time for presigned URLs\n * @param expiresIn - Optional expiry time in seconds\n * @returns Validated expiry time\n */\n protected validateExpiresIn(expiresIn?: number): number {\n const presignedUrlConfig = this.options.presignedUrl\n const validatedExpiresIn = expiresIn ?? presignedUrlConfig.defaultExpiry\n\n // S3 presigned URL limits: 1 second to 7 days (604800 seconds)\n const minExpiry = 1\n const maxExpiry = presignedUrlConfig.maxExpiry\n\n if (validatedExpiresIn < minExpiry || validatedExpiresIn > maxExpiry) {\n throw new PresignedUrlInvalidExpiryError(validatedExpiresIn, minExpiry, maxExpiry)\n }\n\n return validatedExpiresIn\n }\n\n /**\n * Get all available disk names\n * @returns Array of disk names\n */\n getAvailableDisks(): string[] {\n return this.storageManager.getAvailableDisks()\n }\n\n /**\n * Chunked upload for streaming data without known size\n * Uses multipart upload under the hood - handles retries and large files\n *\n * Use this method when:\n * - Content-Length is unknown or unreliable\n * - Uploading from streams that can't be rewound\n * - Need automatic retry handling for transient failures\n *\n * @param body - Content to upload (stream or buffer)\n * @param relativePath - Relative path within the disk\n * @param options - Upload options (mimeType required, size optional)\n * @param disk - Optional disk name (uses default if not provided)\n * @returns Upload result with metadata\n */\n async chunkedUpload(\n body: StreamingBlobPayloadInputTypes,\n relativePath: string,\n options: Omit<UploadOptions, 'size'> & { size?: number },\n disk?: string\n ): Promise<UploadResult> {\n const diskName = this.resolveDisk(disk)\n const provider = this.storageManager.getProvider(diskName)\n const fullPath = this.buildFullPath(relativePath, diskName)\n\n return provider.chunkedUpload(body, fullPath, options)\n }\n}\n","/**\n * Storage Module\n * Provides file storage capabilities using AWS S3\n * Supports multiple disk configurations with dynamic path templates\n */\n\nimport { Module } from '../module'\nimport type { AsyncModuleOptions, DynamicModule } from '../module/types'\nimport { StorageManagerService } from './services/storage-manager.service'\nimport { StorageService } from './services/storage.service'\nimport { STORAGE_TOKENS } from './storage.tokens'\nimport type { StorageConfig } from './types'\n\n/**\n * Storage module options\n * Same as StorageConfig from types.ts\n */\nexport type StorageModuleOptions = StorageConfig\n\n@Module({\n providers: [{ provide: STORAGE_TOKENS.StorageManager, useClass: StorageManagerService },\n { provide: STORAGE_TOKENS.StorageService, useClass: StorageService },],\n})\nexport class StorageModule {\n /**\n * Configure StorageModule with static options\n *\n * @param options - Storage configuration options\n * @returns Dynamic module with storage infrastructure\n *\n * @example\n * ```typescript\n * StorageModule.forRoot({\n * storage: [{ disk: 'uploads', provider: 's3', ... }],\n * defaultStorageDisk: 'uploads',\n * presignedUrl: { defaultExpiry: 3600, maxExpiry: 86400 }\n * })\n * ```\n */\n static forRoot(options: StorageModuleOptions): DynamicModule {\n return {\n module: StorageModule,\n providers: [\n { provide: STORAGE_TOKENS.Options, useValue: options },\n ],\n }\n }\n\n /**\n * Configure StorageModule with async factory\n *\n * Use when configuration depends on other services.\n *\n * @param options - Async configuration with factory and inject tokens\n * @returns Dynamic module with storage infrastructure\n *\n * @example\n * ```typescript\n * StorageModule.forRootAsync({\n * inject: [storageConfig.KEY],\n * useFactory: (storage) => ({\n * storage: storage.storage,\n * defaultStorageDisk: storage.defaultStorageDisk,\n * presignedUrl: storage.presignedUrl\n * })\n * })\n * ```\n */\n static forRootAsync(options: AsyncModuleOptions<StorageModuleOptions>): DynamicModule {\n return {\n module: StorageModule,\n providers: [\n {\n provide: STORAGE_TOKENS.Options,\n useFactory: options.useFactory,\n inject: options.inject,\n },\n ],\n }\n }\n}\n","import { z, withI18n } from '../../i18n/validation'\n\nexport const deleteFileInputSchema = z.object({\n path: z.string().min(1, withI18n('zodI18n.errors.custom.filePathRequired')),\n disk: z.string().optional(),\n})\n\nexport type DeleteFileInput = z.infer<typeof deleteFileInputSchema>\n","import { z, withI18n } from '../../i18n/validation'\n\nexport const fileExistsInputSchema = z.object({\n path: z.string().min(1, withI18n('zodI18n.errors.custom.filePathRequired')),\n disk: z.string().optional(),\n})\n\nexport type FileExistsInput = z.infer<typeof fileExistsInputSchema>\n","import { z, withI18n } from '../../i18n/validation'\n\nexport const getPresignedUrlInputSchema = z.object({\n path: z.string().min(1, withI18n('zodI18n.errors.custom.filePathRequired')),\n method: z.enum(['GET', 'PUT', 'DELETE', 'HEAD']).default('GET'),\n expiresIn: z.number().int().min(1).max(604800).optional(),\n disk: z.string().optional(),\n})\n\nexport type GetPresignedUrlInput = z.infer<typeof getPresignedUrlInputSchema>\n\nexport const presignedUrlResultSchema = z.object({\n url: z.string().url(),\n expiresIn: z.number(),\n expiresAt: z.date(),\n method: z.enum(['GET', 'PUT', 'DELETE', 'HEAD']),\n})\n\nexport type PresignedUrlResult = z.infer<typeof presignedUrlResultSchema>\n","import { z } from '../../i18n/validation'\n\n/**\n * Upload options for streaming uploads\n */\nexport interface UploadOptions {\n /**\n * Size of the content in bytes\n */\n size: number\n /**\n * MIME type of the content\n */\n mimeType?: string\n /**\n * Custom metadata to store with the object (S3-specific)\n * Stored as S3 object metadata headers\n */\n metadata?: Record<string, string>\n /**\n * Object tagging for lifecycle policies (S3-specific)\n * Format: key=value (e.g., \"Tus-Completed=true\")\n */\n tagging?: string\n}\n\nexport const uploadResultSchema = z.object({\n path: z.string(),\n disk: z.string(),\n fullPath: z.string(),\n size: z.number(),\n mimeType: z.string(),\n uploadedAt: z.date(),\n})\n\nexport type UploadResult = z.infer<typeof uploadResultSchema>\n"],"mappings":"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"}
@@ -0,0 +1,270 @@
1
+ import { S as ApplicationError, c as Container, r as GlobalErrorHandler, t as StratalNotInitializedError } from "./errors-BRJgVd5-.mjs";
2
+ import { g as DI_TOKENS, i as LoggerService, l as LogLevel, n as PrettyFormatter, r as JsonFormatter, t as ConsoleTransport, u as LOGGER_TOKENS } from "./logger-Bg-CuidS.mjs";
3
+ import { t as ModuleRegistry } from "./module-Dvzm4dhS.mjs";
4
+ import { r as getListenerHandlers, t as EventRegistry } from "./events-CQyvSyrQ.mjs";
5
+ import { CacheModule } from "./cache/index.mjs";
6
+ import { t as CronManager } from "./cron-manager-CpS_hrDD.mjs";
7
+ import { g as OpenAPIModule, n as HonoApp, t as I18nModule } from "./i18n.module-C9wQr_2k.mjs";
8
+ import { t as QueueModule } from "./queue.module-ZqaZ2iY0.mjs";
9
+ import { container } from "tsyringe";
10
+ import "reflect-metadata";
11
+ //#region src/application.ts
12
+ /**
13
+ * Application
14
+ *
15
+ * Main application class managing the two-tier container hierarchy:
16
+ * - Global Container: All services (singletons via tsyringe native)
17
+ * - Request Container: Child of global, context-enriched instances per request
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const app = new Application({ module: AppModule, env, ctx })
22
+ * await app.initialize()
23
+ *
24
+ * // Access container via getter
25
+ * const service = app.container.resolve(MY_TOKEN)
26
+ *
27
+ * // Handle HTTP request (via HonoApp)
28
+ * // Handle queue batch
29
+ * await app.handleQueue(batch, 'my-queue')
30
+ * ```
31
+ */
32
+ var Application = class {
33
+ /**
34
+ * Unified Container - manages all DI operations
35
+ */
36
+ _container;
37
+ honoApp;
38
+ moduleRegistry;
39
+ consumerRegistry;
40
+ cronManager;
41
+ initialized = false;
42
+ env;
43
+ appConfig;
44
+ constructor({ env, ctx, ...config }) {
45
+ this.env = env;
46
+ this.appConfig = config;
47
+ ApplicationError.captureStackTraces = env.ENVIRONMENT !== "production";
48
+ this._container = new Container({ container: container.createChildContainer() });
49
+ this._container.registerValue(DI_TOKENS.Application, this);
50
+ this._container.registerValue(DI_TOKENS.CloudflareEnv, env);
51
+ this._container.registerValue(DI_TOKENS.ExecutionContext, ctx);
52
+ this.registerLoggerService();
53
+ this.registerCoreServices();
54
+ const logger = this._container.resolve(LOGGER_TOKENS.LoggerService);
55
+ this.moduleRegistry = new ModuleRegistry(this._container, logger);
56
+ this._container.registerValue(DI_TOKENS.ModuleRegistry, this.moduleRegistry);
57
+ }
58
+ /**
59
+ * Get the Container instance
60
+ */
61
+ get container() {
62
+ return this._container;
63
+ }
64
+ /**
65
+ * Get the HonoApp instance
66
+ */
67
+ get hono() {
68
+ return this.honoApp;
69
+ }
70
+ async initialize() {
71
+ if (this.initialized) return;
72
+ this.moduleRegistry.registerAll([
73
+ I18nModule,
74
+ OpenAPIModule,
75
+ QueueModule,
76
+ CacheModule
77
+ ]);
78
+ this.moduleRegistry.register(this.appConfig.module);
79
+ await this.moduleRegistry.initialize();
80
+ this.consumerRegistry = this._container.resolve(DI_TOKENS.ConsumerRegistry);
81
+ this.cronManager = this._container.resolve(DI_TOKENS.Cron);
82
+ const logger = this._container.resolve(LOGGER_TOKENS.LoggerService);
83
+ this.honoApp = new HonoApp(this._container, logger);
84
+ const middlewareConfigs = this.moduleRegistry.getAllMiddlewareConfigs();
85
+ const controllers = this.moduleRegistry.getAllControllers();
86
+ await this.honoApp.configure(middlewareConfigs, controllers, this.appConfig.versioning);
87
+ this.registerQueueConsumers();
88
+ this.registerCronJobs();
89
+ this.registerEventListeners();
90
+ this.initialized = true;
91
+ }
92
+ /**
93
+ * Resolve a service from the container
94
+ */
95
+ resolve(token) {
96
+ try {
97
+ return this._container.resolve(token);
98
+ } catch (error) {
99
+ throw this._container.resolve(DI_TOKENS.ErrorHandler).handle(error);
100
+ }
101
+ }
102
+ /**
103
+ * Handle queue batch processing
104
+ */
105
+ async handleQueue(batch, queueName) {
106
+ const locale = (batch.messages[0]?.body)?.metadata?.locale ?? "en";
107
+ const mockRouterContext = this.createMockRouterContext(locale);
108
+ await this._container.runInRequestScope(mockRouterContext, async (requestContainer) => {
109
+ try {
110
+ await requestContainer.resolve(DI_TOKENS.Queue).processBatch(queueName, batch);
111
+ } catch (error) {
112
+ requestContainer.resolve(DI_TOKENS.ErrorHandler).handle(error);
113
+ throw error;
114
+ }
115
+ });
116
+ }
117
+ /**
118
+ * Handle scheduled cron trigger
119
+ */
120
+ async handleScheduled(controller) {
121
+ const mockRouterContext = this.createMockRouterContext("en");
122
+ await this._container.runInRequestScope(mockRouterContext, async (requestContainer) => {
123
+ try {
124
+ await this.cronManager.executeScheduled(controller);
125
+ } catch (error) {
126
+ requestContainer.resolve(DI_TOKENS.ErrorHandler).handle(error);
127
+ throw error;
128
+ }
129
+ });
130
+ }
131
+ /**
132
+ * Create mock RouterContext for queue/cron/seeder processing
133
+ */
134
+ createMockRouterContext(locale = "en") {
135
+ return {
136
+ getLocale: () => locale,
137
+ setLocale: () => {},
138
+ getContainer: () => this._container
139
+ };
140
+ }
141
+ async shutdown() {
142
+ if (!this.initialized) return;
143
+ this.initialized = false;
144
+ await this.moduleRegistry.shutdown();
145
+ this._container.resolve(LOGGER_TOKENS.LoggerService).info("Disposing container...");
146
+ await this._container.dispose();
147
+ }
148
+ registerQueueConsumers() {
149
+ for (const ConsumerClass of this.moduleRegistry.getAllConsumers()) {
150
+ const consumer = this._container.resolve(ConsumerClass);
151
+ this.consumerRegistry.register(consumer);
152
+ }
153
+ }
154
+ registerCronJobs() {
155
+ for (const JobClass of this.moduleRegistry.getAllJobs()) {
156
+ const job = this._container.resolve(JobClass);
157
+ this.cronManager.registerJob(job);
158
+ }
159
+ }
160
+ /**
161
+ * Auto-wire `@Listener()` classes with the EventRegistry.
162
+ */
163
+ registerEventListeners() {
164
+ const listeners = this.moduleRegistry.getAllListeners();
165
+ if (listeners.length === 0) return;
166
+ const eventRegistry = this._container.resolve(DI_TOKENS.EventRegistry);
167
+ for (const ListenerClass of listeners) {
168
+ const instance = this._container.resolve(ListenerClass);
169
+ const handlers = getListenerHandlers(ListenerClass);
170
+ for (const { methodName, event, options } of handlers) eventRegistry.on(event, instance[methodName].bind(instance), options);
171
+ }
172
+ }
173
+ /**
174
+ * Register LoggerService and dependencies
175
+ */
176
+ registerLoggerService() {
177
+ const logLevel = this.appConfig.logging?.level ?? LogLevel.INFO;
178
+ const formatter = this.appConfig.logging?.formatter ?? "json";
179
+ this._container.registerValue(LOGGER_TOKENS.LogLevelOptions, logLevel);
180
+ this._container.when(() => formatter === "pretty").use(LOGGER_TOKENS.Formatter).give(PrettyFormatter).otherwise(JsonFormatter);
181
+ this._container.registerSingleton(LOGGER_TOKENS.ConsoleTransport, ConsoleTransport);
182
+ this._container.registerFactory(LOGGER_TOKENS.Transports, (c) => [c.resolve(LOGGER_TOKENS.ConsoleTransport)]);
183
+ this._container.registerSingleton(LOGGER_TOKENS.LoggerService, LoggerService);
184
+ }
185
+ /**
186
+ * Register core services with explicit scope
187
+ */
188
+ registerCoreServices() {
189
+ this._container.registerSingleton(DI_TOKENS.Cron, CronManager);
190
+ this._container.register(DI_TOKENS.ErrorHandler, GlobalErrorHandler);
191
+ this._container.registerSingleton(DI_TOKENS.EventRegistry, EventRegistry);
192
+ }
193
+ };
194
+ //#endregion
195
+ //#region src/stratal.ts
196
+ /**
197
+ * Stratal — Hono-style entry point for Cloudflare Workers.
198
+ *
199
+ * Eagerly bootstraps the Application at construction time, dynamically
200
+ * importing `cloudflare:workers` for env and waitUntil.
201
+ *
202
+ * @example
203
+ * ```typescript
204
+ * import { Stratal } from 'stratal'
205
+ * import { AppModule } from './app.module'
206
+ *
207
+ * export default new Stratal({ module: AppModule })
208
+ * ```
209
+ */
210
+ var Stratal = class Stratal {
211
+ app = null;
212
+ initPromise;
213
+ static _application = null;
214
+ constructor(config) {
215
+ this.fetch = this.fetch.bind(this);
216
+ this.queue = this.queue.bind(this);
217
+ this.scheduled = this.scheduled.bind(this);
218
+ this.initPromise = this.prepareApp(config);
219
+ Stratal._application = this.initPromise;
220
+ }
221
+ async fetch(request, env, ctx) {
222
+ return (await this.ensureReady()).hono.fetch(request, env, ctx);
223
+ }
224
+ async queue(batch) {
225
+ return (await this.ensureReady()).handleQueue(batch, batch.queue);
226
+ }
227
+ async scheduled(controller) {
228
+ return (await this.ensureReady()).handleScheduled(controller);
229
+ }
230
+ get hono() {
231
+ return this.initPromise.then((app) => app.hono);
232
+ }
233
+ async shutdown() {
234
+ try {
235
+ this.app = await this.initPromise;
236
+ } catch {}
237
+ if (this.app) {
238
+ await this.app.shutdown();
239
+ this.app = null;
240
+ }
241
+ }
242
+ /**
243
+ * @internal
244
+ * Resolves the Application instance from the static singleton.
245
+ * Used by worker base classes (DurableObject, Workflow, WorkerEntrypoint)
246
+ * to access the DI container without going through Cloudflare RPC.
247
+ */
248
+ static resolveApplication() {
249
+ if (!Stratal._application) throw new StratalNotInitializedError();
250
+ return Stratal._application;
251
+ }
252
+ async ensureReady() {
253
+ this.app ??= await this.initPromise;
254
+ return this.app;
255
+ }
256
+ async prepareApp(config) {
257
+ const { env, waitUntil } = await import("cloudflare:workers");
258
+ const app = new Application({
259
+ ...config,
260
+ env,
261
+ ctx: { waitUntil }
262
+ });
263
+ await app.initialize();
264
+ return app;
265
+ }
266
+ };
267
+ //#endregion
268
+ export { Application as n, Stratal as t };
269
+
270
+ //# sourceMappingURL=stratal-D4MS_7pI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stratal-D4MS_7pI.mjs","names":["tsyringeRootContainer"],"sources":["../src/application.ts","../src/stratal.ts"],"sourcesContent":["import { container as tsyringeRootContainer } from 'tsyringe'\nimport { CacheModule } from './cache'\nimport type { CronJob } from './cron/cron-job'\nimport { CronManager } from './cron/cron-manager'\nimport { Container } from './di/container'\nimport { DI_TOKENS } from './di/tokens'\nimport { type StratalEnv } from './env'\nimport { ApplicationError, GlobalErrorHandler } from './errors'\nimport type { EventHandler } from './events'\nimport { EventRegistry, getListenerHandlers } from './events'\nimport type { StratalExecutionContext } from './execution-context'\nimport { I18nModule } from './i18n/i18n.module'\nimport { ConsoleTransport, JsonFormatter, LOGGER_TOKENS, LoggerService, LogLevel, PrettyFormatter } from './logger'\nimport { ModuleRegistry } from './module/module-registry'\nimport type { DynamicModule, ModuleClass } from './module/types'\nimport { OpenAPIModule } from './openapi'\nimport { type ConsumerRegistry } from './queue/consumer-registry'\nimport type { IQueueConsumer, QueueMessage } from './queue/queue-consumer'\nimport { type QueueManager } from './queue/queue-manager'\nimport { QueueModule } from './queue/queue.module'\nimport { type IController, type RouterContext } from './router'\nimport { HonoApp } from './router/hono-app'\nimport type { VersioningOptions } from './router/types'\nimport type { Constructor } from './types'\n\nexport interface ApplicationConfig {\n /** Root application module */\n module: ModuleClass | DynamicModule\n /** Logging configuration. Defaults: level=INFO, formatter='json' */\n logging?: {\n level?: LogLevel\n formatter?: 'json' | 'pretty'\n }\n /**\n * API versioning configuration.\n * When provided, enables URI-based versioning for controllers.\n */\n versioning?: VersioningOptions\n}\n\nexport interface ApplicationOptions extends ApplicationConfig {\n env: StratalEnv\n ctx: StratalExecutionContext\n}\n\n/**\n * Application\n *\n * Main application class managing the two-tier container hierarchy:\n * - Global Container: All services (singletons via tsyringe native)\n * - Request Container: Child of global, context-enriched instances per request\n *\n * @example\n * ```typescript\n * const app = new Application({ module: AppModule, env, ctx })\n * await app.initialize()\n *\n * // Access container via getter\n * const service = app.container.resolve(MY_TOKEN)\n *\n * // Handle HTTP request (via HonoApp)\n * // Handle queue batch\n * await app.handleQueue(batch, 'my-queue')\n * ```\n */\nexport class Application {\n /**\n * Unified Container - manages all DI operations\n */\n private _container: Container\n\n private honoApp!: HonoApp\n private moduleRegistry: ModuleRegistry\n private consumerRegistry!: ConsumerRegistry\n private cronManager!: CronManager\n private initialized = false\n\n readonly env: StratalEnv\n private readonly appConfig: ApplicationConfig\n\n constructor({ env, ctx, ...config }: ApplicationOptions) {\n this.env = env\n this.appConfig = config\n\n ApplicationError.captureStackTraces = env.ENVIRONMENT !== 'production'\n\n // Create unified Container with explicit child container\n this._container = new Container({\n container: tsyringeRootContainer.createChildContainer()\n })\n\n // Register globally — env and ctx always available\n this._container.registerValue(DI_TOKENS.Application, this)\n this._container.registerValue(DI_TOKENS.CloudflareEnv, env)\n this._container.registerValue(DI_TOKENS.ExecutionContext, ctx)\n\n // Register core infrastructure inline\n this.registerLoggerService()\n this.registerCoreServices()\n\n // Create ModuleRegistry with our Container\n const logger = this._container.resolve<LoggerService>(LOGGER_TOKENS.LoggerService)\n this.moduleRegistry = new ModuleRegistry(this._container, logger)\n\n // Register ModuleRegistry in container so modules can access it in onInitialize\n this._container.registerValue(DI_TOKENS.ModuleRegistry, this.moduleRegistry)\n }\n\n /**\n * Get the Container instance\n */\n get container(): Container {\n return this._container\n }\n\n /**\n * Get the HonoApp instance\n */\n get hono(): HonoApp {\n return this.honoApp\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) {\n return\n }\n\n // Phase 1: Register core infrastructure modules (internal)\n this.moduleRegistry.registerAll([\n I18nModule,\n OpenAPIModule,\n QueueModule,\n CacheModule,\n ])\n\n // Phase 2: Register user's root module (traverses imports)\n this.moduleRegistry.register(this.appConfig.module)\n\n // Phase 3: Initialize all modules\n await this.moduleRegistry.initialize()\n\n // Phase 4: Resolve managers from container\n this.consumerRegistry = this._container.resolve<ConsumerRegistry>(DI_TOKENS.ConsumerRegistry)\n this.cronManager = this._container.resolve<CronManager>(DI_TOKENS.Cron)\n\n // Phase 5: Create & configure HonoApp\n const logger = this._container.resolve<LoggerService>(LOGGER_TOKENS.LoggerService)\n this.honoApp = new HonoApp(this._container, logger)\n const middlewareConfigs = this.moduleRegistry.getAllMiddlewareConfigs()\n const controllers = this.moduleRegistry.getAllControllers() as Constructor<IController>[]\n await this.honoApp.configure(middlewareConfigs, controllers, this.appConfig.versioning)\n\n // Phase 6: Configure queues, cron, events\n this.registerQueueConsumers()\n this.registerCronJobs()\n this.registerEventListeners()\n\n this.initialized = true\n }\n\n /**\n * Resolve a service from the container\n */\n resolve<T>(token: symbol): T {\n try {\n return this._container.resolve(token)\n } catch (error) {\n const errorHandler = this._container.resolve<GlobalErrorHandler>(DI_TOKENS.ErrorHandler)\n const errorResponse = errorHandler.handle(error)\n throw errorResponse as unknown as Error\n }\n }\n\n /**\n * Handle queue batch processing\n */\n async handleQueue(batch: MessageBatch, queueName: string): Promise<void> {\n const firstMessage = batch.messages[0]?.body as QueueMessage | undefined\n const locale = firstMessage?.metadata?.locale ?? 'en'\n const mockRouterContext = this.createMockRouterContext(locale)\n\n await this._container.runInRequestScope(mockRouterContext, async (requestContainer) => {\n try {\n const queueManager = requestContainer.resolve<QueueManager>(DI_TOKENS.Queue)\n await queueManager.processBatch(queueName, batch)\n } catch (error) {\n const errorHandler = requestContainer.resolve<GlobalErrorHandler>(DI_TOKENS.ErrorHandler)\n errorHandler.handle(error)\n throw error\n }\n })\n }\n\n /**\n * Handle scheduled cron trigger\n */\n async handleScheduled(controller: ScheduledController): Promise<void> {\n const mockRouterContext = this.createMockRouterContext('en')\n\n await this._container.runInRequestScope(mockRouterContext, async (requestContainer) => {\n try {\n await this.cronManager.executeScheduled(controller)\n } catch (error) {\n const errorHandler = requestContainer.resolve<GlobalErrorHandler>(DI_TOKENS.ErrorHandler)\n errorHandler.handle(error)\n throw error\n }\n })\n }\n\n /**\n * Create mock RouterContext for queue/cron/seeder processing\n */\n createMockRouterContext(locale = 'en'): RouterContext {\n return {\n getLocale: () => locale,\n setLocale: () => { /* no-op */ },\n getContainer: () => this._container,\n } as unknown as RouterContext\n }\n\n async shutdown(): Promise<void> {\n if (!this.initialized) return\n this.initialized = false\n\n await this.moduleRegistry.shutdown()\n\n const logger = this._container.resolve<LoggerService>(LOGGER_TOKENS.LoggerService)\n logger.info('Disposing container...')\n\n await this._container.dispose()\n }\n\n private registerQueueConsumers(): void {\n for (const ConsumerClass of this.moduleRegistry.getAllConsumers()) {\n const consumer = this._container.resolve(ConsumerClass) as IQueueConsumer\n this.consumerRegistry.register(consumer)\n }\n }\n\n private registerCronJobs(): void {\n for (const JobClass of this.moduleRegistry.getAllJobs()) {\n const job = this._container.resolve(JobClass) as CronJob\n this.cronManager.registerJob(job)\n }\n }\n\n /**\n * Auto-wire `@Listener()` classes with the EventRegistry.\n */\n private registerEventListeners(): void {\n const listeners = this.moduleRegistry.getAllListeners()\n if (listeners.length === 0) {\n return\n }\n\n const eventRegistry = this._container.resolve<EventRegistry>(DI_TOKENS.EventRegistry)\n\n for (const ListenerClass of listeners) {\n const instance = this._container.resolve(ListenerClass) as Record<string, ((...args: unknown[]) => unknown)>\n const handlers = getListenerHandlers(ListenerClass)\n\n for (const { methodName, event, options } of handlers) {\n eventRegistry.on(event, instance[methodName].bind(instance) as EventHandler, options)\n }\n }\n }\n\n /**\n * Register LoggerService and dependencies\n */\n private registerLoggerService(): void {\n const logLevel = this.appConfig.logging?.level ?? LogLevel.INFO\n const formatter = this.appConfig.logging?.formatter ?? 'json'\n\n this._container.registerValue(LOGGER_TOKENS.LogLevelOptions, logLevel)\n\n this._container\n .when(() => formatter === 'pretty')\n .use(LOGGER_TOKENS.Formatter)\n .give(PrettyFormatter)\n .otherwise(JsonFormatter)\n\n this._container.registerSingleton(LOGGER_TOKENS.ConsoleTransport, ConsoleTransport)\n this._container.registerFactory(LOGGER_TOKENS.Transports, (c) => [c.resolve(LOGGER_TOKENS.ConsoleTransport)])\n this._container.registerSingleton(LOGGER_TOKENS.LoggerService, LoggerService)\n }\n\n /**\n * Register core services with explicit scope\n */\n private registerCoreServices(): void {\n this._container.registerSingleton(DI_TOKENS.Cron, CronManager)\n this._container.register(DI_TOKENS.ErrorHandler, GlobalErrorHandler)\n this._container.registerSingleton(DI_TOKENS.EventRegistry, EventRegistry)\n }\n}\n","import 'reflect-metadata'\n\nimport { Application, type ApplicationConfig } from './application'\nimport type { StratalEnv } from './env'\nimport { StratalNotInitializedError } from './errors'\nimport type { HonoApp } from './router/hono-app'\n\n/**\n * Stratal — Hono-style entry point for Cloudflare Workers.\n *\n * Eagerly bootstraps the Application at construction time, dynamically\n * importing `cloudflare:workers` for env and waitUntil.\n *\n * @example\n * ```typescript\n * import { Stratal } from 'stratal'\n * import { AppModule } from './app.module'\n *\n * export default new Stratal({ module: AppModule })\n * ```\n */\nexport class Stratal<Env extends StratalEnv = StratalEnv> {\n private app: Application | null = null\n private initPromise: Promise<Application>\n\n private static _application: Promise<Application> | null = null\n\n constructor(config: ApplicationConfig) {\n this.fetch = this.fetch.bind(this)\n this.queue = this.queue.bind(this)\n this.scheduled = this.scheduled.bind(this)\n\n this.initPromise = this.prepareApp(config)\n Stratal._application = this.initPromise\n }\n\n async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {\n const app = await this.ensureReady()\n return app.hono.fetch(request, env, ctx)\n }\n\n async queue(batch: MessageBatch): Promise<void> {\n const app = await this.ensureReady()\n return app.handleQueue(batch, batch.queue)\n }\n\n async scheduled(controller: ScheduledController): Promise<void> {\n const app = await this.ensureReady()\n return app.handleScheduled(controller)\n }\n\n get hono(): Promise<HonoApp> {\n return this.initPromise.then(app => app.hono)\n }\n\n async shutdown(): Promise<void> {\n try { this.app = await this.initPromise } catch { /* ignore */ }\n if (this.app) {\n await this.app.shutdown()\n this.app = null\n }\n }\n\n /**\n * @internal\n * Resolves the Application instance from the static singleton.\n * Used by worker base classes (DurableObject, Workflow, WorkerEntrypoint)\n * to access the DI container without going through Cloudflare RPC.\n */\n static resolveApplication(): Promise<Application> {\n if (!Stratal._application) {\n throw new StratalNotInitializedError()\n }\n return Stratal._application\n }\n\n private async ensureReady(): Promise<Application> {\n this.app ??= await this.initPromise;\n return this.app\n }\n\n private async prepareApp(config: ApplicationConfig): Promise<Application> {\n const { env, waitUntil } = await import('cloudflare:workers')\n const app = new Application({ ...config, env: env as Env, ctx: { waitUntil } })\n await app.initialize()\n return app\n }\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ //#region src/types.d.ts
1
2
  /**
2
3
  * Generic type for class constructors
3
4
  *
@@ -12,5 +13,7 @@
12
13
  * ]
13
14
  * ```
14
15
  */
15
- export type Constructor<T extends object = object> = new (...args: any[]) => T;
16
- //# sourceMappingURL=types.d.ts.map
16
+ type Constructor<T extends object = object> = new (...args: any[]) => T;
17
+ //#endregion
18
+ export { Constructor as t };
19
+ //# sourceMappingURL=types-JUIHSW_a.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-JUIHSW_a.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;AAeA;;;;;;;;;;;;;KAAY,WAAA,sCAAiD,IAAA,YAAgB,CAAA"}
@@ -0,0 +1,194 @@
1
+ import { n as __reExport, t as __exportAll } from "./chunk-D1SwGrFN.mjs";
2
+ import { OpenAPIHono, z } from "@hono/zod-openapi";
3
+ import { ZodError } from "zod";
4
+ import { AsyncLocalStorage } from "node:async_hooks";
5
+ //#region src/i18n/validation/validation.error-map.ts
6
+ /**
7
+ * Type guards for narrowing Zod v4 issue types
8
+ */
9
+ function isInvalidType(issue) {
10
+ return issue.code === "invalid_type";
11
+ }
12
+ function isTooBig(issue) {
13
+ return issue.code === "too_big";
14
+ }
15
+ function isTooSmall(issue) {
16
+ return issue.code === "too_small";
17
+ }
18
+ function isInvalidFormat(issue) {
19
+ return issue.code === "invalid_format";
20
+ }
21
+ function isNotMultipleOf(issue) {
22
+ return issue.code === "not_multiple_of";
23
+ }
24
+ function isUnrecognizedKeys(issue) {
25
+ return issue.code === "unrecognized_keys";
26
+ }
27
+ function isInvalidUnion(issue) {
28
+ return issue.code === "invalid_union";
29
+ }
30
+ function isInvalidKey(issue) {
31
+ return issue.code === "invalid_key";
32
+ }
33
+ /**
34
+ * Maps Zod issue codes to zodI18n message keys
35
+ * Adapted for Zod v4's simpler issue code system
36
+ */
37
+ function getMessageKey(issue) {
38
+ if (isInvalidType(issue)) {
39
+ if (issue.input === void 0) return "zodI18n.errors.required";
40
+ return "zodI18n.errors.invalid_type";
41
+ }
42
+ if (isTooSmall(issue)) return `zodI18n.errors.too_small.${issue.origin || "string"}.${issue.exact ? "exact" : issue.inclusive ? "inclusive" : "not_inclusive"}`;
43
+ if (isTooBig(issue)) return `zodI18n.errors.too_big.${issue.origin || "string"}.${issue.exact ? "exact" : issue.inclusive ? "inclusive" : "not_inclusive"}`;
44
+ if (isInvalidFormat(issue)) return `zodI18n.errors.invalid_string.${issue.format}`;
45
+ if (isNotMultipleOf(issue)) return "zodI18n.errors.not_multiple_of";
46
+ if (isUnrecognizedKeys(issue)) return "zodI18n.errors.unrecognized_keys";
47
+ if (isInvalidUnion(issue)) return "zodI18n.errors.invalid_union";
48
+ if (isInvalidKey(issue)) return "zodI18n.errors.invalid_enum_value";
49
+ return "zodI18n.errors.custom.default";
50
+ }
51
+ /**
52
+ * Extracts interpolation parameters from Zod issue
53
+ * Uses proper type narrowing for v4
54
+ */
55
+ function getMessageParams(issue) {
56
+ const params = {};
57
+ if (isInvalidType(issue)) {
58
+ params.expected = issue.expected;
59
+ params.received = String(issue.input);
60
+ return params;
61
+ }
62
+ if (isUnrecognizedKeys(issue)) {
63
+ params.keys = issue.keys.join(", ");
64
+ return params;
65
+ }
66
+ if (isInvalidKey(issue)) return params;
67
+ if (isInvalidFormat(issue)) {
68
+ params.validation = issue.format;
69
+ if ("prefix" in issue) params.startsWith = issue.prefix;
70
+ if ("suffix" in issue) params.endsWith = issue.suffix;
71
+ if ("includes" in issue) params.includes = issue.includes;
72
+ if (issue.pattern) params.pattern = issue.pattern;
73
+ return params;
74
+ }
75
+ if (isTooSmall(issue)) {
76
+ params.minimum = issue.minimum;
77
+ params.type = issue.origin;
78
+ if (issue.origin === "date") params.minimum = new Date(Number(issue.minimum)).toLocaleDateString();
79
+ return params;
80
+ }
81
+ if (isTooBig(issue)) {
82
+ params.maximum = issue.maximum;
83
+ params.type = issue.origin;
84
+ if (issue.origin === "date") params.maximum = new Date(Number(issue.maximum)).toLocaleDateString();
85
+ return params;
86
+ }
87
+ if (isNotMultipleOf(issue)) {
88
+ params.multipleOf = issue.divisor;
89
+ return params;
90
+ }
91
+ return params;
92
+ }
93
+ /**
94
+ * Creates a Zod error map that uses i18n for translation
95
+ * Uses Zod v4 native $ZodErrorMap signature (no ctx parameter)
96
+ */
97
+ function createI18nErrorMap(getContext) {
98
+ return (issue) => {
99
+ const messageKey = getMessageKey(issue);
100
+ const messageParams = getMessageParams(issue);
101
+ const context = getContext();
102
+ if (!context) return { message: "Invalid input" };
103
+ return { message: context.t(messageKey, messageParams) };
104
+ };
105
+ }
106
+ //#endregion
107
+ //#region src/i18n/validation/validation.context.ts
108
+ /**
109
+ * AsyncLocalStorage for storing request-scoped ErrorMapContext
110
+ * Allows error map to access I18nService without passing through function calls
111
+ */
112
+ const errorMapContextStorage = new AsyncLocalStorage();
113
+ /**
114
+ * Gets the current error map context from AsyncLocalStorage
115
+ */
116
+ function getErrorMapContext() {
117
+ return errorMapContextStorage.getStore();
118
+ }
119
+ /**
120
+ * Backend error map that accesses I18nService from AsyncLocalStorage
121
+ * Must be initialized in router middleware after locale detection
122
+ */
123
+ const backendErrorMap = createI18nErrorMap(getErrorMapContext);
124
+ /**
125
+ * Runs a function within an error map context
126
+ * Used by router middleware to provide I18nService to validation
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * router.use('*', async (c, next) => {
131
+ * const i18nService = c.get('i18nService')
132
+ * const locale = c.get('locale')
133
+ *
134
+ * return runWithErrorMapContext(
135
+ * {
136
+ * t: (key, params) => i18nService.t(key, params),
137
+ * locale,
138
+ * },
139
+ * () => next()
140
+ * )
141
+ * })
142
+ * ```
143
+ */
144
+ function runWithErrorMapContext(context, fn) {
145
+ return errorMapContextStorage.run(context, fn);
146
+ }
147
+ //#endregion
148
+ //#region src/i18n/validation/with-i18n.ts
149
+ /**
150
+ * Type-safe helper for creating custom Zod error messages with i18n support (Backend)
151
+ *
152
+ * Usage with .refine():
153
+ * ```typescript
154
+ * const schema = z.string().refine(
155
+ * (val) => val.length > 5,
156
+ * withI18n('validation.minLength', { min: 5 })
157
+ * )
158
+ * ```
159
+ *
160
+ * Usage with built-in validators:
161
+ * ```typescript
162
+ * const schema = z.string().min(5, withI18n('validation.minLength', { min: 5 }))
163
+ * const schema = z.string().email(withI18n('validation.email'))
164
+ * ```
165
+ *
166
+ * Note: This is the backend version using AsyncLocalStorage.
167
+ * For frontend, use withI18nFrontend from the frontend validation module
168
+ *
169
+ * @param key - Message key from shared i18n messages (type-safe via MessageKeys)
170
+ * @param params - Optional interpolation parameters for the message
171
+ * @returns Zod error configuration object with translated message
172
+ */
173
+ function withI18n(key, params) {
174
+ return { error: () => {
175
+ const context = errorMapContextStorage.getStore();
176
+ return context ? context.t(key, params) : "Invalid input";
177
+ } };
178
+ }
179
+ //#endregion
180
+ //#region src/i18n/validation/index.ts
181
+ var validation_exports = /* @__PURE__ */ __exportAll({
182
+ OpenAPIHono: () => OpenAPIHono,
183
+ ZodError: () => ZodError,
184
+ backendErrorMap: () => backendErrorMap,
185
+ runWithErrorMapContext: () => runWithErrorMapContext,
186
+ withI18n: () => withI18n,
187
+ z: () => z
188
+ });
189
+ import * as import__hono_zod_openapi from "@hono/zod-openapi";
190
+ __reExport(validation_exports, import__hono_zod_openapi);
191
+ //#endregion
192
+ export { withI18n as a, z as i, ZodError as n, backendErrorMap as o, validation_exports as r, runWithErrorMapContext as s, OpenAPIHono as t };
193
+
194
+ //# sourceMappingURL=validation-DA5nptIp.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-DA5nptIp.mjs","names":[],"sources":["../src/i18n/validation/validation.error-map.ts","../src/i18n/validation/validation.context.ts","../src/i18n/validation/with-i18n.ts","../src/i18n/validation/index.ts"],"sourcesContent":["import type {\n $ZodErrorMap,\n $ZodIssueInvalidKey,\n $ZodIssueInvalidStringFormat,\n $ZodIssueInvalidType,\n $ZodIssueInvalidUnion,\n $ZodIssueNotMultipleOf,\n $ZodIssueTooBig,\n $ZodIssueTooSmall,\n $ZodIssueUnrecognizedKeys,\n $ZodRawIssue,\n} from 'zod/v4/core'\nimport type { MessageKeys } from '../i18n.types'\nimport type { ErrorMapContext } from './validation.types'\n\n/**\n * Type guards for narrowing Zod v4 issue types\n */\nfunction isInvalidType(issue: $ZodRawIssue): issue is $ZodRawIssue<$ZodIssueInvalidType> {\n return issue.code === 'invalid_type'\n}\n\nfunction isTooBig(issue: $ZodRawIssue): issue is $ZodRawIssue<$ZodIssueTooBig> {\n return issue.code === 'too_big'\n}\n\nfunction isTooSmall(issue: $ZodRawIssue): issue is $ZodRawIssue<$ZodIssueTooSmall> {\n return issue.code === 'too_small'\n}\n\nfunction isInvalidFormat(issue: $ZodRawIssue): issue is $ZodRawIssue<$ZodIssueInvalidStringFormat> {\n return issue.code === 'invalid_format'\n}\n\nfunction isNotMultipleOf(issue: $ZodRawIssue): issue is $ZodRawIssue<$ZodIssueNotMultipleOf> {\n return issue.code === 'not_multiple_of'\n}\n\nfunction isUnrecognizedKeys(issue: $ZodRawIssue): issue is $ZodRawIssue<$ZodIssueUnrecognizedKeys> {\n return issue.code === 'unrecognized_keys'\n}\n\nfunction isInvalidUnion(issue: $ZodRawIssue): issue is $ZodRawIssue<$ZodIssueInvalidUnion> {\n return issue.code === 'invalid_union'\n}\n\nfunction isInvalidKey(issue: $ZodRawIssue): issue is $ZodRawIssue<$ZodIssueInvalidKey> {\n return issue.code === 'invalid_key'\n}\n\n/**\n * Maps Zod issue codes to zodI18n message keys\n * Adapted for Zod v4's simpler issue code system\n */\nfunction getMessageKey(issue: $ZodRawIssue): MessageKeys {\n if (isInvalidType(issue)) {\n if (issue.input === undefined) {\n return 'zodI18n.errors.required'\n }\n return 'zodI18n.errors.invalid_type'\n }\n\n if (isTooSmall(issue)) {\n const typeKey = issue.origin || 'string'\n const exactKey = issue.exact\n ? 'exact'\n : issue.inclusive\n ? 'inclusive'\n : 'not_inclusive'\n return `zodI18n.errors.too_small.${typeKey}.${exactKey}` as MessageKeys\n }\n\n if (isTooBig(issue)) {\n const typeKey = issue.origin || 'string'\n const exactKey = issue.exact\n ? 'exact'\n : issue.inclusive\n ? 'inclusive'\n : 'not_inclusive'\n return `zodI18n.errors.too_big.${typeKey}.${exactKey}` as MessageKeys\n }\n\n if (isInvalidFormat(issue)) {\n // Map v4's format to v3-style validation keys\n return `zodI18n.errors.invalid_string.${issue.format}` as MessageKeys\n }\n\n if (isNotMultipleOf(issue)) {\n return 'zodI18n.errors.not_multiple_of'\n }\n\n if (isUnrecognizedKeys(issue)) {\n return 'zodI18n.errors.unrecognized_keys'\n }\n\n if (isInvalidUnion(issue)) {\n return 'zodI18n.errors.invalid_union'\n }\n\n if (isInvalidKey(issue)) {\n // v4: Replaces invalid_enum_value, invalid_literal\n return 'zodI18n.errors.invalid_enum_value'\n }\n\n // invalid_element, invalid_value, or unknown codes\n return 'zodI18n.errors.custom.default'\n}\n\n/**\n * Extracts interpolation parameters from Zod issue\n * Uses proper type narrowing for v4\n */\nfunction getMessageParams(issue: $ZodRawIssue): Record<string, unknown> {\n const params: Record<string, unknown> = {}\n\n if (isInvalidType(issue)) {\n params.expected = issue.expected\n params.received = String(issue.input)\n return params\n }\n\n if (isUnrecognizedKeys(issue)) {\n params.keys = issue.keys.join(', ')\n return params\n }\n\n if (isInvalidKey(issue)) {\n // v4: For enums and records\n // Since v4 doesn't have options field, we'll use generic message\n return params\n }\n\n if (isInvalidFormat(issue)) {\n params.validation = issue.format\n\n // Check for specific string format issues with additional fields\n if ('prefix' in issue) {\n params.startsWith = (issue as { prefix?: string }).prefix\n }\n if ('suffix' in issue) {\n params.endsWith = (issue as { suffix?: string }).suffix\n }\n if ('includes' in issue) {\n params.includes = (issue as { includes?: string }).includes\n }\n if (issue.pattern) {\n params.pattern = issue.pattern\n }\n\n return params\n }\n\n if (isTooSmall(issue)) {\n params.minimum = issue.minimum\n params.type = issue.origin\n if (issue.origin === 'date') {\n params.minimum = new Date(Number(issue.minimum)).toLocaleDateString()\n }\n return params\n }\n\n if (isTooBig(issue)) {\n params.maximum = issue.maximum\n params.type = issue.origin\n if (issue.origin === 'date') {\n params.maximum = new Date(Number(issue.maximum)).toLocaleDateString()\n }\n return params\n }\n\n if (isNotMultipleOf(issue)) {\n params.multipleOf = issue.divisor\n return params\n }\n\n return params\n}\n\n/**\n * Creates a Zod error map that uses i18n for translation\n * Uses Zod v4 native $ZodErrorMap signature (no ctx parameter)\n */\nexport function createI18nErrorMap(getContext: () => ErrorMapContext | undefined): $ZodErrorMap {\n return (issue: $ZodRawIssue): { message: string } => {\n // Get message key and params for this issue\n const messageKey = getMessageKey(issue)\n const messageParams = getMessageParams(issue)\n\n // Get translation context\n const context = getContext()\n\n if (!context) {\n // Fallback: Use English messages directly\n // This handles config validation at startup, tests, etc.\n return { message: 'Invalid input' }\n }\n\n // Normal flow: Use context-aware i18n (respects user locale)\n return {\n message: context.t(messageKey, messageParams),\n }\n }\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\nimport type { ErrorMapContext } from './validation.types'\nimport { createI18nErrorMap } from './validation.error-map'\n\n/**\n * AsyncLocalStorage for storing request-scoped ErrorMapContext\n * Allows error map to access I18nService without passing through function calls\n */\nexport const errorMapContextStorage = new AsyncLocalStorage<ErrorMapContext>()\n\n/**\n * Gets the current error map context from AsyncLocalStorage\n */\nfunction getErrorMapContext(): ErrorMapContext | undefined {\n return errorMapContextStorage.getStore()\n}\n\n/**\n * Backend error map that accesses I18nService from AsyncLocalStorage\n * Must be initialized in router middleware after locale detection\n */\nexport const backendErrorMap = createI18nErrorMap(getErrorMapContext)\n\n/**\n * Runs a function within an error map context\n * Used by router middleware to provide I18nService to validation\n *\n * @example\n * ```typescript\n * router.use('*', async (c, next) => {\n * const i18nService = c.get('i18nService')\n * const locale = c.get('locale')\n *\n * return runWithErrorMapContext(\n * {\n * t: (key, params) => i18nService.t(key, params),\n * locale,\n * },\n * () => next()\n * )\n * })\n * ```\n */\nexport function runWithErrorMapContext<T>(\n context: ErrorMapContext,\n fn: () => T\n): T {\n return errorMapContextStorage.run(context, fn)\n}\n","import type { MessageKeys } from '../i18n.types'\nimport { errorMapContextStorage } from './validation.context'\n\n/**\n * Type-safe helper for creating custom Zod error messages with i18n support (Backend)\n *\n * Usage with .refine():\n * ```typescript\n * const schema = z.string().refine(\n * (val) => val.length > 5,\n * withI18n('validation.minLength', { min: 5 })\n * )\n * ```\n *\n * Usage with built-in validators:\n * ```typescript\n * const schema = z.string().min(5, withI18n('validation.minLength', { min: 5 }))\n * const schema = z.string().email(withI18n('validation.email'))\n * ```\n *\n * Note: This is the backend version using AsyncLocalStorage.\n * For frontend, use withI18nFrontend from the frontend validation module\n *\n * @param key - Message key from shared i18n messages (type-safe via MessageKeys)\n * @param params - Optional interpolation parameters for the message\n * @returns Zod error configuration object with translated message\n */\nexport function withI18n(\n key: MessageKeys,\n params?: Record<string, unknown>\n): { error: () => string } {\n return {\n error: () => {\n // Get i18n context from AsyncLocalStorage (backend)\n // This is set by the router middleware before validation\n const context = errorMapContextStorage.getStore()\n\n // Translate using context if available, otherwise fallback to generic message\n const message = context\n ? context.t(key, params as Record<string, string | number> | undefined)\n : 'Invalid input'\n\n return message\n },\n }\n}\n","// Consolidated zod - single source from @hono/zod-openapi (superset of zod)\nexport { OpenAPIHono, z } from '@hono/zod-openapi'\nexport type * from 'zod'\nexport { ZodError } from 'zod'\n\n// OpenAPI utilities\nexport * from '@hono/zod-openapi'\nexport type { OpenAPIObject, PathItemObject } from 'openapi3-ts/oas30'\n\n// Helpers\nexport { withI18n } from './with-i18n'\n\n// Backend utilities\nexport { backendErrorMap, runWithErrorMapContext } from './validation.context'\n\n// Types\nexport type { ErrorMapContext, I18nErrorMetadata, LocaleProvider, ZodCustomIssue } from './validation.types'\n\n"],"mappings":"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"}