logixia 2.0.0 → 2.0.6

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 (239) hide show
  1. package/README.md +172 -2597
  2. package/dist/async-context-2mbUKhcl.mjs +132 -0
  3. package/dist/async-context-2mbUKhcl.mjs.map +1 -0
  4. package/dist/async-context-DUFMDYAr.js +148 -0
  5. package/dist/async-context-DUFMDYAr.js.map +1 -0
  6. package/dist/{azure-monitor.transport-CrvfHd9C.js → azure-monitor.transport-Bu4S2I2q.js} +32 -20
  7. package/dist/azure-monitor.transport-Bu4S2I2q.js.map +1 -0
  8. package/dist/{azure-monitor.transport-Cn_3Usvu.d.ts → azure-monitor.transport-Bvf7Xegt.d.ts} +3 -6
  9. package/dist/azure-monitor.transport-Bvf7Xegt.d.ts.map +1 -0
  10. package/dist/{azure-monitor.transport-CHnjVRF-.mjs → azure-monitor.transport-C1RWAumT.mjs} +27 -15
  11. package/dist/azure-monitor.transport-C1RWAumT.mjs.map +1 -0
  12. package/dist/{azure-monitor.transport-D7Da4RAb.d.mts → azure-monitor.transport-CbSHOnNX.d.mts} +3 -6
  13. package/dist/azure-monitor.transport-CbSHOnNX.d.mts.map +1 -0
  14. package/dist/azure.d.mts +1 -2
  15. package/dist/azure.d.ts +1 -2
  16. package/dist/azure.js +3 -6
  17. package/dist/azure.mjs +1 -6
  18. package/dist/{batch-buffer-PGvSgbmd.mjs → batch-buffer-BvXLDPlV.mjs} +21 -7
  19. package/dist/batch-buffer-BvXLDPlV.mjs.map +1 -0
  20. package/dist/{batch-buffer-BY-mRWIK.js → batch-buffer-C7Am4Mw-.js} +53 -40
  21. package/dist/batch-buffer-C7Am4Mw-.js.map +1 -0
  22. package/dist/browser.d.mts +47 -27
  23. package/dist/browser.d.mts.map +1 -1
  24. package/dist/browser.d.ts +47 -27
  25. package/dist/browser.d.ts.map +1 -1
  26. package/dist/browser.js +464 -62
  27. package/dist/browser.js.map +1 -1
  28. package/dist/browser.mjs +465 -65
  29. package/dist/browser.mjs.map +1 -1
  30. package/dist/{builder-0gEzRopq.mjs → builder-DhNhvOkt.mjs} +307 -246
  31. package/dist/builder-DhNhvOkt.mjs.map +1 -0
  32. package/dist/{builder-D44QktIo.js → builder-yFvJrz7o.js} +435 -399
  33. package/dist/builder-yFvJrz7o.js.map +1 -0
  34. package/dist/cli/index.js +216 -125
  35. package/dist/cloudwatch.d.mts +1 -2
  36. package/dist/cloudwatch.d.ts +1 -2
  37. package/dist/cloudwatch.js +3 -7
  38. package/dist/cloudwatch.mjs +1 -7
  39. package/dist/{cloudwatch.transport-DsEq633o.d.ts → cloudwatch.transport-CQyT6U91.d.ts} +2 -6
  40. package/dist/cloudwatch.transport-CQyT6U91.d.ts.map +1 -0
  41. package/dist/{cloudwatch.transport-BO1ahxw-.js → cloudwatch.transport-Ch1Uae-0.js} +61 -36
  42. package/dist/cloudwatch.transport-Ch1Uae-0.js.map +1 -0
  43. package/dist/{cloudwatch.transport-UlyZFWMn.d.mts → cloudwatch.transport-CjVrI6S4.d.mts} +2 -6
  44. package/dist/cloudwatch.transport-CjVrI6S4.d.mts.map +1 -0
  45. package/dist/{cloudwatch.transport-DZ6ies7g.mjs → cloudwatch.transport-DZqF2xZO.mjs} +54 -28
  46. package/dist/cloudwatch.transport-DZqF2xZO.mjs.map +1 -0
  47. package/dist/{coerce.utils-Cu6IUTgX.mjs → coerce.utils-B_rEudCn.mjs} +3 -4
  48. package/dist/{coerce.utils-Cu6IUTgX.mjs.map → coerce.utils-B_rEudCn.mjs.map} +1 -1
  49. package/dist/{coerce.utils-B-LilukN.js → coerce.utils-C1C5sIX0.js} +8 -10
  50. package/dist/{coerce.utils-B-LilukN.js.map → coerce.utils-C1C5sIX0.js.map} +1 -1
  51. package/dist/correlation.d.mts +15 -69
  52. package/dist/correlation.d.mts.map +1 -1
  53. package/dist/correlation.d.ts +15 -69
  54. package/dist/correlation.d.ts.map +1 -1
  55. package/dist/correlation.js +69 -20
  56. package/dist/correlation.js.map +1 -1
  57. package/dist/correlation.mjs +67 -17
  58. package/dist/correlation.mjs.map +1 -1
  59. package/dist/{entry-fields-BvOLFlJ4.js → entry-fields-BSLkzw18.js} +16 -13
  60. package/dist/entry-fields-BSLkzw18.js.map +1 -0
  61. package/dist/{entry-fields-BJkuPnIg.mjs → entry-fields-J1OBi24o.mjs} +11 -7
  62. package/dist/entry-fields-J1OBi24o.mjs.map +1 -0
  63. package/dist/gcp.d.mts +1 -2
  64. package/dist/gcp.d.ts +1 -2
  65. package/dist/gcp.js +3 -7
  66. package/dist/gcp.mjs +1 -7
  67. package/dist/{gcp.transport-B7oc97sG.d.ts → gcp.transport-BCIvdFV-.d.ts} +5 -8
  68. package/dist/gcp.transport-BCIvdFV-.d.ts.map +1 -0
  69. package/dist/{gcp.transport-GrJurKo8.d.mts → gcp.transport-D9SdLPwP.d.mts} +5 -8
  70. package/dist/gcp.transport-D9SdLPwP.d.mts.map +1 -0
  71. package/dist/{gcp.transport-DBX5TPIy.mjs → gcp.transport-DVCmnA3b.mjs} +59 -16
  72. package/dist/gcp.transport-DVCmnA3b.mjs.map +1 -0
  73. package/dist/{gcp.transport-CHV8MGgz.js → gcp.transport-Dy2Lf8FI.js} +64 -22
  74. package/dist/gcp.transport-Dy2Lf8FI.js.map +1 -0
  75. package/dist/http-shapes-BnBkJcid.d.mts +32 -0
  76. package/dist/http-shapes-BnBkJcid.d.mts.map +1 -0
  77. package/dist/http-shapes-BnBkJcid.d.ts +32 -0
  78. package/dist/http-shapes-BnBkJcid.d.ts.map +1 -0
  79. package/dist/{index-3mw5gaCw.d.mts → index-BSTtFcQ6.d.mts} +142 -13
  80. package/dist/index-BSTtFcQ6.d.mts.map +1 -0
  81. package/dist/{index-DhIoploR.d.ts → index-CFDGkI8n.d.ts} +142 -13
  82. package/dist/index-CFDGkI8n.d.ts.map +1 -0
  83. package/dist/index.d.mts +114 -217
  84. package/dist/index.d.mts.map +1 -1
  85. package/dist/index.d.ts +113 -216
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +182 -279
  88. package/dist/index.js.map +1 -1
  89. package/dist/index.mjs +160 -256
  90. package/dist/index.mjs.map +1 -1
  91. package/dist/internal-log-Bg4V1cPg.mjs +170 -0
  92. package/dist/internal-log-Bg4V1cPg.mjs.map +1 -0
  93. package/dist/internal-log-By4Govmu.js +223 -0
  94. package/dist/internal-log-By4Govmu.js.map +1 -0
  95. package/dist/{logitron-logger-UVeN-mQm.d.ts → logitron-logger-D22Yb61K.d.mts} +121 -100
  96. package/dist/logitron-logger-D22Yb61K.d.mts.map +1 -0
  97. package/dist/{logitron-logger-BFDSO8Io.d.mts → logitron-logger-D_MYYrQt.d.ts} +121 -100
  98. package/dist/logitron-logger-D_MYYrQt.d.ts.map +1 -0
  99. package/dist/middleware.d.mts +13 -28
  100. package/dist/middleware.d.mts.map +1 -1
  101. package/dist/middleware.d.ts +13 -28
  102. package/dist/middleware.d.ts.map +1 -1
  103. package/dist/middleware.js +20 -81
  104. package/dist/middleware.js.map +1 -1
  105. package/dist/middleware.mjs +17 -79
  106. package/dist/middleware.mjs.map +1 -1
  107. package/dist/nest.d.mts +37 -48
  108. package/dist/nest.d.mts.map +1 -1
  109. package/dist/nest.d.ts +37 -48
  110. package/dist/nest.d.ts.map +1 -1
  111. package/dist/nest.js +124 -135
  112. package/dist/nest.js.map +1 -1
  113. package/dist/nest.mjs +69 -78
  114. package/dist/nest.mjs.map +1 -1
  115. package/dist/{transport.manager-BiuCAJd2.mjs → otel-Dt5riXuE.mjs} +275 -117
  116. package/dist/otel-Dt5riXuE.mjs.map +1 -0
  117. package/dist/{transport.manager-CXbKKdVE.js → otel-DyeH6DVR.js} +373 -178
  118. package/dist/otel-DyeH6DVR.js.map +1 -0
  119. package/dist/own-property-BWkibepN.js +40 -0
  120. package/dist/own-property-BWkibepN.js.map +1 -0
  121. package/dist/own-property-CjFw9qwZ.mjs +29 -0
  122. package/dist/own-property-CjFw9qwZ.mjs.map +1 -0
  123. package/dist/{trace.utils-CvXgaiQT.mjs → request-trace-BgNykH9M.mjs} +40 -9
  124. package/dist/request-trace-BgNykH9M.mjs.map +1 -0
  125. package/dist/{trace.utils-DpBOLDtq.js → request-trace-ByujsUZk.js} +117 -77
  126. package/dist/request-trace-ByujsUZk.js.map +1 -0
  127. package/dist/rolldown-runtime-D3PmRqjj.mjs +4 -0
  128. package/dist/{safe-stringify-DJ66tW5I.mjs → safe-stringify-B5p5ktFe.mjs} +39 -15
  129. package/dist/safe-stringify-B5p5ktFe.mjs.map +1 -0
  130. package/dist/{safe-stringify-DWo3aZp_.js → safe-stringify-J3sh-7YM.js} +59 -36
  131. package/dist/safe-stringify-J3sh-7YM.js.map +1 -0
  132. package/dist/{search-C4V0OMEn.js → search-CRjhHxe9.js} +319 -92
  133. package/dist/search-CRjhHxe9.js.map +1 -0
  134. package/dist/{search-CNh9uVwR.d.ts → search-DA3ft3X5.d.mts} +5 -22
  135. package/dist/search-DA3ft3X5.d.mts.map +1 -0
  136. package/dist/{search-BFbu_oVn.mjs → search-DAXKE-P9.mjs} +289 -62
  137. package/dist/search-DAXKE-P9.mjs.map +1 -0
  138. package/dist/{search-DXANsQ2n.d.mts → search-DEl3Pe47.d.ts} +5 -22
  139. package/dist/search-DEl3Pe47.d.ts.map +1 -0
  140. package/dist/search.d.mts +2 -4
  141. package/dist/search.d.ts +2 -4
  142. package/dist/search.js +3 -4
  143. package/dist/search.mjs +1 -4
  144. package/dist/secret-config-CmK2wVkr.js +272 -0
  145. package/dist/secret-config-CmK2wVkr.js.map +1 -0
  146. package/dist/secret-config-Dhb6pqTU.mjs +210 -0
  147. package/dist/secret-config-Dhb6pqTU.mjs.map +1 -0
  148. package/dist/{slack.transport-CXjQYOes.d.ts → slack.transport-BDyENuR0.d.mts} +56 -9
  149. package/dist/slack.transport-BDyENuR0.d.mts.map +1 -0
  150. package/dist/{slack.transport-Bzw7sucI.mjs → slack.transport-BTEwsREY.mjs} +263 -31
  151. package/dist/slack.transport-BTEwsREY.mjs.map +1 -0
  152. package/dist/{slack.transport-BZzoXDPn.d.mts → slack.transport-C6E0l4kw.d.ts} +56 -9
  153. package/dist/slack.transport-C6E0l4kw.d.ts.map +1 -0
  154. package/dist/{slack.transport-BfJRouB2.js → slack.transport-UbYvOdKx.js} +286 -42
  155. package/dist/slack.transport-UbYvOdKx.js.map +1 -0
  156. package/dist/testing.d.mts +13 -11
  157. package/dist/testing.d.mts.map +1 -1
  158. package/dist/testing.d.ts +13 -11
  159. package/dist/testing.d.ts.map +1 -1
  160. package/dist/testing.js +41 -7
  161. package/dist/testing.js.map +1 -1
  162. package/dist/testing.mjs +40 -6
  163. package/dist/testing.mjs.map +1 -1
  164. package/dist/{transport.types-CGoHpWQR.d.ts → transport.types-CzJq4IrF.d.mts} +14 -5
  165. package/dist/transport.types-CzJq4IrF.d.mts.map +1 -0
  166. package/dist/{transport.types-BMnurPcc.d.mts → transport.types-CzJq4IrF.d.ts} +14 -5
  167. package/dist/transport.types-CzJq4IrF.d.ts.map +1 -0
  168. package/dist/transports.d.mts +39 -41
  169. package/dist/transports.d.mts.map +1 -1
  170. package/dist/transports.d.ts +39 -41
  171. package/dist/transports.d.ts.map +1 -1
  172. package/dist/transports.js +19 -22
  173. package/dist/transports.mjs +7 -13
  174. package/dist/worker-entry.js +438 -107
  175. package/dist/worker.d.mts +1 -2
  176. package/dist/worker.d.ts +1 -2
  177. package/dist/worker.js +3 -4
  178. package/dist/worker.mjs +1 -4
  179. package/dist/{worker.transport-JvGPog3C.d.mts → worker.transport-B9mCQSM1.d.ts} +7 -6
  180. package/dist/worker.transport-B9mCQSM1.d.ts.map +1 -0
  181. package/dist/{worker.transport-CdzSZJmw.d.ts → worker.transport-Bl8lFRck.d.mts} +7 -6
  182. package/dist/worker.transport-Bl8lFRck.d.mts.map +1 -0
  183. package/dist/{worker.transport-lPxO2MVL.mjs → worker.transport-BmmOKb1-.mjs} +43 -10
  184. package/dist/worker.transport-BmmOKb1-.mjs.map +1 -0
  185. package/dist/{worker.transport-BdPxu3PN.js → worker.transport-DxxbqQCG.js} +48 -15
  186. package/dist/worker.transport-DxxbqQCG.js.map +1 -0
  187. package/package.json +51 -75
  188. package/dist/async-context-BzJrbfQs.mjs +0 -72
  189. package/dist/async-context-BzJrbfQs.mjs.map +0 -1
  190. package/dist/async-context-DyQQYq3I.js +0 -92
  191. package/dist/async-context-DyQQYq3I.js.map +0 -1
  192. package/dist/azure-monitor.transport-CHnjVRF-.mjs.map +0 -1
  193. package/dist/azure-monitor.transport-Cn_3Usvu.d.ts.map +0 -1
  194. package/dist/azure-monitor.transport-CrvfHd9C.js.map +0 -1
  195. package/dist/azure-monitor.transport-D7Da4RAb.d.mts.map +0 -1
  196. package/dist/batch-buffer-BY-mRWIK.js.map +0 -1
  197. package/dist/batch-buffer-PGvSgbmd.mjs.map +0 -1
  198. package/dist/builder-0gEzRopq.mjs.map +0 -1
  199. package/dist/builder-D44QktIo.js.map +0 -1
  200. package/dist/chunk-DLSkYcPk.mjs +0 -7
  201. package/dist/chunk-nOFOJqeH.js +0 -30
  202. package/dist/cloudwatch.transport-BO1ahxw-.js.map +0 -1
  203. package/dist/cloudwatch.transport-DZ6ies7g.mjs.map +0 -1
  204. package/dist/cloudwatch.transport-DsEq633o.d.ts.map +0 -1
  205. package/dist/cloudwatch.transport-UlyZFWMn.d.mts.map +0 -1
  206. package/dist/entry-fields-BJkuPnIg.mjs.map +0 -1
  207. package/dist/entry-fields-BvOLFlJ4.js.map +0 -1
  208. package/dist/gcp.transport-B7oc97sG.d.ts.map +0 -1
  209. package/dist/gcp.transport-CHV8MGgz.js.map +0 -1
  210. package/dist/gcp.transport-DBX5TPIy.mjs.map +0 -1
  211. package/dist/gcp.transport-GrJurKo8.d.mts.map +0 -1
  212. package/dist/index-3mw5gaCw.d.mts.map +0 -1
  213. package/dist/index-DhIoploR.d.ts.map +0 -1
  214. package/dist/internal-log-BUJYMZbE.js +0 -70
  215. package/dist/internal-log-BUJYMZbE.js.map +0 -1
  216. package/dist/internal-log-Cm8SOWSV.mjs +0 -52
  217. package/dist/internal-log-Cm8SOWSV.mjs.map +0 -1
  218. package/dist/logitron-logger-BFDSO8Io.d.mts.map +0 -1
  219. package/dist/logitron-logger-UVeN-mQm.d.ts.map +0 -1
  220. package/dist/safe-stringify-DJ66tW5I.mjs.map +0 -1
  221. package/dist/safe-stringify-DWo3aZp_.js.map +0 -1
  222. package/dist/search-BFbu_oVn.mjs.map +0 -1
  223. package/dist/search-C4V0OMEn.js.map +0 -1
  224. package/dist/search-CNh9uVwR.d.ts.map +0 -1
  225. package/dist/search-DXANsQ2n.d.mts.map +0 -1
  226. package/dist/slack.transport-BZzoXDPn.d.mts.map +0 -1
  227. package/dist/slack.transport-BfJRouB2.js.map +0 -1
  228. package/dist/slack.transport-Bzw7sucI.mjs.map +0 -1
  229. package/dist/slack.transport-CXjQYOes.d.ts.map +0 -1
  230. package/dist/trace.utils-CvXgaiQT.mjs.map +0 -1
  231. package/dist/trace.utils-DpBOLDtq.js.map +0 -1
  232. package/dist/transport.manager-BiuCAJd2.mjs.map +0 -1
  233. package/dist/transport.manager-CXbKKdVE.js.map +0 -1
  234. package/dist/transport.types-BMnurPcc.d.mts.map +0 -1
  235. package/dist/transport.types-CGoHpWQR.d.ts.map +0 -1
  236. package/dist/worker.transport-BdPxu3PN.js.map +0 -1
  237. package/dist/worker.transport-CdzSZJmw.d.ts.map +0 -1
  238. package/dist/worker.transport-JvGPog3C.d.mts.map +0 -1
  239. package/dist/worker.transport-lPxO2MVL.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,17 +1,15 @@
