logixia 2.0.4 → 2.0.7

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 (218) hide show
  1. package/README.md +172 -2614
  2. package/dist/{async-context-B05ArHgM.mjs → async-context-COuvmwsS.mjs} +4 -6
  3. package/dist/async-context-COuvmwsS.mjs.map +1 -0
  4. package/dist/{async-context-DTQgi8f7.js → async-context-Dv0bmPC-.js} +4 -6
  5. package/dist/async-context-Dv0bmPC-.js.map +1 -0
  6. package/dist/{azure-monitor.transport-DV03Z5P4.d.ts → azure-monitor.transport-Bvf7Xegt.d.ts} +2 -2
  7. package/dist/{azure-monitor.transport-DV03Z5P4.d.ts.map → azure-monitor.transport-Bvf7Xegt.d.ts.map} +1 -1
  8. package/dist/{azure-monitor.transport-C7kYyZUW.d.mts → azure-monitor.transport-CbSHOnNX.d.mts} +2 -2
  9. package/dist/{azure-monitor.transport-C7kYyZUW.d.mts.map → azure-monitor.transport-CbSHOnNX.d.mts.map} +1 -1
  10. package/dist/{azure-monitor.transport-BPbgjATu.mjs → azure-monitor.transport-Coz5Gesu.mjs} +5 -5
  11. package/dist/azure-monitor.transport-Coz5Gesu.mjs.map +1 -0
  12. package/dist/{azure-monitor.transport-CwbOLZHB.js → azure-monitor.transport-D6ryi8rA.js} +5 -5
  13. package/dist/azure-monitor.transport-D6ryi8rA.js.map +1 -0
  14. package/dist/azure.d.mts +1 -1
  15. package/dist/azure.d.ts +1 -1
  16. package/dist/azure.js +1 -1
  17. package/dist/azure.mjs +1 -1
  18. package/dist/{batch-buffer-DT4gdXmf.js → batch-buffer-CFzKnuNZ.js} +3 -3
  19. package/dist/{batch-buffer-DT4gdXmf.js.map → batch-buffer-CFzKnuNZ.js.map} +1 -1
  20. package/dist/{batch-buffer-0fgLmIPn.mjs → batch-buffer-CQUWDMYq.mjs} +3 -3
  21. package/dist/{batch-buffer-0fgLmIPn.mjs.map → batch-buffer-CQUWDMYq.mjs.map} +1 -1
  22. package/dist/browser.d.mts +5 -5
  23. package/dist/browser.d.mts.map +1 -1
  24. package/dist/browser.d.ts +5 -5
  25. package/dist/browser.d.ts.map +1 -1
  26. package/dist/browser.js +72 -13
  27. package/dist/browser.js.map +1 -1
  28. package/dist/browser.mjs +72 -13
  29. package/dist/browser.mjs.map +1 -1
  30. package/dist/{builder-D70z6kjj.mjs → builder-C_TgxEOW.mjs} +106 -153
  31. package/dist/builder-C_TgxEOW.mjs.map +1 -0
  32. package/dist/{builder-M7NoaugM.js → builder-CzmM_4Ub.js} +110 -180
  33. package/dist/builder-CzmM_4Ub.js.map +1 -0
  34. package/dist/cli/index.js +157 -66
  35. package/dist/cloudwatch.d.mts +1 -1
  36. package/dist/cloudwatch.d.ts +1 -1
  37. package/dist/cloudwatch.js +1 -1
  38. package/dist/cloudwatch.mjs +1 -1
  39. package/dist/{cloudwatch.transport-Bf7L4I59.d.ts → cloudwatch.transport-CQyT6U91.d.ts} +2 -2
  40. package/dist/{cloudwatch.transport-Bf7L4I59.d.ts.map → cloudwatch.transport-CQyT6U91.d.ts.map} +1 -1
  41. package/dist/{cloudwatch.transport-Rj4yTpRn.d.mts → cloudwatch.transport-CjVrI6S4.d.mts} +2 -2
  42. package/dist/{cloudwatch.transport-Rj4yTpRn.d.mts.map → cloudwatch.transport-CjVrI6S4.d.mts.map} +1 -1
  43. package/dist/{cloudwatch.transport-BTvYfLs9.mjs → cloudwatch.transport-Cr1aeTGj.mjs} +6 -6
  44. package/dist/cloudwatch.transport-Cr1aeTGj.mjs.map +1 -0
  45. package/dist/{cloudwatch.transport-B2wKQFF7.js → cloudwatch.transport-D4G5xYfG.js} +6 -6
  46. package/dist/cloudwatch.transport-D4G5xYfG.js.map +1 -0
  47. package/dist/correlation.d.mts +10 -55
  48. package/dist/correlation.d.mts.map +1 -1
  49. package/dist/correlation.d.ts +10 -55
  50. package/dist/correlation.d.ts.map +1 -1
  51. package/dist/correlation.js +15 -13
  52. package/dist/correlation.js.map +1 -1
  53. package/dist/correlation.mjs +15 -13
  54. package/dist/correlation.mjs.map +1 -1
  55. package/dist/{entry-fields-RLd1jCoR.js → entry-fields-CVwoQplO.js} +8 -3
  56. package/dist/entry-fields-CVwoQplO.js.map +1 -0
  57. package/dist/{entry-fields-CGuvT2R0.mjs → entry-fields-DNTKQxoU.mjs} +8 -3
  58. package/dist/entry-fields-DNTKQxoU.mjs.map +1 -0
  59. package/dist/gcp.d.mts +1 -1
  60. package/dist/gcp.d.ts +1 -1
  61. package/dist/gcp.js +1 -1
  62. package/dist/gcp.mjs +1 -1
  63. package/dist/{gcp.transport-CFQfdAOK.d.ts → gcp.transport-BCIvdFV-.d.ts} +4 -4
  64. package/dist/{gcp.transport-CFQfdAOK.d.ts.map → gcp.transport-BCIvdFV-.d.ts.map} +1 -1
  65. package/dist/{gcp.transport-KZe9hCAR.js → gcp.transport-CVuRpchl.js} +20 -16
  66. package/dist/gcp.transport-CVuRpchl.js.map +1 -0
  67. package/dist/{gcp.transport-C5D72b1g.d.mts → gcp.transport-D9SdLPwP.d.mts} +4 -4
  68. package/dist/{gcp.transport-C5D72b1g.d.mts.map → gcp.transport-D9SdLPwP.d.mts.map} +1 -1
  69. package/dist/{gcp.transport-CGKopAhQ.mjs → gcp.transport-LLK2bw2-.mjs} +20 -16
  70. package/dist/gcp.transport-LLK2bw2-.mjs.map +1 -0
  71. package/dist/http-shapes-BnBkJcid.d.mts +32 -0
  72. package/dist/http-shapes-BnBkJcid.d.mts.map +1 -0
  73. package/dist/http-shapes-BnBkJcid.d.ts +32 -0
  74. package/dist/http-shapes-BnBkJcid.d.ts.map +1 -0
  75. package/dist/{index-xqaJtAZn.d.mts → index-BAkPHp5D.d.mts} +150 -8
  76. package/dist/index-BAkPHp5D.d.mts.map +1 -0
  77. package/dist/{index-DwozbmB4.d.ts → index-e7LowmAu.d.ts} +150 -8
  78. package/dist/index-e7LowmAu.d.ts.map +1 -0
  79. package/dist/index.d.mts +21 -65
  80. package/dist/index.d.mts.map +1 -1
  81. package/dist/index.d.ts +21 -65
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +26 -26
  84. package/dist/index.js.map +1 -1
  85. package/dist/index.mjs +21 -21
  86. package/dist/index.mjs.map +1 -1
  87. package/dist/{internal-log-uCSd1PMc.mjs → internal-log-Cy5nF1ZL.mjs} +2 -81
  88. package/dist/internal-log-Cy5nF1ZL.mjs.map +1 -0
  89. package/dist/{internal-log-b0Vp4qrB.js → internal-log-DwqTjhpb.js} +1 -104
  90. package/dist/internal-log-DwqTjhpb.js.map +1 -0
  91. package/dist/{logitron-logger-D2B75Oc7.d.ts → logitron-logger-Qh3y9-WH.d.ts} +13 -100
  92. package/dist/logitron-logger-Qh3y9-WH.d.ts.map +1 -0
  93. package/dist/{logitron-logger-oEd6wNhf.d.mts → logitron-logger-sYuk8fOb.d.mts} +13 -100
  94. package/dist/logitron-logger-sYuk8fOb.d.mts.map +1 -0
  95. package/dist/middleware.d.mts +4 -17
  96. package/dist/middleware.d.mts.map +1 -1
  97. package/dist/middleware.d.ts +4 -17
  98. package/dist/middleware.d.ts.map +1 -1
  99. package/dist/middleware.js +9 -39
  100. package/dist/middleware.js.map +1 -1
  101. package/dist/middleware.mjs +7 -37
  102. package/dist/middleware.mjs.map +1 -1
  103. package/dist/nest.d.mts +24 -8
  104. package/dist/nest.d.mts.map +1 -1
  105. package/dist/nest.d.ts +24 -8
  106. package/dist/nest.d.ts.map +1 -1
  107. package/dist/nest.js +140 -27
  108. package/dist/nest.js.map +1 -1
  109. package/dist/nest.mjs +140 -27
  110. package/dist/nest.mjs.map +1 -1
  111. package/dist/{transport.manager-DkcEOlqV.js → otel-ChnVYRLA.js} +214 -23
  112. package/dist/otel-ChnVYRLA.js.map +1 -0
  113. package/dist/{transport.manager-eZ_EeC00.mjs → otel-DOuwGPCd.mjs} +173 -24
  114. package/dist/otel-DOuwGPCd.mjs.map +1 -0
  115. package/dist/{request-trace-C_fvIDv4.mjs → request-trace-BgNykH9M.mjs} +1 -5
  116. package/dist/{request-trace-C_fvIDv4.mjs.map → request-trace-BgNykH9M.mjs.map} +1 -1
  117. package/dist/{request-trace-wTJdKp6-.js → request-trace-ByujsUZk.js} +1 -5
  118. package/dist/{request-trace-wTJdKp6-.js.map → request-trace-ByujsUZk.js.map} +1 -1
  119. package/dist/{safe-stringify-BMRl3EX3.mjs → safe-stringify--7gbe95n.mjs} +37 -12
  120. package/dist/safe-stringify--7gbe95n.mjs.map +1 -0
  121. package/dist/{safe-stringify-DLz1Kz3o.js → safe-stringify-CN7icp8S.js} +37 -12
  122. package/dist/safe-stringify-CN7icp8S.js.map +1 -0
  123. package/dist/{search-DUfWuzFP.js → search-CRjhHxe9.js} +269 -25
  124. package/dist/search-CRjhHxe9.js.map +1 -0
  125. package/dist/{search-CazwyX5Z.d.ts → search-D-8HJADE.d.mts} +5 -2
  126. package/dist/search-D-8HJADE.d.mts.map +1 -0
  127. package/dist/{search-CWMVYC-R.mjs → search-DAXKE-P9.mjs} +269 -25
  128. package/dist/search-DAXKE-P9.mjs.map +1 -0
  129. package/dist/{search-BH33XhuU.d.mts → search-DPwTKPve.d.ts} +5 -2
  130. package/dist/search-DPwTKPve.d.ts.map +1 -0
  131. package/dist/search.d.mts +1 -1
  132. package/dist/search.d.ts +1 -1
  133. package/dist/search.js +1 -1
  134. package/dist/search.mjs +1 -1
  135. package/dist/{secret-config-CBZBs0p1.js → secret-config-BvFl2dC8.js} +7 -7
  136. package/dist/secret-config-BvFl2dC8.js.map +1 -0
  137. package/dist/{secret-config-BegMLkYl.mjs → secret-config-ByGq7kJd.mjs} +5 -5
  138. package/dist/secret-config-ByGq7kJd.mjs.map +1 -0
  139. package/dist/sensitive-names-CHMowujD.js +276 -0
  140. package/dist/sensitive-names-CHMowujD.js.map +1 -0
  141. package/dist/sensitive-names-o__1PUUR.mjs +217 -0
  142. package/dist/sensitive-names-o__1PUUR.mjs.map +1 -0
  143. package/dist/{slack.transport-DxHOXlLu.d.mts → slack.transport-BDyENuR0.d.mts} +2 -2
  144. package/dist/{slack.transport-DxHOXlLu.d.mts.map → slack.transport-BDyENuR0.d.mts.map} +1 -1
  145. package/dist/{slack.transport-DrirgDNy.d.ts → slack.transport-C6E0l4kw.d.ts} +2 -2
  146. package/dist/{slack.transport-DrirgDNy.d.ts.map → slack.transport-C6E0l4kw.d.ts.map} +1 -1
  147. package/dist/{slack.transport-Ce96JBDk.mjs → slack.transport-CSj1j0_X.mjs} +66 -15
  148. package/dist/slack.transport-CSj1j0_X.mjs.map +1 -0
  149. package/dist/{slack.transport-Dlx3xvb7.js → slack.transport-zLQ9MGxS.js} +67 -16
  150. package/dist/slack.transport-zLQ9MGxS.js.map +1 -0
  151. package/dist/testing.d.mts +11 -4
  152. package/dist/testing.d.mts.map +1 -1
  153. package/dist/testing.d.ts +11 -4
  154. package/dist/testing.d.ts.map +1 -1
  155. package/dist/testing.js +38 -3
  156. package/dist/testing.js.map +1 -1
  157. package/dist/testing.mjs +38 -3
  158. package/dist/testing.mjs.map +1 -1
  159. package/dist/{transport.types-BJVL1QQl.d.ts → transport.types-CzJq4IrF.d.mts} +14 -3
  160. package/dist/transport.types-CzJq4IrF.d.mts.map +1 -0
  161. package/dist/{transport.types-BJVL1QQl.d.mts → transport.types-CzJq4IrF.d.ts} +14 -3
  162. package/dist/transport.types-CzJq4IrF.d.ts.map +1 -0
  163. package/dist/transports.d.mts +25 -13
  164. package/dist/transports.d.mts.map +1 -1
  165. package/dist/transports.d.ts +25 -13
  166. package/dist/transports.d.ts.map +1 -1
  167. package/dist/transports.js +15 -15
  168. package/dist/transports.mjs +6 -6
  169. package/dist/worker-entry.js +130 -25
  170. package/dist/worker.d.mts +1 -1
  171. package/dist/worker.d.ts +1 -1
  172. package/dist/worker.js +1 -1
  173. package/dist/worker.mjs +1 -1
  174. package/dist/{worker.transport-BuPwBi3d.d.ts → worker.transport-B9mCQSM1.d.ts} +7 -2
  175. package/dist/worker.transport-B9mCQSM1.d.ts.map +1 -0
  176. package/dist/{worker.transport-hJay1wxA.d.mts → worker.transport-Bl8lFRck.d.mts} +7 -2
  177. package/dist/worker.transport-Bl8lFRck.d.mts.map +1 -0
  178. package/dist/{worker.transport-DLVA4y2e.mjs → worker.transport-D78xhNhB.mjs} +13 -10
  179. package/dist/worker.transport-D78xhNhB.mjs.map +1 -0
  180. package/dist/{worker.transport-C6GNl_r2.js → worker.transport-DQDv1nAJ.js} +13 -10
  181. package/dist/worker.transport-DQDv1nAJ.js.map +1 -0
  182. package/package.json +33 -65
  183. package/dist/async-context-B05ArHgM.mjs.map +0 -1
  184. package/dist/async-context-DTQgi8f7.js.map +0 -1
  185. package/dist/azure-monitor.transport-BPbgjATu.mjs.map +0 -1
  186. package/dist/azure-monitor.transport-CwbOLZHB.js.map +0 -1
  187. package/dist/builder-D70z6kjj.mjs.map +0 -1
  188. package/dist/builder-M7NoaugM.js.map +0 -1
  189. package/dist/cloudwatch.transport-B2wKQFF7.js.map +0 -1
  190. package/dist/cloudwatch.transport-BTvYfLs9.mjs.map +0 -1
  191. package/dist/entry-fields-CGuvT2R0.mjs.map +0 -1
  192. package/dist/entry-fields-RLd1jCoR.js.map +0 -1
  193. package/dist/gcp.transport-CGKopAhQ.mjs.map +0 -1
  194. package/dist/gcp.transport-KZe9hCAR.js.map +0 -1
  195. package/dist/index-DwozbmB4.d.ts.map +0 -1
  196. package/dist/index-xqaJtAZn.d.mts.map +0 -1
  197. package/dist/internal-log-b0Vp4qrB.js.map +0 -1
  198. package/dist/internal-log-uCSd1PMc.mjs.map +0 -1
  199. package/dist/logitron-logger-D2B75Oc7.d.ts.map +0 -1
  200. package/dist/logitron-logger-oEd6wNhf.d.mts.map +0 -1
  201. package/dist/safe-stringify-BMRl3EX3.mjs.map +0 -1
  202. package/dist/safe-stringify-DLz1Kz3o.js.map +0 -1
  203. package/dist/search-BH33XhuU.d.mts.map +0 -1
  204. package/dist/search-CWMVYC-R.mjs.map +0 -1
  205. package/dist/search-CazwyX5Z.d.ts.map +0 -1
  206. package/dist/search-DUfWuzFP.js.map +0 -1
  207. package/dist/secret-config-BegMLkYl.mjs.map +0 -1
  208. package/dist/secret-config-CBZBs0p1.js.map +0 -1
  209. package/dist/slack.transport-Ce96JBDk.mjs.map +0 -1
  210. package/dist/slack.transport-Dlx3xvb7.js.map +0 -1
  211. package/dist/transport.manager-DkcEOlqV.js.map +0 -1
  212. package/dist/transport.manager-eZ_EeC00.mjs.map +0 -1
  213. package/dist/transport.types-BJVL1QQl.d.mts.map +0 -1
  214. package/dist/transport.types-BJVL1QQl.d.ts.map +0 -1
  215. package/dist/worker.transport-BuPwBi3d.d.ts.map +0 -1
  216. package/dist/worker.transport-C6GNl_r2.js.map +0 -1
  217. package/dist/worker.transport-DLVA4y2e.mjs.map +0 -1
  218. package/dist/worker.transport-hJay1wxA.d.mts.map +0 -1
