@xrystal/core 3.5.8 → 3.6.1
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/package.json +1 -1
- package/source/loader/logger/index.d.ts +1 -1
- package/source/loader/logger/index.js +31 -35
- package/x/docker/Dockerfile +1 -2
- package/x/dist/index.d.ts +0 -2
- package/x/dist/index.js +0 -8
- package/x/dist/loader/configs/index.d.ts +0 -13
- package/x/dist/loader/configs/index.js +0 -17
- package/x/dist/loader/events/index.d.ts +0 -6
- package/x/dist/loader/events/index.js +0 -25
- package/x/dist/loader/index.d.ts +0 -6
- package/x/dist/loader/index.js +0 -6
- package/x/dist/loader/localizations/index.d.ts +0 -14
- package/x/dist/loader/localizations/index.js +0 -32
- package/x/dist/loader/logger/index.d.ts +0 -28
- package/x/dist/loader/logger/index.js +0 -175
- package/x/dist/loader/system/index.d.ts +0 -8
- package/x/dist/loader/system/index.js +0 -14
- package/x/dist/project/index.d.ts +0 -6
- package/x/dist/project/index.js +0 -63
- package/x/dist/utils/constants/index.d.ts +0 -8
- package/x/dist/utils/constants/index.js +0 -10
- package/x/dist/utils/helpers/date/index.d.ts +0 -16
- package/x/dist/utils/helpers/date/index.js +0 -48
- package/x/dist/utils/helpers/filters/index.d.ts +0 -17
- package/x/dist/utils/helpers/filters/index.js +0 -44
- package/x/dist/utils/helpers/hash/crypto.d.ts +0 -3
- package/x/dist/utils/helpers/hash/crypto.js +0 -22
- package/x/dist/utils/helpers/id/index.d.ts +0 -13
- package/x/dist/utils/helpers/id/index.js +0 -24
- package/x/dist/utils/helpers/index.d.ts +0 -17
- package/x/dist/utils/helpers/index.js +0 -17
- package/x/dist/utils/helpers/ip/index.d.ts +0 -1
- package/x/dist/utils/helpers/ip/index.js +0 -3
- package/x/dist/utils/helpers/is/index.d.ts +0 -11
- package/x/dist/utils/helpers/is/index.js +0 -35
- package/x/dist/utils/helpers/locales/index.d.ts +0 -52
- package/x/dist/utils/helpers/locales/index.js +0 -161
- package/x/dist/utils/helpers/locales copy/index.d.ts +0 -52
- package/x/dist/utils/helpers/locales copy/index.js +0 -161
- package/x/dist/utils/helpers/math/index.d.ts +0 -2
- package/x/dist/utils/helpers/math/index.js +0 -14
- package/x/dist/utils/helpers/objects/index.d.ts +0 -1
- package/x/dist/utils/helpers/objects/index.js +0 -55
- package/x/dist/utils/helpers/path/index.d.ts +0 -2
- package/x/dist/utils/helpers/path/index.js +0 -4
- package/x/dist/utils/helpers/regex/checkSpecialRegexControl.d.ts +0 -1
- package/x/dist/utils/helpers/regex/checkSpecialRegexControl.js +0 -3
- package/x/dist/utils/helpers/string/index.d.ts +0 -1
- package/x/dist/utils/helpers/string/index.js +0 -9
- package/x/dist/utils/helpers/timer/index.d.ts +0 -3
- package/x/dist/utils/helpers/timer/index.js +0 -5
- package/x/dist/utils/helpers/tmp/index.d.ts +0 -8
- package/x/dist/utils/helpers/tmp/index.js +0 -109
- package/x/dist/utils/helpers/validates/index.d.ts +0 -5
- package/x/dist/utils/helpers/validates/index.js +0 -20
- package/x/dist/utils/index.d.ts +0 -3
- package/x/dist/utils/index.js +0 -3
- package/x/dist/utils/models/classes/class.controller.d.ts +0 -80
- package/x/dist/utils/models/classes/class.controller.js +0 -164
- package/x/dist/utils/models/classes/class.response.d.ts +0 -17
- package/x/dist/utils/models/classes/class.response.js +0 -37
- package/x/dist/utils/models/classes/class.services.d.ts +0 -129
- package/x/dist/utils/models/classes/class.services.js +0 -344
- package/x/dist/utils/models/classes/class.tmp-file-loader.d.ts +0 -8
- package/x/dist/utils/models/classes/class.tmp-file-loader.js +0 -38
- package/x/dist/utils/models/classes/class.x.d.ts +0 -12
- package/x/dist/utils/models/classes/class.x.js +0 -16
- package/x/dist/utils/models/enums/index.d.ts +0 -117
- package/x/dist/utils/models/enums/index.js +0 -133
- package/x/dist/utils/models/index.d.ts +0 -8
- package/x/dist/utils/models/index.js +0 -8
- package/x/dist/utils/models/types/index.d.ts +0 -3
- package/x/dist/utils/models/types/index.js +0 -2
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@ export default class LoggerService {
|
|
|
17
17
|
private getConsoleFormat;
|
|
18
18
|
winston: CustomLogger;
|
|
19
19
|
constructor();
|
|
20
|
-
runWithId: (id: string, callback: () =>
|
|
20
|
+
runWithId: <T>(id: string, callback: () => T) => T;
|
|
21
21
|
load: (config: Record<string, any>) => Promise<void>;
|
|
22
22
|
winstonLoader: ({ loadPath, loggerLevel }: {
|
|
23
23
|
loadPath: string;
|
|
@@ -12,12 +12,8 @@ class KafkaTransport extends Transport {
|
|
|
12
12
|
this.service = service;
|
|
13
13
|
}
|
|
14
14
|
log(info, callback) {
|
|
15
|
-
setImmediate(() =>
|
|
16
|
-
|
|
17
|
-
});
|
|
18
|
-
this.service["logToKafka"](info).finally(() => {
|
|
19
|
-
callback();
|
|
20
|
-
});
|
|
15
|
+
setImmediate(() => this.emit("logged", info));
|
|
16
|
+
this.service["logToKafka"](info).finally(() => callback());
|
|
21
17
|
}
|
|
22
18
|
}
|
|
23
19
|
const customLevels = {
|
|
@@ -51,9 +47,14 @@ export default class LoggerService {
|
|
|
51
47
|
};
|
|
52
48
|
getTracingFormat = format((info) => {
|
|
53
49
|
const store = LoggerService.storage.getStore();
|
|
54
|
-
if (store) {
|
|
50
|
+
if (store && store.has("correlationId")) {
|
|
55
51
|
info.id = store.get("correlationId");
|
|
56
52
|
}
|
|
53
|
+
Object.keys(info).forEach(key => {
|
|
54
|
+
if (info[key] instanceof Headers) {
|
|
55
|
+
info[key] = Object.fromEntries(info[key].entries());
|
|
56
|
+
}
|
|
57
|
+
});
|
|
57
58
|
return info;
|
|
58
59
|
});
|
|
59
60
|
getConsoleFormat() {
|
|
@@ -68,11 +69,7 @@ export default class LoggerService {
|
|
|
68
69
|
winston = winston.createLogger({
|
|
69
70
|
level: "debug",
|
|
70
71
|
levels: customLevels,
|
|
71
|
-
transports: [
|
|
72
|
-
new winston.transports.Console({
|
|
73
|
-
format: this.getConsoleFormat()
|
|
74
|
-
})
|
|
75
|
-
]
|
|
72
|
+
transports: [new winston.transports.Console({ format: this.getConsoleFormat() })]
|
|
76
73
|
});
|
|
77
74
|
constructor() {
|
|
78
75
|
winston.addColors(customColors);
|
|
@@ -92,23 +89,24 @@ export default class LoggerService {
|
|
|
92
89
|
const kafka = new Kafka({
|
|
93
90
|
clientId: this.serviceName,
|
|
94
91
|
brokers: brokers,
|
|
95
|
-
logLevel: logLevel.
|
|
92
|
+
logLevel: logLevel.NOTHING
|
|
96
93
|
});
|
|
97
94
|
this.kafkaProducer = kafka.producer({
|
|
98
95
|
createPartitioner: Partitioners.DefaultPartitioner,
|
|
99
|
-
retry: {
|
|
100
|
-
initialRetryTime: 100,
|
|
101
|
-
retries: 8
|
|
102
|
-
}
|
|
96
|
+
retry: { initialRetryTime: 500, retries: 5 }
|
|
103
97
|
});
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
98
|
+
const connectKafka = async () => {
|
|
99
|
+
try {
|
|
100
|
+
await this.kafkaProducer?.connect();
|
|
101
|
+
this.isKafkaReady = true;
|
|
102
|
+
this.winston.info("Kafka connected successfully");
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
this.isKafkaReady = false;
|
|
106
|
+
setTimeout(connectKafka, 10000);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
connectKafka();
|
|
112
110
|
}
|
|
113
111
|
this.winstonLoader({
|
|
114
112
|
loadPath: config?.loadPath || "./logs",
|
|
@@ -117,11 +115,10 @@ export default class LoggerService {
|
|
|
117
115
|
};
|
|
118
116
|
winstonLoader = ({ loadPath, loggerLevel }) => {
|
|
119
117
|
const { combine, timestamp, json, errors } = format;
|
|
120
|
-
const
|
|
118
|
+
const tracing = this.getTracingFormat();
|
|
119
|
+
const jsonFileFormat = combine(tracing, timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), errors({ stack: true }), json({ replacer: this.safeReplacer }));
|
|
121
120
|
const transports = [
|
|
122
|
-
new winston.transports.Console({
|
|
123
|
-
format: this.getConsoleFormat()
|
|
124
|
-
}),
|
|
121
|
+
new winston.transports.Console({ format: this.getConsoleFormat() }),
|
|
125
122
|
new winston.transports.DailyRotateFile({
|
|
126
123
|
filename: path.resolve(loadPath, "error", "%DATE%_error.log"),
|
|
127
124
|
level: "error",
|
|
@@ -140,13 +137,12 @@ export default class LoggerService {
|
|
|
140
137
|
if (this.kafkaProducer) {
|
|
141
138
|
transports.push(new KafkaTransport({ level: loggerLevel }, this));
|
|
142
139
|
}
|
|
143
|
-
|
|
140
|
+
this.winston = winston.createLogger({
|
|
144
141
|
level: loggerLevel,
|
|
145
142
|
levels: customLevels,
|
|
146
143
|
transports
|
|
147
144
|
});
|
|
148
|
-
this.winston
|
|
149
|
-
return winstonLogger;
|
|
145
|
+
return this.winston;
|
|
150
146
|
};
|
|
151
147
|
async logToKafka(info) {
|
|
152
148
|
if (!this.kafkaProducer || !this.isKafkaReady)
|
|
@@ -158,18 +154,18 @@ export default class LoggerService {
|
|
|
158
154
|
messages: [{
|
|
159
155
|
value: JSON.stringify({
|
|
160
156
|
id: id || null,
|
|
157
|
+
timestamp: new Date().toISOString(),
|
|
161
158
|
service: this.serviceName,
|
|
162
159
|
env: this.environment,
|
|
163
160
|
level,
|
|
164
161
|
message,
|
|
165
|
-
...rest
|
|
166
|
-
timestamp: new Date().toISOString()
|
|
162
|
+
...rest
|
|
167
163
|
}, this.safeReplacer)
|
|
168
164
|
}]
|
|
169
165
|
});
|
|
170
166
|
}
|
|
171
167
|
catch (err) {
|
|
172
|
-
|
|
168
|
+
this.isKafkaReady = false;
|
|
173
169
|
}
|
|
174
170
|
}
|
|
175
171
|
}
|
package/x/docker/Dockerfile
CHANGED
|
@@ -18,9 +18,8 @@ WORKDIR /lib/xrystal-core
|
|
|
18
18
|
COPY --from=builder /app/source ./source
|
|
19
19
|
COPY --from=builder /app/bin ./bin
|
|
20
20
|
COPY --from=builder /app/x ./x
|
|
21
|
+
RUN rm -rf ./x/dist && ls -la ./x
|
|
21
22
|
COPY --from=builder /app/package.json ./package.json
|
|
22
23
|
COPY --from=builder /app/bun.lockb* ./
|
|
23
24
|
|
|
24
|
-
RUN rm -rf ./x/dist
|
|
25
|
-
|
|
26
25
|
RUN bun install --production
|
package/x/dist/index.d.ts
DELETED
package/x/dist/index.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import SystemService from '../system/index';
|
|
2
|
-
export default class ConfigsService {
|
|
3
|
-
protected _globalEnvFileName: string;
|
|
4
|
-
protected _systemService: SystemService;
|
|
5
|
-
static tmpFolderPath: string;
|
|
6
|
-
private _envLoadPath;
|
|
7
|
-
load: ({ tmpFolderPath, systemService, envLoadPath, globalEnvFileName }: {
|
|
8
|
-
tmpFolderPath: string;
|
|
9
|
-
systemService: SystemService;
|
|
10
|
-
envLoadPath: string;
|
|
11
|
-
globalEnvFileName?: string | null;
|
|
12
|
-
}) => any;
|
|
13
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export default class ConfigsService {
|
|
2
|
-
_globalEnvFileName = 'global';
|
|
3
|
-
_systemService;
|
|
4
|
-
static tmpFolderPath;
|
|
5
|
-
_envLoadPath = '';
|
|
6
|
-
load = ({ tmpFolderPath, systemService, envLoadPath, globalEnvFileName }) => {
|
|
7
|
-
ConfigsService.tmpFolderPath = tmpFolderPath;
|
|
8
|
-
this._systemService = systemService;
|
|
9
|
-
this._envLoadPath = `${envLoadPath}`;
|
|
10
|
-
/*
|
|
11
|
-
this._dynamicEnvLoader({
|
|
12
|
-
nodeEnv
|
|
13
|
-
globalEnvFileName
|
|
14
|
-
})
|
|
15
|
-
*/
|
|
16
|
-
};
|
|
17
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import LoggersLoader from '../logger/index';
|
|
2
|
-
import { x, LoggerLayerEnum } from '../../utils/index';
|
|
3
|
-
export default class EventsService {
|
|
4
|
-
logger = x.get(LoggersLoader);
|
|
5
|
-
load = ({}) => {
|
|
6
|
-
this._globalLoader();
|
|
7
|
-
};
|
|
8
|
-
_globalLoader = () => {
|
|
9
|
-
process.on("uncaughtException", (exception) => {
|
|
10
|
-
this.logger.winston.log({
|
|
11
|
-
level: LoggerLayerEnum[LoggerLayerEnum.CRITICAL].toLowerCase(),
|
|
12
|
-
message: `UncaughtException: ${exception}`,
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
process.on("unhandledRejection", (exception) => {
|
|
16
|
-
this.logger.winston.log({
|
|
17
|
-
level: LoggerLayerEnum[LoggerLayerEnum.CRITICAL].toLowerCase(),
|
|
18
|
-
message: `UnhandledRejection: ${exception}`,
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
get global() {
|
|
23
|
-
return this._globalLoader();
|
|
24
|
-
}
|
|
25
|
-
}
|
package/x/dist/loader/index.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import SystemService from "./system";
|
|
2
|
-
import ConfigsService from "./configs";
|
|
3
|
-
import LoggerService from "./logger";
|
|
4
|
-
import EventsService from "./events";
|
|
5
|
-
import LocalizationsService from "./localizations";
|
|
6
|
-
export { SystemService, ConfigsService, LoggerService, EventsService, LocalizationsService };
|
package/x/dist/loader/index.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import SystemService from "./system";
|
|
2
|
-
import ConfigsService from "./configs";
|
|
3
|
-
import LoggerService from "./logger";
|
|
4
|
-
import EventsService from "./events";
|
|
5
|
-
import LocalizationsService from "./localizations";
|
|
6
|
-
export { SystemService, ConfigsService, LoggerService, EventsService, LocalizationsService };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export default class LocalizationsService {
|
|
2
|
-
_instance: any;
|
|
3
|
-
load: ({ loadPath, fallbackLang, preloadLang, }: {
|
|
4
|
-
loadPath: string;
|
|
5
|
-
fallbackLang: string;
|
|
6
|
-
preloadLang: string;
|
|
7
|
-
}) => any;
|
|
8
|
-
i18next: ({ loadPath, fallbackLang, preloadLang, }: {
|
|
9
|
-
loadPath?: string;
|
|
10
|
-
fallbackLang?: string;
|
|
11
|
-
preloadLang?: any;
|
|
12
|
-
}) => any;
|
|
13
|
-
get instance(): any;
|
|
14
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import i18next from "i18next";
|
|
2
|
-
import Backend from 'i18next-fs-backend';
|
|
3
|
-
import * as middleware from 'i18next-http-middleware';
|
|
4
|
-
export default class LocalizationsService {
|
|
5
|
-
_instance = null;
|
|
6
|
-
load = ({ loadPath, fallbackLang, preloadLang, }) => {
|
|
7
|
-
this.i18next({
|
|
8
|
-
loadPath,
|
|
9
|
-
fallbackLang,
|
|
10
|
-
preloadLang,
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
|
-
i18next = ({ loadPath, fallbackLang, preloadLang, }) => {
|
|
14
|
-
if (this._instance) {
|
|
15
|
-
return this._instance;
|
|
16
|
-
}
|
|
17
|
-
i18next
|
|
18
|
-
.use(Backend)
|
|
19
|
-
.use(middleware.LanguageDetector)
|
|
20
|
-
.init({
|
|
21
|
-
fallbackLng: fallbackLang,
|
|
22
|
-
preload: preloadLang,
|
|
23
|
-
backend: { loadPath: `${loadPath}/{{lng}}.json` }
|
|
24
|
-
});
|
|
25
|
-
if (i18next)
|
|
26
|
-
this._instance = i18next;
|
|
27
|
-
return i18next;
|
|
28
|
-
};
|
|
29
|
-
get instance() {
|
|
30
|
-
return this._instance;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import winston from "winston";
|
|
2
|
-
import "winston-daily-rotate-file";
|
|
3
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
4
|
-
interface CustomLogger extends winston.Logger {
|
|
5
|
-
critical: winston.LeveledLogMethod;
|
|
6
|
-
http: winston.LeveledLogMethod;
|
|
7
|
-
}
|
|
8
|
-
export default class LoggerService {
|
|
9
|
-
static readonly storage: AsyncLocalStorage<Map<string, string>>;
|
|
10
|
-
private serviceName;
|
|
11
|
-
private environment;
|
|
12
|
-
private kafkaProducer;
|
|
13
|
-
private kafkaTopic;
|
|
14
|
-
private isKafkaReady;
|
|
15
|
-
private safeReplacer;
|
|
16
|
-
private getTracingFormat;
|
|
17
|
-
private getConsoleFormat;
|
|
18
|
-
winston: CustomLogger;
|
|
19
|
-
constructor();
|
|
20
|
-
runWithId: (id: string, callback: () => void) => void;
|
|
21
|
-
load: (config: Record<string, any>) => Promise<void>;
|
|
22
|
-
winstonLoader: ({ loadPath, loggerLevel }: {
|
|
23
|
-
loadPath: string;
|
|
24
|
-
loggerLevel: string;
|
|
25
|
-
}) => CustomLogger;
|
|
26
|
-
private logToKafka;
|
|
27
|
-
}
|
|
28
|
-
export {};
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import winston, { format } from "winston";
|
|
2
|
-
import Transport from "winston-transport";
|
|
3
|
-
import "winston-daily-rotate-file";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
6
|
-
import { Kafka, Partitioners, logLevel } from "kafkajs";
|
|
7
|
-
import { LoggerLayerEnum } from "../../utils";
|
|
8
|
-
class KafkaTransport extends Transport {
|
|
9
|
-
service;
|
|
10
|
-
constructor(opts, service) {
|
|
11
|
-
super(opts);
|
|
12
|
-
this.service = service;
|
|
13
|
-
}
|
|
14
|
-
log(info, callback) {
|
|
15
|
-
setImmediate(() => {
|
|
16
|
-
this.emit("logged", info);
|
|
17
|
-
});
|
|
18
|
-
this.service["logToKafka"](info).finally(() => {
|
|
19
|
-
callback();
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
const customLevels = {
|
|
24
|
-
critical: LoggerLayerEnum.CRITICAL,
|
|
25
|
-
error: LoggerLayerEnum.ERROR,
|
|
26
|
-
info: LoggerLayerEnum.INFO,
|
|
27
|
-
http: LoggerLayerEnum.HTTP,
|
|
28
|
-
debug: LoggerLayerEnum.DEBUG,
|
|
29
|
-
};
|
|
30
|
-
const customColors = {
|
|
31
|
-
critical: "red",
|
|
32
|
-
error: "magenta",
|
|
33
|
-
warn: "yellow",
|
|
34
|
-
info: "green",
|
|
35
|
-
http: "cyan",
|
|
36
|
-
debug: "blue"
|
|
37
|
-
};
|
|
38
|
-
export default class LoggerService {
|
|
39
|
-
static storage = new AsyncLocalStorage();
|
|
40
|
-
serviceName = "";
|
|
41
|
-
environment = "";
|
|
42
|
-
kafkaProducer = null;
|
|
43
|
-
kafkaTopic = "";
|
|
44
|
-
isKafkaReady = false;
|
|
45
|
-
safeReplacer = (key, value) => {
|
|
46
|
-
if (value instanceof Headers)
|
|
47
|
-
return Object.fromEntries(value.entries());
|
|
48
|
-
if (value instanceof Error)
|
|
49
|
-
return { message: value.message, stack: value.stack };
|
|
50
|
-
return value;
|
|
51
|
-
};
|
|
52
|
-
getTracingFormat = format((info) => {
|
|
53
|
-
const store = LoggerService.storage.getStore();
|
|
54
|
-
if (store) {
|
|
55
|
-
info.id = store.get("correlationId");
|
|
56
|
-
}
|
|
57
|
-
return info;
|
|
58
|
-
});
|
|
59
|
-
getConsoleFormat() {
|
|
60
|
-
return format.combine(this.getTracingFormat(), format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), format.colorize({ all: true }), format.printf((info) => {
|
|
61
|
-
const msg = typeof info.message === "object"
|
|
62
|
-
? JSON.stringify(info.message, this.safeReplacer)
|
|
63
|
-
: info.message;
|
|
64
|
-
const idPart = info.id ? ` : id: ${info.id}` : "";
|
|
65
|
-
return `${info.timestamp} [${this.serviceName}] ${info.level}: ${msg}${idPart}`;
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
winston = winston.createLogger({
|
|
69
|
-
level: "debug",
|
|
70
|
-
levels: customLevels,
|
|
71
|
-
transports: [
|
|
72
|
-
new winston.transports.Console({
|
|
73
|
-
format: this.getConsoleFormat()
|
|
74
|
-
})
|
|
75
|
-
]
|
|
76
|
-
});
|
|
77
|
-
constructor() {
|
|
78
|
-
winston.addColors(customColors);
|
|
79
|
-
}
|
|
80
|
-
runWithId = (id, callback) => {
|
|
81
|
-
const store = new Map();
|
|
82
|
-
store.set("correlationId", id);
|
|
83
|
-
return LoggerService.storage.run(store, callback);
|
|
84
|
-
};
|
|
85
|
-
load = async (config) => {
|
|
86
|
-
this.serviceName = config?.serviceName || "service";
|
|
87
|
-
this.environment = config?.env || "dev";
|
|
88
|
-
this.kafkaTopic = config?.kafkaTopic || "logs";
|
|
89
|
-
const rawBrokers = config?.kafkaBrokers;
|
|
90
|
-
const brokers = rawBrokers ? String(rawBrokers).split(",").map((b) => b.trim()) : [];
|
|
91
|
-
if (brokers.length > 0) {
|
|
92
|
-
const kafka = new Kafka({
|
|
93
|
-
clientId: this.serviceName,
|
|
94
|
-
brokers: brokers,
|
|
95
|
-
logLevel: logLevel.ERROR
|
|
96
|
-
});
|
|
97
|
-
this.kafkaProducer = kafka.producer({
|
|
98
|
-
createPartitioner: Partitioners.DefaultPartitioner,
|
|
99
|
-
retry: {
|
|
100
|
-
initialRetryTime: 100,
|
|
101
|
-
retries: 8
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
try {
|
|
105
|
-
await this.kafkaProducer.connect();
|
|
106
|
-
this.isKafkaReady = true;
|
|
107
|
-
}
|
|
108
|
-
catch (err) {
|
|
109
|
-
this.isKafkaReady = false;
|
|
110
|
-
console.error("Kafka Connection Error:", err);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
this.winstonLoader({
|
|
114
|
-
loadPath: config?.loadPath || "./logs",
|
|
115
|
-
loggerLevel: config?.loggerLevel || "debug"
|
|
116
|
-
});
|
|
117
|
-
};
|
|
118
|
-
winstonLoader = ({ loadPath, loggerLevel }) => {
|
|
119
|
-
const { combine, timestamp, json, errors } = format;
|
|
120
|
-
const jsonFileFormat = combine(this.getTracingFormat(), timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), errors({ stack: true }), json({ replacer: this.safeReplacer }));
|
|
121
|
-
const transports = [
|
|
122
|
-
new winston.transports.Console({
|
|
123
|
-
format: this.getConsoleFormat()
|
|
124
|
-
}),
|
|
125
|
-
new winston.transports.DailyRotateFile({
|
|
126
|
-
filename: path.resolve(loadPath, "error", "%DATE%_error.log"),
|
|
127
|
-
level: "error",
|
|
128
|
-
format: jsonFileFormat,
|
|
129
|
-
maxSize: "2mb",
|
|
130
|
-
maxFiles: "7d"
|
|
131
|
-
}),
|
|
132
|
-
new winston.transports.DailyRotateFile({
|
|
133
|
-
filename: path.resolve(loadPath, "critical", "%DATE%_critical.log"),
|
|
134
|
-
level: "critical",
|
|
135
|
-
format: jsonFileFormat,
|
|
136
|
-
maxSize: "2mb",
|
|
137
|
-
maxFiles: "14d"
|
|
138
|
-
})
|
|
139
|
-
];
|
|
140
|
-
if (this.kafkaProducer) {
|
|
141
|
-
transports.push(new KafkaTransport({ level: loggerLevel }, this));
|
|
142
|
-
}
|
|
143
|
-
const winstonLogger = winston.createLogger({
|
|
144
|
-
level: loggerLevel,
|
|
145
|
-
levels: customLevels,
|
|
146
|
-
transports
|
|
147
|
-
});
|
|
148
|
-
this.winston = winstonLogger;
|
|
149
|
-
return winstonLogger;
|
|
150
|
-
};
|
|
151
|
-
async logToKafka(info) {
|
|
152
|
-
if (!this.kafkaProducer || !this.isKafkaReady)
|
|
153
|
-
return;
|
|
154
|
-
try {
|
|
155
|
-
const { id, level, message, ...rest } = info;
|
|
156
|
-
await this.kafkaProducer.send({
|
|
157
|
-
topic: this.kafkaTopic,
|
|
158
|
-
messages: [{
|
|
159
|
-
value: JSON.stringify({
|
|
160
|
-
id: id || null,
|
|
161
|
-
service: this.serviceName,
|
|
162
|
-
env: this.environment,
|
|
163
|
-
level,
|
|
164
|
-
message,
|
|
165
|
-
...rest,
|
|
166
|
-
timestamp: new Date().toISOString()
|
|
167
|
-
}, this.safeReplacer)
|
|
168
|
-
}]
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
catch (err) {
|
|
172
|
-
console.error("Kafka Send Error:", err);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export default class SystemService {
|
|
2
|
-
static _tmp;
|
|
3
|
-
load = async ({ tmp, }) => {
|
|
4
|
-
SystemService._tmp = tmp;
|
|
5
|
-
await this._systemLoader({});
|
|
6
|
-
};
|
|
7
|
-
_systemLoader = async ({}) => {
|
|
8
|
-
//console.log(this._tmp)
|
|
9
|
-
};
|
|
10
|
-
// => getters
|
|
11
|
-
static get tmp() {
|
|
12
|
-
return SystemService._tmp;
|
|
13
|
-
}
|
|
14
|
-
}
|
package/x/dist/project/index.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
// => import dependencies
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { SystemService, ConfigsService, LoggerService, EventsService, LocalizationsService } from '../loader/index';
|
|
4
|
-
import { packageName, tmpFileDefaultName, tmpFileDefaultExt, findFileRecursively, TmpFileLoader, x, kafkaBrokers, systemLoggerLayer, } from '../utils/index';
|
|
5
|
-
//
|
|
6
|
-
let coreHasRun = false;
|
|
7
|
-
const coreLoader = async () => {
|
|
8
|
-
if (coreHasRun)
|
|
9
|
-
return {};
|
|
10
|
-
try {
|
|
11
|
-
const ownerTmpFilePath = findFileRecursively(".", tmpFileDefaultName, tmpFileDefaultExt);
|
|
12
|
-
if (!ownerTmpFilePath) {
|
|
13
|
-
throw new Error(`${tmpFileDefaultName} file not found`);
|
|
14
|
-
}
|
|
15
|
-
const tmpFileObject = new TmpFileLoader({ filePath: ownerTmpFilePath });
|
|
16
|
-
const r = tmpFileObject.getResolvedTmpFile();
|
|
17
|
-
const { configs } = r;
|
|
18
|
-
const rootFolderPath = configs.rootFolderPath;
|
|
19
|
-
const services = [
|
|
20
|
-
SystemService,
|
|
21
|
-
ConfigsService,
|
|
22
|
-
LoggerService,
|
|
23
|
-
EventsService,
|
|
24
|
-
LocalizationsService
|
|
25
|
-
];
|
|
26
|
-
services.forEach(service => x.set({ service, reference: service }));
|
|
27
|
-
const system = x.get(SystemService);
|
|
28
|
-
const configService = x.get(ConfigsService);
|
|
29
|
-
const logger = x.get(LoggerService);
|
|
30
|
-
const events = x.get(EventsService);
|
|
31
|
-
const i18n = x.get(LocalizationsService);
|
|
32
|
-
await system.load({
|
|
33
|
-
tmp: { _: r }
|
|
34
|
-
});
|
|
35
|
-
await configService.load({
|
|
36
|
-
tmpFolderPath: rootFolderPath,
|
|
37
|
-
systemService: system,
|
|
38
|
-
envLoadPath: path.join(rootFolderPath, configs.loaders.configs.envLoadPath),
|
|
39
|
-
...(configs.loaders.configs.globalEnvFileName && { globalEnvFileName: configs.loaders.configs.globalEnvFileName })
|
|
40
|
-
});
|
|
41
|
-
await logger.load({
|
|
42
|
-
loadPath: path.join(rootFolderPath, configs.loaders.loggers.loadPath),
|
|
43
|
-
loggerLevel: systemLoggerLayer ?? configs.loaders.loggers.logLevel,
|
|
44
|
-
serviceName: configs.service,
|
|
45
|
-
env: process.env.NODE_ENV,
|
|
46
|
-
kafkaBrokers: kafkaBrokers ?? "",
|
|
47
|
-
kafkaTopic: configs.loaders.loggers.topic
|
|
48
|
-
});
|
|
49
|
-
await events.load({});
|
|
50
|
-
await i18n.load({
|
|
51
|
-
loadPath: path.resolve(rootFolderPath, configs.loaders.localization.loadPath),
|
|
52
|
-
fallbackLang: configs.loaders.localization.fallbackLang,
|
|
53
|
-
preloadLang: configs.loaders.localization.preloadLangs
|
|
54
|
-
});
|
|
55
|
-
coreHasRun = true;
|
|
56
|
-
return { _: r };
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
60
|
-
console.error(`[${packageName} core failure]: ${errorMessage}`);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
export default coreLoader;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare const packageName: string;
|
|
2
|
-
export declare const tmpFileDefaultMainFolderName: string;
|
|
3
|
-
export declare const tmpFileDefaultName: string;
|
|
4
|
-
export declare const tmpFileDefaultExt = ".yml";
|
|
5
|
-
export declare const defaultTmpFilePath: string;
|
|
6
|
-
export declare const defaultOwnerTmpFilePath: string;
|
|
7
|
-
export declare const systemLoggerLayer: string;
|
|
8
|
-
export declare const kafkaBrokers: string;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import { __dirname } from '../helpers/path';
|
|
3
|
-
export const packageName = 'x';
|
|
4
|
-
export const tmpFileDefaultMainFolderName = 'x';
|
|
5
|
-
export const tmpFileDefaultName = 'tmp';
|
|
6
|
-
export const tmpFileDefaultExt = '.yml';
|
|
7
|
-
export const defaultTmpFilePath = path.resolve(__dirname(import.meta.url), `../../${tmpFileDefaultMainFolderName}/${tmpFileDefaultName}.yml`);
|
|
8
|
-
export const defaultOwnerTmpFilePath = path.resolve(`./${tmpFileDefaultMainFolderName}/${tmpFileDefaultName}.yml`);
|
|
9
|
-
export const systemLoggerLayer = process.env.SYSTEM_LOGGER_LAYER;
|
|
10
|
-
export const kafkaBrokers = process.env?.KAFKA_BROKERS;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { PolarityTypeEnum } from "../../models";
|
|
2
|
-
export declare function dateZoneConverter({ polarity, date, zone, factor }: {
|
|
3
|
-
polarity: PolarityTypeEnum;
|
|
4
|
-
date: Date;
|
|
5
|
-
zone: number;
|
|
6
|
-
factor?: number;
|
|
7
|
-
}): string;
|
|
8
|
-
export declare function convertDate(date: string, splitCharacter?: string, replaceCharacter?: string): string[];
|
|
9
|
-
export declare function convertTime(time: string, splitCharacter?: string, replaceCharacter?: string): string[];
|
|
10
|
-
export declare function getDateAndTime({ getDate, getTime, dateCharacter, timeCharacter, separatorCharacter }: {
|
|
11
|
-
getDate: boolean;
|
|
12
|
-
getTime: boolean;
|
|
13
|
-
dateCharacter: string;
|
|
14
|
-
timeCharacter: string;
|
|
15
|
-
separatorCharacter: string;
|
|
16
|
-
}): string;
|