logixia 2.0.11 → 2.2.0

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 (203) hide show
  1. package/README.md +4 -3
  2. package/dist/{async-context-BGUCdYAa.mjs → async-context-1YMPGgJZ.mjs} +3 -3
  3. package/dist/{async-context-BGUCdYAa.mjs.map → async-context-1YMPGgJZ.mjs.map} +1 -1
  4. package/dist/{async-context-D8um9I5V.js → async-context-CoPhbRG0.js} +4 -4
  5. package/dist/{async-context-D8um9I5V.js.map → async-context-CoPhbRG0.js.map} +1 -1
  6. package/dist/{azure-monitor.transport-CTnfwA0F.mjs → azure-monitor.transport-B_dqSV_o.mjs} +4 -4
  7. package/dist/{azure-monitor.transport-CTnfwA0F.mjs.map → azure-monitor.transport-B_dqSV_o.mjs.map} +1 -1
  8. package/dist/{azure-monitor.transport-C8KdmsSw.js → azure-monitor.transport-Bl3xVvpN.js} +4 -4
  9. package/dist/{azure-monitor.transport-C8KdmsSw.js.map → azure-monitor.transport-Bl3xVvpN.js.map} +1 -1
  10. package/dist/{azure-monitor.transport-CbSHOnNX.d.mts → azure-monitor.transport-C5VjvREZ.d.mts} +2 -2
  11. package/dist/{azure-monitor.transport-CbSHOnNX.d.mts.map → azure-monitor.transport-C5VjvREZ.d.mts.map} +1 -1
  12. package/dist/{azure-monitor.transport-Bvf7Xegt.d.ts → azure-monitor.transport-CyHDjHS-.d.ts} +2 -2
  13. package/dist/{azure-monitor.transport-Bvf7Xegt.d.ts.map → azure-monitor.transport-CyHDjHS-.d.ts.map} +1 -1
  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-BJqzpfpT.mjs → batch-buffer-BnmVCCwI.mjs} +2 -2
  19. package/dist/{batch-buffer-BJqzpfpT.mjs.map → batch-buffer-BnmVCCwI.mjs.map} +1 -1
  20. package/dist/{batch-buffer-BTQdAXwC.js → batch-buffer-C-ETEX3Y.js} +2 -2
  21. package/dist/{batch-buffer-BTQdAXwC.js.map → batch-buffer-C-ETEX3Y.js.map} +1 -1
  22. package/dist/browser.d.mts +2 -0
  23. package/dist/browser.d.mts.map +1 -1
  24. package/dist/browser.d.ts +2 -0
  25. package/dist/browser.d.ts.map +1 -1
  26. package/dist/browser.js +33 -15
  27. package/dist/browser.js.map +1 -1
  28. package/dist/browser.mjs +33 -15
  29. package/dist/browser.mjs.map +1 -1
  30. package/dist/{builder-C6kKEVrU.mjs → builder-CbttbixM.mjs} +158 -279
  31. package/dist/builder-CbttbixM.mjs.map +1 -0
  32. package/dist/{builder-Up4YxX7l.js → builder-Ck1tsC5d.js} +160 -305
  33. package/dist/builder-Ck1tsC5d.js.map +1 -0
  34. package/dist/cloudwatch.d.mts +1 -1
  35. package/dist/cloudwatch.d.ts +1 -1
  36. package/dist/cloudwatch.js +1 -1
  37. package/dist/cloudwatch.mjs +1 -1
  38. package/dist/{cloudwatch.transport-Bl1qzdBx.mjs → cloudwatch.transport-Brh5fmRN.mjs} +5 -5
  39. package/dist/{cloudwatch.transport-Bl1qzdBx.mjs.map → cloudwatch.transport-Brh5fmRN.mjs.map} +1 -1
  40. package/dist/{cloudwatch.transport-BoCyxNKO.js → cloudwatch.transport-DO9e__Z-.js} +5 -5
  41. package/dist/{cloudwatch.transport-BoCyxNKO.js.map → cloudwatch.transport-DO9e__Z-.js.map} +1 -1
  42. package/dist/{cloudwatch.transport-CQyT6U91.d.ts → cloudwatch.transport-DdSjUWvu.d.ts} +2 -2
  43. package/dist/{cloudwatch.transport-CQyT6U91.d.ts.map → cloudwatch.transport-DdSjUWvu.d.ts.map} +1 -1
  44. package/dist/{cloudwatch.transport-CjVrI6S4.d.mts → cloudwatch.transport-_hS7Mcc5.d.mts} +2 -2
  45. package/dist/{cloudwatch.transport-CjVrI6S4.d.mts.map → cloudwatch.transport-_hS7Mcc5.d.mts.map} +1 -1
  46. package/dist/correlation.js +3 -3
  47. package/dist/correlation.mjs +3 -3
  48. package/dist/{entry-fields-CJbeaoBs.js → entry-fields-BSLkzw18.js} +3 -3
  49. package/dist/{entry-fields-CJbeaoBs.js.map → entry-fields-BSLkzw18.js.map} +1 -1
  50. package/dist/{entry-fields-D_aNnjg0.mjs → entry-fields-J1OBi24o.mjs} +2 -2
  51. package/dist/{entry-fields-D_aNnjg0.mjs.map → entry-fields-J1OBi24o.mjs.map} +1 -1
  52. package/dist/error.utils-B8_CwESF.mjs +189 -0
  53. package/dist/error.utils-B8_CwESF.mjs.map +1 -0
  54. package/dist/error.utils-fZkRExam.js +212 -0
  55. package/dist/error.utils-fZkRExam.js.map +1 -0
  56. package/dist/fastify.d.mts +89 -0
  57. package/dist/fastify.d.mts.map +1 -0
  58. package/dist/fastify.d.ts +89 -0
  59. package/dist/fastify.d.ts.map +1 -0
  60. package/dist/fastify.js +265 -0
  61. package/dist/fastify.js.map +1 -0
  62. package/dist/fastify.mjs +263 -0
  63. package/dist/fastify.mjs.map +1 -0
  64. package/dist/gcp.d.mts +1 -1
  65. package/dist/gcp.d.ts +1 -1
  66. package/dist/gcp.js +1 -1
  67. package/dist/gcp.mjs +1 -1
  68. package/dist/{gcp.transport-DOH4bpWM.mjs → gcp.transport-BY1Z3cS0.mjs} +5 -5
  69. package/dist/{gcp.transport-DOH4bpWM.mjs.map → gcp.transport-BY1Z3cS0.mjs.map} +1 -1
  70. package/dist/{gcp.transport-D9SdLPwP.d.mts → gcp.transport-C8VJiEM7.d.mts} +2 -2
  71. package/dist/{gcp.transport-D9SdLPwP.d.mts.map → gcp.transport-C8VJiEM7.d.mts.map} +1 -1
  72. package/dist/{gcp.transport-BCIvdFV-.d.ts → gcp.transport-Ct0BtKFo.d.ts} +2 -2
  73. package/dist/{gcp.transport-BCIvdFV-.d.ts.map → gcp.transport-Ct0BtKFo.d.ts.map} +1 -1
  74. package/dist/{gcp.transport-D_NHVZrw.js → gcp.transport-V9R4dwdT.js} +5 -5
  75. package/dist/{gcp.transport-D_NHVZrw.js.map → gcp.transport-V9R4dwdT.js.map} +1 -1
  76. package/dist/hono.d.mts +66 -0
  77. package/dist/hono.d.mts.map +1 -0
  78. package/dist/hono.d.ts +66 -0
  79. package/dist/hono.d.ts.map +1 -0
  80. package/dist/hono.js +512 -0
  81. package/dist/hono.js.map +1 -0
  82. package/dist/hono.mjs +511 -0
  83. package/dist/hono.mjs.map +1 -0
  84. package/dist/{index-BAkPHp5D.d.mts → index-B3ajtXJd.d.mts} +2 -2
  85. package/dist/{index-BAkPHp5D.d.mts.map → index-B3ajtXJd.d.mts.map} +1 -1
  86. package/dist/{index-e7LowmAu.d.ts → index-oqD3WNxf.d.ts} +2 -2
  87. package/dist/{index-e7LowmAu.d.ts.map → index-oqD3WNxf.d.ts.map} +1 -1
  88. package/dist/index.d.mts +8 -7
  89. package/dist/index.d.mts.map +1 -1
  90. package/dist/index.d.ts +8 -7
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +23 -20
  93. package/dist/index.js.map +1 -1
  94. package/dist/index.mjs +11 -9
  95. package/dist/index.mjs.map +1 -1
  96. package/dist/{logitron-logger-DVUdgmBY.d.ts → logitron-logger-Csn3e6Qu.d.ts} +2 -2
  97. package/dist/{logitron-logger-DVUdgmBY.d.ts.map → logitron-logger-Csn3e6Qu.d.ts.map} +1 -1
  98. package/dist/{logitron-logger-DoWmMjYB.d.mts → logitron-logger-fMOkXr8H.d.mts} +2 -2
  99. package/dist/{logitron-logger-DoWmMjYB.d.mts.map → logitron-logger-fMOkXr8H.d.mts.map} +1 -1
  100. package/dist/middleware.d.mts +1 -1
  101. package/dist/middleware.d.ts +1 -1
  102. package/dist/middleware.js +6 -5
  103. package/dist/middleware.js.map +1 -1
  104. package/dist/middleware.mjs +4 -3
  105. package/dist/middleware.mjs.map +1 -1
  106. package/dist/nest.d.mts +47 -15
  107. package/dist/nest.d.mts.map +1 -1
  108. package/dist/nest.d.ts +47 -15
  109. package/dist/nest.d.ts.map +1 -1
  110. package/dist/nest.js +172 -50
  111. package/dist/nest.js.map +1 -1
  112. package/dist/nest.mjs +168 -46
  113. package/dist/nest.mjs.map +1 -1
  114. package/dist/{otel-DH6-G6DR.js → otel-BrgvxLDW.js} +319 -66
  115. package/dist/otel-BrgvxLDW.js.map +1 -0
  116. package/dist/{otel-DAVxpArV.mjs → otel-C5jBV_l_.mjs} +319 -66
  117. package/dist/otel-C5jBV_l_.mjs.map +1 -0
  118. package/dist/own-property-BWkibepN.js +40 -0
  119. package/dist/own-property-BWkibepN.js.map +1 -0
  120. package/dist/own-property-CjFw9qwZ.mjs +29 -0
  121. package/dist/own-property-CjFw9qwZ.mjs.map +1 -0
  122. package/dist/{request-trace-C7kXMjx5.js → request-trace-6NBSw5lt.js} +14 -3
  123. package/dist/{request-trace-C7kXMjx5.js.map → request-trace-6NBSw5lt.js.map} +1 -1
  124. package/dist/{request-trace-Dekcnenb.mjs → request-trace-txUhyyre.mjs} +9 -4
  125. package/dist/{request-trace-Dekcnenb.mjs.map → request-trace-txUhyyre.mjs.map} +1 -1
  126. package/dist/{safe-stringify-pZOnzGRJ.mjs → safe-stringify-B5p5ktFe.mjs} +2 -2
  127. package/dist/{safe-stringify-pZOnzGRJ.mjs.map → safe-stringify-B5p5ktFe.mjs.map} +1 -1
  128. package/dist/{safe-stringify-CJisLyZ3.js → safe-stringify-J3sh-7YM.js} +5 -5
  129. package/dist/{safe-stringify-CJisLyZ3.js.map → safe-stringify-J3sh-7YM.js.map} +1 -1
  130. package/dist/{search-Crf2IEoA.d.mts → search-B-hJe2N-.d.mts} +7 -3
  131. package/dist/{search-Crf2IEoA.d.mts.map → search-B-hJe2N-.d.mts.map} +1 -1
  132. package/dist/{search-B4eEzrhM.d.ts → search-BlKBLm5D.d.ts} +7 -3
  133. package/dist/{search-B4eEzrhM.d.ts.map → search-BlKBLm5D.d.ts.map} +1 -1
  134. package/dist/{search-CjYl-mo5.mjs → search-CTR4XNHq.mjs} +52 -14
  135. package/dist/search-CTR4XNHq.mjs.map +1 -0
  136. package/dist/{search-CJw_xoQl.js → search-_qx4YzRP.js} +52 -14
  137. package/dist/search-_qx4YzRP.js.map +1 -0
  138. package/dist/search.d.mts +1 -1
  139. package/dist/search.d.ts +1 -1
  140. package/dist/search.js +1 -1
  141. package/dist/search.mjs +1 -1
  142. package/dist/{secret-config-D1F4MW69.mjs → secret-config-Cng7XPLx.mjs} +18 -13
  143. package/dist/secret-config-Cng7XPLx.mjs.map +1 -0
  144. package/dist/{secret-config-6hdODxBb.js → secret-config-OqmIPmpV.js} +21 -16
  145. package/dist/secret-config-OqmIPmpV.js.map +1 -0
  146. package/dist/{sensitive-names-wv27qBQC.mjs → sensitive-names-BiBM6R1X.mjs} +2 -28
  147. package/dist/sensitive-names-BiBM6R1X.mjs.map +1 -0
  148. package/dist/{sensitive-names-CNgHaqv9.js → sensitive-names-NiKIRhp5.js} +1 -39
  149. package/dist/sensitive-names-NiKIRhp5.js.map +1 -0
  150. package/dist/{slack.transport-C6E0l4kw.d.ts → slack.transport-5OPL7H3u.d.mts} +76 -3
  151. package/dist/slack.transport-5OPL7H3u.d.mts.map +1 -0
  152. package/dist/{slack.transport-BDyENuR0.d.mts → slack.transport-BFpBD_Ri.d.ts} +76 -3
  153. package/dist/slack.transport-BFpBD_Ri.d.ts.map +1 -0
  154. package/dist/{slack.transport-YvaLJxNv.mjs → slack.transport-C6dzPJHX.mjs} +226 -9
  155. package/dist/slack.transport-C6dzPJHX.mjs.map +1 -0
  156. package/dist/{slack.transport-CEYBVzUj.js → slack.transport-Ci0swStG.js} +231 -8
  157. package/dist/slack.transport-Ci0swStG.js.map +1 -0
  158. package/dist/testing.d.mts +1 -1
  159. package/dist/testing.d.ts +1 -1
  160. package/dist/{transport.types-CzJq4IrF.d.ts → transport.types-B1ejJJP6.d.mts} +6 -1
  161. package/dist/transport.types-B1ejJJP6.d.mts.map +1 -0
  162. package/dist/{transport.types-CzJq4IrF.d.mts → transport.types-B1ejJJP6.d.ts} +6 -1
  163. package/dist/transport.types-B1ejJJP6.d.ts.map +1 -0
  164. package/dist/transports.d.mts +61 -11
  165. package/dist/transports.d.mts.map +1 -1
  166. package/dist/transports.d.ts +61 -11
  167. package/dist/transports.d.ts.map +1 -1
  168. package/dist/transports.js +7 -6
  169. package/dist/transports.mjs +7 -7
  170. package/dist/worker-entry.js +106 -22
  171. package/dist/worker.d.mts +1 -1
  172. package/dist/worker.d.ts +1 -1
  173. package/dist/worker.js +1 -1
  174. package/dist/worker.mjs +1 -1
  175. package/dist/{worker.transport-B9mCQSM1.d.ts → worker.transport-B7olL1Uh.d.ts} +12 -2
  176. package/dist/worker.transport-B7olL1Uh.d.ts.map +1 -0
  177. package/dist/{worker.transport-CwNpH98o.js → worker.transport-CZOutlxC.js} +40 -2
  178. package/dist/worker.transport-CZOutlxC.js.map +1 -0
  179. package/dist/{worker.transport-DgK_ZXlB.mjs → worker.transport-CxFD8mvS.mjs} +40 -2
  180. package/dist/worker.transport-CxFD8mvS.mjs.map +1 -0
  181. package/dist/{worker.transport-Bl8lFRck.d.mts → worker.transport-DnU0_9Bd.d.mts} +12 -2
  182. package/dist/worker.transport-DnU0_9Bd.d.mts.map +1 -0
  183. package/package.json +37 -2
  184. package/dist/builder-C6kKEVrU.mjs.map +0 -1
  185. package/dist/builder-Up4YxX7l.js.map +0 -1
  186. package/dist/otel-DAVxpArV.mjs.map +0 -1
  187. package/dist/otel-DH6-G6DR.js.map +0 -1
  188. package/dist/search-CJw_xoQl.js.map +0 -1
  189. package/dist/search-CjYl-mo5.mjs.map +0 -1
  190. package/dist/secret-config-6hdODxBb.js.map +0 -1
  191. package/dist/secret-config-D1F4MW69.mjs.map +0 -1
  192. package/dist/sensitive-names-CNgHaqv9.js.map +0 -1
  193. package/dist/sensitive-names-wv27qBQC.mjs.map +0 -1
  194. package/dist/slack.transport-BDyENuR0.d.mts.map +0 -1
  195. package/dist/slack.transport-C6E0l4kw.d.ts.map +0 -1
  196. package/dist/slack.transport-CEYBVzUj.js.map +0 -1
  197. package/dist/slack.transport-YvaLJxNv.mjs.map +0 -1
  198. package/dist/transport.types-CzJq4IrF.d.mts.map +0 -1
  199. package/dist/transport.types-CzJq4IrF.d.ts.map +0 -1
  200. package/dist/worker.transport-B9mCQSM1.d.ts.map +0 -1
  201. package/dist/worker.transport-Bl8lFRck.d.mts.map +0 -1
  202. package/dist/worker.transport-CwNpH98o.js.map +0 -1
  203. package/dist/worker.transport-DgK_ZXlB.mjs.map +0 -1
