stratal 0.0.20 → 0.0.22

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 (247) hide show
  1. package/README.md +1 -1
  2. package/dist/{base-email.provider-CfQCA08m.mjs → base-email.provider-BWZHIjt8.mjs} +1 -1
  3. package/dist/{base-email.provider-CfQCA08m.mjs.map → base-email.provider-BWZHIjt8.mjs.map} +1 -1
  4. package/dist/bin/cloudflare-workers-loader.mjs.map +1 -1
  5. package/dist/bin/quarry.mjs +46 -109
  6. package/dist/bin/quarry.mjs.map +1 -1
  7. package/dist/cache/index.d.mts +6 -46
  8. package/dist/cache/index.d.mts.map +1 -1
  9. package/dist/cache/index.mjs +22 -67
  10. package/dist/cache/index.mjs.map +1 -1
  11. package/dist/{cache.service-DsnKuNyO.d.mts → cache.service-e34gV6tz.d.mts} +8 -8
  12. package/dist/{cache.service-DsnKuNyO.d.mts.map → cache.service-e34gV6tz.d.mts.map} +1 -1
  13. package/dist/{cache.tokens-B7Rw1C9Q.mjs → cache.tokens-ovi_c52J.mjs} +1 -1
  14. package/dist/{cache.tokens-B7Rw1C9Q.mjs.map → cache.tokens-ovi_c52J.mjs.map} +1 -1
  15. package/dist/{colors-DJaRDXoS.mjs → colors-axmupKdp.mjs} +1 -1
  16. package/dist/{colors-DJaRDXoS.mjs.map → colors-axmupKdp.mjs.map} +1 -1
  17. package/dist/{command-BgSlsS4M.mjs → command-BU4ApTo5.mjs} +2 -3
  18. package/dist/command-BU4ApTo5.mjs.map +1 -0
  19. package/dist/{command-Bu-PjJrX.d.mts → command-wXfvHbBZ.d.mts} +3 -2
  20. package/dist/command-wXfvHbBZ.d.mts.map +1 -0
  21. package/dist/config/index.d.mts +24 -11
  22. package/dist/config/index.d.mts.map +1 -1
  23. package/dist/config/index.mjs +33 -57
  24. package/dist/config/index.mjs.map +1 -1
  25. package/dist/{consumer-registry-B7yUNh0q.d.mts → consumer-registry-DHQtypr1.d.mts} +1 -1
  26. package/dist/{consumer-registry-B7yUNh0q.d.mts.map → consumer-registry-DHQtypr1.d.mts.map} +1 -1
  27. package/dist/container-storage-GpNNz79X.mjs +52 -0
  28. package/dist/container-storage-GpNNz79X.mjs.map +1 -0
  29. package/dist/{controller.decorator-DQzenvSN.mjs → controller.decorator-DIUazNU7.mjs} +8 -8
  30. package/dist/controller.decorator-DIUazNU7.mjs.map +1 -0
  31. package/dist/cron/index.d.mts +26 -5
  32. package/dist/cron/index.d.mts.map +1 -1
  33. package/dist/cron/index.mjs +1 -1
  34. package/dist/{cron-manager-7Symz_TE.mjs → cron-manager-9bpN9bu4.mjs} +42 -16
  35. package/dist/cron-manager-9bpN9bu4.mjs.map +1 -0
  36. package/dist/{cron-manager-BEsH1mjW.d.mts → cron-manager-CSTIBPcM.d.mts} +6 -13
  37. package/dist/cron-manager-CSTIBPcM.d.mts.map +1 -0
  38. package/dist/decorate-HgTKAYK8.mjs +16 -0
  39. package/dist/deep-merge-C8NgcXw4.mjs +18 -0
  40. package/dist/deep-merge-C8NgcXw4.mjs.map +1 -0
  41. package/dist/di/index.d.mts +2 -2
  42. package/dist/di/index.mjs +4 -3
  43. package/dist/di-BO1QIb5H.mjs +415 -0
  44. package/dist/di-BO1QIb5H.mjs.map +1 -0
  45. package/dist/email/index.d.mts +14 -89
  46. package/dist/email/index.d.mts.map +1 -1
  47. package/dist/email/index.mjs +30 -125
  48. package/dist/email/index.mjs.map +1 -1
  49. package/dist/en-BPP6h6y5.mjs +202 -0
  50. package/dist/en-BPP6h6y5.mjs.map +1 -0
  51. package/dist/{env-D1rcZ8_r.d.mts → env-DKSbuBi5.d.mts} +1 -1
  52. package/dist/env-DKSbuBi5.d.mts.map +1 -0
  53. package/dist/errors/index.d.mts +2 -2
  54. package/dist/errors/index.mjs +4 -2
  55. package/dist/errors-BBZTnjdq.mjs +333 -0
  56. package/dist/errors-BBZTnjdq.mjs.map +1 -0
  57. package/dist/events/index.d.mts +2 -2
  58. package/dist/events/index.d.mts.map +1 -1
  59. package/dist/events/index.mjs +1 -1
  60. package/dist/{events-COKixqnG.mjs → events-D1KdDaiP.mjs} +13 -11
  61. package/dist/events-D1KdDaiP.mjs.map +1 -0
  62. package/dist/exception-context-B4kM-M53.mjs +429 -0
  63. package/dist/exception-context-B4kM-M53.mjs.map +1 -0
  64. package/dist/{gateway-context-CdJjpUCW.mjs → gateway-context-CFe6a9gz.mjs} +20 -31
  65. package/dist/gateway-context-CFe6a9gz.mjs.map +1 -0
  66. package/dist/guards/index.d.mts +3 -3
  67. package/dist/guards/index.d.mts.map +1 -1
  68. package/dist/guards/index.mjs +1 -1
  69. package/dist/{guards-DUk_Kzst.mjs → guards-Ced-uNIF.mjs} +7 -5
  70. package/dist/guards-Ced-uNIF.mjs.map +1 -0
  71. package/dist/{http-method.decorator-DXwxAfb_.mjs → http-method.decorator-CdjKFJZZ.mjs} +7 -6
  72. package/dist/http-method.decorator-CdjKFJZZ.mjs.map +1 -0
  73. package/dist/i18n/index.d.mts +238 -3
  74. package/dist/i18n/index.d.mts.map +1 -0
  75. package/dist/i18n/index.mjs +39 -3
  76. package/dist/i18n/index.mjs.map +1 -0
  77. package/dist/i18n/messages/en/index.d.mts +2 -2
  78. package/dist/i18n/messages/en/index.mjs +2 -2
  79. package/dist/i18n/utils/index.d.mts +4 -26
  80. package/dist/i18n/utils/index.d.mts.map +1 -1
  81. package/dist/i18n/utils/index.mjs +2 -2
  82. package/dist/i18n/validation/index.d.mts +3 -2
  83. package/dist/i18n/validation/index.mjs +4 -2
  84. package/dist/i18n.module-BlXrtAlV.mjs +219 -0
  85. package/dist/i18n.module-BlXrtAlV.mjs.map +1 -0
  86. package/dist/i18n.tokens-hwRpmjRq.mjs +19 -0
  87. package/dist/i18n.tokens-hwRpmjRq.mjs.map +1 -0
  88. package/dist/{index-7-hU3GTV.d.mts → index-B4UBK-2T.d.mts} +1 -1
  89. package/dist/{index-7-hU3GTV.d.mts.map → index-B4UBK-2T.d.mts.map} +1 -1
  90. package/dist/index-BtlE9RuO.d.mts +124 -0
  91. package/dist/index-BtlE9RuO.d.mts.map +1 -0
  92. package/dist/{index-CjaQ6_tZ.d.mts → index-CW1YHSft.d.mts} +71 -167
  93. package/dist/index-CW1YHSft.d.mts.map +1 -0
  94. package/dist/{index-D0US0X14.d.mts → index-DEncMcC6.d.mts} +559 -2239
  95. package/dist/index-DEncMcC6.d.mts.map +1 -0
  96. package/dist/index-Dj5IMwtr.d.mts +44 -0
  97. package/dist/index-Dj5IMwtr.d.mts.map +1 -0
  98. package/dist/{index-C1KvMncZ.d.mts → index-KMgSCSM7.d.mts} +3 -108
  99. package/dist/index-KMgSCSM7.d.mts.map +1 -0
  100. package/dist/index.d.mts +5 -43
  101. package/dist/index.mjs +1 -1
  102. package/dist/{is-command-C6a7WTPw.mjs → is-command-CX5rAfZW.mjs} +2 -2
  103. package/dist/{is-command-C6a7WTPw.mjs.map → is-command-CX5rAfZW.mjs.map} +1 -1
  104. package/dist/{is-seeder-CebjZCDn.mjs → is-seeder-CYCtELlm.mjs} +1 -1
  105. package/dist/{is-seeder-CebjZCDn.mjs.map → is-seeder-CYCtELlm.mjs.map} +1 -1
  106. package/dist/logger/index.d.mts +2 -2
  107. package/dist/logger/index.mjs +170 -2
  108. package/dist/logger/index.mjs.map +1 -0
  109. package/dist/macroable/index.d.mts +1 -1
  110. package/dist/macroable/index.mjs +1 -1
  111. package/dist/{macroable-BmufBshB.mjs → macroable-DzlfzT50.mjs} +1 -1
  112. package/dist/{macroable-BmufBshB.mjs.map → macroable-DzlfzT50.mjs.map} +1 -1
  113. package/dist/metadata-BVkc4aUu.mjs +39 -0
  114. package/dist/metadata-BVkc4aUu.mjs.map +1 -0
  115. package/dist/module/index.d.mts +6 -24
  116. package/dist/module/index.d.mts.map +1 -1
  117. package/dist/module/index.mjs +2 -2
  118. package/dist/module-xYoHba6B.mjs +422 -0
  119. package/dist/module-xYoHba6B.mjs.map +1 -0
  120. package/dist/openapi/index.d.mts +3 -3
  121. package/dist/openapi/index.d.mts.map +1 -1
  122. package/dist/openapi/index.mjs +1 -2
  123. package/dist/openapi-C6lm0RmV.mjs +483 -0
  124. package/dist/openapi-C6lm0RmV.mjs.map +1 -0
  125. package/dist/{openapi.service-BLgvn3hJ.d.mts → openapi.service-CrLlsXAd.d.mts} +3 -3
  126. package/dist/openapi.service-CrLlsXAd.d.mts.map +1 -0
  127. package/dist/quarry/index.d.mts +5 -163
  128. package/dist/quarry/index.d.mts.map +1 -1
  129. package/dist/quarry/index.mjs +5 -5
  130. package/dist/quarry/runner.d.mts +184 -0
  131. package/dist/quarry/runner.d.mts.map +1 -0
  132. package/dist/quarry/runner.mjs +775 -0
  133. package/dist/quarry/runner.mjs.map +1 -0
  134. package/dist/quarry-registry-D4hIGScf.d.mts +69 -0
  135. package/dist/quarry-registry-D4hIGScf.d.mts.map +1 -0
  136. package/dist/quarry-registry-DkraZNwn.mjs +311 -0
  137. package/dist/quarry-registry-DkraZNwn.mjs.map +1 -0
  138. package/dist/queue/index.d.mts +3 -3
  139. package/dist/queue/index.mjs +27 -28
  140. package/dist/queue/index.mjs.map +1 -1
  141. package/dist/{queue.module-BCdCiySt.mjs → queue.module-DeWJ0tQM.mjs} +67 -112
  142. package/dist/queue.module-DeWJ0tQM.mjs.map +1 -0
  143. package/dist/{r2-storage.provider-Co6F0ZYV.mjs → r2-storage.provider-Hfm6LdZQ.mjs} +8 -5
  144. package/dist/r2-storage.provider-Hfm6LdZQ.mjs.map +1 -0
  145. package/dist/{rate-limit.decorator--o6Q6p9w.mjs → rate-limit.decorator-D69zdZbp.mjs} +6 -11
  146. package/dist/rate-limit.decorator-D69zdZbp.mjs.map +1 -0
  147. package/dist/rate-limiter/index.d.mts +11 -50
  148. package/dist/rate-limiter/index.d.mts.map +1 -1
  149. package/dist/rate-limiter/index.mjs +25 -30
  150. package/dist/rate-limiter/index.mjs.map +1 -1
  151. package/dist/{resend.provider-M6qRLrcy.mjs → resend.provider-Ur6tU7fK.mjs} +8 -7
  152. package/dist/resend.provider-Ur6tU7fK.mjs.map +1 -0
  153. package/dist/router/index.d.mts +2 -2
  154. package/dist/router/index.mjs +8 -7
  155. package/dist/{i18n.module-BBlNNlcG.mjs → router-Cy6DjkvP.mjs} +215 -855
  156. package/dist/router-Cy6DjkvP.mjs.map +1 -0
  157. package/dist/seeder/index.d.mts +6 -11
  158. package/dist/seeder/index.d.mts.map +1 -1
  159. package/dist/seeder/index.mjs +3 -3
  160. package/dist/{seeder-CJAOHEIo.mjs → seeder-BADTig4n.mjs} +17 -22
  161. package/dist/seeder-BADTig4n.mjs.map +1 -0
  162. package/dist/{signed-url-BQPbv2In.mjs → signed-url-BqUqt5dF.mjs} +1 -1
  163. package/dist/{signed-url-BQPbv2In.mjs.map → signed-url-BqUqt5dF.mjs.map} +1 -1
  164. package/dist/{smtp.provider-w0Ve52Xg.mjs → smtp.provider-C129sNBT.mjs} +7 -6
  165. package/dist/smtp.provider-C129sNBT.mjs.map +1 -0
  166. package/dist/storage/index.d.mts +15 -39
  167. package/dist/storage/index.d.mts.map +1 -1
  168. package/dist/storage/index.mjs +3 -3
  169. package/dist/storage/providers/index.d.mts +2 -2
  170. package/dist/storage/providers/index.mjs +1 -1
  171. package/dist/{storage-1zw-6Yiz.mjs → storage-BA3ppVYM.mjs} +70 -59
  172. package/dist/storage-BA3ppVYM.mjs.map +1 -0
  173. package/dist/{storage-provider.interface-Bd6vA4ak.d.mts → storage-provider.interface-DQMtT42e.d.mts} +2 -3
  174. package/dist/storage-provider.interface-DQMtT42e.d.mts.map +1 -0
  175. package/dist/storage.error-C6FY037a.mjs +8 -0
  176. package/dist/storage.error-C6FY037a.mjs.map +1 -0
  177. package/dist/{stratal-DeEcGgdq.mjs → stratal-Bdq4IdB3.mjs} +31 -183
  178. package/dist/stratal-Bdq4IdB3.mjs.map +1 -0
  179. package/dist/stratal-BsKmvP6J.d.mts +43 -0
  180. package/dist/stratal-BsKmvP6J.d.mts.map +1 -0
  181. package/dist/{types-cySNS_lp.d.mts → types-BaeHi67f.d.mts} +1 -1
  182. package/dist/types-BaeHi67f.d.mts.map +1 -0
  183. package/dist/{usage-generator-BUdlhnCK.mjs → usage-generator-DTqaUMR9.mjs} +6 -3
  184. package/dist/usage-generator-DTqaUMR9.mjs.map +1 -0
  185. package/dist/validation-DUzcjb8Q.mjs +49 -0
  186. package/dist/validation-DUzcjb8Q.mjs.map +1 -0
  187. package/dist/validation.context-XTysWJ3b.mjs +117 -0
  188. package/dist/validation.context-XTysWJ3b.mjs.map +1 -0
  189. package/dist/websocket/index.d.mts +7 -14
  190. package/dist/websocket/index.d.mts.map +1 -1
  191. package/dist/websocket/index.mjs +2 -2
  192. package/dist/workers/index.d.mts +2 -2
  193. package/dist/workers/index.mjs +3 -2
  194. package/dist/workers/index.mjs.map +1 -1
  195. package/dist/{index-Bnpfq6uk.d.mts → zod-DvWTfRpI.d.mts} +58 -133
  196. package/dist/zod-DvWTfRpI.d.mts.map +1 -0
  197. package/dist/zod-hMa3rSHV.mjs +72 -0
  198. package/dist/zod-hMa3rSHV.mjs.map +1 -0
  199. package/package.json +20 -20
  200. package/dist/command-BgSlsS4M.mjs.map +0 -1
  201. package/dist/command-Bu-PjJrX.d.mts.map +0 -1
  202. package/dist/controller.decorator-DQzenvSN.mjs.map +0 -1
  203. package/dist/cron-manager-7Symz_TE.mjs.map +0 -1
  204. package/dist/cron-manager-BEsH1mjW.d.mts.map +0 -1
  205. package/dist/en-DSH_bhh6.mjs +0 -308
  206. package/dist/en-DSH_bhh6.mjs.map +0 -1
  207. package/dist/env-D1rcZ8_r.d.mts.map +0 -1
  208. package/dist/errors-BdyV5PnY.mjs +0 -1725
  209. package/dist/errors-BdyV5PnY.mjs.map +0 -1
  210. package/dist/errors-Da3Pz2X7.mjs +0 -74
  211. package/dist/errors-Da3Pz2X7.mjs.map +0 -1
  212. package/dist/events-COKixqnG.mjs.map +0 -1
  213. package/dist/gateway-context-CdJjpUCW.mjs.map +0 -1
  214. package/dist/guards-DUk_Kzst.mjs.map +0 -1
  215. package/dist/http-method.decorator-DXwxAfb_.mjs.map +0 -1
  216. package/dist/i18n.module-BBlNNlcG.mjs.map +0 -1
  217. package/dist/index-Bnpfq6uk.d.mts.map +0 -1
  218. package/dist/index-C1KvMncZ.d.mts.map +0 -1
  219. package/dist/index-CjaQ6_tZ.d.mts.map +0 -1
  220. package/dist/index-D0US0X14.d.mts.map +0 -1
  221. package/dist/index-DBd_2wv8.d.mts +0 -263
  222. package/dist/index-DBd_2wv8.d.mts.map +0 -1
  223. package/dist/index.d.mts.map +0 -1
  224. package/dist/logger-V6Ms3QnQ.mjs +0 -436
  225. package/dist/logger-V6Ms3QnQ.mjs.map +0 -1
  226. package/dist/module-Dk2qTa77.mjs +0 -860
  227. package/dist/module-Dk2qTa77.mjs.map +0 -1
  228. package/dist/openapi-tools.service-Zs-Ewv7F.mjs +0 -200
  229. package/dist/openapi-tools.service-Zs-Ewv7F.mjs.map +0 -1
  230. package/dist/openapi.service-BLgvn3hJ.d.mts.map +0 -1
  231. package/dist/quarry-registry-DNEej-Db.mjs +0 -688
  232. package/dist/quarry-registry-DNEej-Db.mjs.map +0 -1
  233. package/dist/queue.module-BCdCiySt.mjs.map +0 -1
  234. package/dist/r2-storage.provider-Co6F0ZYV.mjs.map +0 -1
  235. package/dist/rate-limit.decorator--o6Q6p9w.mjs.map +0 -1
  236. package/dist/resend.provider-M6qRLrcy.mjs.map +0 -1
  237. package/dist/seeder-CJAOHEIo.mjs.map +0 -1
  238. package/dist/setup-CefZKV_e.mjs +0 -37
  239. package/dist/setup-CefZKV_e.mjs.map +0 -1
  240. package/dist/smtp.provider-w0Ve52Xg.mjs.map +0 -1
  241. package/dist/storage-1zw-6Yiz.mjs.map +0 -1
  242. package/dist/storage-provider.interface-Bd6vA4ak.d.mts.map +0 -1
  243. package/dist/stratal-DeEcGgdq.mjs.map +0 -1
  244. package/dist/types-cySNS_lp.d.mts.map +0 -1
  245. package/dist/usage-generator-BUdlhnCK.mjs.map +0 -1
  246. package/dist/validation-DtJwAv7O.mjs +0 -248
  247. package/dist/validation-DtJwAv7O.mjs.map +0 -1