@@ -1,11 +1,11 @@
1
- import { t as __require } from "./rolldown-runtime-D3PmRqjj.mjs";
2
- import { o as TraceContext } from "./request-trace-C_fvIDv4.mjs";
3
- import { t as LogixiaContext } from "./async-context-B05ArHgM.mjs";
4
- import { n as internalLog, o as SENSITIVE_KEY_NAMES, r as internalWarn, t as internalError } from "./internal-log-uCSd1PMc.mjs";
5
- import { n as protectSecrets } from "./secret-config-BegMLkYl.mjs";
1
+ import { l as assignOwn, r as SENSITIVE_KEY_NAMES } from "./sensitive-names-o__1PUUR.mjs";
2
+ import { o as TraceContext } from "./request-trace-BgNykH9M.mjs";
3
+ import { t as LogixiaContext } from "./async-context-COuvmwsS.mjs";
4
+ import { n as protectSecrets } from "./secret-config-ByGq7kJd.mjs";
5
+ import { n as internalLog, r as internalWarn, t as internalError } from "./internal-log-Cy5nF1ZL.mjs";
6
6
  import { t as safeToString } from "./coerce.utils-B_rEudCn.mjs";
7
- import { i as stringifyForLog } from "./safe-stringify-BMRl3EX3.mjs";
8
- import { d as stripControlChars, t as TransportManager } from "./transport.manager-eZ_EeC00.mjs";
7
+ import { i as stringifyForLog } from "./safe-stringify--7gbe95n.mjs";
8
+ import { c as TransportManager, n as _getOtelPayloadIfEnabled, r as _isOtelBridgeEnabled, v as stripControlChars } from "./otel-DOuwGPCd.mjs";
9
9
  import buildFastStringify from "fast-json-stringify";
