@ooneex/logger 0.11.0 → 0.13.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.js CHANGED
@@ -1,5 +1,70 @@
1
1
  // @bun
2
- import{container as E,EContainerScope as q}from"@ooneex/container";var f={logger:(y=q.Singleton)=>{return(S)=>{E.add(S,y)}}};import{DatabaseException as D}from"@ooneex/database";class K{client;options;constructor(y){let S=y?.filename||Bun.env.LOGS_DATABASE_PATH||"";if(!S)throw new D("No database filename provided. Please set LOGS_DATABASE_PATH environment variable or provide a filename in the options.");this.options={filename:S,readonly:!1,create:!0,readwrite:!0,strict:!0,safeIntegers:!1,...y,adapter:"sqlite"}}getClient(){if(!this.client)try{this.client=new Bun.SQL(this.options)}catch(y){throw new D(y.message)}return this.client}async open(){this.getClient()}async createTable(){let y=this.getClient();try{await y`PRAGMA foreign_keys = ON`,await y`PRAGMA journal_mode = WAL`,await y`PRAGMA integrity_check`,await y`
2
+ var __legacyDecorateClassTS = function(decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
5
+ r = Reflect.decorate(decorators, target, key, desc);
6
+ else
7
+ for (var i = decorators.length - 1;i >= 0; i--)
8
+ if (d = decorators[i])
9
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
10
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
11
+ };
12
+ var __legacyMetadataTS = (k, v) => {
13
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
14
+ return Reflect.metadata(k, v);
15
+ };
16
+
17
+ // src/decorators.ts
18
+ import { container, EContainerScope } from "@ooneex/container";
19
+ var decorator = {
20
+ logger: (scope = EContainerScope.Singleton) => {
21
+ return (target) => {
22
+ container.add(target, scope);
23
+ };
24
+ }
25
+ };
26
+ // src/LogsDatabase.ts
27
+ import { DatabaseException } from "@ooneex/database";
28
+
29
+ class LogsDatabase {
30
+ client;
31
+ options;
32
+ constructor(options) {
33
+ const fileName = options?.filename || Bun.env.LOGS_DATABASE_PATH || "";
34
+ if (!fileName) {
35
+ throw new DatabaseException("No database filename provided. Please set LOGS_DATABASE_PATH environment variable or provide a filename in the options.");
36
+ }
37
+ this.options = {
38
+ filename: fileName,
39
+ readonly: false,
40
+ create: true,
41
+ readwrite: true,
42
+ strict: true,
43
+ safeIntegers: false,
44
+ ...options,
45
+ adapter: "sqlite"
46
+ };
47
+ }
48
+ getClient() {
49
+ if (!this.client) {
50
+ try {
51
+ this.client = new Bun.SQL(this.options);
52
+ } catch (error) {
53
+ throw new DatabaseException(error.message);
54
+ }
55
+ }
56
+ return this.client;
57
+ }
58
+ async open() {
59
+ this.getClient();
60
+ }
61
+ async createTable() {
62
+ const sql = this.getClient();
63
+ try {
64
+ await sql`PRAGMA foreign_keys = ON`;
65
+ await sql`PRAGMA journal_mode = WAL`;
66
+ await sql`PRAGMA integrity_check`;
67
+ await sql`
3
68
  CREATE TABLE IF NOT EXISTS logs (
4
69
  id TEXT PRIMARY KEY,
5
70
  level TEXT NOT NULL,
@@ -27,34 +92,508 @@ import{container as E,EContainerScope as q}from"@ooneex/container";var f={logger
27
92
  domain TEXT,
28
93
  hostname TEXT
29
94
  )
30
- `,await y`CREATE INDEX IF NOT EXISTS idx_logs_level ON logs(level)`,await y`CREATE INDEX IF NOT EXISTS idx_logs_user_id ON logs(userId)`}catch(S){throw new D("Failed to open log database connection")}}async dropTable(){let y=this.getClient();try{await y`DROP TABLE IF EXISTS logs`}catch(S){throw new D("Failed to drop log tables")}}async close(){try{await this.client?.close(),this.client=void 0}catch(y){throw new D("Failed to close log database connection")}}async drop(){}}class X{id;level;message;date=new Date;userId;email;lastName;firstName;status;exceptionName;stackTrace;ip;method;path;userAgent;referer;params;payload;queries}import{deserialize as N,serialize as Y}from"bun:jsc";import{random as z}from"@ooneex/utils";var{sql:U}=globalThis.Bun;class Z{db;constructor(y){this.db=y}async create(y){let S=this.db.getClient(),T={...y,id:z.nanoid(15),date:y.date.toISOString(),stackTrace:y.stackTrace?Y(y.stackTrace):null,params:y.params?Y(y.params):null,payload:y.payload?Y(y.payload):null,queries:y.queries?Y(y.queries):null},[O]=await S`
31
- INSERT INTO logs ${U(T)}
95
+ `;
96
+ await sql`CREATE INDEX IF NOT EXISTS idx_logs_level ON logs(level)`;
97
+ await sql`CREATE INDEX IF NOT EXISTS idx_logs_user_id ON logs(userId)`;
98
+ } catch (_e) {
99
+ throw new DatabaseException("Failed to open log database connection");
100
+ }
101
+ }
102
+ async dropTable() {
103
+ const sql = this.getClient();
104
+ try {
105
+ await sql`DROP TABLE IF EXISTS logs`;
106
+ } catch (_e) {
107
+ throw new DatabaseException("Failed to drop log tables");
108
+ }
109
+ }
110
+ async close() {
111
+ try {
112
+ await this.client?.close();
113
+ this.client = undefined;
114
+ } catch (_e) {
115
+ throw new DatabaseException("Failed to close log database connection");
116
+ }
117
+ }
118
+ async drop() {}
119
+ }
120
+ // src/LogsEntity.ts
121
+ class LogsEntity {
122
+ id;
123
+ level;
124
+ message;
125
+ date = new Date;
126
+ userId;
127
+ email;
128
+ lastName;
129
+ firstName;
130
+ status;
131
+ exceptionName;
132
+ stackTrace;
133
+ ip;
134
+ method;
135
+ path;
136
+ userAgent;
137
+ referer;
138
+ params;
139
+ payload;
140
+ queries;
141
+ }
142
+ // src/LogsRepository.ts
143
+ import { deserialize, serialize } from "bun:jsc";
144
+ import { random } from "@ooneex/utils";
145
+ var {sql } = globalThis.Bun;
146
+
147
+ class LogsRepository {
148
+ db;
149
+ constructor(db) {
150
+ this.db = db;
151
+ }
152
+ async create(log) {
153
+ const client = this.db.getClient();
154
+ const data = {
155
+ ...log,
156
+ id: random.nanoid(15),
157
+ date: log.date.toISOString(),
158
+ stackTrace: log.stackTrace ? serialize(log.stackTrace) : null,
159
+ params: log.params ? serialize(log.params) : null,
160
+ payload: log.payload ? serialize(log.payload) : null,
161
+ queries: log.queries ? serialize(log.queries) : null
162
+ };
163
+ const [newLog] = await client`
164
+ INSERT INTO logs ${sql(data)}
32
165
  RETURNING *
33
- `;return await this.db.close(),O}async find(y){let S=this.db.getClient(),[T]=await S`
166
+ `;
167
+ await this.db.close();
168
+ return newLog;
169
+ }
170
+ async find(id) {
171
+ const client = this.db.getClient();
172
+ const [log] = await client`
34
173
  SELECT * FROM logs
35
- WHERE id = ${y}
174
+ WHERE id = ${id}
36
175
  LIMIT 1
37
- `;if(!T)return await this.db.close(),null;let O={...T,date:new Date(T.date),stackTrace:T.stackTrace?N(T.stackTrace):void 0,params:T.params?N(T.params):void 0,payload:T.payload?N(T.payload):void 0,queries:T.queries?N(T.queries):void 0};return await this.db.close(),O}async findBy(y){let S=this.db.getClient(),T=[];if(y.level!==void 0)T.push(U`level = ${y.level}`);if(y.userId!==void 0)T.push(U`userId = ${y.userId}`);if(y.email!==void 0)T.push(U`email = ${y.email}`);if(y.lastName!==void 0)T.push(U`lastName = ${y.lastName}`);if(y.firstName!==void 0)T.push(U`firstName = ${y.firstName}`);if(y.status!==void 0)T.push(U`status = ${y.status}`);if(y.exceptionName!==void 0)T.push(U`exceptionName = ${y.exceptionName}`);if(y.method!==void 0)T.push(U`method = ${y.method}`);if(y.path!==void 0)T.push(U`path = ${y.path}`);let O=y.limit||100,R=y.page||1,L=(R-1)*O;if(T.length===0){let[P]=await S`SELECT COUNT(*) as total FROM logs`,Q=(await S`
176
+ `;
177
+ if (!log) {
178
+ await this.db.close();
179
+ return null;
180
+ }
181
+ const result = {
182
+ ...log,
183
+ date: new Date(log.date),
184
+ stackTrace: log.stackTrace ? deserialize(log.stackTrace) : undefined,
185
+ params: log.params ? deserialize(log.params) : undefined,
186
+ payload: log.payload ? deserialize(log.payload) : undefined,
187
+ queries: log.queries ? deserialize(log.queries) : undefined
188
+ };
189
+ await this.db.close();
190
+ return result;
191
+ }
192
+ async findBy(criteria) {
193
+ const client = this.db.getClient();
194
+ const whereConditions = [];
195
+ if (criteria.level !== undefined) {
196
+ whereConditions.push(sql`level = ${criteria.level}`);
197
+ }
198
+ if (criteria.userId !== undefined) {
199
+ whereConditions.push(sql`userId = ${criteria.userId}`);
200
+ }
201
+ if (criteria.email !== undefined) {
202
+ whereConditions.push(sql`email = ${criteria.email}`);
203
+ }
204
+ if (criteria.lastName !== undefined) {
205
+ whereConditions.push(sql`lastName = ${criteria.lastName}`);
206
+ }
207
+ if (criteria.firstName !== undefined) {
208
+ whereConditions.push(sql`firstName = ${criteria.firstName}`);
209
+ }
210
+ if (criteria.status !== undefined) {
211
+ whereConditions.push(sql`status = ${criteria.status}`);
212
+ }
213
+ if (criteria.exceptionName !== undefined) {
214
+ whereConditions.push(sql`exceptionName = ${criteria.exceptionName}`);
215
+ }
216
+ if (criteria.method !== undefined) {
217
+ whereConditions.push(sql`method = ${criteria.method}`);
218
+ }
219
+ if (criteria.path !== undefined) {
220
+ whereConditions.push(sql`path = ${criteria.path}`);
221
+ }
222
+ const limit = criteria.limit || 100;
223
+ const page = criteria.page || 1;
224
+ const offset = (page - 1) * limit;
225
+ if (whereConditions.length === 0) {
226
+ const [countResult2] = await client`SELECT COUNT(*) as total FROM logs`;
227
+ const logs2 = await client`
38
228
  SELECT * FROM logs
39
229
  ORDER BY date DESC
40
- LIMIT ${O}
41
- OFFSET ${L}
42
- `).map((I)=>({...I,date:new Date(I.date),stackTrace:I.stackTrace?N(I.stackTrace):void 0,params:I.params?N(I.params):void 0,payload:I.payload?N(I.payload):void 0,queries:I.queries?N(I.queries):void 0})),$=P.total,V=Math.ceil($/O),J={logs:Q,total:$,page:R,limit:O,totalPages:V};return await this.db.close(),J}let F=T.reduce((P,x,Q)=>{if(Q===0)return x;return U`${P} AND ${x}`}),[_]=await S`
230
+ LIMIT ${limit}
231
+ OFFSET ${offset}
232
+ `;
233
+ const transformedLogs2 = logs2.map((log) => ({
234
+ ...log,
235
+ date: new Date(log.date),
236
+ stackTrace: log.stackTrace ? deserialize(log.stackTrace) : undefined,
237
+ params: log.params ? deserialize(log.params) : undefined,
238
+ payload: log.payload ? deserialize(log.payload) : undefined,
239
+ queries: log.queries ? deserialize(log.queries) : undefined
240
+ }));
241
+ const total2 = countResult2.total;
242
+ const totalPages2 = Math.ceil(total2 / limit);
243
+ const result2 = {
244
+ logs: transformedLogs2,
245
+ total: total2,
246
+ page,
247
+ limit,
248
+ totalPages: totalPages2
249
+ };
250
+ await this.db.close();
251
+ return result2;
252
+ }
253
+ const whereClause = whereConditions.reduce((acc, condition, index) => {
254
+ if (index === 0) {
255
+ return condition;
256
+ }
257
+ return sql`${acc} AND ${condition}`;
258
+ });
259
+ const [countResult] = await client`
43
260
  SELECT COUNT(*) as total
44
261
  FROM logs
45
- WHERE ${F}
46
- `,j=(await S`
262
+ WHERE ${whereClause}
263
+ `;
264
+ const logs = await client`
47
265
  SELECT * FROM logs
48
- WHERE ${F}
266
+ WHERE ${whereClause}
49
267
  ORDER BY date DESC
50
- LIMIT ${O}
51
- OFFSET ${L}
52
- `).map((P)=>({...P,date:new Date(P.date),params:P.params?N(P.params):void 0,payload:P.payload?N(P.payload):void 0,queries:P.queries?N(P.queries):void 0})),G=_.total,H=Math.ceil(G/O),A={logs:j,total:G,page:R,limit:O,totalPages:H};return await this.db.close(),A}}class C{db;repository;constructor(y){this.db=new K(y),this.repository=new Z(this.db)}async init(){await this.db.open(),await this.db.createTable()}error(y,S){if(typeof y==="string")this.writeLog("ERROR",{message:y,...S&&{data:S}});else this.writeLog("ERROR",{exception:y})}warn(y,S){this.writeLog("WARN",{message:y,...S&&{data:S}})}info(y,S){this.writeLog("INFO",{message:y,...S&&{data:S}})}debug(y,S){this.writeLog("DEBUG",{message:y,...S&&{data:S}})}log(y,S){this.writeLog("LOG",{message:y,...S&&{data:S}})}success(y,S){this.writeLog("SUCCESS",{message:y,...S&&{data:S}})}writeLog(y,S){let{message:T,data:O,exception:R}=S||{},L=new X;if(L.level=y,T)L.message=T;else if(R?.message)L.message=R.message;if(L.date=R?.date||new Date,O?.userId!==void 0)L.userId=O.userId;if(O?.email!==void 0)L.email=O.email;if(O?.lastName!==void 0)L.lastName=O.lastName;if(O?.firstName!==void 0)L.firstName=O.firstName;if(R?.status!==void 0)L.status=R.status;else if(O?.status!==void 0)L.status=O.status;if(R?.name!==void 0)L.exceptionName=R.name;let F=R?.stackToJson();if(F!==void 0&&F!==null)L.stackTrace=F;if(O?.ip!==void 0)L.ip=O.ip;if(O?.method!==void 0)L.method=O.method;if(O?.path!==void 0)L.path=O.path;if(O?.userAgent!==void 0)L.userAgent=O.userAgent;if(O?.referer!==void 0)L.referer=O.referer;if(O?.params!==void 0)L.params=O.params;if(O?.payload!==void 0)L.payload=O.payload;if(O?.queries!==void 0)L.queries=O.queries;this.repository.create(L)}}class k{colorizeText(y,S){let T=Bun.color(S,"ansi"),O="\x1B[0m";return T?`${T}${y}\x1B[0m`:y}getLevelColor(y){return{ERROR:"#FF3B30",WARN:"#FFCC00",INFO:"#007AFF",DEBUG:"#8E8E93",LOG:"#8E8E93",SUCCESS:"#00C851"}[y.toUpperCase()]||"white"}getLevelSymbol(y){return{ERROR:"\u2716",WARN:"\u26A0",INFO:"\u2139",DEBUG:"\u2699",LOG:"\u25CF",SUCCESS:"\u2714"}[y.toUpperCase()]||"\u25CF"}writeToConsole(y){let{level:S,message:T,date:O,data:R,stackTrace:L,showArrow:F=!0,showTimestamp:_=!0,showLevel:h=!0,useSymbol:j=!1}=y,G=S.endsWith("Exception")?"ERROR":S,H=this.getLevelColor(G),A=O||new Date,P=`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}-${String(A.getDate()).padStart(2,"0")} ${String(A.getHours()).padStart(2,"0")}:${String(A.getMinutes()).padStart(2,"0")}:${String(A.getSeconds()).padStart(2,"0")}`,x=_?`${this.colorizeText(P,"#B2BEB5")} `:"",Q=F?`${this.colorizeText("->",H)} `:"",$=j?this.getLevelSymbol(G):`[${S}]`,V=h?`${this.colorizeText($,H)} `:"",J=this.colorizeText(T,H),I=`${Q}${x}${V}${J}`;if(R&&Object.keys(R).length>0){let b=Object.entries(R).filter(([B])=>B!=="stackTrace").map(([B,W])=>{let M=typeof W==="string"?"#69E502":typeof W==="number"?"#FFE809":"#D3D3D3",u=this.colorizeText(String(W),M);return`${this.colorizeText(B,"#79B")}: ${u}`});if(b.length>0){let B=b.join(`
53
- `);I+=`
54
- ${B}`}}if(L&&Array.isArray(L)&&L.length>0){let b=this.colorizeText("Stack Trace:","#FF6B6B");I+=`
55
- ${b}`,L.forEach((B,W)=>{let M=this.colorizeText(` ${W+1}.`,"#B2BEB5"),u=B.functionName?this.colorizeText(B.functionName,"#FFD93D"):this.colorizeText("<anonymous>","#8E8E93"),v=B.fileName?this.colorizeText(B.fileName,"#6BCF7F"):"",w=B.lineNumber?this.colorizeText(`:${B.lineNumber}${B.columnNumber?`:${B.columnNumber}`:""}`,"#B2BEB5"):"";if(I+=`
56
- ${M} ${u}`,v)I+=`
57
- at ${v}${w}`})}if(I+=`
58
- `,S==="FATAL"||S==="ERROR")process.stderr.write(`${I}`);else process.stdout.write(`${I}`)}async init(){}error(y,S,T){if(typeof y==="string")this.writeToConsole({level:"ERROR",message:y,...S&&{data:S},...T?.showArrow!==void 0&&{showArrow:T.showArrow},...T?.showTimestamp!==void 0&&{showTimestamp:T.showTimestamp},...T?.showLevel!==void 0&&{showLevel:T.showLevel},...T?.useSymbol!==void 0&&{useSymbol:T.useSymbol}});else{let O={...y.data,...S};if(y.status)O.status=y.status;let R=y.stackToJson();this.writeToConsole({level:y.name,message:y.message,data:O,...R&&{stackTrace:R},date:y.date,...T?.showArrow!==void 0&&{showArrow:T.showArrow},...T?.showTimestamp!==void 0&&{showTimestamp:T.showTimestamp},...T?.showLevel!==void 0&&{showLevel:T.showLevel},...T?.useSymbol!==void 0&&{useSymbol:T.useSymbol}})}}warn(y,S,T){this.writeToConsole({level:"WARN",message:y,...S&&{data:S},...T?.showArrow!==void 0&&{showArrow:T.showArrow},...T?.showTimestamp!==void 0&&{showTimestamp:T.showTimestamp},...T?.showLevel!==void 0&&{showLevel:T.showLevel},...T?.useSymbol!==void 0&&{useSymbol:T.useSymbol}})}info(y,S,T){this.writeToConsole({level:"INFO",message:y,...S&&{data:S},...T?.showArrow!==void 0&&{showArrow:T.showArrow},...T?.showTimestamp!==void 0&&{showTimestamp:T.showTimestamp},...T?.showLevel!==void 0&&{showLevel:T.showLevel},...T?.useSymbol!==void 0&&{useSymbol:T.useSymbol}})}debug(y,S,T){this.writeToConsole({level:"DEBUG",message:y,...S&&{data:S},...T?.showArrow!==void 0&&{showArrow:T.showArrow},...T?.showTimestamp!==void 0&&{showTimestamp:T.showTimestamp},...T?.showLevel!==void 0&&{showLevel:T.showLevel},...T?.useSymbol!==void 0&&{useSymbol:T.useSymbol}})}log(y,S,T){this.writeToConsole({level:"LOG",message:y,...S&&{data:S},...T?.showArrow!==void 0&&{showArrow:T.showArrow},...T?.showTimestamp!==void 0&&{showTimestamp:T.showTimestamp},...T?.showLevel!==void 0&&{showLevel:T.showLevel},...T?.useSymbol!==void 0&&{useSymbol:T.useSymbol}})}success(y,S,T){this.writeToConsole({level:"SUCCESS",message:y,...S&&{data:S},...T?.showArrow!==void 0&&{showArrow:T.showArrow},...T?.showTimestamp!==void 0&&{showTimestamp:T.showTimestamp},...T?.showLevel!==void 0&&{showLevel:T.showLevel},...T?.useSymbol!==void 0&&{useSymbol:T.useSymbol}})}}var m;((F)=>{F.ERROR="ERROR";F.WARN="WARN";F.INFO="INFO";F.DEBUG="DEBUG";F.LOG="LOG";F.SUCCESS="SUCCESS"})(m||={});export{f as decorator,k as TerminalLogger,C as SqliteLogger,Z as LogsRepository,X as LogsEntity,K as LogsDatabase,m as ELogLevel};
268
+ LIMIT ${limit}
269
+ OFFSET ${offset}
270
+ `;
271
+ const transformedLogs = logs.map((log) => ({
272
+ ...log,
273
+ date: new Date(log.date),
274
+ params: log.params ? deserialize(log.params) : undefined,
275
+ payload: log.payload ? deserialize(log.payload) : undefined,
276
+ queries: log.queries ? deserialize(log.queries) : undefined
277
+ }));
278
+ const total = countResult.total;
279
+ const totalPages = Math.ceil(total / limit);
280
+ const result = {
281
+ logs: transformedLogs,
282
+ total,
283
+ page,
284
+ limit,
285
+ totalPages
286
+ };
287
+ await this.db.close();
288
+ return result;
289
+ }
290
+ }
291
+ // src/SqliteLogger.ts
292
+ class SqliteLogger {
293
+ db;
294
+ repository;
295
+ constructor(options) {
296
+ this.db = new LogsDatabase(options);
297
+ this.repository = new LogsRepository(this.db);
298
+ }
299
+ async init() {
300
+ await this.db.open();
301
+ await this.db.createTable();
302
+ }
303
+ error(message, data) {
304
+ if (typeof message === "string") {
305
+ this.writeLog("ERROR", {
306
+ message,
307
+ ...data && { data }
308
+ });
309
+ } else {
310
+ this.writeLog("ERROR", {
311
+ exception: message
312
+ });
313
+ }
314
+ }
315
+ warn(message, data) {
316
+ this.writeLog("WARN", {
317
+ message,
318
+ ...data && { data }
319
+ });
320
+ }
321
+ info(message, data) {
322
+ this.writeLog("INFO", {
323
+ message,
324
+ ...data && { data }
325
+ });
326
+ }
327
+ debug(message, data) {
328
+ this.writeLog("DEBUG", {
329
+ message,
330
+ ...data && { data }
331
+ });
332
+ }
333
+ log(message, data) {
334
+ this.writeLog("LOG", {
335
+ message,
336
+ ...data && { data }
337
+ });
338
+ }
339
+ success(message, data) {
340
+ this.writeLog("SUCCESS", {
341
+ message,
342
+ ...data && { data }
343
+ });
344
+ }
345
+ writeLog(level, config) {
346
+ const { message, data, exception } = config || {};
347
+ const logEntry = new LogsEntity;
348
+ logEntry.level = level;
349
+ if (message)
350
+ logEntry.message = message;
351
+ else if (exception?.message)
352
+ logEntry.message = exception.message;
353
+ logEntry.date = exception?.date || new Date;
354
+ if (data?.userId !== undefined)
355
+ logEntry.userId = data.userId;
356
+ if (data?.email !== undefined)
357
+ logEntry.email = data.email;
358
+ if (data?.lastName !== undefined)
359
+ logEntry.lastName = data.lastName;
360
+ if (data?.firstName !== undefined)
361
+ logEntry.firstName = data.firstName;
362
+ if (exception?.status !== undefined) {
363
+ logEntry.status = exception.status;
364
+ } else if (data?.status !== undefined) {
365
+ logEntry.status = data.status;
366
+ }
367
+ if (exception?.name !== undefined)
368
+ logEntry.exceptionName = exception.name;
369
+ const stackTrace = exception?.stackToJson();
370
+ if (stackTrace !== undefined && stackTrace !== null)
371
+ logEntry.stackTrace = stackTrace;
372
+ if (data?.ip !== undefined)
373
+ logEntry.ip = data.ip;
374
+ if (data?.method !== undefined)
375
+ logEntry.method = data.method;
376
+ if (data?.path !== undefined)
377
+ logEntry.path = data.path;
378
+ if (data?.userAgent !== undefined)
379
+ logEntry.userAgent = data.userAgent;
380
+ if (data?.referer !== undefined)
381
+ logEntry.referer = data.referer;
382
+ if (data?.params !== undefined)
383
+ logEntry.params = data.params;
384
+ if (data?.payload !== undefined)
385
+ logEntry.payload = data.payload;
386
+ if (data?.queries !== undefined)
387
+ logEntry.queries = data.queries;
388
+ this.repository.create(logEntry);
389
+ }
390
+ }
391
+ SqliteLogger = __legacyDecorateClassTS([
392
+ decorator.logger(),
393
+ __legacyMetadataTS("design:paramtypes", [
394
+ typeof Bun === "undefined" || typeof Bun.SQL === "undefined" || typeof Bun.SQL.SQLiteOptions === "undefined" ? Object : Bun.SQL.SQLiteOptions
395
+ ])
396
+ ], SqliteLogger);
397
+ // src/TerminalLogger.ts
398
+ class TerminalLogger {
399
+ colorizeText(text, color) {
400
+ const ansiColor = Bun.color(color, "ansi");
401
+ const resetAnsi = "\x1B[0m";
402
+ return ansiColor ? `${ansiColor}${text}${resetAnsi}` : text;
403
+ }
404
+ getLevelColor(level) {
405
+ const colorMap = {
406
+ ERROR: "#FF3B30",
407
+ WARN: "#FFCC00",
408
+ INFO: "#007AFF",
409
+ DEBUG: "#8E8E93",
410
+ LOG: "#8E8E93",
411
+ SUCCESS: "#00C851"
412
+ };
413
+ return colorMap[level.toUpperCase()] || "white";
414
+ }
415
+ getLevelSymbol(level) {
416
+ const symbolMap = {
417
+ ERROR: "\u2716",
418
+ WARN: "\u26A0",
419
+ INFO: "\u2139",
420
+ DEBUG: "\u2699",
421
+ LOG: "\u25CF",
422
+ SUCCESS: "\u2714"
423
+ };
424
+ return symbolMap[level.toUpperCase()] || "\u25CF";
425
+ }
426
+ writeToConsole(config) {
427
+ const {
428
+ level,
429
+ message,
430
+ date,
431
+ data,
432
+ stackTrace,
433
+ showArrow = true,
434
+ showTimestamp = true,
435
+ showLevel = true,
436
+ useSymbol = false
437
+ } = config;
438
+ const normalizedLevel = level.endsWith("Exception") ? "ERROR" : level;
439
+ const color = this.getLevelColor(normalizedLevel);
440
+ const now = date || new Date;
441
+ const formattedTime = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, "0")}-${String(now.getDate()).padStart(2, "0")} ${String(now.getHours()).padStart(2, "0")}:${String(now.getMinutes()).padStart(2, "0")}:${String(now.getSeconds()).padStart(2, "0")}`;
442
+ const timestamp = showTimestamp ? `${this.colorizeText(formattedTime, "#B2BEB5")} ` : "";
443
+ const arrow = showArrow ? `${this.colorizeText("->", color)} ` : "";
444
+ const levelDisplay = useSymbol ? this.getLevelSymbol(normalizedLevel) : `[${level}]`;
445
+ const colorizedLevel = showLevel ? `${this.colorizeText(levelDisplay, color)} ` : "";
446
+ const colorizedMessage = this.colorizeText(message, color);
447
+ let logMessage = `${arrow}${timestamp}${colorizedLevel}${colorizedMessage}`;
448
+ if (data && Object.keys(data).length > 0) {
449
+ const dataEntries = Object.entries(data).filter(([key]) => key !== "stackTrace").map(([key, value]) => {
450
+ const valueColor = typeof value === "string" ? "#69E502" : typeof value === "number" ? "#FFE809" : "#D3D3D3";
451
+ const colorizedValue = this.colorizeText(String(value), valueColor);
452
+ return `${this.colorizeText(key, "#79B")}: ${colorizedValue}`;
453
+ });
454
+ if (dataEntries.length > 0) {
455
+ const colorizedData = dataEntries.join(`
456
+ `);
457
+ logMessage += `
458
+ ${colorizedData}`;
459
+ }
460
+ }
461
+ if (stackTrace && Array.isArray(stackTrace) && stackTrace.length > 0) {
462
+ const stackHeader = this.colorizeText("Stack Trace:", "#FF6B6B");
463
+ logMessage += `
464
+ ${stackHeader}`;
465
+ stackTrace.forEach((frame, index) => {
466
+ const frameNumber = this.colorizeText(` ${index + 1}.`, "#B2BEB5");
467
+ const functionName = frame.functionName ? this.colorizeText(frame.functionName, "#FFD93D") : this.colorizeText("<anonymous>", "#8E8E93");
468
+ const fileName = frame.fileName ? this.colorizeText(frame.fileName, "#6BCF7F") : "";
469
+ const lineCol = frame.lineNumber ? this.colorizeText(`:${frame.lineNumber}${frame.columnNumber ? `:${frame.columnNumber}` : ""}`, "#B2BEB5") : "";
470
+ logMessage += `
471
+ ${frameNumber} ${functionName}`;
472
+ if (fileName) {
473
+ logMessage += `
474
+ at ${fileName}${lineCol}`;
475
+ }
476
+ });
477
+ }
478
+ logMessage += `
479
+ `;
480
+ if (level === "FATAL" || level === "ERROR") {
481
+ process.stderr.write(`${logMessage}`);
482
+ } else {
483
+ process.stdout.write(`${logMessage}`);
484
+ }
485
+ }
486
+ async init() {}
487
+ error(message, data, options) {
488
+ if (typeof message === "string") {
489
+ this.writeToConsole({
490
+ level: "ERROR",
491
+ message,
492
+ ...data && { data },
493
+ ...options?.showArrow !== undefined && { showArrow: options.showArrow },
494
+ ...options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp },
495
+ ...options?.showLevel !== undefined && { showLevel: options.showLevel },
496
+ ...options?.useSymbol !== undefined && { useSymbol: options.useSymbol }
497
+ });
498
+ } else {
499
+ const exceptionData = {
500
+ ...message.data,
501
+ ...data
502
+ };
503
+ if (message.status) {
504
+ exceptionData.status = message.status;
505
+ }
506
+ const stackJson = message.stackToJson();
507
+ this.writeToConsole({
508
+ level: message.name,
509
+ message: message.message,
510
+ data: exceptionData,
511
+ ...stackJson && { stackTrace: stackJson },
512
+ date: message.date,
513
+ ...options?.showArrow !== undefined && { showArrow: options.showArrow },
514
+ ...options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp },
515
+ ...options?.showLevel !== undefined && { showLevel: options.showLevel },
516
+ ...options?.useSymbol !== undefined && { useSymbol: options.useSymbol }
517
+ });
518
+ }
519
+ }
520
+ warn(message, data, options) {
521
+ this.writeToConsole({
522
+ level: "WARN",
523
+ message,
524
+ ...data && { data },
525
+ ...options?.showArrow !== undefined && { showArrow: options.showArrow },
526
+ ...options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp },
527
+ ...options?.showLevel !== undefined && { showLevel: options.showLevel },
528
+ ...options?.useSymbol !== undefined && { useSymbol: options.useSymbol }
529
+ });
530
+ }
531
+ info(message, data, options) {
532
+ this.writeToConsole({
533
+ level: "INFO",
534
+ message,
535
+ ...data && { data },
536
+ ...options?.showArrow !== undefined && { showArrow: options.showArrow },
537
+ ...options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp },
538
+ ...options?.showLevel !== undefined && { showLevel: options.showLevel },
539
+ ...options?.useSymbol !== undefined && { useSymbol: options.useSymbol }
540
+ });
541
+ }
542
+ debug(message, data, options) {
543
+ this.writeToConsole({
544
+ level: "DEBUG",
545
+ message,
546
+ ...data && { data },
547
+ ...options?.showArrow !== undefined && { showArrow: options.showArrow },
548
+ ...options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp },
549
+ ...options?.showLevel !== undefined && { showLevel: options.showLevel },
550
+ ...options?.useSymbol !== undefined && { useSymbol: options.useSymbol }
551
+ });
552
+ }
553
+ log(message, data, options) {
554
+ this.writeToConsole({
555
+ level: "LOG",
556
+ message,
557
+ ...data && { data },
558
+ ...options?.showArrow !== undefined && { showArrow: options.showArrow },
559
+ ...options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp },
560
+ ...options?.showLevel !== undefined && { showLevel: options.showLevel },
561
+ ...options?.useSymbol !== undefined && { useSymbol: options.useSymbol }
562
+ });
563
+ }
564
+ success(message, data, options) {
565
+ this.writeToConsole({
566
+ level: "SUCCESS",
567
+ message,
568
+ ...data && { data },
569
+ ...options?.showArrow !== undefined && { showArrow: options.showArrow },
570
+ ...options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp },
571
+ ...options?.showLevel !== undefined && { showLevel: options.showLevel },
572
+ ...options?.useSymbol !== undefined && { useSymbol: options.useSymbol }
573
+ });
574
+ }
575
+ }
576
+ TerminalLogger = __legacyDecorateClassTS([
577
+ decorator.logger()
578
+ ], TerminalLogger);
579
+ // src/types.ts
580
+ var ELogLevel;
581
+ ((ELogLevel2) => {
582
+ ELogLevel2["ERROR"] = "ERROR";
583
+ ELogLevel2["WARN"] = "WARN";
584
+ ELogLevel2["INFO"] = "INFO";
585
+ ELogLevel2["DEBUG"] = "DEBUG";
586
+ ELogLevel2["LOG"] = "LOG";
587
+ ELogLevel2["SUCCESS"] = "SUCCESS";
588
+ })(ELogLevel ||= {});
589
+ export {
590
+ decorator,
591
+ TerminalLogger,
592
+ SqliteLogger,
593
+ LogsRepository,
594
+ LogsEntity,
595
+ LogsDatabase,
596
+ ELogLevel
597
+ };
59
598
 
60
- //# debugId=09267DB0F42C699464756E2164756E21
599
+ //# debugId=D03BCBCC7B6D4DFA64756E2164756E21
package/dist/index.js.map CHANGED
@@ -6,11 +6,11 @@
6
6
  "import { DatabaseException, type IDatabase } from \"@ooneex/database\";\n\nexport class LogsDatabase implements IDatabase {\n private client: Bun.SQL | undefined;\n private options: Bun.SQL.SQLiteOptions;\n\n constructor(options?: Bun.SQL.SQLiteOptions) {\n const fileName = options?.filename || Bun.env.LOGS_DATABASE_PATH || \"\";\n\n if (!fileName) {\n throw new DatabaseException(\n \"No database filename provided. Please set LOGS_DATABASE_PATH environment variable or provide a filename in the options.\",\n );\n }\n\n this.options = {\n filename: fileName,\n readonly: false,\n create: true,\n readwrite: true,\n strict: true,\n safeIntegers: false,\n ...options,\n adapter: \"sqlite\",\n };\n }\n\n public getClient(): Bun.SQL {\n if (!this.client) {\n try {\n this.client = new Bun.SQL(this.options);\n } catch (error) {\n throw new DatabaseException((error as Error).message);\n }\n }\n\n return this.client;\n }\n\n public async open(): Promise<void> {\n this.getClient();\n }\n\n public async createTable(): Promise<void> {\n const sql = this.getClient();\n\n try {\n await sql`PRAGMA foreign_keys = ON`;\n await sql`PRAGMA journal_mode = WAL`;\n await sql`PRAGMA integrity_check`;\n\n // Create logs table if it doesn't exist\n await sql`\n CREATE TABLE IF NOT EXISTS logs (\n id TEXT PRIMARY KEY,\n level TEXT NOT NULL,\n message TEXT,\n date TEXT NOT NULL,\n userId TEXT,\n email TEXT,\n lastName TEXT,\n firstName TEXT,\n status INTEGER,\n exceptionName TEXT,\n stackTrace TEXT,\n ip TEXT,\n method TEXT,\n path TEXT,\n userAgent TEXT,\n referer TEXT,\n params TEXT,\n payload TEXT,\n queries TEXT,\n protocol TEXT,\n host TEXT,\n port INTEGER,\n subdomain TEXT,\n domain TEXT,\n hostname TEXT\n )\n `;\n\n // Create indexes for better query performance\n await sql`CREATE INDEX IF NOT EXISTS idx_logs_level ON logs(level)`;\n await sql`CREATE INDEX IF NOT EXISTS idx_logs_user_id ON logs(userId)`;\n } catch (_e) {\n throw new DatabaseException(\"Failed to open log database connection\");\n }\n }\n\n public async dropTable(): Promise<void> {\n const sql = this.getClient();\n\n try {\n await sql`DROP TABLE IF EXISTS logs`;\n } catch (_e) {\n throw new DatabaseException(\"Failed to drop log tables\");\n }\n }\n\n public async close(): Promise<void> {\n try {\n await this.client?.close();\n this.client = undefined as Bun.SQL | undefined;\n } catch (_e) {\n throw new DatabaseException(\"Failed to close log database connection\");\n }\n }\n\n public async drop(): Promise<void> {}\n}\n",
7
7
  "import type { ExceptionStackFrameType } from \"@ooneex/exception\";\nimport type { HttpMethodType, ScalarType } from \"@ooneex/types\";\nimport type { LevelType } from \"./types\";\n\nexport class LogsEntity {\n id?: string;\n level?: LevelType;\n message?: string;\n date: Date = new Date();\n userId?: string;\n email?: string;\n lastName?: string;\n firstName?: string;\n status?: number;\n exceptionName?: string;\n stackTrace?: ExceptionStackFrameType[];\n ip?: string;\n method?: HttpMethodType;\n path?: string;\n userAgent?: string;\n referer?: string;\n params?: Record<string, ScalarType>;\n payload?: Record<string, unknown>;\n queries?: Record<string, ScalarType>;\n}\n",
8
8
  "import { deserialize, serialize } from \"bun:jsc\";\nimport { random } from \"@ooneex/utils\";\nimport { sql } from \"bun\";\nimport type { LogsDatabase } from \"./LogsDatabase\";\nimport type { LogsEntity } from \"./LogsEntity\";\nimport type { FindByCriteriaType, FindByResultType } from \"./types\";\n\ntype RawLogRecordType = {\n id: string;\n level: string;\n message?: string;\n date: string;\n userId?: string;\n email?: string;\n lastName?: string;\n firstName?: string;\n status?: number;\n exceptionName?: string;\n stackTrace?: Buffer;\n ip?: string;\n method?: string;\n path?: string;\n userAgent?: string;\n referer?: string;\n params?: Buffer;\n payload?: Buffer;\n queries?: Buffer;\n};\n\nexport class LogsRepository {\n constructor(private db: LogsDatabase) {}\n\n public async create(log: LogsEntity): Promise<LogsEntity> {\n const client = this.db.getClient();\n\n const data = {\n ...log,\n id: random.nanoid(15),\n date: log.date.toISOString(),\n stackTrace: log.stackTrace ? serialize(log.stackTrace) : null,\n params: log.params ? serialize(log.params) : null,\n payload: log.payload ? serialize(log.payload) : null,\n queries: log.queries ? serialize(log.queries) : null,\n };\n\n const [newLog] = await client`\n INSERT INTO logs ${sql(data)}\n RETURNING *\n `;\n\n await this.db.close();\n\n return newLog as LogsEntity;\n }\n\n public async find(id: string): Promise<LogsEntity | null> {\n const client = this.db.getClient();\n\n const [log] = await client`\n SELECT * FROM logs\n WHERE id = ${id}\n LIMIT 1\n `;\n\n if (!log) {\n await this.db.close();\n return null;\n }\n\n const result = {\n ...log,\n date: new Date(log.date),\n stackTrace: log.stackTrace ? deserialize(log.stackTrace) : undefined,\n params: log.params ? deserialize(log.params) : undefined,\n payload: log.payload ? deserialize(log.payload) : undefined,\n queries: log.queries ? deserialize(log.queries) : undefined,\n };\n\n await this.db.close();\n\n return result;\n }\n\n public async findBy(criteria: FindByCriteriaType): Promise<FindByResultType> {\n const client = this.db.getClient();\n\n // Build WHERE conditions using SQL fragments\n const whereConditions: unknown[] = [];\n\n if (criteria.level !== undefined) {\n whereConditions.push(sql`level = ${criteria.level}`);\n }\n\n if (criteria.userId !== undefined) {\n whereConditions.push(sql`userId = ${criteria.userId}`);\n }\n\n if (criteria.email !== undefined) {\n whereConditions.push(sql`email = ${criteria.email}`);\n }\n\n if (criteria.lastName !== undefined) {\n whereConditions.push(sql`lastName = ${criteria.lastName}`);\n }\n\n if (criteria.firstName !== undefined) {\n whereConditions.push(sql`firstName = ${criteria.firstName}`);\n }\n\n if (criteria.status !== undefined) {\n whereConditions.push(sql`status = ${criteria.status}`);\n }\n\n if (criteria.exceptionName !== undefined) {\n whereConditions.push(sql`exceptionName = ${criteria.exceptionName}`);\n }\n\n if (criteria.method !== undefined) {\n whereConditions.push(sql`method = ${criteria.method}`);\n }\n\n if (criteria.path !== undefined) {\n whereConditions.push(sql`path = ${criteria.path}`);\n }\n\n // Handle pagination\n const limit = criteria.limit || 100; // Default limit of 100\n const page = criteria.page || 1; // Default to page 1\n const offset = (page - 1) * limit;\n\n // If no criteria provided, get all records with pagination\n if (whereConditions.length === 0) {\n const [countResult] = await client`SELECT COUNT(*) as total FROM logs`;\n const logs = await client`\n SELECT * FROM logs\n ORDER BY date DESC\n LIMIT ${limit}\n OFFSET ${offset}\n `;\n\n const transformedLogs = logs.map((log: RawLogRecordType) => ({\n ...log,\n date: new Date(log.date),\n stackTrace: log.stackTrace ? deserialize(log.stackTrace) : undefined,\n params: log.params ? deserialize(log.params) : undefined,\n payload: log.payload ? deserialize(log.payload) : undefined,\n queries: log.queries ? deserialize(log.queries) : undefined,\n })) as LogsEntity[];\n\n const total = countResult.total;\n const totalPages = Math.ceil(total / limit);\n\n const result = {\n logs: transformedLogs,\n total,\n page,\n limit,\n totalPages,\n };\n\n await this.db.close();\n\n return result;\n }\n\n // Build the WHERE clause by joining fragments with AND\n const whereClause = whereConditions.reduce((acc, condition, index) => {\n if (index === 0) {\n return condition;\n }\n return sql`${acc} AND ${condition}`;\n });\n\n // Get total count for pagination\n const [countResult] = await client`\n SELECT COUNT(*) as total\n FROM logs\n WHERE ${whereClause}\n `;\n\n // Execute the query with proper SQL fragment composition and pagination\n const logs = await client`\n SELECT * FROM logs\n WHERE ${whereClause}\n ORDER BY date DESC\n LIMIT ${limit}\n OFFSET ${offset}\n `;\n\n // Transform and deserialize results\n const transformedLogs = logs.map((log: RawLogRecordType) => ({\n ...log,\n date: new Date(log.date),\n params: log.params ? deserialize(log.params) : undefined,\n payload: log.payload ? deserialize(log.payload) : undefined,\n queries: log.queries ? deserialize(log.queries) : undefined,\n }));\n\n const total = countResult.total;\n const totalPages = Math.ceil(total / limit);\n\n const result = {\n logs: transformedLogs,\n total,\n page,\n limit,\n totalPages,\n };\n\n await this.db.close();\n\n return result;\n }\n}\n",
9
- "import type { IException } from \"@ooneex/exception\";\nimport { LogsDatabase } from \"./LogsDatabase\";\nimport { LogsEntity } from \"./LogsEntity\";\nimport { LogsRepository } from \"./LogsRepository\";\nimport type { ILogger, LevelType } from \"./types\";\n\nexport class SqliteLogger implements ILogger<LogsEntity> {\n private db: LogsDatabase;\n private repository: LogsRepository;\n\n constructor(options?: Bun.SQL.SQLiteOptions) {\n this.db = new LogsDatabase(options);\n this.repository = new LogsRepository(this.db);\n }\n\n public async init(): Promise<void> {\n await this.db.open();\n await this.db.createTable();\n }\n\n public error(message: string | IException, data?: LogsEntity): void {\n if (typeof message === \"string\") {\n this.writeLog(\"ERROR\", {\n message,\n ...(data && { data }),\n });\n } else {\n this.writeLog(\"ERROR\", {\n exception: message,\n });\n }\n }\n\n public warn(message: string, data?: LogsEntity): void {\n this.writeLog(\"WARN\", {\n message,\n ...(data && { data }),\n });\n }\n\n public info(message: string, data?: LogsEntity): void {\n this.writeLog(\"INFO\", {\n message,\n ...(data && { data }),\n });\n }\n\n public debug(message: string, data?: LogsEntity): void {\n this.writeLog(\"DEBUG\", {\n message,\n ...(data && { data }),\n });\n }\n\n public log(message: string, data?: LogsEntity): void {\n this.writeLog(\"LOG\", {\n message,\n ...(data && { data }),\n });\n }\n\n public success(message: string, data?: LogsEntity): void {\n this.writeLog(\"SUCCESS\", {\n message,\n ...(data && { data }),\n });\n }\n\n private writeLog(\n level: LevelType,\n config?: {\n message?: string;\n data?: LogsEntity;\n exception?: IException;\n },\n ): void {\n const { message, data, exception } = config || {};\n\n const logEntry = new LogsEntity();\n logEntry.level = level;\n if (message) logEntry.message = message;\n else if (exception?.message) logEntry.message = exception.message;\n logEntry.date = exception?.date || new Date();\n if (data?.userId !== undefined) logEntry.userId = data.userId;\n if (data?.email !== undefined) logEntry.email = data.email;\n if (data?.lastName !== undefined) logEntry.lastName = data.lastName;\n if (data?.firstName !== undefined) logEntry.firstName = data.firstName;\n if (exception?.status !== undefined) {\n logEntry.status = exception.status;\n } else if (data?.status !== undefined) {\n logEntry.status = data.status;\n }\n if (exception?.name !== undefined) logEntry.exceptionName = exception.name;\n const stackTrace = exception?.stackToJson();\n if (stackTrace !== undefined && stackTrace !== null) logEntry.stackTrace = stackTrace;\n if (data?.ip !== undefined) logEntry.ip = data.ip;\n if (data?.method !== undefined) logEntry.method = data.method;\n if (data?.path !== undefined) logEntry.path = data.path;\n if (data?.userAgent !== undefined) logEntry.userAgent = data.userAgent;\n if (data?.referer !== undefined) logEntry.referer = data.referer;\n if (data?.params !== undefined) logEntry.params = data.params;\n if (data?.payload !== undefined) logEntry.payload = data.payload;\n if (data?.queries !== undefined) logEntry.queries = data.queries;\n\n // Save to database asynchronously\n this.repository.create(logEntry);\n }\n}\n",
10
- "import type { ExceptionStackFrameType, IException } from \"@ooneex/exception\";\nimport type { ScalarType } from \"@ooneex/types\";\nimport type { ILogger, LoggerOptionsType } from \"./types\";\n\ninterface WriteToConsoleConfig {\n level: string;\n message: string;\n date?: Date;\n data?: Record<string, ScalarType>;\n stackTrace?: ExceptionStackFrameType[];\n showArrow?: boolean;\n showTimestamp?: boolean;\n showLevel?: boolean;\n useSymbol?: boolean;\n}\n\nexport class TerminalLogger implements ILogger {\n private colorizeText(text: string, color: string): string {\n const ansiColor = Bun.color(color, \"ansi\");\n const resetAnsi = \"\\u001b[0m\";\n return ansiColor ? `${ansiColor}${text}${resetAnsi}` : text;\n }\n\n private getLevelColor(level: string): string {\n const colorMap: Record<string, string> = {\n ERROR: \"#FF3B30\",\n WARN: \"#FFCC00\",\n INFO: \"#007AFF\",\n DEBUG: \"#8E8E93\",\n LOG: \"#8E8E93\",\n SUCCESS: \"#00C851\",\n };\n\n return colorMap[level.toUpperCase()] || \"white\";\n }\n\n private getLevelSymbol(level: string): string {\n const symbolMap: Record<string, string> = {\n ERROR: \"✖\",\n WARN: \"⚠\",\n INFO: \"ℹ\",\n DEBUG: \"⚙\",\n LOG: \"●\",\n SUCCESS: \"✔\",\n };\n\n return symbolMap[level.toUpperCase()] || \"●\";\n }\n\n private writeToConsole(config: WriteToConsoleConfig): void {\n const {\n level,\n message,\n date,\n data,\n stackTrace,\n showArrow = true,\n showTimestamp = true,\n showLevel = true,\n useSymbol = false,\n } = config;\n const normalizedLevel = level.endsWith(\"Exception\") ? \"ERROR\" : level;\n const color = this.getLevelColor(normalizedLevel);\n\n const now = date || new Date();\n const formattedTime = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, \"0\")}-${String(now.getDate()).padStart(2, \"0\")} ${String(now.getHours()).padStart(2, \"0\")}:${String(now.getMinutes()).padStart(2, \"0\")}:${String(now.getSeconds()).padStart(2, \"0\")}`;\n const timestamp = showTimestamp ? `${this.colorizeText(formattedTime, \"#B2BEB5\")} ` : \"\";\n const arrow = showArrow ? `${this.colorizeText(\"->\", color)} ` : \"\";\n const levelDisplay = useSymbol ? this.getLevelSymbol(normalizedLevel) : `[${level}]`;\n const colorizedLevel = showLevel ? `${this.colorizeText(levelDisplay, color)} ` : \"\";\n const colorizedMessage = this.colorizeText(message, color);\n\n let logMessage = `${arrow}${timestamp}${colorizedLevel}${colorizedMessage}`;\n\n if (data && Object.keys(data).length > 0) {\n const dataEntries = Object.entries(data)\n .filter(([key]) => key !== \"stackTrace\") // Exclude stackTrace from regular data display\n .map(([key, value]) => {\n const valueColor = typeof value === \"string\" ? \"#69E502\" : typeof value === \"number\" ? \"#FFE809\" : \"#D3D3D3\";\n const colorizedValue = this.colorizeText(String(value), valueColor);\n return `${this.colorizeText(key, \"#79B\")}: ${colorizedValue}`;\n });\n\n if (dataEntries.length > 0) {\n const colorizedData = dataEntries.join(\"\\n\");\n logMessage += `\\n${colorizedData}`;\n }\n }\n\n // Add formatted stack trace if available\n if (stackTrace && Array.isArray(stackTrace) && stackTrace.length > 0) {\n const stackHeader = this.colorizeText(\"Stack Trace:\", \"#FF6B6B\");\n logMessage += `\\n${stackHeader}`;\n\n stackTrace.forEach((frame, index) => {\n const frameNumber = this.colorizeText(` ${index + 1}.`, \"#B2BEB5\");\n const functionName = frame.functionName\n ? this.colorizeText(frame.functionName, \"#FFD93D\")\n : this.colorizeText(\"<anonymous>\", \"#8E8E93\");\n const fileName = frame.fileName ? this.colorizeText(frame.fileName, \"#6BCF7F\") : \"\";\n const lineCol = frame.lineNumber\n ? this.colorizeText(`:${frame.lineNumber}${frame.columnNumber ? `:${frame.columnNumber}` : \"\"}`, \"#B2BEB5\")\n : \"\";\n\n logMessage += `\\n${frameNumber} ${functionName}`;\n if (fileName) {\n logMessage += `\\n at ${fileName}${lineCol}`;\n }\n });\n }\n\n logMessage += \"\\n\";\n\n // Write to stderr for error levels, stdout for others\n if (level === \"FATAL\" || level === \"ERROR\") {\n process.stderr.write(`${logMessage}`);\n } else {\n process.stdout.write(`${logMessage}`);\n }\n }\n\n public async init(): Promise<void> {}\n\n public error(message: string | IException, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n if (typeof message === \"string\") {\n this.writeToConsole({\n level: \"ERROR\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n } else {\n // Handle IException object\n const exceptionData: Record<string, ScalarType> = {\n ...(message.data as Record<string, ScalarType>),\n ...(data as Record<string, ScalarType>),\n };\n\n if (message.status) {\n exceptionData.status = message.status;\n }\n\n // Get stack trace as structured data for better formatting\n const stackJson = message.stackToJson();\n this.writeToConsole({\n level: message.name,\n message: message.message,\n data: exceptionData,\n ...(stackJson && { stackTrace: stackJson }),\n date: message.date,\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n }\n\n public warn(message: string, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n this.writeToConsole({\n level: \"WARN\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n\n public info(message: string, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n this.writeToConsole({\n level: \"INFO\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n\n public debug(message: string, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n this.writeToConsole({\n level: \"DEBUG\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n\n public log(message: string, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n this.writeToConsole({\n level: \"LOG\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n\n public success(message: string, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n this.writeToConsole({\n level: \"SUCCESS\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n}\n",
9
+ "import type { IException } from \"@ooneex/exception\";\nimport { decorator } from \"./decorators\";\nimport { LogsDatabase } from \"./LogsDatabase\";\nimport { LogsEntity } from \"./LogsEntity\";\nimport { LogsRepository } from \"./LogsRepository\";\nimport type { ILogger, LevelType } from \"./types\";\n\n@decorator.logger()\nexport class SqliteLogger implements ILogger<LogsEntity> {\n private db: LogsDatabase;\n private repository: LogsRepository;\n\n constructor(options?: Bun.SQL.SQLiteOptions) {\n this.db = new LogsDatabase(options);\n this.repository = new LogsRepository(this.db);\n }\n\n public async init(): Promise<void> {\n await this.db.open();\n await this.db.createTable();\n }\n\n public error(message: string | IException, data?: LogsEntity): void {\n if (typeof message === \"string\") {\n this.writeLog(\"ERROR\", {\n message,\n ...(data && { data }),\n });\n } else {\n this.writeLog(\"ERROR\", {\n exception: message,\n });\n }\n }\n\n public warn(message: string, data?: LogsEntity): void {\n this.writeLog(\"WARN\", {\n message,\n ...(data && { data }),\n });\n }\n\n public info(message: string, data?: LogsEntity): void {\n this.writeLog(\"INFO\", {\n message,\n ...(data && { data }),\n });\n }\n\n public debug(message: string, data?: LogsEntity): void {\n this.writeLog(\"DEBUG\", {\n message,\n ...(data && { data }),\n });\n }\n\n public log(message: string, data?: LogsEntity): void {\n this.writeLog(\"LOG\", {\n message,\n ...(data && { data }),\n });\n }\n\n public success(message: string, data?: LogsEntity): void {\n this.writeLog(\"SUCCESS\", {\n message,\n ...(data && { data }),\n });\n }\n\n private writeLog(\n level: LevelType,\n config?: {\n message?: string;\n data?: LogsEntity;\n exception?: IException;\n },\n ): void {\n const { message, data, exception } = config || {};\n\n const logEntry = new LogsEntity();\n logEntry.level = level;\n if (message) logEntry.message = message;\n else if (exception?.message) logEntry.message = exception.message;\n logEntry.date = exception?.date || new Date();\n if (data?.userId !== undefined) logEntry.userId = data.userId;\n if (data?.email !== undefined) logEntry.email = data.email;\n if (data?.lastName !== undefined) logEntry.lastName = data.lastName;\n if (data?.firstName !== undefined) logEntry.firstName = data.firstName;\n if (exception?.status !== undefined) {\n logEntry.status = exception.status;\n } else if (data?.status !== undefined) {\n logEntry.status = data.status;\n }\n if (exception?.name !== undefined) logEntry.exceptionName = exception.name;\n const stackTrace = exception?.stackToJson();\n if (stackTrace !== undefined && stackTrace !== null) logEntry.stackTrace = stackTrace;\n if (data?.ip !== undefined) logEntry.ip = data.ip;\n if (data?.method !== undefined) logEntry.method = data.method;\n if (data?.path !== undefined) logEntry.path = data.path;\n if (data?.userAgent !== undefined) logEntry.userAgent = data.userAgent;\n if (data?.referer !== undefined) logEntry.referer = data.referer;\n if (data?.params !== undefined) logEntry.params = data.params;\n if (data?.payload !== undefined) logEntry.payload = data.payload;\n if (data?.queries !== undefined) logEntry.queries = data.queries;\n\n // Save to database asynchronously\n this.repository.create(logEntry);\n }\n}\n",
10
+ "import type { ExceptionStackFrameType, IException } from \"@ooneex/exception\";\nimport type { ScalarType } from \"@ooneex/types\";\nimport { decorator } from \"./decorators\";\nimport type { ILogger, LoggerOptionsType } from \"./types\";\n\ninterface WriteToConsoleConfig {\n level: string;\n message: string;\n date?: Date;\n data?: Record<string, ScalarType>;\n stackTrace?: ExceptionStackFrameType[];\n showArrow?: boolean;\n showTimestamp?: boolean;\n showLevel?: boolean;\n useSymbol?: boolean;\n}\n\n@decorator.logger()\nexport class TerminalLogger implements ILogger {\n private colorizeText(text: string, color: string): string {\n const ansiColor = Bun.color(color, \"ansi\");\n const resetAnsi = \"\\u001b[0m\";\n return ansiColor ? `${ansiColor}${text}${resetAnsi}` : text;\n }\n\n private getLevelColor(level: string): string {\n const colorMap: Record<string, string> = {\n ERROR: \"#FF3B30\",\n WARN: \"#FFCC00\",\n INFO: \"#007AFF\",\n DEBUG: \"#8E8E93\",\n LOG: \"#8E8E93\",\n SUCCESS: \"#00C851\",\n };\n\n return colorMap[level.toUpperCase()] || \"white\";\n }\n\n private getLevelSymbol(level: string): string {\n const symbolMap: Record<string, string> = {\n ERROR: \"✖\",\n WARN: \"⚠\",\n INFO: \"ℹ\",\n DEBUG: \"⚙\",\n LOG: \"●\",\n SUCCESS: \"✔\",\n };\n\n return symbolMap[level.toUpperCase()] || \"●\";\n }\n\n private writeToConsole(config: WriteToConsoleConfig): void {\n const {\n level,\n message,\n date,\n data,\n stackTrace,\n showArrow = true,\n showTimestamp = true,\n showLevel = true,\n useSymbol = false,\n } = config;\n const normalizedLevel = level.endsWith(\"Exception\") ? \"ERROR\" : level;\n const color = this.getLevelColor(normalizedLevel);\n\n const now = date || new Date();\n const formattedTime = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, \"0\")}-${String(now.getDate()).padStart(2, \"0\")} ${String(now.getHours()).padStart(2, \"0\")}:${String(now.getMinutes()).padStart(2, \"0\")}:${String(now.getSeconds()).padStart(2, \"0\")}`;\n const timestamp = showTimestamp ? `${this.colorizeText(formattedTime, \"#B2BEB5\")} ` : \"\";\n const arrow = showArrow ? `${this.colorizeText(\"->\", color)} ` : \"\";\n const levelDisplay = useSymbol ? this.getLevelSymbol(normalizedLevel) : `[${level}]`;\n const colorizedLevel = showLevel ? `${this.colorizeText(levelDisplay, color)} ` : \"\";\n const colorizedMessage = this.colorizeText(message, color);\n\n let logMessage = `${arrow}${timestamp}${colorizedLevel}${colorizedMessage}`;\n\n if (data && Object.keys(data).length > 0) {\n const dataEntries = Object.entries(data)\n .filter(([key]) => key !== \"stackTrace\") // Exclude stackTrace from regular data display\n .map(([key, value]) => {\n const valueColor = typeof value === \"string\" ? \"#69E502\" : typeof value === \"number\" ? \"#FFE809\" : \"#D3D3D3\";\n const colorizedValue = this.colorizeText(String(value), valueColor);\n return `${this.colorizeText(key, \"#79B\")}: ${colorizedValue}`;\n });\n\n if (dataEntries.length > 0) {\n const colorizedData = dataEntries.join(\"\\n\");\n logMessage += `\\n${colorizedData}`;\n }\n }\n\n // Add formatted stack trace if available\n if (stackTrace && Array.isArray(stackTrace) && stackTrace.length > 0) {\n const stackHeader = this.colorizeText(\"Stack Trace:\", \"#FF6B6B\");\n logMessage += `\\n${stackHeader}`;\n\n stackTrace.forEach((frame, index) => {\n const frameNumber = this.colorizeText(` ${index + 1}.`, \"#B2BEB5\");\n const functionName = frame.functionName\n ? this.colorizeText(frame.functionName, \"#FFD93D\")\n : this.colorizeText(\"<anonymous>\", \"#8E8E93\");\n const fileName = frame.fileName ? this.colorizeText(frame.fileName, \"#6BCF7F\") : \"\";\n const lineCol = frame.lineNumber\n ? this.colorizeText(`:${frame.lineNumber}${frame.columnNumber ? `:${frame.columnNumber}` : \"\"}`, \"#B2BEB5\")\n : \"\";\n\n logMessage += `\\n${frameNumber} ${functionName}`;\n if (fileName) {\n logMessage += `\\n at ${fileName}${lineCol}`;\n }\n });\n }\n\n logMessage += \"\\n\";\n\n // Write to stderr for error levels, stdout for others\n if (level === \"FATAL\" || level === \"ERROR\") {\n process.stderr.write(`${logMessage}`);\n } else {\n process.stdout.write(`${logMessage}`);\n }\n }\n\n public async init(): Promise<void> {}\n\n public error(message: string | IException, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n if (typeof message === \"string\") {\n this.writeToConsole({\n level: \"ERROR\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n } else {\n // Handle IException object\n const exceptionData: Record<string, ScalarType> = {\n ...(message.data as Record<string, ScalarType>),\n ...(data as Record<string, ScalarType>),\n };\n\n if (message.status) {\n exceptionData.status = message.status;\n }\n\n // Get stack trace as structured data for better formatting\n const stackJson = message.stackToJson();\n this.writeToConsole({\n level: message.name,\n message: message.message,\n data: exceptionData,\n ...(stackJson && { stackTrace: stackJson }),\n date: message.date,\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n }\n\n public warn(message: string, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n this.writeToConsole({\n level: \"WARN\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n\n public info(message: string, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n this.writeToConsole({\n level: \"INFO\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n\n public debug(message: string, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n this.writeToConsole({\n level: \"DEBUG\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n\n public log(message: string, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n this.writeToConsole({\n level: \"LOG\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n\n public success(message: string, data?: Record<string, ScalarType>, options?: LoggerOptionsType): void {\n this.writeToConsole({\n level: \"SUCCESS\",\n message,\n ...(data && { data }),\n ...(options?.showArrow !== undefined && { showArrow: options.showArrow }),\n ...(options?.showTimestamp !== undefined && { showTimestamp: options.showTimestamp }),\n ...(options?.showLevel !== undefined && { showLevel: options.showLevel }),\n ...(options?.useSymbol !== undefined && { useSymbol: options.useSymbol }),\n });\n }\n}\n",
11
11
  "import type { IException } from \"@ooneex/exception\";\nimport type { HttpMethodType, ScalarType } from \"@ooneex/types\";\nimport type { LogsEntity } from \"./LogsEntity\";\n\nexport type LoggerClassType =\n | (new (\n ...args: unknown[]\n ) => ILogger)\n | (new (\n options?: Bun.SQL.SQLiteOptions,\n ) => ILogger<LogsEntity>);\n\nexport type LoggerOptionsType = {\n showArrow?: boolean;\n showTimestamp?: boolean;\n showLevel?: boolean;\n useSymbol?: boolean;\n};\n\nexport interface ILogger<Data = Record<string, ScalarType>> {\n init: () => Promise<void> | void;\n error: (message: string | IException, data?: Data, options?: LoggerOptionsType) => Promise<void> | void;\n warn: (message: string, data?: Data, options?: LoggerOptionsType) => Promise<void> | void;\n info: (message: string, data?: Data, options?: LoggerOptionsType) => Promise<void> | void;\n debug: (message: string, data?: Data, options?: LoggerOptionsType) => Promise<void> | void;\n log: (message: string, data?: Data, options?: LoggerOptionsType) => Promise<void> | void;\n success: (message: string, data?: Data, options?: LoggerOptionsType) => Promise<void> | void;\n}\n\nexport enum ELogLevel {\n ERROR = \"ERROR\",\n WARN = \"WARN\",\n INFO = \"INFO\",\n DEBUG = \"DEBUG\",\n LOG = \"LOG\",\n SUCCESS = \"SUCCESS\",\n}\n\nexport type LevelType = `${ELogLevel}`;\n\nexport type FindByCriteriaType = {\n level?: ELogLevel;\n userId?: string;\n email?: string;\n lastName?: string;\n firstName?: string;\n status?: number;\n exceptionName?: string;\n method?: HttpMethodType;\n path?: string;\n page?: number;\n limit?: number;\n};\n\nexport type FindByResultType = {\n logs: LogsEntity[];\n total: number;\n page: number;\n limit: number;\n totalPages: number;\n};\n"
12
12
  ],
13
- "mappings": "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",
14
- "debugId": "09267DB0F42C699464756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "D03BCBCC7B6D4DFA64756E2164756E21",
15
15
  "names": []
16
16
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ooneex/logger",
3
3
  "description": "Structured logging service with console and database output support, container integration, and customizable log levels",
4
- "version": "0.11.0",
4
+ "version": "0.13.0",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",
@@ -28,13 +28,14 @@
28
28
  "npm:publish": "bun publish --tolerate-republish --access public"
29
29
  },
30
30
  "dependencies": {
31
- "@ooneex/container": "0.0.12",
32
- "@ooneex/database": "0.0.11",
31
+ "@ooneex/container": "0.0.14",
32
+ "@ooneex/database": "0.0.13",
33
33
  "@ooneex/utils": "0.1.0"
34
34
  },
35
35
  "devDependencies": {
36
- "@ooneex/exception": "0.0.11",
37
- "@ooneex/types": "0.0.11"
36
+ "@ooneex/exception": "0.0.13",
37
+ "@ooneex/http-status": "0.0.13",
38
+ "@ooneex/types": "0.0.13"
38
39
  },
39
40
  "keywords": [
40
41
  "bun",