@scpxl/nodejs-framework 1.0.32 → 1.0.42
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/application/base-application.d.ts +7 -7
- package/dist/application/base-application.d.ts.map +1 -1
- package/dist/application/base-application.interface.d.ts +1 -1
- package/dist/application/base-application.interface.d.ts.map +1 -1
- package/dist/application/base-application.js +114 -14
- package/dist/application/base-application.js.map +2 -2
- package/dist/application/web-application.d.ts.map +1 -1
- package/dist/application/web-application.js +2 -1
- package/dist/application/web-application.js.map +2 -2
- package/dist/cache/manager.d.ts +1 -0
- package/dist/cache/manager.d.ts.map +1 -1
- package/dist/cache/manager.js +11 -2
- package/dist/cache/manager.js.map +2 -2
- package/dist/cli/index.js +24 -10
- package/dist/cli/index.js.map +2 -2
- package/dist/config/schema.d.ts +2 -63
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +1 -7
- package/dist/config/schema.js.map +2 -2
- package/dist/event/manager.js +2 -2
- package/dist/event/manager.js.map +2 -2
- package/dist/logger/logger.js +0 -1
- package/dist/logger/logger.js.map +2 -2
- package/dist/queue/manager.d.ts.map +1 -1
- package/dist/queue/manager.js +19 -7
- package/dist/queue/manager.js.map +2 -2
- package/dist/redis/instance.d.ts.map +1 -1
- package/dist/redis/instance.js +9 -1
- package/dist/redis/instance.js.map +2 -2
- package/dist/redis/manager.d.ts.map +1 -1
- package/dist/redis/manager.js +26 -16
- package/dist/redis/manager.js.map +3 -3
- package/dist/webserver/controller/entity.js +1 -1
- package/dist/webserver/controller/entity.js.map +2 -2
- package/dist/webserver/controller/health.js.map +1 -1
- package/dist/webserver/util.d.ts +1 -1
- package/dist/webserver/util.d.ts.map +1 -1
- package/dist/webserver/util.js +5 -23
- package/dist/webserver/util.js.map +2 -2
- package/dist/webserver/webserver.d.ts +2 -13
- package/dist/webserver/webserver.d.ts.map +1 -1
- package/dist/webserver/webserver.interface.d.ts +1 -21
- package/dist/webserver/webserver.interface.d.ts.map +1 -1
- package/dist/webserver/webserver.interface.js.map +1 -1
- package/dist/webserver/webserver.js +34 -36
- package/dist/webserver/webserver.js.map +2 -2
- package/dist/websocket/utils.d.ts.map +1 -1
- package/dist/websocket/utils.js +5 -1
- package/dist/websocket/utils.js.map +2 -2
- package/dist/websocket/websocket-base.d.ts.map +1 -1
- package/dist/websocket/websocket-base.js +9 -1
- package/dist/websocket/websocket-base.js.map +2 -2
- package/dist/websocket/websocket-server.d.ts.map +1 -1
- package/dist/websocket/websocket-server.js.map +2 -2
- package/package.json +5 -6
package/dist/config/schema.d.ts
CHANGED
|
@@ -129,12 +129,10 @@ export declare const WebServerRouteSchema: z.ZodObject<{
|
|
|
129
129
|
type: z.ZodOptional<z.ZodString>;
|
|
130
130
|
method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
131
131
|
path: z.ZodString;
|
|
132
|
-
url: z.ZodOptional<z.ZodString>;
|
|
133
132
|
controller: z.ZodOptional<z.ZodUnknown>;
|
|
134
133
|
controllerName: z.ZodOptional<z.ZodString>;
|
|
135
134
|
action: z.ZodOptional<z.ZodString>;
|
|
136
135
|
entityName: z.ZodOptional<z.ZodString>;
|
|
137
|
-
validation: z.ZodOptional<z.ZodUnknown>;
|
|
138
136
|
handler: z.ZodOptional<z.ZodUnknown>;
|
|
139
137
|
schema: z.ZodOptional<z.ZodUnknown>;
|
|
140
138
|
}, z.core.$loose>;
|
|
@@ -144,16 +142,14 @@ export declare const WebServerConfigSchema: z.ZodObject<{
|
|
|
144
142
|
port: z.ZodDefault<z.ZodNumber>;
|
|
145
143
|
bodyLimit: z.ZodDefault<z.ZodNumber>;
|
|
146
144
|
connectionTimeout: z.ZodDefault<z.ZodNumber>;
|
|
147
|
-
routes: z.
|
|
145
|
+
routes: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
148
146
|
type: z.ZodOptional<z.ZodString>;
|
|
149
147
|
method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
150
148
|
path: z.ZodString;
|
|
151
|
-
url: z.ZodOptional<z.ZodString>;
|
|
152
149
|
controller: z.ZodOptional<z.ZodUnknown>;
|
|
153
150
|
controllerName: z.ZodOptional<z.ZodString>;
|
|
154
151
|
action: z.ZodOptional<z.ZodString>;
|
|
155
152
|
entityName: z.ZodOptional<z.ZodString>;
|
|
156
|
-
validation: z.ZodOptional<z.ZodUnknown>;
|
|
157
153
|
handler: z.ZodOptional<z.ZodUnknown>;
|
|
158
154
|
schema: z.ZodOptional<z.ZodUnknown>;
|
|
159
155
|
}, z.core.$loose>>>;
|
|
@@ -303,71 +299,14 @@ export declare const FrameworkConfigSchema: z.ZodObject<{
|
|
|
303
299
|
port: z.ZodDefault<z.ZodNumber>;
|
|
304
300
|
bodyLimit: z.ZodDefault<z.ZodNumber>;
|
|
305
301
|
connectionTimeout: z.ZodDefault<z.ZodNumber>;
|
|
306
|
-
routes: z.
|
|
302
|
+
routes: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
307
303
|
type: z.ZodOptional<z.ZodString>;
|
|
308
304
|
method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
309
305
|
path: z.ZodString;
|
|
310
|
-
url: z.ZodOptional<z.ZodString>;
|
|
311
306
|
controller: z.ZodOptional<z.ZodUnknown>;
|
|
312
307
|
controllerName: z.ZodOptional<z.ZodString>;
|
|
313
308
|
action: z.ZodOptional<z.ZodString>;
|
|
314
309
|
entityName: z.ZodOptional<z.ZodString>;
|
|
315
|
-
validation: z.ZodOptional<z.ZodUnknown>;
|
|
316
|
-
handler: z.ZodOptional<z.ZodUnknown>;
|
|
317
|
-
schema: z.ZodOptional<z.ZodUnknown>;
|
|
318
|
-
}, z.core.$loose>>>;
|
|
319
|
-
controllersDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
320
|
-
routesDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
321
|
-
cors: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
322
|
-
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
323
|
-
urls: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
324
|
-
}, z.core.$strip>>>;
|
|
325
|
-
security: z.ZodOptional<z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
326
|
-
helmet: z.ZodOptional<z.ZodObject<{
|
|
327
|
-
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
328
|
-
contentSecurityPolicy: z.ZodOptional<z.ZodBoolean>;
|
|
329
|
-
crossOriginEmbedderPolicy: z.ZodOptional<z.ZodBoolean>;
|
|
330
|
-
crossOriginOpenerPolicy: z.ZodOptional<z.ZodBoolean>;
|
|
331
|
-
crossOriginResourcePolicy: z.ZodOptional<z.ZodBoolean>;
|
|
332
|
-
dnsPrefetchControl: z.ZodOptional<z.ZodBoolean>;
|
|
333
|
-
frameguard: z.ZodOptional<z.ZodBoolean>;
|
|
334
|
-
hidePoweredBy: z.ZodOptional<z.ZodBoolean>;
|
|
335
|
-
hsts: z.ZodOptional<z.ZodBoolean>;
|
|
336
|
-
ieNoOpen: z.ZodOptional<z.ZodBoolean>;
|
|
337
|
-
noSniff: z.ZodOptional<z.ZodBoolean>;
|
|
338
|
-
originAgentCluster: z.ZodOptional<z.ZodBoolean>;
|
|
339
|
-
permittedCrossDomainPolicies: z.ZodOptional<z.ZodBoolean>;
|
|
340
|
-
referrerPolicy: z.ZodOptional<z.ZodBoolean>;
|
|
341
|
-
xssFilter: z.ZodOptional<z.ZodBoolean>;
|
|
342
|
-
}, z.core.$strip>>;
|
|
343
|
-
rateLimit: z.ZodOptional<z.ZodObject<{
|
|
344
|
-
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
345
|
-
max: z.ZodOptional<z.ZodNumber>;
|
|
346
|
-
timeWindow: z.ZodOptional<z.ZodString>;
|
|
347
|
-
ban: z.ZodOptional<z.ZodNumber>;
|
|
348
|
-
cache: z.ZodOptional<z.ZodNumber>;
|
|
349
|
-
}, z.core.$strip>>;
|
|
350
|
-
}, z.core.$strip>>>>;
|
|
351
|
-
debug: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodObject<{
|
|
352
|
-
logAllRegisteredRoutes: z.ZodOptional<z.ZodBoolean>;
|
|
353
|
-
}, z.core.$strip>>>>;
|
|
354
|
-
}, z.core.$strip>>;
|
|
355
|
-
webServer: z.ZodOptional<z.ZodObject<{
|
|
356
|
-
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
357
|
-
host: z.ZodDefault<z.ZodString>;
|
|
358
|
-
port: z.ZodDefault<z.ZodNumber>;
|
|
359
|
-
bodyLimit: z.ZodDefault<z.ZodNumber>;
|
|
360
|
-
connectionTimeout: z.ZodDefault<z.ZodNumber>;
|
|
361
|
-
routes: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
362
|
-
type: z.ZodOptional<z.ZodString>;
|
|
363
|
-
method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
364
|
-
path: z.ZodString;
|
|
365
|
-
url: z.ZodOptional<z.ZodString>;
|
|
366
|
-
controller: z.ZodOptional<z.ZodUnknown>;
|
|
367
|
-
controllerName: z.ZodOptional<z.ZodString>;
|
|
368
|
-
action: z.ZodOptional<z.ZodString>;
|
|
369
|
-
entityName: z.ZodOptional<z.ZodString>;
|
|
370
|
-
validation: z.ZodOptional<z.ZodUnknown>;
|
|
371
310
|
handler: z.ZodOptional<z.ZodUnknown>;
|
|
372
311
|
schema: z.ZodOptional<z.ZodUnknown>;
|
|
373
312
|
}, z.core.$loose>>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AAGH,eAAO,MAAM,oBAAoB;;;;;;;;iBAUM,CAAC;AAGxC,eAAO,MAAM,oBAAoB;;;;;;;kBASpB,CAAC;AAEd,eAAO,MAAM,cAAc;;;iBAGzB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;iBAI1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;iBAI5B,CAAC;AAGH,eAAO,MAAM,qBAAqB;;iBAEhC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;iBAI5B,CAAC;AAGH,eAAO,MAAM,eAAe;;;kBAKf,CAAC;AAGd,eAAO,MAAM,2BAA2B;;;;;;iBAQ5B,CAAC;AAEb,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;iBAe5B,CAAC;AAGb,eAAO,MAAM,gBAAgB;;kBAIhB,CAAC;AAGd,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;kBA+BpB,CAAC;AAGd,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AAGH,eAAO,MAAM,oBAAoB;;;;;;;;iBAUM,CAAC;AAGxC,eAAO,MAAM,oBAAoB;;;;;;;kBASpB,CAAC;AAEd,eAAO,MAAM,cAAc;;;iBAGzB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;iBAI1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;iBAI5B,CAAC;AAGH,eAAO,MAAM,qBAAqB;;iBAEhC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;iBAI5B,CAAC;AAGH,eAAO,MAAM,eAAe;;;kBAKf,CAAC;AAGd,eAAO,MAAM,2BAA2B;;;;;;iBAQ5B,CAAC;AAEb,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;iBAe5B,CAAC;AAGb,eAAO,MAAM,gBAAgB;;kBAIhB,CAAC;AAGd,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;kBA+BpB,CAAC;AAGd,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAYjB,CAAC;AAEjB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgCwE,CAAC;AAG3G,eAAO,MAAM,oBAAoB;;;;;iBAK/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;iBAYtB,CAAC;AAGb,eAAO,MAAM,mBAAmB;;;iBAKpB,CAAC;AAGb,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgBhC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IACvC,MAAM,EAAE,qBAAqB,EAAE,CAAC;gBAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE;CAK7D;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAE,qBAA0B,GAAG,oBAAoB,CAUhH;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAE1E;AAED,eAAe,qBAAqB,CAAC"}
|
package/dist/config/schema.js
CHANGED
|
@@ -104,15 +104,11 @@ const WebServerRouteSchema = z.object({
|
|
|
104
104
|
type: z.string().optional(),
|
|
105
105
|
method: z.union([z.string(), z.array(z.string())]).optional(),
|
|
106
106
|
path: z.string(),
|
|
107
|
-
url: z.string().optional(),
|
|
108
|
-
// Keep for backwards compatibility
|
|
109
107
|
controller: z.unknown().optional(),
|
|
110
108
|
// Controller class reference
|
|
111
109
|
controllerName: z.string().optional(),
|
|
112
110
|
action: z.string().optional(),
|
|
113
111
|
entityName: z.string().optional(),
|
|
114
|
-
validation: z.unknown().optional(),
|
|
115
|
-
// Validation schema reference
|
|
116
112
|
handler: z.unknown().optional(),
|
|
117
113
|
schema: z.unknown().optional()
|
|
118
114
|
}).passthrough();
|
|
@@ -124,7 +120,7 @@ const WebServerConfigSchema = z.object({
|
|
|
124
120
|
// 25MB default (was 100MB)
|
|
125
121
|
connectionTimeout: z.number().int().positive().default(10 * 1e3),
|
|
126
122
|
// 10s default (was 30s)
|
|
127
|
-
routes: z.array(WebServerRouteSchema).
|
|
123
|
+
routes: z.array(WebServerRouteSchema).optional(),
|
|
128
124
|
controllersDirectory: z.string().optional(),
|
|
129
125
|
// Controllers directory path
|
|
130
126
|
routesDirectory: z.string().optional(),
|
|
@@ -172,8 +168,6 @@ const FrameworkConfigSchema = z.object({
|
|
|
172
168
|
email: z.object({}).optional(),
|
|
173
169
|
auth: AuthConfigSchema,
|
|
174
170
|
web: WebServerConfigSchema.optional(),
|
|
175
|
-
webServer: WebServerConfigSchema.optional(),
|
|
176
|
-
// Support both 'web' and 'webServer' for compatibility
|
|
177
171
|
webSocket: WebSocketConfigSchema.optional()
|
|
178
172
|
});
|
|
179
173
|
class ConfigValidationError extends Error {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/config/schema.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from 'zod';\nimport crypto from 'node:crypto';\n\n// Redis configuration schema\nexport const RedisConfigSchema = z.object({\n host: z.string().min(1, 'redis.host required'),\n port: z.number().int().positive().default(6379),\n password: z.string().min(1).optional(),\n});\n\n// Database configuration schema\nexport const DatabaseConfigSchema = z\n .object({\n enabled: z.boolean().default(false),\n host: z.string().min(1, 'database.host required'),\n port: z.number().int().positive().default(5432),\n username: z.string().min(1, 'database.username required'),\n password: z.string().min(1, 'database.password required'),\n databaseName: z.string().min(1, 'database.databaseName required'),\n entitiesDirectory: z.string().min(1).optional(),\n })\n .partial({ entitiesDirectory: true });\n\n// Queue configuration schema\nexport const QueueLogConfigSchema = z\n .object({\n jobRegistered: z.boolean().optional(),\n jobAdded: z.boolean().optional(),\n jobCompleted: z.boolean().optional(),\n queueRegistered: z.boolean().optional(),\n queuesRegistered: z.boolean().optional(),\n queueWaiting: z.boolean().optional(),\n })\n .optional();\n\nexport const QueueJobSchema = z.object({\n id: z.string().min(1),\n maxConcurrency: z.number().int().positive().optional(),\n});\n\nexport const QueueItemSchema = z.object({\n name: z.string(),\n isExternal: z.boolean().optional(),\n jobs: z.array(QueueJobSchema).default([]),\n});\n\nexport const QueueConfigSchema = z.object({\n queues: z.array(QueueItemSchema).default([]),\n processorsDirectory: z.string().min(1, 'queue.processorsDirectory required'),\n log: QueueLogConfigSchema,\n});\n\n// Event configuration schema\nexport const EventDefinitionSchema = z.object({\n name: z.string().min(1),\n});\n\nexport const EventConfigSchema = z.object({\n enabled: z.boolean().default(false),\n controllersDirectory: z.string().min(1),\n events: z.array(EventDefinitionSchema).default([]),\n});\n\n// Log configuration schema\nexport const LogConfigSchema = z\n .object({\n startUp: z.boolean().optional(),\n shutdown: z.boolean().optional(),\n })\n .optional();\n\n// Performance monitoring schema\nexport const PerformanceThresholdsSchema = z\n .object({\n httpMs: z.number().int().positive().optional(),\n dbMs: z.number().int().positive().optional(),\n queueMs: z.number().int().positive().optional(),\n cacheMs: z.number().int().positive().optional(),\n wsMs: z.number().int().positive().optional(),\n })\n .partial();\n\nexport const PerformanceMonitoringSchema = z\n .object({\n enabled: z.boolean().default(false),\n thresholds: PerformanceThresholdsSchema.optional(),\n maxMetricsHistory: z.number().int().positive().optional(),\n logSlowOperations: z.boolean().optional(),\n logAllOperations: z.boolean().optional(),\n monitorHttpRequests: z.boolean().default(true).optional(),\n monitorDatabaseOperations: z.boolean().default(true).optional(),\n monitorWebSocketOperations: z.boolean().default(true).optional(),\n monitorQueueOperations: z.boolean().default(true).optional(),\n monitorCacheOperations: z.boolean().default(true).optional(),\n reportInterval: z.number().int().positive().default(60_000).optional(),\n reportFormat: z.enum(['simple', 'detailed']).default('simple').optional(),\n })\n .partial();\n\n// Auth configuration schema\nexport const AuthConfigSchema = z\n .object({\n jwtSecretKey: z.string().min(1, 'auth.jwtSecretKey required'),\n })\n .optional();\n\n// Security configuration schema\nexport const SecurityConfigSchema = z\n .object({\n helmet: z\n .object({\n enabled: z.boolean().optional(),\n contentSecurityPolicy: z.boolean().optional(),\n crossOriginEmbedderPolicy: z.boolean().optional(),\n crossOriginOpenerPolicy: z.boolean().optional(),\n crossOriginResourcePolicy: z.boolean().optional(),\n dnsPrefetchControl: z.boolean().optional(),\n frameguard: z.boolean().optional(),\n hidePoweredBy: z.boolean().optional(),\n hsts: z.boolean().optional(),\n ieNoOpen: z.boolean().optional(),\n noSniff: z.boolean().optional(),\n originAgentCluster: z.boolean().optional(),\n permittedCrossDomainPolicies: z.boolean().optional(),\n referrerPolicy: z.boolean().optional(),\n xssFilter: z.boolean().optional(),\n })\n .optional(),\n rateLimit: z\n .object({\n enabled: z.boolean().optional(),\n max: z.number().int().positive().optional(),\n timeWindow: z.string().optional(),\n ban: z.number().int().optional(),\n cache: z.number().int().optional(),\n })\n .optional(),\n })\n .optional();\n\n// Web server configuration schema\nexport const WebServerRouteSchema = z\n .object({\n type: z.string().optional(),\n method: z.union([z.string(), z.array(z.string())]).optional(),\n path: z.string(),\n
|
|
5
|
-
"mappings": ";;AAAA,SAAS,SAAS;AAClB,OAAO,YAAY;AAGZ,MAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,qBAAqB;AAAA,EAC7C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC9C,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AACvC,CAAC;AAGM,MAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAClC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,wBAAwB;AAAA,EAChD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC9C,UAAU,EAAE,OAAO,EAAE,IAAI,GAAG,4BAA4B;AAAA,EACxD,UAAU,EAAE,OAAO,EAAE,IAAI,GAAG,4BAA4B;AAAA,EACxD,cAAc,EAAE,OAAO,EAAE,IAAI,GAAG,gCAAgC;AAAA,EAChE,mBAAmB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAChD,CAAC,EACA,QAAQ,EAAE,mBAAmB,KAAK,CAAC;AAG/B,MAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,cAAc,EAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,iBAAiB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,kBAAkB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,cAAc,EAAE,QAAQ,EAAE,SAAS;AACrC,CAAC,EACA,SAAS;AAEL,MAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACpB,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACvD,CAAC;AAEM,MAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,MAAM,EAAE,OAAO;AAAA,EACf,YAAY,EAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,MAAM,EAAE,MAAM,cAAc,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAEM,MAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,QAAQ,EAAE,MAAM,eAAe,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC3C,qBAAqB,EAAE,OAAO,EAAE,IAAI,GAAG,oCAAoC;AAAA,EAC3E,KAAK;AACP,CAAC;AAGM,MAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AACxB,CAAC;AAEM,MAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAClC,sBAAsB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtC,QAAQ,EAAE,MAAM,qBAAqB,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC;AAGM,MAAM,kBAAkB,EAC5B,OAAO;AAAA,EACN,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,UAAU,EAAE,QAAQ,EAAE,SAAS;AACjC,CAAC,EACA,SAAS;AAGL,MAAM,8BAA8B,EACxC,OAAO;AAAA,EACN,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAC7C,CAAC,EACA,QAAQ;AAEJ,MAAM,8BAA8B,EACxC,OAAO;AAAA,EACN,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAClC,YAAY,4BAA4B,SAAS;AAAA,EACjD,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACxD,mBAAmB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,kBAAkB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA,EACxD,2BAA2B,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA,EAC9D,4BAA4B,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA,EAC/D,wBAAwB,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA,EAC3D,wBAAwB,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA,EAC3D,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAM,EAAE,SAAS;AAAA,EACrE,cAAc,EAAE,KAAK,CAAC,UAAU,UAAU,CAAC,EAAE,QAAQ,QAAQ,EAAE,SAAS;AAC1E,CAAC,EACA,QAAQ;AAGJ,MAAM,mBAAmB,EAC7B,OAAO;AAAA,EACN,cAAc,EAAE,OAAO,EAAE,IAAI,GAAG,4BAA4B;AAC9D,CAAC,EACA,SAAS;AAGL,MAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,QAAQ,EACL,OAAO;AAAA,IACN,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC9B,uBAAuB,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC5C,2BAA2B,EAAE,QAAQ,EAAE,SAAS;AAAA,IAChD,yBAAyB,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC9C,2BAA2B,EAAE,QAAQ,EAAE,SAAS;AAAA,IAChD,oBAAoB,EAAE,QAAQ,EAAE,SAAS;AAAA,IACzC,YAAY,EAAE,QAAQ,EAAE,SAAS;AAAA,IACjC,eAAe,EAAE,QAAQ,EAAE,SAAS;AAAA,IACpC,MAAM,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC3B,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC/B,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC9B,oBAAoB,EAAE,QAAQ,EAAE,SAAS;AAAA,IACzC,8BAA8B,EAAE,QAAQ,EAAE,SAAS;AAAA,IACnD,gBAAgB,EAAE,QAAQ,EAAE,SAAS;AAAA,IACrC,WAAW,EAAE,QAAQ,EAAE,SAAS;AAAA,EAClC,CAAC,EACA,SAAS;AAAA,EACZ,WAAW,EACR,OAAO;AAAA,IACN,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC9B,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IAC1C,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,IAChC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACnC,CAAC,EACA,SAAS;AACd,CAAC,EACA,SAAS;AAGL,MAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EAC5D,MAAM,EAAE,OAAO;AAAA,EACf,
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod';\nimport crypto from 'node:crypto';\n\n// Redis configuration schema\nexport const RedisConfigSchema = z.object({\n host: z.string().min(1, 'redis.host required'),\n port: z.number().int().positive().default(6379),\n password: z.string().min(1).optional(),\n});\n\n// Database configuration schema\nexport const DatabaseConfigSchema = z\n .object({\n enabled: z.boolean().default(false),\n host: z.string().min(1, 'database.host required'),\n port: z.number().int().positive().default(5432),\n username: z.string().min(1, 'database.username required'),\n password: z.string().min(1, 'database.password required'),\n databaseName: z.string().min(1, 'database.databaseName required'),\n entitiesDirectory: z.string().min(1).optional(),\n })\n .partial({ entitiesDirectory: true });\n\n// Queue configuration schema\nexport const QueueLogConfigSchema = z\n .object({\n jobRegistered: z.boolean().optional(),\n jobAdded: z.boolean().optional(),\n jobCompleted: z.boolean().optional(),\n queueRegistered: z.boolean().optional(),\n queuesRegistered: z.boolean().optional(),\n queueWaiting: z.boolean().optional(),\n })\n .optional();\n\nexport const QueueJobSchema = z.object({\n id: z.string().min(1),\n maxConcurrency: z.number().int().positive().optional(),\n});\n\nexport const QueueItemSchema = z.object({\n name: z.string(),\n isExternal: z.boolean().optional(),\n jobs: z.array(QueueJobSchema).default([]),\n});\n\nexport const QueueConfigSchema = z.object({\n queues: z.array(QueueItemSchema).default([]),\n processorsDirectory: z.string().min(1, 'queue.processorsDirectory required'),\n log: QueueLogConfigSchema,\n});\n\n// Event configuration schema\nexport const EventDefinitionSchema = z.object({\n name: z.string().min(1),\n});\n\nexport const EventConfigSchema = z.object({\n enabled: z.boolean().default(false),\n controllersDirectory: z.string().min(1),\n events: z.array(EventDefinitionSchema).default([]),\n});\n\n// Log configuration schema\nexport const LogConfigSchema = z\n .object({\n startUp: z.boolean().optional(),\n shutdown: z.boolean().optional(),\n })\n .optional();\n\n// Performance monitoring schema\nexport const PerformanceThresholdsSchema = z\n .object({\n httpMs: z.number().int().positive().optional(),\n dbMs: z.number().int().positive().optional(),\n queueMs: z.number().int().positive().optional(),\n cacheMs: z.number().int().positive().optional(),\n wsMs: z.number().int().positive().optional(),\n })\n .partial();\n\nexport const PerformanceMonitoringSchema = z\n .object({\n enabled: z.boolean().default(false),\n thresholds: PerformanceThresholdsSchema.optional(),\n maxMetricsHistory: z.number().int().positive().optional(),\n logSlowOperations: z.boolean().optional(),\n logAllOperations: z.boolean().optional(),\n monitorHttpRequests: z.boolean().default(true).optional(),\n monitorDatabaseOperations: z.boolean().default(true).optional(),\n monitorWebSocketOperations: z.boolean().default(true).optional(),\n monitorQueueOperations: z.boolean().default(true).optional(),\n monitorCacheOperations: z.boolean().default(true).optional(),\n reportInterval: z.number().int().positive().default(60_000).optional(),\n reportFormat: z.enum(['simple', 'detailed']).default('simple').optional(),\n })\n .partial();\n\n// Auth configuration schema\nexport const AuthConfigSchema = z\n .object({\n jwtSecretKey: z.string().min(1, 'auth.jwtSecretKey required'),\n })\n .optional();\n\n// Security configuration schema\nexport const SecurityConfigSchema = z\n .object({\n helmet: z\n .object({\n enabled: z.boolean().optional(),\n contentSecurityPolicy: z.boolean().optional(),\n crossOriginEmbedderPolicy: z.boolean().optional(),\n crossOriginOpenerPolicy: z.boolean().optional(),\n crossOriginResourcePolicy: z.boolean().optional(),\n dnsPrefetchControl: z.boolean().optional(),\n frameguard: z.boolean().optional(),\n hidePoweredBy: z.boolean().optional(),\n hsts: z.boolean().optional(),\n ieNoOpen: z.boolean().optional(),\n noSniff: z.boolean().optional(),\n originAgentCluster: z.boolean().optional(),\n permittedCrossDomainPolicies: z.boolean().optional(),\n referrerPolicy: z.boolean().optional(),\n xssFilter: z.boolean().optional(),\n })\n .optional(),\n rateLimit: z\n .object({\n enabled: z.boolean().optional(),\n max: z.number().int().positive().optional(),\n timeWindow: z.string().optional(),\n ban: z.number().int().optional(),\n cache: z.number().int().optional(),\n })\n .optional(),\n })\n .optional();\n\n// Web server configuration schema\nexport const WebServerRouteSchema = z\n .object({\n type: z.string().optional(),\n method: z.union([z.string(), z.array(z.string())]).optional(),\n path: z.string(),\n controller: z.unknown().optional(), // Controller class reference\n controllerName: z.string().optional(),\n action: z.string().optional(),\n entityName: z.string().optional(),\n handler: z.unknown().optional(),\n schema: z.unknown().optional(),\n })\n .passthrough(); // Allow additional properties to pass through\n\nexport const WebServerConfigSchema = z\n .object({\n enabled: z.boolean().default(false),\n host: z.string().default('0.0.0.0'),\n port: z.number().int().positive().default(3001),\n bodyLimit: z\n .number()\n .int()\n .positive()\n .default(25 * 1024 * 1024), // 25MB default (was 100MB)\n connectionTimeout: z\n .number()\n .int()\n .positive()\n .default(10 * 1000), // 10s default (was 30s)\n routes: z.array(WebServerRouteSchema).optional(),\n controllersDirectory: z.string().optional(), // Controllers directory path\n routesDirectory: z.string().optional(),\n cors: z\n .object({\n enabled: z.boolean().default(false),\n urls: z.array(z.string()).default([]),\n })\n .optional(),\n security: SecurityConfigSchema.optional(),\n debug: z\n .object({\n logAllRegisteredRoutes: z.boolean().optional(),\n })\n .default({})\n .optional(),\n })\n .partial({ cors: true, debug: true, controllersDirectory: true, routesDirectory: true, security: true });\n\n// WebSocket configuration schema\nexport const WebSocketRouteSchema = z.object({\n type: z.string().min(1, 'webSocket.routes.type required'),\n controllerName: z.string().min(1, 'webSocket.routes.controllerName required'),\n action: z.string().min(1, 'webSocket.routes.action required'),\n controller: z.unknown().optional(), // Controller class reference\n});\n\nexport const WebSocketConfigSchema = z\n .object({\n type: z.string().default('native'),\n enabled: z.boolean().default(false),\n routes: z.array(WebSocketRouteSchema).default([]),\n subscriberHandlers: z\n .object({\n directory: z.string().optional(),\n handlers: z.array(z.any()).optional(),\n })\n .optional(),\n })\n .partial();\n\n// Cluster configuration schema\nexport const ClusterConfigSchema = z\n .object({\n enabled: z.boolean().default(false),\n workers: z.number().int().positive().optional(),\n })\n .partial();\n\n// Top-level framework configuration schema\nexport const FrameworkConfigSchema = z.object({\n name: z.string().min(1, 'name required'),\n instanceId: z.string().default(() => crypto.randomUUID()),\n rootDirectory: z.string().min(1, 'rootDirectory required'),\n cluster: ClusterConfigSchema.optional(),\n redis: RedisConfigSchema,\n cache: z.object({}).optional(),\n database: DatabaseConfigSchema.optional(),\n queue: QueueConfigSchema,\n event: EventConfigSchema.optional(),\n log: LogConfigSchema,\n performanceMonitoring: PerformanceMonitoringSchema.optional(),\n email: z.object({}).optional(),\n auth: AuthConfigSchema,\n web: WebServerConfigSchema.optional(),\n webSocket: WebSocketConfigSchema.optional(),\n});\n\nexport type InferFrameworkConfig = z.infer<typeof FrameworkConfigSchema>;\n\nexport interface ValidateConfigOptions {\n collectAllErrors?: boolean; // Reserved for future use; Zod currently throws aggregate anyway\n}\n\nexport interface ValidationIssueDetail {\n path: string;\n message: string;\n}\n\nexport class ConfigValidationError extends Error {\n public issues: ValidationIssueDetail[];\n constructor(message: string, issues: ValidationIssueDetail[]) {\n super(message);\n this.name = 'ConfigValidationError';\n this.issues = issues;\n }\n}\n\nexport function validateFrameworkConfig(raw: unknown, _options: ValidateConfigOptions = {}): InferFrameworkConfig {\n const result = FrameworkConfigSchema.safeParse(raw);\n if (!result.success) {\n const issues: ValidationIssueDetail[] = result.error.issues.map(i => ({\n path: i.path.join('.') || '(root)',\n message: i.message,\n }));\n throw new ConfigValidationError('Invalid framework configuration', issues);\n }\n return result.data;\n}\n\nexport function formatConfigIssues(issues: ValidationIssueDetail[]): string {\n return issues.map(i => ` - ${i.path}: ${i.message}`).join('\\n');\n}\n\nexport default FrameworkConfigSchema;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/event/manager.js
CHANGED
|
@@ -84,8 +84,8 @@ class EventManager {
|
|
|
84
84
|
this.eventHandlers.set(event.name, handler.bind(controllerInstance));
|
|
85
85
|
}
|
|
86
86
|
const registeredEvents = Array.from(this.eventHandlers.keys());
|
|
87
|
-
this.log("Registered Events
|
|
88
|
-
Events: registeredEvents.length ? registeredEvents : "
|
|
87
|
+
this.log("Registered Events", {
|
|
88
|
+
Events: registeredEvents.length ? registeredEvents : "None"
|
|
89
89
|
});
|
|
90
90
|
if (this.options.debug?.printEvents) {
|
|
91
91
|
this.logger.custom({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/event/manager.ts"],
|
|
4
|
-
"sourcesContent": ["// event-manager.ts\nimport { Logger } from '../logger/index.js';\nimport { File, Helper, Loader } from '../util/index.js';\nimport type {\n EventDefinition,\n EventHandler,\n EventManagerConstructorParams,\n EventManagerOptions,\n} from './manager.interface.js';\nimport type { ApplicationConfig } from '../application/base-application.interface.js';\nimport type DatabaseInstance from '../database/instance.js';\nimport type { RedisInstance } from '../redis/index.js';\nimport type { EventControllerType } from './controller/base.interface.js';\n\nexport default class EventManager {\n private logger: typeof Logger = Logger;\n\n private applicationConfig: ApplicationConfig;\n private options: EventManagerOptions;\n private events: EventDefinition[];\n private redisInstance: RedisInstance;\n // private queueManager: QueueManager;\n private databaseInstance: DatabaseInstance | null;\n\n private eventHandlers: Map<string, EventHandler>;\n\n constructor(params: EventManagerConstructorParams) {\n const defaultOptions: Partial<EventManagerOptions> = {\n log: {\n startUp: true,\n },\n debug: {\n printEvents: false,\n },\n };\n\n this.options = Helper.defaultsDeep(params.options, defaultOptions);\n\n this.applicationConfig = params.applicationConfig;\n this.events = params.events;\n this.redisInstance = params.redisInstance;\n // this.queueManager = params.queueManager;\n this.databaseInstance = params.databaseInstance;\n\n this.eventHandlers = new Map();\n }\n\n public async load(): Promise<void> {\n // Check if controllers directory exists\n const controllersDirectoryExists = await File.pathExists(this.options.controllersDirectory);\n\n if (!controllersDirectoryExists) {\n return;\n }\n\n // Load controllers\n const controllers = await Loader.loadModulesInDirectory({\n directory: this.options.controllersDirectory,\n extensions: ['.ts', '.js'],\n });\n\n // Load event handlers\n for (const event of this.events) {\n let ControllerClass: EventControllerType;\n let controllerName: string;\n\n if (event.controller) {\n ControllerClass = event.controller;\n controllerName = ControllerClass.name;\n } else if (event.controllerName) {\n ControllerClass = controllers[event.controllerName] as EventControllerType;\n controllerName = event.controllerName;\n } else {\n throw new Error('Event controller not specified');\n }\n\n if (typeof ControllerClass !== 'function') {\n const controllerPath = `${this.options.controllersDirectory}/${event.controllerName}.ts`;\n this.logger.warn({\n message: 'Event controller not found',\n meta: {\n Controller: event.controllerName,\n Path: controllerPath,\n Event: event.name,\n },\n });\n continue;\n }\n\n // Initialize controller instance\n const controllerInstance = new ControllerClass({\n applicationConfig: this.applicationConfig,\n redisInstance: this.redisInstance,\n // queueManager: this.queueManager,\n databaseInstance: this.databaseInstance,\n });\n\n const handler = controllerInstance[event.handlerName as keyof typeof controllerInstance];\n\n if (!handler || typeof handler !== 'function') {\n this.logger.warn({\n message: 'Event handler not found',\n meta: {\n Controller: controllerName,\n Handler: event.handlerName,\n Event: event.name,\n },\n });\n continue;\n }\n\n // Store the handler\n this.eventHandlers.set(event.name, (handler as EventHandler).bind(controllerInstance));\n }\n\n // Log the list of registered events\n const registeredEvents = Array.from(this.eventHandlers.keys());\n\n this.log('Registered Events
|
|
5
|
-
"mappings": ";;AACA,SAAS,cAAc;AACvB,SAAS,MAAM,QAAQ,cAAc;AAYrC,MAAO,aAA2B;AAAA,EAdlC,OAckC;AAAA;AAAA;AAAA,EACxB,SAAwB;AAAA,EAExB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EAEA;AAAA,EAER,YAAY,QAAuC;AACjD,UAAM,iBAA+C;AAAA,MACnD,KAAK;AAAA,QACH,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,aAAa;AAAA,MACf;AAAA,IACF;AAEA,SAAK,UAAU,OAAO,aAAa,OAAO,SAAS,cAAc;AAEjE,SAAK,oBAAoB,OAAO;AAChC,SAAK,SAAS,OAAO;AACrB,SAAK,gBAAgB,OAAO;AAE5B,SAAK,mBAAmB,OAAO;AAE/B,SAAK,gBAAgB,oBAAI,IAAI;AAAA,EAC/B;AAAA,EAEA,MAAa,OAAsB;AAEjC,UAAM,6BAA6B,MAAM,KAAK,WAAW,KAAK,QAAQ,oBAAoB;AAE1F,QAAI,CAAC,4BAA4B;AAC/B;AAAA,IACF;AAGA,UAAM,cAAc,MAAM,OAAO,uBAAuB;AAAA,MACtD,WAAW,KAAK,QAAQ;AAAA,MACxB,YAAY,CAAC,OAAO,KAAK;AAAA,IAC3B,CAAC;AAGD,eAAW,SAAS,KAAK,QAAQ;AAC/B,UAAI;AACJ,UAAI;AAEJ,UAAI,MAAM,YAAY;AACpB,0BAAkB,MAAM;AACxB,yBAAiB,gBAAgB;AAAA,MACnC,WAAW,MAAM,gBAAgB;AAC/B,0BAAkB,YAAY,MAAM,cAAc;AAClD,yBAAiB,MAAM;AAAA,MACzB,OAAO;AACL,cAAM,IAAI,MAAM,gCAAgC;AAAA,MAClD;AAEA,UAAI,OAAO,oBAAoB,YAAY;AACzC,cAAM,iBAAiB,GAAG,KAAK,QAAQ,oBAAoB,IAAI,MAAM,cAAc;AACnF,aAAK,OAAO,KAAK;AAAA,UACf,SAAS;AAAA,UACT,MAAM;AAAA,YACJ,YAAY,MAAM;AAAA,YAClB,MAAM;AAAA,YACN,OAAO,MAAM;AAAA,UACf;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAGA,YAAM,qBAAqB,IAAI,gBAAgB;AAAA,QAC7C,mBAAmB,KAAK;AAAA,QACxB,eAAe,KAAK;AAAA;AAAA,QAEpB,kBAAkB,KAAK;AAAA,MACzB,CAAC;AAED,YAAM,UAAU,mBAAmB,MAAM,WAA8C;AAEvF,UAAI,CAAC,WAAW,OAAO,YAAY,YAAY;AAC7C,aAAK,OAAO,KAAK;AAAA,UACf,SAAS;AAAA,UACT,MAAM;AAAA,YACJ,YAAY;AAAA,YACZ,SAAS,MAAM;AAAA,YACf,OAAO,MAAM;AAAA,UACf;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAGA,WAAK,cAAc,IAAI,MAAM,MAAO,QAAyB,KAAK,kBAAkB,CAAC;AAAA,IACvF;AAGA,UAAM,mBAAmB,MAAM,KAAK,KAAK,cAAc,KAAK,CAAC;AAE7D,SAAK,IAAI,
|
|
4
|
+
"sourcesContent": ["// event-manager.ts\nimport { Logger } from '../logger/index.js';\nimport { File, Helper, Loader } from '../util/index.js';\nimport type {\n EventDefinition,\n EventHandler,\n EventManagerConstructorParams,\n EventManagerOptions,\n} from './manager.interface.js';\nimport type { ApplicationConfig } from '../application/base-application.interface.js';\nimport type DatabaseInstance from '../database/instance.js';\nimport type { RedisInstance } from '../redis/index.js';\nimport type { EventControllerType } from './controller/base.interface.js';\n\nexport default class EventManager {\n private logger: typeof Logger = Logger;\n\n private applicationConfig: ApplicationConfig;\n private options: EventManagerOptions;\n private events: EventDefinition[];\n private redisInstance: RedisInstance;\n // private queueManager: QueueManager;\n private databaseInstance: DatabaseInstance | null;\n\n private eventHandlers: Map<string, EventHandler>;\n\n constructor(params: EventManagerConstructorParams) {\n const defaultOptions: Partial<EventManagerOptions> = {\n log: {\n startUp: true,\n },\n debug: {\n printEvents: false,\n },\n };\n\n this.options = Helper.defaultsDeep(params.options, defaultOptions);\n\n this.applicationConfig = params.applicationConfig;\n this.events = params.events;\n this.redisInstance = params.redisInstance;\n // this.queueManager = params.queueManager;\n this.databaseInstance = params.databaseInstance;\n\n this.eventHandlers = new Map();\n }\n\n public async load(): Promise<void> {\n // Check if controllers directory exists\n const controllersDirectoryExists = await File.pathExists(this.options.controllersDirectory);\n\n if (!controllersDirectoryExists) {\n return;\n }\n\n // Load controllers\n const controllers = await Loader.loadModulesInDirectory({\n directory: this.options.controllersDirectory,\n extensions: ['.ts', '.js'],\n });\n\n // Load event handlers\n for (const event of this.events) {\n let ControllerClass: EventControllerType;\n let controllerName: string;\n\n if (event.controller) {\n ControllerClass = event.controller;\n controllerName = ControllerClass.name;\n } else if (event.controllerName) {\n ControllerClass = controllers[event.controllerName] as EventControllerType;\n controllerName = event.controllerName;\n } else {\n throw new Error('Event controller not specified');\n }\n\n if (typeof ControllerClass !== 'function') {\n const controllerPath = `${this.options.controllersDirectory}/${event.controllerName}.ts`;\n this.logger.warn({\n message: 'Event controller not found',\n meta: {\n Controller: event.controllerName,\n Path: controllerPath,\n Event: event.name,\n },\n });\n continue;\n }\n\n // Initialize controller instance\n const controllerInstance = new ControllerClass({\n applicationConfig: this.applicationConfig,\n redisInstance: this.redisInstance,\n // queueManager: this.queueManager,\n databaseInstance: this.databaseInstance,\n });\n\n const handler = controllerInstance[event.handlerName as keyof typeof controllerInstance];\n\n if (!handler || typeof handler !== 'function') {\n this.logger.warn({\n message: 'Event handler not found',\n meta: {\n Controller: controllerName,\n Handler: event.handlerName,\n Event: event.name,\n },\n });\n continue;\n }\n\n // Store the handler\n this.eventHandlers.set(event.name, (handler as EventHandler).bind(controllerInstance));\n }\n\n // Log the list of registered events\n const registeredEvents = Array.from(this.eventHandlers.keys());\n\n this.log('Registered Events', {\n Events: registeredEvents.length ? registeredEvents : 'None',\n });\n\n if (this.options.debug?.printEvents) {\n this.logger.custom({\n level: 'event',\n message: `Registered Events:\\n${registeredEvents.map(e => `- ${e}`).join('\\n')}`,\n });\n }\n }\n\n public async run<TPayload = unknown>({ name, data }: { name: string; data: TPayload }): Promise<void> {\n try {\n const handler = this.eventHandlers.get(name);\n\n if (!handler) {\n const availableEvents = Array.from(this.eventHandlers.keys()).join(', ');\n\n this.logger.warn({\n message: 'Event handler not found for event',\n meta: {\n Event: name,\n AvailableEvents: availableEvents,\n },\n });\n\n throw new Error(`Event handler not found for event '${name}'. Available events are: ${availableEvents}`);\n }\n\n await handler(data);\n\n this.log('Event executed', { Event: name });\n } catch (error) {\n this.logger.error({ error });\n }\n }\n\n /**\n * Log event message\n */\n public log(message: string, meta?: Record<string, unknown>): void {\n this.logger.custom({ level: 'event', message, meta });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/logger/logger.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/logger/logger.ts"],
|
|
4
|
-
"sourcesContent": ["import * as Sentry from '@sentry/node';\nimport { nodeProfilingIntegration } from '@sentry/profiling-node';\nimport cluster from 'node:cluster';\nimport winston from 'winston';\nimport type { LogOptions } from '../websocket/utils.js';\nimport { getRequestId } from '../request-context/index.js';\nimport { safeSerializeError } from '../error/error-reporter.js';\n\nexport type LoggerLevels =\n | 'error'\n | 'warn'\n | 'info'\n | 'command'\n | 'database'\n | 'redis'\n | 'webServer'\n | 'webSocket'\n | 'queue'\n | 'queueJob'\n | 'event'\n | 'debug';\n\nexport class Logger {\n private static instance: Logger;\n private logger: winston.Logger;\n\n private environment: string | undefined;\n\n public isSentryInitialized = false;\n\n private showRequestIdInConsole = true; // Default to true for backward compatibility\n\n private constructor() {\n this.environment = process.env.NODE_ENV;\n\n const customFormat = this.getCustomFormat();\n\n const customLevels: winston.config.AbstractConfigSetLevels = {\n error: 0,\n warn: 1,\n info: 2,\n command: 3,\n database: 4,\n redis: 5,\n webServer: 6,\n webSocket: 7,\n queue: 8,\n queueJob: 9,\n event: 10,\n debug: 11,\n };\n\n const customColors: winston.config.AbstractConfigSetColors = {\n error: 'red',\n warn: 'yellow',\n info: 'blue',\n command: 'cyan',\n database: 'brightGreen',\n redis: 'brightYellow',\n webServer: 'brightBlue',\n webSocket: 'brightMagenta',\n queue: 'gray',\n queueJob: 'blue',\n event: 'brightGreen',\n debug: 'brightCyan',\n };\n\n winston.addColors(customColors);\n\n this.logger = winston.createLogger({\n levels: customLevels,\n level: this.environment === 'production' ? 'info' : 'debug',\n format: winston.format.combine(\n winston.format.timestamp({\n format: 'YYYY-MM-DD HH:mm:ss',\n }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.json(),\n ),\n transports: [\n new winston.transports.Console({\n format: winston.format.combine(winston.format.colorize(), customFormat),\n }),\n ],\n });\n }\n\n public static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n\n return Logger.instance;\n }\n\n private getCustomFormat(): winston.Logform.Format {\n return winston.format.printf(({ level, message, timestamp, ...meta }) => {\n // Auto-inject request ID from AsyncLocalStorage context if available\n const requestId = getRequestId();\n if (requestId && !meta['requestId'] && this.showRequestIdInConsole) {\n meta['requestId'] = requestId;\n }\n\n if (cluster.isWorker && cluster.worker) {\n meta['Worker'] = cluster.worker.id; // .process.pid;\n }\n\n const metaString = Object.entries(meta)\n .map(([key, value]) => {\n // Safely convert value to string representation\n let stringValue: string;\n\n if (value === null) {\n stringValue = 'null';\n } else if (value === undefined) {\n stringValue = 'undefined';\n } else if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n stringValue = String(value);\n } else if (value instanceof Error) {\n stringValue = value.message;\n } else if (value instanceof Promise) {\n stringValue = '[Promise]';\n } else if (typeof value === 'object') {\n try {\n // Attempt to JSON.stringify, but handle circular references\n stringValue = JSON.stringify(value);\n } catch {\n // Fallback for circular references or other issues\n stringValue = '[Object]';\n }\n } else {\n stringValue = String(value);\n }\n\n return `${key}: ${stringValue}`;\n })\n .join(' | ');\n\n if (level === 'error') {\n if (this.isSentryInitialized) {\n const errorMessage = typeof message === 'string' ? message : JSON.stringify(message);\n\n Sentry.captureException(new Error(errorMessage));\n }\n }\n\n return `[${timestamp}] ${level}: ${message}${metaString ? ` (${metaString})` : ''}`;\n });\n }\n\n public configure({ showRequestIdInConsole }: { showRequestIdInConsole?: boolean }): void {\n if (showRequestIdInConsole !== undefined) {\n this.showRequestIdInConsole = showRequestIdInConsole;\n }\n }\n\n public initSentry({ sentryDsn, environment }: { sentryDsn: string; environment: string }): void {\n if (!sentryDsn) {\n this.logger.warn('Missing Sentry DSN when initializing Sentry');\n\n return;\n }\n\n Sentry.init({\n dsn: sentryDsn,\n integrations: [nodeProfilingIntegration()],\n tracesSampleRate: 1.0,\n environment,\n });\n\n this.isSentryInitialized = true;\n }\n\n public log({\n level,\n message,\n meta,\n options: _options,\n }: {\n level: LoggerLevels;\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void {\n // if (options?.muteWorker) {\n // }\n\n if (message instanceof Error) {\n const errorMessage = message.stack ?? message.toString();\n this.logger.log(level, errorMessage, meta);\n } else if (typeof message === 'string') {\n this.logger.log(level, message, meta);\n } else {\n this.logger.log(level, JSON.stringify(message), meta);\n }\n }\n\n public debug({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public debug(message: unknown, meta?: Record<string, unknown>): void;\n public debug(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'debug', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'debug', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n public info({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public info(message: unknown, meta?: Record<string, unknown>): void;\n public info(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'info', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'info', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n public warn({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public warn(message: unknown, meta?: Record<string, unknown>): void;\n public warn(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'warn', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'warn', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n // Overload 1: Object signature (existing usage)\n public error(args: {\n error: Error | unknown;\n message?: string;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n // Overload 2: Positional signature (new usage)\n public error(error: Error | unknown, message?: string, meta?: Record<string, unknown>, options?: LogOptions): void;\n public error(\n arg1:\n | { error: Error | unknown; message?: string; meta?: Record<string, unknown>; options?: LogOptions }\n | (Error | unknown),\n message?: string,\n meta?: Record<string, unknown>,\n options?: LogOptions,\n ): void {\n // Support original object signature: Logger.error({ error, message?, meta?, options? })\n if (\n typeof arg1 === 'object' &&\n arg1 !== null &&\n 'error' in arg1 &&\n // If the caller passed a second positional arg, treat it as new signature\n message === undefined\n ) {\n const {\n error,\n message: objMessage,\n meta: objMeta,\n options: objOptions,\n } = arg1 as {\n error: Error | unknown;\n message?: string;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n };\n\n if (objMessage) {\n const errorMessage = error instanceof Error ? error.message : safeSerializeError(error);\n const combinedMessage = `${objMessage}: ${errorMessage}`;\n // Preserve stack & name when Error instance so callers get actionable traces\n let enhancedMeta = objMeta;\n if (error instanceof Error) {\n enhancedMeta = {\n ...objMeta,\n name: error.name,\n stack: error.stack,\n };\n }\n this.log({ level: 'error', message: combinedMessage, meta: enhancedMeta, options: objOptions });\n if (error instanceof Error && this.isSentryInitialized) {\n Sentry.captureException(error);\n }\n } else {\n // When no custom message, log the raw error. If it's an Error, pass stack & name.\n if (error instanceof Error) {\n const enhancedMeta = {\n ...objMeta,\n name: error.name,\n stack: error.stack,\n };\n // For consistency use the Error object message as primary message\n this.log({ level: 'error', message: error, meta: enhancedMeta, options: objOptions });\n } else {\n this.log({ level: 'error', message: error, meta: objMeta, options: objOptions });\n }\n if (error instanceof Error && this.isSentryInitialized) {\n Sentry.captureException(error);\n }\n }\n return;\n }\n\n // New positional signature: Logger.error(error, message?, meta?, options?)\n const errorObj = arg1;\n if (message) {\n const errorMessage = errorObj instanceof Error ? errorObj.message : safeSerializeError(errorObj);\n const combinedMessage = `${message}: ${errorMessage}`;\n this.log({ level: 'error', message: combinedMessage, meta, options });\n } else {\n this.log({ level: 'error', message: errorObj, meta, options });\n }\n if (errorObj instanceof Error && this.isSentryInitialized) {\n Sentry.captureException(errorObj);\n }\n }\n\n public custom({\n level,\n message,\n meta,\n options,\n }: {\n level: LoggerLevels;\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void {\n this.log({ level, message, meta, options });\n }\n}\n\nexport default Logger.getInstance();\n"],
|
|
5
|
-
"mappings": ";;AAAA,YAAY,YAAY;AACxB,SAAS,gCAAgC;AACzC,OAAO,aAAa;AACpB,OAAO,aAAa;AAEpB,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AAgB5B,MAAM,OAAO;AAAA,EAtBpB,OAsBoB;AAAA;AAAA;AAAA,EAClB,OAAe;AAAA,EACP;AAAA,EAEA;AAAA,EAED,sBAAsB;AAAA,EAErB,yBAAyB;AAAA
|
|
4
|
+
"sourcesContent": ["import * as Sentry from '@sentry/node';\nimport { nodeProfilingIntegration } from '@sentry/profiling-node';\nimport cluster from 'node:cluster';\nimport winston from 'winston';\nimport type { LogOptions } from '../websocket/utils.js';\nimport { getRequestId } from '../request-context/index.js';\nimport { safeSerializeError } from '../error/error-reporter.js';\n\nexport type LoggerLevels =\n | 'error'\n | 'warn'\n | 'info'\n | 'command'\n | 'database'\n | 'redis'\n | 'webServer'\n | 'webSocket'\n | 'queue'\n | 'queueJob'\n | 'event'\n | 'debug';\n\nexport class Logger {\n private static instance: Logger;\n private logger: winston.Logger;\n\n private environment: string | undefined;\n\n public isSentryInitialized = false;\n\n private showRequestIdInConsole = true;\n\n private constructor() {\n this.environment = process.env.NODE_ENV;\n\n const customFormat = this.getCustomFormat();\n\n const customLevels: winston.config.AbstractConfigSetLevels = {\n error: 0,\n warn: 1,\n info: 2,\n command: 3,\n database: 4,\n redis: 5,\n webServer: 6,\n webSocket: 7,\n queue: 8,\n queueJob: 9,\n event: 10,\n debug: 11,\n };\n\n const customColors: winston.config.AbstractConfigSetColors = {\n error: 'red',\n warn: 'yellow',\n info: 'blue',\n command: 'cyan',\n database: 'brightGreen',\n redis: 'brightYellow',\n webServer: 'brightBlue',\n webSocket: 'brightMagenta',\n queue: 'gray',\n queueJob: 'blue',\n event: 'brightGreen',\n debug: 'brightCyan',\n };\n\n winston.addColors(customColors);\n\n this.logger = winston.createLogger({\n levels: customLevels,\n level: this.environment === 'production' ? 'info' : 'debug',\n format: winston.format.combine(\n winston.format.timestamp({\n format: 'YYYY-MM-DD HH:mm:ss',\n }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.json(),\n ),\n transports: [\n new winston.transports.Console({\n format: winston.format.combine(winston.format.colorize(), customFormat),\n }),\n ],\n });\n }\n\n public static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n\n return Logger.instance;\n }\n\n private getCustomFormat(): winston.Logform.Format {\n return winston.format.printf(({ level, message, timestamp, ...meta }) => {\n // Auto-inject request ID from AsyncLocalStorage context if available\n const requestId = getRequestId();\n if (requestId && !meta['requestId'] && this.showRequestIdInConsole) {\n meta['requestId'] = requestId;\n }\n\n if (cluster.isWorker && cluster.worker) {\n meta['Worker'] = cluster.worker.id; // .process.pid;\n }\n\n const metaString = Object.entries(meta)\n .map(([key, value]) => {\n // Safely convert value to string representation\n let stringValue: string;\n\n if (value === null) {\n stringValue = 'null';\n } else if (value === undefined) {\n stringValue = 'undefined';\n } else if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n stringValue = String(value);\n } else if (value instanceof Error) {\n stringValue = value.message;\n } else if (value instanceof Promise) {\n stringValue = '[Promise]';\n } else if (typeof value === 'object') {\n try {\n // Attempt to JSON.stringify, but handle circular references\n stringValue = JSON.stringify(value);\n } catch {\n // Fallback for circular references or other issues\n stringValue = '[Object]';\n }\n } else {\n stringValue = String(value);\n }\n\n return `${key}: ${stringValue}`;\n })\n .join(' | ');\n\n if (level === 'error') {\n if (this.isSentryInitialized) {\n const errorMessage = typeof message === 'string' ? message : JSON.stringify(message);\n\n Sentry.captureException(new Error(errorMessage));\n }\n }\n\n return `[${timestamp}] ${level}: ${message}${metaString ? ` (${metaString})` : ''}`;\n });\n }\n\n public configure({ showRequestIdInConsole }: { showRequestIdInConsole?: boolean }): void {\n if (showRequestIdInConsole !== undefined) {\n this.showRequestIdInConsole = showRequestIdInConsole;\n }\n }\n\n public initSentry({ sentryDsn, environment }: { sentryDsn: string; environment: string }): void {\n if (!sentryDsn) {\n this.logger.warn('Missing Sentry DSN when initializing Sentry');\n\n return;\n }\n\n Sentry.init({\n dsn: sentryDsn,\n integrations: [nodeProfilingIntegration()],\n tracesSampleRate: 1.0,\n environment,\n });\n\n this.isSentryInitialized = true;\n }\n\n public log({\n level,\n message,\n meta,\n options: _options,\n }: {\n level: LoggerLevels;\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void {\n // if (options?.muteWorker) {\n // }\n\n if (message instanceof Error) {\n const errorMessage = message.stack ?? message.toString();\n this.logger.log(level, errorMessage, meta);\n } else if (typeof message === 'string') {\n this.logger.log(level, message, meta);\n } else {\n this.logger.log(level, JSON.stringify(message), meta);\n }\n }\n\n public debug({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public debug(message: unknown, meta?: Record<string, unknown>): void;\n public debug(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'debug', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'debug', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n public info({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public info(message: unknown, meta?: Record<string, unknown>): void;\n public info(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'info', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'info', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n public warn({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public warn(message: unknown, meta?: Record<string, unknown>): void;\n public warn(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'warn', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'warn', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n // Overload 1: Object signature (existing usage)\n public error(args: {\n error: Error | unknown;\n message?: string;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n // Overload 2: Positional signature (new usage)\n public error(error: Error | unknown, message?: string, meta?: Record<string, unknown>, options?: LogOptions): void;\n public error(\n arg1:\n | { error: Error | unknown; message?: string; meta?: Record<string, unknown>; options?: LogOptions }\n | (Error | unknown),\n message?: string,\n meta?: Record<string, unknown>,\n options?: LogOptions,\n ): void {\n // Support original object signature: Logger.error({ error, message?, meta?, options? })\n if (\n typeof arg1 === 'object' &&\n arg1 !== null &&\n 'error' in arg1 &&\n // If the caller passed a second positional arg, treat it as new signature\n message === undefined\n ) {\n const {\n error,\n message: objMessage,\n meta: objMeta,\n options: objOptions,\n } = arg1 as {\n error: Error | unknown;\n message?: string;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n };\n\n if (objMessage) {\n const errorMessage = error instanceof Error ? error.message : safeSerializeError(error);\n const combinedMessage = `${objMessage}: ${errorMessage}`;\n // Preserve stack & name when Error instance so callers get actionable traces\n let enhancedMeta = objMeta;\n if (error instanceof Error) {\n enhancedMeta = {\n ...objMeta,\n name: error.name,\n stack: error.stack,\n };\n }\n this.log({ level: 'error', message: combinedMessage, meta: enhancedMeta, options: objOptions });\n if (error instanceof Error && this.isSentryInitialized) {\n Sentry.captureException(error);\n }\n } else {\n // When no custom message, log the raw error. If it's an Error, pass stack & name.\n if (error instanceof Error) {\n const enhancedMeta = {\n ...objMeta,\n name: error.name,\n stack: error.stack,\n };\n // For consistency use the Error object message as primary message\n this.log({ level: 'error', message: error, meta: enhancedMeta, options: objOptions });\n } else {\n this.log({ level: 'error', message: error, meta: objMeta, options: objOptions });\n }\n if (error instanceof Error && this.isSentryInitialized) {\n Sentry.captureException(error);\n }\n }\n return;\n }\n\n // New positional signature: Logger.error(error, message?, meta?, options?)\n const errorObj = arg1;\n if (message) {\n const errorMessage = errorObj instanceof Error ? errorObj.message : safeSerializeError(errorObj);\n const combinedMessage = `${message}: ${errorMessage}`;\n this.log({ level: 'error', message: combinedMessage, meta, options });\n } else {\n this.log({ level: 'error', message: errorObj, meta, options });\n }\n if (errorObj instanceof Error && this.isSentryInitialized) {\n Sentry.captureException(errorObj);\n }\n }\n\n public custom({\n level,\n message,\n meta,\n options,\n }: {\n level: LoggerLevels;\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void {\n this.log({ level, message, meta, options });\n }\n}\n\nexport default Logger.getInstance();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/queue/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAgD,MAAM,QAAQ,CAAC;AAEhF,OAAO,KAAK,EAAE,6BAA6B,EAAuB,MAAM,wBAAwB,CAAC;AAOjG,OAAO,KAAK,EAAY,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAItD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,MAAM,CAAyB;IAEvC,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,OAAO,CAAC,OAAO,CAAsB;IAErC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC,OAAO,CAAC,MAAM,CAAiC;IAE/C,OAAO,CAAC,aAAa,CAAyC;gBAElD,EACV,iBAAiB,EACjB,OAAO,EACP,MAAM,EAAE,OAAO,EACf,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,EAAE,6BAA6B;IAgBnB,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,EAAE,SAAS,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC/E,OAAO,CAAC,aAAa;IA+DrB,OAAO,CAAC,qBAAqB;IA0C7B,OAAO,CAAC,YAAY,CAElB;IAEF,OAAO,CAAC,cAAc,CAIpB;IAEF,OAAO,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/queue/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAgD,MAAM,QAAQ,CAAC;AAEhF,OAAO,KAAK,EAAE,6BAA6B,EAAuB,MAAM,wBAAwB,CAAC;AAOjG,OAAO,KAAK,EAAY,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAItD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,MAAM,CAAyB;IAEvC,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,OAAO,CAAC,OAAO,CAAsB;IAErC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC,OAAO,CAAC,MAAM,CAAiC;IAE/C,OAAO,CAAC,aAAa,CAAyC;gBAElD,EACV,iBAAiB,EACjB,OAAO,EACP,MAAM,EAAE,OAAO,EACf,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,EAAE,6BAA6B;IAgBnB,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,EAAE,SAAS,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC/E,OAAO,CAAC,aAAa;IA+DrB,OAAO,CAAC,qBAAqB;IA0C7B,OAAO,CAAC,YAAY,CAElB;IAEF,OAAO,CAAC,cAAc,CAIpB;IAEF,OAAO,CAAC,eAAe,CAKrB;IAEF,OAAO,CAAC,cAAc,CAEpB;IAEK,aAAa,GAClB,QAAQ,SAAS,eAAe,GAAG,eAAe,EAClD,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,OAAO,GAAG,OAAO,EACjB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,2BAIC;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;KACzC,KAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,CA0B7E;IAEF,OAAO,CAAC,eAAe,CAqDrB;IAEW,qBAAqB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA6B3D;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAGlE"}
|
package/dist/queue/manager.js
CHANGED
|
@@ -148,16 +148,14 @@ class QueueManager {
|
|
|
148
148
|
this.log("Waiting...", { Queue: job.queueName, Job: job.id });
|
|
149
149
|
}
|
|
150
150
|
}, "onQueueWaiting");
|
|
151
|
-
onQueueProgress = /* @__PURE__ */ __name((
|
|
151
|
+
onQueueProgress = /* @__PURE__ */ __name((jobId, progress) => {
|
|
152
152
|
this.log("Progress update", {
|
|
153
|
-
|
|
154
|
-
"Job Name": job.name,
|
|
155
|
-
"Job ID": job.id,
|
|
153
|
+
"Job ID": jobId,
|
|
156
154
|
Progress: progress
|
|
157
155
|
});
|
|
158
156
|
}, "onQueueProgress");
|
|
159
|
-
onQueueRemoved = /* @__PURE__ */ __name((
|
|
160
|
-
this.log("Removed queue", {
|
|
157
|
+
onQueueRemoved = /* @__PURE__ */ __name((jobId) => {
|
|
158
|
+
this.log("Removed queue", { Job: jobId });
|
|
161
159
|
}, "onQueueRemoved");
|
|
162
160
|
addJobToQueue = /* @__PURE__ */ __name(async ({
|
|
163
161
|
queueId,
|
|
@@ -187,7 +185,21 @@ class QueueManager {
|
|
|
187
185
|
return;
|
|
188
186
|
}
|
|
189
187
|
const startTime = Time.now();
|
|
190
|
-
|
|
188
|
+
if (typeof job.updateData === "function") {
|
|
189
|
+
try {
|
|
190
|
+
await job.updateData({ ...job.data, startTime });
|
|
191
|
+
} catch (error) {
|
|
192
|
+
Logger.warn({
|
|
193
|
+
message: "Failed to persist job metadata before processing",
|
|
194
|
+
meta: {
|
|
195
|
+
Queue: job.queueName,
|
|
196
|
+
"Job Name": job.name,
|
|
197
|
+
"Job ID": job.id,
|
|
198
|
+
Error: error instanceof Error ? error.message : String(error)
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
191
203
|
this.log("Worker processing...", {
|
|
192
204
|
Queue: job.queueName,
|
|
193
205
|
"Job Name": job.name,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/queue/manager.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Job, Queue, type QueueOptions, type WorkerOptions } from 'bullmq';\nimport path from 'path';\nimport type { QueueManagerConstructorParams, QueueManagerOptions } from './manager.interface.js';\nimport type { RedisInstance } from '../redis/index.js';\nimport type { DatabaseInstance } from '../database/index.js';\nimport { Logger } from '../logger/index.js';\nimport QueueWorker from './worker.js';\nimport type BaseProcessor from './processor/base.js';\nimport { File, Helper, Loader, Time } from '../util/index.js';\nimport type { QueueJob, QueueJobData, QueueJobPayload } from './job.interface.js';\nimport type { ProcessorConstructor } from './processor/processor.interface.js';\nimport type { QueueItem } from './index.interface.js';\nimport type { ApplicationConfig } from '../application/base-application.interface.js';\nimport type EventManager from '../event/manager.js';\n\nexport interface JobSummary {\n id: string;\n name: string;\n queueName: string;\n state: 'active' | 'waiting' | 'completed' | 'failed' | 'delayed' | 'paused';\n attemptsMade: number;\n failedReason?: string;\n}\n\nexport default class QueueManager {\n private logger: typeof Logger = Logger;\n\n private applicationConfig: ApplicationConfig;\n\n private options: QueueManagerOptions;\n\n private redisInstance: RedisInstance;\n private databaseInstance: DatabaseInstance | null;\n private eventManager?: EventManager;\n\n private queues: Map<string, Queue> = new Map();\n\n private jobProcessors: Map<string, BaseProcessor> = new Map();\n\n constructor({\n applicationConfig,\n options,\n queues: _queues,\n redisInstance,\n databaseInstance,\n eventManager,\n }: QueueManagerConstructorParams) {\n // Merge options with defaults if provided\n if (options) {\n this.options = options;\n } else {\n // This shouldn't happen, but handle the edge case\n this.options = { processorsDirectory: '' };\n }\n\n this.applicationConfig = applicationConfig;\n\n this.redisInstance = redisInstance;\n this.databaseInstance = databaseInstance;\n this.eventManager = eventManager;\n }\n\n public async registerQueues({ queues }: { queues: QueueItem[] }): Promise<void> {\n if (!queues) {\n return;\n }\n\n // Check if processors directory exists\n const processorsDirectoryExists = await File.pathExists(this.options.processorsDirectory);\n\n if (!processorsDirectoryExists) {\n return;\n }\n\n try {\n const jobProcessorClasses = await Loader.loadModulesInDirectory<ProcessorConstructor>({\n directory: this.options.processorsDirectory,\n extensions: ['.ts', '.js'],\n });\n\n for (const queue of queues) {\n this.registerQueue({ queue, jobProcessorClasses });\n }\n\n if (this.applicationConfig.queue.log?.queuesRegistered) {\n this.log('Registered queue', {\n 'Queue Count': queues.length,\n 'Job Count': this.jobProcessors.size,\n });\n }\n } catch (error) {\n Logger.error({ error });\n }\n }\n\n private registerQueue({\n queue,\n jobProcessorClasses,\n }: {\n queue: QueueItem;\n jobProcessorClasses: Record<string, ProcessorConstructor>;\n }): void {\n if (!queue.jobs) {\n Logger.warn({\n message: 'No jobs found for queue, skip register',\n meta: {\n Name: queue.name,\n },\n });\n\n return;\n }\n\n const queueOptions: QueueOptions = {\n connection: this.redisInstance.client,\n defaultJobOptions: {\n removeOnComplete: true,\n removeOnFail: true,\n },\n };\n\n const queueInstance = new Queue(queue.name, queueOptions);\n\n queueInstance.on('error', this.onQueueError);\n queueInstance.on('waiting', this.onQueueWaiting);\n queueInstance.on('progress', this.onQueueProgress);\n queueInstance.on('removed', this.onQueueRemoved);\n\n if (!queue.isExternal) {\n const workerOptions: WorkerOptions = {\n connection: this.redisInstance.client,\n autorun: true,\n };\n\n new QueueWorker({\n applicationConfig: this.applicationConfig,\n queueManager: this,\n name: queue.name,\n processor: this.workerProcessor,\n options: workerOptions,\n redisInstance: this.redisInstance,\n });\n }\n\n this.queues.set(queue.name, queueInstance);\n\n if (this.applicationConfig.queue.log?.queueRegistered) {\n this.log('Registered queue', { Name: queue.name });\n }\n\n // Register job processors\n this.registerJobProcessors({\n queue,\n jobs: queue.jobs,\n jobProcessorClasses,\n });\n }\n\n private registerJobProcessors({\n queue,\n jobs,\n jobProcessorClasses,\n }: {\n queue: QueueItem;\n jobs: QueueJob[];\n jobProcessorClasses: Record<string, ProcessorConstructor>;\n }): void {\n if (!jobs) {\n return;\n }\n\n const scriptFileExtension = Helper.getScriptFileExtension();\n\n for (const job of jobs) {\n if (!queue.isExternal) {\n const ProcessorClass = jobProcessorClasses[job.id];\n\n if (!ProcessorClass) {\n const jobPath = path.join(this.options.processorsDirectory, `${job.id}.${scriptFileExtension}`);\n\n throw new Error(`Processor class not found (Job ID: ${job.id} | Path: ${jobPath})`);\n }\n\n const processorInstance = new ProcessorClass(\n this,\n this.applicationConfig,\n this.redisInstance,\n this.databaseInstance,\n this.eventManager,\n );\n\n this.jobProcessors.set(job.id, processorInstance);\n }\n\n if (this.applicationConfig.queue.log?.jobRegistered) {\n this.log('Job registered', { ID: job.id });\n }\n }\n }\n\n private onQueueError = (error: Error): void => {\n Logger.error({ error });\n };\n\n private onQueueWaiting = (job: Job): void => {\n if (this.applicationConfig.queue.log?.queueWaiting) {\n this.log('Waiting...', { Queue: job.queueName, Job: job.id });\n }\n };\n\n private onQueueProgress = (job: Job, progress: number | object): void => {\n this.log('Progress update', {\n Queue: job.queueName,\n 'Job Name': job.name,\n 'Job ID': job.id,\n Progress: progress,\n });\n };\n\n private onQueueRemoved = (job: Job): void => {\n this.log('Removed queue', { Queue: job.queueName, Job: job.id });\n };\n\n public addJobToQueue = async <\n TPayload extends QueueJobPayload = QueueJobPayload,\n TMetadata extends Record<string, unknown> = Record<string, unknown>,\n TResult = unknown,\n TName extends string = string,\n >({\n queueId,\n jobId,\n data,\n }: {\n queueId: string;\n jobId: TName;\n data: QueueJobData<TPayload, TMetadata>;\n }): Promise<Job<QueueJobData<TPayload, TMetadata>, TResult, TName> | undefined> => {\n const queue = this.queues.get(queueId);\n\n if (!queue) {\n this.log('Queue not found', { 'Queue ID': queueId });\n\n return;\n }\n\n const job = (await queue.add(jobId, data)) as Job<QueueJobData<TPayload, TMetadata>, TResult, TName>;\n\n const dataStr = JSON.stringify(data);\n\n const maxLogDataStrLength = 50;\n const truncatedLogDataStr =\n dataStr.length > maxLogDataStrLength ? `${dataStr.substring(0, maxLogDataStrLength)}...` : dataStr;\n\n if (this.applicationConfig.queue.log?.jobAdded) {\n this.log('Job added', {\n Queue: queueId,\n 'Job ID': jobId,\n Data: truncatedLogDataStr,\n });\n }\n\n return job;\n };\n\n private workerProcessor = async (job: Job): Promise<unknown> => {\n if (!job) {\n return;\n }\n\n const startTime = Time.now();\n\n // Add start time to job data\n job.updateData({ ...job.data, startTime });\n\n this.log('Worker processing...', {\n Queue: job.queueName,\n 'Job Name': job.name,\n 'Job ID': job.id,\n });\n\n const processor = this.jobProcessors.get(job.name);\n\n if (!processor) {\n throw new Error(`No processor registered for job (Name: ${job.name})`);\n }\n\n try {\n const jobResult = await processor.process({ job });\n\n return jobResult;\n } catch (error) {\n Logger.warn({\n message: 'Queue worker processing error',\n meta: {\n Queue: job.queueName,\n 'Job Name': job.name,\n 'Job ID': job.id,\n Error: (error as Error).message,\n },\n });\n\n Logger.error({ error });\n }\n };\n\n public async listAllJobsWithStatus(): Promise<JobSummary[]> {\n const jobsSummary: JobSummary[] = [];\n\n for (const [queueName, queue] of this.queues) {\n const jobStates = ['active', 'waiting', 'completed', 'failed', 'delayed', 'paused'] as const;\n\n const jobsDetailsPromises = jobStates.map(async state => {\n const jobs = await queue.getJobs([state]);\n return jobs.map(\n (job): JobSummary => ({\n id: job.id ?? 'unknown',\n name: job.name ?? 'unknown',\n queueName,\n state,\n attemptsMade: job.attemptsMade,\n failedReason: job.failedReason,\n }),\n );\n });\n\n const results = await Promise.all(jobsDetailsPromises);\n const flattenedResults = results.flat();\n\n jobsSummary.push(...flattenedResults);\n }\n\n return jobsSummary;\n }\n\n /**\n * Log queue message\n */\n public log(message: string, meta?: Record<string, unknown>): void {\n this.logger.custom({ level: 'queue', message, meta });\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { type Job, Queue, type QueueOptions, type WorkerOptions } from 'bullmq';\nimport path from 'path';\nimport type { QueueManagerConstructorParams, QueueManagerOptions } from './manager.interface.js';\nimport type { RedisInstance } from '../redis/index.js';\nimport type { DatabaseInstance } from '../database/index.js';\nimport { Logger } from '../logger/index.js';\nimport QueueWorker from './worker.js';\nimport type BaseProcessor from './processor/base.js';\nimport { File, Helper, Loader, Time } from '../util/index.js';\nimport type { QueueJob, QueueJobData, QueueJobPayload } from './job.interface.js';\nimport type { ProcessorConstructor } from './processor/processor.interface.js';\nimport type { QueueItem } from './index.interface.js';\nimport type { ApplicationConfig } from '../application/base-application.interface.js';\nimport type EventManager from '../event/manager.js';\n\nexport interface JobSummary {\n id: string;\n name: string;\n queueName: string;\n state: 'active' | 'waiting' | 'completed' | 'failed' | 'delayed' | 'paused';\n attemptsMade: number;\n failedReason?: string;\n}\n\nexport default class QueueManager {\n private logger: typeof Logger = Logger;\n\n private applicationConfig: ApplicationConfig;\n\n private options: QueueManagerOptions;\n\n private redisInstance: RedisInstance;\n private databaseInstance: DatabaseInstance | null;\n private eventManager?: EventManager;\n\n private queues: Map<string, Queue> = new Map();\n\n private jobProcessors: Map<string, BaseProcessor> = new Map();\n\n constructor({\n applicationConfig,\n options,\n queues: _queues,\n redisInstance,\n databaseInstance,\n eventManager,\n }: QueueManagerConstructorParams) {\n // Merge options with defaults if provided\n if (options) {\n this.options = options;\n } else {\n // This shouldn't happen, but handle the edge case\n this.options = { processorsDirectory: '' };\n }\n\n this.applicationConfig = applicationConfig;\n\n this.redisInstance = redisInstance;\n this.databaseInstance = databaseInstance;\n this.eventManager = eventManager;\n }\n\n public async registerQueues({ queues }: { queues: QueueItem[] }): Promise<void> {\n if (!queues) {\n return;\n }\n\n // Check if processors directory exists\n const processorsDirectoryExists = await File.pathExists(this.options.processorsDirectory);\n\n if (!processorsDirectoryExists) {\n return;\n }\n\n try {\n const jobProcessorClasses = await Loader.loadModulesInDirectory<ProcessorConstructor>({\n directory: this.options.processorsDirectory,\n extensions: ['.ts', '.js'],\n });\n\n for (const queue of queues) {\n this.registerQueue({ queue, jobProcessorClasses });\n }\n\n if (this.applicationConfig.queue.log?.queuesRegistered) {\n this.log('Registered queue', {\n 'Queue Count': queues.length,\n 'Job Count': this.jobProcessors.size,\n });\n }\n } catch (error) {\n Logger.error({ error });\n }\n }\n\n private registerQueue({\n queue,\n jobProcessorClasses,\n }: {\n queue: QueueItem;\n jobProcessorClasses: Record<string, ProcessorConstructor>;\n }): void {\n if (!queue.jobs) {\n Logger.warn({\n message: 'No jobs found for queue, skip register',\n meta: {\n Name: queue.name,\n },\n });\n\n return;\n }\n\n const queueOptions: QueueOptions = {\n connection: this.redisInstance.client,\n defaultJobOptions: {\n removeOnComplete: true,\n removeOnFail: true,\n },\n };\n\n const queueInstance = new Queue(queue.name, queueOptions);\n\n queueInstance.on('error', this.onQueueError);\n queueInstance.on('waiting', this.onQueueWaiting);\n queueInstance.on('progress', this.onQueueProgress);\n queueInstance.on('removed', this.onQueueRemoved);\n\n if (!queue.isExternal) {\n const workerOptions: WorkerOptions = {\n connection: this.redisInstance.client,\n autorun: true,\n };\n\n new QueueWorker({\n applicationConfig: this.applicationConfig,\n queueManager: this,\n name: queue.name,\n processor: this.workerProcessor,\n options: workerOptions,\n redisInstance: this.redisInstance,\n });\n }\n\n this.queues.set(queue.name, queueInstance);\n\n if (this.applicationConfig.queue.log?.queueRegistered) {\n this.log('Registered queue', { Name: queue.name });\n }\n\n // Register job processors\n this.registerJobProcessors({\n queue,\n jobs: queue.jobs,\n jobProcessorClasses,\n });\n }\n\n private registerJobProcessors({\n queue,\n jobs,\n jobProcessorClasses,\n }: {\n queue: QueueItem;\n jobs: QueueJob[];\n jobProcessorClasses: Record<string, ProcessorConstructor>;\n }): void {\n if (!jobs) {\n return;\n }\n\n const scriptFileExtension = Helper.getScriptFileExtension();\n\n for (const job of jobs) {\n if (!queue.isExternal) {\n const ProcessorClass = jobProcessorClasses[job.id];\n\n if (!ProcessorClass) {\n const jobPath = path.join(this.options.processorsDirectory, `${job.id}.${scriptFileExtension}`);\n\n throw new Error(`Processor class not found (Job ID: ${job.id} | Path: ${jobPath})`);\n }\n\n const processorInstance = new ProcessorClass(\n this,\n this.applicationConfig,\n this.redisInstance,\n this.databaseInstance,\n this.eventManager,\n );\n\n this.jobProcessors.set(job.id, processorInstance);\n }\n\n if (this.applicationConfig.queue.log?.jobRegistered) {\n this.log('Job registered', { ID: job.id });\n }\n }\n }\n\n private onQueueError = (error: Error): void => {\n Logger.error({ error });\n };\n\n private onQueueWaiting = (job: Job): void => {\n if (this.applicationConfig.queue.log?.queueWaiting) {\n this.log('Waiting...', { Queue: job.queueName, Job: job.id });\n }\n };\n\n private onQueueProgress = (jobId: string, progress: unknown): void => {\n this.log('Progress update', {\n 'Job ID': jobId,\n Progress: progress,\n });\n };\n\n private onQueueRemoved = (jobId: string): void => {\n this.log('Removed queue', { Job: jobId });\n };\n\n public addJobToQueue = async <\n TPayload extends QueueJobPayload = QueueJobPayload,\n TMetadata extends Record<string, unknown> = Record<string, unknown>,\n TResult = unknown,\n TName extends string = string,\n >({\n queueId,\n jobId,\n data,\n }: {\n queueId: string;\n jobId: TName;\n data: QueueJobData<TPayload, TMetadata>;\n }): Promise<Job<QueueJobData<TPayload, TMetadata>, TResult, TName> | undefined> => {\n const queue = this.queues.get(queueId);\n\n if (!queue) {\n this.log('Queue not found', { 'Queue ID': queueId });\n\n return;\n }\n\n const job = (await queue.add(jobId, data)) as Job<QueueJobData<TPayload, TMetadata>, TResult, TName>;\n\n const dataStr = JSON.stringify(data);\n\n const maxLogDataStrLength = 50;\n const truncatedLogDataStr =\n dataStr.length > maxLogDataStrLength ? `${dataStr.substring(0, maxLogDataStrLength)}...` : dataStr;\n\n if (this.applicationConfig.queue.log?.jobAdded) {\n this.log('Job added', {\n Queue: queueId,\n 'Job ID': jobId,\n Data: truncatedLogDataStr,\n });\n }\n\n return job;\n };\n\n private workerProcessor = async (job: Job): Promise<unknown> => {\n if (!job) {\n return;\n }\n\n const startTime = Time.now();\n\n // Add start time to job data\n if (typeof job.updateData === 'function') {\n try {\n await job.updateData({ ...job.data, startTime });\n } catch (error) {\n Logger.warn({\n message: 'Failed to persist job metadata before processing',\n meta: {\n Queue: job.queueName,\n 'Job Name': job.name,\n 'Job ID': job.id,\n Error: error instanceof Error ? error.message : String(error),\n },\n });\n }\n }\n\n this.log('Worker processing...', {\n Queue: job.queueName,\n 'Job Name': job.name,\n 'Job ID': job.id,\n });\n\n const processor = this.jobProcessors.get(job.name);\n\n if (!processor) {\n throw new Error(`No processor registered for job (Name: ${job.name})`);\n }\n\n try {\n const jobResult = await processor.process({ job });\n\n return jobResult;\n } catch (error) {\n Logger.warn({\n message: 'Queue worker processing error',\n meta: {\n Queue: job.queueName,\n 'Job Name': job.name,\n 'Job ID': job.id,\n Error: (error as Error).message,\n },\n });\n\n Logger.error({ error });\n }\n };\n\n public async listAllJobsWithStatus(): Promise<JobSummary[]> {\n const jobsSummary: JobSummary[] = [];\n\n for (const [queueName, queue] of this.queues) {\n const jobStates = ['active', 'waiting', 'completed', 'failed', 'delayed', 'paused'] as const;\n\n const jobsDetailsPromises = jobStates.map(async state => {\n const jobs = await queue.getJobs([state]);\n return jobs.map(\n (job): JobSummary => ({\n id: job.id ?? 'unknown',\n name: job.name ?? 'unknown',\n queueName,\n state,\n attemptsMade: job.attemptsMade,\n failedReason: job.failedReason,\n }),\n );\n });\n\n const results = await Promise.all(jobsDetailsPromises);\n const flattenedResults = results.flat();\n\n jobsSummary.push(...flattenedResults);\n }\n\n return jobsSummary;\n }\n\n /**\n * Log queue message\n */\n public log(message: string, meta?: Record<string, unknown>): void {\n this.logger.custom({ level: 'queue', message, meta });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/redis/instance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,OAAO,CAAC,YAAY,CAAe;IAE5B,MAAM,EAAE,KAAK,CAAC;IACd,eAAe,EAAE,KAAK,CAAC;IACvB,gBAAgB,EAAE,KAAK,CAAC;gBAEnB,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,EAAE,kBAAkB;IAQ9E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBjC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBtC;;;;;;;;OAQG;IACU,QAAQ,CAAC,EACpB,GAAG,EACH,KAAK,EACL,UAAU,GACX,EAAE;QACD,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,OAAO,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/redis/instance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,OAAO,CAAC,YAAY,CAAe;IAE5B,MAAM,EAAE,KAAK,CAAC;IACd,eAAe,EAAE,KAAK,CAAC;IACvB,gBAAgB,EAAE,KAAK,CAAC;gBAEnB,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,EAAE,kBAAkB;IAQ9E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBjC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBtC;;;;;;;;OAQG;IACU,QAAQ,CAAC,EACpB,GAAG,EACH,KAAK,EACL,UAAU,GACX,EAAE;QACD,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,OAAO,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BJ,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM1D,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlE"}
|
package/dist/redis/instance.js
CHANGED
|
@@ -63,12 +63,20 @@ class RedisInstance {
|
|
|
63
63
|
expiration
|
|
64
64
|
}) {
|
|
65
65
|
let formattedValue;
|
|
66
|
-
if (
|
|
66
|
+
if (Buffer.isBuffer(value)) {
|
|
67
|
+
formattedValue = value;
|
|
68
|
+
} else if (value === null) {
|
|
69
|
+
formattedValue = "null";
|
|
70
|
+
} else if (typeof value === "object") {
|
|
67
71
|
formattedValue = JSON.stringify(value);
|
|
68
72
|
} else if (typeof value === "number") {
|
|
69
73
|
formattedValue = value;
|
|
70
74
|
} else if (typeof value === "string") {
|
|
71
75
|
formattedValue = value;
|
|
76
|
+
} else if (typeof value === "boolean") {
|
|
77
|
+
formattedValue = value ? "true" : "false";
|
|
78
|
+
} else if (typeof value === "bigint") {
|
|
79
|
+
formattedValue = value.toString();
|
|
72
80
|
} else {
|
|
73
81
|
throw new Error("Unsupported value type");
|
|
74
82
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/redis/instance.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Redis } from 'ioredis';\nimport { Logger } from '../logger/index.js';\nimport type { RedisInstanceProps } from './instance.interface.js';\nimport type RedisManager from './manager.js';\n\nexport default class RedisInstance {\n private redisManager: RedisManager;\n\n public client: Redis;\n public publisherClient: Redis;\n public subscriberClient: Redis;\n\n constructor({ redisManager, client, publisherClient, subscriberClient }: RedisInstanceProps) {\n this.redisManager = redisManager;\n\n this.client = client;\n this.publisherClient = publisherClient;\n this.subscriberClient = subscriberClient;\n }\n\n public async disconnect(): Promise<void> {\n try {\n this.subscriberClient.disconnect();\n } catch (error) {\n Logger.error({ error, message: 'Could not disconnect Redis subscriber client' });\n }\n\n try {\n this.publisherClient.disconnect();\n } catch (error) {\n Logger.error({ error, message: 'Could not disconnect Redis publisherClient' });\n }\n\n try {\n this.client.disconnect();\n } catch (error) {\n Logger.error({ error, message: 'Could not disconnect Redis client' });\n }\n\n this.redisManager.log('Disconnected');\n }\n\n public isConnected(): Promise<boolean> {\n return new Promise((resolve, reject) => {\n if (this.client) {\n this.client.ping(error => {\n if (error) {\n reject(error);\n } else {\n resolve(true);\n }\n });\n } else {\n resolve(false);\n }\n });\n }\n\n /**\n * Sets a value in the cache with an optional expiration time.\n *\n * @param key - The key to set in the cache.\n * @param value - The value to set in the cache.\n * @param expiration - The expiration time in seconds (optional).\n * @throws Error if the value type is not supported.\n * @returns A Promise that resolves when the value is set in the cache.\n */\n public async setCache({\n key,\n value,\n expiration,\n }: {\n key: string;\n value: unknown;\n expiration?: number;\n }): Promise<void> {\n let formattedValue: string | number | Buffer;\n\n if (typeof value === 'object') {\n formattedValue = JSON.stringify(value);\n } else if (typeof value === 'number') {\n formattedValue = value;\n } else if (typeof value === 'string') {\n formattedValue = value;\n } else {\n throw new Error('Unsupported value type');\n }\n\n if (expiration) {\n await this.client.set(key, formattedValue, 'EX', expiration);\n } else {\n await this.client.set(key, formattedValue);\n }\n }\n\n public async getCache({ key }: { key: string }): Promise<string | null> {\n const cacheValue = this.client.get(key);\n\n return cacheValue;\n }\n\n public async deleteCache({ key }: { key: string }): Promise<void> {\n await this.client.del(key);\n }\n}\n"],
|
|
5
|
-
"mappings": ";;AACA,SAAS,cAAc;AAIvB,MAAO,cAA4B;AAAA,EALnC,OAKmC;AAAA;AAAA;AAAA,EACzB;AAAA,EAED;AAAA,EACA;AAAA,EACA;AAAA,EAEP,YAAY,EAAE,cAAc,QAAQ,iBAAiB,iBAAiB,GAAuB;AAC3F,SAAK,eAAe;AAEpB,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,MAAa,aAA4B;AACvC,QAAI;AACF,WAAK,iBAAiB,WAAW;AAAA,IACnC,SAAS,OAAO;AACd,aAAO,MAAM,EAAE,OAAO,SAAS,+CAA+C,CAAC;AAAA,IACjF;AAEA,QAAI;AACF,WAAK,gBAAgB,WAAW;AAAA,IAClC,SAAS,OAAO;AACd,aAAO,MAAM,EAAE,OAAO,SAAS,6CAA6C,CAAC;AAAA,IAC/E;AAEA,QAAI;AACF,WAAK,OAAO,WAAW;AAAA,IACzB,SAAS,OAAO;AACd,aAAO,MAAM,EAAE,OAAO,SAAS,oCAAoC,CAAC;AAAA,IACtE;AAEA,SAAK,aAAa,IAAI,cAAc;AAAA,EACtC;AAAA,EAEO,cAAgC;AACrC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI,KAAK,QAAQ;AACf,aAAK,OAAO,KAAK,WAAS;AACxB,cAAI,OAAO;AACT,mBAAO,KAAK;AAAA,UACd,OAAO;AACL,oBAAQ,IAAI;AAAA,UACd;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AACL,gBAAQ,KAAK;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAa,SAAS;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIkB;AAChB,QAAI;AAEJ,QAAI,OAAO,UAAU,UAAU;
|
|
4
|
+
"sourcesContent": ["import type { Redis } from 'ioredis';\nimport { Logger } from '../logger/index.js';\nimport type { RedisInstanceProps } from './instance.interface.js';\nimport type RedisManager from './manager.js';\n\nexport default class RedisInstance {\n private redisManager: RedisManager;\n\n public client: Redis;\n public publisherClient: Redis;\n public subscriberClient: Redis;\n\n constructor({ redisManager, client, publisherClient, subscriberClient }: RedisInstanceProps) {\n this.redisManager = redisManager;\n\n this.client = client;\n this.publisherClient = publisherClient;\n this.subscriberClient = subscriberClient;\n }\n\n public async disconnect(): Promise<void> {\n try {\n this.subscriberClient.disconnect();\n } catch (error) {\n Logger.error({ error, message: 'Could not disconnect Redis subscriber client' });\n }\n\n try {\n this.publisherClient.disconnect();\n } catch (error) {\n Logger.error({ error, message: 'Could not disconnect Redis publisherClient' });\n }\n\n try {\n this.client.disconnect();\n } catch (error) {\n Logger.error({ error, message: 'Could not disconnect Redis client' });\n }\n\n this.redisManager.log('Disconnected');\n }\n\n public isConnected(): Promise<boolean> {\n return new Promise((resolve, reject) => {\n if (this.client) {\n this.client.ping(error => {\n if (error) {\n reject(error);\n } else {\n resolve(true);\n }\n });\n } else {\n resolve(false);\n }\n });\n }\n\n /**\n * Sets a value in the cache with an optional expiration time.\n *\n * @param key - The key to set in the cache.\n * @param value - The value to set in the cache.\n * @param expiration - The expiration time in seconds (optional).\n * @throws Error if the value type is not supported.\n * @returns A Promise that resolves when the value is set in the cache.\n */\n public async setCache({\n key,\n value,\n expiration,\n }: {\n key: string;\n value: unknown;\n expiration?: number;\n }): Promise<void> {\n let formattedValue: string | number | Buffer;\n\n if (Buffer.isBuffer(value)) {\n formattedValue = value;\n } else if (value === null) {\n formattedValue = 'null';\n } else if (typeof value === 'object') {\n formattedValue = JSON.stringify(value);\n } else if (typeof value === 'number') {\n formattedValue = value;\n } else if (typeof value === 'string') {\n formattedValue = value;\n } else if (typeof value === 'boolean') {\n formattedValue = value ? 'true' : 'false';\n } else if (typeof value === 'bigint') {\n formattedValue = value.toString();\n } else {\n throw new Error('Unsupported value type');\n }\n\n if (expiration) {\n await this.client.set(key, formattedValue, 'EX', expiration);\n } else {\n await this.client.set(key, formattedValue);\n }\n }\n\n public async getCache({ key }: { key: string }): Promise<string | null> {\n const cacheValue = this.client.get(key);\n\n return cacheValue;\n }\n\n public async deleteCache({ key }: { key: string }): Promise<void> {\n await this.client.del(key);\n }\n}\n"],
|
|
5
|
+
"mappings": ";;AACA,SAAS,cAAc;AAIvB,MAAO,cAA4B;AAAA,EALnC,OAKmC;AAAA;AAAA;AAAA,EACzB;AAAA,EAED;AAAA,EACA;AAAA,EACA;AAAA,EAEP,YAAY,EAAE,cAAc,QAAQ,iBAAiB,iBAAiB,GAAuB;AAC3F,SAAK,eAAe;AAEpB,SAAK,SAAS;AACd,SAAK,kBAAkB;AACvB,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,MAAa,aAA4B;AACvC,QAAI;AACF,WAAK,iBAAiB,WAAW;AAAA,IACnC,SAAS,OAAO;AACd,aAAO,MAAM,EAAE,OAAO,SAAS,+CAA+C,CAAC;AAAA,IACjF;AAEA,QAAI;AACF,WAAK,gBAAgB,WAAW;AAAA,IAClC,SAAS,OAAO;AACd,aAAO,MAAM,EAAE,OAAO,SAAS,6CAA6C,CAAC;AAAA,IAC/E;AAEA,QAAI;AACF,WAAK,OAAO,WAAW;AAAA,IACzB,SAAS,OAAO;AACd,aAAO,MAAM,EAAE,OAAO,SAAS,oCAAoC,CAAC;AAAA,IACtE;AAEA,SAAK,aAAa,IAAI,cAAc;AAAA,EACtC;AAAA,EAEO,cAAgC;AACrC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI,KAAK,QAAQ;AACf,aAAK,OAAO,KAAK,WAAS;AACxB,cAAI,OAAO;AACT,mBAAO,KAAK;AAAA,UACd,OAAO;AACL,oBAAQ,IAAI;AAAA,UACd;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AACL,gBAAQ,KAAK;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAa,SAAS;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIkB;AAChB,QAAI;AAEJ,QAAI,OAAO,SAAS,KAAK,GAAG;AAC1B,uBAAiB;AAAA,IACnB,WAAW,UAAU,MAAM;AACzB,uBAAiB;AAAA,IACnB,WAAW,OAAO,UAAU,UAAU;AACpC,uBAAiB,KAAK,UAAU,KAAK;AAAA,IACvC,WAAW,OAAO,UAAU,UAAU;AACpC,uBAAiB;AAAA,IACnB,WAAW,OAAO,UAAU,UAAU;AACpC,uBAAiB;AAAA,IACnB,WAAW,OAAO,UAAU,WAAW;AACrC,uBAAiB,QAAQ,SAAS;AAAA,IACpC,WAAW,OAAO,UAAU,UAAU;AACpC,uBAAiB,MAAM,SAAS;AAAA,IAClC,OAAO;AACL,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC1C;AAEA,QAAI,YAAY;AACd,YAAM,KAAK,OAAO,IAAI,KAAK,gBAAgB,MAAM,UAAU;AAAA,IAC7D,OAAO;AACL,YAAM,KAAK,OAAO,IAAI,KAAK,cAAc;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,MAAa,SAAS,EAAE,IAAI,GAA4C;AACtE,UAAM,aAAa,KAAK,OAAO,IAAI,GAAG;AAEtC,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,YAAY,EAAE,IAAI,GAAmC;AAChE,UAAM,KAAK,OAAO,IAAI,GAAG;AAAA,EAC3B;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/redis/manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,aAAa,MAAM,eAAe,CAAC;AAwJ1C,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,MAAM,CAAyB;IAEvC,OAAO,CAAC,OAAO,CAAsB;IAE9B,SAAS,EAAE,aAAa,EAAE,CAAM;gBAE3B,MAAM,EAAE,mBAAmB;IAI1B,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/redis/manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,aAAa,MAAM,eAAe,CAAC;AAwJ1C,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,MAAM,CAAyB;IAEvC,OAAO,CAAC,OAAO,CAAsB;IAE9B,SAAS,EAAE,aAAa,EAAE,CAAM;gBAE3B,MAAM,EAAE,mBAAmB;IAI1B,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IA8GjC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiDxC;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAGlE"}
|