10
10
  import { constants } from "node:os";
11
11
  // src/types/index.ts
@@ -243,11 +243,10 @@ function _serializeError(error, includeStack, maxDepth, excludeFields, depth, se
243
243
  ]);
244
244
  for (const key of Object.getOwnPropertyNames(error)) {
245
245
  if (skip.has(key)) continue;
246
- if (key === "__proto__" || key === "constructor" || key === "prototype") continue;
247
246
  try {
248
- serialized[key] = serializeValue(errorRecord[key], maxDepth - depth - 1, seen);
247
+ assignOwn(serialized, key, serializeValue(errorRecord[key], maxDepth - depth - 1, seen));
249
248
  } catch {
250
- serialized[key] = "[Unserializable]";
249
+ assignOwn(serialized, key, "[Unserializable]");
251
250
  }
252
251
  }
253
252
  return serialized;
@@ -282,13 +281,10 @@ function serializeValue(value, remainingDepth, seen) {
282
281
  if (seen.has(value)) return "[Circular]";
283
282
  seen.add(value);
284
283
  const out = {};
285
- for (const [k, v] of Object.entries(value)) {
286
- if (k === "__proto__" || k === "constructor" || k === "prototype") continue;
287
- try {
288
- out[k] = serializeValue(v, remainingDepth - 1, seen);
289
- } catch {
290
- out[k] = "[Unserializable]";
291
- }
284
+ for (const [k, v] of Object.entries(value)) try {
285
+ assignOwn(out, k, serializeValue(v, remainingDepth - 1, seen));
286
+ } catch {
287
+ assignOwn(out, k, "[Unserializable]");
292
288
  }
293
289
  return out;
294
290
  }
@@ -314,111 +310,6 @@ function normalizeError(error) {
314
310
  }
315
311
  return new Error(String(error));
316
312
  }