package/dist/nest.mjs CHANGED
@@ -1,9 +1,11 @@
1
- import { S as DEFAULT_CONFIG, T as LogLevel, _ as serializeError, a as isLogixiaException, o as LogixiaLogger, t as ErrorResponseBuilder } from "./builder-C6kKEVrU.mjs";
2
- import { a as buildNameSet, c as sanitizeText, l as sensitiveQueryValues, n as DEFAULT_REDACT_QUERY_PARAMS, o as redactUrlQuery, u as assignOwn } from "./sensitive-names-wv27qBQC.mjs";
3
- import { d as getTraceContextKey, l as extractTraceId, o as TraceContext, p as sanitizeIncomingId, r as DEFAULT_TRACE_HEADERS } from "./request-trace-Dekcnenb.mjs";
4
- import { n as protectSecrets } from "./secret-config-D1F4MW69.mjs";
1
+ import { a as isLogixiaException, o as LogixiaLogger, t as ErrorResponseBuilder, v as DEFAULT_CONFIG, x as LogLevel } from "./builder-CbttbixM.mjs";
2
+ import { t as assignOwn } from "./own-property-CjFw9qwZ.mjs";
3
+ import { f as getTraceContextKey, i as DEFAULT_TRACE_HEADERS, m as sanitizeIncomingId, s as TraceContext, u as extractTraceId } from "./request-trace-txUhyyre.mjs";
4
+ import { a as buildNameSet, c as sanitizeText, l as sensitiveQueryValues, n as DEFAULT_REDACT_QUERY_PARAMS, o as redactUrlQuery } from "./sensitive-names-BiBM6R1X.mjs";
5
+ import { n as protectSecrets } from "./secret-config-Cng7XPLx.mjs";
5
6
  import { r as internalWarn, t as internalError } from "./internal-log-Cy5nF1ZL.mjs";
