stratal 0.0.22 → 0.0.23

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 (270) hide show
  1. package/README.md +1 -1
  2. package/dist/bin/cloudflare-workers-loader.mjs +80 -7
  3. package/dist/bin/cloudflare-workers-loader.mjs.map +1 -1
  4. package/dist/bin/quarry.mjs +41 -54
  5. package/dist/bin/quarry.mjs.map +1 -1
  6. package/dist/cache/index.d.mts +5 -3
  7. package/dist/cache/index.d.mts.map +1 -1
  8. package/dist/cache/index.mjs +123 -39
  9. package/dist/cache/index.mjs.map +1 -1
  10. package/dist/{cache.service-e34gV6tz.d.mts → cache.service-uElmBtdS.d.mts} +24 -34
  11. package/dist/cache.service-uElmBtdS.d.mts.map +1 -0
  12. package/dist/{command-BU4ApTo5.mjs → command-BvmUAPPQ.mjs} +15 -3
  13. package/dist/command-BvmUAPPQ.mjs.map +1 -0
  14. package/dist/{command-wXfvHbBZ.d.mts → command-CPhFHjG3.d.mts} +2 -2
  15. package/dist/command-CPhFHjG3.d.mts.map +1 -0
  16. package/dist/command-not-found.error-ONAZ2Bpk.mjs +14 -0
  17. package/dist/command-not-found.error-ONAZ2Bpk.mjs.map +1 -0
  18. package/dist/config/index.d.mts +3 -3
  19. package/dist/config/index.d.mts.map +1 -1
  20. package/dist/config/index.mjs +7 -6
  21. package/dist/config/index.mjs.map +1 -1
  22. package/dist/{consumer-registry-DHQtypr1.d.mts → consumer-registry-D3iMTSdy.d.mts} +54 -22
  23. package/dist/consumer-registry-D3iMTSdy.d.mts.map +1 -0
  24. package/dist/{container-storage-GpNNz79X.mjs → container-storage-BmOJ4_Na.mjs} +1 -1
  25. package/dist/{container-storage-GpNNz79X.mjs.map → container-storage-BmOJ4_Na.mjs.map} +1 -1
  26. package/dist/{controller.decorator-DIUazNU7.mjs → controller.decorator-C5UVeJS3.mjs} +4 -4
  27. package/dist/{controller.decorator-DIUazNU7.mjs.map → controller.decorator-C5UVeJS3.mjs.map} +1 -1
  28. package/dist/cron/index.d.mts +79 -4
  29. package/dist/cron/index.d.mts.map +1 -1
  30. package/dist/cron/index.mjs +2 -2
  31. package/dist/cron-job-NesZRk8F.d.mts +58 -0
  32. package/dist/cron-job-NesZRk8F.d.mts.map +1 -0
  33. package/dist/{cron-manager-9bpN9bu4.mjs → cron.module-Bgzq5hiT.mjs} +17 -7
  34. package/dist/cron.module-Bgzq5hiT.mjs.map +1 -0
  35. package/dist/{decorate-HgTKAYK8.mjs → decorate-CuAoSZvs.mjs} +2 -2
  36. package/dist/{deep-merge-C8NgcXw4.mjs → deep-merge-ByiAOZ3r.mjs} +1 -1
  37. package/dist/{deep-merge-C8NgcXw4.mjs.map → deep-merge-ByiAOZ3r.mjs.map} +1 -1
  38. package/dist/di/index.d.mts +2 -2
  39. package/dist/di/index.mjs +3 -3
  40. package/dist/{di-BO1QIb5H.mjs → di-DseMn-z9.mjs} +244 -135
  41. package/dist/di-DseMn-z9.mjs.map +1 -0
  42. package/dist/email/index.d.mts +33 -40
  43. package/dist/email/index.d.mts.map +1 -1
  44. package/dist/email/index.mjs +456 -41
  45. package/dist/email/index.mjs.map +1 -1
  46. package/dist/{en-BPP6h6y5.mjs → en-CDZBMcc1.mjs} +2 -2
  47. package/dist/{en-BPP6h6y5.mjs.map → en-CDZBMcc1.mjs.map} +1 -1
  48. package/dist/{env-DKSbuBi5.d.mts → env-ug22bJj7.d.mts} +1 -1
  49. package/dist/env-ug22bJj7.d.mts.map +1 -0
  50. package/dist/errors/index.d.mts +1 -1
  51. package/dist/errors/index.mjs +3 -3
  52. package/dist/{errors-BBZTnjdq.mjs → errors-mXYxG0XB.mjs} +5 -5
  53. package/dist/{errors-BBZTnjdq.mjs.map → errors-mXYxG0XB.mjs.map} +1 -1
  54. package/dist/events/index.d.mts +14 -3
  55. package/dist/events/index.d.mts.map +1 -1
  56. package/dist/events/index.mjs +2 -2
  57. package/dist/{events-D1KdDaiP.mjs → events-BXJGZjpG.mjs} +16 -6
  58. package/dist/events-BXJGZjpG.mjs.map +1 -0
  59. package/dist/{exception-context-B4kM-M53.mjs → exception-context-kEoMFwze.mjs} +3 -3
  60. package/dist/{exception-context-B4kM-M53.mjs.map → exception-context-kEoMFwze.mjs.map} +1 -1
  61. package/dist/{gateway-context-CFe6a9gz.mjs → gateway-context-TMu_AlJt.mjs} +25 -6
  62. package/dist/{gateway-context-CFe6a9gz.mjs.map → gateway-context-TMu_AlJt.mjs.map} +1 -1
  63. package/dist/guards/index.d.mts +3 -3
  64. package/dist/guards/index.d.mts.map +1 -1
  65. package/dist/guards/index.mjs +1 -1
  66. package/dist/{guards-Ced-uNIF.mjs → guards-DALPXy3_.mjs} +2 -2
  67. package/dist/{guards-Ced-uNIF.mjs.map → guards-DALPXy3_.mjs.map} +1 -1
  68. package/dist/hono-app-CvV3hOfT.mjs +161 -0
  69. package/dist/hono-app-CvV3hOfT.mjs.map +1 -0
  70. package/dist/{http-method.decorator-CdjKFJZZ.mjs → http-method.decorator-ByWZb9DO.mjs} +4 -4
  71. package/dist/{http-method.decorator-CdjKFJZZ.mjs.map → http-method.decorator-ByWZb9DO.mjs.map} +1 -1
  72. package/dist/i18n/index.d.mts +4 -4
  73. package/dist/i18n/index.d.mts.map +1 -1
  74. package/dist/i18n/index.mjs +5 -5
  75. package/dist/i18n/index.mjs.map +1 -1
  76. package/dist/i18n/messages/en/index.d.mts +1 -1
  77. package/dist/i18n/messages/en/index.mjs +1 -1
  78. package/dist/i18n/utils/index.mjs +1 -1
  79. package/dist/i18n/validation/index.d.mts +3 -3
  80. package/dist/i18n/validation/index.mjs +3 -3
  81. package/dist/{i18n.module-BlXrtAlV.mjs → i18n.module-DRQAZoSZ.mjs} +14 -11
  82. package/dist/{i18n.module-BlXrtAlV.mjs.map → i18n.module-DRQAZoSZ.mjs.map} +1 -1
  83. package/dist/{i18n.tokens-hwRpmjRq.mjs → i18n.tokens-CZ_v8oyS.mjs} +1 -1
  84. package/dist/{i18n.tokens-hwRpmjRq.mjs.map → i18n.tokens-CZ_v8oyS.mjs.map} +1 -1
  85. package/dist/{index-B4UBK-2T.d.mts → index-0ItCjaqw.d.mts} +1 -1
  86. package/dist/index-0ItCjaqw.d.mts.map +1 -0
  87. package/dist/{index-CW1YHSft.d.mts → index-B5JBRcWD.d.mts} +249 -103
  88. package/dist/index-B5JBRcWD.d.mts.map +1 -0
  89. package/dist/{index-BtlE9RuO.d.mts → index-BUt92sAE.d.mts} +1 -1
  90. package/dist/index-BUt92sAE.d.mts.map +1 -0
  91. package/dist/{index-DEncMcC6.d.mts → index-B_JoEl3V.d.mts} +221 -16
  92. package/dist/index-B_JoEl3V.d.mts.map +1 -0
  93. package/dist/{index-Dj5IMwtr.d.mts → index-DtBNIFuP.d.mts} +4 -6
  94. package/dist/index-DtBNIFuP.d.mts.map +1 -0
  95. package/dist/{index-KMgSCSM7.d.mts → index-HgOLNruQ.d.mts} +1 -1
  96. package/dist/{index-KMgSCSM7.d.mts.map → index-HgOLNruQ.d.mts.map} +1 -1
  97. package/dist/index.d.mts +6 -5
  98. package/dist/index.mjs +3 -2
  99. package/dist/{is-command-CX5rAfZW.mjs → is-command-CEPO9n8c.mjs} +2 -2
  100. package/dist/{is-command-CX5rAfZW.mjs.map → is-command-CEPO9n8c.mjs.map} +1 -1
  101. package/dist/{is-seeder-CYCtELlm.mjs → is-seeder-Gvh_AM71.mjs} +1 -1
  102. package/dist/{is-seeder-CYCtELlm.mjs.map → is-seeder-Gvh_AM71.mjs.map} +1 -1
  103. package/dist/lazy-module-loader-Ib383jH_.d.mts +60 -0
  104. package/dist/lazy-module-loader-Ib383jH_.d.mts.map +1 -0
  105. package/dist/locale-path.service-D-dHiIPc.mjs +165 -0
  106. package/dist/locale-path.service-D-dHiIPc.mjs.map +1 -0
  107. package/dist/locale-url-nZrZxqJP.mjs +44 -0
  108. package/dist/locale-url-nZrZxqJP.mjs.map +1 -0
  109. package/dist/locale-url.service-C2EWmGdq.mjs +41 -0
  110. package/dist/locale-url.service-C2EWmGdq.mjs.map +1 -0
  111. package/dist/logger/index.d.mts +1 -1
  112. package/dist/logger/index.mjs +2 -2
  113. package/dist/logger/index.mjs.map +1 -1
  114. package/dist/macroable/index.d.mts +2 -2
  115. package/dist/macroable/index.mjs +1 -1
  116. package/dist/{macroable-DzlfzT50.mjs → macroable-cvDTFZ_A.mjs} +1 -1
  117. package/dist/{macroable-DzlfzT50.mjs.map → macroable-cvDTFZ_A.mjs.map} +1 -1
  118. package/dist/{metadata-BVkc4aUu.mjs → metadata-DzzprcID.mjs} +1 -1
  119. package/dist/{metadata-BVkc4aUu.mjs.map → metadata-DzzprcID.mjs.map} +1 -1
  120. package/dist/module/index.d.mts +4 -3
  121. package/dist/module/index.d.mts.map +1 -1
  122. package/dist/module/index.mjs +10 -2
  123. package/dist/module/index.mjs.map +1 -0
  124. package/dist/{module-xYoHba6B.mjs → module-registry-Dm-pqHd3.mjs} +189 -57
  125. package/dist/module-registry-Dm-pqHd3.mjs.map +1 -0
  126. package/dist/module.decorator-CYHY6pG5.mjs +19 -0
  127. package/dist/module.decorator-CYHY6pG5.mjs.map +1 -0
  128. package/dist/openapi/index.d.mts +44 -8
  129. package/dist/openapi/index.d.mts.map +1 -1
  130. package/dist/openapi/index.mjs +3 -2
  131. package/dist/{openapi-C6lm0RmV.mjs → openapi-CstuTM8S.mjs} +55 -229
  132. package/dist/openapi-CstuTM8S.mjs.map +1 -0
  133. package/dist/openapi-tools.service-BC5EC3R3.mjs +206 -0
  134. package/dist/openapi-tools.service-BC5EC3R3.mjs.map +1 -0
  135. package/dist/{openapi.service-CrLlsXAd.d.mts → openapi.service-YhTiJ1bO.d.mts} +3 -3
  136. package/dist/{openapi.service-CrLlsXAd.d.mts.map → openapi.service-YhTiJ1bO.d.mts.map} +1 -1
  137. package/dist/quarry/index.d.mts +14 -5
  138. package/dist/quarry/index.d.mts.map +1 -1
  139. package/dist/quarry/index.mjs +6 -5
  140. package/dist/quarry/runner.d.mts +11 -11
  141. package/dist/quarry/runner.d.mts.map +1 -1
  142. package/dist/quarry/runner.mjs +192 -22
  143. package/dist/quarry/runner.mjs.map +1 -1
  144. package/dist/{quarry-registry-D4hIGScf.d.mts → quarry-registry-CXg0RFXq.d.mts} +4 -4
  145. package/dist/quarry-registry-CXg0RFXq.d.mts.map +1 -0
  146. package/dist/{quarry-registry-DkraZNwn.mjs → quarry.module-BuRPGMDm.mjs} +22 -21
  147. package/dist/quarry.module-BuRPGMDm.mjs.map +1 -0
  148. package/dist/queue/index.d.mts +3 -3
  149. package/dist/queue/index.mjs +42 -31
  150. package/dist/queue/index.mjs.map +1 -1
  151. package/dist/queue.module-nddvxzCB.mjs +613 -0
  152. package/dist/queue.module-nddvxzCB.mjs.map +1 -0
  153. package/dist/queue.tokens-DjHnFmre.mjs +11 -0
  154. package/dist/queue.tokens-DjHnFmre.mjs.map +1 -0
  155. package/dist/{r2-storage.provider-Hfm6LdZQ.mjs → r2-storage.provider-DCxQt9dD.mjs} +4 -4
  156. package/dist/{r2-storage.provider-Hfm6LdZQ.mjs.map → r2-storage.provider-DCxQt9dD.mjs.map} +1 -1
  157. package/dist/{rate-limit.decorator-D69zdZbp.mjs → rate-limit.decorator-BPAie_p3.mjs} +3 -3
  158. package/dist/{rate-limit.decorator-D69zdZbp.mjs.map → rate-limit.decorator-BPAie_p3.mjs.map} +1 -1
  159. package/dist/rate-limiter/index.d.mts +5 -5
  160. package/dist/rate-limiter/index.d.mts.map +1 -1
  161. package/dist/rate-limiter/index.mjs +26 -21
  162. package/dist/rate-limiter/index.mjs.map +1 -1
  163. package/dist/route-name-DGoBOfPg.mjs +171 -0
  164. package/dist/route-name-DGoBOfPg.mjs.map +1 -0
  165. package/dist/route-registration.service-D6vSwiKP.mjs +918 -0
  166. package/dist/route-registration.service-D6vSwiKP.mjs.map +1 -0
  167. package/dist/route-registry-CYqLp2Nj.mjs +123 -0
  168. package/dist/route-registry-CYqLp2Nj.mjs.map +1 -0
  169. package/dist/router/index.d.mts +2 -2
  170. package/dist/router/index.mjs +18 -8
  171. package/dist/router-CWGBD-Bg.mjs +78 -0
  172. package/dist/router-CWGBD-Bg.mjs.map +1 -0
  173. package/dist/router-resolver-D4YlPNlm.mjs +88 -0
  174. package/dist/router-resolver-D4YlPNlm.mjs.map +1 -0
  175. package/dist/seeder/index.d.mts +14 -4
  176. package/dist/seeder/index.d.mts.map +1 -1
  177. package/dist/seeder/index.mjs +5 -3
  178. package/dist/{seeder-BADTig4n.mjs → seeder-7ubkms-Y.mjs} +7 -56
  179. package/dist/seeder-7ubkms-Y.mjs.map +1 -0
  180. package/dist/seeder-registry-CyUmKsJq.mjs +57 -0
  181. package/dist/seeder-registry-CyUmKsJq.mjs.map +1 -0
  182. package/dist/seeder.module-CYYwk3Qk.mjs +15 -0
  183. package/dist/seeder.module-CYYwk3Qk.mjs.map +1 -0
  184. package/dist/{signed-url-BqUqt5dF.mjs → signed-url-DIU0sK_6.mjs} +1 -1
  185. package/dist/{signed-url-BqUqt5dF.mjs.map → signed-url-DIU0sK_6.mjs.map} +1 -1
  186. package/dist/storage/index.d.mts +3 -3
  187. package/dist/storage/index.d.mts.map +1 -1
  188. package/dist/storage/index.mjs +2 -2
  189. package/dist/storage/providers/index.d.mts +2 -2
  190. package/dist/storage/providers/index.d.mts.map +1 -1
  191. package/dist/storage/providers/index.mjs +1 -1
  192. package/dist/{storage-BA3ppVYM.mjs → storage-MDZypIE9.mjs} +12 -11
  193. package/dist/{storage-BA3ppVYM.mjs.map → storage-MDZypIE9.mjs.map} +1 -1
  194. package/dist/{storage-provider.interface-DQMtT42e.d.mts → storage-provider.interface-ClUwxz4S.d.mts} +2 -2
  195. package/dist/storage-provider.interface-ClUwxz4S.d.mts.map +1 -0
  196. package/dist/storage.error-Dnib4VHc.mjs +8 -0
  197. package/dist/{storage.error-C6FY037a.mjs.map → storage.error-Dnib4VHc.mjs.map} +1 -1
  198. package/dist/{stratal-Bdq4IdB3.mjs → stratal-DL9M38_s.mjs} +142 -140
  199. package/dist/stratal-DL9M38_s.mjs.map +1 -0
  200. package/dist/{stratal-BsKmvP6J.d.mts → stratal-DwDJPY9N.d.mts} +3 -3
  201. package/dist/{stratal-BsKmvP6J.d.mts.map → stratal-DwDJPY9N.d.mts.map} +1 -1
  202. package/dist/tiered-cache.service-Dv3BhxxE.d.mts +79 -0
  203. package/dist/tiered-cache.service-Dv3BhxxE.d.mts.map +1 -0
  204. package/dist/trailing-slash-CFyw8nYu.mjs +34 -0
  205. package/dist/trailing-slash-CFyw8nYu.mjs.map +1 -0
  206. package/dist/{types-BaeHi67f.d.mts → types-CmV_9xBD.d.mts} +1 -1
  207. package/dist/types-CmV_9xBD.d.mts.map +1 -0
  208. package/dist/uri-h7Q8Jug9.mjs +251 -0
  209. package/dist/uri-h7Q8Jug9.mjs.map +1 -0
  210. package/dist/{usage-generator-DTqaUMR9.mjs → usage-generator-DAWYasuP.mjs} +4 -4
  211. package/dist/usage-generator-DAWYasuP.mjs.map +1 -0
  212. package/dist/{validation-DUzcjb8Q.mjs → validation-CpOjviyT.mjs} +6 -6
  213. package/dist/{validation-DUzcjb8Q.mjs.map → validation-CpOjviyT.mjs.map} +1 -1
  214. package/dist/{validation.context-XTysWJ3b.mjs → validation.context-CRvmrhq7.mjs} +3 -3
  215. package/dist/{validation.context-XTysWJ3b.mjs.map → validation.context-CRvmrhq7.mjs.map} +1 -1
  216. package/dist/versioning.service-C6aHky8-.mjs +36 -0
  217. package/dist/versioning.service-C6aHky8-.mjs.map +1 -0
  218. package/dist/websocket/index.d.mts +11 -2
  219. package/dist/websocket/index.d.mts.map +1 -1
  220. package/dist/websocket/index.mjs +1 -1
  221. package/dist/workers/index.d.mts +2 -2
  222. package/dist/workers/index.d.mts.map +1 -1
  223. package/dist/workers/index.mjs +3 -3
  224. package/dist/workers/index.mjs.map +1 -1
  225. package/dist/{zod-hMa3rSHV.mjs → zod-eKqqhZ5_.mjs} +2 -2
  226. package/dist/{zod-hMa3rSHV.mjs.map → zod-eKqqhZ5_.mjs.map} +1 -1
  227. package/dist/{zod-DvWTfRpI.d.mts → zod-wecrEVAs.d.mts} +8 -3
  228. package/dist/zod-wecrEVAs.d.mts.map +1 -0
  229. package/package.json +19 -30
  230. package/dist/base-email.provider-BWZHIjt8.mjs +0 -42
  231. package/dist/base-email.provider-BWZHIjt8.mjs.map +0 -1
  232. package/dist/cache.service-e34gV6tz.d.mts.map +0 -1
  233. package/dist/cache.tokens-ovi_c52J.mjs +0 -6
  234. package/dist/cache.tokens-ovi_c52J.mjs.map +0 -1
  235. package/dist/colors-axmupKdp.mjs +0 -16
  236. package/dist/colors-axmupKdp.mjs.map +0 -1
  237. package/dist/command-BU4ApTo5.mjs.map +0 -1
  238. package/dist/command-wXfvHbBZ.d.mts.map +0 -1
  239. package/dist/consumer-registry-DHQtypr1.d.mts.map +0 -1
  240. package/dist/cron-manager-9bpN9bu4.mjs.map +0 -1
  241. package/dist/cron-manager-CSTIBPcM.d.mts +0 -124
  242. package/dist/cron-manager-CSTIBPcM.d.mts.map +0 -1
  243. package/dist/di-BO1QIb5H.mjs.map +0 -1
  244. package/dist/env-DKSbuBi5.d.mts.map +0 -1
  245. package/dist/events-D1KdDaiP.mjs.map +0 -1
  246. package/dist/index-B4UBK-2T.d.mts.map +0 -1
  247. package/dist/index-BtlE9RuO.d.mts.map +0 -1
  248. package/dist/index-CW1YHSft.d.mts.map +0 -1
  249. package/dist/index-DEncMcC6.d.mts.map +0 -1
  250. package/dist/index-Dj5IMwtr.d.mts.map +0 -1
  251. package/dist/module-xYoHba6B.mjs.map +0 -1
  252. package/dist/openapi-C6lm0RmV.mjs.map +0 -1
  253. package/dist/quarry-registry-D4hIGScf.d.mts.map +0 -1
  254. package/dist/quarry-registry-DkraZNwn.mjs.map +0 -1
  255. package/dist/queue.module-DeWJ0tQM.mjs +0 -355
  256. package/dist/queue.module-DeWJ0tQM.mjs.map +0 -1
  257. package/dist/resend.provider-Ur6tU7fK.mjs +0 -68
  258. package/dist/resend.provider-Ur6tU7fK.mjs.map +0 -1
  259. package/dist/router-Cy6DjkvP.mjs +0 -1852
  260. package/dist/router-Cy6DjkvP.mjs.map +0 -1
  261. package/dist/seeder-BADTig4n.mjs.map +0 -1
  262. package/dist/smtp.provider-C129sNBT.mjs +0 -76
  263. package/dist/smtp.provider-C129sNBT.mjs.map +0 -1
  264. package/dist/storage-provider.interface-DQMtT42e.d.mts.map +0 -1
  265. package/dist/storage.error-C6FY037a.mjs +0 -8
  266. package/dist/stratal-Bdq4IdB3.mjs.map +0 -1
  267. package/dist/types-BaeHi67f.d.mts.map +0 -1
  268. package/dist/usage-generator-DTqaUMR9.mjs.map +0 -1
  269. package/dist/zod-DvWTfRpI.d.mts.map +0 -1
  270. /package/dist/{chunk-D1SwGrFN.mjs → chunk-BBjsoOtd.mjs} +0 -0
