@lssm/lib.logger 1.41.1 → 1.42.1

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 (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/context.browser.d.mts +49 -0
  4. package/dist/context.browser.d.mts.map +1 -0
  5. package/dist/context.browser.mjs +89 -1
  6. package/dist/context.browser.mjs.map +1 -0
  7. package/dist/context.d.mts +17 -0
  8. package/dist/context.d.mts.map +1 -0
  9. package/dist/context.mjs +1 -1
  10. package/dist/context.node.d.mts +48 -0
  11. package/dist/context.node.d.mts.map +1 -0
  12. package/dist/context.node.mjs +79 -1
  13. package/dist/context.node.mjs.map +1 -0
  14. package/dist/elysia-plugin.d.mts +64 -0
  15. package/dist/elysia-plugin.d.mts.map +1 -0
  16. package/dist/elysia-plugin.mjs +85 -1
  17. package/dist/elysia-plugin.mjs.map +1 -0
  18. package/dist/formatters.d.mts +29 -0
  19. package/dist/formatters.d.mts.map +1 -0
  20. package/dist/formatters.mjs +180 -9
  21. package/dist/formatters.mjs.map +1 -0
  22. package/dist/index.browser.d.mts +7 -0
  23. package/dist/index.browser.mjs +8 -1
  24. package/dist/index.d.mts +8 -0
  25. package/dist/index.mjs +9 -1
  26. package/dist/logger.browser.d.mts +51 -0
  27. package/dist/logger.browser.d.mts.map +1 -0
  28. package/dist/logger.browser.mjs +190 -1
  29. package/dist/logger.browser.mjs.map +1 -0
  30. package/dist/logger.d.mts +2 -0
  31. package/dist/logger.mjs +3 -1
  32. package/dist/logger.node.d.mts +51 -0
  33. package/dist/logger.node.d.mts.map +1 -0
  34. package/dist/logger.node.mjs +190 -1
  35. package/dist/logger.node.mjs.map +1 -0
  36. package/dist/timer.d.mts +103 -0
  37. package/dist/timer.d.mts.map +1 -0
  38. package/dist/timer.mjs +165 -1
  39. package/dist/timer.mjs.map +1 -0
  40. package/dist/tracer.browser.d.mts +51 -0
  41. package/dist/tracer.browser.d.mts.map +1 -0
  42. package/dist/tracer.browser.mjs +116 -1
  43. package/dist/tracer.browser.mjs.map +1 -0
  44. package/dist/tracer.d.mts +2 -0
  45. package/dist/tracer.mjs +3 -1
  46. package/dist/tracer.node.d.mts +51 -0
  47. package/dist/tracer.node.d.mts.map +1 -0
  48. package/dist/tracer.node.mjs +116 -1
  49. package/dist/tracer.node.mjs.map +1 -0
  50. package/dist/types.d.mts +71 -0
  51. package/dist/types.d.mts.map +1 -0
  52. package/dist/types.mjs +14 -1
  53. package/dist/types.mjs.map +1 -0
  54. package/package.json +29 -22
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.browser.mjs","names":["span: TraceContext"],"sources":["../src/tracer.browser.ts"],"sourcesContent":["import type { TraceContext, TracingOptions } from './types';\nimport { LogContext } from './context.browser';\nimport { Timer } from './timer';\n\nexport class Tracer {\n private context: LogContext;\n private activeSpans = new Map<string, TraceContext>();\n\n constructor() {\n this.context = LogContext.getInstance();\n }\n\n /**\n * Start a new trace span\n */\n startSpan(options: TracingOptions): TraceContext {\n const parentTrace = this.context.getCurrentTrace();\n const traceId = parentTrace?.traceId || this.generateTraceId();\n\n const span: TraceContext = {\n traceId,\n parentId: parentTrace?.spanId,\n spanId: this.generateSpanId(),\n operationType: options.operationType,\n operationName: options.operationName,\n startTime: performance.now(),\n metadata: { ...options.metadata },\n tags: [...(options.tags || [])],\n };\n\n this.activeSpans.set(span.spanId, span);\n this.context.setTrace(span);\n\n return span;\n }\n\n /**\n * Finish a trace span\n */\n finishSpan(spanId: string): number | undefined {\n const span = this.activeSpans.get(spanId);\n if (!span) {\n return undefined;\n }\n\n const duration = performance.now() - span.startTime;\n this.activeSpans.delete(spanId);\n\n // If this was the current span, restore parent\n const currentTrace = this.context.getCurrentTrace();\n if (currentTrace?.spanId === spanId && span.parentId) {\n const parentSpan = this.findSpanById(span.parentId);\n if (parentSpan) {\n this.context.setTrace(parentSpan);\n }\n }\n\n return duration;\n }\n\n /**\n * Execute a function within a trace span\n */\n async trace<T>(\n options: TracingOptions,\n fn: () => T | Promise<T>\n ): Promise<T> {\n const span = this.startSpan(options);\n const timer =\n options.autoTiming !== false\n ? new Timer(`trace-${span.spanId}`)\n : undefined;\n\n try {\n const result = await fn();\n\n const duration = this.finishSpan(span.spanId);\n if (timer) {\n timer.stop();\n }\n\n // Add timing metadata\n if (duration !== undefined) {\n span.metadata.duration = duration;\n }\n\n return result;\n } catch (error) {\n // Add error metadata\n span.metadata.error = {\n name: (error as Error).name || 'Unknown',\n message: (error as Error).message || 'Unknown error',\n stack: (error as Error).stack,\n };\n\n const duration = this.finishSpan(span.spanId);\n span.metadata.duration = duration;\n if (timer) {\n timer.stop();\n }\n\n throw error;\n }\n }\n\n /**\n * Add metadata to current span\n */\n addMetadata(key: string, value: unknown): void {\n const currentTrace = this.context.getCurrentTrace();\n if (currentTrace) {\n currentTrace.metadata[key] = value;\n }\n }\n\n /**\n * Add tags to current span\n */\n addTags(...tags: string[]): void {\n const currentTrace = this.context.getCurrentTrace();\n if (currentTrace) {\n currentTrace.tags.push(...tags);\n }\n }\n\n /**\n * Get current trace context\n */\n getCurrentTrace(): TraceContext | undefined {\n return this.context.getCurrentTrace();\n }\n\n /**\n * Get all active spans\n */\n getActiveSpans(): TraceContext[] {\n return Array.from(this.activeSpans.values());\n }\n\n /**\n * Find a span by ID\n */\n findSpanById(spanId: string): TraceContext | undefined {\n return this.activeSpans.get(spanId);\n }\n\n /**\n * Generate a unique trace ID\n */\n private generateTraceId(): string {\n return crypto.randomUUID().replace(/-/g, '');\n }\n\n /**\n * Generate a unique span ID\n */\n private generateSpanId(): string {\n return crypto.randomUUID().replace(/-/g, '').substring(0, 16);\n }\n}\n"],"mappings":";;;;AAIA,IAAa,SAAb,MAAoB;CAClB,AAAQ;CACR,AAAQ,8BAAc,IAAI,KAA2B;CAErD,cAAc;AACZ,OAAK,UAAU,WAAW,aAAa;;;;;CAMzC,UAAU,SAAuC;EAC/C,MAAM,cAAc,KAAK,QAAQ,iBAAiB;EAGlD,MAAMA,OAAqB;GACzB,SAHc,aAAa,WAAW,KAAK,iBAAiB;GAI5D,UAAU,aAAa;GACvB,QAAQ,KAAK,gBAAgB;GAC7B,eAAe,QAAQ;GACvB,eAAe,QAAQ;GACvB,WAAW,YAAY,KAAK;GAC5B,UAAU,EAAE,GAAG,QAAQ,UAAU;GACjC,MAAM,CAAC,GAAI,QAAQ,QAAQ,EAAE,CAAE;GAChC;AAED,OAAK,YAAY,IAAI,KAAK,QAAQ,KAAK;AACvC,OAAK,QAAQ,SAAS,KAAK;AAE3B,SAAO;;;;;CAMT,WAAW,QAAoC;EAC7C,MAAM,OAAO,KAAK,YAAY,IAAI,OAAO;AACzC,MAAI,CAAC,KACH;EAGF,MAAM,WAAW,YAAY,KAAK,GAAG,KAAK;AAC1C,OAAK,YAAY,OAAO,OAAO;AAI/B,MADqB,KAAK,QAAQ,iBAAiB,EACjC,WAAW,UAAU,KAAK,UAAU;GACpD,MAAM,aAAa,KAAK,aAAa,KAAK,SAAS;AACnD,OAAI,WACF,MAAK,QAAQ,SAAS,WAAW;;AAIrC,SAAO;;;;;CAMT,MAAM,MACJ,SACA,IACY;EACZ,MAAM,OAAO,KAAK,UAAU,QAAQ;EACpC,MAAM,QACJ,QAAQ,eAAe,QACnB,IAAI,MAAM,SAAS,KAAK,SAAS,GACjC;AAEN,MAAI;GACF,MAAM,SAAS,MAAM,IAAI;GAEzB,MAAM,WAAW,KAAK,WAAW,KAAK,OAAO;AAC7C,OAAI,MACF,OAAM,MAAM;AAId,OAAI,aAAa,OACf,MAAK,SAAS,WAAW;AAG3B,UAAO;WACA,OAAO;AAEd,QAAK,SAAS,QAAQ;IACpB,MAAO,MAAgB,QAAQ;IAC/B,SAAU,MAAgB,WAAW;IACrC,OAAQ,MAAgB;IACzB;GAED,MAAM,WAAW,KAAK,WAAW,KAAK,OAAO;AAC7C,QAAK,SAAS,WAAW;AACzB,OAAI,MACF,OAAM,MAAM;AAGd,SAAM;;;;;;CAOV,YAAY,KAAa,OAAsB;EAC7C,MAAM,eAAe,KAAK,QAAQ,iBAAiB;AACnD,MAAI,aACF,cAAa,SAAS,OAAO;;;;;CAOjC,QAAQ,GAAG,MAAsB;EAC/B,MAAM,eAAe,KAAK,QAAQ,iBAAiB;AACnD,MAAI,aACF,cAAa,KAAK,KAAK,GAAG,KAAK;;;;;CAOnC,kBAA4C;AAC1C,SAAO,KAAK,QAAQ,iBAAiB;;;;;CAMvC,iBAAiC;AAC/B,SAAO,MAAM,KAAK,KAAK,YAAY,QAAQ,CAAC;;;;;CAM9C,aAAa,QAA0C;AACrD,SAAO,KAAK,YAAY,IAAI,OAAO;;;;;CAMrC,AAAQ,kBAA0B;AAChC,SAAO,OAAO,YAAY,CAAC,QAAQ,MAAM,GAAG;;;;;CAM9C,AAAQ,iBAAyB;AAC/B,SAAO,OAAO,YAAY,CAAC,QAAQ,MAAM,GAAG,CAAC,UAAU,GAAG,GAAG"}
@@ -0,0 +1,2 @@
1
+ import { Tracer } from "./tracer.node.mjs";
2
+ export { Tracer };
package/dist/tracer.mjs CHANGED
@@ -1 +1,3 @@
1
- import{Tracer as e}from"./tracer.node.mjs";export{e as Tracer};
1
+ import { Tracer } from "./tracer.node.mjs";
2
+
3
+ export { Tracer };
@@ -0,0 +1,51 @@
1
+ import { TraceContext, TracingOptions } from "./types.mjs";
2
+
3
+ //#region src/tracer.node.d.ts
4
+ declare class Tracer {
5
+ private context;
6
+ private activeSpans;
7
+ constructor();
8
+ /**
9
+ * Start a new trace span
10
+ */
11
+ startSpan(options: TracingOptions): TraceContext;
12
+ /**
13
+ * Finish a trace span
14
+ */
15
+ finishSpan(spanId: string): number | undefined;
16
+ /**
17
+ * Execute a function within a trace span
18
+ */
19
+ trace<T>(options: TracingOptions, fn: () => T | Promise<T>): Promise<T>;
20
+ /**
21
+ * Add metadata to current span
22
+ */
23
+ addMetadata(key: string, value: unknown): void;
24
+ /**
25
+ * Add tags to current span
26
+ */
27
+ addTags(...tags: string[]): void;
28
+ /**
29
+ * Get current trace context
30
+ */
31
+ getCurrentTrace(): TraceContext | undefined;
32
+ /**
33
+ * Get all active spans
34
+ */
35
+ getActiveSpans(): TraceContext[];
36
+ /**
37
+ * Find a span by ID
38
+ */
39
+ findSpanById(spanId: string): TraceContext | undefined;
40
+ /**
41
+ * Generate a unique trace ID
42
+ */
43
+ private generateTraceId;
44
+ /**
45
+ * Generate a unique span ID
46
+ */
47
+ private generateSpanId;
48
+ }
49
+ //#endregion
50
+ export { Tracer };
51
+ //# sourceMappingURL=tracer.node.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.node.d.mts","names":[],"sources":["../src/tracer.node.ts"],"sourcesContent":[],"mappings":";;;cAIa,MAAA;;EAAA,QAAA,WAAM;EAWE,WAAA,CAAA;EAAiB;;;EAkDZ,SAAA,CAAA,OAAA,EAlDL,cAkDK,CAAA,EAlDY,YAkDZ;EAAR;;;EA+DG,UAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAOD;;;oBAvEP,0BACC,IAAI,QAAQ,KACrB,QAAQ;;;;;;;;;;;;qBA8DQ;;;;oBAOD;;;;gCAOY"}
@@ -1 +1,116 @@
1
- import{LogContext as e}from"./context.node.mjs";import{Timer as t}from"./timer.mjs";var n=class{context;activeSpans=new Map;constructor(){this.context=e.getInstance()}startSpan(e){let t=this.context.getCurrentTrace(),n={traceId:t?.traceId||this.generateTraceId(),parentId:t?.spanId,spanId:this.generateSpanId(),operationType:e.operationType,operationName:e.operationName,startTime:performance.now(),metadata:{...e.metadata},tags:[...e.tags||[]]};return this.activeSpans.set(n.spanId,n),this.context.setTrace(n),n}finishSpan(e){let t=this.activeSpans.get(e);if(!t)return;let n=performance.now()-t.startTime;if(this.activeSpans.delete(e),this.context.getCurrentTrace()?.spanId===e&&t.parentId){let e=this.findSpanById(t.parentId);e&&this.context.setTrace(e)}return n}async trace(e,n){let r=this.startSpan(e),i=e.autoTiming===!1?void 0:new t(`trace-${r.spanId}`);try{let e=await n(),t=this.finishSpan(r.spanId);return i&&i.stop(),t!==void 0&&(r.metadata.duration=t),e}catch(e){r.metadata.error={name:e.name||`Unknown`,message:e.message||`Unknown error`,stack:e.stack};let t=this.finishSpan(r.spanId);throw r.metadata.duration=t,i&&i.stop(),e}}addMetadata(e,t){let n=this.context.getCurrentTrace();n&&(n.metadata[e]=t)}addTags(...e){let t=this.context.getCurrentTrace();t&&t.tags.push(...e)}getCurrentTrace(){return this.context.getCurrentTrace()}getActiveSpans(){return Array.from(this.activeSpans.values())}findSpanById(e){return this.activeSpans.get(e)}generateTraceId(){return crypto.randomUUID().replace(/-/g,``)}generateSpanId(){return crypto.randomUUID().replace(/-/g,``).substring(0,16)}};export{n as Tracer};
1
+ import { LogContext } from "./context.node.mjs";
2
+ import { Timer } from "./timer.mjs";
3
+
4
+ //#region src/tracer.node.ts
5
+ var Tracer = class {
6
+ context;
7
+ activeSpans = /* @__PURE__ */ new Map();
8
+ constructor() {
9
+ this.context = LogContext.getInstance();
10
+ }
11
+ /**
12
+ * Start a new trace span
13
+ */
14
+ startSpan(options) {
15
+ const parentTrace = this.context.getCurrentTrace();
16
+ const span = {
17
+ traceId: parentTrace?.traceId || this.generateTraceId(),
18
+ parentId: parentTrace?.spanId,
19
+ spanId: this.generateSpanId(),
20
+ operationType: options.operationType,
21
+ operationName: options.operationName,
22
+ startTime: performance.now(),
23
+ metadata: { ...options.metadata },
24
+ tags: [...options.tags || []]
25
+ };
26
+ this.activeSpans.set(span.spanId, span);
27
+ this.context.setTrace(span);
28
+ return span;
29
+ }
30
+ /**
31
+ * Finish a trace span
32
+ */
33
+ finishSpan(spanId) {
34
+ const span = this.activeSpans.get(spanId);
35
+ if (!span) return;
36
+ const duration = performance.now() - span.startTime;
37
+ this.activeSpans.delete(spanId);
38
+ if (this.context.getCurrentTrace()?.spanId === spanId && span.parentId) {
39
+ const parentSpan = this.findSpanById(span.parentId);
40
+ if (parentSpan) this.context.setTrace(parentSpan);
41
+ }
42
+ return duration;
43
+ }
44
+ /**
45
+ * Execute a function within a trace span
46
+ */
47
+ async trace(options, fn) {
48
+ const span = this.startSpan(options);
49
+ const timer = options.autoTiming !== false ? new Timer(`trace-${span.spanId}`) : void 0;
50
+ try {
51
+ const result = await fn();
52
+ const duration = this.finishSpan(span.spanId);
53
+ if (timer) timer.stop();
54
+ if (duration !== void 0) span.metadata.duration = duration;
55
+ return result;
56
+ } catch (error) {
57
+ span.metadata.error = {
58
+ name: error.name || "Unknown",
59
+ message: error.message || "Unknown error",
60
+ stack: error.stack
61
+ };
62
+ const duration = this.finishSpan(span.spanId);
63
+ span.metadata.duration = duration;
64
+ if (timer) timer.stop();
65
+ throw error;
66
+ }
67
+ }
68
+ /**
69
+ * Add metadata to current span
70
+ */
71
+ addMetadata(key, value) {
72
+ const currentTrace = this.context.getCurrentTrace();
73
+ if (currentTrace) currentTrace.metadata[key] = value;
74
+ }
75
+ /**
76
+ * Add tags to current span
77
+ */
78
+ addTags(...tags) {
79
+ const currentTrace = this.context.getCurrentTrace();
80
+ if (currentTrace) currentTrace.tags.push(...tags);
81
+ }
82
+ /**
83
+ * Get current trace context
84
+ */
85
+ getCurrentTrace() {
86
+ return this.context.getCurrentTrace();
87
+ }
88
+ /**
89
+ * Get all active spans
90
+ */
91
+ getActiveSpans() {
92
+ return Array.from(this.activeSpans.values());
93
+ }
94
+ /**
95
+ * Find a span by ID
96
+ */
97
+ findSpanById(spanId) {
98
+ return this.activeSpans.get(spanId);
99
+ }
100
+ /**
101
+ * Generate a unique trace ID
102
+ */
103
+ generateTraceId() {
104
+ return crypto.randomUUID().replace(/-/g, "");
105
+ }
106
+ /**
107
+ * Generate a unique span ID
108
+ */
109
+ generateSpanId() {
110
+ return crypto.randomUUID().replace(/-/g, "").substring(0, 16);
111
+ }
112
+ };
113
+
114
+ //#endregion
115
+ export { Tracer };
116
+ //# sourceMappingURL=tracer.node.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.node.mjs","names":["span: TraceContext"],"sources":["../src/tracer.node.ts"],"sourcesContent":["import type { TraceContext, TracingOptions } from './types';\nimport { LogContext } from './context.node';\nimport { Timer } from './timer';\n\nexport class Tracer {\n private context: LogContext;\n private activeSpans = new Map<string, TraceContext>();\n\n constructor() {\n this.context = LogContext.getInstance();\n }\n\n /**\n * Start a new trace span\n */\n startSpan(options: TracingOptions): TraceContext {\n const parentTrace = this.context.getCurrentTrace();\n const traceId = parentTrace?.traceId || this.generateTraceId();\n\n const span: TraceContext = {\n traceId,\n parentId: parentTrace?.spanId,\n spanId: this.generateSpanId(),\n operationType: options.operationType,\n operationName: options.operationName,\n startTime: performance.now(),\n metadata: { ...options.metadata },\n tags: [...(options.tags || [])],\n };\n\n this.activeSpans.set(span.spanId, span);\n this.context.setTrace(span);\n\n return span;\n }\n\n /**\n * Finish a trace span\n */\n finishSpan(spanId: string): number | undefined {\n const span = this.activeSpans.get(spanId);\n if (!span) {\n return undefined;\n }\n\n const duration = performance.now() - span.startTime;\n this.activeSpans.delete(spanId);\n\n // If this was the current span, restore parent\n const currentTrace = this.context.getCurrentTrace();\n if (currentTrace?.spanId === spanId && span.parentId) {\n const parentSpan = this.findSpanById(span.parentId);\n if (parentSpan) {\n this.context.setTrace(parentSpan);\n }\n }\n\n return duration;\n }\n\n /**\n * Execute a function within a trace span\n */\n async trace<T>(\n options: TracingOptions,\n fn: () => T | Promise<T>\n ): Promise<T> {\n const span = this.startSpan(options);\n const timer =\n options.autoTiming !== false\n ? new Timer(`trace-${span.spanId}`)\n : undefined;\n\n try {\n const result = await fn();\n\n const duration = this.finishSpan(span.spanId);\n if (timer) {\n timer.stop();\n }\n\n // Add timing metadata\n if (duration !== undefined) {\n span.metadata.duration = duration;\n }\n\n return result;\n } catch (error) {\n // Add error metadata\n span.metadata.error = {\n name: (error as Error).name || 'Unknown',\n message: (error as Error).message || 'Unknown error',\n stack: (error as Error).stack,\n };\n\n const duration = this.finishSpan(span.spanId);\n span.metadata.duration = duration;\n if (timer) {\n timer.stop();\n }\n\n throw error;\n }\n }\n\n /**\n * Add metadata to current span\n */\n addMetadata(key: string, value: unknown): void {\n const currentTrace = this.context.getCurrentTrace();\n if (currentTrace) {\n currentTrace.metadata[key] = value;\n }\n }\n\n /**\n * Add tags to current span\n */\n addTags(...tags: string[]): void {\n const currentTrace = this.context.getCurrentTrace();\n if (currentTrace) {\n currentTrace.tags.push(...tags);\n }\n }\n\n /**\n * Get current trace context\n */\n getCurrentTrace(): TraceContext | undefined {\n return this.context.getCurrentTrace();\n }\n\n /**\n * Get all active spans\n */\n getActiveSpans(): TraceContext[] {\n return Array.from(this.activeSpans.values());\n }\n\n /**\n * Find a span by ID\n */\n findSpanById(spanId: string): TraceContext | undefined {\n return this.activeSpans.get(spanId);\n }\n\n /**\n * Generate a unique trace ID\n */\n private generateTraceId(): string {\n return crypto.randomUUID().replace(/-/g, '');\n }\n\n /**\n * Generate a unique span ID\n */\n private generateSpanId(): string {\n return crypto.randomUUID().replace(/-/g, '').substring(0, 16);\n }\n}\n"],"mappings":";;;;AAIA,IAAa,SAAb,MAAoB;CAClB,AAAQ;CACR,AAAQ,8BAAc,IAAI,KAA2B;CAErD,cAAc;AACZ,OAAK,UAAU,WAAW,aAAa;;;;;CAMzC,UAAU,SAAuC;EAC/C,MAAM,cAAc,KAAK,QAAQ,iBAAiB;EAGlD,MAAMA,OAAqB;GACzB,SAHc,aAAa,WAAW,KAAK,iBAAiB;GAI5D,UAAU,aAAa;GACvB,QAAQ,KAAK,gBAAgB;GAC7B,eAAe,QAAQ;GACvB,eAAe,QAAQ;GACvB,WAAW,YAAY,KAAK;GAC5B,UAAU,EAAE,GAAG,QAAQ,UAAU;GACjC,MAAM,CAAC,GAAI,QAAQ,QAAQ,EAAE,CAAE;GAChC;AAED,OAAK,YAAY,IAAI,KAAK,QAAQ,KAAK;AACvC,OAAK,QAAQ,SAAS,KAAK;AAE3B,SAAO;;;;;CAMT,WAAW,QAAoC;EAC7C,MAAM,OAAO,KAAK,YAAY,IAAI,OAAO;AACzC,MAAI,CAAC,KACH;EAGF,MAAM,WAAW,YAAY,KAAK,GAAG,KAAK;AAC1C,OAAK,YAAY,OAAO,OAAO;AAI/B,MADqB,KAAK,QAAQ,iBAAiB,EACjC,WAAW,UAAU,KAAK,UAAU;GACpD,MAAM,aAAa,KAAK,aAAa,KAAK,SAAS;AACnD,OAAI,WACF,MAAK,QAAQ,SAAS,WAAW;;AAIrC,SAAO;;;;;CAMT,MAAM,MACJ,SACA,IACY;EACZ,MAAM,OAAO,KAAK,UAAU,QAAQ;EACpC,MAAM,QACJ,QAAQ,eAAe,QACnB,IAAI,MAAM,SAAS,KAAK,SAAS,GACjC;AAEN,MAAI;GACF,MAAM,SAAS,MAAM,IAAI;GAEzB,MAAM,WAAW,KAAK,WAAW,KAAK,OAAO;AAC7C,OAAI,MACF,OAAM,MAAM;AAId,OAAI,aAAa,OACf,MAAK,SAAS,WAAW;AAG3B,UAAO;WACA,OAAO;AAEd,QAAK,SAAS,QAAQ;IACpB,MAAO,MAAgB,QAAQ;IAC/B,SAAU,MAAgB,WAAW;IACrC,OAAQ,MAAgB;IACzB;GAED,MAAM,WAAW,KAAK,WAAW,KAAK,OAAO;AAC7C,QAAK,SAAS,WAAW;AACzB,OAAI,MACF,OAAM,MAAM;AAGd,SAAM;;;;;;CAOV,YAAY,KAAa,OAAsB;EAC7C,MAAM,eAAe,KAAK,QAAQ,iBAAiB;AACnD,MAAI,aACF,cAAa,SAAS,OAAO;;;;;CAOjC,QAAQ,GAAG,MAAsB;EAC/B,MAAM,eAAe,KAAK,QAAQ,iBAAiB;AACnD,MAAI,aACF,cAAa,KAAK,KAAK,GAAG,KAAK;;;;;CAOnC,kBAA4C;AAC1C,SAAO,KAAK,QAAQ,iBAAiB;;;;;CAMvC,iBAAiC;AAC/B,SAAO,MAAM,KAAK,KAAK,YAAY,QAAQ,CAAC;;;;;CAM9C,aAAa,QAA0C;AACrD,SAAO,KAAK,YAAY,IAAI,OAAO;;;;;CAMrC,AAAQ,kBAA0B;AAChC,SAAO,OAAO,YAAY,CAAC,QAAQ,MAAM,GAAG;;;;;CAM9C,AAAQ,iBAAyB;AAC/B,SAAO,OAAO,YAAY,CAAC,QAAQ,MAAM,GAAG,CAAC,UAAU,GAAG,GAAG"}
@@ -0,0 +1,71 @@
1
+ //#region src/types.d.ts
2
+ declare enum LogLevel {
3
+ TRACE = 0,
4
+ DEBUG = 1,
5
+ INFO = 2,
6
+ WARN = 3,
7
+ ERROR = 4,
8
+ FATAL = 5,
9
+ }
10
+ interface LogEntry {
11
+ level: LogLevel;
12
+ message: string;
13
+ timestamp: Date;
14
+ traceId?: string;
15
+ parentId?: string;
16
+ spanId?: string;
17
+ context?: Record<string, any>;
18
+ metadata?: Record<string, any>;
19
+ duration?: number;
20
+ error?: Error;
21
+ tags?: string[];
22
+ }
23
+ interface TraceContext {
24
+ traceId: string;
25
+ parentId?: string;
26
+ spanId: string;
27
+ operationType: string;
28
+ operationName: string;
29
+ startTime: number;
30
+ metadata: Record<string, any>;
31
+ tags: string[];
32
+ }
33
+ interface TracingOptions {
34
+ operationType: 'http' | 'websocket' | 'cron' | 'queue' | 'database' | 'custom';
35
+ operationName: string;
36
+ metadata?: Record<string, any>;
37
+ tags?: string[];
38
+ autoTiming?: boolean;
39
+ }
40
+ interface LoggerConfig {
41
+ level: LogLevel;
42
+ environment: 'development' | 'production' | 'test';
43
+ enableTracing: boolean;
44
+ enableTiming: boolean;
45
+ enableContext: boolean;
46
+ enableColors: boolean;
47
+ maxContextDepth: number;
48
+ timestampFormat: 'iso' | 'epoch' | 'relative';
49
+ }
50
+ interface Formatter {
51
+ format(entry: LogEntry): string;
52
+ }
53
+ interface Timer {
54
+ readonly id: string;
55
+ stop(): number;
56
+ lap(label?: string): number;
57
+ getElapsed(): number;
58
+ }
59
+ interface ContextData {
60
+ [key: string]: any;
61
+ userId?: string;
62
+ requestId?: string;
63
+ sessionId?: string;
64
+ ip?: string;
65
+ userAgent?: string;
66
+ }
67
+ type LogMethod = (message: string, metadata?: Record<string, any>) => void;
68
+ type TraceMethod = <T>(options: TracingOptions, fn: () => T | Promise<T>) => Promise<T>;
69
+ //#endregion
70
+ export { ContextData, Formatter, LogEntry, LogLevel, LogMethod, LoggerConfig, Timer, TraceContext, TraceMethod, TracingOptions };
71
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";aAAY,QAAA;EAAA,KAAA,GAAA,CAAA;EASK,KAAA,GAAA,CAAA;EACR,IAAA,GAAA,CAAA;EAEI,IAAA,GAAA,CAAA;EAKD,KAAA,GAAA,CAAA;EAEC,KAAA,GAAA,CAAA;;AAEE,UAZE,QAAA,CAYF;EAIE,KAAA,EAfR,QAeoB;EAYZ,OAAA,EAAA,MAAA;EAeA,SAAA,EAxCJ,IAwCgB;EAWZ,OAAA,CAAA,EAAA,MAAS;EAIT,QAAK,CAAA,EAAA,MAAA;EAQL,MAAA,CAAA,EAAA,MAAW;EAUhB,OAAA,CAAA,EApEA,MAoES,CAAA,MAAA,EAGR,GAAA,CAAA;EAED,QAAA,CAAA,EAvEC,MAuEU,CAAA,MAAA,EAAA,GAAA,CAAA;EACZ,QAAA,CAAA,EAAA,MAAA;EACC,KAAA,CAAA,EAvEF,KAuEE;EAAY,IAAA,CAAA,EAAA,MAAA,EAAA;;AACX,UApEI,YAAA,CAoEJ;EAAR,OAAA,EAAA,MAAA;EAAO,QAAA,CAAA,EAAA,MAAA;;;;;YA5DA;;;UAIK,cAAA;;;aAUJ;;;;UAKI,YAAA;SACR;;;;;;;;;UAUQ,SAAA;gBACD;;UAGC,KAAA;;;;;;UAQA,WAAA;;;;;;;;KAUL,SAAA,gCAGC;KAED,WAAA,gBACD,0BACC,IAAI,QAAQ,OACnB,QAAQ"}
package/dist/types.mjs CHANGED
@@ -1 +1,14 @@
1
- let e=function(e){return e[e.TRACE=0]=`TRACE`,e[e.DEBUG=1]=`DEBUG`,e[e.INFO=2]=`INFO`,e[e.WARN=3]=`WARN`,e[e.ERROR=4]=`ERROR`,e[e.FATAL=5]=`FATAL`,e}({});export{e as LogLevel};
1
+ //#region src/types.ts
2
+ let LogLevel = /* @__PURE__ */ function(LogLevel$1) {
3
+ LogLevel$1[LogLevel$1["TRACE"] = 0] = "TRACE";
4
+ LogLevel$1[LogLevel$1["DEBUG"] = 1] = "DEBUG";
5
+ LogLevel$1[LogLevel$1["INFO"] = 2] = "INFO";
6
+ LogLevel$1[LogLevel$1["WARN"] = 3] = "WARN";
7
+ LogLevel$1[LogLevel$1["ERROR"] = 4] = "ERROR";
8
+ LogLevel$1[LogLevel$1["FATAL"] = 5] = "FATAL";
9
+ return LogLevel$1;
10
+ }({});
11
+
12
+ //#endregion
13
+ export { LogLevel };
14
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["export enum LogLevel {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n FATAL = 5,\n}\n\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n traceId?: string;\n parentId?: string;\n spanId?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context?: Record<string, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n metadata?: Record<string, any>;\n duration?: number;\n error?: Error;\n tags?: string[];\n}\n\nexport interface TraceContext {\n traceId: string;\n parentId?: string;\n spanId: string;\n operationType: string;\n operationName: string;\n startTime: number;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n metadata: Record<string, any>;\n tags: string[];\n}\n\nexport interface TracingOptions {\n operationType:\n | 'http'\n | 'websocket'\n | 'cron'\n | 'queue'\n | 'database'\n | 'custom';\n operationName: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n metadata?: Record<string, any>;\n tags?: string[];\n autoTiming?: boolean;\n}\n\nexport interface LoggerConfig {\n level: LogLevel;\n environment: 'development' | 'production' | 'test';\n enableTracing: boolean;\n enableTiming: boolean;\n enableContext: boolean;\n enableColors: boolean;\n maxContextDepth: number;\n timestampFormat: 'iso' | 'epoch' | 'relative';\n}\n\nexport interface Formatter {\n format(entry: LogEntry): string;\n}\n\nexport interface Timer {\n readonly id: string;\n // private startTime: number;\n stop(): number;\n lap(label?: string): number;\n getElapsed(): number;\n}\n\nexport interface ContextData {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n userId?: string;\n requestId?: string;\n sessionId?: string;\n ip?: string;\n userAgent?: string;\n}\n\nexport type LogMethod = (\n message: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n metadata?: Record<string, any>\n) => void;\nexport type TraceMethod = <T>(\n options: TracingOptions,\n fn: () => T | Promise<T>\n) => Promise<T>;\n"],"mappings":";AAAA,IAAY,gDAAL;AACL;AACA;AACA;AACA;AACA;AACA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/lib.logger",
3
- "version": "1.41.1",
3
+ "version": "1.42.1",
4
4
  "description": "Comprehensive logging library optimized for Bun with ElysiaJS integration",
5
5
  "keywords": [
6
6
  "logging",
@@ -17,15 +17,15 @@
17
17
  "lint:check": "eslint src",
18
18
  "publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
19
19
  "publish:pkg:canary": "bun publish:pkg --tag canary",
20
- "build": "bun build:bundle && bun build:types",
20
+ "build": "bun build:types && bun build:bundle",
21
21
  "build:bundle": "tsdown",
22
22
  "build:types": "tsc --noEmit",
23
23
  "dev": "bun build:bundle --watch"
24
24
  },
25
25
  "devDependencies": {
26
- "@lssm/tool.typescript": "1.41.1",
27
- "@lssm/tool.tsdown": "1.41.1",
28
- "tsdown": "^0.17.4",
26
+ "@lssm/tool.typescript": "1.42.1",
27
+ "@lssm/tool.tsdown": "1.42.1",
28
+ "tsdown": "^0.18.3",
29
29
  "typescript": "^5.9.3"
30
30
  },
31
31
  "peerDependencies": {
@@ -37,7 +37,7 @@
37
37
  }
38
38
  },
39
39
  "dependencies": {
40
- "zone.js": "^0.15.0"
40
+ "zone.js": "^0.16.0"
41
41
  },
42
42
  "main": "./dist/index.mjs",
43
43
  "types": "./dist/index.d.mts",
@@ -46,21 +46,21 @@
46
46
  "README.md"
47
47
  ],
