@infosel-sdk/logger 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +233 -0
- package/package.json +51 -0
- package/src/data/datasources/console_logger_datasource.d.ts +31 -0
- package/src/data/datasources/console_logger_datasource.js +96 -0
- package/src/data/datasources/console_logger_datasource.js.map +1 -0
- package/src/data/datasources/pino_logger_datasource.d.ts +32 -0
- package/src/data/datasources/pino_logger_datasource.js +103 -0
- package/src/data/datasources/pino_logger_datasource.js.map +1 -0
- package/src/data/di/logger_component_impl.d.ts +13 -0
- package/src/data/di/logger_component_impl.js +103 -0
- package/src/data/di/logger_component_impl.js.map +1 -0
- package/src/data/repositories/logger_repository_impl.d.ts +34 -0
- package/src/data/repositories/logger_repository_impl.js +58 -0
- package/src/data/repositories/logger_repository_impl.js.map +1 -0
- package/src/domain/datasources/logger_datasource.d.ts +16 -0
- package/src/domain/datasources/logger_datasource.js +3 -0
- package/src/domain/datasources/logger_datasource.js.map +1 -0
- package/src/domain/di/logger_component.d.ts +127 -0
- package/src/domain/di/logger_component.js +3 -0
- package/src/domain/di/logger_component.js.map +1 -0
- package/src/domain/entities/error_types.d.ts +39 -0
- package/src/domain/entities/error_types.js +6 -0
- package/src/domain/entities/error_types.js.map +1 -0
- package/src/domain/entities/index.d.ts +3 -0
- package/src/domain/entities/index.js +7 -0
- package/src/domain/entities/index.js.map +1 -0
- package/src/domain/entities/log_entry.d.ts +13 -0
- package/src/domain/entities/log_entry.js +3 -0
- package/src/domain/entities/log_entry.js.map +1 -0
- package/src/domain/entities/log_level.d.ts +13 -0
- package/src/domain/entities/log_level.js +23 -0
- package/src/domain/entities/log_level.js.map +1 -0
- package/src/domain/entities/logger_config.d.ts +52 -0
- package/src/domain/entities/logger_config.js +18 -0
- package/src/domain/entities/logger_config.js.map +1 -0
- package/src/domain/repositories/logger_repository.d.ts +47 -0
- package/src/domain/repositories/logger_repository.js +3 -0
- package/src/domain/repositories/logger_repository.js.map +1 -0
- package/src/domain/use_cases/log_error.d.ts +57 -0
- package/src/domain/use_cases/log_error.js +143 -0
- package/src/domain/use_cases/log_error.js.map +1 -0
- package/src/domain/use_cases/log_message.d.ts +21 -0
- package/src/domain/use_cases/log_message.js +29 -0
- package/src/domain/use_cases/log_message.js.map +1 -0
- package/src/index.d.ts +13 -0
- package/src/index.js +21 -0
- package/src/index.js.map +1 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LogError = void 0;
|
|
4
|
+
const log_level_1 = require("../entities/log_level");
|
|
5
|
+
/**
|
|
6
|
+
* Use case for intelligent error logging
|
|
7
|
+
* Automatically detects error type and determines appropriate log level
|
|
8
|
+
*/
|
|
9
|
+
class LogError {
|
|
10
|
+
constructor(repository) {
|
|
11
|
+
this.repository = repository;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Log an error with automatic type detection and level determination
|
|
15
|
+
*
|
|
16
|
+
* Rules:
|
|
17
|
+
* - Axios/Fetch errors with status 400-499: WARN
|
|
18
|
+
* - Axios/Fetch errors with status 500+: ERROR
|
|
19
|
+
* - All other errors: ERROR
|
|
20
|
+
*
|
|
21
|
+
* @param message Clear message describing what failed
|
|
22
|
+
* @param error The error object to analyze
|
|
23
|
+
* @param options Additional log options (service, context, metadata)
|
|
24
|
+
*/
|
|
25
|
+
execute(message, error, options) {
|
|
26
|
+
const errorInfo = this.analyzeError(error);
|
|
27
|
+
const level = this.determineLogLevel(errorInfo);
|
|
28
|
+
// Merge error info with any additional metadata
|
|
29
|
+
const additionalMetadata = (options === null || options === void 0 ? void 0 : options.metadata) || {};
|
|
30
|
+
const metadata = Object.assign(Object.assign({}, errorInfo), additionalMetadata);
|
|
31
|
+
this.repository.log(level, message, {
|
|
32
|
+
service: options === null || options === void 0 ? void 0 : options.service,
|
|
33
|
+
context: options === null || options === void 0 ? void 0 : options.context,
|
|
34
|
+
metadata,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Analyze error and extract relevant information
|
|
39
|
+
*/
|
|
40
|
+
analyzeError(error) {
|
|
41
|
+
// Check if it's an Axios error
|
|
42
|
+
if (this.isAxiosError(error)) {
|
|
43
|
+
return this.extractAxiosErrorInfo(error);
|
|
44
|
+
}
|
|
45
|
+
// Check if it's a Fetch error
|
|
46
|
+
if (this.isFetchError(error)) {
|
|
47
|
+
return this.extractFetchErrorInfo(error);
|
|
48
|
+
}
|
|
49
|
+
// Standard Error
|
|
50
|
+
if (error instanceof Error) {
|
|
51
|
+
return this.extractStandardErrorInfo(error);
|
|
52
|
+
}
|
|
53
|
+
// Unknown error type
|
|
54
|
+
return this.extractUnknownErrorInfo(error);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Determine log level based on error info
|
|
58
|
+
*/
|
|
59
|
+
determineLogLevel(errorInfo) {
|
|
60
|
+
// For HTTP errors (Axios/Fetch)
|
|
61
|
+
if (errorInfo.statusCode) {
|
|
62
|
+
if (errorInfo.statusCode >= 400 && errorInfo.statusCode < 500) {
|
|
63
|
+
return log_level_1.LogLevel.WARN; // Client errors
|
|
64
|
+
}
|
|
65
|
+
if (errorInfo.statusCode >= 500) {
|
|
66
|
+
return log_level_1.LogLevel.ERROR; // Server errors
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// All other errors are ERROR level
|
|
70
|
+
return log_level_1.LogLevel.ERROR;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if error is an Axios error
|
|
74
|
+
*/
|
|
75
|
+
isAxiosError(error) {
|
|
76
|
+
return error && error.isAxiosError === true;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if error is a Fetch error
|
|
80
|
+
*/
|
|
81
|
+
isFetchError(error) {
|
|
82
|
+
return (error &&
|
|
83
|
+
error instanceof Error &&
|
|
84
|
+
(error.response instanceof Response ||
|
|
85
|
+
typeof error.status === 'number'));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Extract information from Axios error
|
|
89
|
+
*/
|
|
90
|
+
extractAxiosErrorInfo(error) {
|
|
91
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
92
|
+
return {
|
|
93
|
+
errorMessage: error.message,
|
|
94
|
+
errorStack: error.stack,
|
|
95
|
+
errorName: error.name,
|
|
96
|
+
errorType: 'axios',
|
|
97
|
+
statusCode: (_a = error.response) === null || _a === void 0 ? void 0 : _a.status,
|
|
98
|
+
statusText: (_b = error.response) === null || _b === void 0 ? void 0 : _b.statusText,
|
|
99
|
+
url: (_c = error.config) === null || _c === void 0 ? void 0 : _c.url,
|
|
100
|
+
method: (_e = (_d = error.config) === null || _d === void 0 ? void 0 : _d.method) === null || _e === void 0 ? void 0 : _e.toUpperCase(),
|
|
101
|
+
responseData: (_f = error.response) === null || _f === void 0 ? void 0 : _f.data,
|
|
102
|
+
requestData: (_g = error.config) === null || _g === void 0 ? void 0 : _g.data,
|
|
103
|
+
errorCode: error.code,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Extract information from Fetch error
|
|
108
|
+
*/
|
|
109
|
+
extractFetchErrorInfo(error) {
|
|
110
|
+
var _a, _b, _c;
|
|
111
|
+
return {
|
|
112
|
+
errorMessage: error.message,
|
|
113
|
+
errorStack: error.stack,
|
|
114
|
+
errorName: error.name,
|
|
115
|
+
errorType: 'fetch',
|
|
116
|
+
statusCode: error.status || ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status),
|
|
117
|
+
statusText: error.statusText || ((_b = error.response) === null || _b === void 0 ? void 0 : _b.statusText),
|
|
118
|
+
url: (_c = error.response) === null || _c === void 0 ? void 0 : _c.url,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Extract information from standard Error
|
|
123
|
+
*/
|
|
124
|
+
extractStandardErrorInfo(error) {
|
|
125
|
+
return {
|
|
126
|
+
errorMessage: error.message,
|
|
127
|
+
errorStack: error.stack,
|
|
128
|
+
errorName: error.name,
|
|
129
|
+
errorType: 'standard',
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Extract information from unknown error
|
|
134
|
+
*/
|
|
135
|
+
extractUnknownErrorInfo(error) {
|
|
136
|
+
return {
|
|
137
|
+
errorMessage: String(error),
|
|
138
|
+
errorType: 'unknown',
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.LogError = LogError;
|
|
143
|
+
//# sourceMappingURL=log_error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log_error.js","sourceRoot":"","sources":["../../../../../../packages/logger/src/domain/use_cases/log_error.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { LogLevel } from '../entities/log_level';
|
|
2
|
+
import { LoggerRepository, LogOptions } from '../repositories/logger_repository';
|
|
3
|
+
/**
|
|
4
|
+
* Use case for logging messages
|
|
5
|
+
*/
|
|
6
|
+
export declare class LogMessage {
|
|
7
|
+
private repository;
|
|
8
|
+
constructor(repository: LoggerRepository);
|
|
9
|
+
/**
|
|
10
|
+
* Execute log operation
|
|
11
|
+
* @param level Log level
|
|
12
|
+
* @param message Message to log
|
|
13
|
+
* @param options Optional log options (metadata, service, context)
|
|
14
|
+
*/
|
|
15
|
+
execute(level: LogLevel, message: string, options?: LogOptions): void;
|
|
16
|
+
/**
|
|
17
|
+
* Check if a log level is enabled
|
|
18
|
+
* @param level Log level to check
|
|
19
|
+
*/
|
|
20
|
+
isLevelEnabled(level: LogLevel): boolean;
|
|
21
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LogMessage = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Use case for logging messages
|
|
6
|
+
*/
|
|
7
|
+
class LogMessage {
|
|
8
|
+
constructor(repository) {
|
|
9
|
+
this.repository = repository;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Execute log operation
|
|
13
|
+
* @param level Log level
|
|
14
|
+
* @param message Message to log
|
|
15
|
+
* @param options Optional log options (metadata, service, context)
|
|
16
|
+
*/
|
|
17
|
+
execute(level, message, options) {
|
|
18
|
+
this.repository.log(level, message, options);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Check if a log level is enabled
|
|
22
|
+
* @param level Log level to check
|
|
23
|
+
*/
|
|
24
|
+
isLevelEnabled(level) {
|
|
25
|
+
return this.repository.isLevelEnabled(level);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.LogMessage = LogMessage;
|
|
29
|
+
//# sourceMappingURL=log_message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log_message.js","sourceRoot":"","sources":["../../../../../../packages/logger/src/domain/use_cases/log_message.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,UAAU;IACrB,YAAoB,UAA4B;QAA5B,eAAU,GAAV,UAAU,CAAkB;IAAG,CAAC;IAEpD;;;;;OAKG;IACH,OAAO,CAAC,KAAe,EAAE,OAAe,EAAE,OAAoB;QAC5D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,KAAe;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;CACF;AApBD,gCAoBC"}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import InfoselLogger from './data/di/logger_component_impl';
|
|
2
|
+
export * from './domain/entities';
|
|
3
|
+
export * from './domain/di/logger_component';
|
|
4
|
+
export * from './domain/repositories/logger_repository';
|
|
5
|
+
export * from './domain/datasources/logger_datasource';
|
|
6
|
+
export * from './domain/use_cases/log_message';
|
|
7
|
+
export * from './domain/use_cases/log_error';
|
|
8
|
+
export * from './domain/entities/error_types';
|
|
9
|
+
import { LogLevel } from './domain/entities/log_level';
|
|
10
|
+
export { LogLevel };
|
|
11
|
+
export { ConsoleLoggerDataSource } from './data/datasources/console_logger_datasource';
|
|
12
|
+
export { PinoLoggerDataSource } from './data/datasources/pino_logger_datasource';
|
|
13
|
+
export default InfoselLogger;
|
package/src/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PinoLoggerDataSource = exports.ConsoleLoggerDataSource = exports.LogLevel = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const logger_component_impl_1 = tslib_1.__importDefault(require("./data/di/logger_component_impl"));
|
|
6
|
+
tslib_1.__exportStar(require("./domain/entities"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./domain/di/logger_component"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./domain/repositories/logger_repository"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./domain/datasources/logger_datasource"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./domain/use_cases/log_message"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./domain/use_cases/log_error"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./domain/entities/error_types"), exports);
|
|
13
|
+
const log_level_1 = require("./domain/entities/log_level");
|
|
14
|
+
Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return log_level_1.LogLevel; } });
|
|
15
|
+
// Export datasource implementations
|
|
16
|
+
var console_logger_datasource_1 = require("./data/datasources/console_logger_datasource");
|
|
17
|
+
Object.defineProperty(exports, "ConsoleLoggerDataSource", { enumerable: true, get: function () { return console_logger_datasource_1.ConsoleLoggerDataSource; } });
|
|
18
|
+
var pino_logger_datasource_1 = require("./data/datasources/pino_logger_datasource");
|
|
19
|
+
Object.defineProperty(exports, "PinoLoggerDataSource", { enumerable: true, get: function () { return pino_logger_datasource_1.PinoLoggerDataSource; } });
|
|
20
|
+
exports.default = logger_component_impl_1.default;
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/logger/src/index.ts"],"names":[],"mappings":";;;;AAAA,oGAA4D;AAE5D,4DAAkC;AAClC,uEAA6C;AAC7C,kFAAwD;AACxD,iFAAuD;AACvD,yEAA+C;AAC/C,uEAA6C;AAC7C,wEAA8C;AAC9C,2DAAuD;AAC9C,yFADA,oBAAQ,OACA;AAEjB,oCAAoC;AACpC,0FAAuF;AAA9E,oIAAA,uBAAuB,OAAA;AAChC,oFAAiF;AAAxE,8HAAA,oBAAoB,OAAA;AAE7B,kBAAe,+BAAa,CAAC"}
|