@@ -0,0 +1,219 @@
1
+ import { l as Request, m as inject, o as ROUTER_TOKENS, u as Singleton } from "./di-BO1QIb5H.mjs";
2
+ import { n as __decorateParam, t as __decorate } from "./decorate-HgTKAYK8.mjs";
3
+ import { f as Module } from "./module-xYoHba6B.mjs";
4
+ import { t as I18N_TOKENS } from "./i18n.tokens-hwRpmjRq.mjs";
5
+ import { r as z } from "./zod-hMa3rSHV.mjs";
6
+ import "./router-Cy6DjkvP.mjs";
7
+ import { t as en_exports } from "./en-BPP6h6y5.mjs";
8
+ import { t as deepMerge } from "./deep-merge-C8NgcXw4.mjs";
9
+ import { t as zodErrorMap } from "./validation.context-XTysWJ3b.mjs";
10
+ import IntlMessageFormat from "intl-messageformat";
11
+ //#region src/i18n/services/i18n.service.ts
12
+ let I18nService = class I18nService {
13
+ loader;
14
+ routerContext;
15
+ constructor(loader, routerContext) {
16
+ this.loader = loader;
17
+ this.routerContext = routerContext;
18
+ }
19
+ t(key, params) {
20
+ return this.loader.translate(this.getLocale(), key, params);
21
+ }
22
+ getLocale() {
23
+ return this.routerContext?.getLocale() ?? "en";
24
+ }
25
+ };
26
+ I18nService = __decorate([
27
+ Request(I18N_TOKENS.I18nService),
28
+ __decorateParam(0, inject(I18N_TOKENS.MessageLoader)),
29
+ __decorateParam(1, inject(ROUTER_TOKENS.RouterContext, { isOptional: true }))
30
+ ], I18nService);
31
+ //#endregion
32
+ //#region src/i18n/messages/index.ts
33
+ /**
34
+ * Core Messages
35
+ *
36
+ * Messages used by packages/modules infrastructure.
37
+ * These are automatically merged with application-specific messages.
38
+ */
39
+ /**
40
+ * All locale messages
41
+ * Explicitly import and export (no filesystem scanning - Cloudflare Workers compatible)
42
+ */
43
+ const messages = { en: en_exports };
44
+ /**
45
+ * Get messages for all locales
46
+ */
47
+ function getMessages() {
48
+ return messages;
49
+ }
50
+ /**
51
+ * Get available locales
52
+ */
53
+ function getLocales() {
54
+ return Object.keys(messages);
55
+ }
56
+ //#endregion
57
+ //#region src/i18n/services/message-loader.service.ts
58
+ let MessageLoaderService = class MessageLoaderService {
59
+ registry;
60
+ options;
61
+ cache;
62
+ compiledCache;
63
+ locales;
64
+ defaultLocale;
65
+ constructor(registry, options) {
66
+ this.registry = registry;
67
+ this.options = options;
68
+ this.defaultLocale = this.options?.defaultLocale ?? "en";
69
+ this.cache = /* @__PURE__ */ new Map();
70
+ this.compiledCache = /* @__PURE__ */ new Map();
71
+ const coreMessages = getMessages();
72
+ const coreLocales = getLocales();
73
+ const registryMessages = this.registry.getMergedMessages();
74
+ const registryLocales = Object.keys(registryMessages);
75
+ const allLocales = [...new Set([...coreLocales, ...registryLocales])];
76
+ this.locales = allLocales;
77
+ for (const locale of allLocales) {
78
+ const merged = deepMerge(coreMessages[locale] ?? {}, registryMessages[locale] ?? {});
79
+ this.cache.set(locale, merged);
80
+ }
81
+ }
82
+ translate(locale, key, params) {
83
+ const fn = this.getCompiledMessages(locale)[key];
84
+ if (!fn) return key;
85
+ return fn(params);
86
+ }
87
+ getMessages(locale) {
88
+ return this.cache.get(locale) ?? this.cache.get(this.defaultLocale) ?? {};
89
+ }
90
+ getAvailableLocales() {
91
+ return this.locales;
92
+ }
93
+ isLocaleSupported(locale) {
94
+ return this.cache.has(locale);
95
+ }
96
+ getDefaultLocale() {
97
+ return this.defaultLocale;
98
+ }
99
+ getFilteredMessages(locale, options) {
100
+ const messages = this.getMessages(locale);
101
+ const flattened = this.flattenMessages(messages);
102
+ if (!options?.only?.length) return flattened;
103
+ const result = {};
104
+ for (const [key, value] of Object.entries(flattened)) if (options.only.some((prefix) => key === prefix || key.startsWith(`${prefix}.`))) result[key] = value;
105
+ return result;
106
+ }
107
+ getCompiledMessages(locale) {
108
+ const effectiveLocale = this.cache.has(locale) ? locale : this.defaultLocale;
109
+ const cached = this.compiledCache.get(effectiveLocale);
110
+ if (cached) return cached;
111
+ const messages = this.cache.get(effectiveLocale) ?? {};
112
+ const flattened = this.flattenMessages(messages);
113
+ const compiled = {};
114
+ for (const [key, value] of Object.entries(flattened)) {
115
+ const msg = new IntlMessageFormat(value, effectiveLocale);
116
+ compiled[key] = (params) => String(msg.format(params));
117
+ }
118
+ this.compiledCache.set(effectiveLocale, compiled);
119
+ return compiled;
120
+ }
121
+ flattenMessages(messages, prefix = "") {
122
+ const result = {};
123
+ for (const key of Object.keys(messages)) {
124
+ const value = messages[key];
125
+ const newKey = prefix ? `${prefix}.${key}` : key;
126
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) Object.assign(result, this.flattenMessages(value, newKey));
127
+ else result[newKey] = String(value);
128
+ }
129
+ return result;
130
+ }
131
+ };
132
+ MessageLoaderService = __decorate([
133
+ Singleton(I18N_TOKENS.MessageLoader),
134
+ __decorateParam(0, inject(I18N_TOKENS.MessageRegistry)),
135
+ __decorateParam(1, inject(I18N_TOKENS.Options, { isOptional: true }))
136
+ ], MessageLoaderService);
137
+ //#endregion
138
+ //#region src/i18n/services/message-registry.ts
139
+ /**
140
+ * Global key for the shared contributions array.
141
+ *
142
+ * When stratal is installed via portal/symlink (e.g., in monorepos), bundlers
143
+ * like esbuild may inline multiple copies of this module. Each copy gets its
144
+ * own static class fields, so messages registered by one copy are invisible
145
+ * to another. Using a `Symbol.for()` key on `globalThis` ensures all copies
146
+ * share the same contributions array.
147
+ */
148
+ const CONTRIBUTIONS_KEY = Symbol.for("stratal:i18n:message-registry:contributions");
149
+ function getContributions() {
150
+ const g = globalThis;
151
+ g[CONTRIBUTIONS_KEY] ??= [];
152
+ return g[CONTRIBUTIONS_KEY];
153
+ }
154
+ let MessageRegistry = class MessageRegistry {
155
+ /**
156
+ * Add messages (called statically by I18nModule.registerMessages)
157
+ */
158
+ static addMessages(messages) {
159
+ if (Boolean(messages) && typeof messages === "object" && Object.keys(messages).length > 0) getContributions().push(messages);
160
+ }
161
+ /**
162
+ * Get all messages deep-merged in registration order
163
+ */
164
+ getMergedMessages() {
165
+ const merged = {};
166
+ for (const contribution of getContributions()) for (const locale of Object.keys(contribution)) merged[locale] = deepMerge(merged[locale] ?? {}, contribution[locale]);
167
+ return merged;
168
+ }
169
+ /**
170
+ * Reset registry (for testing)
171
+ * @internal
172
+ */
173
+ static reset() {
174
+ globalThis[CONTRIBUTIONS_KEY] = [];
175
+ }
176
+ };
177
+ MessageRegistry = __decorate([Singleton(I18N_TOKENS.MessageRegistry)], MessageRegistry);
178
+ //#endregion
179
+ //#region src/i18n/i18n.module.ts
180
+ var _I18nModule;
181
+ let I18nModule = _I18nModule = class I18nModule {
182
+ onInitialize(_context) {
183
+ z.config({ customError: zodErrorMap });
184
+ }
185
+ static forRoot(options = {}) {
186
+ return {
187
+ module: _I18nModule,
188
+ providers: [{
189
+ provide: I18N_TOKENS.Options,
190
+ useValue: options
191
+ }]
192
+ };
193
+ }
194
+ static registerMessages(messages) {
195
+ MessageRegistry.addMessages(messages);
196
+ return {
197
+ module: _I18nModule,
198
+ providers: []
199
+ };
200
+ }
201
+ };
202
+ I18nModule = _I18nModule = __decorate([Module({ providers: [
203
+ {
204
+ provide: I18N_TOKENS.MessageRegistry,
205
+ useClass: MessageRegistry
206
+ },
207
+ {
208
+ provide: I18N_TOKENS.MessageLoader,
209
+ useClass: MessageLoaderService
210
+ },
211
+ {
212
+ provide: I18N_TOKENS.I18nService,
213
+ useClass: I18nService
214
+ }
215
+ ] })], I18nModule);
216
+ //#endregion
217
+ export { getMessages as a, getLocales as i, MessageRegistry as n, messages as o, MessageLoaderService as r, I18nModule as t };
218
+
219
+ //# sourceMappingURL=i18n.module-BlXrtAlV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.module-BlXrtAlV.mjs","names":[],"sources":["../src/i18n/services/i18n.service.ts","../src/i18n/messages/index.ts","../src/i18n/services/message-loader.service.ts","../src/i18n/services/message-registry.ts","../src/i18n/i18n.module.ts"],"sourcesContent":["import { inject } from '../../di'\nimport { Request } from '../../di/decorators'\nimport { ROUTER_TOKENS, type RouterContext } from '../../router'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport type { II18nService, MessageKeys, MessageParams } from '../i18n.types'\nimport type { MessageLoaderService } from './message-loader.service'\n\n@Request(I18N_TOKENS.I18nService)\nexport class I18nService implements II18nService {\n constructor(\n @inject(I18N_TOKENS.MessageLoader) private readonly loader: MessageLoaderService,\n @inject(ROUTER_TOKENS.RouterContext, { isOptional: true }) private readonly routerContext?: RouterContext\n ) {\n }\n\n t(key: MessageKeys, params?: MessageParams): string {\n return this.loader.translate(this.getLocale(), key, params as Record<string, unknown>)\n }\n\n getLocale(): string {\n return this.routerContext?.getLocale() ?? 'en'\n }\n}\n","/**\n * Core Messages\n *\n * Messages used by packages/modules infrastructure.\n * These are automatically merged with application-specific messages.\n */\n\nimport * as en from './en'\n\n/**\n * All locale messages\n * Explicitly import and export (no filesystem scanning - Cloudflare Workers compatible)\n */\nexport const messages = { en } as const\n\n/**\n * Type for all messages\n */\nexport type Messages = typeof messages\n\n/**\n * Get messages for all locales\n */\nexport function getMessages(): Record<string, Record<string, unknown>> {\n return messages\n}\n\n/**\n * Get available locales\n */\nexport function getLocales(): string[] {\n return Object.keys(messages)\n}\n","import IntlMessageFormat from 'intl-messageformat'\nimport { inject } from '../../di'\nimport { Singleton } from '../../di/decorators'\nimport type { I18nModuleOptions } from '../i18n.options'\nimport type { MessageKeyPrefix } from '../i18n.types'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport { getLocales, getMessages } from '../messages'\nimport { deepMerge } from '../utils/deep-merge'\nimport type { MessageRegistry } from './message-registry'\n\ntype CompiledMessages = Record<string, (params?: Record<string, unknown>) => string>\n\n@Singleton(I18N_TOKENS.MessageLoader)\nexport class MessageLoaderService {\n private readonly cache: Map<string, Record<string, unknown>>\n private readonly compiledCache: Map<string, CompiledMessages>\n private readonly locales: string[]\n private readonly defaultLocale: string\n\n constructor(\n @inject(I18N_TOKENS.MessageRegistry) private readonly registry: MessageRegistry,\n @inject(I18N_TOKENS.Options, { isOptional: true })\n private readonly options?: I18nModuleOptions\n ) {\n this.defaultLocale = this.options?.defaultLocale ?? 'en'\n this.cache = new Map()\n this.compiledCache = new Map()\n\n const coreMessages = getMessages()\n const coreLocales = getLocales()\n\n const registryMessages = this.registry.getMergedMessages()\n const registryLocales = Object.keys(registryMessages)\n\n const allLocales = [...new Set([...coreLocales, ...registryLocales])]\n this.locales = allLocales\n\n for (const locale of allLocales) {\n const coreLocaleMessages = coreMessages[locale] ?? {}\n const registryLocaleMessages = registryMessages[locale] ?? {}\n\n const merged = deepMerge(coreLocaleMessages, registryLocaleMessages)\n this.cache.set(locale, merged)\n }\n }\n\n translate(locale: string, key: string, params?: Record<string, unknown>): string {\n const compiled = this.getCompiledMessages(locale)\n const fn = compiled[key]\n if (!fn) return key\n return fn(params)\n }\n\n getMessages(locale: string): Record<string, unknown> {\n return this.cache.get(locale) ?? this.cache.get(this.defaultLocale) ?? {}\n }\n\n getAvailableLocales(): string[] {\n return this.locales\n }\n\n isLocaleSupported(locale: string): boolean {\n return this.cache.has(locale)\n }\n\n getDefaultLocale(): string {\n return this.defaultLocale\n }\n\n getFilteredMessages(\n locale: string,\n options?: { only?: MessageKeyPrefix[] }\n ): Record<string, string> {\n const messages = this.getMessages(locale)\n const flattened = this.flattenMessages(messages)\n\n if (!options?.only?.length) return flattened\n\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(flattened)) {\n if (options.only.some((prefix) => key === prefix || key.startsWith(`${prefix}.`))) {\n result[key] = value\n }\n }\n return result\n }\n\n private getCompiledMessages(locale: string): CompiledMessages {\n const effectiveLocale = this.cache.has(locale) ? locale : this.defaultLocale\n\n const cached = this.compiledCache.get(effectiveLocale)\n if (cached) return cached\n\n const messages = this.cache.get(effectiveLocale) ?? {}\n const flattened = this.flattenMessages(messages)\n\n const compiled: CompiledMessages = {}\n for (const [key, value] of Object.entries(flattened)) {\n const msg = new IntlMessageFormat(value, effectiveLocale)\n compiled[key] = (params) => String(msg.format(params as Record<string, string | number | boolean>))\n }\n\n this.compiledCache.set(effectiveLocale, compiled)\n return compiled\n }\n\n private flattenMessages(\n messages: Record<string, unknown>,\n prefix = ''\n ): Record<string, string> {\n const result: Record<string, string> = {}\n\n for (const key of Object.keys(messages)) {\n const value = messages[key]\n const newKey = prefix ? `${prefix}.${key}` : key\n\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n Object.assign(result, this.flattenMessages(value as Record<string, unknown>, newKey))\n } else {\n result[newKey] = String(value)\n }\n }\n\n return result\n }\n}\n","import { Singleton } from '../../di/decorators'\nimport { I18N_TOKENS } from '../i18n.tokens'\nimport { deepMerge } from '../utils/deep-merge'\n\n/**\n * Global key for the shared contributions array.\n *\n * When stratal is installed via portal/symlink (e.g., in monorepos), bundlers\n * like esbuild may inline multiple copies of this module. Each copy gets its\n * own static class fields, so messages registered by one copy are invisible\n * to another. Using a `Symbol.for()` key on `globalThis` ensures all copies\n * share the same contributions array.\n */\nconst CONTRIBUTIONS_KEY = Symbol.for('stratal:i18n:message-registry:contributions')\n\ntype Contributions = Record<string, Record<string, unknown>>[]\n\nfunction getContributions(): Contributions {\n const g = globalThis as Record<symbol, unknown>\n g[CONTRIBUTIONS_KEY] ??= [];\n return g[CONTRIBUTIONS_KEY] as Contributions\n}\n\n/**\n * Message Registry\n *\n * Accumulates i18n messages from multiple `I18nModule.registerMessages()` calls.\n * Messages are collected statically (at module import time) and deep-merged\n * when `getMergedMessages()` is called by `MessageLoaderService`.\n *\n * Later registrations override earlier ones at leaf level.\n */\n@Singleton(I18N_TOKENS.MessageRegistry)\nexport class MessageRegistry {\n /**\n * Add messages (called statically by I18nModule.registerMessages)\n */\n static addMessages(messages: Record<string, Record<string, unknown>>): void {\n if (Boolean(messages) && typeof messages === 'object' && Object.keys(messages).length > 0) {\n getContributions().push(messages)\n }\n }\n\n /**\n * Get all messages deep-merged in registration order\n */\n getMergedMessages(): Record<string, Record<string, unknown>> {\n const merged: Record<string, Record<string, unknown>> = {}\n\n for (const contribution of getContributions()) {\n for (const locale of Object.keys(contribution)) {\n merged[locale] = deepMerge(\n (merged[locale] ?? {}),\n contribution[locale],\n )\n }\n }\n\n return merged\n }\n\n /**\n * Reset registry (for testing)\n * @internal\n */\n static reset(): void {\n (globalThis as Record<symbol, unknown>)[CONTRIBUTIONS_KEY] = []\n }\n}\n","import { Module } from '../module'\nimport type { DynamicModule, ModuleContext, OnInitialize } from '../module/types'\nimport type { I18nModuleOptions } from './i18n.options'\nimport { I18N_TOKENS } from './i18n.tokens'\nimport { I18nService } from './services/i18n.service'\nimport { MessageLoaderService } from './services/message-loader.service'\nimport { MessageRegistry } from './services/message-registry'\nimport { zodErrorMap } from './validation/validation.context'\nimport { z } from './validation/zod'\n\n@Module({\n providers: [\n { provide: I18N_TOKENS.MessageRegistry, useClass: MessageRegistry },\n { provide: I18N_TOKENS.MessageLoader, useClass: MessageLoaderService },\n { provide: I18N_TOKENS.I18nService, useClass: I18nService },\n ],\n})\nexport class I18nModule implements OnInitialize {\n onInitialize(_context: ModuleContext): void {\n z.config({ customError: zodErrorMap })\n }\n\n static forRoot(options: I18nModuleOptions = {}): DynamicModule {\n return {\n module: I18nModule,\n providers: [\n { provide: I18N_TOKENS.Options, useValue: options },\n ],\n }\n }\n\n static registerMessages(messages: Record<string, Record<string, unknown>>): DynamicModule {\n MessageRegistry.addMessages(messages)\n return {\n module: I18nModule,\n providers: [],\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ //#region src/i18n/i18n.tokens.ts
2
+ /**
3
+ * I18n Module DI Tokens
4
+ * Symbol-based tokens to avoid string collisions
5
+ */
6
+ const I18N_TOKENS = {
7
+ /** MessageLoaderService - loads and caches locale messages */
8
+ MessageLoader: Symbol.for("stratal:i18n:message:loader"),
9
+ /** I18nService - request-scoped translation service */
10
+ I18nService: Symbol.for("stratal:i18n:service"),
11
+ /** I18nModuleOptions - configuration options from forRoot() */
12
+ Options: Symbol.for("stratal:i18n:options"),
13
+ /** MessageRegistry - singleton accumulator for registerMessages() contributions */
14
+ MessageRegistry: Symbol.for("stratal:i18n:message:registry")
15
+ };
16
+ //#endregion
17
+ export { I18N_TOKENS as t };
18
+
19
+ //# sourceMappingURL=i18n.tokens-hwRpmjRq.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.tokens-hwRpmjRq.mjs","names":[],"sources":["../src/i18n/i18n.tokens.ts"],"sourcesContent":["/**\n * I18n Module DI Tokens\n * Symbol-based tokens to avoid string collisions\n */\n\nexport const I18N_TOKENS = {\n /** MessageLoaderService - loads and caches locale messages */\n MessageLoader: Symbol.for('stratal:i18n:message:loader'),\n /** I18nService - request-scoped translation service */\n I18nService: Symbol.for('stratal:i18n:service'),\n /** I18nModuleOptions - configuration options from forRoot() */\n Options: Symbol.for('stratal:i18n:options'),\n /** MessageRegistry - singleton accumulator for registerMessages() contributions */\n MessageRegistry: Symbol.for('stratal:i18n:message:registry'),\n} as const\n"],"mappings":";;;;;AAKA,MAAa,cAAc;;CAEzB,eAAe,OAAO,IAAI,8BAA8B;;CAExD,aAAa,OAAO,IAAI,uBAAuB;;CAE/C,SAAS,OAAO,IAAI,uBAAuB;;CAE3C,iBAAiB,OAAO,IAAI,gCAAgC;CAC7D"}
@@ -98,4 +98,4 @@ declare abstract class Macroable {
98
98
  }
