@contractspec/lib.logger 1.56.1 → 1.58.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 (108) hide show
  1. package/dist/context.browser.d.ts +44 -0
  2. package/dist/context.browser.d.ts.map +1 -0
  3. package/dist/context.browser.js +77 -0
  4. package/dist/context.d.ts +22 -0
  5. package/dist/context.d.ts.map +1 -0
  6. package/dist/context.js +1 -0
  7. package/dist/context.node.d.ts +43 -0
  8. package/dist/context.node.d.ts.map +1 -0
  9. package/dist/context.node.js +62 -0
  10. package/dist/elysia-plugin.d.ts +58 -0
  11. package/dist/elysia-plugin.d.ts.map +1 -0
  12. package/dist/elysia-plugin.js +793 -0
  13. package/dist/formatters.d.ts +25 -0
  14. package/dist/formatters.d.ts.map +1 -0
  15. package/dist/formatters.js +232 -0
  16. package/dist/index.browser.d.ts +8 -0
  17. package/dist/index.browser.d.ts.map +1 -0
  18. package/dist/index.browser.js +728 -0
  19. package/dist/index.d.ts +9 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +800 -0
  22. package/dist/logger.browser.d.ts +48 -0
  23. package/dist/logger.browser.d.ts.map +1 -0
  24. package/dist/logger.browser.js +722 -0
  25. package/dist/logger.d.ts +2 -0
  26. package/dist/logger.d.ts.map +1 -0
  27. package/dist/logger.js +707 -0
  28. package/dist/logger.node.d.ts +48 -0
  29. package/dist/logger.node.d.ts.map +1 -0
  30. package/dist/logger.node.js +707 -0
  31. package/dist/node/context.js +0 -0
  32. package/dist/node/context.node.js +61 -0
  33. package/dist/node/elysia-plugin.js +792 -0
  34. package/dist/node/formatters.js +231 -0
  35. package/dist/node/index.js +799 -0
  36. package/dist/node/logger.js +706 -0
  37. package/dist/node/logger.node.js +706 -0
  38. package/dist/node/timer.js +122 -0
  39. package/dist/node/tracer.js +274 -0
  40. package/dist/node/tracer.node.js +274 -0
  41. package/dist/node/types.js +13 -0
  42. package/dist/timer.d.ts +99 -0
  43. package/dist/timer.d.ts.map +1 -0
  44. package/dist/timer.js +123 -0
  45. package/dist/tracer.browser.d.ts +47 -0
  46. package/dist/tracer.browser.d.ts.map +1 -0
  47. package/dist/tracer.browser.js +290 -0
  48. package/dist/tracer.d.ts +2 -0
  49. package/dist/tracer.d.ts.map +1 -0
  50. package/dist/tracer.js +275 -0
  51. package/dist/tracer.node.d.ts +47 -0
  52. package/dist/tracer.node.d.ts.map +1 -0
  53. package/dist/tracer.node.js +275 -0
  54. package/dist/types.d.ts +68 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +14 -0
  57. package/package.json +112 -42
  58. package/dist/context.browser.d.mts +0 -49
  59. package/dist/context.browser.d.mts.map +0 -1
  60. package/dist/context.browser.mjs +0 -89
  61. package/dist/context.browser.mjs.map +0 -1
  62. package/dist/context.d.mts +0 -17
  63. package/dist/context.d.mts.map +0 -1
  64. package/dist/context.mjs +0 -1
  65. package/dist/context.node.d.mts +0 -48
  66. package/dist/context.node.d.mts.map +0 -1
  67. package/dist/context.node.mjs +0 -79
  68. package/dist/context.node.mjs.map +0 -1
  69. package/dist/elysia-plugin.d.mts +0 -63
  70. package/dist/elysia-plugin.d.mts.map +0 -1
  71. package/dist/elysia-plugin.mjs +0 -84
  72. package/dist/elysia-plugin.mjs.map +0 -1
  73. package/dist/formatters.d.mts +0 -29
  74. package/dist/formatters.d.mts.map +0 -1
  75. package/dist/formatters.mjs +0 -180
  76. package/dist/formatters.mjs.map +0 -1
  77. package/dist/index.browser.d.mts +0 -7
  78. package/dist/index.browser.mjs +0 -8
  79. package/dist/index.d.mts +0 -8
  80. package/dist/index.mjs +0 -9
  81. package/dist/logger.browser.d.mts +0 -51
  82. package/dist/logger.browser.d.mts.map +0 -1
  83. package/dist/logger.browser.mjs +0 -190
  84. package/dist/logger.browser.mjs.map +0 -1
  85. package/dist/logger.d.mts +0 -2
  86. package/dist/logger.mjs +0 -3
  87. package/dist/logger.node.d.mts +0 -51
  88. package/dist/logger.node.d.mts.map +0 -1
  89. package/dist/logger.node.mjs +0 -190
  90. package/dist/logger.node.mjs.map +0 -1
  91. package/dist/timer.d.mts +0 -103
  92. package/dist/timer.d.mts.map +0 -1
  93. package/dist/timer.mjs +0 -165
  94. package/dist/timer.mjs.map +0 -1
  95. package/dist/tracer.browser.d.mts +0 -51
  96. package/dist/tracer.browser.d.mts.map +0 -1
  97. package/dist/tracer.browser.mjs +0 -116
  98. package/dist/tracer.browser.mjs.map +0 -1
  99. package/dist/tracer.d.mts +0 -2
  100. package/dist/tracer.mjs +0 -3
  101. package/dist/tracer.node.d.mts +0 -51
  102. package/dist/tracer.node.d.mts.map +0 -1
  103. package/dist/tracer.node.mjs +0 -116
  104. package/dist/tracer.node.mjs.map +0 -1
  105. package/dist/types.d.mts +0 -71
  106. package/dist/types.d.mts.map +0 -1
  107. package/dist/types.mjs +0 -14
  108. package/dist/types.mjs.map +0 -1
