@quvel-kit/core 1.3.19 → 1.3.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/orm/QueryBuilder.d.ts +410 -0
- package/dist/orm/QueryBuilder.d.ts.map +1 -0
- package/dist/orm/QueryBuilder.js +569 -0
- package/dist/orm/index.d.ts +21 -0
- package/dist/orm/index.d.ts.map +1 -0
- package/dist/orm/index.js +18 -0
- package/dist/orm/relationships/types.d.ts +60 -0
- package/dist/orm/relationships/types.d.ts.map +1 -0
- package/dist/orm/relationships/types.js +1 -0
- package/dist/orm/types.d.ts +60 -0
- package/dist/orm/types.d.ts.map +1 -0
- package/dist/orm/types.js +5 -0
- package/dist/services/logger/BetterStackLogger.d.ts +29 -0
- package/dist/services/logger/BetterStackLogger.d.ts.map +1 -0
- package/dist/services/logger/BetterStackLogger.js +77 -0
- package/dist/services/logger/MultiLogger.d.ts +28 -0
- package/dist/services/logger/MultiLogger.d.ts.map +1 -0
- package/dist/services/logger/MultiLogger.js +32 -0
- package/dist/types/logging.types.d.ts +3 -1
- package/dist/types/logging.types.d.ts.map +1 -1
- package/dist/types/logging.types.js +2 -0
- package/dist/utils/logging.d.ts.map +1 -1
- package/dist/utils/logging.js +24 -0
- package/package.json +5 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared ORM type definitions
|
|
3
|
+
* Prevents circular dependencies between Model and QueryBuilder
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Model configuration interface
|
|
7
|
+
* Subclasses must implement this static configuration
|
|
8
|
+
*/
|
|
9
|
+
export interface ModelConfig {
|
|
10
|
+
/**
|
|
11
|
+
* API endpoint for this model (e.g., '/api/v1/users', '/users')
|
|
12
|
+
*/
|
|
13
|
+
endpoint: string;
|
|
14
|
+
/**
|
|
15
|
+
* Primary key field name
|
|
16
|
+
* @default 'id'
|
|
17
|
+
*/
|
|
18
|
+
primaryKey?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Timestamp fields to parse as Date objects
|
|
21
|
+
* @example ['created_at', 'updated_at', 'email_verified_at']
|
|
22
|
+
*/
|
|
23
|
+
dates?: string[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Filter operator types supported by Spatie Query Builder
|
|
27
|
+
*/
|
|
28
|
+
export type FilterOperator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'like' | 'in';
|
|
29
|
+
/**
|
|
30
|
+
* Model metadata stored on each instance
|
|
31
|
+
* Internal state tracking for the Active Record pattern
|
|
32
|
+
*/
|
|
33
|
+
export interface ModelMetadata {
|
|
34
|
+
/**
|
|
35
|
+
* Is this a new record (not yet persisted)?
|
|
36
|
+
* New records use POST, existing records use PUT
|
|
37
|
+
*/
|
|
38
|
+
isNew: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Original attributes from API (for dirty checking)
|
|
41
|
+
* Used to determine what changed for optimistic updates
|
|
42
|
+
*/
|
|
43
|
+
original: Record<string, any>;
|
|
44
|
+
/**
|
|
45
|
+
* Loaded relationships map
|
|
46
|
+
* Key: relationship name, Value: related model(s)
|
|
47
|
+
*/
|
|
48
|
+
relations: Map<string, any>;
|
|
49
|
+
/**
|
|
50
|
+
* Model is currently being saved
|
|
51
|
+
* Prevents concurrent save operations
|
|
52
|
+
*/
|
|
53
|
+
isSaving: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Model is currently being deleted
|
|
56
|
+
* Prevents concurrent delete operations
|
|
57
|
+
*/
|
|
58
|
+
isDeleting: boolean;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/orm/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;AAElF;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE9B;;;OAGG;IACH,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE5B;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LogLevel } from '../../types/logging.types.js';
|
|
2
|
+
import type { TraceInfo } from '../../types/logging.types.js';
|
|
3
|
+
import { BaseLogger } from './BaseLogger.js';
|
|
4
|
+
/**
|
|
5
|
+
* BetterStack logger implementation
|
|
6
|
+
* Sends logs to BetterStack (Logtail) for distributed tracing and monitoring
|
|
7
|
+
*
|
|
8
|
+
* @see https://betterstack.com/docs/logs/logging-start/
|
|
9
|
+
*/
|
|
10
|
+
export declare class BetterStackLogger extends BaseLogger {
|
|
11
|
+
private readonly apiKey;
|
|
12
|
+
private readonly minLevel;
|
|
13
|
+
private readonly endpoint;
|
|
14
|
+
constructor(traceInfo: TraceInfo, apiKey: string, minLevel?: LogLevel);
|
|
15
|
+
/**
|
|
16
|
+
* Log level priority mapping (higher number = higher priority)
|
|
17
|
+
*/
|
|
18
|
+
private static readonly LOG_LEVEL_PRIORITY;
|
|
19
|
+
/**
|
|
20
|
+
* Check if a log level should be sent
|
|
21
|
+
*/
|
|
22
|
+
private shouldLog;
|
|
23
|
+
protected writeLog(level: LogLevel, message: string, context?: Record<string, unknown>): void;
|
|
24
|
+
/**
|
|
25
|
+
* Send log to BetterStack
|
|
26
|
+
*/
|
|
27
|
+
private sendLog;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=BetterStackLogger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BetterStackLogger.d.ts","sourceRoot":"","sources":["../../../src/services/logger/BetterStackLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;gBAG5D,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,QAAwB;IAOpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CASxC;IAEF;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA0B7F;;OAEG;YACW,OAAO;CActB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { LogLevel } from '../../types/logging.types.js';
|
|
2
|
+
import { BaseLogger } from './BaseLogger.js';
|
|
3
|
+
/**
|
|
4
|
+
* BetterStack logger implementation
|
|
5
|
+
* Sends logs to BetterStack (Logtail) for distributed tracing and monitoring
|
|
6
|
+
*
|
|
7
|
+
* @see https://betterstack.com/docs/logs/logging-start/
|
|
8
|
+
*/
|
|
9
|
+
export class BetterStackLogger extends BaseLogger {
|
|
10
|
+
apiKey;
|
|
11
|
+
minLevel;
|
|
12
|
+
endpoint = 'https://in.logs.betterstack.com';
|
|
13
|
+
constructor(traceInfo, apiKey, minLevel = LogLevel.INFO) {
|
|
14
|
+
super(traceInfo);
|
|
15
|
+
this.apiKey = apiKey;
|
|
16
|
+
this.minLevel = minLevel;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Log level priority mapping (higher number = higher priority)
|
|
20
|
+
*/
|
|
21
|
+
static LOG_LEVEL_PRIORITY = {
|
|
22
|
+
[LogLevel.EMERGENCY]: 8,
|
|
23
|
+
[LogLevel.ALERT]: 7,
|
|
24
|
+
[LogLevel.CRITICAL]: 6,
|
|
25
|
+
[LogLevel.ERROR]: 5,
|
|
26
|
+
[LogLevel.WARNING]: 4,
|
|
27
|
+
[LogLevel.NOTICE]: 3,
|
|
28
|
+
[LogLevel.INFO]: 2,
|
|
29
|
+
[LogLevel.DEBUG]: 1,
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Check if a log level should be sent
|
|
33
|
+
*/
|
|
34
|
+
shouldLog(level) {
|
|
35
|
+
return (BetterStackLogger.LOG_LEVEL_PRIORITY[level] >=
|
|
36
|
+
BetterStackLogger.LOG_LEVEL_PRIORITY[this.minLevel]);
|
|
37
|
+
}
|
|
38
|
+
writeLog(level, message, context) {
|
|
39
|
+
if (!this.shouldLog(level)) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Build the log payload
|
|
43
|
+
const payload = {
|
|
44
|
+
dt: this.traceInfo.timestamp,
|
|
45
|
+
level: level,
|
|
46
|
+
message: message,
|
|
47
|
+
trace_id: this.traceInfo.id,
|
|
48
|
+
environment: this.traceInfo.environment,
|
|
49
|
+
runtime: this.traceInfo.runtime,
|
|
50
|
+
tenant: this.traceInfo.tenant,
|
|
51
|
+
...context,
|
|
52
|
+
};
|
|
53
|
+
// Send to BetterStack asynchronously (fire and forget)
|
|
54
|
+
this.sendLog(payload).catch(error => {
|
|
55
|
+
// Fail silently - don't break app if logging fails
|
|
56
|
+
if (process.env.NODE_ENV === 'development') {
|
|
57
|
+
console.error('[BetterStackLogger] Failed to send log:', error);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Send log to BetterStack
|
|
63
|
+
*/
|
|
64
|
+
async sendLog(payload) {
|
|
65
|
+
const response = await fetch(this.endpoint, {
|
|
66
|
+
method: 'POST',
|
|
67
|
+
headers: {
|
|
68
|
+
'Content-Type': 'application/json',
|
|
69
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
70
|
+
},
|
|
71
|
+
body: JSON.stringify(payload),
|
|
72
|
+
});
|
|
73
|
+
if (!response.ok) {
|
|
74
|
+
throw new Error(`BetterStack API error: ${response.status} ${response.statusText}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { LogLevel } from '../../types/logging.types.js';
|
|
2
|
+
import type { LoggerInterface, TraceInfo } from '../../types/logging.types.js';
|
|
3
|
+
import { BaseLogger } from './BaseLogger.js';
|
|
4
|
+
/**
|
|
5
|
+
* Multi-logger implementation (Composite pattern)
|
|
6
|
+
* Dispatches log messages to multiple logger instances
|
|
7
|
+
*
|
|
8
|
+
* Use this to log to multiple destinations simultaneously (e.g., console + BetterStack)
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const logger = new MultiLogger(traceInfo, [
|
|
13
|
+
* new ConsoleLogger(traceInfo, LogLevel.DEBUG),
|
|
14
|
+
* new BetterStackLogger(traceInfo, apiKey)
|
|
15
|
+
* ]);
|
|
16
|
+
*
|
|
17
|
+
* logger.info('This goes to both console and BetterStack');
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare class MultiLogger extends BaseLogger {
|
|
21
|
+
private readonly loggers;
|
|
22
|
+
constructor(traceInfo: TraceInfo, loggers: LoggerInterface[]);
|
|
23
|
+
/**
|
|
24
|
+
* Dispatch log to all configured loggers
|
|
25
|
+
*/
|
|
26
|
+
protected writeLog(level: LogLevel, message: string, context?: Record<string, unknown>): void;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=MultiLogger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiLogger.d.ts","sourceRoot":"","sources":["../../../src/services/logger/MultiLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,WAAY,SAAQ,UAAU;IAGvC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADxB,SAAS,EAAE,SAAS,EACH,OAAO,EAAE,eAAe,EAAE;IAK7C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAK9F"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { BaseLogger } from './BaseLogger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Multi-logger implementation (Composite pattern)
|
|
4
|
+
* Dispatches log messages to multiple logger instances
|
|
5
|
+
*
|
|
6
|
+
* Use this to log to multiple destinations simultaneously (e.g., console + BetterStack)
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const logger = new MultiLogger(traceInfo, [
|
|
11
|
+
* new ConsoleLogger(traceInfo, LogLevel.DEBUG),
|
|
12
|
+
* new BetterStackLogger(traceInfo, apiKey)
|
|
13
|
+
* ]);
|
|
14
|
+
*
|
|
15
|
+
* logger.info('This goes to both console and BetterStack');
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export class MultiLogger extends BaseLogger {
|
|
19
|
+
loggers;
|
|
20
|
+
constructor(traceInfo, loggers) {
|
|
21
|
+
super(traceInfo);
|
|
22
|
+
this.loggers = loggers;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Dispatch log to all configured loggers
|
|
26
|
+
*/
|
|
27
|
+
writeLog(level, message, context) {
|
|
28
|
+
this.loggers.forEach(logger => {
|
|
29
|
+
logger.log(level, message, context);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.types.d.ts","sourceRoot":"","sources":["../../src/types/logging.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,QAAQ;IAClB,SAAS,cAAc;IACvB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,IAAI,SAAS;
|
|
1
|
+
{"version":3,"file":"logging.types.d.ts","sourceRoot":"","sources":["../../src/types/logging.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,QAAQ;IAClB,SAAS,cAAc;IACvB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,WAAW,gBAAgB;IAC3B,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sBAAsB;IACtB,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,YAAY,IAAI,SAAS,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEpE;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEhE;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEnE;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEhE;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAElE;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEjE;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAE/D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEhE;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/utils/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAyB,MAAM,2BAA2B,CAAC;AAClG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/utils/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAyB,MAAM,2BAA2B,CAAC;AAClG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAQvD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,GAC3B,eAAe,CA6CjB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CASvD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAQtC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,GAAE,QAAwB,GAAG,OAAO,CAE7F"}
|
package/dist/utils/logging.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { ConsoleLogger } from '../services/logger/ConsoleLogger.js';
|
|
2
2
|
import { NullLogger } from '../services/logger/NullLogger.js';
|
|
3
|
+
import { BetterStackLogger } from '../services/logger/BetterStackLogger.js';
|
|
4
|
+
import { MultiLogger } from '../services/logger/MultiLogger.js';
|
|
3
5
|
import { LogLevel as LogLevelEnum, LoggerType as LoggerTypeEnum } from '../types/logging.types.js';
|
|
4
6
|
import { getEnv } from './env.js';
|
|
5
7
|
/**
|
|
@@ -18,6 +20,28 @@ export function createLogger(config) {
|
|
|
18
20
|
switch (loggerType.toLowerCase()) {
|
|
19
21
|
case LoggerTypeEnum.CONSOLE:
|
|
20
22
|
return new ConsoleLogger(traceInfo, logLevel);
|
|
23
|
+
case LoggerTypeEnum.BETTERSTACK: {
|
|
24
|
+
const apiKey = getEnv('VITE_BETTERSTACK_API_KEY');
|
|
25
|
+
if (!apiKey) {
|
|
26
|
+
console.warn('[Logger] BETTERSTACK logger requires VITE_BETTERSTACK_API_KEY, falling back to NULL');
|
|
27
|
+
return new NullLogger(traceInfo);
|
|
28
|
+
}
|
|
29
|
+
return new BetterStackLogger(traceInfo, apiKey, logLevel);
|
|
30
|
+
}
|
|
31
|
+
case LoggerTypeEnum.MULTI: {
|
|
32
|
+
const loggers = [
|
|
33
|
+
new ConsoleLogger(traceInfo, logLevel),
|
|
34
|
+
];
|
|
35
|
+
// Add BetterStack if API key is available
|
|
36
|
+
const apiKey = getEnv('VITE_BETTERSTACK_API_KEY');
|
|
37
|
+
if (apiKey) {
|
|
38
|
+
loggers.push(new BetterStackLogger(traceInfo, apiKey, logLevel));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.warn('[Logger] VITE_BETTERSTACK_API_KEY not set, only console logging will be used');
|
|
42
|
+
}
|
|
43
|
+
return new MultiLogger(traceInfo, loggers);
|
|
44
|
+
}
|
|
21
45
|
case LoggerTypeEnum.NULL:
|
|
22
46
|
default:
|
|
23
47
|
return new NullLogger(traceInfo);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quvel-kit/core",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.21",
|
|
4
4
|
"description": "Core utilities for Quvel UI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -39,6 +39,10 @@
|
|
|
39
39
|
"import": "./dist/composables/index.js",
|
|
40
40
|
"types": "./dist/composables/index.d.ts"
|
|
41
41
|
},
|
|
42
|
+
"./orm": {
|
|
43
|
+
"import": "./dist/orm/index.js",
|
|
44
|
+
"types": "./dist/orm/index.d.ts"
|
|
45
|
+
},
|
|
42
46
|
"./global": {
|
|
43
47
|
"types": "./global.d.ts"
|
|
44
48
|
}
|