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