@@ -1,2 +1,2 @@
1
- import { a as common, i as emails, n as zodI18n, r as validation } from "../../../en-BPP6h6y5.mjs";
1
+ import { a as common, i as emails, n as zodI18n, r as validation } from "../../../en-CDZBMcc1.mjs";
2
2
  export { common, emails, validation, zodI18n };
@@ -1,2 +1,2 @@
1
- import { t as deepMerge } from "../../deep-merge-C8NgcXw4.mjs";
1
+ import { t as deepMerge } from "../../deep-merge-ByiAOZ3r.mjs";
2
2
  export { deepMerge };
@@ -1,5 +1,5 @@
1
- import { a as z, b as cuid2, c as ZodCustomIssue, i as ZodError, n as OpenAPIObject, r as PathItemObject, s as I18nErrorMetadata, t as OpenAPIHono, y as CUID2_REGEX } from "../../zod-DvWTfRpI.mjs";
2
- import { n as withZodI18n, t as zodErrorMap } from "../../index-Dj5IMwtr.mjs";
1
+ import { a as z, b as CUID2_REGEX, c as ZodCustomIssue, i as ZodError, n as OpenAPIObject, r as PathItemObject, s as I18nErrorMetadata, t as OpenAPIHono, x as cuid2 } from "../../zod-wecrEVAs.mjs";
2
+ import { n as withZodI18n, t as zodErrorMap } from "../../index-DtBNIFuP.mjs";
3
3
  export * from "@hono/zod-openapi";
