@johnboxcodes/boxlogger 0.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.
- package/CHANGELOG.md +23 -0
- package/LICENSE +21 -0
- package/README.md +248 -0
- package/dist/index.d.ts +607 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1147 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +180 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +389 -0
- package/dist/logger.js.map +1 -0
- package/dist/scope.d.ts +242 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +373 -0
- package/dist/scope.js.map +1 -0
- package/dist/stores/base.d.ts +127 -0
- package/dist/stores/base.d.ts.map +1 -0
- package/dist/stores/base.js +288 -0
- package/dist/stores/base.js.map +1 -0
- package/dist/stores/index.d.ts +12 -0
- package/dist/stores/index.d.ts.map +1 -0
- package/dist/stores/index.js +12 -0
- package/dist/stores/index.js.map +1 -0
- package/dist/stores/memory.d.ts +131 -0
- package/dist/stores/memory.d.ts.map +1 -0
- package/dist/stores/memory.js +284 -0
- package/dist/stores/memory.js.map +1 -0
- package/dist/stores/sqlite.d.ts +204 -0
- package/dist/stores/sqlite.d.ts.map +1 -0
- package/dist/stores/sqlite.js +608 -0
- package/dist/stores/sqlite.js.map +1 -0
- package/dist/types.d.ts +607 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Store Provider
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class providing common utilities for store implementations.
|
|
5
|
+
*
|
|
6
|
+
* @module stores/base
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import type { StoreProvider, StoreProviderConfig, LogEntry, Session, LogFilter, SessionFilter, StoreStats } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Default configuration values for store providers
|
|
12
|
+
*/
|
|
13
|
+
export declare const DEFAULT_STORE_CONFIG: Required<StoreProviderConfig>;
|
|
14
|
+
/**
|
|
15
|
+
* Abstract base class for store providers
|
|
16
|
+
*
|
|
17
|
+
* @remarks
|
|
18
|
+
* Provides common functionality like ID generation, timestamp handling,
|
|
19
|
+
* and filtering utilities. Extend this class to create new store providers.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* class MyStoreProvider extends BaseStoreProvider {
|
|
24
|
+
* readonly name = 'mystore';
|
|
25
|
+
*
|
|
26
|
+
* async init(): Promise<void> {
|
|
27
|
+
* // Initialize your store
|
|
28
|
+
* this._ready = true;
|
|
29
|
+
* }
|
|
30
|
+
* // ... implement other abstract methods
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare abstract class BaseStoreProvider implements StoreProvider {
|
|
35
|
+
abstract readonly name: string;
|
|
36
|
+
protected _ready: boolean;
|
|
37
|
+
protected config: Required<StoreProviderConfig>;
|
|
38
|
+
protected cleanupTimer?: ReturnType<typeof setInterval>;
|
|
39
|
+
constructor(config?: StoreProviderConfig);
|
|
40
|
+
/**
|
|
41
|
+
* Check if the provider is ready for operations
|
|
42
|
+
*/
|
|
43
|
+
isReady(): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Start automatic cleanup if configured
|
|
46
|
+
*/
|
|
47
|
+
protected startCleanupTimer(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Stop automatic cleanup
|
|
50
|
+
*/
|
|
51
|
+
protected stopCleanupTimer(): void;
|
|
52
|
+
abstract init(): Promise<void>;
|
|
53
|
+
abstract close(): Promise<void>;
|
|
54
|
+
abstract saveLog(entry: LogEntry): Promise<void>;
|
|
55
|
+
abstract getLogs(filter?: LogFilter): Promise<LogEntry[]>;
|
|
56
|
+
abstract deleteLogs(filter?: LogFilter): Promise<number>;
|
|
57
|
+
abstract countLogs(filter?: LogFilter): Promise<number>;
|
|
58
|
+
abstract createSession(session: Session): Promise<void>;
|
|
59
|
+
abstract updateSession(sessionId: string, updates: Partial<Session>): Promise<void>;
|
|
60
|
+
abstract getSession(sessionId: string): Promise<Session | null>;
|
|
61
|
+
abstract getSessions(filter?: SessionFilter): Promise<Session[]>;
|
|
62
|
+
abstract deleteSession(sessionId: string): Promise<void>;
|
|
63
|
+
abstract cleanup(olderThan: Date): Promise<number>;
|
|
64
|
+
abstract getStats(): Promise<StoreStats>;
|
|
65
|
+
/**
|
|
66
|
+
* Generate a UUID v4
|
|
67
|
+
* @returns UUID string
|
|
68
|
+
*/
|
|
69
|
+
protected generateId(): string;
|
|
70
|
+
/**
|
|
71
|
+
* Generate a short hex ID
|
|
72
|
+
* @param length - ID length (default 16)
|
|
73
|
+
* @returns Hex string ID
|
|
74
|
+
*/
|
|
75
|
+
protected generateShortId(length?: number): string;
|
|
76
|
+
/**
|
|
77
|
+
* Get current ISO 8601 timestamp
|
|
78
|
+
* @returns ISO timestamp string
|
|
79
|
+
*/
|
|
80
|
+
protected now(): string;
|
|
81
|
+
/**
|
|
82
|
+
* Parse a timestamp to Date
|
|
83
|
+
* @param timestamp - ISO string or Date
|
|
84
|
+
* @returns Date object
|
|
85
|
+
*/
|
|
86
|
+
protected parseTimestamp(timestamp: string | Date): Date;
|
|
87
|
+
/**
|
|
88
|
+
* Calculate duration between timestamps in milliseconds
|
|
89
|
+
* @param start - Start timestamp
|
|
90
|
+
* @param end - End timestamp
|
|
91
|
+
* @returns Duration in ms
|
|
92
|
+
*/
|
|
93
|
+
protected calculateDuration(start: string | Date, end: string | Date): number;
|
|
94
|
+
/**
|
|
95
|
+
* Filter log entries in memory
|
|
96
|
+
* @param logs - Log entries to filter
|
|
97
|
+
* @param filter - Filter criteria
|
|
98
|
+
* @returns Filtered entries
|
|
99
|
+
*/
|
|
100
|
+
protected filterLogs(logs: LogEntry[], filter: LogFilter): LogEntry[];
|
|
101
|
+
/**
|
|
102
|
+
* Sort log entries
|
|
103
|
+
* @param logs - Logs to sort
|
|
104
|
+
* @param orderBy - Sort field
|
|
105
|
+
* @param direction - Sort direction
|
|
106
|
+
* @returns Sorted logs
|
|
107
|
+
*/
|
|
108
|
+
private sortLogs;
|
|
109
|
+
/**
|
|
110
|
+
* Filter sessions in memory
|
|
111
|
+
* @param sessions - Sessions to filter
|
|
112
|
+
* @param filter - Filter criteria
|
|
113
|
+
* @returns Filtered sessions
|
|
114
|
+
*/
|
|
115
|
+
protected filterSessions(sessions: Session[], filter: SessionFilter): Session[];
|
|
116
|
+
/**
|
|
117
|
+
* Deep clone an object
|
|
118
|
+
* @param obj - Object to clone
|
|
119
|
+
* @returns Cloned object
|
|
120
|
+
*/
|
|
121
|
+
protected clone<T>(obj: T): T;
|
|
122
|
+
/**
|
|
123
|
+
* Ensure the store is ready, throw if not
|
|
124
|
+
*/
|
|
125
|
+
protected ensureReady(): void;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/stores/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Store Provider
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class providing common utilities for store implementations.
|
|
5
|
+
*
|
|
6
|
+
* @module stores/base
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { randomUUID } from 'node:crypto';
|
|
10
|
+
/**
|
|
11
|
+
* Default configuration values for store providers
|
|
12
|
+
*/
|
|
13
|
+
export const DEFAULT_STORE_CONFIG = {
|
|
14
|
+
maxLogs: 100000,
|
|
15
|
+
maxSessions: 10000,
|
|
16
|
+
cleanupInterval: 0,
|
|
17
|
+
retentionPeriod: 30 * 24 * 60 * 60 * 1000, // 30 days
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Log level numeric values for comparison
|
|
21
|
+
*/
|
|
22
|
+
const LEVEL_VALUES = {
|
|
23
|
+
fatal: 0,
|
|
24
|
+
error: 1,
|
|
25
|
+
warn: 2,
|
|
26
|
+
info: 3,
|
|
27
|
+
debug: 4,
|
|
28
|
+
trace: 5,
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Abstract base class for store providers
|
|
32
|
+
*
|
|
33
|
+
* @remarks
|
|
34
|
+
* Provides common functionality like ID generation, timestamp handling,
|
|
35
|
+
* and filtering utilities. Extend this class to create new store providers.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* class MyStoreProvider extends BaseStoreProvider {
|
|
40
|
+
* readonly name = 'mystore';
|
|
41
|
+
*
|
|
42
|
+
* async init(): Promise<void> {
|
|
43
|
+
* // Initialize your store
|
|
44
|
+
* this._ready = true;
|
|
45
|
+
* }
|
|
46
|
+
* // ... implement other abstract methods
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export class BaseStoreProvider {
|
|
51
|
+
_ready = false;
|
|
52
|
+
config;
|
|
53
|
+
cleanupTimer;
|
|
54
|
+
constructor(config) {
|
|
55
|
+
this.config = { ...DEFAULT_STORE_CONFIG, ...config };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if the provider is ready for operations
|
|
59
|
+
*/
|
|
60
|
+
isReady() {
|
|
61
|
+
return this._ready;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Start automatic cleanup if configured
|
|
65
|
+
*/
|
|
66
|
+
startCleanupTimer() {
|
|
67
|
+
if (this.config.cleanupInterval > 0) {
|
|
68
|
+
this.cleanupTimer = setInterval(async () => {
|
|
69
|
+
const cutoff = new Date(Date.now() - this.config.retentionPeriod);
|
|
70
|
+
await this.cleanup(cutoff);
|
|
71
|
+
}, this.config.cleanupInterval);
|
|
72
|
+
// Don't keep the process alive just for cleanup
|
|
73
|
+
if (this.cleanupTimer.unref) {
|
|
74
|
+
this.cleanupTimer.unref();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Stop automatic cleanup
|
|
80
|
+
*/
|
|
81
|
+
stopCleanupTimer() {
|
|
82
|
+
if (this.cleanupTimer) {
|
|
83
|
+
clearInterval(this.cleanupTimer);
|
|
84
|
+
this.cleanupTimer = undefined;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// =========================================================================
|
|
88
|
+
// ID Generation Utilities
|
|
89
|
+
// =========================================================================
|
|
90
|
+
/**
|
|
91
|
+
* Generate a UUID v4
|
|
92
|
+
* @returns UUID string
|
|
93
|
+
*/
|
|
94
|
+
generateId() {
|
|
95
|
+
return randomUUID();
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Generate a short hex ID
|
|
99
|
+
* @param length - ID length (default 16)
|
|
100
|
+
* @returns Hex string ID
|
|
101
|
+
*/
|
|
102
|
+
generateShortId(length = 16) {
|
|
103
|
+
const bytes = new Uint8Array(Math.ceil(length / 2));
|
|
104
|
+
crypto.getRandomValues(bytes);
|
|
105
|
+
return Array.from(bytes)
|
|
106
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
107
|
+
.join('')
|
|
108
|
+
.slice(0, length);
|
|
109
|
+
}
|
|
110
|
+
// =========================================================================
|
|
111
|
+
// Timestamp Utilities
|
|
112
|
+
// =========================================================================
|
|
113
|
+
/**
|
|
114
|
+
* Get current ISO 8601 timestamp
|
|
115
|
+
* @returns ISO timestamp string
|
|
116
|
+
*/
|
|
117
|
+
now() {
|
|
118
|
+
return new Date().toISOString();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Parse a timestamp to Date
|
|
122
|
+
* @param timestamp - ISO string or Date
|
|
123
|
+
* @returns Date object
|
|
124
|
+
*/
|
|
125
|
+
parseTimestamp(timestamp) {
|
|
126
|
+
return timestamp instanceof Date ? timestamp : new Date(timestamp);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Calculate duration between timestamps in milliseconds
|
|
130
|
+
* @param start - Start timestamp
|
|
131
|
+
* @param end - End timestamp
|
|
132
|
+
* @returns Duration in ms
|
|
133
|
+
*/
|
|
134
|
+
calculateDuration(start, end) {
|
|
135
|
+
return this.parseTimestamp(end).getTime() - this.parseTimestamp(start).getTime();
|
|
136
|
+
}
|
|
137
|
+
// =========================================================================
|
|
138
|
+
// Filtering Utilities (for in-memory filtering)
|
|
139
|
+
// =========================================================================
|
|
140
|
+
/**
|
|
141
|
+
* Filter log entries in memory
|
|
142
|
+
* @param logs - Log entries to filter
|
|
143
|
+
* @param filter - Filter criteria
|
|
144
|
+
* @returns Filtered entries
|
|
145
|
+
*/
|
|
146
|
+
filterLogs(logs, filter) {
|
|
147
|
+
let result = [...logs];
|
|
148
|
+
// Filter by level
|
|
149
|
+
if (filter.level) {
|
|
150
|
+
const levels = Array.isArray(filter.level) ? filter.level : [filter.level];
|
|
151
|
+
result = result.filter((log) => levels.includes(log.level));
|
|
152
|
+
}
|
|
153
|
+
// Filter by session
|
|
154
|
+
if (filter.sessionId) {
|
|
155
|
+
result = result.filter((log) => log.sessionId === filter.sessionId);
|
|
156
|
+
}
|
|
157
|
+
// Filter by logger name
|
|
158
|
+
if (filter.logger) {
|
|
159
|
+
result = result.filter((log) => log.logger === filter.logger);
|
|
160
|
+
}
|
|
161
|
+
// Filter by time range
|
|
162
|
+
if (filter.startTime) {
|
|
163
|
+
const start = this.parseTimestamp(filter.startTime);
|
|
164
|
+
result = result.filter((log) => this.parseTimestamp(log.timestamp) >= start);
|
|
165
|
+
}
|
|
166
|
+
if (filter.endTime) {
|
|
167
|
+
const end = this.parseTimestamp(filter.endTime);
|
|
168
|
+
result = result.filter((log) => this.parseTimestamp(log.timestamp) <= end);
|
|
169
|
+
}
|
|
170
|
+
// Filter by search text
|
|
171
|
+
if (filter.search) {
|
|
172
|
+
const searchLower = filter.search.toLowerCase();
|
|
173
|
+
result = result.filter((log) => log.message.toLowerCase().includes(searchLower) ||
|
|
174
|
+
log.metadata?.error?.message?.toLowerCase().includes(searchLower));
|
|
175
|
+
}
|
|
176
|
+
// Filter by tags
|
|
177
|
+
if (filter.tags && Object.keys(filter.tags).length > 0) {
|
|
178
|
+
result = result.filter((log) => {
|
|
179
|
+
if (!log.metadata?.tags)
|
|
180
|
+
return false;
|
|
181
|
+
return Object.entries(filter.tags).every(([key, value]) => log.metadata?.tags?.[key] === value);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
// Filter by trace ID
|
|
185
|
+
if (filter.traceId) {
|
|
186
|
+
result = result.filter((log) => log.metadata?.traceId === filter.traceId);
|
|
187
|
+
}
|
|
188
|
+
// Filter by service
|
|
189
|
+
if (filter.service) {
|
|
190
|
+
result = result.filter((log) => log.service === filter.service);
|
|
191
|
+
}
|
|
192
|
+
// Filter by environment
|
|
193
|
+
if (filter.environment) {
|
|
194
|
+
result = result.filter((log) => log.environment === filter.environment);
|
|
195
|
+
}
|
|
196
|
+
// Sort
|
|
197
|
+
const orderBy = filter.orderBy || 'timestamp';
|
|
198
|
+
const direction = filter.orderDirection || 'desc';
|
|
199
|
+
result = this.sortLogs(result, orderBy, direction);
|
|
200
|
+
// Pagination
|
|
201
|
+
if (filter.offset) {
|
|
202
|
+
result = result.slice(filter.offset);
|
|
203
|
+
}
|
|
204
|
+
if (filter.limit) {
|
|
205
|
+
result = result.slice(0, filter.limit);
|
|
206
|
+
}
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Sort log entries
|
|
211
|
+
* @param logs - Logs to sort
|
|
212
|
+
* @param orderBy - Sort field
|
|
213
|
+
* @param direction - Sort direction
|
|
214
|
+
* @returns Sorted logs
|
|
215
|
+
*/
|
|
216
|
+
sortLogs(logs, orderBy, direction) {
|
|
217
|
+
return logs.sort((a, b) => {
|
|
218
|
+
let comparison;
|
|
219
|
+
if (orderBy === 'level') {
|
|
220
|
+
comparison = LEVEL_VALUES[a.level] - LEVEL_VALUES[b.level];
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
comparison =
|
|
224
|
+
this.parseTimestamp(a.timestamp).getTime() -
|
|
225
|
+
this.parseTimestamp(b.timestamp).getTime();
|
|
226
|
+
}
|
|
227
|
+
return direction === 'desc' ? -comparison : comparison;
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Filter sessions in memory
|
|
232
|
+
* @param sessions - Sessions to filter
|
|
233
|
+
* @param filter - Filter criteria
|
|
234
|
+
* @returns Filtered sessions
|
|
235
|
+
*/
|
|
236
|
+
filterSessions(sessions, filter) {
|
|
237
|
+
let result = [...sessions];
|
|
238
|
+
// Filter by status
|
|
239
|
+
if (filter.status) {
|
|
240
|
+
const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];
|
|
241
|
+
result = result.filter((s) => statuses.includes(s.status));
|
|
242
|
+
}
|
|
243
|
+
// Filter by user ID
|
|
244
|
+
if (filter.userId !== undefined) {
|
|
245
|
+
result = result.filter((s) => s.user?.id === filter.userId);
|
|
246
|
+
}
|
|
247
|
+
// Filter by time range
|
|
248
|
+
if (filter.startTime) {
|
|
249
|
+
const start = this.parseTimestamp(filter.startTime);
|
|
250
|
+
result = result.filter((s) => this.parseTimestamp(s.startedAt) >= start);
|
|
251
|
+
}
|
|
252
|
+
if (filter.endTime) {
|
|
253
|
+
const end = this.parseTimestamp(filter.endTime);
|
|
254
|
+
result = result.filter((s) => this.parseTimestamp(s.startedAt) <= end);
|
|
255
|
+
}
|
|
256
|
+
// Sort by startedAt descending
|
|
257
|
+
result.sort((a, b) => this.parseTimestamp(b.startedAt).getTime() -
|
|
258
|
+
this.parseTimestamp(a.startedAt).getTime());
|
|
259
|
+
// Pagination
|
|
260
|
+
if (filter.offset) {
|
|
261
|
+
result = result.slice(filter.offset);
|
|
262
|
+
}
|
|
263
|
+
if (filter.limit) {
|
|
264
|
+
result = result.slice(0, filter.limit);
|
|
265
|
+
}
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
268
|
+
// =========================================================================
|
|
269
|
+
// Utility Methods
|
|
270
|
+
// =========================================================================
|
|
271
|
+
/**
|
|
272
|
+
* Deep clone an object
|
|
273
|
+
* @param obj - Object to clone
|
|
274
|
+
* @returns Cloned object
|
|
275
|
+
*/
|
|
276
|
+
clone(obj) {
|
|
277
|
+
return JSON.parse(JSON.stringify(obj));
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Ensure the store is ready, throw if not
|
|
281
|
+
*/
|
|
282
|
+
ensureReady() {
|
|
283
|
+
if (!this._ready) {
|
|
284
|
+
throw new Error(`${this.name} store is not initialized. Call init() first.`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/stores/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store Providers
|
|
3
|
+
*
|
|
4
|
+
* Export all available store provider implementations.
|
|
5
|
+
*
|
|
6
|
+
* @module stores
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
export { BaseStoreProvider, DEFAULT_STORE_CONFIG } from './base.js';
|
|
10
|
+
export { MemoryStoreProvider, type MemoryStoreConfig } from './memory.js';
|
|
11
|
+
export { SQLiteStoreProvider, type SQLiteStoreConfig } from './sqlite.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store Providers
|
|
3
|
+
*
|
|
4
|
+
* Export all available store provider implementations.
|
|
5
|
+
*
|
|
6
|
+
* @module stores
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
export { BaseStoreProvider, DEFAULT_STORE_CONFIG } from './base.js';
|
|
10
|
+
export { MemoryStoreProvider } from './memory.js';
|
|
11
|
+
export { SQLiteStoreProvider } from './sqlite.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAA0B,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAA0B,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Store Provider
|
|
3
|
+
*
|
|
4
|
+
* In-memory storage implementation for development, testing, or ephemeral logging.
|
|
5
|
+
*
|
|
6
|
+
* @module stores/memory
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { BaseStoreProvider } from './base.js';
|
|
10
|
+
import type { StoreProviderConfig, LogEntry, Session, LogFilter, SessionFilter, StoreStats } from '../types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Configuration options for the memory store
|
|
13
|
+
*/
|
|
14
|
+
export interface MemoryStoreConfig extends StoreProviderConfig {
|
|
15
|
+
/** Maximum log entries to retain (default: 10000) */
|
|
16
|
+
maxLogs?: number;
|
|
17
|
+
/** Maximum sessions to retain (default: 1000) */
|
|
18
|
+
maxSessions?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* In-memory store provider
|
|
22
|
+
*
|
|
23
|
+
* @remarks
|
|
24
|
+
* Fast read/write operations with no persistence.
|
|
25
|
+
* Data is lost when the process exits.
|
|
26
|
+
* Ideal for testing, development, or caching scenarios.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* import { MemoryStoreProvider } from '@nodelogger/core/memory';
|
|
31
|
+
*
|
|
32
|
+
* const store = new MemoryStoreProvider({ maxLogs: 5000 });
|
|
33
|
+
* await store.init();
|
|
34
|
+
*
|
|
35
|
+
* await store.saveLog({
|
|
36
|
+
* id: '1',
|
|
37
|
+
* timestamp: new Date().toISOString(),
|
|
38
|
+
* level: 'info',
|
|
39
|
+
* message: 'Hello world'
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare class MemoryStoreProvider extends BaseStoreProvider {
|
|
44
|
+
readonly name = "memory";
|
|
45
|
+
private logs;
|
|
46
|
+
private sessions;
|
|
47
|
+
constructor(config?: MemoryStoreConfig);
|
|
48
|
+
/**
|
|
49
|
+
* Initialize the memory store
|
|
50
|
+
*/
|
|
51
|
+
init(): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Close the memory store and clear all data
|
|
54
|
+
*/
|
|
55
|
+
close(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Save a log entry to memory
|
|
58
|
+
* @param entry - Log entry to save
|
|
59
|
+
*/
|
|
60
|
+
saveLog(entry: LogEntry): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Get log entries matching filter
|
|
63
|
+
* @param filter - Query filter
|
|
64
|
+
* @returns Matching log entries
|
|
65
|
+
*/
|
|
66
|
+
getLogs(filter?: LogFilter): Promise<LogEntry[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Delete log entries matching filter
|
|
69
|
+
* @param filter - Query filter
|
|
70
|
+
* @returns Number of deleted entries
|
|
71
|
+
*/
|
|
72
|
+
deleteLogs(filter?: LogFilter): Promise<number>;
|
|
73
|
+
/**
|
|
74
|
+
* Count log entries matching filter
|
|
75
|
+
* @param filter - Query filter
|
|
76
|
+
* @returns Count of matching entries
|
|
77
|
+
*/
|
|
78
|
+
countLogs(filter?: LogFilter): Promise<number>;
|
|
79
|
+
/**
|
|
80
|
+
* Create a new session
|
|
81
|
+
* @param session - Session to create
|
|
82
|
+
*/
|
|
83
|
+
createSession(session: Session): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Update an existing session
|
|
86
|
+
* @param sessionId - Session ID
|
|
87
|
+
* @param updates - Partial session data
|
|
88
|
+
*/
|
|
89
|
+
updateSession(sessionId: string, updates: Partial<Session>): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Get a session by ID
|
|
92
|
+
* @param sessionId - Session ID
|
|
93
|
+
* @returns Session or null
|
|
94
|
+
*/
|
|
95
|
+
getSession(sessionId: string): Promise<Session | null>;
|
|
96
|
+
/**
|
|
97
|
+
* Get sessions matching filter
|
|
98
|
+
* @param filter - Query filter
|
|
99
|
+
* @returns Matching sessions
|
|
100
|
+
*/
|
|
101
|
+
getSessions(filter?: SessionFilter): Promise<Session[]>;
|
|
102
|
+
/**
|
|
103
|
+
* Delete a session and its associated logs
|
|
104
|
+
* @param sessionId - Session ID
|
|
105
|
+
*/
|
|
106
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Clean up old data
|
|
109
|
+
* @param olderThan - Delete entries older than this date
|
|
110
|
+
* @returns Number of deleted entries
|
|
111
|
+
*/
|
|
112
|
+
cleanup(olderThan: Date): Promise<number>;
|
|
113
|
+
/**
|
|
114
|
+
* Get storage statistics
|
|
115
|
+
* @returns Storage stats
|
|
116
|
+
*/
|
|
117
|
+
getStats(): Promise<StoreStats>;
|
|
118
|
+
/**
|
|
119
|
+
* Clear all data from the store
|
|
120
|
+
*/
|
|
121
|
+
clear(): Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* Get raw storage arrays (for debugging)
|
|
124
|
+
* @returns Internal storage references
|
|
125
|
+
*/
|
|
126
|
+
getRawData(): {
|
|
127
|
+
logs: LogEntry[];
|
|
128
|
+
sessions: Map<string, Session>;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/stores/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EACV,mBAAmB,EACnB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,aAAa,EACb,UAAU,EAEX,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,IAAI,YAAY;IAEzB,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;gBAEvC,MAAM,CAAC,EAAE,iBAAiB;IAQtC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB7C;;;;OAIG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAUtD;;;;OAIG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAerD;;;;OAIG;IACG,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAcpD;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BpD;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAehF;;;;OAIG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAO5D;;;;OAIG;IACG,WAAW,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAkB7D;;;OAGG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD;;;;OAIG;IACG,OAAO,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IA4B/C;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IA4CrC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;;OAGG;IACH,UAAU,IAAI;QAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;CAMnE"}
|