@morojs/moro 1.5.17 → 1.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/README.md +48 -65
- package/dist/core/auth/morojs-adapter.js +12 -16
- package/dist/core/auth/morojs-adapter.js.map +1 -1
- package/dist/core/config/file-loader.d.ts +5 -0
- package/dist/core/config/file-loader.js +171 -0
- package/dist/core/config/file-loader.js.map +1 -1
- package/dist/core/config/index.d.ts +10 -39
- package/dist/core/config/index.js +29 -66
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/loader.d.ts +7 -0
- package/dist/core/config/loader.js +269 -0
- package/dist/core/config/loader.js.map +1 -0
- package/dist/core/config/schema.js +31 -41
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/utils.d.ts +2 -9
- package/dist/core/config/utils.js +32 -19
- package/dist/core/config/utils.js.map +1 -1
- package/dist/core/config/validation.d.ts +17 -0
- package/dist/core/config/validation.js +131 -0
- package/dist/core/config/validation.js.map +1 -0
- package/dist/core/database/adapters/mongodb.d.ts +0 -10
- package/dist/core/database/adapters/mongodb.js +2 -23
- package/dist/core/database/adapters/mongodb.js.map +1 -1
- package/dist/core/database/adapters/mysql.d.ts +0 -11
- package/dist/core/database/adapters/mysql.js +0 -1
- package/dist/core/database/adapters/mysql.js.map +1 -1
- package/dist/core/database/adapters/postgresql.d.ts +1 -9
- package/dist/core/database/adapters/postgresql.js +1 -1
- package/dist/core/database/adapters/postgresql.js.map +1 -1
- package/dist/core/database/adapters/redis.d.ts +0 -9
- package/dist/core/database/adapters/redis.js +4 -14
- package/dist/core/database/adapters/redis.js.map +1 -1
- package/dist/core/framework.d.ts +7 -6
- package/dist/core/framework.js +16 -131
- package/dist/core/framework.js.map +1 -1
- package/dist/core/http/http-server.d.ts +0 -12
- package/dist/core/http/http-server.js +23 -151
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/router.d.ts +0 -12
- package/dist/core/http/router.js +36 -114
- package/dist/core/http/router.js.map +1 -1
- package/dist/core/logger/filters.js +4 -12
- package/dist/core/logger/filters.js.map +1 -1
- package/dist/core/logger/index.d.ts +1 -1
- package/dist/core/logger/index.js +1 -2
- package/dist/core/logger/index.js.map +1 -1
- package/dist/core/logger/logger.d.ts +13 -29
- package/dist/core/logger/logger.js +203 -380
- package/dist/core/logger/logger.js.map +1 -1
- package/dist/core/logger/outputs.js +2 -0
- package/dist/core/logger/outputs.js.map +1 -1
- package/dist/core/middleware/built-in/auth.js +17 -88
- package/dist/core/middleware/built-in/auth.js.map +1 -1
- package/dist/core/middleware/built-in/cache.js +1 -3
- package/dist/core/middleware/built-in/cache.js.map +1 -1
- package/dist/core/middleware/built-in/index.d.ts +0 -1
- package/dist/core/middleware/built-in/index.js +1 -6
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/request-logger.js +2 -3
- package/dist/core/middleware/built-in/request-logger.js.map +1 -1
- package/dist/core/middleware/built-in/sse.js +7 -9
- package/dist/core/middleware/built-in/sse.js.map +1 -1
- package/dist/core/modules/auto-discovery.d.ts +0 -17
- package/dist/core/modules/auto-discovery.js +12 -367
- package/dist/core/modules/auto-discovery.js.map +1 -1
- package/dist/core/modules/modules.js +2 -12
- package/dist/core/modules/modules.js.map +1 -1
- package/dist/core/networking/adapters/ws-adapter.d.ts +1 -1
- package/dist/core/networking/adapters/ws-adapter.js +2 -2
- package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
- package/dist/core/networking/service-discovery.js +7 -7
- package/dist/core/networking/service-discovery.js.map +1 -1
- package/dist/core/routing/index.d.ts +0 -20
- package/dist/core/routing/index.js +13 -178
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/runtime/node-adapter.js +6 -12
- package/dist/core/runtime/node-adapter.js.map +1 -1
- package/dist/moro.d.ts +0 -48
- package/dist/moro.js +148 -456
- package/dist/moro.js.map +1 -1
- package/dist/types/config.d.ts +2 -58
- package/dist/types/core.d.ts +40 -34
- package/dist/types/http.d.ts +1 -16
- package/dist/types/logger.d.ts +0 -7
- package/dist/types/module.d.ts +0 -11
- package/package.json +2 -2
- package/src/core/auth/morojs-adapter.ts +13 -18
- package/src/core/config/file-loader.ts +233 -0
- package/src/core/config/index.ts +32 -77
- package/src/core/config/loader.ts +633 -0
- package/src/core/config/schema.ts +31 -41
- package/src/core/config/utils.ts +29 -22
- package/src/core/config/validation.ts +140 -0
- package/src/core/database/README.md +16 -26
- package/src/core/database/adapters/mongodb.ts +2 -30
- package/src/core/database/adapters/mysql.ts +0 -14
- package/src/core/database/adapters/postgresql.ts +2 -12
- package/src/core/database/adapters/redis.ts +4 -27
- package/src/core/framework.ts +23 -163
- package/src/core/http/http-server.ts +36 -176
- package/src/core/http/router.ts +38 -127
- package/src/core/logger/filters.ts +4 -12
- package/src/core/logger/index.ts +0 -1
- package/src/core/logger/logger.ts +216 -427
- package/src/core/logger/outputs.ts +2 -0
- package/src/core/middleware/built-in/auth.ts +17 -98
- package/src/core/middleware/built-in/cache.ts +1 -3
- package/src/core/middleware/built-in/index.ts +0 -8
- package/src/core/middleware/built-in/request-logger.ts +1 -3
- package/src/core/middleware/built-in/sse.ts +7 -9
- package/src/core/modules/auto-discovery.ts +13 -476
- package/src/core/modules/modules.ts +9 -20
- package/src/core/networking/adapters/ws-adapter.ts +5 -2
- package/src/core/networking/service-discovery.ts +7 -6
- package/src/core/routing/index.ts +14 -198
- package/src/core/runtime/node-adapter.ts +6 -12
- package/src/moro.ts +166 -554
- package/src/types/config.ts +2 -59
- package/src/types/core.ts +45 -47
- package/src/types/http.ts +1 -23
- package/src/types/logger.ts +0 -9
- package/src/types/module.ts +0 -12
- package/dist/core/config/config-manager.d.ts +0 -44
- package/dist/core/config/config-manager.js +0 -114
- package/dist/core/config/config-manager.js.map +0 -1
- package/dist/core/config/config-sources.d.ts +0 -21
- package/dist/core/config/config-sources.js +0 -502
- package/dist/core/config/config-sources.js.map +0 -1
- package/dist/core/config/config-validator.d.ts +0 -21
- package/dist/core/config/config-validator.js +0 -765
- package/dist/core/config/config-validator.js.map +0 -1
- package/dist/core/middleware/built-in/jwt-helpers.d.ts +0 -118
- package/dist/core/middleware/built-in/jwt-helpers.js +0 -221
- package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
- package/src/core/config/config-manager.ts +0 -133
- package/src/core/config/config-sources.ts +0 -596
- package/src/core/config/config-validator.ts +0 -1078
- package/src/core/middleware/built-in/jwt-helpers.ts +0 -240
package/dist/core/http/router.js
CHANGED
|
@@ -5,12 +5,6 @@ const logger_1 = require("../logger");
|
|
|
5
5
|
class Router {
|
|
6
6
|
routes = [];
|
|
7
7
|
logger = (0, logger_1.createFrameworkLogger)('Router');
|
|
8
|
-
// Performance optimizations - O(1) static route lookup
|
|
9
|
-
staticRoutes = new Map(); // "GET:/api/users" -> route
|
|
10
|
-
dynamicRoutes = []; // Routes with parameters
|
|
11
|
-
// Object pooling for parameters to reduce GC pressure
|
|
12
|
-
paramObjectPool = [];
|
|
13
|
-
maxPoolSize = 50;
|
|
14
8
|
get(path, ...handlers) {
|
|
15
9
|
this.addRoute('GET', path, handlers);
|
|
16
10
|
}
|
|
@@ -30,35 +24,14 @@ class Router {
|
|
|
30
24
|
const { pattern, paramNames } = this.pathToRegex(path);
|
|
31
25
|
const handler = handlers.pop();
|
|
32
26
|
const middleware = handlers;
|
|
33
|
-
|
|
27
|
+
this.routes.push({
|
|
34
28
|
method,
|
|
35
29
|
path,
|
|
36
30
|
pattern,
|
|
37
31
|
paramNames,
|
|
38
32
|
handler,
|
|
39
33
|
middleware,
|
|
40
|
-
};
|
|
41
|
-
// Add to routes array (maintain compatibility)
|
|
42
|
-
this.routes.push(route);
|
|
43
|
-
// Performance optimization: separate static and dynamic routes
|
|
44
|
-
const isStatic = !path.includes(':') && !path.includes('*');
|
|
45
|
-
if (isStatic && middleware.length === 0) {
|
|
46
|
-
// Static route with no middleware - use O(1) lookup
|
|
47
|
-
const routeKey = `${method}:${path}`;
|
|
48
|
-
this.staticRoutes.set(routeKey, route);
|
|
49
|
-
this.logger.debug(`Added static route: ${routeKey}`, 'FastRoute');
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
// Dynamic route or has middleware - needs regex matching
|
|
53
|
-
this.dynamicRoutes.push(route);
|
|
54
|
-
this.logger.debug(`Added dynamic route: ${method} ${path}`, 'DynamicRoute');
|
|
55
|
-
}
|
|
56
|
-
// Initialize object pool on first route
|
|
57
|
-
if (this.paramObjectPool.length === 0) {
|
|
58
|
-
for (let i = 0; i < this.maxPoolSize; i++) {
|
|
59
|
-
this.paramObjectPool.push({});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
34
|
+
});
|
|
62
35
|
}
|
|
63
36
|
pathToRegex(path) {
|
|
64
37
|
const paramNames = [];
|
|
@@ -81,107 +54,56 @@ class Router {
|
|
|
81
54
|
path = '/';
|
|
82
55
|
}
|
|
83
56
|
this.logger.debug(`Router processing: originalPath="${req.path}", basePath="${basePath}", processedPath="${path}"`, 'Processing');
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const staticRoute = this.staticRoutes.get(routeKey);
|
|
87
|
-
if (staticRoute) {
|
|
88
|
-
this.logger.debug(`Fast route match: ${routeKey}`, 'FastRoute');
|
|
89
|
-
// Static route with no middleware - execute handler directly
|
|
90
|
-
req.params = {}; // No params for static routes
|
|
91
|
-
const result = await staticRoute.handler(req, res);
|
|
92
|
-
// If handler returns data and response hasn't been sent, send it
|
|
93
|
-
if (result !== undefined && result !== null && !res.headersSent) {
|
|
94
|
-
res.json(result);
|
|
95
|
-
}
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
// Fallback: Dynamic route matching (with middleware support)
|
|
99
|
-
const route = this.dynamicRoutes.find(r => r.method === req.method && r.pattern.test(path));
|
|
100
|
-
this.logger.debug(`Found dynamic route: ${!!route}${route ? ` ${route.method} ${route.path}` : ' none'}`, 'RouteMatch');
|
|
57
|
+
const route = this.routes.find(r => r.method === req.method && r.pattern.test(path));
|
|
58
|
+
this.logger.debug(`Found route: ${!!route}${route ? ` ${route.method} ${route.path}` : ' none'}`, 'RouteMatch');
|
|
101
59
|
if (!route) {
|
|
102
60
|
return false; // Route not found
|
|
103
61
|
}
|
|
104
|
-
// Extract path parameters
|
|
62
|
+
// Extract path parameters
|
|
105
63
|
const matches = path.match(route.pattern);
|
|
106
64
|
if (matches) {
|
|
107
|
-
req.params =
|
|
65
|
+
req.params = {};
|
|
108
66
|
route.paramNames.forEach((name, index) => {
|
|
109
67
|
req.params[name] = matches[index + 1];
|
|
110
68
|
});
|
|
111
69
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
.catch(reject);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
catch (error) {
|
|
135
|
-
reject(error);
|
|
70
|
+
// Execute middleware
|
|
71
|
+
for (const mw of route.middleware) {
|
|
72
|
+
await new Promise((resolve, reject) => {
|
|
73
|
+
let nextCalled = false;
|
|
74
|
+
const next = () => {
|
|
75
|
+
if (nextCalled)
|
|
76
|
+
return;
|
|
77
|
+
nextCalled = true;
|
|
78
|
+
resolve();
|
|
79
|
+
};
|
|
80
|
+
try {
|
|
81
|
+
const result = mw(req, res, next);
|
|
82
|
+
if (result instanceof Promise) {
|
|
83
|
+
result
|
|
84
|
+
.then(() => {
|
|
85
|
+
if (!nextCalled)
|
|
86
|
+
next();
|
|
87
|
+
})
|
|
88
|
+
.catch(reject);
|
|
136
89
|
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const result = await route.handler(req, res);
|
|
143
|
-
// If handler returns data and response hasn't been sent, send it
|
|
144
|
-
if (result !== undefined && result !== null && !res.headersSent) {
|
|
145
|
-
res.json(result);
|
|
146
|
-
}
|
|
147
|
-
return true;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
reject(error);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
148
95
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
96
|
+
// Execute handler
|
|
97
|
+
const result = await route.handler(req, res);
|
|
98
|
+
// If handler returns data and response hasn't been sent, send it
|
|
99
|
+
if (result !== undefined && result !== null && !res.headersSent) {
|
|
100
|
+
res.json(result);
|
|
154
101
|
}
|
|
102
|
+
return true;
|
|
155
103
|
}
|
|
156
104
|
getRoutes() {
|
|
157
105
|
return [...this.routes];
|
|
158
106
|
}
|
|
159
|
-
// Object pooling methods for performance optimization
|
|
160
|
-
acquireParamObject() {
|
|
161
|
-
const obj = this.paramObjectPool.pop();
|
|
162
|
-
if (obj) {
|
|
163
|
-
// Clear the object
|
|
164
|
-
for (const key in obj) {
|
|
165
|
-
delete obj[key];
|
|
166
|
-
}
|
|
167
|
-
return obj;
|
|
168
|
-
}
|
|
169
|
-
return {};
|
|
170
|
-
}
|
|
171
|
-
releaseParamObject(obj) {
|
|
172
|
-
if (this.paramObjectPool.length < this.maxPoolSize) {
|
|
173
|
-
this.paramObjectPool.push(obj);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
// Performance statistics for monitoring
|
|
177
|
-
getPerformanceStats() {
|
|
178
|
-
return {
|
|
179
|
-
totalRoutes: this.routes.length,
|
|
180
|
-
staticRoutes: this.staticRoutes.size,
|
|
181
|
-
dynamicRoutes: this.dynamicRoutes.length,
|
|
182
|
-
paramObjectPoolSize: this.paramObjectPool.length,
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
107
|
}
|
|
186
108
|
exports.Router = Router;
|
|
187
109
|
//# sourceMappingURL=router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/core/http/router.ts"],"names":[],"mappings":";;;AAQA,sCAAkD;AAElD,MAAa,MAAM;IACT,MAAM,GAAsB,EAAE,CAAC;IAC/B,MAAM,GAAG,IAAA,8BAAqB,EAAC,QAAQ,CAAC,CAAC;IAEjD,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/core/http/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,22 +23,14 @@ exports.contextFilter = contextFilter;
|
|
|
23
23
|
// Rate limiting filter
|
|
24
24
|
const rateLimitFilter = (maxPerSecond) => {
|
|
25
25
|
const timestamps = [];
|
|
26
|
-
let lastCleanup = 0;
|
|
27
26
|
return {
|
|
28
27
|
name: 'rate-limit',
|
|
29
28
|
filter: (entry) => {
|
|
30
29
|
const now = Date.now();
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
for (let i = 0; i < timestamps.length; i++) {
|
|
36
|
-
if (timestamps[i] >= cutoff) {
|
|
37
|
-
timestamps[keepIndex++] = timestamps[i];
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
timestamps.length = keepIndex;
|
|
41
|
-
lastCleanup = now;
|
|
30
|
+
const oneSecondAgo = now - 1000;
|
|
31
|
+
// Remove old timestamps
|
|
32
|
+
while (timestamps.length > 0 && timestamps[0] < oneSecondAgo) {
|
|
33
|
+
timestamps.shift();
|
|
42
34
|
}
|
|
43
35
|
// Check rate limit
|
|
44
36
|
if (timestamps.length >= maxPerSecond) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../src/core/logger/filters.ts"],"names":[],"mappings":";;;AAGA,qBAAqB;AACd,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAa,EAAE,CAAC,CAAC;IAC3D,IAAI,EAAE,SAAS,QAAQ,EAAE;IACzB,MAAM,EAAE,CAAC,KAAe,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAClE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAA+B,CAAC,CAAC;IACxE,CAAC;CACF,CAAC,CAAC;AANU,QAAA,WAAW,eAMrB;AAEH,uBAAuB;AAChB,MAAM,aAAa,GAAG,CAAC,eAAyB,EAAa,EAAE,CAAC,CAAC;IACtE,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE,CAAC,KAAe,EAAE,EAAE;QAC1B,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAChC,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC;CACF,CAAC,CAAC;AANU,QAAA,aAAa,iBAMvB;AAEH,uBAAuB;AAChB,MAAM,eAAe,GAAG,CAAC,YAAoB,EAAa,EAAE;IACjE,MAAM,UAAU,GAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../src/core/logger/filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { MoroLogger, logger, createFrameworkLogger, configureGlobalLogger, applyLoggingConfiguration,
|
|
1
|
+
export { MoroLogger, logger, createFrameworkLogger, configureGlobalLogger, applyLoggingConfiguration, } from './logger';
|
|
2
2
|
export * from './filters';
|
|
3
3
|
export type { LogLevel, LogEntry, LoggerOptions, Logger, LogOutput, LogFilter, LogMetrics, ColorScheme, } from '../../types/logger';
|
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
17
|
+
exports.applyLoggingConfiguration = exports.configureGlobalLogger = exports.createFrameworkLogger = exports.logger = exports.MoroLogger = void 0;
|
|
18
18
|
// Logger System - Main Exports
|
|
19
19
|
var logger_1 = require("./logger");
|
|
20
20
|
Object.defineProperty(exports, "MoroLogger", { enumerable: true, get: function () { return logger_1.MoroLogger; } });
|
|
@@ -22,6 +22,5 @@ Object.defineProperty(exports, "logger", { enumerable: true, get: function () {
|
|
|
22
22
|
Object.defineProperty(exports, "createFrameworkLogger", { enumerable: true, get: function () { return logger_1.createFrameworkLogger; } });
|
|
23
23
|
Object.defineProperty(exports, "configureGlobalLogger", { enumerable: true, get: function () { return logger_1.configureGlobalLogger; } });
|
|
24
24
|
Object.defineProperty(exports, "applyLoggingConfiguration", { enumerable: true, get: function () { return logger_1.applyLoggingConfiguration; } });
|
|
25
|
-
Object.defineProperty(exports, "destroyGlobalLogger", { enumerable: true, get: function () { return logger_1.destroyGlobalLogger; } });
|
|
26
25
|
__exportStar(require("./filters"), exports);
|
|
27
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/logger/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,+BAA+B;AAC/B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/logger/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,+BAA+B;AAC/B,mCAMkB;AALhB,oGAAA,UAAU,OAAA;AACV,gGAAA,MAAM,OAAA;AACN,+GAAA,qBAAqB,OAAA;AACrB,+GAAA,qBAAqB,OAAA;AACrB,mHAAA,yBAAyB,OAAA;AAE3B,4CAA0B"}
|
|
@@ -18,31 +18,28 @@ export declare class MoroLogger implements Logger {
|
|
|
18
18
|
private cachedTimestamp;
|
|
19
19
|
private lastTimestamp;
|
|
20
20
|
private timestampCacheInterval;
|
|
21
|
-
private static readonly ENTRY_POOL;
|
|
22
|
-
private static readonly MAX_POOL_SIZE;
|
|
23
|
-
private static poolIndex;
|
|
24
|
-
private static stringBuilder;
|
|
25
|
-
private static stringBuilderIndex;
|
|
26
21
|
private outputBuffer;
|
|
27
22
|
private bufferSize;
|
|
28
23
|
private maxBufferSize;
|
|
29
24
|
private flushTimeout;
|
|
30
25
|
private flushInterval;
|
|
31
|
-
private bufferOverflowThreshold;
|
|
32
|
-
private emergencyFlushInProgress;
|
|
33
|
-
private isDestroyed;
|
|
34
26
|
private static readonly LEVELS;
|
|
35
|
-
private static readonly COLORS;
|
|
36
|
-
private static readonly RESET;
|
|
37
|
-
private static readonly BOLD;
|
|
38
27
|
private static readonly LEVEL_STRINGS;
|
|
39
|
-
|
|
28
|
+
private static readonly ANSI_COLORS;
|
|
29
|
+
private static readonly ENTRY_POOL;
|
|
30
|
+
private static readonly MAX_POOL_SIZE;
|
|
31
|
+
private static poolIndex;
|
|
40
32
|
private static getPooledEntry;
|
|
41
|
-
private static createFreshEntry;
|
|
42
33
|
private static returnPooledEntry;
|
|
34
|
+
private static stringBuilder;
|
|
35
|
+
private static stringBuilderIndex;
|
|
43
36
|
private static resetStringBuilder;
|
|
44
37
|
private static appendToBuilder;
|
|
45
38
|
private static buildString;
|
|
39
|
+
private static readonly COLORS;
|
|
40
|
+
private static readonly RESET;
|
|
41
|
+
private static readonly BOLD;
|
|
42
|
+
constructor(options?: LoggerOptions);
|
|
46
43
|
debug(message: string, context?: string, metadata?: Record<string, any>): void;
|
|
47
44
|
info(message: string, context?: string, metadata?: Record<string, any>): void;
|
|
48
45
|
warn(message: string, context?: string, metadata?: Record<string, any>): void;
|
|
@@ -52,20 +49,16 @@ export declare class MoroLogger implements Logger {
|
|
|
52
49
|
timeEnd(label: string, context?: string, metadata?: Record<string, any>): void;
|
|
53
50
|
child(context: string, metadata?: Record<string, any>): Logger;
|
|
54
51
|
setLevel(level: LogLevel): void;
|
|
55
|
-
getLevel(): LogLevel;
|
|
56
52
|
addOutput(output: LogOutput): void;
|
|
57
53
|
removeOutput(name: string): void;
|
|
58
54
|
addFilter(filter: LogFilter): void;
|
|
59
55
|
removeFilter(name: string): void;
|
|
60
56
|
getHistory(count?: number): LogEntry[];
|
|
61
57
|
private getCachedTimestamp;
|
|
62
|
-
private getFastCachedTimestamp;
|
|
63
58
|
getMetrics(): LogMetrics;
|
|
64
59
|
clear(): void;
|
|
65
60
|
private log;
|
|
66
61
|
private fullLog;
|
|
67
|
-
private complexLog;
|
|
68
|
-
private writeSimpleLog;
|
|
69
62
|
private updateMetrics;
|
|
70
63
|
private createMetadata;
|
|
71
64
|
private getPerformanceData;
|
|
@@ -74,16 +67,12 @@ export declare class MoroLogger implements Logger {
|
|
|
74
67
|
private writeToConsole;
|
|
75
68
|
private writePrettyLog;
|
|
76
69
|
private cleanMetadata;
|
|
70
|
+
private stringify;
|
|
77
71
|
private output;
|
|
78
72
|
private scheduleFlush;
|
|
79
|
-
flushBuffer
|
|
80
|
-
private forceFlushBuffer;
|
|
81
|
-
private safeStringify;
|
|
82
|
-
private validateOptions;
|
|
83
|
-
private handleOutputError;
|
|
84
|
-
private emergencyConsoleWrite;
|
|
73
|
+
private flushBuffer;
|
|
85
74
|
flush(): void;
|
|
86
|
-
|
|
75
|
+
cleanup(): void;
|
|
87
76
|
}
|
|
88
77
|
export declare const logger: MoroLogger;
|
|
89
78
|
/**
|
|
@@ -91,11 +80,6 @@ export declare const logger: MoroLogger;
|
|
|
91
80
|
* This allows runtime configuration of the logger
|
|
92
81
|
*/
|
|
93
82
|
export declare function configureGlobalLogger(options: Partial<LoggerOptions>): void;
|
|
94
|
-
/**
|
|
95
|
-
* Destroy the global logger and clean up resources (for testing)
|
|
96
|
-
* @internal
|
|
97
|
-
*/
|
|
98
|
-
export declare function destroyGlobalLogger(): void;
|
|
99
83
|
/**
|
|
100
84
|
* Apply logging configuration from the config system and/or createApp options
|
|
101
85
|
*/
|