317
- // src/utils/otel.ts
318
- let _otelApi;
319
- function tryLoadOtelApi() {
320
- if (_otelApi !== void 0) return _otelApi;
321
- try {
322
- _otelApi = __require("@opentelemetry/api");
323
- return _otelApi;
324
- } catch {
325
- _otelApi = null;
326
- return null;
327
- }
328
- }
329
- /**
330
- * Read the currently active OTel span context (if any) and return its fields
331
- * in a plain object suitable for spreading into a log entry.
332
- *
333
- * Returns `undefined` when:
334
- * - `@opentelemetry/api` is not installed
335
- * - No active span exists (root context)
336
- * - The span context is invalid (all-zeros)
337
- */
338
- function getActiveOtelContext(opts = {}) {
339
- const api = tryLoadOtelApi();
340
- if (!api) return void 0;
341
- try {
342
- const ctx = api.context.active();
343
- const sc = api.trace.getSpanContext(ctx);
344
- if (!sc || !api.trace.isSpanContextValid(sc)) return void 0;
345
- const isSampled = (sc.traceFlags & api.trace.TraceFlags.SAMPLED) === api.trace.TraceFlags.SAMPLED;
346
- if (opts.sampledOnly && !isSampled) return void 0;
347
- return {
348
- traceId: sc.traceId,
349
- spanId: sc.spanId,
350
- traceFlags: sc.traceFlags,
351
- isSampled
352
- };
353
- } catch {
354
- return;
355
- }
356
- }
357
- /**
358
- * Returns a metadata object with OTel context fields ready to merge into a log call,
359
- * using the configured field names.
360
- *
361
- * Returns `{}` when no active span exists (safe to spread unconditionally).
362
- *
363
- * @example
364
- * ```ts
365
- * await logger.info('Payment processed', {
366
- * ...getOtelMetaFields(),
367
- * orderId: 'ord_123',
368
- * });
369
- * ```
370
- */
371
- function getOtelMetaFields(opts = {}) {
372
- const { traceIdField = "traceId", spanIdField = "spanId", traceFlagsField = "traceFlags" } = opts;
373
- const ctx = getActiveOtelContext(opts);
374
- if (!ctx) return {};
375
- return {
376
- [traceIdField]: ctx.traceId,
377
- [spanIdField]: ctx.spanId,
378
- [traceFlagsField]: ctx.traceFlags
379
- };
380
- }
381
- let _bridgeOptions = null;
382
- /**
383
- * Initialise the global OTel bridge.
384
- *
385
- * Once called, logixia's internal log pipeline checks for an active OTel span
386
- * on **every** log call and automatically merges the span context into the
387
- * entry's metadata — no per-call wiring needed.
388
- *
389
- * Call once at app startup, **after** the OTel SDK has been initialised:
390
- * ```ts
391
- * import { initOtelBridge } from 'logixia';
392
- * initOtelBridge();
393
- * ```
394
- */
395
- function initOtelBridge(opts = {}) {
396
- _bridgeOptions = opts;
397
- }
398
- /**
399
- * @internal
400
- * True when initOtelBridge() has been called. Lets the logger hot path skip the
401
- * `_getOtelPayloadIfEnabled()` call (and its `{}` allocation + Object.keys) on
402
- * every log when the bridge is off — the overwhelmingly common case.
403
- */
404
- function _isOtelBridgeEnabled() {
405
- return _bridgeOptions !== null;
406
- }
407
- /**
408
- * @internal
409
- * Used by the core logger to inject OTel context when the bridge is active.
410
- * Returns `{}` when the bridge is not initialised or no active span exists.
411
- */
412
- function _getOtelPayloadIfEnabled() {
413
- if (!_bridgeOptions) return {};
414
- return getOtelMetaFields(_bridgeOptions);
415
- }
416
- /**
417
- * Disable the OTel bridge (useful for tests).
418
- */
419
- function disableOtelBridge() {
420
- _bridgeOptions = null;
421
- }
422
313
  // src/utils/redact.utils.ts
