hazo_logs 1.0.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.
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config_loader.d.ts +12 -0
- package/dist/lib/config_loader.d.ts.map +1 -0
- package/dist/lib/config_loader.js +81 -0
- package/dist/lib/config_loader.js.map +1 -0
- package/dist/lib/context/index.d.ts +5 -0
- package/dist/lib/context/index.d.ts.map +1 -0
- package/dist/lib/context/index.js +5 -0
- package/dist/lib/context/index.js.map +1 -0
- package/dist/lib/context/log-context.d.ts +83 -0
- package/dist/lib/context/log-context.d.ts.map +1 -0
- package/dist/lib/context/log-context.js +136 -0
- package/dist/lib/context/log-context.js.map +1 -0
- package/dist/lib/hazo_logger.d.ts +40 -0
- package/dist/lib/hazo_logger.d.ts.map +1 -0
- package/dist/lib/hazo_logger.js +82 -0
- package/dist/lib/hazo_logger.js.map +1 -0
- package/dist/lib/index.d.ts +7 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +5 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/log-reader.d.ts +51 -0
- package/dist/lib/log-reader.d.ts.map +1 -0
- package/dist/lib/log-reader.js +248 -0
- package/dist/lib/log-reader.js.map +1 -0
- package/dist/lib/package_logger.d.ts +27 -0
- package/dist/lib/package_logger.d.ts.map +1 -0
- package/dist/lib/package_logger.js +57 -0
- package/dist/lib/package_logger.js.map +1 -0
- package/dist/lib/transports/console_transport.d.ts +10 -0
- package/dist/lib/transports/console_transport.d.ts.map +1 -0
- package/dist/lib/transports/console_transport.js +21 -0
- package/dist/lib/transports/console_transport.js.map +1 -0
- package/dist/lib/transports/file_transport.d.ts +10 -0
- package/dist/lib/transports/file_transport.d.ts.map +1 -0
- package/dist/lib/transports/file_transport.js +56 -0
- package/dist/lib/transports/file_transport.js.map +1 -0
- package/dist/lib/transports/index.d.ts +3 -0
- package/dist/lib/transports/index.d.ts.map +1 -0
- package/dist/lib/transports/index.js +3 -0
- package/dist/lib/transports/index.js.map +1 -0
- package/dist/lib/types.d.ts +66 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +5 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils/caller_info.d.ts +13 -0
- package/dist/lib/utils/caller_info.d.ts.map +1 -0
- package/dist/lib/utils/caller_info.js +65 -0
- package/dist/lib/utils/caller_info.js.map +1 -0
- package/dist/lib/utils/constants.d.ts +16 -0
- package/dist/lib/utils/constants.d.ts.map +1 -0
- package/dist/lib/utils/constants.js +27 -0
- package/dist/lib/utils/constants.js.map +1 -0
- package/dist/lib/utils/index.d.ts +3 -0
- package/dist/lib/utils/index.d.ts.map +1 -0
- package/dist/lib/utils/index.js +3 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/ui/api/log-api-handler.d.ts +21 -0
- package/dist/ui/api/log-api-handler.d.ts.map +1 -0
- package/dist/ui/api/log-api-handler.js +151 -0
- package/dist/ui/api/log-api-handler.js.map +1 -0
- package/dist/ui/components/LogLevelBadge.d.ts +6 -0
- package/dist/ui/components/LogLevelBadge.d.ts.map +1 -0
- package/dist/ui/components/LogLevelBadge.js +16 -0
- package/dist/ui/components/LogLevelBadge.js.map +1 -0
- package/dist/ui/components/LogPagination.d.ts +6 -0
- package/dist/ui/components/LogPagination.d.ts.map +1 -0
- package/dist/ui/components/LogPagination.js +14 -0
- package/dist/ui/components/LogPagination.js.map +1 -0
- package/dist/ui/components/LogTable.d.ts +6 -0
- package/dist/ui/components/LogTable.d.ts.map +1 -0
- package/dist/ui/components/LogTable.js +33 -0
- package/dist/ui/components/LogTable.js.map +1 -0
- package/dist/ui/components/LogTimeline.d.ts +10 -0
- package/dist/ui/components/LogTimeline.d.ts.map +1 -0
- package/dist/ui/components/LogTimeline.js +95 -0
- package/dist/ui/components/LogTimeline.js.map +1 -0
- package/dist/ui/components/LogViewerPage.d.ts +6 -0
- package/dist/ui/components/LogViewerPage.d.ts.map +1 -0
- package/dist/ui/components/LogViewerPage.js +273 -0
- package/dist/ui/components/LogViewerPage.js.map +1 -0
- package/dist/ui/index.d.ts +12 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +12 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/middleware/with-log-auth.d.ts +25 -0
- package/dist/ui/middleware/with-log-auth.d.ts.map +1 -0
- package/dist/ui/middleware/with-log-auth.js +49 -0
- package/dist/ui/middleware/with-log-auth.js.map +1 -0
- package/dist/ui/server.d.ts +9 -0
- package/dist/ui/server.d.ts.map +1 -0
- package/dist/ui/server.js +10 -0
- package/dist/ui/server.js.map +1 -0
- package/dist/ui/types.d.ts +135 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +5 -0
- package/dist/ui/types.js.map +1 -0
- package/hazo_logs_config.example.ini +47 -0
- package/package.json +81 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log Reader Service
|
|
3
|
+
* Reads and parses log files with filtering, sorting, and pagination
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import readline from 'readline';
|
|
8
|
+
import { loadConfig } from './config_loader.js';
|
|
9
|
+
const LEVEL_ORDER = {
|
|
10
|
+
error: 0,
|
|
11
|
+
warn: 1,
|
|
12
|
+
info: 2,
|
|
13
|
+
debug: 3,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Read logs from file with filtering, sorting, and pagination
|
|
17
|
+
*/
|
|
18
|
+
export async function readLogs(options = {}) {
|
|
19
|
+
const config = loadConfig();
|
|
20
|
+
const logDir = options.logDirectory || config.log_directory;
|
|
21
|
+
const date = options.date || getTodayDate();
|
|
22
|
+
const pageSize = options.pageSize || config.log_viewer_page_size || 50;
|
|
23
|
+
const page = options.page || 1;
|
|
24
|
+
const maxResults = config.log_viewer_max_results || 1000;
|
|
25
|
+
const logFilePath = path.resolve(logDir, `hazo-${date}.log`);
|
|
26
|
+
if (!fs.existsSync(logFilePath)) {
|
|
27
|
+
return {
|
|
28
|
+
logs: [],
|
|
29
|
+
total: 0,
|
|
30
|
+
page,
|
|
31
|
+
pageSize,
|
|
32
|
+
totalPages: 0,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Read and parse all logs from file
|
|
36
|
+
let logs = await parseLogFile(logFilePath);
|
|
37
|
+
// Apply filters
|
|
38
|
+
logs = applyFilters(logs, options);
|
|
39
|
+
// Limit to max results
|
|
40
|
+
if (logs.length > maxResults) {
|
|
41
|
+
logs = logs.slice(0, maxResults);
|
|
42
|
+
}
|
|
43
|
+
const total = logs.length;
|
|
44
|
+
// Apply sorting
|
|
45
|
+
logs = applySorting(logs, options.sortBy, options.sortOrder);
|
|
46
|
+
// Apply pagination
|
|
47
|
+
const totalPages = Math.ceil(total / pageSize);
|
|
48
|
+
const startIndex = (page - 1) * pageSize;
|
|
49
|
+
const paginatedLogs = logs.slice(startIndex, startIndex + pageSize);
|
|
50
|
+
return {
|
|
51
|
+
logs: paginatedLogs,
|
|
52
|
+
total,
|
|
53
|
+
page,
|
|
54
|
+
pageSize,
|
|
55
|
+
totalPages,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get list of available log dates
|
|
60
|
+
*/
|
|
61
|
+
export async function getAvailableLogDates(logDirectory) {
|
|
62
|
+
const config = loadConfig();
|
|
63
|
+
const logDir = logDirectory || config.log_directory;
|
|
64
|
+
const resolvedDir = path.resolve(logDir);
|
|
65
|
+
if (!fs.existsSync(resolvedDir)) {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
const files = fs.readdirSync(resolvedDir);
|
|
69
|
+
const dates = [];
|
|
70
|
+
for (const file of files) {
|
|
71
|
+
const match = file.match(/^hazo-(\d{4}-\d{2}-\d{2})\.log$/);
|
|
72
|
+
if (match) {
|
|
73
|
+
dates.push(match[1]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Sort dates descending (newest first)
|
|
77
|
+
return dates.sort((a, b) => b.localeCompare(a));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get unique package names from logs
|
|
81
|
+
*/
|
|
82
|
+
export async function getUniquePackages(logDirectory, date) {
|
|
83
|
+
const config = loadConfig();
|
|
84
|
+
const logDir = logDirectory || config.log_directory;
|
|
85
|
+
const targetDate = date || getTodayDate();
|
|
86
|
+
const logFilePath = path.resolve(logDir, `hazo-${targetDate}.log`);
|
|
87
|
+
if (!fs.existsSync(logFilePath)) {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
const logs = await parseLogFile(logFilePath);
|
|
91
|
+
const packages = new Set();
|
|
92
|
+
for (const log of logs) {
|
|
93
|
+
if (log.package) {
|
|
94
|
+
packages.add(log.package);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return Array.from(packages).sort();
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get unique execution IDs from logs
|
|
101
|
+
*/
|
|
102
|
+
export async function getUniqueExecutionIds(logDirectory, date) {
|
|
103
|
+
const config = loadConfig();
|
|
104
|
+
const logDir = logDirectory || config.log_directory;
|
|
105
|
+
const targetDate = date || getTodayDate();
|
|
106
|
+
const logFilePath = path.resolve(logDir, `hazo-${targetDate}.log`);
|
|
107
|
+
if (!fs.existsSync(logFilePath)) {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
const logs = await parseLogFile(logFilePath);
|
|
111
|
+
const executionIds = new Set();
|
|
112
|
+
for (const log of logs) {
|
|
113
|
+
if (log.executionId) {
|
|
114
|
+
executionIds.add(log.executionId);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return Array.from(executionIds).sort();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get unique session IDs from logs
|
|
121
|
+
*/
|
|
122
|
+
export async function getUniqueSessionIds(logDirectory, date) {
|
|
123
|
+
const config = loadConfig();
|
|
124
|
+
const logDir = logDirectory || config.log_directory;
|
|
125
|
+
const targetDate = date || getTodayDate();
|
|
126
|
+
const logFilePath = path.resolve(logDir, `hazo-${targetDate}.log`);
|
|
127
|
+
if (!fs.existsSync(logFilePath)) {
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
const logs = await parseLogFile(logFilePath);
|
|
131
|
+
const sessionIds = new Set();
|
|
132
|
+
for (const log of logs) {
|
|
133
|
+
if (log.sessionId) {
|
|
134
|
+
sessionIds.add(log.sessionId);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return Array.from(sessionIds).sort();
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get unique references from logs
|
|
141
|
+
*/
|
|
142
|
+
export async function getUniqueReferences(logDirectory, date) {
|
|
143
|
+
const config = loadConfig();
|
|
144
|
+
const logDir = logDirectory || config.log_directory;
|
|
145
|
+
const targetDate = date || getTodayDate();
|
|
146
|
+
const logFilePath = path.resolve(logDir, `hazo-${targetDate}.log`);
|
|
147
|
+
if (!fs.existsSync(logFilePath)) {
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
const logs = await parseLogFile(logFilePath);
|
|
151
|
+
const references = new Set();
|
|
152
|
+
for (const log of logs) {
|
|
153
|
+
if (log.reference) {
|
|
154
|
+
references.add(log.reference);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return Array.from(references).sort();
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Parse a log file line by line
|
|
161
|
+
*/
|
|
162
|
+
async function parseLogFile(filePath) {
|
|
163
|
+
const logs = [];
|
|
164
|
+
const fileStream = fs.createReadStream(filePath);
|
|
165
|
+
const rl = readline.createInterface({
|
|
166
|
+
input: fileStream,
|
|
167
|
+
crlfDelay: Infinity,
|
|
168
|
+
});
|
|
169
|
+
for await (const line of rl) {
|
|
170
|
+
if (!line.trim())
|
|
171
|
+
continue;
|
|
172
|
+
try {
|
|
173
|
+
const entry = JSON.parse(line);
|
|
174
|
+
logs.push(entry);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// Skip malformed lines
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return logs;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Apply filters to logs
|
|
184
|
+
*/
|
|
185
|
+
function applyFilters(logs, options) {
|
|
186
|
+
let filtered = logs;
|
|
187
|
+
// Filter by level
|
|
188
|
+
if (options.level && options.level.length > 0) {
|
|
189
|
+
filtered = filtered.filter((log) => options.level.includes(log.level));
|
|
190
|
+
}
|
|
191
|
+
// Filter by package
|
|
192
|
+
if (options.package && options.package.length > 0) {
|
|
193
|
+
filtered = filtered.filter((log) => options.package.includes(log.package));
|
|
194
|
+
}
|
|
195
|
+
// Filter by execution ID
|
|
196
|
+
if (options.executionId && options.executionId.length > 0) {
|
|
197
|
+
filtered = filtered.filter((log) => options.executionId.includes(log.executionId));
|
|
198
|
+
}
|
|
199
|
+
// Filter by session ID
|
|
200
|
+
if (options.sessionId && options.sessionId.length > 0) {
|
|
201
|
+
filtered = filtered.filter((log) => log.sessionId && options.sessionId.includes(log.sessionId));
|
|
202
|
+
}
|
|
203
|
+
// Filter by reference
|
|
204
|
+
if (options.reference && options.reference.length > 0) {
|
|
205
|
+
filtered = filtered.filter((log) => log.reference && options.reference.includes(log.reference));
|
|
206
|
+
}
|
|
207
|
+
// Filter by search text
|
|
208
|
+
if (options.search) {
|
|
209
|
+
const searchLower = options.search.toLowerCase();
|
|
210
|
+
filtered = filtered.filter((log) => log.message.toLowerCase().includes(searchLower) ||
|
|
211
|
+
log.package.toLowerCase().includes(searchLower) ||
|
|
212
|
+
log.filename.toLowerCase().includes(searchLower) ||
|
|
213
|
+
(log.sessionId && log.sessionId.toLowerCase().includes(searchLower)) ||
|
|
214
|
+
(log.reference && log.reference.toLowerCase().includes(searchLower)));
|
|
215
|
+
}
|
|
216
|
+
return filtered;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Apply sorting to logs
|
|
220
|
+
*/
|
|
221
|
+
function applySorting(logs, sortBy, sortOrder) {
|
|
222
|
+
const order = sortOrder === 'asc' ? 1 : -1;
|
|
223
|
+
return [...logs].sort((a, b) => {
|
|
224
|
+
switch (sortBy) {
|
|
225
|
+
case 'level':
|
|
226
|
+
return (LEVEL_ORDER[a.level] - LEVEL_ORDER[b.level]) * order;
|
|
227
|
+
case 'package':
|
|
228
|
+
return a.package.localeCompare(b.package) * order;
|
|
229
|
+
case 'executionId':
|
|
230
|
+
return a.executionId.localeCompare(b.executionId) * order;
|
|
231
|
+
case 'sessionId':
|
|
232
|
+
return (a.sessionId || '').localeCompare(b.sessionId || '') * order;
|
|
233
|
+
case 'reference':
|
|
234
|
+
return (a.reference || '').localeCompare(b.reference || '') * order;
|
|
235
|
+
case 'timestamp':
|
|
236
|
+
default:
|
|
237
|
+
return a.timestamp.localeCompare(b.timestamp) * order;
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get today's date in YYYY-MM-DD format
|
|
243
|
+
*/
|
|
244
|
+
function getTodayDate() {
|
|
245
|
+
const now = new Date();
|
|
246
|
+
return now.toISOString().split('T')[0];
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=log-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-reader.js","sourceRoot":"","sources":["../../src/lib/log-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-specific logger implementation
|
|
3
|
+
* Creates loggers that tag all entries with a package name
|
|
4
|
+
*/
|
|
5
|
+
import { HazoLogger } from './hazo_logger.js';
|
|
6
|
+
import type { Logger, LogData, PackageLoggerOptions } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Logger implementation for a specific package
|
|
9
|
+
* Tags all log entries with the package name and captures caller info
|
|
10
|
+
*/
|
|
11
|
+
export declare class PackageLogger implements Logger {
|
|
12
|
+
private coreLogger;
|
|
13
|
+
private packageName;
|
|
14
|
+
constructor(options: PackageLoggerOptions, coreLogger?: HazoLogger);
|
|
15
|
+
private log;
|
|
16
|
+
error(message: string, data?: LogData): void;
|
|
17
|
+
warn(message: string, data?: LogData): void;
|
|
18
|
+
info(message: string, data?: LogData): void;
|
|
19
|
+
debug(message: string, data?: LogData): void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Factory function to create a package-specific logger
|
|
23
|
+
* @param packageName - Name of the package (e.g., "hazo_auth", "hazo_notify")
|
|
24
|
+
* @returns Logger instance for the specified package
|
|
25
|
+
*/
|
|
26
|
+
export declare function createLogger(packageName: string): Logger;
|
|
27
|
+
//# sourceMappingURL=package_logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package_logger.d.ts","sourceRoot":"","sources":["../../src/lib/package_logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAY,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIlF;;;GAGG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,oBAAoB,EAAE,UAAU,CAAC,EAAE,UAAU;IAKlE,OAAO,CAAC,GAAG;IAmBX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;CAG7C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-specific logger implementation
|
|
3
|
+
* Creates loggers that tag all entries with a package name
|
|
4
|
+
*/
|
|
5
|
+
import { HazoLogger } from './hazo_logger.js';
|
|
6
|
+
import { getCallerInfo } from './utils/caller_info.js';
|
|
7
|
+
import { getLogContext } from './context/log-context.js';
|
|
8
|
+
/**
|
|
9
|
+
* Logger implementation for a specific package
|
|
10
|
+
* Tags all log entries with the package name and captures caller info
|
|
11
|
+
*/
|
|
12
|
+
export class PackageLogger {
|
|
13
|
+
coreLogger;
|
|
14
|
+
packageName;
|
|
15
|
+
constructor(options, coreLogger) {
|
|
16
|
+
this.packageName = options.packageName;
|
|
17
|
+
this.coreLogger = coreLogger || HazoLogger.getInstance();
|
|
18
|
+
}
|
|
19
|
+
log(level, message, data) {
|
|
20
|
+
const { filename, line } = getCallerInfo();
|
|
21
|
+
const context = getLogContext();
|
|
22
|
+
this.coreLogger.log({
|
|
23
|
+
timestamp: new Date().toISOString(),
|
|
24
|
+
level,
|
|
25
|
+
package: this.packageName,
|
|
26
|
+
message,
|
|
27
|
+
filename,
|
|
28
|
+
line,
|
|
29
|
+
executionId: this.coreLogger.getExecutionId(),
|
|
30
|
+
...(context?.sessionId ? { sessionId: context.sessionId } : {}),
|
|
31
|
+
...(context?.reference ? { reference: context.reference } : {}),
|
|
32
|
+
...(context?.depth ? { depth: context.depth } : {}),
|
|
33
|
+
...(data ? { data } : {}),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
error(message, data) {
|
|
37
|
+
this.log('error', message, data);
|
|
38
|
+
}
|
|
39
|
+
warn(message, data) {
|
|
40
|
+
this.log('warn', message, data);
|
|
41
|
+
}
|
|
42
|
+
info(message, data) {
|
|
43
|
+
this.log('info', message, data);
|
|
44
|
+
}
|
|
45
|
+
debug(message, data) {
|
|
46
|
+
this.log('debug', message, data);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Factory function to create a package-specific logger
|
|
51
|
+
* @param packageName - Name of the package (e.g., "hazo_auth", "hazo_notify")
|
|
52
|
+
* @returns Logger instance for the specified package
|
|
53
|
+
*/
|
|
54
|
+
export function createLogger(packageName) {
|
|
55
|
+
return new PackageLogger({ packageName });
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=package_logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package_logger.js","sourceRoot":"","sources":["../../src/lib/package_logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;GAGG;AACH,MAAM,OAAO,aAAa;IAChB,UAAU,CAAa;IACvB,WAAW,CAAS;IAE5B,YAAY,OAA6B,EAAE,UAAuB;QAChE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3D,CAAC;IAEO,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,IAAc;QAC1D,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAEhC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK;YACL,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,OAAO;YACP,QAAQ;YACR,IAAI;YACJ,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;YAC7C,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAc;QACnC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAc;QACnC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,IAAI,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Colored console transport for hazo_logs
|
|
3
|
+
*/
|
|
4
|
+
import winston from 'winston';
|
|
5
|
+
import type { LogLevel } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Create a Winston console transport with colored output
|
|
8
|
+
*/
|
|
9
|
+
export declare function createConsoleTransport(level: LogLevel): winston.transport;
|
|
10
|
+
//# sourceMappingURL=console_transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console_transport.d.ts","sourceRoot":"","sources":["../../../src/lib/transports/console_transport.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAezE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Colored console transport for hazo_logs
|
|
3
|
+
*/
|
|
4
|
+
import winston from 'winston';
|
|
5
|
+
import { COLORS } from '../utils/constants.js';
|
|
6
|
+
/**
|
|
7
|
+
* Create a Winston console transport with colored output
|
|
8
|
+
*/
|
|
9
|
+
export function createConsoleTransport(level) {
|
|
10
|
+
return new winston.transports.Console({
|
|
11
|
+
level,
|
|
12
|
+
format: winston.format.combine(winston.format.timestamp({ format: 'HH:mm:ss' }), winston.format.printf((info) => {
|
|
13
|
+
const { timestamp, level: logLevel, message, package: pkg, filename, line } = info;
|
|
14
|
+
const color = COLORS[logLevel] || COLORS.reset;
|
|
15
|
+
const levelUpper = logLevel.toUpperCase().padEnd(5);
|
|
16
|
+
const location = `${filename}:${line}`;
|
|
17
|
+
return `${color}[${timestamp}] [${levelUpper}] [${pkg}] ${message} (${location})${COLORS.reset}`;
|
|
18
|
+
})),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=console_transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console_transport.js","sourceRoot":"","sources":["../../../src/lib/transports/console_transport.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAe;IACpD,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;QACpC,KAAK;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAChD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;YACnF,MAAM,KAAK,GAAG,MAAM,CAAC,QAA+B,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;YACtE,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;YAEvC,OAAO,GAAG,KAAK,IAAI,SAAS,MAAM,UAAU,MAAM,GAAG,KAAK,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACnG,CAAC,CAAC,CACH;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daily rotating JSON file transport for hazo_logs
|
|
3
|
+
*/
|
|
4
|
+
import DailyRotateFile from 'winston-daily-rotate-file';
|
|
5
|
+
import type { HazoLogConfig } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Create a Winston daily rotating file transport with JSON format
|
|
8
|
+
*/
|
|
9
|
+
export declare function createFileTransport(config: HazoLogConfig): DailyRotateFile;
|
|
10
|
+
//# sourceMappingURL=file_transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file_transport.d.ts","sourceRoot":"","sources":["../../../src/lib/transports/file_transport.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAIxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmCjD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,eAAe,CAmB1E"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daily rotating JSON file transport for hazo_logs
|
|
3
|
+
*/
|
|
4
|
+
import DailyRotateFile from 'winston-daily-rotate-file';
|
|
5
|
+
import winston from 'winston';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
/**
|
|
9
|
+
* Custom format that outputs fields in a logical, readable order
|
|
10
|
+
*/
|
|
11
|
+
const orderedJsonFormat = winston.format.printf((info) => {
|
|
12
|
+
const ordered = {
|
|
13
|
+
timestamp: info.timestamp,
|
|
14
|
+
level: info.level,
|
|
15
|
+
package: info.package,
|
|
16
|
+
message: info.message,
|
|
17
|
+
filename: info.filename,
|
|
18
|
+
line: info.line,
|
|
19
|
+
executionId: info.executionId,
|
|
20
|
+
};
|
|
21
|
+
// Add optional context fields if present
|
|
22
|
+
if (info.sessionId) {
|
|
23
|
+
ordered.sessionId = info.sessionId;
|
|
24
|
+
}
|
|
25
|
+
if (info.reference) {
|
|
26
|
+
ordered.reference = info.reference;
|
|
27
|
+
}
|
|
28
|
+
if (info.depth !== undefined) {
|
|
29
|
+
ordered.depth = info.depth;
|
|
30
|
+
}
|
|
31
|
+
// Add data field if present
|
|
32
|
+
if (info.data) {
|
|
33
|
+
ordered.data = info.data;
|
|
34
|
+
}
|
|
35
|
+
return JSON.stringify(ordered);
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Create a Winston daily rotating file transport with JSON format
|
|
39
|
+
*/
|
|
40
|
+
export function createFileTransport(config) {
|
|
41
|
+
// Ensure log directory exists
|
|
42
|
+
const logDir = path.resolve(config.log_directory);
|
|
43
|
+
if (!fs.existsSync(logDir)) {
|
|
44
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
return new DailyRotateFile({
|
|
47
|
+
level: config.log_level,
|
|
48
|
+
dirname: logDir,
|
|
49
|
+
filename: 'hazo-%DATE%.log',
|
|
50
|
+
datePattern: config.date_pattern,
|
|
51
|
+
maxSize: config.max_file_size,
|
|
52
|
+
maxFiles: config.max_files,
|
|
53
|
+
format: winston.format.combine(winston.format.timestamp(), orderedJsonFormat),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=file_transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file_transport.js","sourceRoot":"","sources":["../../../src/lib/transports/file_transport.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,eAAe,MAAM,2BAA2B,CAAC;AACxD,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB;;GAEG;AACH,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACvD,MAAM,OAAO,GAA4B;QACvC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC;IAEF,yCAAyC;IACzC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACrC,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACrC,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,4BAA4B;IAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAqB;IACvD,8BAA8B;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,IAAI,eAAe,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC,SAAS;QACvB,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,iBAAiB;QAC3B,WAAW,EAAE,MAAM,CAAC,YAAY;QAChC,OAAO,EAAE,MAAM,CAAC,aAAa;QAC7B,QAAQ,EAAE,MAAM,CAAC,SAAS;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,iBAAiB,CAClB;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/transports/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/transports/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for hazo_logs
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Log levels supported by hazo_logs
|
|
6
|
+
*/
|
|
7
|
+
export type LogLevel = 'error' | 'warn' | 'info' | 'debug';
|
|
8
|
+
/**
|
|
9
|
+
* Additional data that can be attached to log entries
|
|
10
|
+
*/
|
|
11
|
+
export type LogData = Record<string, unknown>;
|
|
12
|
+
/**
|
|
13
|
+
* Log entry structure written to JSON files
|
|
14
|
+
*/
|
|
15
|
+
export interface LogEntry {
|
|
16
|
+
timestamp: string;
|
|
17
|
+
level: LogLevel;
|
|
18
|
+
package: string;
|
|
19
|
+
message: string;
|
|
20
|
+
filename: string;
|
|
21
|
+
line: number;
|
|
22
|
+
executionId: string;
|
|
23
|
+
sessionId?: string;
|
|
24
|
+
reference?: string;
|
|
25
|
+
depth?: number;
|
|
26
|
+
data?: LogData;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Logger interface - the public API for logging
|
|
30
|
+
*/
|
|
31
|
+
export interface Logger {
|
|
32
|
+
error(message: string, data?: LogData): void;
|
|
33
|
+
warn(message: string, data?: LogData): void;
|
|
34
|
+
info(message: string, data?: LogData): void;
|
|
35
|
+
debug(message: string, data?: LogData): void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Configuration options loaded from hazo_logs_config.ini
|
|
39
|
+
*/
|
|
40
|
+
export interface HazoLogConfig {
|
|
41
|
+
log_directory: string;
|
|
42
|
+
log_level: LogLevel;
|
|
43
|
+
enable_console: boolean;
|
|
44
|
+
enable_file: boolean;
|
|
45
|
+
max_file_size: string;
|
|
46
|
+
max_files: string;
|
|
47
|
+
date_pattern: string;
|
|
48
|
+
enable_log_viewer: boolean;
|
|
49
|
+
log_viewer_page_size: number;
|
|
50
|
+
log_viewer_max_results: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Options for creating a package logger
|
|
54
|
+
*/
|
|
55
|
+
export interface PackageLoggerOptions {
|
|
56
|
+
packageName: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Log context for session and reference tracking
|
|
60
|
+
*/
|
|
61
|
+
export interface LogContext {
|
|
62
|
+
sessionId?: string;
|
|
63
|
+
reference?: string;
|
|
64
|
+
depth?: number;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,QAAQ,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IAErB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility to extract filename and line number from call stack
|
|
3
|
+
*/
|
|
4
|
+
export interface CallerInfo {
|
|
5
|
+
filename: string;
|
|
6
|
+
line: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Get the filename and line number of the caller
|
|
10
|
+
* Walks up the stack to find the actual calling code (not the logger internals)
|
|
11
|
+
*/
|
|
12
|
+
export declare function getCallerInfo(): CallerInfo;
|
|
13
|
+
//# sourceMappingURL=caller_info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caller_info.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/caller_info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,UAAU,CA+B1C"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility to extract filename and line number from call stack
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Get the filename and line number of the caller
|
|
6
|
+
* Walks up the stack to find the actual calling code (not the logger internals)
|
|
7
|
+
*/
|
|
8
|
+
export function getCallerInfo() {
|
|
9
|
+
const originalPrepareStackTrace = Error.prepareStackTrace;
|
|
10
|
+
try {
|
|
11
|
+
const err = new Error();
|
|
12
|
+
Error.prepareStackTrace = (_, stack) => stack;
|
|
13
|
+
const stack = err.stack;
|
|
14
|
+
Error.prepareStackTrace = originalPrepareStackTrace;
|
|
15
|
+
// Walk up the stack to find user code
|
|
16
|
+
for (let i = 0; i < stack.length; i++) {
|
|
17
|
+
const frame = stack[i];
|
|
18
|
+
const filename = frame.getFileName() || '';
|
|
19
|
+
// Skip if no filename
|
|
20
|
+
if (!filename)
|
|
21
|
+
continue;
|
|
22
|
+
// Skip frames that are part of the logger internals
|
|
23
|
+
if (isInternalFrame(filename))
|
|
24
|
+
continue;
|
|
25
|
+
// Found user code
|
|
26
|
+
return {
|
|
27
|
+
filename: extractFilename(filename),
|
|
28
|
+
line: frame.getLineNumber() || 0,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return { filename: 'unknown', line: 0 };
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return { filename: 'unknown', line: 0 };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if a filename is an internal frame that should be skipped
|
|
39
|
+
*/
|
|
40
|
+
function isInternalFrame(filename) {
|
|
41
|
+
const lowered = filename.toLowerCase();
|
|
42
|
+
// Skip node internals
|
|
43
|
+
if (lowered.startsWith('node:'))
|
|
44
|
+
return true;
|
|
45
|
+
// Skip node_modules (including hazo_logs when used as a package)
|
|
46
|
+
if (lowered.includes('node_modules'))
|
|
47
|
+
return true;
|
|
48
|
+
// Skip hazo_logs package source files (src/lib or dist/lib)
|
|
49
|
+
// Be specific to avoid skipping user files in directories that happen to contain "hazo_log"
|
|
50
|
+
if (lowered.includes('hazo_logs/src/lib') ||
|
|
51
|
+
lowered.includes('hazo_logs/dist/lib') ||
|
|
52
|
+
lowered.includes('hazo_logs\\src\\lib') ||
|
|
53
|
+
lowered.includes('hazo_logs\\dist\\lib')) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Extract just the filename from a full path
|
|
60
|
+
*/
|
|
61
|
+
function extractFilename(fullPath) {
|
|
62
|
+
const parts = fullPath.split(/[/\\]/);
|
|
63
|
+
return parts[parts.length - 1] || fullPath;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=caller_info.js.map
|