4
4
  export * from "zod";
5
- export { CUID2_REGEX, I18nErrorMetadata, OpenAPIHono, OpenAPIObject, PathItemObject, ZodCustomIssue, ZodError, cuid2, withZodI18n, z, zodErrorMap };
5
+ export { CUID2_REGEX, type I18nErrorMetadata, OpenAPIHono, type OpenAPIObject, type PathItemObject, type ZodCustomIssue, ZodError, cuid2, withZodI18n, z, zodErrorMap };
@@ -1,5 +1,5 @@
1
- import { a as CUID2_REGEX, n as ZodError, o as cuid2, r as z, t as OpenAPIHono } from "../../zod-hMa3rSHV.mjs";
2
- import { t as zodErrorMap } from "../../validation.context-XTysWJ3b.mjs";
3
- import { t as withZodI18n } from "../../validation-DUzcjb8Q.mjs";
1
+ import { a as CUID2_REGEX, n as ZodError, o as cuid2, r as z, t as OpenAPIHono } from "../../zod-eKqqhZ5_.mjs";
2
+ import { t as withZodI18n } from "../../validation-CpOjviyT.mjs";
3
+ import { t as zodErrorMap } from "../../validation.context-CRvmrhq7.mjs";
4
4
  export * from "@hono/zod-openapi";
5
5
  export { CUID2_REGEX, OpenAPIHono, ZodError, cuid2, withZodI18n, z, zodErrorMap };
@@ -1,12 +1,14 @@
1
- import { l as Request, m as inject, o as ROUTER_TOKENS, u as Singleton } from "./di-BO1QIb5H.mjs";
2
- import { n as __decorateParam, t as __decorate } from "./decorate-HgTKAYK8.mjs";
3
- import { f as Module } from "./module-xYoHba6B.mjs";
4
- import { t as I18N_TOKENS } from "./i18n.tokens-hwRpmjRq.mjs";
5
- import { r as z } from "./zod-hMa3rSHV.mjs";
6
- import "./router-Cy6DjkvP.mjs";
7
- import { t as en_exports } from "./en-BPP6h6y5.mjs";
8
- import { t as deepMerge } from "./deep-merge-C8NgcXw4.mjs";
9
- import { t as zodErrorMap } from "./validation.context-XTysWJ3b.mjs";
1
+ import { t as __exportAll } from "./chunk-BBjsoOtd.mjs";
2
+ import { d as inject, o as Request, s as Singleton, v as ROUTER_TOKENS } from "./di-DseMn-z9.mjs";
3
+ import { n as __decorateParam, t as __decorate } from "./decorate-CuAoSZvs.mjs";
4
+ import { n as Module } from "./module.decorator-CYHY6pG5.mjs";
5
+ import "./module/index.mjs";
6
+ import { t as I18N_TOKENS } from "./i18n.tokens-CZ_v8oyS.mjs";
7
+ import { r as z } from "./zod-eKqqhZ5_.mjs";
8
+ import { t as zodErrorMap } from "./validation.context-CRvmrhq7.mjs";
9
+ import "./router-CWGBD-Bg.mjs";
10
+ import { t as en_exports } from "./en-CDZBMcc1.mjs";
11
+ import { t as deepMerge } from "./deep-merge-ByiAOZ3r.mjs";
10
12
  import IntlMessageFormat from "intl-messageformat";
11
13
  //#region src/i18n/services/i18n.service.ts