423
314
  const DEFAULT_CENSOR = "[REDACTED]";
424
315
  /** Maximum nesting depth walked; deeper values are replaced with a marker. */
@@ -620,10 +511,9 @@ function walkRecord(obj, state, fullPath, bare, depth) {
620
511
  let result;
621
512
  const entries = Object.entries(obj);
622
513
  for (const [index, [key, value]] of entries.entries()) {
623
- const forbidden = key === "__proto__" || key === "constructor" || key === "prototype";
624
- const next = forbidden ? void 0 : walkValue(value, state, joinPath(fullPath, key), joinPath(bare, key), depth);
625
- if ((forbidden || next !== value) && !result) result = Object.fromEntries(entries.slice(0, index));
626
- if (result && !forbidden) result[key] = next;
514
+ const next = walkValue(value, state, joinPath(fullPath, key), joinPath(bare, key), depth);
515
+ if (next !== value && !result) result = Object.fromEntries(entries.slice(0, index));
516
+ if (result) assignOwn(result, key, next);
627
517
  }
628
518
  return result ?? obj;
629
519
  }
@@ -1035,6 +925,48 @@ function resetShutdownHandlers() {
1035
925
  shutdownHandlerRegistered = false;
1036
926
  shutdownInProgress = false;
1037
927
  }
