@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.
@@ -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"}