@@ -0,0 +1,231 @@
1
+ // src/types.ts
2
+ var LogLevel;
3
+ ((LogLevel2) => {
4
+ LogLevel2[LogLevel2["TRACE"] = 0] = "TRACE";
5
+ LogLevel2[LogLevel2["DEBUG"] = 1] = "DEBUG";
6
+ LogLevel2[LogLevel2["INFO"] = 2] = "INFO";
7
+ LogLevel2[LogLevel2["WARN"] = 3] = "WARN";
8
+ LogLevel2[LogLevel2["ERROR"] = 4] = "ERROR";
9
+ LogLevel2[LogLevel2["FATAL"] = 5] = "FATAL";
10
+ })(LogLevel ||= {});
11
+
12
+ // src/formatters.ts
13
+ var colors = {
14
+ reset: "\x1B[0m",
15
+ bright: "\x1B[1m",
16
+ dim: "\x1B[2m",
17
+ red: "\x1B[31m",
18
+ green: "\x1B[32m",
19
+ yellow: "\x1B[33m",
20
+ blue: "\x1B[34m",
21
+ magenta: "\x1B[35m",
22
+ cyan: "\x1B[36m",
23
+ white: "\x1B[37m",
24
+ gray: "\x1B[90m",
25
+ bgRed: "\x1B[41m",
26
+ bgYellow: "\x1B[43m"
27
+ };
28
+ var levelConfig = {
29
+ [0 /* TRACE */]: { color: colors.gray, symbol: "○", name: "TRACE" },
30
+ [1 /* DEBUG */]: { color: colors.blue, symbol: "●", name: "DEBUG" },
31
+ [2 /* INFO */]: { color: colors.green, symbol: "●", name: "INFO " },
32
+ [3 /* WARN */]: { color: colors.yellow, symbol: "▲", name: "WARN " },
33
+ [4 /* ERROR */]: { color: colors.red, symbol: "✖", name: "ERROR" },
34
+ [5 /* FATAL */]: {
35
+ color: colors.bgRed + colors.white,
36
+ symbol: "\uD83D\uDC80",
37
+ name: "FATAL"
38
+ }
39
+ };
40
+
41
+ class DevFormatter {
42
+ enableColors;
43
+ constructor(enableColors = true) {
44
+ this.enableColors = enableColors;
45
+ }
46
+ format(entry) {
47
+ const parts = [];
48
+ const config = levelConfig[entry.level];
49
+ const timestamp = this.formatTimestamp(entry.timestamp);
50
+ parts.push(this.colorize(timestamp, colors.gray));
51
+ const levelText = `${config.symbol} ${config.name}`;
52
+ parts.push(this.colorize(levelText, config.color));
53
+ if (entry.traceId) {
54
+ const traceInfo = this.formatTraceInfo(entry);
55
+ parts.push(this.colorize(traceInfo, colors.cyan));
56
+ }
57
+ parts.push(this.colorize(entry.message, colors.white));
58
+ if (entry.duration !== undefined) {
59
+ const durationText = `(${this.formatDuration(entry.duration)})`;
60
+ parts.push(this.colorize(durationText, colors.magenta));
61
+ }
62
+ let output = parts.join(" ");
63
+ if (entry.context && Object.keys(entry.context).length > 0) {
64
+ output += `
65
+ ` + this.formatContext(entry.context);
66
+ }
67
+ if (entry.metadata && Object.keys(entry.metadata).length > 0) {
68
+ output += `
69
+ ` + this.formatMetadata(entry.metadata);
70
+ }
71
+ if (entry.error) {
72
+ output += `
73
+ ` + this.formatError(entry.error);
74
+ }
75
+ if (entry.tags && entry.tags.length > 0) {
76
+ const tagsText = entry.tags.map((tag) => `#${tag}`).join(" ");
77
+ output += `
78
+ ` + this.colorize(`Tags: ${tagsText}`, colors.blue);
79
+ }
80
+ return output;
81
+ }
82
+ formatTimestamp(timestamp) {
83
+ return timestamp.toISOString().substring(11, 23);
84
+ }
85
+ formatTraceInfo(entry) {
86
+ const parts = [`trace:${entry.traceId?.substring(0, 8) || "unknown"}`];
87
+ if (entry.spanId && entry.spanId.length >= 8) {
88
+ parts.push(`span:${entry.spanId.substring(0, 8)}`);
89
+ }
90
+ if (entry.parentId && entry.parentId.length >= 8) {
91
+ parts.push(`parent:${entry.parentId.substring(0, 8)}`);
92
+ }
93
+ return `[${parts.join("|")}]`;
94
+ }
95
+ formatDuration(duration) {
96
+ if (duration < 1) {
97
+ return `${(duration * 1000).toFixed(0)}μs`;
98
+ } else if (duration < 1000) {
99
+ return `${duration.toFixed(2)}ms`;
100
+ } else {
101
+ return `${(duration / 1000).toFixed(2)}s`;
102
+ }
103
+ }
104
+ formatContext(context) {
105
+ const formatted = this.formatObject(context, 2);
106
+ return this.colorize(`Context: ${formatted}`, colors.cyan);
107
+ }
108
+ formatMetadata(metadata) {
109
+ const formatted = this.formatObject(metadata, 2);
110
+ return this.colorize(`Metadata: ${formatted}`, colors.blue);
111
+ }
112
+ formatError(error) {
113
+ let output = this.colorize(`Error: ${error.name}: ${error.message}`, colors.red);
114
+ if (error.stack) {
115
+ const stackLines = error.stack.split(`
116
+ `).slice(1, 6);
117
+ const indentedStack = stackLines.map((line) => ` ${line}`).join(`
118
+ `);
119
+ output += `
120
+ ` + this.colorize(indentedStack, colors.gray);
121
+ }
122
+ return output;
123
+ }
124
+ formatObject(obj, indent = 0) {
125
+ const spaces = " ".repeat(indent);
126
+ const entries = Object.entries(obj);
127
+ if (entries.length === 0)
128
+ return "{}";
129
+ if (entries[0] && typeof entries[0][1] !== "object") {
130
+ return `{ ${entries[0][0]}: ${this.formatValue(entries[0][1])} }`;
131
+ }
132
+ const formatted = entries.map(([key, value]) => {
133
+ return `${spaces} ${key}: ${this.formatValue(value, indent + 2)}`;
134
+ }).join(`
135
+ `);
136
+ return `{
137
+ ${formatted}
138
+ ${spaces}}`;
139
+ }
140
+ formatValue(value, indent = 0) {
141
+ if (value === null)
142
+ return "null";
143
+ if (value === undefined)
144
+ return "undefined";
145
+ if (typeof value === "string")
146
+ return `"${value}"`;
147
+ if (typeof value === "boolean" || typeof value === "number")
148
+ return String(value);
149
+ if (value instanceof Date)
150
+ return value.toISOString();
151
+ if (Array.isArray(value)) {
152
+ if (value.length === 0)
153
+ return "[]";
154
+ return `[${value.map((v) => this.formatValue(v)).join(", ")}]`;
155
+ }
156
+ if (typeof value === "object") {
157
+ return this.formatObject(value, indent);
158
+ }
159
+ return String(value);
160
+ }
161
+ colorize(text, color) {
162
+ if (!this.enableColors)
163
+ return text;
164
+ return `${color}${text}${colors.reset}`;
165
+ }
166
+ }
167
+
168
+ class ProductionFormatter {
169
+ format(entry) {
170
+ const logObject = {
171
+ timestamp: entry.timestamp,
172
+ level: entry.level,
173
+ message: entry.message
174
+ };
175
+ if (entry.traceId) {
176
+ logObject.traceId = entry.traceId;
177
+ }
178
+ if (entry.spanId) {
179
+ logObject.spanId = entry.spanId;
180
+ }
181
+ if (entry.parentId) {
182
+ logObject.parentId = entry.parentId;
183
+ }
184
+ if (entry.duration !== undefined) {
185
+ logObject.duration = entry.duration;
186
+ }
187
+ if (entry.context && Object.keys(entry.context).length > 0) {
188
+ logObject.context = entry.context;
189
+ }
190
+ if (entry.metadata && Object.keys(entry.metadata).length > 0) {
191
+ logObject.metadata = entry.metadata;
192
+ }
193
+ if (entry.error) {
194
+ logObject.error = {
195
+ name: entry.error.name,
196
+ message: entry.error.message,
197
+ stack: entry.error.stack
198
+ };
199
+ }
200
+ if (entry.tags && entry.tags.length > 0) {
201
+ logObject.tags = entry.tags;
202
+ }
203
+ return JSON.stringify(logObject);
204
+ }
205
+ }
206
+
207
+ class CustomFormatter {
208
+ template;
209
+ dateFormat;
210
+ constructor(template = "{timestamp} [{level}] {message}", dateFormat) {
211
+ this.template = template;
212
+ this.dateFormat = dateFormat || ((date) => date.toISOString());
213
+ }
214
+ format(entry) {
215
+ const levelName = LogLevel[entry.level];
216
+ const timestamp = this.dateFormat(entry.timestamp);
217
+ let formatted = this.template.replace("{timestamp}", timestamp).replace("{level}", levelName).replace("{message}", entry.message).replace("{traceId}", entry.traceId || "").replace("{spanId}", entry.spanId || "").replace("{duration}", entry.duration?.toString() || "");
218
+ if (entry.context) {
219
+ formatted = formatted.replace("{context}", JSON.stringify(entry.context));
220
+ }
221
+ if (entry.metadata) {
222
+ formatted = formatted.replace("{metadata}", JSON.stringify(entry.metadata));
223
+ }
224
+ return formatted;
225
+ }
226
+ }
227
+ export {
228
+ ProductionFormatter,
229
+ DevFormatter,
230
+ CustomFormatter
231
+ };