48
48
  "exports": {
49
- ".": "./src/index.ts",
50
- "./context": "./src/context.ts",
51
- "./context.browser": "./src/context.browser.ts",
52
- "./context.node": "./src/context.node.ts",
53
- "./elysia-plugin": "./src/elysia-plugin.ts",
54
- "./formatters": "./src/formatters.ts",
55
- "./index.browser": "./src/index.browser.ts",
56
- "./logger": "./src/logger.ts",
57
- "./logger.browser": "./src/logger.browser.ts",
58
- "./logger.node": "./src/logger.node.ts",
59
- "./timer": "./src/timer.ts",
60
- "./tracer": "./src/tracer.ts",
61
- "./tracer.browser": "./src/tracer.browser.ts",
62
- "./tracer.node": "./src/tracer.node.ts",
63
- "./types": "./src/types.ts",
49
+ ".": "./dist/index.mjs",
50
+ "./context": "./dist/context.mjs",
51
+ "./context.browser": "./dist/context.browser.mjs",
52
+ "./context.node": "./dist/context.node.mjs",
53
+ "./elysia-plugin": "./dist/elysia-plugin.mjs",
54
+ "./formatters": "./dist/formatters.mjs",
55
+ "./index.browser": "./dist/index.browser.mjs",
56
+ "./logger": "./dist/logger.mjs",
57
+ "./logger.browser": "./dist/logger.browser.mjs",
58
+ "./logger.node": "./dist/logger.node.mjs",
59
+ "./timer": "./dist/timer.mjs",
60
+ "./tracer": "./dist/tracer.mjs",
61
+ "./tracer.browser": "./dist/tracer.browser.mjs",
62
+ "./tracer.node": "./dist/tracer.node.mjs",
63
+ "./types": "./dist/types.mjs",
64
64
  "./*": "./*"
65
65
  },
66
66
  "module": "./dist/index.mjs",
@@ -83,6 +83,13 @@
83
83
  "./tracer.node": "./dist/tracer.node.mjs",
84
84
  "./types": "./dist/types.mjs",
85
85
  "./*": "./*"
86
- }
86
+ },
87
+ "registry": "https://registry.npmjs.org/"
88
+ },
89
+ "license": "MIT",
90
+ "repository": {
91
+ "type": "git",
92
+ "url": "https://github.com/lssm-tech/contractspec.git",
93
+ "directory": "packages/libs/logger"
87
94
  }
88
95
  }