928
+ const RESERVED = /* @__PURE__ */ new Set([
929
+ "logLevel",
930
+ "time",
931
+ "timeEnd",
932
+ "timeAsync",
933
+ "setLevel",
934
+ "getLevel",
935
+ "setNamespaceLevels",
936
+ "patchNamespaceLevels",
937
+ "getNamespaceLevels",
938
+ "setContext",
939
+ "getContext",
940
+ "enableField",
941
+ "disableField",
942
+ "isFieldEnabled",
943
+ "getFieldState",
944
+ "resetFieldState",
945
+ "enableTransportLevelPrompting",
946
+ "disableTransportLevelPrompting",
947
+ "setTransportLevels",
948
+ "getTransportLevels",
949
+ "clearTransportLevelPreferences",
950
+ "getAvailableTransports",
951
+ "child",
952
+ "flush",
953
+ "healthCheck",
954
+ "close",
955
+ "use",
956
+ "unuse"
957
+ ]);
958
+ /**
959
+ * Warn when `levels` defines a level named like a logger method (e.g. `flush`, `child`).
960
+ * The method keeps its normal behaviour and no level shortcut is installed for that
961
+ * name; log at it with `logger.logLevel(name, ...)` or pick a different level name.
962
+ * Returns the clashing names.
963
+ */
964
+ function warnOnReservedLevelNames(levels) {
965
+ if (!levels) return [];
966
+ const clashes = Object.keys(levels).filter((name) => RESERVED.has(name));
967
+ if (clashes.length > 0) internalWarn(`levelOptions.levels uses reserved logger method name(s): ${clashes.join(", ")}. No level shortcut is created for them; use logger.logLevel(name, ...) or rename the level.`);
968
+ return clashes;
969
+ }
1038
970
  // src/core/logitron-logger.ts
1039
971
  /**
1040
972
  * Core Logixia Logger implementation
@@ -1155,7 +1087,13 @@ var LogixiaLogger = class LogixiaLogger {
1155
1087
  this._formattedLevels = /* @__PURE__ */ new Map();
1156
1088
  this._formattedAppName = "";
1157
1089
  this._hasRedact = false;
1090
+ this._nsSeenVersion = 0;
1158
1091
  this._parent = parent;
1092
+ this._nsStore = parent ? parent._nsStore : {
1093
+ levels: { ...config.namespaceLevels },
1094
+ version: 0
1095
+ };
1096
+ this._nsSeenVersion = this._nsStore.version;
1159
1097
  this._pluginRegistry = parent ? parent._pluginRegistry : new PluginRegistry();
