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 +1 @@
1
- {"version":3,"file":"zod-hMa3rSHV.mjs","names":[],"sources":["../src/i18n/validation/cuid2.ts","../src/i18n/validation/zod.ts"],"sourcesContent":["import { z } from '@hono/zod-openapi';\nimport { type $ZodRawIssue } from 'zod/v4/core';\n\n/**\n * Default cuid2 shape: 24-32 lowercase-alphanumeric chars, starting with a\n * letter. Matches what `@paralleldrive/cuid2` produces with default settings\n * and what most apps expect when they say \"cuid2\".\n *\n * Used as the default for {@link cuid2}; exposed for callers who want to\n * compose it into other patterns.\n */\nexport const CUID2_REGEX = /^[a-z][0-9a-z]{23,31}$/\n\n/**\n * Stratal's cuid2 validator — a stricter drop-in for Zod 4.3.6's `z.cuid2()`.\n *\n * **Why this exists.** Zod 4.3.6's built-in `z.cuid2()` uses the regex\n * `/^[0-9a-z]+$/`, which accepts *any* non-empty lowercase-alphanumeric\n * string (including 2-letter locale prefixes like `'sw'`). That makes it\n * effectively useless as a tenant-id / external-id validator.\n *\n * This helper layers the proper shape regex on top of `z.cuid2()`, so:\n * - validation actually enforces cuid2 shape;\n * - the schema still carries `z.cuid2()`'s OpenAPI metadata (i.e. spec\n * output keeps `format: 'cuid2'`).\n *\n * @example\n * ```ts\n * import { z, withZodI18n } from 'stratal/validation'\n * import { cuid2 } from 'stratal/validation'\n *\n * // Default 24-32 char cuid2:\n * router.prefix('/:tenantId', z.object({ tenantId: cuid2() }))\n *\n * // Custom regex (e.g. fixed-length 24):\n * router.prefix('/:tenantId', z.object({\n * tenantId: cuid2({ pattern: /^[a-z][0-9a-z]{23}$/ }),\n * }))\n *\n * // Custom error message:\n * cuid2(withZodI18n('tenants.errors.invalidId'))\n *\n * // Compose: chain anything Zod string accepts\n * cuid2().describe('Tenant ID')\n * ```\n *\n * @param options.pattern - Override the shape regex. Defaults to {@link CUID2_REGEX}.\n * @param options.error - Custom error message (string or i18n key) for the regex check.\n */\nexport function cuid2(options?: { pattern?: RegExp; error?: string | ((_issue: $ZodRawIssue) => string) }) {\n const pattern = options?.pattern ?? CUID2_REGEX\n return z.cuid2({\n pattern: pattern,\n error: typeof options?.error === 'string' ? options?.error : undefined,\n ...(typeof options?.error === 'function' ? { error: options?.error } : {})\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 { CUID2_REGEX, cuid2 } from './cuid2'\n\n// Types\nexport type { I18nErrorMetadata, ZodCustomIssue } from './validation.types'\n"],"mappings":";;;;;;;;;;;;AAWA,MAAa,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsC3B,SAAgB,MAAM,SAAqF;CACzG,MAAM,UAAU,SAAS,WAAW;CACpC,OAAO,EAAE,MAAM;EACJ;EACT,OAAO,OAAO,SAAS,UAAU,WAAW,SAAS,QAAQ,KAAA;EAC7D,GAAI,OAAO,SAAS,UAAU,aAAa,EAAE,OAAO,SAAS,OAAO,GAAG,EAAE;EAC1E,CAAC"}
1
+ {"version":3,"file":"zod-eKqqhZ5_.mjs","names":[],"sources":["../src/i18n/validation/cuid2.ts","../src/i18n/validation/zod.ts"],"sourcesContent":["import { z } from '@hono/zod-openapi';\nimport { type $ZodRawIssue } from 'zod/v4/core';\n\n/**\n * Default cuid2 shape: 24-32 lowercase-alphanumeric chars, starting with a\n * letter. Matches what `@paralleldrive/cuid2` produces with default settings\n * and what most apps expect when they say \"cuid2\".\n *\n * Used as the default for {@link cuid2}; exposed for callers who want to\n * compose it into other patterns.\n */\nexport const CUID2_REGEX = /^[a-z][0-9a-z]{23,31}$/\n\n/**\n * Stratal's cuid2 validator — a stricter drop-in for Zod 4.3.6's `z.cuid2()`.\n *\n * **Why this exists.** Zod 4.3.6's built-in `z.cuid2()` uses the regex\n * `/^[0-9a-z]+$/`, which accepts *any* non-empty lowercase-alphanumeric\n * string (including 2-letter locale prefixes like `'sw'`). That makes it\n * effectively useless as a tenant-id / external-id validator.\n *\n * This helper layers the proper shape regex on top of `z.cuid2()`, so:\n * - validation actually enforces cuid2 shape;\n * - the schema still carries `z.cuid2()`'s OpenAPI metadata (i.e. spec\n * output keeps `format: 'cuid2'`).\n *\n * @example\n * ```ts\n * import { z, withZodI18n } from 'stratal/validation'\n * import { cuid2 } from 'stratal/validation'\n *\n * // Default 24-32 char cuid2:\n * router.prefix('/:tenantId', z.object({ tenantId: cuid2() }))\n *\n * // Custom regex (e.g. fixed-length 24):\n * router.prefix('/:tenantId', z.object({\n * tenantId: cuid2({ pattern: /^[a-z][0-9a-z]{23}$/ }),\n * }))\n *\n * // Custom error message:\n * cuid2(withZodI18n('tenants.errors.invalidId'))\n *\n * // Compose: chain anything Zod string accepts\n * cuid2().describe('Tenant ID')\n * ```\n *\n * @param options.pattern - Override the shape regex. Defaults to {@link CUID2_REGEX}.\n * @param options.error - Custom error message (string or i18n key) for the regex check.\n */\nexport function cuid2(options?: { pattern?: RegExp; error?: string | ((_issue: $ZodRawIssue) => string) }) {\n const pattern = options?.pattern ?? CUID2_REGEX\n return z.cuid2({\n pattern: pattern,\n error: typeof options?.error === 'string' ? options?.error : undefined,\n ...(typeof options?.error === 'function' ? { error: options?.error } : {})\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 { CUID2_REGEX, cuid2 } from './cuid2'\n\n// Types\nexport type { I18nErrorMetadata, ZodCustomIssue } from './validation.types'\n"],"mappings":";;;;;;;;;;;;AAWA,MAAa,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsC3B,SAAgB,MAAM,SAAqF;CACzG,MAAM,UAAU,SAAS,WAAW;CACpC,OAAO,EAAE,MAAM;EACJ;EACT,OAAO,OAAO,SAAS,UAAU,WAAW,SAAS,QAAQ,KAAA;EAC7D,GAAI,OAAO,SAAS,UAAU,aAAa,EAAE,OAAO,SAAS,MAAM,IAAI,CAAC;CAC1E,CAAC;AACH"}
@@ -1,4 +1,4 @@
1
- import { t as index_d_exports } from "./index-KMgSCSM7.mjs";
1
+ import { t as index_d_exports } from "./index-HgOLNruQ.mjs";
2
2
  import { OpenAPIHono, z, z as z$2 } from "@hono/zod-openapi";
3
3
  import { ZodError } from "zod";
4
4
  import { OpenAPIObject, PathItemObject } from "openapi3-ts/oas30";