1
- import { n as internalLog, r as internalWarn } from "./internal-log-Cm8SOWSV.mjs";
2
- import { i as stringifyForLog, n as retrocycle, r as safeStringify, t as decycleValue } from "./safe-stringify-DJ66tW5I.mjs";
3
- import { i as HttpError, n as DEFAULT_MAX_BUFFER_SIZE, r as DEFAULT_REQUEST_TIMEOUT_MS, t as BatchBuffer } from "./batch-buffer-PGvSgbmd.mjs";
4
- import "./entry-fields-BJkuPnIg.mjs";
5
- import { a as _setActiveContextKey, c as getCurrentTraceId, d as sanitizeIncomingId, f as setTraceId, i as TraceContext, l as getTraceContextKey, n as MAX_INCOMING_ID_LENGTH, o as createTraceMiddleware, p as traceStorage, r as TRACE_CONTEXT_KEY, s as extractTraceId, t as DEFAULT_TRACE_HEADERS, u as runWithTraceId } from "./trace.utils-CvXgaiQT.mjs";
6
- import { n as createExpressContextMiddleware, r as createFastifyContextHook, t as LogixiaContext } from "./async-context-BzJrbfQs.mjs";
7
- import { C as globalPluginRegistry, D as DEFAULT_LOG_LEVELS, E as DEFAULT_LOG_COLORS, O as LogLevel, S as PluginRegistry, T as DEFAULT_CONFIG, _ as getOtelMetaFields, a as isLogixiaException, b as normalizeError, c as _shutdownRegistrySize, d as registerForShutdown, f as resetShutdownHandlers, g as getActiveOtelContext, h as disableOtelBridge, i as LogixiaException, l as deregisterFromShutdown, m as redactObject, n as generateRequestId, o as LogixiaLogger, p as applyRedaction, r as generateTraceId, s as createLogger$1, t as ErrorResponseBuilder, u as flushOnExit, v as initOtelBridge, w as usePlugin, x as serializeError, y as isError } from "./builder-0gEzRopq.mjs";
8
- import { t as safeToString } from "./coerce.utils-Cu6IUTgX.mjs";
9
- import { d as stripControlChars } from "./transport.manager-BiuCAJd2.mjs";
10
- import { n as DiscordTransport, t as SlackTransport } from "./slack.transport-Bzw7sucI.mjs";
11
- import { a as BasicSearchEngine, i as CorrelationEngine, n as PatternRecognitionEngine, o as BasicLogIndexer, r as NLPSearchEngine, t as SearchManager } from "./search-BFbu_oVn.mjs";
1
+ import { C as DEFAULT_LOG_LEVELS, S as DEFAULT_LOG_COLORS, _ as serializeError, a as isLogixiaException, b as usePlugin, c as _shutdownRegistrySize, d as registerForShutdown, f as resetShutdownHandlers, g as normalizeError, h as isError, i as LogixiaException, l as deregisterFromShutdown, m as redactObject, n as generateRequestId, o as LogixiaLogger, p as applyRedaction, r as generateTraceId, s as createLogger$1, t as ErrorResponseBuilder, u as flushOnExit, v as PluginRegistry, w as LogLevel, x as DEFAULT_CONFIG, y as globalPluginRegistry } from "./builder-DhNhvOkt.mjs";
2
+ import { t as assignOwn } from "./own-property-CjFw9qwZ.mjs";
3
+ import { a as TRACE_CONTEXT_KEY, c as createTraceMiddleware, d as getTraceContextKey, f as runWithTraceId, h as traceStorage, i as MAX_INCOMING_ID_LENGTH, l as extractTraceId, m as setTraceId, o as TraceContext, p as sanitizeIncomingId, r as DEFAULT_TRACE_HEADERS, s as _setActiveContextKey, u as getCurrentTraceId } from "./request-trace-BgNykH9M.mjs";
4
+ import { n as createExpressContextMiddleware, r as createFastifyContextHook, t as LogixiaContext } from "./async-context-2mbUKhcl.mjs";
5
+ import { a as DEFAULT_REDACT_QUERY_PARAMS, c as buildNameSet, l as redactUrlQuery, n as internalLog, r as internalWarn } from "./internal-log-Bg4V1cPg.mjs";
6
+ import { t as safeToString } from "./coerce.utils-B_rEudCn.mjs";
7
+ import { i as stringifyForLog, n as retrocycle, r as safeStringify, t as decycleValue } from "./safe-stringify-B5p5ktFe.mjs";
8
+ import { a as getActiveOtelContext, i as disableOtelBridge, o as getOtelMetaFields, s as initOtelBridge, v as stripControlChars } from "./otel-Dt5riXuE.mjs";
9
+ import { i as toOtelSeverity, n as DiscordTransport, r as OtlpLogTransport, t as SlackTransport } from "./slack.transport-BTEwsREY.mjs";
10
+ import { a as BasicSearchEngine, i as CorrelationEngine, n as PatternRecognitionEngine, o as BasicLogIndexer, r as NLPSearchEngine, t as SearchManager } from "./search-DAXKE-P9.mjs";
12
11
  import { AsyncLocalStorage } from "node:async_hooks";