1160
1098
  const defaultConfig = {
1161
1099
  appName: "App",
@@ -1211,14 +1149,14 @@ var LogixiaLogger = class LogixiaLogger {
1211
1149
  this.transportManager = parent.transportManager;
1212
1150
  this._sampler = parent._sampler;
1213
1151
  } else if (this.config.transports) {
1214
- var _this$config$levelOpt;
1152
+ var _this$config$levelOpt, _this$config$levelOpt2;
1215
1153
  const transportsWithColors = { ...this.config.transports };
1216
1154
  const userColors = (_this$config$levelOpt = this.config.levelOptions) === null || _this$config$levelOpt === void 0 ? void 0 : _this$config$levelOpt.colors;
1217
1155
  if (userColors && transportsWithColors.console) transportsWithColors.console = {
1218
1156
  ...typeof transportsWithColors.console === "object" ? transportsWithColors.console : {},
1219
1157
  levelColors: userColors
1220
1158
  };
1221
- this.transportManager = new TransportManager(transportsWithColors);
1159
+ this.transportManager = new TransportManager(transportsWithColors, (_this$config$levelOpt2 = this.config.levelOptions) === null || _this$config$levelOpt2 === void 0 ? void 0 : _this$config$levelOpt2.levels);
1222
1160
  }
1223
1161
  if (!parent && this.config.sampling) this._sampler = new Sampler(this.config.sampling, (stats) => {
1224
1162
  process.stdout.write(JSON.stringify({
@@ -1245,8 +1183,9 @@ var LogixiaLogger = class LogixiaLogger {
1245
1183
  });
1246
1184
  }
1247
1185
  createCustomLevelMethods() {
1248
- var _this$config$levelOpt2;
1249
- if ((_this$config$levelOpt2 = this.config.levelOptions) === null || _this$config$levelOpt2 === void 0 ? void 0 : _this$config$levelOpt2.levels) {
1186
+ var _this$config$levelOpt3, _this$config$levelOpt4;
1187
+ warnOnReservedLevelNames((_this$config$levelOpt3 = this.config.levelOptions) === null || _this$config$levelOpt3 === void 0 ? void 0 : _this$config$levelOpt3.levels);
1188
+ if ((_this$config$levelOpt4 = this.config.levelOptions) === null || _this$config$levelOpt4 === void 0 ? void 0 : _this$config$levelOpt4.levels) {
1250
1189
  for (const levelName of Object.keys(this.config.levelOptions.levels)) if (!this[levelName.toLowerCase()]) this[levelName.toLowerCase()] = async (message, data) => {
1251
1190
  await this.logLevel(levelName.toLowerCase(), message, data);
1252
1191
  };
@@ -1257,8 +1196,8 @@ var LogixiaLogger = class LogixiaLogger {
1257
1196
  * Keeps the actual log() call free of allocations in the common case.
1258
1197
  */
1259
1198
  _buildPerfCaches() {
1260
- var _this$config$levelOpt3, _this$config$format, _this$config$redact$p, _this$config$redact$p2;
1261
- const customLevelEntries = Object.entries(((_this$config$levelOpt3 = this.config.levelOptions) === null || _this$config$levelOpt3 === void 0 ? void 0 : _this$config$levelOpt3.levels) ?? {});
1199
+ var _this$config$levelOpt5, _this$config$format, _this$config$redact$p, _this$config$redact$p2;
1200
+ const customLevelEntries = Object.entries(((_this$config$levelOpt5 = this.config.levelOptions) === null || _this$config$levelOpt5 === void 0 ? void 0 : _this$config$levelOpt5.levels) ?? {});
1262
1201
  this._levelValues = new Map([
1263
1202
  [LogLevel.ERROR, 0],
1264
1203
  [LogLevel.WARN, 1],
@@ -1327,8 +1266,8 @@ var LogixiaLogger = class LogixiaLogger {
1327
1266
  for (const [lvl] of this._levelValues) {
1328
1267
  const upper = lvl.toUpperCase();
1329
1268
  if (colorize && this._fieldCache.get("level") !== false) {
1330
- var _this$config$levelOpt4;
1331
- let colorName = (_this$config$levelOpt4 = this.config.levelOptions) === null || _this$config$levelOpt4 === void 0 || (_this$config$levelOpt4 = _this$config$levelOpt4.colors) === null || _this$config$levelOpt4 === void 0 ? void 0 : _this$config$levelOpt4[lvl];
1269
+ var _this$config$levelOpt6;
1270
+ let colorName = (_this$config$levelOpt6 = this.config.levelOptions) === null || _this$config$levelOpt6 === void 0 || (_this$config$levelOpt6 = _this$config$levelOpt6.colors) === null || _this$config$levelOpt6 === void 0 ? void 0 : _this$config$levelOpt6[lvl];
1332
1271
  if (!colorName) {
1333
1272
  if (_BUILTIN_LEVELS.has(lvl)) colorName = "white";
1334
1273
  else {
@@ -1462,8 +1401,8 @@ var LogixiaLogger = class LogixiaLogger {
1462
1401
  * else a `NODE_ENV` default (`debug` in development, `warn` in test), else `info`.
1463
1402
  */
1464
1403
  getLevel() {
1465
- var _this$config$levelOpt5;
1466
- return ((_this$config$levelOpt5 = this.config.levelOptions) === null || _this$config$levelOpt5 === void 0 ? void 0 : _this$config$levelOpt5.level) ?? LogLevel.INFO;
1404
+ var _this$config$levelOpt7;
1405
+ return ((_this$config$levelOpt7 = this.config.levelOptions) === null || _this$config$levelOpt7 === void 0 ? void 0 : _this$config$levelOpt7.level) ?? LogLevel.INFO;
1467
1406
  }
1468
1407
  _validLevelList() {
1469
1408
  return [...this._levelValues.keys()].join(", ");
@@ -1492,6 +1431,10 @@ var LogixiaLogger = class LogixiaLogger {
1492
1431
  * (flip a module's verbosity live to chase a bug without raising global
1493
1432
  * volume). The new map fully replaces the previous one.
1494
1433
  *
1434
+ * The map is shared by a logger and all its `child()` loggers: calling this on
1435
+ * a child changes the whole family, and existing children pick the change up on
1436
+ * their next log call.
1437
+ *
1495
1438
  * @example
1496
1439
  * ```ts
1497
1440
  * // Turn on debug for the DB layer only, live:
@@ -1499,20 +1442,26 @@ var LogixiaLogger = class LogixiaLogger {
1499
1442
  * ```
1500
1443
  */
1501
1444
  setNamespaceLevels(levels) {
1502
- this.config.namespaceLevels = { ...levels };
1503
- this._buildPerfCaches();
1445
+ this._nsStore.levels = { ...levels };
1446
+ this._nsStore.version++;
1447
+ this._syncNamespaceLevels();
1504
1448
  }
1505
1449
  /** Merge entries into the existing per-namespace level map at runtime. */
1506
1450
  patchNamespaceLevels(levels) {
1507
- this.config.namespaceLevels = {
1508
- ...this.config.namespaceLevels,
1451
+ this._nsStore.levels = {
1452
+ ...this._nsStore.levels,
1509
1453
  ...levels
1510
1454
  };
1511
- this._buildPerfCaches();
1455
+ this._nsStore.version++;
1456
+ this._syncNamespaceLevels();
1512
1457
  }
1513
1458
  /** Return a copy of the current per-namespace level map. */
1514
1459
  getNamespaceLevels() {
1515
- return { ...this.config.namespaceLevels };
1460
+ return { ...this._nsStore.levels };
1461
+ }
1462
+ _syncNamespaceLevels() {
1463
+ this._nsSeenVersion = this._nsStore.version;
1464
+ this._minLevelValue = this._levelValues.get(this.resolveEffectiveLevel()) ?? 2;
1516
1465
  }
1517
1466
  /** Set the context label (e.g. a class or module name) attached to every subsequent entry. */
1518
1467
  setContext(context) {
@@ -1693,13 +1642,17 @@ var LogixiaLogger = class LogixiaLogger {
1693
1642
  const hasAls = alsContext !== void 0 && Object.keys(alsContext).length > 0;
1694
1643
  const otelFields = _isOtelBridgeEnabled() ? _getOtelPayloadIfEnabled() : void 0;
1695
1644
  const hasOtel = otelFields !== void 0 && Object.keys(otelFields).length > 0;
1645
+ const traceId = this.config.traceId ? activeTraceId ?? this.fallbackTraceId : void 0;
1696
1646
  let mergedData;
1697
- if (hasAls) mergedData = {
1698
- ...alsContext,
1699
- ...hasOtel ? otelFields : {},
1700
- ...data
1701
- };
1702
- else if (hasOtel) mergedData = {
1647
+ if (hasAls) {
1648
+ const als = { ...alsContext };
1649
+ if (traceId !== void 0 && als["traceId"] === traceId) delete als["traceId"];
1650
+ mergedData = {
1651
+ ...als,
1652
+ ...hasOtel ? otelFields : {},
1653
+ ...data
1654
+ };
1655
+ } else if (hasOtel) mergedData = {
1703
1656
  ...otelFields,
1704
1657
  ...data
1705
1658
  };
@@ -1718,7 +1671,6 @@ var LogixiaLogger = class LogixiaLogger {
1718
1671
  }
1719
1672
  else payload = rawPayload;
1720
1673
  }
1721
- const traceId = this.config.traceId ? activeTraceId ?? this.fallbackTraceId : void 0;
1722
1674
  let safeMessage = message;
1723
1675
  if (this._hasRedact) try {
1724
1676
  safeMessage = applyRedactionToString(message, this.config.redact);
@@ -1749,6 +1701,7 @@ var LogixiaLogger = class LogixiaLogger {
1749
1701
  * The level map and threshold are pre-built in _buildPerfCaches().
1750
1702
  */
1751
1703
  shouldLog(level) {
1704
+ if (this._nsSeenVersion !== this._nsStore.version) this._syncNamespaceLevels();
1752
1705
  const v = this._levelValues.get(level);
1753
1706
  return v !== void 0 && v <= this._minLevelValue;
1754
1707
  }
@@ -1769,8 +1722,8 @@ var LogixiaLogger = class LogixiaLogger {
1769
1722
  const nsKey = ns.split(".")[0].toUpperCase();
1770
1723
  const envNsLevel = this._validLevel(process.env[`LOGIXIA_LEVEL_${nsKey}`], `LOGIXIA_LEVEL_${nsKey}`);
1771
1724
  if (envNsLevel) return envNsLevel;
1772
- const namespaceLevels = this.config.namespaceLevels;
1773
- if (namespaceLevels) {
1725
+ const namespaceLevels = this._nsStore.levels;
1726
+ if (Object.keys(namespaceLevels).length > 0) {
1774
1727
  const sortedPatterns = Object.keys(namespaceLevels).sort((a, b) => b.length - a.length);
1775
1728
  for (const pattern of sortedPatterns) if (matchesNamespacePattern(ns, pattern)) {
1776
1729
  const nsLevel = this._validLevel(namespaceLevels[pattern], `namespaceLevels['${pattern}']`);
@@ -2087,6 +2040,6 @@ var ErrorResponseBuilder = class {
2087
2040
  };
2088
2041
  }
2089
2042
  };
2090
- export { globalPluginRegistry as C, DEFAULT_LOG_LEVELS as D, DEFAULT_LOG_COLORS as E, LogLevel as O, PluginRegistry as S, DEFAULT_CONFIG as T, getOtelMetaFields as _, isLogixiaException as a, normalizeError as b, _shutdownRegistrySize as c, registerForShutdown as d, resetShutdownHandlers as f, getActiveOtelContext as g, disableOtelBridge as h, LogixiaException as i, deregisterFromShutdown as l, redactObject as m, generateRequestId as n, LogixiaLogger as o, applyRedaction as p, generateTraceId as r, createLogger as s, ErrorResponseBuilder as t, flushOnExit as u, initOtelBridge as v, usePlugin as w, serializeError as x, isError as y };
2043
+ export { DEFAULT_LOG_LEVELS as C, DEFAULT_LOG_COLORS as S, serializeError as _, isLogixiaException as a, usePlugin as b, _shutdownRegistrySize as c, registerForShutdown as d, resetShutdownHandlers as f, normalizeError as g, isError as h, LogixiaException as i, deregisterFromShutdown as l, redactObject as m, generateRequestId as n, LogixiaLogger as o, applyRedaction as p, generateTraceId as r, createLogger as s, ErrorResponseBuilder as t, flushOnExit as u, PluginRegistry as v, LogLevel as w, DEFAULT_CONFIG as x, globalPluginRegistry as y };
2091
2044
 
2092
- //# sourceMappingURL=builder-D70z6kjj.mjs.map
2045
+ //# sourceMappingURL=builder-C_TgxEOW.mjs.map