@@ -127,6 +127,11 @@ type MessageKeys = SystemMessageKeys | AppMessageKeys;
127
127
  * ```
128
128
  */
129
129
  type Prefixes<T extends string> = T extends `${infer Head}.${infer Tail}` ? Head | `${Head}.${Prefixes<Tail>}` : T;
130
+ /**
131
+ * Filter a string union to only keys matching the given dot-notation prefixes.
132
+ * A key matches a prefix if it equals the prefix or starts with `${prefix}.`.
133
+ */
134
+ type FilterByPrefix<Keys extends string, Prefix extends string> = Keys extends `${Prefix}.${string}` ? Keys : Keys extends Prefix ? Keys : never;
130
135
  /**
131
136
  * Valid dot-notation prefixes for message keys
132
137
  *
@@ -197,5 +202,5 @@ declare namespace zod_d_exports {
197
202
  import * as import_zod from "zod";
198
203
  import * as import__hono_zod_openapi from "@hono/zod-openapi";
199
204
  //#endregion
200
- export { Prefixes as _, z$2 as a, cuid2 as b, ZodCustomIssue as c, AppMessages as d, DeepKeys as f, MessageParams as g, MessageKeys as h, ZodError as i, AppMessageKeys as l, MessageKeyPrefix as m, OpenAPIObject as n, zod_d_exports as o, II18nService as p, PathItemObject as r, I18nErrorMetadata as s, OpenAPIHono as t, AppMessageNamespaces as u, SystemMessageKeys as v, CUID2_REGEX as y };
201
- //# sourceMappingURL=zod-DvWTfRpI.d.mts.map
205
+ export { MessageParams as _, z$2 as a, CUID2_REGEX as b, ZodCustomIssue as c, AppMessages as d, DeepKeys as f, MessageKeys as g, MessageKeyPrefix as h, ZodError as i, AppMessageKeys as l, II18nService as m, OpenAPIObject as n, zod_d_exports as o, FilterByPrefix as p, PathItemObject as r, I18nErrorMetadata as s, OpenAPIHono as t, AppMessageNamespaces as u, Prefixes as v, cuid2 as x, SystemMessageKeys as y };
206
+ //# sourceMappingURL=zod-wecrEVAs.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-wecrEVAs.d.mts","names":[],"sources":["../src/i18n/validation/cuid2.ts","../src/i18n/i18n.types.ts","../src/i18n/validation/validation.types.ts","../src/i18n/validation/zod.ts"],"mappings":";;;;;;;;;;;;;AAWA;;cAAa,WAAA,EAAW,MAA2B;;AAAA;AAsCnD;;;;;;;;;;;;;;;;;AAAyG;;;;AC7BzG;;;;;;;;;;;;;iBD6BgB,KAAA,CAAM,OAAA;EAAY,OAAA,GAAU,MAAA;EAAQ,KAAA,cAAmB,MAAA,EAAQ,YAAA;AAAA,IAA0B,CAAA,CAAA,QAAA;;;;AAtCzG;;;;AAAmD;AAsCnD;;;;;KC7BY,QAAA,kCAA0C,CAAA,gCAEtC,CAAA,YAAa,CAAA,CAAE,CAAA,mBACzB,QAAA,CAAS,CAAA,CAAE,CAAA,MAAO,MAAA,GAAS,CAAA,UACxB,MAAA,GAAS,CAAA,WACR,CAAA;;;;;KAOE,iBAAA,GAAoB,QAAQ,QAAQ,eAAA;;;;;ADiByD;;;;AC7BzG;;;;;;;;;;;;;;;;UAsCiB,oBAAA;;;;;KAML,WAAA,iBAA4B,oBAAA,GAAuB,oBAAA,CAAqB,CAAA;;;;;KAMxE,cAAA,GAAiB,QAAQ,CAAC,WAAA;;;;AA7C3B;KAoDC,WAAA,GAAc,iBAAA,GAAoB,cAAc;;;;AA7CJ;AA0BxD;;;;AAAqC;AAMrC;;;;KA4BY,QAAA,qBAA6B,CAAA,yCACrC,IAAA,MAAU,IAAA,IAAQ,QAAA,CAAS,IAAA,MAC3B,CAAA;;;;;KAMQ,cAAA,+CACV,IAAA,YAAgB,MAAA,eAAqB,IAAA,GACnC,IAAA,SAAa,MAAA,GAAS,IAAA;;;;AAtC2D;AAMrF;;;;AAAiD;AAOjD;;;;AAA4D;KA0ChD,gBAAA,GAAmB,QAAQ,CAAC,WAAA;;;;;KAM5B,aAAA,GAAgB,MAAM;;;;UAKjB,YAAA;EApCZ;;;;;;;EA4CH,CAAA,CAAE,GAAA,EAAK,WAAA,EAAa,MAAA,GAAS,aAAa;EA7Cb;;;AAC1B;AAML;EA6CE,SAAA;AAAA;;;;;;UC3Ie,iBAAA;;;AFKjB;EEDE,GAAA,EAAK,WAAA;;;AFC4C;EEIjD,MAAA,GAAS,MAAM;AAAA;;;;;KAOL,cAAA,GAAiB,eAAA;EAC3B,MAAA;IACE,IAAA,GAAO,iBAAiB;IAAA,CACvB,GAAA;EAAA;AAAA;AAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stratal",
3
- "version": "0.0.22",
3
+ "version": "0.0.23",
4
4
  "description": "A modular Cloudflare Workers framework with dependency injection, queue-based events, and type-safe configuration",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -171,25 +171,20 @@
171
171
  "@hono/zod-openapi": "^1.4.0",
172
172
  "@modelcontextprotocol/sdk": "^1.29.0",
173
173
  "@swc-node/register": "^1.11.1",
174
- "@swc/core": "^1.15.33",
175
- "@swc/helpers": "^0.5.21",
174
+ "@swc/core": "^1.15.40",
175
+ "@swc/helpers": "^0.5.23",
176
176
  "clipanion": "^4.0.0-rc.4",
177
- "hono": "^4.12.18",
177
+ "hono": "^4.12.23",
178
178
  "intl-messageformat": "^11.2.7",
179
179
  "zod": "^4.4.3"
180
180
  },
181
181
  "peerDependencies": {
182
- "@react-email/components": ">=1",
183
- "nodemailer": ">=7",
182
+ "@react-email/render": ">=2",
184
183
  "react": ">=19",
185
- "react-dom": ">=19",
186
- "resend": ">=6"
184
+ "react-dom": ">=19"
187
185
  },
188
186
  "peerDependenciesMeta": {
189
- "@react-email/components": {
190
- "optional": true
191
- },
192
- "nodemailer": {
187
+ "@react-email/render": {
193
188
  "optional": true
194
189
  },
195
190
  "react": {
@@ -197,30 +192,24 @@
197
192
  },
198
193
  "react-dom": {
199
194
  "optional": true
200
- },
201
- "resend": {
202
- "optional": true
203
195
  }
204
196
  },
205
197
  "devDependencies": {
206
- "@cloudflare/vitest-pool-workers": "^0.16.3",
207
- "@cloudflare/workers-types": "4.20260510.1",
208
- "@react-email/components": "^1.0.12",
198
+ "@cloudflare/vitest-pool-workers": "^0.16.12",
199
+ "@cloudflare/workers-types": "4.20260603.1",
200
+ "@react-email/render": "^2.0.8",
209
201
  "@stratal/testing": "workspace:*",
210
- "@types/node": "^25.6.2",
211
- "@types/nodemailer": "^8.0.0",
212
- "@types/react": "^19.2.14",
202
+ "@types/node": "^25.9.1",
203
+ "@types/react": "^19.2.16",
213
204
  "@types/react-dom": "^19.2.3",
214
- "@vitest/coverage-v8": "^4.1.5",
215
- "@vitest/runner": "~4.1.5",
216
- "@vitest/snapshot": "~4.1.5",
205
+ "@vitest/coverage-v8": "^4.1.8",
206
+ "@vitest/runner": "~4.1.8",
207
+ "@vitest/snapshot": "~4.1.8",
217
208
  "jsonc-parser": "^3.3.1",
218
- "nodemailer": "^8.0.7",
219
- "react": "^19.2.6",
220
- "react-dom": "^19.2.6",
221
- "resend": "^6.12.3",
222
- "tsdown": "^0.22.0",
209
+ "react": "^19.2.7",
210
+ "react-dom": "^19.2.7",
211
+ "tsdown": "^0.22.1",
223
212
  "typescript": "^6.0.3",
224
- "vitest": "~4.1.5"
213
+ "vitest": "~4.1.8"
225
214
  }
226
215
  }
@@ -1,42 +0,0 @@
1
- //#region src/email/providers/base-email.provider.ts
2
- /**
3
- * Base Email Provider
4
- *
5
- * Abstract base class for email providers.
6
- * Provides shared implementation of sendBatch() to reduce code duplication.
7
- */
8
- var BaseEmailProvider = class {
9
- /**
10
- * Send multiple emails in a batch
11
- *
12
- * Default implementation sends emails sequentially.
13
- * Concrete providers can override for optimized batch sending.
14
- */
15
- async sendBatch(messages) {
16
- const results = [];
17
- let successful = 0;
18
- let failed = 0;
19
- for (const message of messages) try {
20
- const result = await this.send(message);
21
- results.push(result);
22
- successful++;
23
- } catch (error) {
24
- results.push({
25
- messageId: "",
26
- accepted: false,
27
- metadata: { error: error instanceof Error ? error.message : "Unknown error" }
28
- });
29
- failed++;
30
- }
31
- return {
32
- total: messages.length,
33
- successful,
34
- failed,
35
- results
36
- };
37
- }
38
- };
39
- //#endregion
40
- export { BaseEmailProvider as t };
41
-
42
- //# sourceMappingURL=base-email.provider-BWZHIjt8.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-email.provider-BWZHIjt8.mjs","names":[],"sources":["../src/email/providers/base-email.provider.ts"],"sourcesContent":["import type { ResolvedEmailMessage } from '../contracts'\nimport type { EmailBatchSendResult, EmailSendResult, IEmailProvider } from './email-provider.interface'\n\n/**\n * Base Email Provider\n *\n * Abstract base class for email providers.\n * Provides shared implementation of sendBatch() to reduce code duplication.\n */\nexport abstract class BaseEmailProvider implements IEmailProvider {\n /**\n * Send a single email - must be implemented by concrete providers\n */\n abstract send(message: ResolvedEmailMessage): Promise<EmailSendResult>\n\n /**\n * Send multiple emails in a batch\n *\n * Default implementation sends emails sequentially.\n * Concrete providers can override for optimized batch sending.\n */\n async sendBatch(messages: ResolvedEmailMessage[]): Promise<EmailBatchSendResult> {\n const results: EmailSendResult[] = []\n let successful = 0\n let failed = 0\n\n for (const message of messages) {\n try {\n const result = await this.send(message)\n results.push(result)\n successful++\n }\n catch (error) {\n results.push({\n messageId: '',\n accepted: false,\n metadata: {\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n })\n failed++\n }\n }\n\n return {\n total: messages.length,\n successful,\n failed,\n results,\n }\n }\n}\n"],"mappings":";;;;;;;AASA,IAAsB,oBAAtB,MAAkE;;;;;;;CAYhE,MAAM,UAAU,UAAiE;EAC/E,MAAM,UAA6B,EAAE;EACrC,IAAI,aAAa;EACjB,IAAI,SAAS;EAEb,KAAK,MAAM,WAAW,UACpB,IAAI;GACF,MAAM,SAAS,MAAM,KAAK,KAAK,QAAQ;GACvC,QAAQ,KAAK,OAAO;GACpB;WAEK,OAAO;GACZ,QAAQ,KAAK;IACX,WAAW;IACX,UAAU;IACV,UAAU,EACR,OAAO,iBAAiB,QAAQ,MAAM,UAAU,iBACjD;IACF,CAAC;GACF;;EAIJ,OAAO;GACL,OAAO,SAAS;GAChB;GACA;GACA;GACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache.service-e34gV6tz.d.mts","names":[],"sources":["../src/cache/services/cache.service.ts"],"mappings":";;;;;;AAyCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cACa,YAAA;EAAA,iBAIyC,GAAA;EAAA,iBACI,MAAA;EAAA,QAJhD,EAAA;cAG4C,GAAA,EAAK,UAAA,EACD,MAAA,EAAQ,aAAA;EA8GrD;;;;;;;EAlGX,KAAA,CAAM,EAAA,EAAI,WAAA;EA6ME;;;;;;;;;;;;;;;;;;;;;;;;;;EA/KZ,WAAA,CAAY,EAAA,EAAI,WAAA,GAAc,YAAA;EAiBpB;;;;;;;;EADJ,GAAA,CAAI,GAAA,UAAa,aAAA,YAAyB,qBAAA,WAAgC,OAAA;EAC1E,GAAA,yBAAA,CAA6B,GAAA,UAAa,aAAA,WAAwB,qBAAA,WAAgC,OAAA,CAAQ,aAAA;EAC1G,GAAA,CAAI,GAAA,UAAa,aAAA,kBAA+B,qBAAA,kBAAuC,OAAA,CAAQ,WAAA;EAC/F,GAAA,CAAI,GAAA,UAAa,aAAA,aAA0B,qBAAA,aAAkC,OAAA,CAAQ,cAAA;EAArF;;;;;;;;EAkCA,eAAA,oBAAA,CACJ,GAAA,UACA,aAAA,YAAyB,qBAAA,WACxB,OAAA,CAAQ,gCAAA,SAAyC,QAAA;EAC9C,eAAA,6CAAA,CACJ,GAAA,UACA,aAAA,WAAwB,qBAAA,WACvB,OAAA,CAAQ,gCAAA,CAAiC,aAAA,EAAe,QAAA;EACrD,eAAA,oBAAA,CACJ,GAAA,UACA,aAAA,kBAA+B,qBAAA,kBAC9B,OAAA,CAAQ,gCAAA,CAAiC,WAAA,EAAa,QAAA;EACnD,eAAA,oBAAA,CACJ,GAAA,UACA,aAAA,aAA0B,qBAAA,aACzB,OAAA,CAAQ,gCAAA,CAAiC,cAAA,EAAgB,QAAA;EAZjD;;;;;;;;;;;;;;;;;;;;EA+DL,GAAA,CACJ,GAAA,UACA,KAAA,WAAgB,WAAA,GAAc,eAAA,GAAkB,cAAA,EAChD,OAAA,GAAU,qBAAA,GACT,OAAA;EA1DG;;;;;;EA2EA,MAAA,CAAO,GAAA,WAAc,OAAA;EAxEiB;;;;;;;;;;;;;;;;;;;;;;EA0GtC,IAAA,oBAAA,CACJ,OAAA,GAAU,sBAAA,GACT,OAAA,CAAQ,qBAAA,CAAsB,QAAA;AAAA"}
@@ -1,6 +0,0 @@
1
- //#region src/cache/cache.tokens.ts
2
- const CACHE_TOKENS = { CacheService: Symbol.for("stratal:cache:service") };
3
- //#endregion
4
- export { CACHE_TOKENS as t };
5
-
6
- //# sourceMappingURL=cache.tokens-ovi_c52J.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache.tokens-ovi_c52J.mjs","names":[],"sources":["../src/cache/cache.tokens.ts"],"sourcesContent":["export const CACHE_TOKENS = {\n CacheService: Symbol.for('stratal:cache:service'),\n} as const\n\nexport type CacheToken = (typeof CACHE_TOKENS)[keyof typeof CACHE_TOKENS]\n"],"mappings":";AAAA,MAAa,eAAe,EAC1B,cAAc,OAAO,IAAI,wBAAwB,EAClD"}
@@ -1,16 +0,0 @@
1
- //#region src/quarry/colors.ts
2
- /** Minimal ANSI color helpers that respect the `NO_COLOR` convention. */
3
- const isEnabled = () => typeof process !== "undefined" ? !process.env.NO_COLOR : true;
4
- /** Create an ANSI formatter that wraps text with the given open/close SGR codes. */
5
- const code = (open, close) => (s) => isEnabled() ? `\x1b[${open}m${s}\x1b[${close}m` : s;
6
- const bold = code(1, 22);
7
- const dim = code(2, 22);
8
- const cyan = code(36, 39);
9
- const green = code(32, 39);
10
- const red = code(31, 39);
11
- const yellow = code(33, 39);
12
- const dimWhite = (s) => isEnabled() ? `\x1b[2;37m${s}\x1b[22;39m` : s;
13
- //#endregion
14
- export { green as a, dimWhite as i, cyan as n, red as o, dim as r, yellow as s, bold as t };
15
-
16
- //# sourceMappingURL=colors-axmupKdp.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colors-axmupKdp.mjs","names":[],"sources":["../src/quarry/colors.ts"],"sourcesContent":["/** Minimal ANSI color helpers that respect the `NO_COLOR` convention. */\nconst isEnabled = () => typeof process !== 'undefined' ? !process.env.NO_COLOR : true\n\n/** Create an ANSI formatter that wraps text with the given open/close SGR codes. */\nconst code = (open: number, close: number) => (s: string) =>\n isEnabled() ? `\\x1b[${open}m${s}\\x1b[${close}m` : s\n\nexport const bold = code(1, 22)\nexport const dim = code(2, 22)\nexport const cyan = code(36, 39)\nexport const green = code(32, 39)\nexport const red = code(31, 39)\nexport const yellow = code(33, 39)\nexport const dimWhite = (s: string) =>\n isEnabled() ? `\\x1b[2;37m${s}\\x1b[22;39m` : s\n"],"mappings":";;AACA,MAAM,kBAAkB,OAAO,YAAY,cAAc,CAAC,QAAQ,IAAI,WAAW;;AAGjF,MAAM,QAAQ,MAAc,WAAmB,MAC7C,WAAW,GAAG,QAAQ,KAAK,GAAG,EAAE,OAAO,MAAM,KAAK;AAEpD,MAAa,OAAO,KAAK,GAAG,GAAG;AAC/B,MAAa,MAAM,KAAK,GAAG,GAAG;AAC9B,MAAa,OAAO,KAAK,IAAI,GAAG;AAChC,MAAa,QAAQ,KAAK,IAAI,GAAG;AACjC,MAAa,MAAM,KAAK,IAAI,GAAG;AAC/B,MAAa,SAAS,KAAK,IAAI,GAAG;AAClC,MAAa,YAAY,MACvB,WAAW,GAAG,aAAa,EAAE,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-BU4ApTo5.mjs","names":[],"sources":["../src/quarry/constants.ts","../src/quarry/errors/command.error.ts","../src/quarry/command.ts"],"sourcesContent":["/**\n * Symbol key for storing internal mutable state on Command instances.\n * Keeps internal state hidden from user-facing autocomplete.\n */\nexport const COMMAND_INTERNALS = Symbol.for('stratal:command:internals')\n","/**\n * User-facing command error with a plain English message.\n *\n * Quarry catches this in `call()` and puts the message into `CommandResult.errors`.\n * Does NOT extend `ApplicationError` (which requires i18n keys + error codes).\n * Not routed through ExceptionHandler.\n */\nexport class CommandError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'CommandError'\n }\n}\n","import { bold, cyan, dim, green, red, yellow } from './colors'\nimport { COMMAND_INTERNALS } from './constants'\nimport { CommandError } from './errors/command.error'\nimport type { CommandInput, CommandInternals, CommandResult } from './types'\n\n/**\n * Abstract base class for Quarry commands.\n *\n * Subclasses define a static `command` signature string and implement `handle()`.\n *\n * @example\n * ```typescript\n * export class GreetCommand extends Command {\n * static command = 'greet {name : The name to greet} {--loud}'\n * static description = 'Greet someone'\n *\n * async handle(): Promise<void> {\n * const name = this.string('name')\n * const loud = this.boolean('loud')\n * this.info(loud ? `HELLO, ${name.toUpperCase()}!` : `Hello, ${name}!`)\n * }\n * }\n * ```\n */\nexport abstract class Command {\n /**\n * Laravel-style command signature string.\n *\n * **Command names:**\n * - `'greet'` — flat command (`quarry greet`)\n * - `'task add'` — subcommand hierarchy via spaces (`quarry task add`)\n * - `'task:add'` — namespaced flat command via colons (`quarry task:add`)\n *\n * **Arguments:**\n * - `{name}` — required argument\n * - `{name?}` — optional argument\n * - `{name=default}` — argument with default value\n * - `{name*}` — array/variadic argument\n * - `{name : description}` — argument with description\n *\n * **Options:**\n * - `{--flag}` — boolean flag\n * - `{--name=}` — option that accepts a value\n * - `{--name=default}` — option with default value\n * - `{--name=*}` — array option (multiple values)\n * - `{--A|name}` — option with single-char alias\n * - `{--name= : description}` — option with description\n *\n * @example\n * ```typescript\n * // Namespaced flat command: `quarry users:create ...`\n * static command = 'users:create {email : The user email} {--A|admin} {--R|role= : Assign a role}'\n *\n * // Subcommand hierarchy: `quarry users create ...`\n * static command = 'users create {email : The user email} {--A|admin} {--R|role= : Assign a role}'\n * ```\n */\n static command: string\n /** Human-readable description */\n static description?: string\n /** Alternative command names */\n static aliases?: string[];\n\n [COMMAND_INTERNALS]: CommandInternals\n\n constructor() {\n this[COMMAND_INTERNALS] = {\n inputs: {},\n output: [],\n errors: [],\n exitCode: 0,\n quarry: null,\n }\n }\n\n /**\n * Implement this method with the command's logic.\n * Return a number to set the exit code, or void for exit code 0.\n */\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n abstract handle(): number | void | Promise<number | void>\n\n // ── Input Accessors ──────────────────────────────────────────────\n\n /**\n * Get an input value with generic type.\n */\n input<T>(name: string): T {\n return this[COMMAND_INTERNALS].inputs[name] as T\n }\n\n /**\n * Get a string input. Throws CommandError if present but not a string.\n */\n string(name: string): string {\n const value = this[COMMAND_INTERNALS].inputs[name]\n if (value === undefined || value === null) {\n return ''\n }\n if (typeof value !== 'string') {\n throw new CommandError(`Input \"${name}\" expected a string, got ${typeof value}`)\n }\n return value\n }\n\n /**\n * Get a boolean input. Throws CommandError if present but not a boolean.\n */\n boolean(name: string): boolean {\n const value = this[COMMAND_INTERNALS].inputs[name]\n if (value === undefined || value === null) {\n return false\n }\n if (typeof value !== 'boolean') {\n throw new CommandError(`Input \"${name}\" expected a boolean, got ${typeof value}`)\n }\n return value\n }\n\n /**\n * Get a number input. Coerces strings to numbers. Throws CommandError on NaN.\n */\n number(name: string): number {\n const value = this[COMMAND_INTERNALS].inputs[name]\n if (value === undefined || value === null) {\n return 0\n }\n const num = typeof value === 'string' ? Number(value) : value\n if (typeof num !== 'number' || Number.isNaN(num)) {\n throw new CommandError(`Input \"${name}\" expected a number, got ${typeof value}`)\n }\n return num\n }\n\n /**\n * Get an array input. Throws CommandError if present but not an array.\n */\n array(name: string): string[] {\n const value = this[COMMAND_INTERNALS].inputs[name]\n if (value === undefined || value === null) {\n return []\n }\n if (!Array.isArray(value)) {\n throw new CommandError(`Input \"${name}\" expected an array, got ${typeof value}`)\n }\n return value as string[]\n }\n\n // ── Output Helpers ───────────────────────────────────────────────\n\n /** Write an informational message to output */\n info(message: string): void {\n this[COMMAND_INTERNALS].output.push(cyan(message))\n }\n\n /** Write a success message to output */\n success(message: string): void {\n this[COMMAND_INTERNALS].output.push(`${green(bold('✔'))} ${green(message)}`)\n }\n\n /** Write a warning message to output */\n warn(message: string): void {\n this[COMMAND_INTERNALS].output.push(`${yellow(bold('⚠'))} ${yellow(message)}`)\n }\n\n /** Write an error message to errors */\n error(message: string): void {\n this[COMMAND_INTERNALS].errors.push(red(message))\n }\n\n /** Write a plain line to output */\n line(message?: string): void {\n this[COMMAND_INTERNALS].output.push(message ?? '')\n }\n\n /** Write an empty line to output */\n newLine(): void {\n this[COMMAND_INTERNALS].output.push('')\n }\n\n /** Write a comment-style line to output */\n comment(message: string): void {\n this[COMMAND_INTERNALS].output.push(dim(`// ${message}`))\n }\n\n /** Write a formatted table to output */\n table(headers: string[], rows: string[][]): void {\n const colWidths = headers.map((h, i) => {\n const maxRow = rows.reduce((max, row) => Math.max(max, (row[i] ?? '').length), 0)\n return Math.max(h.length, maxRow)\n })\n\n const formatRow = (cells: string[]) =>\n cells.map((cell, i) => cell.padEnd(colWidths[i])).join(' ')\n\n this[COMMAND_INTERNALS].output.push(bold(formatRow(headers)))\n this[COMMAND_INTERNALS].output.push(dim(colWidths.map((w) => '-'.repeat(w)).join(' ')))\n for (const row of rows) {\n this[COMMAND_INTERNALS].output.push(formatRow(row))\n }\n }\n\n /** Write an error message and set exit code */\n fail(message: string, exitCode = 1): void {\n this[COMMAND_INTERNALS].errors.push(`${red(bold('✖'))} ${red(message)}`)\n this[COMMAND_INTERNALS].exitCode = exitCode\n }\n\n // ── Command Calling ──────────────────────────────────────────────\n\n /**\n * Call another command from within this command.\n * Delegates to Quarry.call() via internal reference.\n */\n async call(name: string, input?: CommandInput): Promise<CommandResult> {\n const internals = this[COMMAND_INTERNALS]\n if (!internals.quarry) {\n throw new CommandError('Cannot call commands: Quarry reference not set')\n }\n const result = await internals.quarry.call(name, input)\n\n // Forward child output/errors into parent (like Clipanion context switches)\n internals.output.push(...result.output)\n internals.errors.push(...result.errors)\n\n return result\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-wXfvHbBZ.d.mts","names":[],"sources":["../src/quarry/constants.ts","../src/quarry/command.ts"],"mappings":";;;;;;AAIA;cAAa,iBAAA;;;;AAAb;;;;;;;;ACoBA;;;;;;;;;;uBAAsB,OAAA;EA8LmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA,OA7JhD,OAAA;EA4HC;EAAA,OA1HD,WAAA;EA+HD;EAAA,OA7HC,OAAA;EAAA,CAEN,iBAAA,GAAoB,gBAAA;;EA4IC;;;;EAAA,SA3Hb,MAAA,CAAA,mBAA0B,OAAA;EAsIa;;;EA/HhD,KAAA,GAAA,CAAS,IAAA,WAAe,CAAA;;;;EAOxB,MAAA,CAAO,IAAA;;;;EAcP,OAAA,CAAQ,IAAA;;;;EAcR,MAAA,CAAO,IAAA;;;;EAeP,KAAA,CAAM,IAAA;;EAcN,IAAA,CAAK,OAAA;;EAKL,OAAA,CAAQ,OAAA;;EAKR,IAAA,CAAK,OAAA;;EAKL,KAAA,CAAM,OAAA;;EAKN,IAAA,CAAK,OAAA;;EAKL,OAAA,CAAA;;EAKA,OAAA,CAAQ,OAAA;;EAKR,KAAA,CAAM,OAAA,YAAmB,IAAA;;EAiBzB,IAAA,CAAK,OAAA,UAAiB,QAAA;;;;;EAWhB,IAAA,CAAK,IAAA,UAAc,KAAA,GAAQ,YAAA,GAAe,OAAA,CAAQ,aAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"consumer-registry-DHQtypr1.d.mts","names":[],"sources":["../src/queue/queue-consumer.ts","../src/queue/consumer-registry.ts"],"mappings":";;AAMA;;;;;UAAiB,YAAA;EAIf;EAFA,EAAA;EAMA;EAJA,SAAA;EAMA;EAJA,IAAA;EAMG;EAJH,OAAA,EAAS,CAAA;EAIK;EAFd,QAAA;IACE,MAAA;IAAA,CACC,GAAA;EAAA;AAAA;;;;;;;;;;;;;;;;;;;UAsBY,cAAA;EAsBQ;;;;;;EAAA,SAfd,YAAA;ECXE;;;;;EDkBX,MAAA,CAAO,OAAA,EAAS,YAAA,CAAa,CAAA,IAAK,OAAA;ECqDD;;;;;;ED7CjC,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,YAAA,CAAa,CAAA,IAAK,OAAA;AAAA;;;AAxDpD;;;;;;;;;;;;;;;AAkCA;;;;;;;;;;;;;;;;AAlCA,cC8Ba,gBAAA;EDkBJ;EAAA,QChBC,eAAA;EDwBR;EAAA,QCrBQ,YAAA;EDqBC;;;;;;;ECZT,QAAA,CAAS,QAAA,EAAU,cAAA;;;AAfrB;;;;;;;;EAuCE,YAAA,CAAa,WAAA,WAAsB,cAAA;EAjC3B;;;;;;EAgDR,YAAA,CAAa,WAAA;EAAb;;;;;EASA,eAAA,CAAA;EASiC;;;;;EAAjC,eAAA,CAAA,GAAmB,cAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cron-manager-9bpN9bu4.mjs","names":[],"sources":["../src/cron/errors/cron-execution.error.ts","../src/cron/cron-manager.ts"],"sourcesContent":["import { ApplicationError } from '../../errors'\n\nexport interface CronJobFailure {\n\tjob: string\n\terror: Error\n}\n\ninterface SerializedJobFailure {\n\tjob: string\n\tname: string\n\tcode?: number | string\n\tmessage: string\n\tdbErrorCode?: string\n\tsql?: string\n}\n\n/**\n * Error thrown when one or more cron jobs fail execution.\n *\n * Aggregates failures from multiple jobs that share the same schedule while\n * preserving each underlying error:\n * - The originals are kept on `this.failures` for typed access.\n * - `this.cause` is set to the only failure (1 job) or an `AggregateError`\n * wrapping all of them (2+ jobs), so `LoggerService.serializeError` can\n * walk the chain and surface every stack/cause.\n */\nexport class CronExecutionError extends ApplicationError {\n\tpublic readonly failures: readonly CronJobFailure[]\n\tpublic readonly schedule: string\n\tpublic readonly failureCount: number\n\tpublic readonly jobs: SerializedJobFailure[]\n\n\tconstructor(schedule: string, failures: CronJobFailure[]) {\n\t\tconst cause =\n\t\t\tfailures.length === 0\n\t\t\t\t? undefined\n\t\t\t\t: failures.length === 1\n\t\t\t\t\t? failures[0].error\n\t\t\t\t\t: new AggregateError(failures.map((f) => f.error), `${failures.length} cron jobs failed`)\n\n\t\tsuper(\n\t\t\t`${failures.length} cron job(s) failed for schedule \"${schedule}\"`,\n\t\t\tcause,\n\t\t)\n\n\t\tthis.failures = failures\n\t\tthis.schedule = schedule\n\t\tthis.failureCount = failures.length\n\t\tthis.jobs = failures.map((f) => serializeFailure(f))\n\t}\n}\n\nfunction serializeFailure({ job, error }: CronJobFailure): SerializedJobFailure {\n\tconst out: SerializedJobFailure = {\n\t\tjob,\n\t\tname: error.name,\n\t\tmessage: error.message,\n\t}\n\tconst maybeCoded = error as { code?: number | string }\n\tif (maybeCoded.code !== undefined) out.code = maybeCoded.code\n\treturn out\n}\n","import type { Container } from '../di/container'\nimport { Transient } from '../di/decorators'\nimport { LOGGER_TOKENS } from '../logger/logger.tokens'\nimport type { LoggerService } from '../logger/services/logger.service'\nimport type { CronJob, RegisteredJob } from './cron-job'\nimport { CronExecutionError } from './errors/cron-execution.error'\n\n/**\n * Manages cron job registration and execution\n *\n * CronManager is a singleton service that:\n * - Registers cron job class references from modules\n * - Routes scheduled events to matching jobs\n * - Resolves jobs from a request-scoped container at execution time\n *\n * Jobs are grouped by their cron expression, allowing multiple jobs\n * to run on the same schedule.\n */\n@Transient()\nexport class CronManager {\n\t/**\n\t * Map of cron expressions to registered job entries\n\t * Key: Cron expression (e.g., '0 2 * * *')\n\t * Value: Array of registered jobs (class ref + schedule)\n\t */\n\tprivate jobs = new Map<string, RegisteredJob[]>()\n\n\t/**\n\t * Register a cron job class\n\t *\n\t * Jobs with the same schedule are grouped together and executed\n\t * sequentially when the trigger fires.\n\t *\n\t * @param schedule - Cron expression (e.g., '0 2 * * *')\n\t * @param jobClass - CronJob class constructor (resolved at execution time)\n\t */\n\tregisterJob(schedule: string, jobClass: RegisteredJob['jobClass']): void {\n\t\tconst existing = this.jobs.get(schedule) ?? []\n\t\texisting.push({ schedule, jobClass })\n\t\tthis.jobs.set(schedule, existing)\n\t}\n\n\t/**\n\t * Execute all jobs matching the triggered cron expression\n\t *\n\t * Jobs are resolved from the provided request-scoped container,\n\t * ensuring dependencies (e.g. database) are properly scoped.\n\t *\n\t * Jobs are executed sequentially. If a job fails:\n\t * - Its onError() hook is called (if defined)\n\t * - Execution continues with the next job\n\t * - Errors are collected and thrown as CronExecutionError\n\t *\n\t * @param controller - Cloudflare ScheduledController\n\t * @param container - Request-scoped container to resolve jobs from\n\t */\n\tasync executeScheduled(controller: ScheduledController, container: Container): Promise<void> {\n\t\tconst { cron } = controller\n\t\tconst matchingJobs = this.jobs.get(cron) ?? []\n\n\t\tif (matchingJobs.length === 0) {\n\t\t\tconst logger = container.resolve<LoggerService>(LOGGER_TOKENS.LoggerService)\n\t\t\tlogger.warn('No cron jobs matched scheduled trigger', {\n\t\t\t\tincomingCron: cron,\n\t\t\t\tregisteredSchedules: Array.from(this.jobs.keys()),\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\tconst errors: { job: string; error: Error }[] = []\n\n\t\tfor (const { jobClass } of matchingJobs) {\n\t\t\tconst jobName = jobClass.name\n\n\t\t\ttry {\n\t\t\t\t// Register the job class in the request-scoped container so its\n\t\t\t\t// dependencies are resolved from request scope (not the parent).\n\t\t\t\tcontainer.register(jobClass, jobClass)\n\t\t\t\tconst job = container.resolve<CronJob>(jobClass)\n\t\t\t\tawait job.execute(controller)\n\t\t\t} catch (error) {\n\t\t\t\tconst err = error as Error\n\t\t\t\terrors.push({ job: jobName, error: err })\n\n\t\t\t\t// Try to resolve and call onError if possible\n\t\t\t\ttry {\n\t\t\t\t\tconst job = container.resolve<CronJob>(jobClass)\n\t\t\t\t\tif (job.onError) {\n\t\t\t\t\t\tawait job.onError(err, controller)\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// If resolution or onError fails, continue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If any jobs failed, throw an aggregate error so ExceptionHandler logs\n\t\t// it. The full per-job errors are passed through so cause/stacks survive.\n\t\tif (errors.length > 0) {\n\t\t\tthrow new CronExecutionError(cron, errors)\n\t\t}\n\t}\n\n\t/**\n\t * Get all registered jobs for a specific cron expression\n\t *\n\t * @param schedule - Cron expression\n\t * @returns Array of registered jobs, or empty array if none\n\t */\n\tgetJobsForSchedule(schedule: string): RegisteredJob[] {\n\t\treturn this.jobs.get(schedule) ?? []\n\t}\n\n\t/**\n\t * Get all registered cron expressions\n\t *\n\t * @returns Array of unique cron expressions\n\t */\n\tgetAllSchedules(): string[] {\n\t\treturn Array.from(this.jobs.keys())\n\t}\n\n\t/**\n\t * Get total number of registered jobs across all schedules\n\t *\n\t * @returns Total job count\n\t */\n\tgetTotalJobCount(): number {\n\t\tlet count = 0\n\t\tfor (const jobs of this.jobs.values()) {\n\t\t\tcount += jobs.length\n\t\t}\n\t\treturn count\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA0BA,IAAa,qBAAb,cAAwC,iBAAiB;CACxD;CACA;CACA;CACA;CAEA,YAAY,UAAkB,UAA4B;EACzD,MAAM,QACL,SAAS,WAAW,IACjB,KAAA,IACA,SAAS,WAAW,IACnB,SAAS,GAAG,QACZ,IAAI,eAAe,SAAS,KAAK,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,OAAO,mBAAmB;EAE5F,MACC,GAAG,SAAS,OAAO,oCAAoC,SAAS,IAChE,MACA;EAED,KAAK,WAAW;EAChB,KAAK,WAAW;EAChB,KAAK,eAAe,SAAS;EAC7B,KAAK,OAAO,SAAS,KAAK,MAAM,iBAAiB,EAAE,CAAC;;;AAItD,SAAS,iBAAiB,EAAE,KAAK,SAA+C;CAC/E,MAAM,MAA4B;EACjC;EACA,MAAM,MAAM;EACZ,SAAS,MAAM;EACf;CACD,MAAM,aAAa;CACnB,IAAI,WAAW,SAAS,KAAA,GAAW,IAAI,OAAO,WAAW;CACzD,OAAO;;;;ACzCD,IAAA,cAAA,MAAM,YAAY;;;;;;CAMxB,uBAAe,IAAI,KAA8B;;;;;;;;;;CAWjD,YAAY,UAAkB,UAA2C;EACxE,MAAM,WAAW,KAAK,KAAK,IAAI,SAAS,IAAI,EAAE;EAC9C,SAAS,KAAK;GAAE;GAAU;GAAU,CAAC;EACrC,KAAK,KAAK,IAAI,UAAU,SAAS;;;;;;;;;;;;;;;;CAiBlC,MAAM,iBAAiB,YAAiC,WAAqC;EAC5F,MAAM,EAAE,SAAS;EACjB,MAAM,eAAe,KAAK,KAAK,IAAI,KAAK,IAAI,EAAE;EAE9C,IAAI,aAAa,WAAW,GAAG;GAE9B,UADyB,QAAuB,cAAc,cACxD,CAAC,KAAK,0CAA0C;IACrD,cAAc;IACd,qBAAqB,MAAM,KAAK,KAAK,KAAK,MAAM,CAAC;IACjD,CAAC;GACF;;EAGD,MAAM,SAA0C,EAAE;EAElD,KAAK,MAAM,EAAE,cAAc,cAAc;GACxC,MAAM,UAAU,SAAS;GAEzB,IAAI;IAGH,UAAU,SAAS,UAAU,SAAS;IAEtC,MADY,UAAU,QAAiB,SAC9B,CAAC,QAAQ,WAAW;YACrB,OAAO;IACf,MAAM,MAAM;IACZ,OAAO,KAAK;KAAE,KAAK;KAAS,OAAO;KAAK,CAAC;IAGzC,IAAI;KACH,MAAM,MAAM,UAAU,QAAiB,SAAS;KAChD,IAAI,IAAI,SACP,MAAM,IAAI,QAAQ,KAAK,WAAW;YAE5B;;;EAQV,IAAI,OAAO,SAAS,GACnB,MAAM,IAAI,mBAAmB,MAAM,OAAO;;;;;;;;CAU5C,mBAAmB,UAAmC;EACrD,OAAO,KAAK,KAAK,IAAI,SAAS,IAAI,EAAE;;;;;;;CAQrC,kBAA4B;EAC3B,OAAO,MAAM,KAAK,KAAK,KAAK,MAAM,CAAC;;;;;;;CAQpC,mBAA2B;EAC1B,IAAI,QAAQ;EACZ,KAAK,MAAM,QAAQ,KAAK,KAAK,QAAQ,EACpC,SAAS,KAAK;EAEf,OAAO;;;0BAlHR,WAAW,CAAA,EAAA,YAAA"}
@@ -1,124 +0,0 @@
1
- import { Y as Container } from "./index-DEncMcC6.mjs";
2
- import { t as Constructor } from "./types-BaeHi67f.mjs";
3
-
4
- //#region src/cron/cron-job.d.ts
5
- /**
6
- * Interface for cron jobs that can be registered by modules
7
- *
8
- * Cron jobs are executed when Cloudflare triggers match their schedule.
9
- * The `schedule` property must be declared as a **static** field so the
10
- * framework can read it at registration time without instantiating the class.
11
- *
12
- * @example
13
- * ```typescript
14
- * @Transient()
15
- * export class DataCleanupJob implements CronJob {
16
- * static schedule = '0 2 * * *' // Daily at 2 AM UTC
17
- *
18
- * constructor(
19
- * @inject(LOGGER_TOKENS.LoggerService) private logger: LoggerService,
20
- * ) {}
21
- *
22
- * async execute(controller: ScheduledController): Promise<void> {
23
- * this.logger.info('Running data cleanup')
24
- * await this.cleanupExpiredData()
25
- * }
26
- *
27
- * async onError(error: Error): Promise<void> {
28
- * this.logger.error('Data cleanup failed', { error: error.message })
29
- * }
30
- * }
31
- * ```
32
- */
33
- interface RegisteredJob {
34
- /** The cron schedule expression */
35
- schedule: string;
36
- /** The job class constructor (resolved from container at execution time) */
37
- jobClass: Constructor<CronJob>;
38
- }
39
- interface CronJob {
40
- /**
41
- * Execute the cron job
42
- *
43
- * @param controller - Cloudflare ScheduledController with scheduledTime and cron
44
- * @throws ApplicationError for expected errors
45
- */
46
- execute(controller: ScheduledController): Promise<void>;
47
- /**
48
- * Optional error handler for job execution failures
49
- *
50
- * If not provided, errors are logged via ExceptionHandler
51
- *
52
- * @param error - Error that occurred during execution
53
- * @param controller - Cloudflare ScheduledController
54
- */
55
- onError?(error: Error, controller: ScheduledController): Promise<void>;
56
- }
57
- //#endregion
58
- //#region src/cron/cron-manager.d.ts
59
- /**
60
- * Manages cron job registration and execution
61
- *
62
- * CronManager is a singleton service that:
63
- * - Registers cron job class references from modules
64
- * - Routes scheduled events to matching jobs
65
- * - Resolves jobs from a request-scoped container at execution time
66
- *
67
- * Jobs are grouped by their cron expression, allowing multiple jobs
68
- * to run on the same schedule.
69
- */
70
- declare class CronManager {
71
- /**
72
- * Map of cron expressions to registered job entries
73
- * Key: Cron expression (e.g., '0 2 * * *')
74
- * Value: Array of registered jobs (class ref + schedule)
75
- */
76
- private jobs;
77
- /**
78
- * Register a cron job class
79
- *
80
- * Jobs with the same schedule are grouped together and executed
81
- * sequentially when the trigger fires.
82
- *
83
- * @param schedule - Cron expression (e.g., '0 2 * * *')
84
- * @param jobClass - CronJob class constructor (resolved at execution time)
85
- */
86
- registerJob(schedule: string, jobClass: RegisteredJob['jobClass']): void;
87
- /**
88
- * Execute all jobs matching the triggered cron expression
89
- *
90
- * Jobs are resolved from the provided request-scoped container,
91
- * ensuring dependencies (e.g. database) are properly scoped.
92
- *
93
- * Jobs are executed sequentially. If a job fails:
94
- * - Its onError() hook is called (if defined)
95
- * - Execution continues with the next job
96
- * - Errors are collected and thrown as CronExecutionError
97
- *
98
- * @param controller - Cloudflare ScheduledController
99
- * @param container - Request-scoped container to resolve jobs from
100
- */
101
- executeScheduled(controller: ScheduledController, container: Container): Promise<void>;
102
- /**
103
- * Get all registered jobs for a specific cron expression
104
- *
105
- * @param schedule - Cron expression
106
- * @returns Array of registered jobs, or empty array if none
107
- */
108
- getJobsForSchedule(schedule: string): RegisteredJob[];
109
- /**
110
- * Get all registered cron expressions
111
- *
112
- * @returns Array of unique cron expressions
113
- */
114
- getAllSchedules(): string[];
115
- /**
116
- * Get total number of registered jobs across all schedules
117
- *
118
- * @returns Total job count
119
- */
120
- getTotalJobCount(): number;
121
- }
122
- //#endregion
123
- export { CronJob as n, RegisteredJob as r, CronManager as t };
124
- //# sourceMappingURL=cron-manager-CSTIBPcM.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cron-manager-CSTIBPcM.d.mts","names":[],"sources":["../src/cron/cron-job.ts","../src/cron/cron-manager.ts"],"mappings":";;;;;;;AA8BA;;;;;;;;;;AAOA;;;;;;;;;;;;;;;UAPiB,aAAA;EAwBP;EAtBT,QAAA;EAsBuB;EApBvB,QAAA,EAAU,WAAA,CAAY,OAAA;AAAA;AAAA,UAGN,OAAA;;;;ACnBjB;;;ED0BC,OAAA,CAAQ,UAAA,EAAY,mBAAA,GAAsB,OAAA;ECYP;;;;;;;;EDFnC,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,mBAAA,GAAsB,OAAA;AAAA;;;;;AAxB1D;;;;;;;;;cCXa,WAAA;EDkBI;;;;;EAAA,QCZR,IAAA;ED6B2B;;;;;;;;;EClBnC,WAAA,CAAY,QAAA,UAAkB,QAAA,EAAU,aAAA;EDkB/B;;;;;;;;;ACpCV;;;;;EAsCO,gBAAA,CAAiB,UAAA,EAAY,mBAAA,EAAqB,SAAA,EAAW,SAAA,GAAY,OAAA;EAAA;;;;;;EAqD/E,kBAAA,CAAmB,QAAA,WAAmB,aAAA;EAzEE;;;;;EAkFxC,eAAA,CAAA;EA9DwD;;;;;EAuExD,gBAAA,CAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"di-BO1QIb5H.mjs","names":["g"],"sources":["../src/di/types.ts","../src/di/decorators/inject-param.decorator.ts","../src/di/decorators/inject.decorator.ts","../src/di/decorators.ts","../src/di/tokens.ts","../src/router/router.tokens.ts","../src/di/container.error.ts","../src/di/conditional-binding-builder.ts","../src/di/lazy.ts","../src/di/container.ts"],"sourcesContent":["import type { Constructor } from '../types'\nimport type { LazyToken } from './lazy'\n\nexport type InjectionToken<T = unknown> = Constructor<T> | string | symbol | LazyToken<T>\n\nexport enum Scope {\n Transient = 0,\n Singleton = 1,\n Request = 2,\n}\n\nexport interface WhenOptions {\n cache?: boolean\n}\n\nexport type ExtensionDecorator<T> = (service: T, container: ContainerLike) => T\n\nexport interface ContainerLike {\n resolve<T>(token: InjectionToken<T>): T\n}\n","import type { InjectionToken } from '../types'\nimport { defineMetadata, getMetadata } from '../metadata'\n\nexport const INJECT_PARAM_METADATA_KEY = Symbol.for('stratal:inject:param')\n\nexport interface ParamInjection {\n index: number\n token: InjectionToken\n}\n\nexport function InjectParam<T>(token: InjectionToken<T>): ParameterDecorator {\n return (target: object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n if (propertyKey === undefined) {\n throw new Error('@InjectParam can only be used on method parameters, not constructor parameters')\n }\n\n const existing = getMetadata<ParamInjection[]>(INJECT_PARAM_METADATA_KEY, target, propertyKey) ?? []\n existing.push({ index: parameterIndex, token })\n defineMetadata(INJECT_PARAM_METADATA_KEY, existing, target, propertyKey)\n }\n}\n\nexport function getMethodInjections(target: object, propertyKey: string | symbol): ParamInjection[] {\n const injections = getMetadata<ParamInjection[]>(INJECT_PARAM_METADATA_KEY, target, propertyKey) ?? []\n return injections.sort((a, b) => a.index - b.index)\n}\n","import type { InjectionToken } from '../types'\n\ninterface InjectionEntry {\n token: InjectionToken\n optional: boolean\n}\n\nconst INJECTION_TOKENS_KEY = Symbol.for('stratal:di:injection-tokens')\nconst g = globalThis as Record<symbol, unknown>\nconst INJECTION_TOKENS: WeakMap<object, Map<number, InjectionEntry>> =\n (g[INJECTION_TOKENS_KEY] as WeakMap<object, Map<number, InjectionEntry>>) ??\n (g[INJECTION_TOKENS_KEY] = new WeakMap<object, Map<number, InjectionEntry>>())\n\nexport function inject<T>(\n token: InjectionToken<T>,\n options?: { isOptional?: boolean },\n): ParameterDecorator {\n return (target: object, _propertyKey: string | symbol | undefined, parameterIndex: number) => {\n let params = INJECTION_TOKENS.get(target)\n if (!params) {\n params = new Map()\n INJECTION_TOKENS.set(target, params)\n }\n params.set(parameterIndex, { token, optional: options?.isOptional ?? false })\n }\n}\n\nexport function getInjectionTokens(target: object): Map<number, InjectionEntry> {\n const direct = INJECTION_TOKENS.get(target)\n if (direct && direct.size > 0) return direct\n\n let proto = Object.getPrototypeOf(target) as object | null\n while (proto !== null && proto !== Function.prototype) {\n const inherited = INJECTION_TOKENS.get(proto)\n if (inherited && inherited.size > 0) return inherited\n proto = Object.getPrototypeOf(proto) as object | null\n }\n\n return new Map<number, InjectionEntry>()\n}\n","import type { InjectionToken } from './types'\nimport { Scope } from './types'\n\nexport {\n InjectParam,\n getMethodInjections,\n type ParamInjection,\n INJECT_PARAM_METADATA_KEY,\n} from './decorators/inject-param.decorator'\n\nexport { inject, getInjectionTokens } from './decorators/inject.decorator'\n\ninterface ClassMetadata {\n scope: Scope\n token?: InjectionToken\n}\n\nconst CLASS_METADATA_KEY = Symbol.for('stratal:di:class-metadata')\nconst g = globalThis as Record<symbol, unknown>\nconst CLASS_METADATA: WeakMap<object, ClassMetadata> =\n (g[CLASS_METADATA_KEY] as WeakMap<object, ClassMetadata>) ??\n (g[CLASS_METADATA_KEY] = new WeakMap<object, ClassMetadata>())\n\nfunction scopeDecorator(scope: Scope) {\n return <T>(token?: InjectionToken<T>) =>\n <TFunction extends abstract new (...args: never[]) => unknown>(target: TFunction): TFunction => {\n CLASS_METADATA.set(target, { scope, token })\n return target\n }\n}\n\nexport const Singleton = scopeDecorator(Scope.Singleton)\nexport const Request = scopeDecorator(Scope.Request)\nexport const Transient = scopeDecorator(Scope.Transient)\n\nexport function getClassMetadata(target: object): ClassMetadata | undefined {\n const direct = CLASS_METADATA.get(target)\n if (direct) return direct\n\n let proto = Object.getPrototypeOf(target) as object | null\n while (proto !== null && proto !== Function.prototype) {\n const inherited = CLASS_METADATA.get(proto)\n if (inherited) return inherited\n proto = Object.getPrototypeOf(proto) as object | null\n }\n\n return undefined\n}\n","/**\n * Token for the Container instance\n * Used for injecting the Container into services that need dynamic resolution\n */\nexport const CONTAINER_TOKEN = Symbol.for('stratal:di:container')\n\nexport const DI_TOKENS = {\n // Cloudflare\n CloudflareEnv: Symbol.for('stratal:cloudflare:env'),\n ExecutionContext: Symbol.for('stratal:execution:context'),\n\n // Infrastructure\n Container: CONTAINER_TOKEN,\n Application: Symbol.for('stratal:application'),\n ModuleRegistry: Symbol.for('stratal:module:registry'),\n ExceptionHandler: Symbol.for('stratal:exception:handler'),\n Database: Symbol.for('stratal:database:service'),\n Queue: Symbol.for('stratal:queue:manager'),\n ConsumerRegistry: Symbol.for('stratal:consumer:registry'),\n Cron: Symbol.for('stratal:cron:manager'),\n EventRegistry: Symbol.for('stratal:event:registry'),\n Quarry: Symbol.for('stratal:quarry'),\n\n // Context\n /**\n * AuthContext: Use for services that need user authentication (userId).\n */\n AuthContext: Symbol.for('stratal:auth:context'),\n\n // Workers\n DurableObjectState: Symbol.for('stratal:durable:object:state'),\n DurableObjectId: Symbol.for('stratal:durable:object:id'),\n} as const\n\nexport type DIToken = typeof DI_TOKENS[keyof typeof DI_TOKENS]\n","/**\n * Dependency injection tokens for the router system\n */\nexport const ROUTER_TOKENS = {\n /**\n * Token for RouterContext (request-scoped)\n * Contains Hono context wrapper with helper methods\n */\n RouterContext: Symbol.for('stratal:router:context'),\n\n /**\n * Token for RouteRegistry (singleton)\n * Central registry of all application routes — source of truth for route:list, route:types, URL generation\n */\n RouteRegistry: Symbol.for('stratal:router:route-registry'),\n\n /**\n * Token for VersioningService (singleton)\n * Resolves version prefixes for route paths\n */\n VersioningService: Symbol.for('stratal:router:versioning-service'),\n\n /**\n * Token for LocalePathService (singleton)\n * Resolves locale path variants and computes LocalePathConfig\n */\n LocalePathService: Symbol.for('stratal:router:locale-path-service'),\n\n /**\n * Token for RouterResolver (singleton, may be null)\n * Internal resolver that computes effective Router config per controller\n */\n RouterResolver: Symbol.for('stratal:router:router-resolver'),\n\n /**\n * Token for HonoApp (singleton)\n * The Hono application instance with Stratal-specific setup\n */\n HonoApp: Symbol.for('stratal:router:hono-app'),\n\n /**\n * Token for Uri (request-scoped)\n * URL generation service — route URLs, signed URLs, current/previous URL access\n */\n Uri: Symbol.for('stratal:router:uri'),\n} as const\n","import { ApplicationError } from '../errors/application-error';\n\nexport class ContainerError extends ApplicationError {\n}\n","import type { Container } from './container'\nimport { ContainerError } from './container.error'\nimport type { InjectionToken, WhenOptions } from './types'\nimport type { Constructor } from '../types'\n\nexport interface PredicateContainer {\n resolve<T>(token: InjectionToken<T>): T\n isRegistered<T>(token: InjectionToken<T>): boolean\n}\n\nexport interface ConditionalBindingBuilder {\n use<T extends object>(token: InjectionToken<T>): ConditionalBindingUse<T>\n}\n\nexport interface ConditionalBindingUse<T extends object> {\n give(implementation: Constructor<T>): ConditionalBindingGive<T>\n}\n\nexport interface ConditionalBindingGive<T extends object> {\n otherwise(implementation: Constructor<T>): void\n}\n\nexport class ConditionalBindingBuilderImpl implements ConditionalBindingBuilder {\n constructor(\n private readonly container: Container,\n private readonly predicate: (container: PredicateContainer) => boolean,\n private readonly options: WhenOptions,\n ) {}\n\n use<T extends object>(token: InjectionToken<T>): ConditionalBindingUse<T> {\n return new ConditionalBindingUseImpl<T>(\n this.container,\n this.predicate,\n this.options,\n token,\n )\n }\n}\n\nclass ConditionalBindingUseImpl<T extends object> implements ConditionalBindingUse<T> {\n constructor(\n private readonly container: Container,\n private readonly predicate: (container: PredicateContainer) => boolean,\n private readonly options: WhenOptions,\n private readonly token: InjectionToken<T>,\n ) {}\n\n give(trueImpl: Constructor<T>): ConditionalBindingGive<T> {\n this.registerConditional(trueImpl, undefined)\n\n return {\n otherwise: (falseImpl: Constructor<T>) => {\n this.registerConditional(trueImpl, falseImpl)\n },\n }\n }\n\n private registerConditional(trueImpl: Constructor<T>, falseImpl: Constructor<T> | undefined): void {\n const { predicate, container, options, token } = this\n let cachedResult: boolean | undefined\n\n // Register both implementations so the container can instantiate them\n container.register(trueImpl)\n if (falseImpl) container.register(falseImpl)\n\n container.registerFactory(token, (c) => {\n let result: boolean\n if (options.cache && cachedResult !== undefined) {\n result = cachedResult\n } else {\n result = predicate(c)\n if (options.cache) cachedResult = result\n }\n\n if (result) {\n return c.resolve(trueImpl as unknown as InjectionToken<T>)\n }\n\n if (falseImpl) {\n return c.resolve(falseImpl as unknown as InjectionToken<T>)\n }\n\n const tokenStr = typeof token === 'symbol'\n ? (token.description ?? 'unknown')\n : typeof token === 'function'\n ? token.name\n : typeof token === 'string'\n ? token\n : 'lazy'\n throw new ContainerError(`No fallback registered for conditional binding \"${tokenStr}\". Use .otherwise() or register a default implementation.`)\n })\n }\n}\n","import type { Constructor } from '../types'\n\nconst LAZY_MARKER = Symbol.for('stratal:lazy')\n\nexport interface LazyToken<T = unknown> {\n [LAZY_MARKER]: true\n factory: () => Constructor<T>\n}\n\nexport function lazy<T>(factory: () => Constructor<T>): LazyToken<T> {\n return { [LAZY_MARKER]: true, factory } as LazyToken<T>\n}\n\nexport function isLazyToken(value: unknown): value is LazyToken {\n return typeof value === 'object' && value !== null && LAZY_MARKER in value\n}\n","import type { RouterContext } from '../router/router-context';\nimport { ROUTER_TOKENS } from '../router/router.tokens';\nimport type { Constructor } from '../types';\nimport { ConditionalBindingBuilderImpl, type ConditionalBindingBuilder, type PredicateContainer } from './conditional-binding-builder';\nimport { containerStorage } from './container-storage';\nimport { ContainerError } from './container.error';\nimport { getClassMetadata } from './decorators';\nimport { getInjectionTokens } from './decorators/inject.decorator';\nimport { isLazyToken, type LazyToken } from './lazy';\nimport { CONTAINER_TOKEN } from './tokens';\nimport { Scope, type ExtensionDecorator, type InjectionToken, type WhenOptions } from './types';\n\ninterface ClassRegistration {\n kind: 'class'\n useClass: Constructor\n scope: Scope\n}\n\ninterface LazyClassRegistration {\n kind: 'lazy'\n factory: () => Constructor\n scope: Scope\n}\n\ninterface ValueRegistration {\n kind: 'value'\n value: unknown\n}\n\ninterface FactoryRegistration {\n kind: 'factory'\n factory: (container: Container) => unknown\n}\n\ninterface AliasRegistration {\n kind: 'alias'\n target: InjectionToken\n}\n\ntype Registration = ClassRegistration | LazyClassRegistration | ValueRegistration | FactoryRegistration | AliasRegistration\n\nfunction tokenToString(token: InjectionToken): string {\n if (typeof token === 'symbol') return token.description ?? 'Symbol'\n if (typeof token === 'function') return token.name\n if (typeof token === 'object' && token !== null && 'factory' in token) return '(lazy)'\n return String(token)\n}\n\nexport interface ContainerOptions {\n parent?: Container\n isRequestScoped?: boolean\n}\n\nexport class Container {\n private readonly registrations = new Map<InjectionToken, Registration>()\n private readonly singletons = new Map<InjectionToken, unknown>()\n private readonly requestCache = new Map<InjectionToken, unknown>()\n private readonly parent: Container | null\n private readonly isRequestScoped: boolean\n\n constructor(options: ContainerOptions = {}) {\n this.parent = options.parent ?? null\n this.isRequestScoped = options.isRequestScoped ?? false\n\n if (!this.isRequestScoped) {\n this.registrations.set(CONTAINER_TOKEN, { kind: 'value', value: this })\n }\n }\n\n // ── Registration ──────────────────────────────────────────────\n\n register<T extends object>(serviceClass: Constructor<T>): void\n register<T extends object>(token: InjectionToken<T>, serviceClassOrLazy: Constructor<T> | LazyToken<T>): void\n register<T extends object>(\n tokenOrClass: InjectionToken<T> | Constructor<T>,\n serviceClassOrLazy?: Constructor<T> | LazyToken<T>,\n ): void {\n if (serviceClassOrLazy !== undefined && isLazyToken(serviceClassOrLazy)) {\n const lazyToken = serviceClassOrLazy\n this.registrations.set(tokenOrClass, {\n kind: 'lazy',\n factory: lazyToken.factory,\n scope: Scope.Request,\n })\n return\n }\n\n let token: InjectionToken<T>\n let impl: Constructor<T>\n\n if (serviceClassOrLazy !== undefined) {\n token = tokenOrClass\n impl = serviceClassOrLazy\n } else {\n token = tokenOrClass as Constructor<T>\n impl = tokenOrClass as Constructor<T>\n }\n\n const meta = getClassMetadata(impl)\n const scope = meta?.scope ?? Scope.Transient\n const effectiveToken = (serviceClassOrLazy === undefined && meta?.token) ? meta.token : token\n\n this.registrations.set(effectiveToken, { kind: 'class', useClass: impl, scope })\n }\n\n registerSingleton<T extends object>(serviceClass: Constructor<T>): void\n registerSingleton<T extends object>(token: InjectionToken<T>, serviceClass: Constructor<T>): void\n registerSingleton<T extends object>(\n tokenOrClass: InjectionToken<T> | Constructor<T>,\n serviceClass?: Constructor<T>,\n ): void {\n const token = serviceClass !== undefined ? tokenOrClass : tokenOrClass as Constructor<T>\n const impl = serviceClass ?? tokenOrClass as Constructor<T>\n this.registrations.set(token, { kind: 'class', useClass: impl, scope: Scope.Singleton })\n }\n\n registerValue<T>(token: InjectionToken<T>, value: T): void {\n this.registrations.set(token, { kind: 'value', value })\n if (this.isRequestScoped) {\n this.requestCache.clear()\n }\n }\n\n registerFactory<T>(token: InjectionToken<T>, factory: (container: Container) => T): void {\n this.registrations.set(token, { kind: 'factory', factory })\n }\n\n registerExisting<T>(alias: InjectionToken<T>, target: InjectionToken<T>): void {\n this.registrations.set(alias, { kind: 'alias', target })\n }\n\n // ── Resolution ────────────────────────────────────────────────\n\n resolve<T>(token: InjectionToken<T>): T {\n if (isLazyToken(token)) {\n const realToken = token.factory() as InjectionToken<T>\n return this.resolve(realToken)\n }\n\n // Check request cache (request-scoped containers)\n if (this.isRequestScoped && this.requestCache.has(token)) {\n return this.requestCache.get(token) as T\n }\n\n // Check local registrations first\n const reg = this.registrations.get(token)\n if (reg) return this.resolveRegistration(token, reg) as T\n\n // Check parent chain — request-scoped containers resolve locally to access request values\n if (this.parent) {\n const parentReg = this.parent.findRegistration(token)\n if (parentReg) {\n if (this.isRequestScoped) {\n return this.resolveRegistration(token, parentReg) as T\n }\n return this.parent.resolve(token)\n }\n }\n\n // Auto-resolve class constructors: any class with DI decorators can be\n // instantiated without explicit registration\n if (typeof token === 'function') {\n const meta = getClassMetadata(token)\n const scope = meta?.scope ?? Scope.Transient\n const classReg: ClassRegistration = { kind: 'class', useClass: token as unknown as Constructor, scope }\n this.getRoot().registrations.set(token, classReg)\n return this.resolveClass(token, classReg) as T\n }\n\n throw new ContainerError(`No provider for ${tokenToString(token)}. Did you forget to register it?`)\n }\n\n tryResolve<T>(token: InjectionToken<T>): T | undefined {\n try {\n return this.resolve(token)\n } catch {\n return undefined\n }\n }\n\n isRegistered<T>(token: InjectionToken<T>): boolean {\n if (this.registrations.has(token)) return true\n return this.parent?.isRegistered(token) ?? false\n }\n\n // ── Conditional ───────────────────────────────────────────────\n\n when(\n predicate: (container: PredicateContainer) => boolean,\n options: WhenOptions = {},\n ): ConditionalBindingBuilder {\n return new ConditionalBindingBuilderImpl(this, predicate, options)\n }\n\n extend<T>(token: InjectionToken<T>, decorator: ExtensionDecorator<T>): void {\n const current = this.resolve<T>(token)\n const decorated = decorator(current, this)\n this.registerValue(token, decorated)\n }\n\n // ── Request Scope ─────────────────────────────────────────────\n\n async runInRequestScope<T>(\n routerContext: RouterContext,\n callback: (requestContainer: Container) => T | Promise<T>,\n ): Promise<T> {\n if (this.isRequestScoped) {\n throw new ContainerError('Cannot call runInRequestScope on a request-scoped container')\n }\n\n const requestContainer = this.createRequestScope(routerContext)\n return await containerStorage.run(requestContainer, () => callback(requestContainer))\n }\n\n createRequestScope(routerContext: RouterContext): Container {\n if (this.isRequestScoped) {\n throw new ContainerError('Cannot call createRequestScope on a request-scoped container')\n }\n\n const child = new Container({ parent: this, isRequestScoped: true })\n child.registerValue(ROUTER_TOKENS.RouterContext, routerContext)\n return child\n }\n\n // ── Lifecycle ─────────────────────────────────────────────────\n\n dispose(): void {\n this.registrations.clear()\n this.singletons.clear()\n this.requestCache.clear()\n }\n\n // ── Internal ──────────────────────────────────────────────────\n\n private resolveRegistration(token: InjectionToken, reg: Registration): unknown {\n switch (reg.kind) {\n case 'value':\n return reg.value\n\n case 'alias':\n return this.resolve(reg.target)\n\n case 'factory':\n return reg.factory(this)\n\n case 'lazy': {\n const useClass = reg.factory()\n return this.resolveClass(token, { kind: 'class', useClass, scope: reg.scope })\n }\n\n case 'class':\n return this.resolveClass(token, reg)\n }\n }\n\n private resolveClass(token: InjectionToken, reg: ClassRegistration): unknown {\n const { useClass, scope } = reg\n\n // Singleton: check global cache (root or current)\n if (scope === Scope.Singleton) {\n const root = this.getRoot()\n if (root.singletons.has(token)) return root.singletons.get(token)\n const instance = this.instantiate(useClass)\n root.singletons.set(token, instance)\n return instance\n }\n\n // Request: cache in the request-scoped container\n if (scope === Scope.Request) {\n if (this.isRequestScoped) {\n if (this.requestCache.has(token)) return this.requestCache.get(token)\n const instance = this.instantiate(useClass)\n this.requestCache.set(token, instance)\n return instance\n }\n // Resolving a request-scoped service from global container — treat as transient\n }\n\n // Transient: always new instance\n return this.instantiate(useClass)\n }\n\n private instantiate(Class: Constructor): unknown {\n const injections = getInjectionTokens(Class)\n\n if (injections.size === 0) {\n return new Class()\n }\n\n const maxIndex = Math.max(...injections.keys())\n const args: unknown[] = new Array(maxIndex + 1)\n\n for (const [index, entry] of injections) {\n if (entry.optional) {\n args[index] = this.tryResolve(entry.token)\n } else {\n args[index] = this.resolve(entry.token)\n }\n }\n\n return new Class(...args)\n }\n\n findRegistration(token: InjectionToken): Registration | undefined {\n const local = this.registrations.get(token)\n if (local) return local\n return this.parent?.findRegistration(token)\n }\n\n private getRoot(): Container {\n if (!this.parent) return this\n return this.parent.getRoot()\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-DKSbuBi5.d.mts","names":[],"sources":["../src/env.ts"],"mappings":";;AAgBA;;;;;;;;;;;;;;;UAAiB,UAAA;EACf,WAAA;EACA,KAAA,EAAO,WAAA;EACP,UAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"events-D1KdDaiP.mjs","names":[],"sources":["../src/events/constants.ts","../src/events/decorators/listener.decorator.ts","../src/events/decorators/on.decorator.ts","../src/events/event-registry.ts"],"sourcesContent":["/**\n * Metadata keys for event listener decorators.\n *\n * Uses `Symbol.for()` (global symbol registry) so that both core and\n * framework packages can reference the same symbols without cross-imports.\n */\nexport const LISTENER_METADATA_KEYS = {\n IS_LISTENER: Symbol.for('stratal:listener'),\n EVENT_HANDLERS: Symbol.for('stratal:listener:handlers'),\n} as const\n","import { Transient } from '../../di/decorators'\nimport { defineMetadata, getMetadata } from '../../di/metadata'\nimport type { Constructor } from '../../types'\nimport { LISTENER_METADATA_KEYS } from '../constants'\n\n/**\n * Mark a class as an event listener.\n *\n * Applies `@Transient()` for DI and sets metadata so the module system\n * can auto-discover and wire listener handlers at bootstrap time.\n *\n * @example\n * ```typescript\n * @Listener()\n * export class UserCreatedListener {\n * @On('after.User.create')\n * async sendWelcomeEmail(context: EventContext<'after.User.create'>) {\n * // ...\n * }\n * }\n * ```\n */\nexport function Listener() {\n return function <T extends Constructor>(target: T) {\n Transient()(target)\n defineMetadata(LISTENER_METADATA_KEYS.IS_LISTENER, true, target)\n return target\n }\n}\n\n/**\n * Check if a class is decorated with `@Listener()`\n */\nexport function isListener(target: Constructor): boolean {\n return getMetadata(LISTENER_METADATA_KEYS.IS_LISTENER, target) === true\n}\n","import { defineMetadata, getMetadata } from '../../di/metadata'\nimport { LISTENER_METADATA_KEYS } from '../constants'\nimport type { EventName, EventOptions, ListenerHandlerMetadata } from '../types'\n\n/**\n * Register a method as an event handler within a `@Listener()` class.\n *\n * Accumulates handler metadata on the class so the framework can\n * auto-wire handlers with the EventRegistry at bootstrap time.\n *\n * @param event - Event name to listen for (fully typed with autocomplete)\n * @param options - Optional handler options (priority, blocking)\n *\n * @example\n * ```typescript\n * @Listener()\n * export class AuditListener {\n * @On('after.User.create')\n * async logCreate(context: EventContext<'after.User.create'>) { ... }\n *\n * @On('after.User.delete', { priority: 10 })\n * async logDelete(context: EventContext<'after.User.delete'>) { ... }\n * }\n * ```\n */\nexport function On<E extends EventName>(event: E, options?: EventOptions) {\n return function (\n target: object,\n propertyKey: string,\n _descriptor: PropertyDescriptor\n ) {\n const existingHandlers: ListenerHandlerMetadata[] =\n getMetadata<ListenerHandlerMetadata[]>(LISTENER_METADATA_KEYS.EVENT_HANDLERS, target.constructor) ?? []\n\n existingHandlers.push({\n methodName: propertyKey,\n event: event as string,\n options,\n })\n\n defineMetadata(\n LISTENER_METADATA_KEYS.EVENT_HANDLERS,\n existingHandlers,\n target.constructor\n )\n }\n}\n\n/**\n * Get all `@On()` handler metadata from a listener class\n */\nexport function getListenerHandlers(target: object): ListenerHandlerMetadata[] {\n const metadataTarget = typeof target === 'function' ? target : target.constructor\n return getMetadata<ListenerHandlerMetadata[]>(LISTENER_METADATA_KEYS.EVENT_HANDLERS, metadataTarget) ?? []\n}\n","import { inject } from '../di'\nimport { Transient } from '../di/decorators'\nimport { DI_TOKENS } from '../di/tokens'\nimport { LOGGER_TOKENS, type LoggerService } from '../logger'\nimport type {\n EventContext,\n EventHandler,\n EventName,\n EventOptions,\n IEventRegistry,\n RegisteredHandler\n} from './types'\n\n@Transient()\nexport class EventRegistry implements IEventRegistry {\n private handlers = new Map<string, RegisteredHandler[]>()\n\n constructor(\n @inject(DI_TOKENS.ExecutionContext) private readonly ctx: ExecutionContext,\n @inject(LOGGER_TOKENS.LoggerService) private readonly logger: LoggerService\n ) { }\n\n on<E extends EventName>(event: E, handler: EventHandler<E>, options?: EventOptions): void {\n const registered: RegisteredHandler = {\n handler: handler as EventHandler,\n priority: options?.priority ?? 0,\n blocking: options?.blocking\n }\n\n const existingHandlers = this.handlers.get(event) ?? []\n existingHandlers.push(registered)\n this.handlers.set(event, existingHandlers)\n\n this.logger.debug('Event handler registered', {\n event,\n priority: registered.priority,\n blocking: registered.blocking\n })\n }\n\n async emit<E extends EventName>(\n event: E,\n context?: Partial<EventContext<E>>\n ): Promise<void> {\n // Build full context with caller-provided fields\n const fullContext = {\n ...context\n } as EventContext<E>\n\n // Find matching handlers using pattern matching\n const matchingHandlers = this.findMatchingHandlers(event)\n\n if (matchingHandlers.length === 0) {\n return\n }\n\n // Sort by priority (higher first)\n const sortedHandlers = [...matchingHandlers].sort(\n (a, b) => b.priority - a.priority\n )\n\n // Determine if we should use waitUntil\n const shouldUseWaitUntil = this.shouldUseWaitUntil(event, sortedHandlers)\n\n // Execute handlers\n const promises = sortedHandlers.map((registered) =>\n this.executeHandler(registered.handler, fullContext, event)\n )\n\n if (shouldUseWaitUntil) {\n // Non-blocking: use ctx.waitUntil\n this.ctx.waitUntil(Promise.all(promises))\n } else {\n // Blocking: await all handlers\n await Promise.all(promises)\n }\n }\n\n off<E extends EventName>(event: E, handler: EventHandler<E>): void {\n const existingHandlers = this.handlers.get(event)\n if (!existingHandlers) return\n\n const filtered = existingHandlers.filter((h) => h.handler !== handler)\n if (filtered.length > 0) {\n this.handlers.set(event, filtered)\n } else {\n this.handlers.delete(event)\n }\n\n this.logger.debug('Event handler unregistered', { event })\n }\n\n once<E extends EventName>(event: E, handler: EventHandler<E>, options?: EventOptions): void {\n const wrappedHandler = (async (context: EventContext<E>) => {\n await handler(context)\n this.off(event, wrappedHandler)\n }) as EventHandler<E>\n\n this.on(event, wrappedHandler, options)\n }\n\n /**\n * Find all handlers matching the event using pattern matching.\n * Order: exact match -> model wildcard -> operation wildcard -> global wildcard\n */\n private findMatchingHandlers(event: string): RegisteredHandler[] {\n const handlers: RegisteredHandler[] = []\n\n const parts = event.split('.')\n\n if (parts.length === 3) {\n // Database event: \"phase.model.operation\"\n const [phase, model, operation] = parts\n\n // 1. Exact match: \"after.user.create\"\n handlers.push(...(this.handlers.get(event) ?? []))\n\n // 2. Model wildcard: \"after.user\"\n handlers.push(...(this.handlers.get(`${phase}.${model}`) ?? []))\n\n // 3. Operation wildcard: \"after.create\"\n handlers.push(...(this.handlers.get(`${phase}.${operation}`) ?? []))\n\n // 4. Global wildcard: \"after\"\n handlers.push(...(this.handlers.get(phase) ?? []))\n } else if (parts.length === 2) {\n // Could be wildcard like \"after.user\" or custom event like \"auth.verified\"\n handlers.push(...(this.handlers.get(event) ?? []))\n\n if (parts[0] === 'before' || parts[0] === 'after') {\n handlers.push(...(this.handlers.get(parts[0]) ?? []))\n }\n } else {\n handlers.push(...(this.handlers.get(event) ?? []))\n }\n\n return handlers\n }\n\n /**\n * Determine if we should use ctx.waitUntil (non-blocking) or await (blocking)\n */\n private shouldUseWaitUntil(\n event: string,\n handlers: RegisteredHandler[]\n ): boolean {\n const hasBlockingHandler = handlers.some((h) => h.blocking === true)\n if (hasBlockingHandler) return false\n\n const hasNonBlockingHandler = handlers.some((h) => h.blocking === false)\n if (hasNonBlockingHandler) return true\n\n const phase = event.split('.')[0]\n if (phase === 'before') return false\n if (phase === 'after') return true\n return false // Custom events block by default\n }\n\n /**\n * Execute a single handler with error isolation\n */\n private async executeHandler<E extends EventName>(\n handler: EventHandler,\n context: EventContext<E>,\n event: string\n ): Promise<void> {\n try {\n await handler(context as EventContext)\n } catch (error) {\n this.logger.error('Event handler error', {\n event,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n })\n }\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-B4UBK-2T.d.mts","names":[],"sources":["../src/macroable/types.ts","../src/macroable/macroable.ts"],"mappings":";KACY,aAAA,IAAiB,IAAA,UAAc,IAAA;;;KCEtC,WAAA,oBAA+B,IAAA;;;;;;;;AAHQ;;;;;AA+B5C;;;;;;;;;;;;;;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,EAAA,CAC/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,EAAA,CAC1E,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,EAAA,CAChE,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,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BtlE9RuO.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,MAAA,CAAO,QAAA;;;;ADfxC;;;KEIY,UAAA,GAAa,MAAA;;;;;UAMR,kBAAA,SAA2B,UAAA;EAC1C,MAAA;EACA,SAAA;AAAA;;;;;;;UCLe,QAAA;EACf,KAAA,EAAO,QAAA;EACP,OAAA;EACA,OAAA,EAAS,kBAAA;EACT,KAAA;IACE,OAAA;IACA,KAAA;IACA,IAAA;EAAA;AAAA;;;AHdJ;;;;AAAA,UIMiB,aAAA;;;;;;EAMf,MAAA,CAAO,KAAA,EAAO,QAAA;AAAA;;;cCJH,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;EACpC,MAAA,CAAO,KAAA,EAAO,QAAA;AAAA;;;;;;;;;;;;;cCLH,eAAA,YAA2B,aAAA;EAAA,iBACrB,MAAA;EAAA,iBAOA,KAAA;EAEjB,MAAA,CAAO,KAAA,EAAO,QAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CW1YHSft.d.mts","names":[],"sources":["../src/queue/queue-manager.ts","../src/queue/queue-binding.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/queue.module.ts","../src/queue/services/queue-provider-factory.ts","../src/queue/queue-registry.ts","../src/queue/decorators/inject-queue.decorator.ts","../src/queue/queue.tokens.ts","../src/queue/queue.error.ts"],"mappings":";;;;;;;cAQa,YAAA;EAAA,iBAE4C,QAAA;EAAA,iBACC,MAAA;cADD,QAAA,EAAU,gBAAA,EACT,MAAA,EAAQ,aAAA;EAG1D,YAAA,CAAa,SAAA,UAAmB,KAAA,EAAO,YAAA,GAAe,OAAA;AAAA;;;;;;KCUzD,mBAAA,GAAsB,OAAA,eACX,UAAA,GAAa,UAAA,CAAW,CAAA,UAAW,KAAA,GAAQ,CAAA,iBAAkB,UAAA;;;;;;;;KAWjE,YAAA,IAAgB,mBAAA,6BAExB,mBAAA;;;;;;;;;KC9BQ,eAAA,gBAA+B,IAAA,CAAK,YAAA,CAAa,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;UA0B5C,YAAA;EDVZ;;;;;;;;;;ECqBH,QAAA,IAAY,OAAA,EAAS,eAAA,CAAgB,CAAA,IAAK,OAAA;AAAA;;;;;;;;;AFtC5C;;;;;;;;;;;;;UGciB,cAAA;EHViD;;;;;;;;;;EGqBhE,IAAA,IAAQ,OAAA,UAAiB,OAAA,EAAS,YAAA,CAAa,CAAA,IAAK,OAAA;AAAA;;;;;;;AHzBtD;;;;;;;;;cIea,uBAAA,YAAmC,cAAA;EAAA,iBAEM,GAAA;cAAA,GAAA,EAAK,UAAA;EJdQ;;;;;;;EIwB3D,IAAA,GAAA,CAAQ,OAAA,UAAiB,OAAA,EAAS,YAAA,CAAa,CAAA,IAAK,OAAA;AAAA;;;;;;;AJ3B5D;;;;;;;;;;;;;;;;;;;;;;;;;cK8Ba,iBAAA,YAA6B,cAAA;EAAA,iBAEe,QAAA;cAAA,QAAA,EAAU,gBAAA;;;;;;;;;;;EAa3D,IAAA,GAAA,CAAQ,QAAA,UAAkB,OAAA,EAAS,YAAA,CAAa,CAAA,IAAK,OAAA;AAAA;;;;;;;AL7C7D;;;;;;;;;;;;;;;;;;cMoBa,WAAA,YAAuB,YAAA;EAAA,iBAEf,OAAA;EAAA,iBACA,QAAA;EAAA,iBACA,IAAA;cAFA,OAAA,UACA,QAAA,EAAU,cAAA,EACV,IAAA,EAAM,YAAA;;;;ALZa;;EKoBhC,QAAA,GAAA,CAAY,OAAA,EAAS,eAAA,CAAgB,CAAA,IAAK,OAAA;AAAA;;;;;;UCCjC,kBAAA;;ANrBuB;;;;EM2BtC,QAAA;AAAA;AAAA,cAUW,WAAA;EN/B8C;;;;;;;;;;;;;;;AAW3D;;;EAX2D,OMkDlD,YAAA,CAAa,OAAA,EAAS,kBAAA,CAAmB,kBAAA,IAAsB,aAAA;ENrCjD;;;;AC9BvB;;;;;;;;;;;;;;AA0BA;;EDIuB,OMsEd,aAAA,CAAc,OAAA,EAAS,YAAA,GAAe,aAAA;AAAA;;;;;;APrG/C;;;;;;;;;;;;;;;;;;;;cQ2Ba,oBAAA;EAAA,iBAEyC,GAAA;EAAA,iBACG,QAAA;EAAA,iBAC2B,OAAA;cAF9B,GAAA,EAAK,UAAA,EACF,QAAA,EAAU,gBAAA,EACiB,OAAA,GAAU,kBAAA;;APnBtD;;;;;EO4BtC,MAAA,CAAA,GAAU,cAAA;AAAA;;;;;;;ARxCZ;;;;;;;;;;;;;;;;;;;;;;;cS+Ba,aAAA;EAAA,iBAMyC,IAAA;EAAA,iBALnC,QAAA;EAAA,iBACA,OAAA;cAG4B,eAAA,EAAiB,oBAAA,EACV,IAAA,EAAM,YAAA;;;;;;;;;EAa1D,QAAA,CAAS,OAAA,WAAkB,YAAA;AAAA;;;;;;;;;ATlD7B;;;;;;;;;;;;;;;;;;;;;;iBUwBgB,WAAA,CAAY,OAAA,EAAS,YAAA,GAAe,kBAAA;;;cC/BvC,YAAA;EAAA;;;;KAMD,UAAA,WAAqB,YAAA,eAA2B,YAAA;;;cCJ/C,UAAA,SAAmB,gBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DEncMcC6.d.mts","names":[],"sources":["../src/errors/application-error.ts","../src/di/tokens.ts","../src/router/route-map.ts","../src/router/constants.ts","../src/router/types.ts","../src/execution-context.ts","../src/di/lazy.ts","../src/di/types.ts","../src/module/types.ts","../src/quarry/types.ts","../src/router/controller.ts","../src/router/middleware.interface.ts","../src/router/hono-app.ts","../src/router/services/locale-path.service.ts","../src/router/router.internals.ts","../src/router/router.ts","../src/module/module-registry.ts","../src/router/services/versioning.service.ts","../src/router/route-registry.ts","../src/router/router-resolver.ts","../src/router/services/route-registration.service.ts","../src/router/router.tokens.ts","../src/router/route-url.ts","../src/router/utils/path.ts","../src/router/utils/route-name.ts","../src/router/middleware/middleware-chain.ts","../src/router/decorators/controller.decorator.ts","../src/router/decorators/http-method.decorator.ts","../src/router/decorators/route.decorator.ts","../src/router/schemas/common.schemas.ts","../src/router/middleware/domain.middleware.ts","../src/router/middleware/verify-signature.middleware.ts","../src/router/signed-url.ts","../src/router/router.error.ts","../src/router/errors/route-not-found.error.ts","../src/router/errors/schema-validation.error.ts","../src/router/errors/index.ts","../src/application.ts","../src/router/uri.ts","../src/router/router-context.ts","../src/di/conditional-binding-builder.ts","../src/di/container.ts","../src/di/container.error.ts","../src/di/decorators/inject-param.decorator.ts","../src/di/decorators/inject.decorator.ts","../src/di/decorators.ts","../src/di/metadata.ts","../src/di/container-storage.ts","../src/errors/error-response.ts","../src/errors/exception-context.ts","../src/errors/exception-handler.types.ts","../src/errors/exception-handler.ts","../src/errors/default-exception-handler.ts","../src/errors/http-exception.ts","../src/errors/internal-error.ts","../src/errors/is-application-error.ts","../src/errors/container-not-initialized.error.ts","../src/errors/stratal-not-initialized.error.ts","../src/errors/database.error.ts","../src/errors/auth.error.ts"],"mappings":"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"}