12
14
  let I18nService = class I18nService {
@@ -177,6 +179,7 @@ let MessageRegistry = class MessageRegistry {
177
179
  MessageRegistry = __decorate([Singleton(I18N_TOKENS.MessageRegistry)], MessageRegistry);
178
180
  //#endregion
179
181
  //#region src/i18n/i18n.module.ts
182
+ var i18n_module_exports = /* @__PURE__ */ __exportAll({ I18nModule: () => I18nModule });
180
183
  var _I18nModule;
181
184
  let I18nModule = _I18nModule = class I18nModule {
182
185
  onInitialize(_context) {
@@ -214,6 +217,6 @@ I18nModule = _I18nModule = __decorate([Module({ providers: [
214
217
  }
215
218
  ] })], I18nModule);
216
219
  //#endregion
217
- export { getMessages as a, getLocales as i, MessageRegistry as n, messages as o, MessageLoaderService as r, I18nModule as t };
220
+ export { getLocales as a, MessageLoaderService as i, i18n_module_exports as n, getMessages as o, MessageRegistry as r, messages as s, I18nModule as t };
218
221
 
219
- //# sourceMappingURL=i18n.module-BlXrtAlV.mjs.map
222
+ //# sourceMappingURL=i18n.module-DRQAZoSZ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.module-BlXrtAlV.mjs","names":[],"sources":["../src/i18n/services/i18n.service.ts","../src/i18n/messages/index.ts","../src/i18n/services/message-loader.service.ts","../src/i18n/services/message-registry.ts","../src/i18n/i18n.module.ts"],"sourcesContent":["import { inject } from '../../di'\nimport { Request } from '../../di/decorators'\nimport { ROUTER_TOKENS, type RouterContext } from '../../router'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport type { II18nService, MessageKeys, MessageParams } from '../i18n.types'\nimport type { MessageLoaderService } from './message-loader.service'\n\n@Request(I18N_TOKENS.I18nService)\nexport class I18nService implements II18nService {\n constructor(\n @inject(I18N_TOKENS.MessageLoader) private readonly loader: MessageLoaderService,\n @inject(ROUTER_TOKENS.RouterContext, { isOptional: true }) private readonly routerContext?: RouterContext\n ) {\n }\n\n t(key: MessageKeys, params?: MessageParams): string {\n return this.loader.translate(this.getLocale(), key, params as Record<string, unknown>)\n }\n\n getLocale(): string {\n return this.routerContext?.getLocale() ?? 'en'\n }\n}\n","/**\n * Core Messages\n *\n * Messages used by packages/modules infrastructure.\n * These are automatically merged with application-specific messages.\n */\n\nimport * as en from './en'\n\n/**\n * All locale messages\n * Explicitly import and export (no filesystem scanning - Cloudflare Workers compatible)\n */\nexport const messages = { en } as const\n\n/**\n * Type for all messages\n */\nexport type Messages = typeof messages\n\n/**\n * Get messages for all locales\n */\nexport function getMessages(): Record<string, Record<string, unknown>> {\n return messages\n}\n\n/**\n * Get available locales\n */\nexport function getLocales(): string[] {\n return Object.keys(messages)\n}\n","import IntlMessageFormat from 'intl-messageformat'\nimport { inject } from '../../di'\nimport { Singleton } from '../../di/decorators'\nimport type { I18nModuleOptions } from '../i18n.options'\nimport type { MessageKeyPrefix } from '../i18n.types'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport { getLocales, getMessages } from '../messages'\nimport { deepMerge } from '../utils/deep-merge'\nimport type { MessageRegistry } from './message-registry'\n\ntype CompiledMessages = Record<string, (params?: Record<string, unknown>) => string>\n\n@Singleton(I18N_TOKENS.MessageLoader)\nexport class MessageLoaderService {\n private readonly cache: Map<string, Record<string, unknown>>\n private readonly compiledCache: Map<string, CompiledMessages>\n private readonly locales: string[]\n private readonly defaultLocale: string\n\n constructor(\n @inject(I18N_TOKENS.MessageRegistry) private readonly registry: MessageRegistry,\n @inject(I18N_TOKENS.Options, { isOptional: true })\n private readonly options?: I18nModuleOptions\n ) {\n this.defaultLocale = this.options?.defaultLocale ?? 'en'\n this.cache = new Map()\n this.compiledCache = new Map()\n\n const coreMessages = getMessages()\n const coreLocales = getLocales()\n\n const registryMessages = this.registry.getMergedMessages()\n const registryLocales = Object.keys(registryMessages)\n\n const allLocales = [...new Set([...coreLocales, ...registryLocales])]\n this.locales = allLocales\n\n for (const locale of allLocales) {\n const coreLocaleMessages = coreMessages[locale] ?? {}\n const registryLocaleMessages = registryMessages[locale] ?? {}\n\n const merged = deepMerge(coreLocaleMessages, registryLocaleMessages)\n this.cache.set(locale, merged)\n }\n }\n\n translate(locale: string, key: string, params?: Record<string, unknown>): string {\n const compiled = this.getCompiledMessages(locale)\n const fn = compiled[key]\n if (!fn) return key\n return fn(params)\n }\n\n getMessages(locale: string): Record<string, unknown> {\n return this.cache.get(locale) ?? this.cache.get(this.defaultLocale) ?? {}\n }\n\n getAvailableLocales(): string[] {\n return this.locales\n }\n\n isLocaleSupported(locale: string): boolean {\n return this.cache.has(locale)\n }\n\n getDefaultLocale(): string {\n return this.defaultLocale\n }\n\n getFilteredMessages(\n locale: string,\n options?: { only?: MessageKeyPrefix[] }\n ): Record<string, string> {\n const messages = this.getMessages(locale)\n const flattened = this.flattenMessages(messages)\n\n if (!options?.only?.length) return flattened\n\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(flattened)) {\n if (options.only.some((prefix) => key === prefix || key.startsWith(`${prefix}.`))) {\n result[key] = value\n }\n }\n return result\n }\n\n private getCompiledMessages(locale: string): CompiledMessages {\n const effectiveLocale = this.cache.has(locale) ? locale : this.defaultLocale\n\n const cached = this.compiledCache.get(effectiveLocale)\n if (cached) return cached\n\n const messages = this.cache.get(effectiveLocale) ?? {}\n const flattened = this.flattenMessages(messages)\n\n const compiled: CompiledMessages = {}\n for (const [key, value] of Object.entries(flattened)) {\n const msg = new IntlMessageFormat(value, effectiveLocale)\n compiled[key] = (params) => String(msg.format(params as Record<string, string | number | boolean>))\n }\n\n this.compiledCache.set(effectiveLocale, compiled)\n return compiled\n }\n\n private flattenMessages(\n messages: Record<string, unknown>,\n prefix = ''\n ): Record<string, string> {\n const result: Record<string, string> = {}\n\n for (const key of Object.keys(messages)) {\n const value = messages[key]\n const newKey = prefix ? `${prefix}.${key}` : key\n\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n Object.assign(result, this.flattenMessages(value as Record<string, unknown>, newKey))\n } else {\n result[newKey] = String(value)\n }\n }\n\n return result\n }\n}\n","import { Singleton } from '../../di/decorators'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport { deepMerge } from '../utils/deep-merge'\n\n/**\n * Global key for the shared contributions array.\n *\n * When stratal is installed via portal/symlink (e.g., in monorepos), bundlers\n * like esbuild may inline multiple copies of this module. Each copy gets its\n * own static class fields, so messages registered by one copy are invisible\n * to another. Using a `Symbol.for()` key on `globalThis` ensures all copies\n * share the same contributions array.\n */\nconst CONTRIBUTIONS_KEY = Symbol.for('stratal:i18n:message-registry:contributions')\n\ntype Contributions = Record<string, Record<string, unknown>>[]\n\nfunction getContributions(): Contributions {\n const g = globalThis as Record<symbol, unknown>\n g[CONTRIBUTIONS_KEY] ??= [];\n return g[CONTRIBUTIONS_KEY] as Contributions\n}\n\n/**\n * Message Registry\n *\n * Accumulates i18n messages from multiple `I18nModule.registerMessages()` calls.\n * Messages are collected statically (at module import time) and deep-merged\n * when `getMergedMessages()` is called by `MessageLoaderService`.\n *\n * Later registrations override earlier ones at leaf level.\n */\n@Singleton(I18N_TOKENS.MessageRegistry)\nexport class MessageRegistry {\n /**\n * Add messages (called statically by I18nModule.registerMessages)\n */\n static addMessages(messages: Record<string, Record<string, unknown>>): void {\n if (Boolean(messages) && typeof messages === 'object' && Object.keys(messages).length > 0) {\n getContributions().push(messages)\n }\n }\n\n /**\n * Get all messages deep-merged in registration order\n */\n getMergedMessages(): Record<string, Record<string, unknown>> {\n const merged: Record<string, Record<string, unknown>> = {}\n\n for (const contribution of getContributions()) {\n for (const locale of Object.keys(contribution)) {\n merged[locale] = deepMerge(\n (merged[locale] ?? {}),\n contribution[locale],\n )\n }\n }\n\n return merged\n }\n\n /**\n * Reset registry (for testing)\n * @internal\n */\n static reset(): void {\n (globalThis as Record<symbol, unknown>)[CONTRIBUTIONS_KEY] = []\n }\n}\n","import { Module } from '../module'\nimport type { DynamicModule, ModuleContext, OnInitialize } from '../module/types'\nimport type { I18nModuleOptions } from './i18n.options'\nimport { I18N_TOKENS } from './i18n.tokens'\nimport { I18nService } from './services/i18n.service'\nimport { MessageLoaderService } from './services/message-loader.service'\nimport { MessageRegistry } from './services/message-registry'\nimport { zodErrorMap } from './validation/validation.context'\nimport { z } from './validation/zod'\n\n@Module({\n providers: [\n { provide: I18N_TOKENS.MessageRegistry, useClass: MessageRegistry },\n { provide: I18N_TOKENS.MessageLoader, useClass: MessageLoaderService },\n { provide: I18N_TOKENS.I18nService, useClass: I18nService },\n ],\n})\nexport class I18nModule implements OnInitialize {\n onInitialize(_context: ModuleContext): void {\n z.config({ customError: zodErrorMap })\n }\n\n static forRoot(options: I18nModuleOptions = {}): DynamicModule {\n return {\n module: I18nModule,\n providers: [\n { provide: I18N_TOKENS.Options, useValue: options },\n ],\n }\n }\n\n static registerMessages(messages: Record<string, Record<string, unknown>>): DynamicModule {\n MessageRegistry.addMessages(messages)\n return {\n module: I18nModule,\n providers: [],\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"i18n.module-DRQAZoSZ.mjs","names":[],"sources":["../src/i18n/services/i18n.service.ts","../src/i18n/messages/index.ts","../src/i18n/services/message-loader.service.ts","../src/i18n/services/message-registry.ts","../src/i18n/i18n.module.ts"],"sourcesContent":["import { inject } from '../../di'\nimport { Request } from '../../di/decorators'\nimport { ROUTER_TOKENS, type RouterContext } from '../../router'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport type { II18nService, MessageKeys, MessageParams } from '../i18n.types'\nimport type { MessageLoaderService } from './message-loader.service'\n\n@Request(I18N_TOKENS.I18nService)\nexport class I18nService implements II18nService {\n constructor(\n @inject(I18N_TOKENS.MessageLoader) private readonly loader: MessageLoaderService,\n @inject(ROUTER_TOKENS.RouterContext, { isOptional: true }) private readonly routerContext?: RouterContext\n ) {\n }\n\n t(key: MessageKeys, params?: MessageParams): string {\n return this.loader.translate(this.getLocale(), key, params as Record<string, unknown>)\n }\n\n getLocale(): string {\n return this.routerContext?.getLocale() ?? 'en'\n }\n}\n","/**\n * Core Messages\n *\n * Messages used by packages/modules infrastructure.\n * These are automatically merged with application-specific messages.\n */\n\nimport * as en from './en'\n\n/**\n * All locale messages\n * Explicitly import and export (no filesystem scanning - Cloudflare Workers compatible)\n */\nexport const messages = { en } as const\n\n/**\n * Type for all messages\n */\nexport type Messages = typeof messages\n\n/**\n * Get messages for all locales\n */\nexport function getMessages(): Record<string, Record<string, unknown>> {\n return messages\n}\n\n/**\n * Get available locales\n */\nexport function getLocales(): string[] {\n return Object.keys(messages)\n}\n","import IntlMessageFormat from 'intl-messageformat'\nimport { inject } from '../../di'\nimport { Singleton } from '../../di/decorators'\nimport type { I18nModuleOptions } from '../i18n.options'\nimport type { MessageKeyPrefix } from '../i18n.types'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport { getLocales, getMessages } from '../messages'\nimport { deepMerge } from '../utils/deep-merge'\nimport type { MessageRegistry } from './message-registry'\n\ntype CompiledMessages = Record<string, (params?: Record<string, unknown>) => string>\n\n@Singleton(I18N_TOKENS.MessageLoader)\nexport class MessageLoaderService {\n private readonly cache: Map<string, Record<string, unknown>>\n private readonly compiledCache: Map<string, CompiledMessages>\n private readonly locales: string[]\n private readonly defaultLocale: string\n\n constructor(\n @inject(I18N_TOKENS.MessageRegistry) private readonly registry: MessageRegistry,\n @inject(I18N_TOKENS.Options, { isOptional: true })\n private readonly options?: I18nModuleOptions\n ) {\n this.defaultLocale = this.options?.defaultLocale ?? 'en'\n this.cache = new Map()\n this.compiledCache = new Map()\n\n const coreMessages = getMessages()\n const coreLocales = getLocales()\n\n const registryMessages = this.registry.getMergedMessages()\n const registryLocales = Object.keys(registryMessages)\n\n const allLocales = [...new Set([...coreLocales, ...registryLocales])]\n this.locales = allLocales\n\n for (const locale of allLocales) {\n const coreLocaleMessages = coreMessages[locale] ?? {}\n const registryLocaleMessages = registryMessages[locale] ?? {}\n\n const merged = deepMerge(coreLocaleMessages, registryLocaleMessages)\n this.cache.set(locale, merged)\n }\n }\n\n translate(locale: string, key: string, params?: Record<string, unknown>): string {\n const compiled = this.getCompiledMessages(locale)\n const fn = compiled[key]\n if (!fn) return key\n return fn(params)\n }\n\n getMessages(locale: string): Record<string, unknown> {\n return this.cache.get(locale) ?? this.cache.get(this.defaultLocale) ?? {}\n }\n\n getAvailableLocales(): string[] {\n return this.locales\n }\n\n isLocaleSupported(locale: string): boolean {\n return this.cache.has(locale)\n }\n\n getDefaultLocale(): string {\n return this.defaultLocale\n }\n\n getFilteredMessages(\n locale: string,\n options?: { only?: MessageKeyPrefix[] }\n ): Record<string, string> {\n const messages = this.getMessages(locale)\n const flattened = this.flattenMessages(messages)\n\n if (!options?.only?.length) return flattened\n\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(flattened)) {\n if (options.only.some((prefix) => key === prefix || key.startsWith(`${prefix}.`))) {\n result[key] = value\n }\n }\n return result\n }\n\n private getCompiledMessages(locale: string): CompiledMessages {\n const effectiveLocale = this.cache.has(locale) ? locale : this.defaultLocale\n\n const cached = this.compiledCache.get(effectiveLocale)\n if (cached) return cached\n\n const messages = this.cache.get(effectiveLocale) ?? {}\n const flattened = this.flattenMessages(messages)\n\n const compiled: CompiledMessages = {}\n for (const [key, value] of Object.entries(flattened)) {\n const msg = new IntlMessageFormat(value, effectiveLocale)\n compiled[key] = (params) => String(msg.format(params as Record<string, string | number | boolean>))\n }\n\n this.compiledCache.set(effectiveLocale, compiled)\n return compiled\n }\n\n private flattenMessages(\n messages: Record<string, unknown>,\n prefix = ''\n ): Record<string, string> {\n const result: Record<string, string> = {}\n\n for (const key of Object.keys(messages)) {\n const value = messages[key]\n const newKey = prefix ? `${prefix}.${key}` : key\n\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n Object.assign(result, this.flattenMessages(value as Record<string, unknown>, newKey))\n } else {\n result[newKey] = String(value)\n }\n }\n\n return result\n }\n}\n","import { Singleton } from '../../di/decorators'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport { deepMerge } from '../utils/deep-merge'\n\n/**\n * Global key for the shared contributions array.\n *\n * When stratal is installed via portal/symlink (e.g., in monorepos), bundlers\n * like esbuild may inline multiple copies of this module. Each copy gets its\n * own static class fields, so messages registered by one copy are invisible\n * to another. Using a `Symbol.for()` key on `globalThis` ensures all copies\n * share the same contributions array.\n */\nconst CONTRIBUTIONS_KEY = Symbol.for('stratal:i18n:message-registry:contributions')\n\ntype Contributions = Record<string, Record<string, unknown>>[]\n\nfunction getContributions(): Contributions {\n const g = globalThis as Record<symbol, unknown>\n g[CONTRIBUTIONS_KEY] ??= [];\n return g[CONTRIBUTIONS_KEY] as Contributions\n}\n\n/**\n * Message Registry\n *\n * Accumulates i18n messages from multiple `I18nModule.registerMessages()` calls.\n * Messages are collected statically (at module import time) and deep-merged\n * when `getMergedMessages()` is called by `MessageLoaderService`.\n *\n * Later registrations override earlier ones at leaf level.\n */\n@Singleton(I18N_TOKENS.MessageRegistry)\nexport class MessageRegistry {\n /**\n * Add messages (called statically by I18nModule.registerMessages)\n */\n static addMessages(messages: Record<string, Record<string, unknown>>): void {\n if (Boolean(messages) && typeof messages === 'object' && Object.keys(messages).length > 0) {\n getContributions().push(messages)\n }\n }\n\n /**\n * Get all messages deep-merged in registration order\n */\n getMergedMessages(): Record<string, Record<string, unknown>> {\n const merged: Record<string, Record<string, unknown>> = {}\n\n for (const contribution of getContributions()) {\n for (const locale of Object.keys(contribution)) {\n merged[locale] = deepMerge(\n (merged[locale] ?? {}),\n contribution[locale],\n )\n }\n }\n\n return merged\n }\n\n /**\n * Reset registry (for testing)\n * @internal\n */\n static reset(): void {\n (globalThis as Record<symbol, unknown>)[CONTRIBUTIONS_KEY] = []\n }\n}\n","import { Module } from '../module'\nimport type { DynamicModule, ModuleContext, OnInitialize } from '../module/types'\nimport type { I18nModuleOptions } from './i18n.options'\nimport { I18N_TOKENS } from './i18n.tokens'\nimport { I18nService } from './services/i18n.service'\nimport { MessageLoaderService } from './services/message-loader.service'\nimport { MessageRegistry } from './services/message-registry'\nimport { zodErrorMap } from './validation/validation.context'\nimport { z } from './validation/zod'\n\n@Module({\n providers: [\n { provide: I18N_TOKENS.MessageRegistry, useClass: MessageRegistry },\n { provide: I18N_TOKENS.MessageLoader, useClass: MessageLoaderService },\n { provide: I18N_TOKENS.I18nService, useClass: I18nService },\n ],\n})\nexport class I18nModule implements OnInitialize {\n onInitialize(_context: ModuleContext): void {\n z.config({ customError: zodErrorMap })\n }\n\n static forRoot(options: I18nModuleOptions = {}): DynamicModule {\n return {\n module: I18nModule,\n providers: [\n { provide: I18N_TOKENS.Options, useValue: options },\n ],\n }\n }\n\n static registerMessages(messages: Record<string, Record<string, unknown>>): DynamicModule {\n MessageRegistry.addMessages(messages)\n return {\n module: I18nModule,\n providers: [],\n }\n }\n}\n"],"mappings":"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"}
@@ -16,4 +16,4 @@ const I18N_TOKENS = {
16
16
  //#endregion
17
17
  export { I18N_TOKENS as t };
18
18
 
19
- //# sourceMappingURL=i18n.tokens-hwRpmjRq.mjs.map
19
+ //# sourceMappingURL=i18n.tokens-CZ_v8oyS.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.tokens-hwRpmjRq.mjs","names":[],"sources":["../src/i18n/i18n.tokens.ts"],"sourcesContent":["/**\n * I18n Module DI Tokens\n * Symbol-based tokens to avoid string collisions\n */\n\nexport const I18N_TOKENS = {\n /** MessageLoaderService - loads and caches locale messages */\n MessageLoader: Symbol.for('stratal:i18n:message:loader'),\n /** I18nService - request-scoped translation service */\n I18nService: Symbol.for('stratal:i18n:service'),\n /** I18nModuleOptions - configuration options from forRoot() */\n Options: Symbol.for('stratal:i18n:options'),\n /** MessageRegistry - singleton accumulator for registerMessages() contributions */\n MessageRegistry: Symbol.for('stratal:i18n:message:registry'),\n} as const\n"],"mappings":";;;;;AAKA,MAAa,cAAc;;CAEzB,eAAe,OAAO,IAAI,8BAA8B;;CAExD,aAAa,OAAO,IAAI,uBAAuB;;CAE/C,SAAS,OAAO,IAAI,uBAAuB;;CAE3C,iBAAiB,OAAO,IAAI,gCAAgC;CAC7D"}
1
+ {"version":3,"file":"i18n.tokens-CZ_v8oyS.mjs","names":[],"sources":["../src/i18n/i18n.tokens.ts"],"sourcesContent":["/**\n * I18n Module DI Tokens\n * Symbol-based tokens to avoid string collisions\n */\n\nexport const I18N_TOKENS = {\n /** MessageLoaderService - loads and caches locale messages */\n MessageLoader: Symbol.for('stratal:i18n:message:loader'),\n /** I18nService - request-scoped translation service */\n I18nService: Symbol.for('stratal:i18n:service'),\n /** I18nModuleOptions - configuration options from forRoot() */\n Options: Symbol.for('stratal:i18n:options'),\n /** MessageRegistry - singleton accumulator for registerMessages() contributions */\n MessageRegistry: Symbol.for('stratal:i18n:message:registry'),\n} as const\n"],"mappings":";;;;;AAKA,MAAa,cAAc;;CAEzB,eAAe,OAAO,IAAI,6BAA6B;;CAEvD,aAAa,OAAO,IAAI,sBAAsB;;CAE9C,SAAS,OAAO,IAAI,sBAAsB;;CAE1C,iBAAiB,OAAO,IAAI,+BAA+B;AAC7D"}
@@ -98,4 +98,4 @@ declare abstract class Macroable {
98
98
  }
99
99
  //#endregion
100
100
  export { MacroFunction as n, Macroable as t };
101
- //# sourceMappingURL=index-B4UBK-2T.d.mts.map
101
+ //# sourceMappingURL=index-0ItCjaqw.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-0ItCjaqw.d.mts","names":[],"sources":["../src/macroable/types.ts","../src/macroable/macroable.ts"],"mappings":";KACY,aAAA,IAAiB,IAAA,UAAc,IAAI;;;KCE1C,WAAA,oBAA+B,IAAI;;;;ADFO;;;;ACDH;;;;AAGJ;AA4BxC;;;;;;;;;;;;;;uBAAsB,SAAA;EAAA,CACnB,GAAA;EAwE8D;;;;EAAA,iBAnE9C,cAAA,EAAc,GAAA;;;;EAyFsB;;;EAAA,iBApFpC,UAAA,EAAU,GAAA;EAuFL;;;EAAA,iBAlFL,WAAA,EAAW,GAAA;EAqFsB;;;;EAAA,eA/EnC,UAAA;EAhBgB;;;;;;;;;EAAA,OA6BxB,KAAA,WAAgB,WAAA,kBAA6B,YAAA,CAAa,CAAA,GAC/D,IAAA,EAAM,CAAA,EACN,IAAA,EAAM,CAAA,EACN,KAAA,EAAO,YAAA,CAAa,CAAA,EAAG,CAAA;EAAA,OAElB,KAAA,CAAM,IAAA,mBAAuB,KAAA;EALA;;;;;;;;;EAAA,OAsC7B,gBAAA,WAA2B,WAAA,kBAA6B,YAAA,CAAa,CAAA,GAC1E,IAAA,EAAM,CAAA,EACN,IAAA,EAAM,CAAA,EACN,KAAA,EAAO,YAAA,CAAa,CAAA,EAAG,CAAA;EAAA,OAElB,gBAAA,CAAiB,IAAA,mBAAuB,KAAA;EAtCxC;;;;;;;EAAA,OAuDA,MAAA,WAAiB,WAAA,kBAA6B,YAAA,CAAa,CAAA,GAChE,IAAA,EAAM,CAAA,EACN,IAAA,EAAM,CAAA,EACN,WAAA,GAAc,IAAA,EAAM,YAAA,CAAa,CAAA,MAAO,YAAA,CAAa,CAAA,EAAG,CAAA,GACxD,SAAA;EAAA,OAEK,MAAA,CAAO,IAAA,mBAAuB,WAAA,EAAa,aAAA,EAAe,SAAA;EA3BzD;;;;;EAAA,OA+DD,QAAA,CAAS,IAAA;EA7DS;;;;EAAA,OA2ElB,WAAA"}
@@ -1,39 +1,202 @@
1
- import { Sn as AsyncModuleOptions, wn as DynamicModule, xr as ApplicationError } from "./index-DEncMcC6.mjs";
2
- import { t as StratalEnv } from "./env-DKSbuBi5.mjs";
3
- import { p as II18nService } from "./zod-DvWTfRpI.mjs";
4
- import { r as LoggerService } from "./index-BtlE9RuO.mjs";
5
- import { r as QueueMessage, t as ConsumerRegistry } from "./consumer-registry-DHQtypr1.mjs";
1
+ import { Dn as AsyncModuleOptions, Dr as ApplicationError, In as OnInitialize, Nn as ModuleContext, Y as Container, kn as DynamicModule } from "./index-B_JoEl3V.mjs";
2
+ import { t as StratalEnv } from "./env-ug22bJj7.mjs";
3
+ import { m as II18nService } from "./zod-wecrEVAs.mjs";
4
+ import { r as LoggerService } from "./index-BUt92sAE.mjs";
5
+ import { t as Constructor } from "./types-CmV_9xBD.mjs";
6
+ import { t as TieredCacheService } from "./tiered-cache.service-Dv3BhxxE.mjs";
7
+ import { t as CronJob } from "./cron-job-NesZRk8F.mjs";
8
+ import { a as QueueBinding, i as QueueMessage, n as ConsumerRegistry } from "./consumer-registry-D3iMTSdy.mjs";
6
9
 
10
+ //#region src/queue/queue.module.d.ts
11
+ /**
12
+ * Queue module configuration options
13
+ */
14
+ interface QueueModuleOptions {
15
+ /**
16
+ * Queue provider type
17
+ * - 'cloudflare': Production provider using Cloudflare Queue bindings
18
+ * - 'sync': Testing provider that processes messages immediately
19
+ */
20
+ provider: 'cloudflare' | 'sync';
21
+ /**
22
+ * KV binding for queue state (idempotency keys + failed jobs).
23
+ * Defaults to the `CACHE` binding if omitted.
24
+ */
25
+ store?: {
26
+ /**
27
+ * KV namespace binding name.
28
+ * @default CACHE
29
+ */
30
+ binding?: string;
31
+ };
32
+ /**
33
+ * Idempotency configuration.
34
+ *
35
+ * Delivery is **at-least-once with best-effort de-duplication**, not
36
+ * exactly-once. Every dispatch carries an idempotency key (an explicit
37
+ * `metadata.idempotencyKey`, otherwise a deterministic SHA-256 hash of `type`
38
+ * + `payload`), and a message already recorded as processed is skipped. The
39
+ * processed marker is written only after a handler succeeds, and KV `get`/`put`
40
+ * are eventually consistent — so a message redelivered concurrently (or after
41
+ * a crash before the marker was durable) can still run more than once. Make
42
+ * handlers idempotent; don't rely on this as a hard exactly-once guarantee.
43
+ * `ttl` bounds how long processed keys are remembered.
44
+ */
45
+ idempotency?: {
46
+ /** TTL in seconds for processed idempotency keys. Default: 86400 (24h) */ttl?: number;
47
+ };
48
+ /**
49
+ * Failed-job configuration.
50
+ *
51
+ * Failed jobs persist indefinitely until retried or purged. To bound growth,
52
+ * register the opt-in `FailedJobCleanupJob` cron in a module's `jobs` array;
53
+ * it deletes failed jobs older than `retention`.
54
+ */
55
+ failedJobs?: {
56
+ /**
57
+ * Age in seconds beyond which `FailedJobCleanupJob` deletes a failed job.
58
+ * Default: 604800 (7d). Has no effect unless the cron is registered.
59
+ */
60
+ retention?: number;
61
+ };
62
+ /** Max retry attempts before storing as failed job. Default: 3 */
63
+ maxRetries?: number;
64
+ }
65
+ declare class QueueModule implements OnInitialize {
66
+ /**
67
+ * Fail fast at boot if the configured KV store binding is missing, rather
68
+ * than letting every queue invocation hard-fail lazily. The binding backs
69
+ * idempotency claims and failed-job storage, so without it the queue
70
+ * subsystem cannot function.
71
+ */
72
+ onInitialize({
73
+ container
74
+ }: ModuleContext): void;
75
+ /**
76
+ * Configure queue infrastructure with async factory.
77
+ *
78
+ * Use when provider configuration depends on other services like ConfigService.
79
+ *
80
+ * @param options - Async configuration with factory and inject tokens
81
+ * @returns Dynamic module with queue infrastructure
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * QueueModule.forRootAsync({
86
+ * inject: [CONFIG_TOKENS.ConfigService],
87
+ * useFactory: (config: IConfigService) => ({
88
+ * provider: config.get('queue').provider
89
+ * })
90
+ * })
91
+ * ```
92
+ */
93
+ static forRootAsync(options: AsyncModuleOptions<QueueModuleOptions>): DynamicModule;
94
+ /**
95
+ * Register a queue binding for injection.
96
+ *
97
+ * The binding name doubles as the DI injection token and the
98
+ * `env`-lookup key. Binding names are typed against `StratalEnv`
99
+ * (autocomplete works once an app augments `StratalEnv` with its
100
+ * Cloudflare bindings).
101
+ *
102
+ * @param binding - Queue binding identifier (e.g. `NOTIFICATIONS_QUEUE`).
103
+ * @returns Dynamic module that provides the queue sender
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * // In AppModule imports
108
+ * QueueModule.registerQueue('NOTIFICATIONS_QUEUE')
109
+ *
110
+ * // Then inject using the binding name
111
+ * constructor(@InjectQueue('NOTIFICATIONS_QUEUE') private queue: IQueueSender) {}
112
+ * ```
113
+ */
114
+ static registerQueue(binding: QueueBinding): DynamicModule;
115
+ }
116
+ //#endregion
117
+ //#region src/queue/failed-job.d.ts
118
+ interface FailedJobMetadata {
119
+ /** Cloudflare queue name the message was consumed from (display/filtering). */
120
+ queue: string;
121
+ /** Producer binding to re-enqueue through on retry. */
122
+ binding: string;
123
+ type: string;
124
+ consumer: string;
125
+ attempts: number;
126
+ failedAt: string;
127
+ }
128
+ interface FailedJob extends FailedJobMetadata {
129
+ id: string;
130
+ message: QueueMessage;
131
+ error: {
132
+ name: string;
133
+ message: string;
134
+ stack?: string;
135
+ };
136
+ }
137
+ //#endregion
138
+ //#region src/queue/queue-store.d.ts
139
+ /** Default KV binding name used for queue state when none is configured. */
140
+ declare const DEFAULT_STORE_BINDING = "CACHE";
141
+ /**
142
+ * Persists queue idempotency claims and failed jobs.
143
+ *
144
+ * Backed by {@link TieredCacheService} (isolate-local L1 + KV). The L1 is what
145
+ * makes `markProcessed` → `isProcessed` reliable within an isolate: a claim
146
+ * written on this isolate is read back from memory, so a message redelivered to
147
+ * the same warm isolate is de-duplicated even inside KV's eventual-consistency
148
+ * window. Idempotency markers are set-once, the pattern the L1 tier is designed
149
+ * for. Cross-isolate duplicates still rely on KV (eventually consistent) —
150
+ * delivery remains at-least-once with best-effort de-duplication, not
151
+ * exactly-once.
152
+ */
153
+ declare class QueueStore {
154
+ private readonly cache;
155
+ private readonly idempotencyTtl;
156
+ constructor(cache: TieredCacheService, options: QueueModuleOptions);
157
+ isProcessed(key: string): Promise<boolean>;
158
+ markProcessed(key: string): Promise<void>;
159
+ storeFailedJob(job: FailedJob): Promise<void>;
160
+ getFailedJob(messageId: string): Promise<FailedJob | null>;
161
+ removeFailedJob(messageId: string): Promise<void>;
162
+ listFailedJobs(options?: {
163
+ limit?: number;
164
+ cursor?: string;
165
+ }): Promise<{
166
+ keys: {
167
+ id: string;
168
+ metadata: FailedJobMetadata;
169
+ }[];
170
+ cursor?: string;
171
+ }>;
172
+ purgeFailedJobs(): Promise<void>;
173
+ /**
174
+ * Delete failed jobs older than `retentionSeconds` (by their `failedAt`
175
+ * timestamp). Returns the number removed. Backs the opt-in
176
+ * {@link FailedJobCleanupJob} cron — failed jobs otherwise persist
177
+ * indefinitely until retried or purged.
178
+ */
179
+ purgeFailedJobsOlderThan(retentionSeconds: number): Promise<number>;
180
+ }
181
+ //#endregion
7
182
  //#region src/queue/queue-manager.d.ts
8
183
  declare class QueueManager {
9
184
  private readonly registry;
10
185
  private readonly logger;
11
- constructor(registry: ConsumerRegistry, logger: LoggerService);
186
+ private readonly store;
187
+ private readonly maxRetries;
188
+ constructor(registry: ConsumerRegistry, logger: LoggerService, store: QueueStore, options: QueueModuleOptions);
12
189
  processBatch(queueName: string, batch: MessageBatch): Promise<void>;
13
190
  }
14
191
  //#endregion
15
- //#region src/queue/queue-binding.d.ts
16
- /**
17
- * String keys of `StratalEnv` whose value type is `Queue`.
18
- */
19
- type QueueBindingFromEnv = Extract<{ [K in keyof StratalEnv]: StratalEnv[K] extends Queue ? K : never }[keyof StratalEnv], string>;
20
- /**
21
- * Type-safe queue binding identifier.
22
- *
23
- * Resolves to the union of `Queue`-typed binding keys on the augmented
24
- * `StratalEnv`. Falls back to `string` when no `Queue` bindings are visible
25
- * (e.g. library code compiled outside an app's env context).
26
- */
27
- type QueueBinding = [QueueBindingFromEnv] extends [never] ? string : QueueBindingFromEnv;
28
- //#endregion
29
192
  //#region src/queue/queue-sender.interface.d.ts
30
193
  /**
31
194
  * Message input for queue dispatch (without auto-generated fields)
32
195
  *
33
- * When dispatching a message, the id and timestamp are auto-generated.
196
+ * When dispatching a message, the id is auto-generated.
34
197
  * You only need to provide the type, payload, and optional metadata.
35
198
  */
36
- type DispatchMessage<T = unknown> = Omit<QueueMessage<T>, 'id' | 'timestamp'>;
199
+ type DispatchMessage<T = unknown> = Omit<QueueMessage<T>, 'id'>;
37
200
  /**
38
201
  * Queue sender interface for dispatching messages to a queue.
39
202
  *
@@ -64,10 +227,10 @@ interface IQueueSender {
64
227
  *
65
228
  * Auto-adds:
66
229
  * - `id`: Unique message identifier (UUID)
67
- * - `timestamp`: Current timestamp in milliseconds
68
230
  * - `metadata.locale`: Current locale from i18n context
231
+ * - `metadata.idempotencyKey`: Deterministic SHA-256 hash of type + payload (if not provided)
69
232
  *
70
- * @param message - Message to dispatch (without id/timestamp)
233
+ * @param message - Message to dispatch (without id)
71
234
  */
72
235
  dispatch<T>(message: DispatchMessage<T>): Promise<void>;
73
236
  }
@@ -101,7 +264,7 @@ interface IQueueProvider {
101
264
  * - SyncQueueProvider: Finds matching consumers and calls handle() directly
102
265
  *
103
266
  * @param binding - Queue binding identifier
104
- * @param message - Complete message with id, timestamp, and metadata
267
+ * @param message - Complete message with id and metadata
105
268
  */
106
269
  send<T>(binding: string, message: QueueMessage<T>): Promise<void>;
107
270
  }
@@ -127,7 +290,7 @@ declare class CloudflareQueueProvider implements IQueueProvider {
127
290
  * Send a message to a Cloudflare Queue
128
291
  *
129
292
  * @param binding - Queue binding identifier (e.g., 'NOTIFICATIONS_QUEUE')
130
- * @param message - Complete message with id, timestamp, and payload
293
+ * @param message - Complete message with id and payload
131
294
  * @throws {QueueError} If the binding is not configured on env
132
295
  */
133
296
  send<T>(binding: string, message: QueueMessage<T>): Promise<void>;
@@ -150,33 +313,30 @@ declare class CloudflareQueueProvider implements IQueueProvider {
150
313
  * **Consumer Matching:**
151
314
  * - Consumers are matched by message type, not queue name
152
315
  * - Wildcard ('*') matches all message types
153
- *
154
- * @example Testing with sync provider
155
- * ```typescript
156
- * const provider = new SyncQueueProvider(registry)
157
- * await provider.send('NOTIFICATIONS_QUEUE', {
158
- * id: '123',
159
- * timestamp: Date.now(),
160
- * type: 'email.send',
161
- * payload: { to: 'test@example.com' }
162
- * })
163
- * // Consumer's handle() is called immediately!
164
- * ```
165
316
  */
166
317
  declare class SyncQueueProvider implements IQueueProvider {
167
318
  private readonly registry;
168
- constructor(registry: ConsumerRegistry);
319
+ private readonly root;
320
+ constructor(registry: ConsumerRegistry, root: Container);
169
321
  /**
170
- * Process a message synchronously
322
+ * Process a message synchronously.
171
323
  *
172
- * Finds all matching consumers by message type and calls their handle() method.
173
- * If any consumer throws, onError() is called and the error is re-thrown.
324
+ * Runs inside the active request scope when dispatch happens within one (an
325
+ * HTTP request, or `runInScope` for queues/cron/commands). When dispatched
326
+ * with no ambient scope — e.g. a service invoked directly in a test — it
327
+ * establishes its own request scope (mirroring the production queue handler)
328
+ * so consumers and their request-scoped dependencies resolve correctly.
174
329
  *
175
330
  * @param _binding - Queue binding (not used for routing, consumers match by message type)
176
- * @param message - Complete message with id, timestamp, and payload
331
+ * @param message - Complete message with id and payload
177
332
  * @throws Re-throws any error from consumer.handle() after calling onError()
178
333
  */
179
334
  send<T>(_binding: string, message: QueueMessage<T>): Promise<void>;
335
+ /**
336
+ * Resolve a fresh consumer per message from `container` (matched by type) and
337
+ * invoke each sequentially, fail-fast on the first error after `onError`.
338
+ */
339
+ private process;
180
340
  }
181
341
  //#endregion
182
342
  //#region src/queue/queue-sender.d.ts
@@ -188,8 +348,8 @@ declare class SyncQueueProvider implements IQueueProvider {
188
348
  *
189
349
  * Automatically enriches messages with:
190
350
  * - `id`: UUID generated via crypto.randomUUID()
191
- * - `timestamp`: Current time in milliseconds
192
351
  * - `metadata.locale`: Current locale from I18n context
352
+ * - `metadata.idempotencyKey`: Deterministic SHA-256 hash of type + payload (if not provided)
193
353
  *
194
354
  * @example
195
355
  * ```typescript
@@ -210,64 +370,10 @@ declare class QueueSender implements IQueueSender {
210
370
  /**
211
371
  * Dispatch a message to this queue.
212
372
  *
213
- * @param message - Message to dispatch (without id/timestamp)
373
+ * @param message - Message to dispatch (without id)
214
374
  */
215
375
  dispatch<T>(message: DispatchMessage<T>): Promise<void>;
216
- }
217
- //#endregion
218
- //#region src/queue/queue.module.d.ts
219
- /**
220
- * Queue module configuration options
221
- */
222
- interface QueueModuleOptions {
223
- /**
224
- * Queue provider type
225
- * - 'cloudflare': Production provider using Cloudflare Queue bindings
226
- * - 'sync': Testing provider that processes messages immediately
227
- */
228
- provider: 'cloudflare' | 'sync';
229
- }
230
- declare class QueueModule {
231
- /**
232
- * Configure queue infrastructure with async factory.
233
- *
234
- * Use when provider configuration depends on other services like ConfigService.
235
- *
236
- * @param options - Async configuration with factory and inject tokens
237
- * @returns Dynamic module with queue infrastructure
238
- *
239
- * @example
240
- * ```typescript
241
- * QueueModule.forRootAsync({
242
- * inject: [CONFIG_TOKENS.ConfigService],
243
- * useFactory: (config: IConfigService) => ({
244
- * provider: config.get('queue').provider
245
- * })
246
- * })
247
- * ```
248
- */
249
- static forRootAsync(options: AsyncModuleOptions<QueueModuleOptions>): DynamicModule;
250
- /**
251
- * Register a queue binding for injection.
252
- *
253
- * The binding name doubles as the DI injection token and the
254
- * `env`-lookup key. Binding names are typed against `StratalEnv`
255
- * (autocomplete works once an app augments `StratalEnv` with its
256
- * Cloudflare bindings).
257
- *
258
- * @param binding - Queue binding identifier (e.g. `NOTIFICATIONS_QUEUE`).
259
- * @returns Dynamic module that provides the queue sender
260
- *
261
- * @example
262
- * ```typescript
263
- * // In AppModule imports
264
- * QueueModule.registerQueue('NOTIFICATIONS_QUEUE')
265
- *
266
- * // Then inject using the binding name
267
- * constructor(@InjectQueue('NOTIFICATIONS_QUEUE') private queue: IQueueSender) {}
268
- * ```
269
- */
270
- static registerQueue(binding: QueueBinding): DynamicModule;
376
+ private generateIdempotencyKey;
271
377
  }
272
378
  //#endregion
273
379
  //#region src/queue/services/queue-provider-factory.d.ts
@@ -297,8 +403,9 @@ declare class QueueModule {
297
403
  declare class QueueProviderFactory {
298
404
  private readonly env;
299
405
  private readonly registry;
406
+ private readonly container;
300
407
  private readonly options?;
301
- constructor(env: StratalEnv, registry: ConsumerRegistry, options?: QueueModuleOptions | undefined);
408
+ constructor(env: StratalEnv, registry: ConsumerRegistry, container: Container, options?: QueueModuleOptions | undefined);
302
409
  /**
303
410
  * Create a queue provider based on module configuration
304
411
  *
@@ -352,6 +459,44 @@ declare class QueueRegistry {
352
459
  getQueue(binding: string): IQueueSender;
353
460
  }
354
461
  //#endregion
462
+ //#region src/queue/jobs/failed-job-cleanup.job.d.ts
463
+ /**
464
+ * Opt-in cron job that deletes failed jobs older than `failedJobs.retention`
465
+ * (default 7 days). Failed jobs are persisted indefinitely by default; register
466
+ * this job only if you want automatic cleanup.
467
+ *
468
+ * ```ts
469
+ * @Module({
470
+ * imports: [
471
+ * QueueModule.forRoot({ provider: 'cloudflare', failedJobs: { retention: 1209600 } }),
472
+ * ],
473
+ * jobs: [FailedJobCleanupJob], // daily at 00:00 UTC
474
+ * })
475
+ * export class AppModule {}
476
+ * ```
477
+ *
478
+ * Add a matching cron trigger to `wrangler.jsonc` (`"0 0 * * *"` for the
479
+ * default schedule), or use {@link failedJobCleanupJob} for a custom one.
480
+ */
481
+ declare class FailedJobCleanupJob implements CronJob {
482
+ private readonly store;
483
+ private readonly options;
484
+ private readonly logger;
485
+ static schedule: string;
486
+ constructor(store: QueueStore, options: QueueModuleOptions, logger: LoggerService);
487
+ execute(): Promise<void>;
488
+ }
489
+ /**
490
+ * Create a {@link FailedJobCleanupJob} bound to a custom cron schedule (which
491
+ * must match a `wrangler.jsonc` trigger). Use when the default daily schedule
492
+ * isn't desired:
493
+ *
494
+ * ```ts
495
+ * @Module({ jobs: [failedJobCleanupJob('0 3 * * 0')] }) // weekly, Sundays 03:00
496
+ * ```
497
+ */
498
+ declare function failedJobCleanupJob(schedule: string): Constructor<CronJob>;
499
+ //#endregion
355
500
  //#region src/queue/decorators/inject-queue.decorator.d.ts
356
501
  /**
357
502
  * Inject a queue sender by binding name.
@@ -388,11 +533,12 @@ declare const QUEUE_TOKENS: {
388
533
  readonly QueueProviderFactory: symbol;
389
534
  readonly QueueRegistry: symbol;
390
535
  readonly QueueModuleOptions: symbol;
536
+ readonly QueueStore: symbol;
391
537
  };
392
538
  type QueueToken = (typeof QUEUE_TOKENS)[keyof typeof QUEUE_TOKENS];
393
539
  //#endregion
394
540
  //#region src/queue/queue.error.d.ts
395
541
  declare class QueueError extends ApplicationError {}
396
542
  //#endregion
397
- export { QueueRegistry as a, QueueModuleOptions as c, CloudflareQueueProvider as d, IQueueProvider as f, QueueManager as g, QueueBinding as h, InjectQueue as i, QueueSender as l, IQueueSender as m, QUEUE_TOKENS as n, QueueProviderFactory as o, DispatchMessage as p, QueueToken as r, QueueModule as s, QueueError as t, SyncQueueProvider as u };
398
- //# sourceMappingURL=index-CW1YHSft.d.mts.map
543
+ export { QueueStore as _, FailedJobCleanupJob as a, QueueModule as b, QueueProviderFactory as c, CloudflareQueueProvider as d, IQueueProvider as f, DEFAULT_STORE_BINDING as g, QueueManager as h, InjectQueue as i, QueueSender as l, IQueueSender as m, QUEUE_TOKENS as n, failedJobCleanupJob as o, DispatchMessage as p, QueueToken as r, QueueRegistry as s, QueueError as t, SyncQueueProvider as u, FailedJob as v, QueueModuleOptions as x, FailedJobMetadata as y };
544
+ //# sourceMappingURL=index-B5JBRcWD.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B5JBRcWD.d.mts","names":[],"sources":["../src/queue/queue.module.ts","../src/queue/failed-job.ts","../src/queue/queue-store.ts","../src/queue/queue-manager.ts","../src/queue/queue-sender.interface.ts","../src/queue/providers/queue-provider.interface.ts","../src/queue/providers/cloudflare-queue.provider.ts","../src/queue/providers/sync-queue.provider.ts","../src/queue/queue-sender.ts","../src/queue/services/queue-provider-factory.ts","../src/queue/queue-registry.ts","../src/queue/jobs/failed-job-cleanup.job.ts","../src/queue/decorators/inject-queue.decorator.ts","../src/queue/queue.tokens.ts","../src/queue/queue.error.ts"],"mappings":"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"}
@@ -121,4 +121,4 @@ declare class PrettyFormatter implements ILogFormatter {
121
121
  }
122
122
  //#endregion
123
123
  export { InternalLogContext as a, LogLevel as c, LogEntry as i, LOGGER_TOKENS as l, JsonFormatter as n, LogContext as o, LoggerService as r, LOG_LEVEL_PRIORITY as s, PrettyFormatter as t };
124
- //# sourceMappingURL=index-BtlE9RuO.d.mts.map
124
+ //# sourceMappingURL=index-BUt92sAE.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BUt92sAE.d.mts","names":[],"sources":["../src/logger/logger.tokens.ts","../src/logger/contracts/log-level.ts","../src/logger/contracts/log-context.ts","../src/logger/contracts/log-entry.ts","../src/logger/formatters/formatter.interface.ts","../src/logger/services/logger.service.ts","../src/logger/formatters/json-formatter.ts","../src/logger/formatters/pretty-formatter.ts"],"mappings":";cAAa,aAAA;EAAA;;;;;;;AAAb;;;aCIY,QAAA;EACV,KAAA;EACA,IAAA;EACA,IAAA;EACA,KAAA;AAAA;;;;AAJF;cAWa,kBAAA,EAAoB,MAAM,CAAC,QAAA;;;;ADfxC;;;KEIY,UAAA,GAAa,MAAM;;;;;UAMd,kBAAA,SAA2B,UAAU;EACpD,MAAA;EACA,SAAA;AAAA;;;;;;;UCLe,QAAA;EACf,KAAA,EAAO,QAAA;EACP,OAAA;EACA,OAAA,EAAS,kBAAkB;EAC3B,KAAA;IACE,OAAA;IACA,KAAA;IACA,IAAA;EAAA;AAAA;;;AHdJ;;;;AAAA,UIMiB,aAAA;;;;;;EAMf,MAAA,CAAO,KAAA,EAAO,QAAQ;AAAA;;;cCJX,aAAA;EAAA,iBAGQ,QAAA;EAAA,iBAGA,SAAA;cAHA,QAAA,EAAU,QAAA,EAGV,SAAA,EAAW,aAAA;EAG9B,KAAA,CAAM,OAAA,UAAiB,OAAA,GAAU,UAAA;EAIjC,IAAA,CAAK,OAAA,UAAiB,OAAA,GAAU,UAAA;EAIhC,IAAA,CAAK,OAAA,UAAiB,OAAA,GAAU,UAAA;EAIhC,KAAA,CAAM,OAAA,UAAiB,KAAA,EAAO,KAAA,EAAO,OAAA,GAAU,UAAA;EAC/C,KAAA,CAAM,OAAA,UAAiB,OAAA,GAAU,UAAA;EAAA,QAezB,GAAA;EAAA,QAqBA,cAAA;EAAA,QAiBA,aAAA;EAAA,QAOA,cAAA;AAAA;;;;;;;;;;;;;;AJtFV;;;;cKca,aAAA,YAAyB,aAAa;EACjD,MAAA,CAAO,KAAA,EAAO,QAAA;AAAA;;;;;;;;;;;;;cCLH,eAAA,YAA2B,aAAa;EAAA,iBAClC,MAAA;EAAA,iBAOA,KAAA;EAEjB,MAAA,CAAO,KAAA,EAAO,QAAA;AAAA"}