13
-
14
- //#region src/formatters/json.formatter.ts
12
+ // src/formatters/json.formatter.ts
15
13
  /**
16
14
  * Build a JSON.stringify replacer that replaces circular references with the
17
15
  * string '[Circular]' instead of throwing. A fresh replacer must be created per
@@ -59,25 +57,20 @@ var JsonFormatter = class {
59
57
  }
60
58
  serializePayload(payload) {
61
59
  const serialized = {};
62
- for (const [key, value] of Object.entries(payload)) {
63
- if (key === "__proto__" || key === "constructor" || key === "prototype") continue;
64
- try {
65
- if (value instanceof Error) serialized[key] = serializeError(value);
66
- else if (value instanceof Date) serialized[key] = value.toISOString();
67
- else if (typeof value === "function") serialized[key] = "[Function]";
68
- else if (typeof value === "symbol") serialized[key] = value.toString();
69
- else if (value === void 0) serialized[key] = null;
70
- else serialized[key] = value;
71
- } catch {
72
- serialized[key] = "[Unserializable]";
73
- }
60
+ for (const [key, value] of Object.entries(payload)) try {
61
+ if (value instanceof Error) assignOwn(serialized, key, serializeError(value));
62
+ else if (value instanceof Date) assignOwn(serialized, key, value.toISOString());
63
+ else if (typeof value === "function") assignOwn(serialized, key, "[Function]");
64
+ else if (typeof value === "symbol") assignOwn(serialized, key, value.toString());
65
+ else if (value === void 0) assignOwn(serialized, key, null);
66
+ else assignOwn(serialized, key, value);
67
+ } catch {
68
+ assignOwn(serialized, key, "[Unserializable]");
74
69
  }
75
70
  return serialized;
76
71
  }
77
72
  };
78
-
79
- //#endregion
80
- //#region src/formatters/text.formatter.ts
73
+ // src/formatters/text.formatter.ts
81
74
  const stripControls = (value) => stripControlChars(safeToString(value));
82
75
  var TextFormatter = class TextFormatter {
83
76
  constructor(options = {}) {
@@ -139,7 +132,6 @@ var TextFormatter = class TextFormatter {
139
132
  switch (this.timestampFormat) {
140
133
  case "iso": return date.toISOString();
141
134
  case "short": return date.toLocaleTimeString();
142
- case "locale":
143
135
  default: return date.toLocaleString();
144
136
  }
145
137
  }
@@ -197,9 +189,7 @@ var TextFormatter = class TextFormatter {
197
189
  });
198
190
  }
199
191
  };
200
-
201
- //#endregion
202
- //#region src/utils/runtime-control.ts
192
+ // src/utils/runtime-control.ts
203
193
  const DEFAULT_CYCLE = [
204
194
  "error",
205
195
  "warn",
@@ -216,13 +206,14 @@ const DEFAULT_CYCLE = [
216
206
  * memorizable command (`kill -USR2 <pid>`) is enough to ratchet verbosity up
217
207
  * while chasing a bug and back down again — no value to remember.
218
208
  */