6
7
  import { n as safeToString } from "./csv.utils-ZdxSod5g.mjs";
8
+ import { r as serializeError } from "./error.utils-B8_CwESF.mjs";
7
9
  import { Catch, Inject, Injectable, Module, Optional, RequestMethod, Scope } from "@nestjs/common";
8
10
  import { EMPTY, Observable } from "rxjs";
9
11
  // \0@oxc-project+runtime@0.155.0/helpers/esm/decorateMetadata.js
@@ -19,12 +21,37 @@ function __decorate(decorators, target, key, desc) {
19
21
  }
20
22
  // src/core/logitron-nestjs.service.ts
21
23
  var _LogixiaLoggerService;
24
+ const looksLikeStack = (value) => value.includes("\n at ");
25
+ const NEST_LEVEL_TO_LOGIXIA = {
26
+ fatal: LogLevel.ERROR,
27
+ error: LogLevel.ERROR,
28
+ warn: LogLevel.WARN,
29
+ log: LogLevel.INFO,
30
+ debug: LogLevel.DEBUG,
31
+ verbose: LogLevel.TRACE
32
+ };
33
+ const LEVEL_VERBOSITY = [
34
+ LogLevel.ERROR,
35
+ LogLevel.WARN,
36
+ LogLevel.INFO,
37
+ LogLevel.DEBUG,
38
+ LogLevel.TRACE
39
+ ];
40
+ function isPlainObject(value) {
41
+ if (typeof value !== "object" || value === null) return false;
42
+ const proto = Object.getPrototypeOf(value);
43
+ return proto === Object.prototype || proto === null;
44
+ }
45
+ function describeObject(value) {
46
+ var _value$constructor;
47
+ return Array.isArray(value) ? safeToString(value) : `[${((_value$constructor = value.constructor) === null || _value$constructor === void 0 ? void 0 : _value$constructor.name) ?? "Object"}]`;
48
+ }
22
49
  let LogixiaLoggerService = _LogixiaLoggerService = class LogixiaLoggerService {
23
50
  logger;
24
51
  context;
25
52
  _mergedConfig;
26
53
  constructor(config) {
27
- const defaultConfig = {
54
+ const mergedConfig = {
28
55
  appName: "NestJS-App",
29
56
  environment: "development",
30
57
  traceId: true,
@@ -59,37 +86,40 @@ let LogixiaLoggerService = _LogixiaLoggerService = class LogixiaLoggerService {
59
86
  message: "[message]",
60
87
  payload: "[payload]",
61
88
  timeTaken: "[time_taken_MS]"
62
- }
63
- };
64
- protectSecrets(this, ["_mergedConfig"]);
65
- this._mergedConfig = {
66
- ...defaultConfig,
89
+ },
67
90
  ...config
68
91
  };
69
- this.logger = new LogixiaLogger(this._mergedConfig);
92
+ this._attach(mergedConfig, new LogixiaLogger(mergedConfig));
93
+ }
94
+ _attach(mergedConfig, logger) {
95
+ protectSecrets(this, ["_mergedConfig"]);
96
+ this._mergedConfig = mergedConfig;
97
+ this.logger = logger;
70
98
  this._createCustomLevelMethods();
71
99
  }
72
100
  _createCustomLevelMethods() {
73
101
  var _this$_mergedConfig$l;
74
102
  const levels = (_this$_mergedConfig$l = this._mergedConfig.levelOptions) === null || _this$_mergedConfig$l === void 0 ? void 0 : _this$_mergedConfig$l.levels;
75
103
  if (!levels) return;
76
- for (const levelName of Object.keys(levels)) {
77
- const lower = levelName.toLowerCase();
78
- if (typeof this[lower] !== "undefined") continue;
79
- this[lower] = async (message, data) => {
80
- return this.logger.logLevel(lower, message, data);
81
- };
82
- }
104
+ const self = this;
105
+ const define = (method, levelName) => {
106
+ if (typeof self[method] !== "undefined") return;
107
+ self[method] = async (message, data) => this.logger.logLevel(levelName, message, data);
108
+ };
109
+ const names = Object.keys(levels);
110
+ for (const levelName of names) define(levelName, levelName);
111
+ for (const levelName of names) define(levelName.toLowerCase(), levelName);
83
112
  }
84
113
  /**
85
- * NestJS `LoggerService.log` — void, string context.
86
- * Maps internally to `info`.
114
+ * NestJS `LoggerService.log` — void. Maps internally to `info`.
115
+ * A trailing string is the context for this call only; object params are merged into the payload.
87
116
  *
88
117
  * @example `logger.log('User signed up', 'AuthService')`
118
+ * @example `logger.log('User signed up', { userId: 'u_abc' }, 'AuthService')`
89
119
  */
90
- log(message, context) {
91
- this.setContextIfProvided(context);
92
- this.logger.info(this.formatMessage(message)).catch((err) => internalError("LogixiaLoggerService.log failed", err));
120
+ log(message, ...optionalParams) {
121
+ const { context, data } = this.parseParams(optionalParams);
122
+ this.reportFailure("log", this.withContext(context, () => this.logger.info(this.formatMessage(message), data)));
93
123
  }
94
124
  /**
95
125
  * Native async `info` — structured data, returns `Promise<void>`.
@@ -99,27 +129,49 @@ let LogixiaLoggerService = _LogixiaLoggerService = class LogixiaLoggerService {
99
129
  async info(message, data) {
100
130
  return this.logger.info(message, data);
101
131
  }
102
- error(message, dataOrTrace, context) {
103
- if (typeof dataOrTrace === "object" && dataOrTrace !== null) return message instanceof Error ? this.logger.error(message, dataOrTrace) : this.logger.error(this.formatMessage(message), dataOrTrace);
104
- this.setContextIfProvided(context);
105
- const errorData = {};
106
- if (typeof dataOrTrace === "string" && dataOrTrace) errorData.stack = dataOrTrace;
107
- (message instanceof Error ? this.logger.error(message, errorData) : this.logger.error(this.formatMessage(message), errorData)).catch((err) => internalError("LogixiaLoggerService.error failed", err));
132
+ error(message, ...optionalParams) {
133
+ const only = optionalParams[0];
134
+ if (optionalParams.length === 1 && typeof only === "object" && only !== null) {
135
+ const data = only;
136
+ return message instanceof Error ? this.logger.error(message, data) : this.logger.error(this.formatMessage(message), data);
137
+ }
138
+ const { context, data } = this.parseParams(optionalParams, true);
139
+ this.reportFailure("error", this.withContext(context, () => message instanceof Error ? this.logger.error(message, data) : this.logger.error(this.formatMessage(message), data)));
108
140
  }
109
- warn(message, dataOrContext) {
110
- if (typeof dataOrContext === "object" && dataOrContext !== null) return this.logger.warn(this.formatMessage(message), dataOrContext);
111
- this.setContextIfProvided(typeof dataOrContext === "string" ? dataOrContext : void 0);
112
- this.logger.warn(this.formatMessage(message)).catch((err) => internalError("LogixiaLoggerService.warn failed", err));
141
+ /**
142
+ * NestJS `LoggerService.fatal`. logixia has no level above `error`, so this logs
143
+ * at `error` with `fatal: true` in the payload, or at a custom `fatal` level when
144
+ * one is configured.
145
+ *
146
+ * @example `logger.fatal('Cannot reach the database, shutting down', 'Bootstrap')`
147
+ */
148
+ fatal(message, ...optionalParams) {
149
+ var _this$_mergedConfig$l2;
150
+ const { context, data } = this.parseParams(optionalParams, true);
151
+ const text = this.formatMessage(message);
152
+ const hasFatalLevel = ((_this$_mergedConfig$l2 = this._mergedConfig.levelOptions) === null || _this$_mergedConfig$l2 === void 0 || (_this$_mergedConfig$l2 = _this$_mergedConfig$l2.levels) === null || _this$_mergedConfig$l2 === void 0 ? void 0 : _this$_mergedConfig$l2["fatal"]) !== void 0;
153
+ this.reportFailure("fatal", this.withContext(context, () => hasFatalLevel ? this.logger.logLevel("fatal", text, data) : this.logger.error(text, {
154
+ ...data,
155
+ fatal: true
156
+ })));
113
157
  }
114
- debug(message, dataOrContext) {
115
- if (typeof dataOrContext === "object" && dataOrContext !== null) return this.logger.debug(this.formatMessage(message), dataOrContext);
116
- this.setContextIfProvided(typeof dataOrContext === "string" ? dataOrContext : void 0);
117
- this.logger.debug(this.formatMessage(message)).catch((err) => internalError("LogixiaLoggerService.debug failed", err));
158
+ warn(message, ...optionalParams) {
159
+ const only = optionalParams[0];
160
+ if (optionalParams.length === 1 && typeof only === "object" && only !== null) return this.logger.warn(this.formatMessage(message), only);
161
+ const { context, data } = this.parseParams(optionalParams);
162
+ this.reportFailure("warn", this.withContext(context, () => this.logger.warn(this.formatMessage(message), data)));
118
163
  }
119
- verbose(message, dataOrContext) {
120
- if (typeof dataOrContext === "object" && dataOrContext !== null) return this.logger.trace(this.formatMessage(message), dataOrContext);
121
- this.setContextIfProvided(typeof dataOrContext === "string" ? dataOrContext : void 0);
122
- this.logger.trace(this.formatMessage(message)).catch((err) => internalError("LogixiaLoggerService.verbose failed", err));
164
+ debug(message, ...optionalParams) {
165
+ const only = optionalParams[0];
166
+ if (optionalParams.length === 1 && typeof only === "object" && only !== null) return this.logger.debug(this.formatMessage(message), only);
167
+ const { context, data } = this.parseParams(optionalParams);
168
+ this.reportFailure("debug", this.withContext(context, () => this.logger.debug(this.formatMessage(message), data)));
169
+ }
170
+ verbose(message, ...optionalParams) {
171
+ const only = optionalParams[0];
172
+ if (optionalParams.length === 1 && typeof only === "object" && only !== null) return this.logger.trace(this.formatMessage(message), only);
173
+ const { context, data } = this.parseParams(optionalParams);
174
+ this.reportFailure("verbose", this.withContext(context, () => this.logger.trace(this.formatMessage(message), data)));
123
175
  }
124
176
  /**
125
177
  * Native async `trace` — lowest verbosity level, structured data.
@@ -156,9 +208,30 @@ let LogixiaLoggerService = _LogixiaLoggerService = class LogixiaLoggerService {
156
208
  getLevel() {
157
209
  return this.logger.getLevel();
158
210
  }
211
+ /**
212
+ * NestJS `LoggerService.setLogLevels`. logixia filters by a minimum level, not a
213
+ * set, so the most verbose of `levels` becomes the threshold and everything more
214
+ * severe stays on (`['log', 'error']` also enables `warn`). Unknown names are
215
+ * ignored, and an empty list is ignored too: use `silent` to turn logging off.
216
+ *
217
+ * @example `logger.setLogLevels(['error', 'warn'])`
218
+ */
219
+ setLogLevels(levels) {
220
+ let threshold;
221
+ let verbosity = -1;
222
+ for (const name of levels) {
223
+ const level = NEST_LEVEL_TO_LOGIXIA[name];
224
+ const rank = level === void 0 ? -1 : LEVEL_VERBOSITY.indexOf(level);
225
+ if (rank > verbosity) {
226
+ verbosity = rank;
227
+ threshold = level;
228
+ }
229
+ }
230
+ if (threshold !== void 0) this.setLevel(threshold);
231
+ }
159
232
  child(context, data) {
160
- const childService = new _LogixiaLoggerService(this._mergedConfig);
161
- childService.logger = this.logger.child(context, data);
233
+ const childService = Object.create(_LogixiaLoggerService.prototype);
234
+ childService._attach(this._mergedConfig, this.logger.child(context, data));
162
235
  childService.context = context;
163
236
  return childService;
164
237
  }
@@ -178,9 +251,58 @@ let LogixiaLoggerService = _LogixiaLoggerService = class LogixiaLoggerService {
178
251
  getLogger() {
179
252
  return this.logger;
180
253
  }
181
- setContextIfProvided(context) {
182
- if (typeof context !== "string" || context.length === 0) return;
183
- if (context !== this.context) this.setContext(context);
254
+ withContext(context, fn) {
255
+ if (context === void 0 || context === this.logger.getContext()) return fn();
256
+ const previous = this.logger.getContext() ?? "";
257
+ this.logger.setContext(context);
258
+ try {
259
+ return fn();
260
+ } finally {
261
+ this.logger.setContext(previous);
262
+ }
263
+ }
264
+ /**
265
+ * Split NestJS `...optionalParams` into a per-call context and a payload.
266
+ * A trailing string is the context; plain objects are merged into the payload and
267
+ * an Error goes under `error`. For `error()` (`withStack`), a leading string is the stack
268
+ * trace, and a lone string is the stack only if it looks like one, since Nest's own
269
+ * `Logger` appends the context as the last param. Anything else is listed under `params`.
270
+ */
271
+ parseParams(params, withStack = false) {
272
+ if (params.length === 0) return {};
273
+ let rest = params;
274
+ let context;
275
+ const last = params[params.length - 1];
276
+ if (typeof last === "string" && !(withStack && params.length === 1 && looksLikeStack(last))) {
277
+ context = last.length > 0 ? last : void 0;
278
+ rest = params.slice(0, -1);
279
+ }
280
+ let data;
281
+ const extras = [];
282
+ for (const param of rest) if (withStack && typeof param === "string" && (data === null || data === void 0 ? void 0 : data["stack"]) === void 0) data = {
283
+ ...data,
284
+ stack: param
285
+ };
286
+ else if (param instanceof Error) data = {
287
+ ...data,
288
+ error: param
289
+ };
290
+ else if (isPlainObject(param)) data = {
291
+ ...data,
292
+ ...param
293
+ };
294
+ else if (param !== void 0) extras.push(typeof param === "object" && param !== null ? describeObject(param) : param);
295
+ if (extras.length > 0) data = {
296
+ ...data,
297
+ params: extras
298
+ };
299
+ return context === void 0 ? { data } : {
300
+ context,
301
+ data
302
+ };
303
+ }
304
+ reportFailure(method, result) {
305
+ result.catch((err) => internalError(`LogixiaLoggerService.${method} failed`, err));
184
306
  }
185
307
  formatMessage(message) {
186
308
  if (typeof message === "string") return message;