99
99
  //#endregion
100
100
  export { MacroFunction as n, Macroable as t };
101
- //# sourceMappingURL=index-7-hU3GTV.d.mts.map
101
+ //# sourceMappingURL=index-B4UBK-2T.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-7-hU3GTV.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
+ {"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"}
@@ -0,0 +1,124 @@
1
+ //#region src/logger/logger.tokens.d.ts
2
+ declare const LOGGER_TOKENS: {
3
+ readonly LoggerService: symbol;
4
+ readonly Formatter: symbol;
5
+ readonly LogLevelOptions: symbol;
6
+ };
7
+ //#endregion
8
+ //#region src/logger/contracts/log-level.d.ts
9
+ /**
10
+ * Log severity levels
11
+ * Ordered from least to most severe
12
+ */
13
+ declare enum LogLevel {
14
+ DEBUG = "debug",
15
+ INFO = "info",
16
+ WARN = "warn",
17
+ ERROR = "error"
18
+ }
19
+ /**
20
+ * Map log levels to numeric priorities (for filtering)
21
+ * Higher numbers = more severe = higher priority
22
+ */
23
+ declare const LOG_LEVEL_PRIORITY: Record<LogLevel, number>;
24
+ //#endregion
25
+ //#region src/logger/contracts/log-context.d.ts
26
+ /**
27
+ * Structured metadata attached to log entries
28
+ * Supports arbitrary key-value pairs for context enrichment
29
+ */
30
+ type LogContext = Record<string, unknown>;
31
+ /**
32
+ * Internal context automatically added by LoggerService
33
+ * Contains request metadata, etc.
34
+ */
35
+ interface InternalLogContext extends LogContext {
36
+ userId?: string;
37
+ timestamp: number;
38
+ }
39
+ //#endregion
40
+ //#region src/logger/contracts/log-entry.d.ts
41
+ /**
42
+ * Complete log entry structure passed to transports
43
+ * Combines message, level, and enriched context
44
+ */
45
+ interface LogEntry {
46
+ level: LogLevel;
47
+ message: string;
48
+ context: InternalLogContext;
49
+ error?: {
50
+ message: string;
51
+ stack?: string;
52
+ name?: string;
53
+ };
54
+ }
55
+ //#endregion
56
+ //#region src/logger/formatters/formatter.interface.d.ts
57
+ /**
58
+ * Formatter contract
59
+ * Transforms LogEntry into string representation for transport output
60
+ */
61
+ interface ILogFormatter {
62
+ /**
63
+ * Format log entry into string
64
+ * @param entry - Complete log entry with context
65
+ * @returns Formatted string ready for transport
66
+ */
67
+ format(entry: LogEntry): string;
68
+ }
69
+ //#endregion
70
+ //#region src/logger/services/logger.service.d.ts
71
+ declare class LoggerService {
72
+ private readonly logLevel;
73
+ private readonly formatter;
74
+ constructor(logLevel: LogLevel, formatter: ILogFormatter);
75
+ debug(message: string, context?: LogContext): void;
76
+ info(message: string, context?: LogContext): void;
77
+ warn(message: string, context?: LogContext): void;
78
+ error(message: string, error: Error, context?: LogContext): void;
79
+ error(message: string, context?: LogContext): void;
80
+ private log;
81
+ private writeToConsole;
82
+ private enrichContext;
83
+ private serializeError;
84
+ }
85
+ //#endregion
86
+ //#region src/logger/formatters/json-formatter.d.ts
87
+ /**
88
+ * JSON Formatter
89
+ *
90
+ * Produces structured JSON logs for production environments.
91
+ * Optimized for log aggregation systems (Cloudflare Analytics, Datadog, etc.)
92
+ *
93
+ * Output format:
94
+ * {
95
+ * "level": "info",
96
+ * "message": "User logged in",
97
+ * "timestamp": 1234567890,
98
+ * "userId": "user_456",
99
+ * "error": { "message": "...", "stack": "..." }
100
+ * }
101
+ */
102
+ declare class JsonFormatter implements ILogFormatter {
103
+ format(entry: LogEntry): string;
104
+ }
105
+ //#endregion
106
+ //#region src/logger/formatters/pretty-formatter.d.ts
107
+ /**
108
+ * Pretty Formatter
109
+ *
110
+ * Human-readable colored output for development environments.
111
+ * Uses ANSI color codes for terminal output.
112
+ *
113
+ * Output format:
114
+ * [2024-01-15 10:30:45] INFO: User logged in
115
+ * userId: user_456
116
+ */
117
+ declare class PrettyFormatter implements ILogFormatter {
118
+ private readonly colors;
119
+ private readonly reset;
120
+ format(entry: LogEntry): string;
121
+ }
122
+ //#endregion
123
+ export { InternalLogContext as a, LogLevel as c, LogEntry as i, LOGGER_TOKENS as l, JsonFormatter as n, LogContext as o, LoggerService as r, LOG_LEVEL_PRIORITY as s, PrettyFormatter as t };
124
+ //# sourceMappingURL=index-BtlE9RuO.d.mts.map
@@ -0,0 +1 @@
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"}