219
- function registerLevelSignal(logger$1, options = {}) {
209
+ function registerLevelSignal(logger, options = {}) {
220
210
  const signal = options.signal ?? "SIGUSR2";
221
211
  const cycle = options.cycle && options.cycle.length > 0 ? options.cycle : [...DEFAULT_CYCLE];
222
212
  const handler = () => {
223
- const current = logger$1.getLevel();
224
- const next = cycle[(cycle.indexOf(current) + 1) % cycle.length];
225
- logger$1.setLevel(next);
213
+ const current = logger.getLevel();
214
+ const idx = cycle.indexOf(current);
215
+ const next = cycle[(idx + 1) % cycle.length];
216
+ logger.setLevel(next);
226
217
  internalLog(`runtime level changed via ${signal}: ${current} → ${next}`);
227
218
  };
228
219
  process.on(signal, handler);
@@ -231,7 +222,7 @@ function registerLevelSignal(logger$1, options = {}) {
231
222
  };
232
223
  }
233
224
  /** Maximum accepted request body size for the level control handler. */
234
- const MAX_BODY_BYTES = 16 * 1024;
225
+ const MAX_BODY_BYTES = 16384;
235
226
  function isJsonContentType(req) {
236
227
  var _req$headers;
237
228
  const raw = (_req$headers = req.headers) === null || _req$headers === void 0 ? void 0 : _req$headers["content-type"];
@@ -239,7 +230,7 @@ function isJsonContentType(req) {
239
230
  if (typeof value !== "string") return false;
240
231
  return value.split(";")[0].trim().toLowerCase() === "application/json";
241
232
  }
242
- const VALID_LEVELS = new Set([
233
+ const VALID_LEVELS = /* @__PURE__ */ new Set([
243
234
  "error",
244
235
  "warn",
245
236
  "info",
@@ -268,13 +259,13 @@ const VALID_LEVELS = new Set([
268
259
  * which also keeps cross-site form posts out) and a body of at most 16 KB
269
260
  * (otherwise 413).
270
261
  */
271
- function createLevelControlHandler(logger$1, options = {}) {
262
+ function createLevelControlHandler(logger, options = {}) {
272
263
  const allowed = options.allowedLevels && options.allowedLevels.length > 0 ? new Set(options.allowedLevels.map((l) => l.toLowerCase())) : VALID_LEVELS;
273
264
  const snapshot = () => {
274
265
  var _logger$getNamespaceL;
275
266
  return {
276
- level: logger$1.getLevel(),
277
- namespaceLevels: ((_logger$getNamespaceL = logger$1.getNamespaceLevels) === null || _logger$getNamespaceL === void 0 ? void 0 : _logger$getNamespaceL.call(logger$1)) ?? {}
267
+ level: logger.getLevel(),
268
+ namespaceLevels: ((_logger$getNamespaceL = logger.getNamespaceLevels) === null || _logger$getNamespaceL === void 0 ? void 0 : _logger$getNamespaceL.call(logger)) ?? {}
278
269
  };
279
270
  };
280
271
  const send = (res, status, body) => {
@@ -300,7 +291,7 @@ function createLevelControlHandler(logger$1, options = {}) {
300
291
  });
301
292
  return;
302
293
  }
303
- logger$1.setLevel(lvl);
294
+ logger.setLevel(lvl);
304
295
  }
305
296
  if (parsed.namespaceLevels !== void 0) {
306
297
  if (typeof parsed.namespaceLevels !== "object" || parsed.namespaceLevels === null || Array.isArray(parsed.namespaceLevels)) {
@@ -312,9 +303,9 @@ function createLevelControlHandler(logger$1, options = {}) {
312
303
  send(res, 400, { error: `unknown level "${String(lvl)}" for namespace "${pat}"` });
313
304
  return;
314
305
  }
315
- if (logger$1.setNamespaceLevels) {
306
+ if (logger.setNamespaceLevels) {
316
307
  const coerced = Object.fromEntries(Object.entries(nl).map(([pat, lvl]) => [pat, String(lvl).toLowerCase()]));
317
- logger$1.setNamespaceLevels(coerced);
308
+ logger.setNamespaceLevels(coerced);
318
309
  } else internalWarn("level control: logger does not support setNamespaceLevels — ignored");
319
310
  }
320
311
  send(res, 200, snapshot());
@@ -376,9 +367,54 @@ function createLevelControlHandler(logger$1, options = {}) {
376
367
  send(res, 405, { error: `method ${method} not allowed` });
377
368
  };
378
369
  }
379
-
380
- //#endregion
381
- //#region src/utils/typed-logger.ts
370
+ // src/utils/typed-logger.ts
371
+ /**
372
+ * logixia — TypeScript typed log fields
373
+ *
374
+ * Solves the type-safety gap: standard `Record<string, unknown>` metadata gives
375
+ * zero IDE autocomplete and lets typos slip silently into production logs.
376
+ *
377
+ * Two complementary utilities:
378
+ *
379
+ * 1. `createTypedLogger<TFields>()` — wraps any IBaseLogger so that the second
380
+ * argument of every log method is constrained to `TFields` (a typed object).
381
+ * Compile-time safety, zero runtime overhead.
382
+ *
383
+ * 2. `defineLogSchema<TFields>(schema)` — declares expected fields with optional
384
+ * validators. In development (NODE_ENV !== 'production') every log call is
385
+ * validated against the schema and a warning is emitted for missing required
386
+ * fields or type mismatches.
387
+ *
388
+ * @example
389
+ * ```ts
390
+ * import { createTypedLogger, defineLogSchema } from 'logixia';
391
+ *
392
+ * interface OrderFields {
393
+ * orderId: string;
394
+ * userId: string;
395
+ * amount?: number;
396
+ * currency?: string;
397
+ * }
398
+ *
399
+ * const schema = defineLogSchema<OrderFields>({
400
+ * orderId: { type: 'string', required: true },
401
+ * userId: { type: 'string', required: true },
402
+ * amount: { type: 'number' },
403
+ * currency: { type: 'string' },
404
+ * });
405
+ *
406
+ * const orderLogger = createTypedLogger<OrderFields>(baseLogger, schema);
407
+ * await orderLogger.info('Order created', { orderId: 'ord_123', userId: 'usr_456', amount: 99.99 });
408
+ * // ^^^^ fully typed autocomplete ^^^^
409
+ * ```
410
+ */
411
+ function isProduction() {
412
+ try {
413
+ return process.env.NODE_ENV === "production";
414
+ } catch {
415
+ return false;
416
+ }
417
+ }
382
418
  /**
383
419
  * Define a typed schema for a category of log entries.
384
420
  *
@@ -389,7 +425,7 @@ function defineLogSchema(fields) {
389
425
  return {
390
426
  fields,
391
427
  validate(payload) {
392
- if (process.env["NODE_ENV"] === "production") return [];
428
+ if (isProduction()) return [];
393
429
  const warnings = [];
394
430
  for (const [key, def] of Object.entries(fields)) {
395
431
  const value = payload[key];
@@ -416,7 +452,7 @@ function defineLogSchema(fields) {
416
452
  * @param logger Any object that implements `IBaseLogger` (e.g. the result of `createLogger()`)
417
453
  * @param schema Optional schema for dev-time validation. Created with `defineLogSchema()`.
418
454
  */
419
- function createTypedLogger(logger$1, schema) {
455
+ function createTypedLogger(logger, schema) {
420
456
  function withValidation(level, fn, message, data) {
421
457
  if (schema && data) {
422
458
  const warnings = schema.validate(data);
@@ -425,25 +461,56 @@ function createTypedLogger(logger$1, schema) {
425
461
  return fn(message, data);
426
462
  }
427
463
  return {
428
- raw: logger$1,
464
+ raw: logger,
429
465
  error(messageOrError, data) {
430
466
  if (schema && data) {
431
467
  const warnings = schema.validate(data);
432
468
  const display = messageOrError instanceof Error ? messageOrError.message : messageOrError;
433
469
  for (const w of warnings) internalWarn(`[logixia/schema] ${w} — level=error message="${display}"`);
434
470
  }
435
- return logger$1.error(messageOrError, data);
471
+ return logger.error(messageOrError, data);
436
472
  },
437
- warn: (m, d) => withValidation("warn", logger$1.warn.bind(logger$1), m, d),
438
- info: (m, d) => withValidation("info", logger$1.info.bind(logger$1), m, d),
439
- debug: (m, d) => withValidation("debug", logger$1.debug.bind(logger$1), m, d),
440
- verbose: (m, d) => withValidation("verbose", (logger$1.verbose ?? logger$1.debug).bind(logger$1), m, d),
441
- trace: (m, d) => withValidation("trace", (logger$1.trace ?? logger$1.debug).bind(logger$1), m, d)
473
+ warn: (m, d) => withValidation("warn", logger.warn.bind(logger), m, d),
474
+ info: (m, d) => withValidation("info", logger.info.bind(logger), m, d),
475
+ debug: (m, d) => withValidation("debug", logger.debug.bind(logger), m, d),
476
+ verbose: (m, d) => withValidation("verbose", (logger.verbose ?? logger.debug).bind(logger), m, d),
477
+ trace: (m, d) => withValidation("trace", (logger.trace ?? logger.debug).bind(logger), m, d)
442
478
  };
443
479
  }
444
-
445
- //#endregion
446
- //#region src/wide-events.ts
480
+ // src/wide-events.ts
481
+ /**
482
+ * logixia — Canonical Log Lines / Wide Events.
483
+ *
484
+ * Emit ONE dense, structured event per unit of work (usually a request) instead
485
+ * of scattering details across many narrow log lines. Fields are accumulated as
486
+ * the request flows through middleware and business logic, then the whole event
487
+ * is emitted ONCE — in a `finally`/teardown path so it fires even on errors.
488
+ *
489
+ * This is the "canonical log line" pattern (Stripe) / "wide events" /
490
+ * "Observability 2.0" (Honeycomb): one pre-joined, queryable record per request,
491
+ * so operators never JOIN across log lines during an incident. It composes with
492
+ * logixia's existing trace correlation — when a trace is active, the event
493
+ * carries `traceId`/`spanId`, making it OTel-friendly.
494
+ *
495
+ * @example Manual scope
496
+ * ```ts
497
+ * import { withWideEvent, addEventFields } from 'logixia';
498
+ *
499
+ * await withWideEvent(logger, { route: '/checkout' }, async () => {
500
+ * addEventFields({ userId, planTier }); // from anywhere in the call tree
501
+ * addEventFields({ dbQueries: 4, cacheHit });
502
+ * // ...one wide event is emitted automatically when this callback settles,
503
+ * // even if it throws.
504
+ * });
505
+ * ```
506
+ *
507
+ * @example Express middleware (auto-emit on response finish/close)
508
+ * ```ts
509
+ * import { wideEventMiddleware } from 'logixia';
510
+ * app.use(wideEventMiddleware(logger));
511
+ * app.get('/x', (req, res) => { addEventFields({ handled: 'x' }); res.json({}); });
512
+ * ```
513
+ */
447
514
  const _storage = new AsyncLocalStorage();
448
515
  /**
449
516
  * Merge fields into the wide event for the current async scope. No-op (with no
@@ -464,7 +531,7 @@ function getEventFields() {
464
531
  const state = _storage.getStore();
465
532
  return state ? { ...state.fields } : void 0;
466
533
  }
467
- function emit(logger$1, state, options, extra) {
534
+ function emit(logger, state, options, extra) {
468
535
  if (state.emitted) return;
469
536
  state.emitted = true;
470
537
  const level = options.level ?? "info";
@@ -478,7 +545,7 @@ function emit(logger$1, state, options, extra) {
478
545
  const traceId = getCurrentTraceId();
479
546
  if (traceId !== void 0 && payload["traceId"] === void 0) payload["traceId"] = traceId;
480
547
  }
481
- const p = logger$1.logLevel(level, message, payload);
548
+ const p = logger.logLevel(level, message, payload);
482
549
  if (p && typeof p.catch === "function") p.catch(() => {});
483
550
  }
484
551
  /**
@@ -487,7 +554,7 @@ function emit(logger$1, state, options, extra) {
487
554
  * when the callback settles — on success OR error (the canonical "emit in
488
555
  * finally" guarantee). On error, `error` + `errorMessage` fields are added.
489
556
  */
490
- async function withWideEvent(logger$1, initialFields, callback, options = {}) {
557
+ async function withWideEvent(logger, initialFields, callback, options = {}) {
491
558
  const state = {
492
559
  fields: { ...initialFields },
493
560
  startMs: Date.now(),
@@ -496,10 +563,10 @@ async function withWideEvent(logger$1, initialFields, callback, options = {}) {
496
563
  return _storage.run(state, async () => {
497
564
  try {
498
565
  const result = await callback();
499
- emit(logger$1, state, options);
566
+ emit(logger, state, options);
500
567
  return result;
501
568
  } catch (error) {
502
- emit(logger$1, state, options, {
569
+ emit(logger, state, options, {
503
570
  error: true,
504
571
  errorMessage: error instanceof Error ? error.message : String(error)
505
572
  });
@@ -514,17 +581,19 @@ async function withWideEvent(logger$1, initialFields, callback, options = {}) {
514
581
  * more via `addEventFields`. The completion event includes `statusCode` and the
515
582
  * request duration.
516
583
  */
517
- function wideEventMiddleware(logger$1, options = {}) {
584
+ function wideEventMiddleware(logger, options = {}) {
585
+ const redactParams = buildNameSet(DEFAULT_REDACT_QUERY_PARAMS, options.redactQueryParams);
518
586
  return function logixiaWideEventMiddleware(req, res, next) {
519
587
  var _options$skip, _req$socket, _res$once, _res$once2;
520
588
  if ((_options$skip = options.skip) === null || _options$skip === void 0 ? void 0 : _options$skip.call(options, req)) {
521
589
  next();
522
590
  return;
523
591
  }
592
+ const rawUrl = req.originalUrl ?? req.url;
524
593
  const state = {
525
594
  fields: {
526
595
  method: req.method,
527
- url: req.originalUrl ?? req.url,
596
+ url: rawUrl === void 0 ? void 0 : redactUrlQuery(rawUrl, redactParams),
528
597
  ip: req.ip ?? ((_req$socket = req.socket) === null || _req$socket === void 0 ? void 0 : _req$socket.remoteAddress),
529
598
  ...options.enrich ? options.enrich(req) : {}
530
599
  },
@@ -532,192 +601,14 @@ function wideEventMiddleware(logger$1, options = {}) {
532
601
  emitted: false
533
602
  };
534
603
  const finalize = () => {
535
- emit(logger$1, state, options, { statusCode: res.statusCode ?? 0 });
604
+ emit(logger, state, options, { statusCode: res.statusCode ?? 0 });
536
605
  };
537
606
  (_res$once = res.once) === null || _res$once === void 0 || _res$once.call(res, "finish", finalize);
538
607
  (_res$once2 = res.once) === null || _res$once2 === void 0 || _res$once2.call(res, "close", finalize);
539
608
  _storage.run(state, () => next());
540
609
  };
541
610
  }
542
-
543
- //#endregion
544
- //#region src/transports/otlp.transport.ts
545
- const HEX_32 = /^[0-9a-f]{32}$/;
546
- /**
547
- * OTLP JSON wants a 32-char lowercase hex trace id. Dashed UUIDs are
548
- * normalised; anything else (or all zeros) returns undefined.
549
- */
550
- function toOtlpTraceId(id) {
551
- const hex = id.replace(/-/g, "").toLowerCase();
552
- return HEX_32.test(hex) && hex !== "0".repeat(32) ? hex : void 0;
553
- }
554
- /**
555
- * Map a logixia level name to an OTel SeverityNumber (1–24) and text.
556
- * Per the OTel logs SDK spec: TRACE=1, DEBUG=5, INFO=9, WARN=13, ERROR=17,
557
- * FATAL=21. Custom/unknown levels fall back to INFO (9).
558
- */
559
- function toOtelSeverity(level) {
560
- switch (level.toLowerCase()) {
561
- case "trace": return {
562
- number: 1,
563
- text: "TRACE"
564
- };
565
- case "verbose": return {
566
- number: 5,
567
- text: "DEBUG"
568
- };
569
- case "debug": return {
570
- number: 5,
571
- text: "DEBUG"
572
- };
573
- case "info": return {
574
- number: 9,
575
- text: "INFO"
576
- };
577
- case "warn":
578
- case "warning": return {
579
- number: 13,
580
- text: "WARN"
581
- };
582
- case "error": return {
583
- number: 17,
584
- text: "ERROR"
585
- };
586
- case "fatal": return {
587
- number: 21,
588
- text: "FATAL"
589
- };
590
- default: return {
591
- number: 9,
592
- text: "INFO"
593
- };
594
- }
595
- }
596
- /** Coerce a JS value into an OTLP AnyValue. */
597
- function toAnyValue(value) {
598
- if (typeof value === "string") return { stringValue: value };
599
- if (typeof value === "boolean") return { boolValue: value };
600
- if (typeof value === "number") return Number.isInteger(value) ? { intValue: value } : { doubleValue: value };
601
- if (typeof value === "bigint") return { stringValue: value.toString() };
602
- if (value === null || value === void 0) return { stringValue: "" };
603
- try {
604
- return { stringValue: stringifyForLog(value) };
605
- } catch {
606
- return { stringValue: String(value) };
607
- }
608
- }
609
- /** Build the OTLP KeyValue attribute list from a flat record. */
610
- function toAttributes(rec) {
611
- return Object.entries(rec).map(([key, value]) => ({
612
- key,
613
- value: toAnyValue(value)
614
- }));
615
- }
616
- var OtlpLogTransport = class {
617
- constructor(config) {
618
- this.name = "otlp";
619
- this.flushTimer = null;
620
- this.url = config.url;
621
- this.headers = config.headers ?? {};
622
- this.batchSize = config.batchSize ?? 100;
623
- this.flushIntervalMs = config.flushIntervalMs ?? 5e3;
624
- this.requestTimeoutMs = config.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
625
- this.level = config.level;
626
- this.buffer = new BatchBuffer({
627
- name: "OtlpLogTransport",
628
- batchSize: this.batchSize,
629
- maxBufferSize: config.maxBufferSize ?? DEFAULT_MAX_BUFFER_SIZE,
630
- send: (entries) => this.send(entries)
631
- });
632
- this.resourceAttrs = toAttributes({
633
- "service.name": config.serviceName ?? "logixia",
634
- ...config.serviceVersion ? { "service.version": config.serviceVersion } : {},
635
- ...config.environment ? { "deployment.environment": config.environment } : {},
636
- ...config.resourceAttributes ?? {}
637
- });
638
- this.flushTimer = setInterval(() => {
639
- this.flush().catch(() => {});
640
- }, this.flushIntervalMs);
641
- if (this.flushTimer.unref) this.flushTimer.unref();
642
- }
643
- write(entry) {
644
- this.buffer.push(entry);
645
- this.buffer.flushIfFull();
646
- }
647
- /** Convert one entry into an OTLP LogRecord. */
648
- toLogRecord(entry) {
649
- const sev = toOtelSeverity(entry.level);
650
- const tsNanos = String(entry.timestamp.getTime() * 1e6);
651
- const attrs = { ...entry.data ?? {} };
652
- if (entry.context !== void 0) attrs["context"] = entry.context;
653
- if (entry.appName !== void 0) attrs["app.name"] = entry.appName;
654
- if (entry.environment !== void 0) attrs["deployment.environment"] = entry.environment;
655
- const record = {
656
- timeUnixNano: tsNanos,
657
- observedTimeUnixNano: tsNanos,
658
- severityNumber: sev.number,
659
- severityText: sev.text,
660
- body: { stringValue: entry.message },
661
- attributes: toAttributes(attrs)
662
- };
663
- if (entry.traceId) {
664
- const traceId = toOtlpTraceId(entry.traceId);
665
- if (traceId) record["traceId"] = traceId;
666
- else record["attributes"].push({
667
- key: "trace_id",
668
- value: { stringValue: entry.traceId }
669
- });
670
- }
671
- return record;
672
- }
673
- buildPayload(entries) {
674
- return stringifyForLog({ resourceLogs: [{
675
- resource: { attributes: this.resourceAttrs },
676
- scopeLogs: [{
677
- scope: { name: "logixia" },
678
- logRecords: entries.map((e) => this.toLogRecord(e))
679
- }]
680
- }] });
681
- }
682
- flush() {
683
- return this.buffer.flush();
684
- }
685
- async send(entries) {
686
- if (typeof fetch !== "function") {
687
- internalWarn("OtlpLogTransport: global fetch unavailable — cannot export logs");
688
- return;
689
- }
690
- const controller = new AbortController();
691
- const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);
692
- try {
693
- const res = await fetch(this.url, {
694
- method: "POST",
695
- headers: {
696
- "Content-Type": "application/json",
697
- ...this.headers
698
- },
699
- body: this.buildPayload(entries),
700
- signal: controller.signal
701
- });
702
- if (!res.ok) throw new HttpError(res.status, "", "OTLP export");
703
- } catch (err) {
704
- if (controller.signal.aborted) throw new Error(`OTLP export timed out after ${this.requestTimeoutMs}ms`, { cause: err });
705
- throw err;
706
- } finally {
707
- clearTimeout(timer);
708
- }
709
- }
710
- async close() {
711
- if (this.flushTimer) {
712
- clearInterval(this.flushTimer);
713
- this.flushTimer = null;
714
- }
715
- await this.buffer.close();
716
- }
717
- };
718
-
719
- //#endregion
720
- //#region src/metrics.ts
611
+ // src/metrics.ts
721
612
  const DEFAULT_BUCKETS = [
722
613
  1,
723
614
  5,
@@ -859,9 +750,10 @@ var MetricsPlugin = class {
859
750
  const helpText = config.help ?? rawName.replace(/_/g, " ");
860
751
  lines.push(`# HELP ${metricName} ${helpText}`);
861
752
  lines.push(`# TYPE ${metricName} ${config.type}`);
862
- if (state.type === "counter") if (state.values.size === 0) lines.push(`${metricName} 0`);
863
- else for (const [labelKey, count] of state.values) lines.push(`${metricName}${renderLabels(labelKey)} ${count}`);
864
- else if (state.type === "histogram") for (const [labelKey, bucketCounts] of state.counts) {
753
+ if (state.type === "counter") {
754
+ if (state.values.size === 0) lines.push(`${metricName} 0`);
755
+ else for (const [labelKey, count] of state.values) lines.push(`${metricName}${renderLabels(labelKey)} ${count}`);
756
+ } else if (state.type === "histogram") for (const [labelKey, bucketCounts] of state.counts) {
865
757
  const labelSuffix = renderLabels(labelKey);
866
758
  const baseObj = labelKey === "{}" ? {} : JSON.parse(labelKey);
867
759
  for (let i = 0; i < state.buckets.length; i++) {
@@ -879,8 +771,10 @@ var MetricsPlugin = class {
879
771
  lines.push(`${metricName}_sum${labelSuffix} ${state.sums.get(labelKey) ?? 0}`);
880
772
  lines.push(`${metricName}_count${labelSuffix} ${state.observations.get(labelKey) ?? 0}`);
881
773
  }
882
- else if (state.type === "gauge") if (state.values.size === 0) lines.push(`${metricName} 0`);
883
- else for (const [labelKey, val] of state.values) lines.push(`${metricName}${renderLabels(labelKey)} ${val}`);
774
+ else if (state.type === "gauge") {
775
+ if (state.values.size === 0) lines.push(`${metricName} 0`);
776
+ else for (const [labelKey, val] of state.values) lines.push(`${metricName}${renderLabels(labelKey)} ${val}`);
777
+ }
884
778
  }
885
779
  return `${lines.join("\n")}\n`;
886
780
  }
@@ -997,9 +891,20 @@ var MetricsPlugin = class {
997
891
  function createMetricsPlugin(map, options) {
998
892
  return new MetricsPlugin(map, options);
999
893
  }
1000
-
1001
- //#endregion
1002
- //#region src/index.ts
894
+ // src/index.ts
895
+ /**
896
+ * Logixia - Advanced TypeScript Logger
897
+ *
898
+ * A comprehensive logging library with support for:
899
+ * - Multiple output formats (console, file, JSON)
900
+ * - Trace ID tracking
901
+ * - Performance monitoring
902
+ * - NestJS integration
903
+ * - Customizable log levels and colors
904
+ * - Intelligent log search and aggregation
905
+ * - Natural language query processing
906
+ * - Pattern recognition and anomaly detection
907
+ */
1003
908
  /**
1004
909
  * Create a new Logixia logger instance with TypeScript support for custom levels
1005
910
  * @param config - Logger configuration
@@ -1013,7 +918,6 @@ const logger = new LogixiaLogger(DEFAULT_CONFIG);
1013
918
  /**
1014
919
  * Export default configuration for reference
1015
920
  */
1016
-
1017
- //#endregion
1018
921
  export { BasicLogIndexer, BasicSearchEngine, CorrelationEngine, DEFAULT_CONFIG, DEFAULT_LOG_COLORS, DEFAULT_LOG_LEVELS, DEFAULT_TRACE_HEADERS, DiscordTransport, ErrorResponseBuilder, JsonFormatter, LogLevel, LogixiaContext, LogixiaException, LogixiaLogger, MAX_INCOMING_ID_LENGTH, MetricsPlugin, NLPSearchEngine, OVERFLOW_LABEL_VALUE, OtlpLogTransport, PatternRecognitionEngine, PluginRegistry, SearchManager, SlackTransport, TRACE_CONTEXT_KEY, TextFormatter, TraceContext, _setActiveContextKey, _shutdownRegistrySize, addEventFields, applyRedaction, createExpressContextMiddleware, createFastifyContextHook, createLevelControlHandler, createLogger, createMetricsPlugin, createTraceMiddleware, createTypedLogger, decycleValue, defineLogSchema, deregisterFromShutdown, disableOtelBridge, extractTraceId, flushOnExit, generateRequestId, generateTraceId, getActiveOtelContext, getCurrentTraceId, getEventFields, getOtelMetaFields, getTraceContextKey, globalPluginRegistry, initOtelBridge, isError, isLogixiaException, logger, normalizeError, redactObject, registerForShutdown, registerLevelSignal, resetShutdownHandlers, retrocycle, runWithTraceId, safeStringify, sanitizeIncomingId, serializeError, setEventField, setTraceId, stringifyForLog, toOtelSeverity, traceStorage, usePlugin, wideEventMiddleware, withWideEvent };
922
+
1019
923
  //# sourceMappingURL=index.mjs.map