@scpxl/nodejs-framework 1.0.20 → 1.0.24

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.
Files changed (103) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +719 -66
  3. package/dist/application/base-application.d.ts.map +1 -1
  4. package/dist/application/base-application.interface.d.ts +1 -0
  5. package/dist/application/base-application.interface.d.ts.map +1 -1
  6. package/dist/application/base-application.js +4 -1
  7. package/dist/application/base-application.js.map +2 -2
  8. package/dist/application/command-application.d.ts.map +1 -1
  9. package/dist/application/command-application.js.map +2 -2
  10. package/dist/application/web-application.d.ts.map +1 -1
  11. package/dist/application/web-application.js +2 -0
  12. package/dist/application/web-application.js.map +2 -2
  13. package/dist/cli/index.d.ts +2 -0
  14. package/dist/cli/index.d.ts.map +1 -0
  15. package/dist/cli/index.js +5655 -0
  16. package/dist/cli/index.js.map +7 -0
  17. package/dist/command/command.d.ts +1 -1
  18. package/dist/command/command.d.ts.map +1 -1
  19. package/dist/command/command.js.map +1 -1
  20. package/dist/config/schema.d.ts +40 -16
  21. package/dist/config/schema.d.ts.map +1 -1
  22. package/dist/config/schema.js +17 -7
  23. package/dist/config/schema.js.map +2 -2
  24. package/dist/event/manager.d.ts +2 -2
  25. package/dist/event/manager.d.ts.map +1 -1
  26. package/dist/event/manager.interface.d.ts +4 -1
  27. package/dist/event/manager.interface.d.ts.map +1 -1
  28. package/dist/event/manager.js.map +2 -2
  29. package/dist/lifecycle/lifecycle-manager.d.ts +1 -1
  30. package/dist/lifecycle/lifecycle-manager.d.ts.map +1 -1
  31. package/dist/lifecycle/lifecycle-manager.js +6 -11
  32. package/dist/lifecycle/lifecycle-manager.js.map +2 -2
  33. package/dist/logger/logger.d.ts +4 -0
  34. package/dist/logger/logger.d.ts.map +1 -1
  35. package/dist/logger/logger.js +29 -2
  36. package/dist/logger/logger.js.map +2 -2
  37. package/dist/queue/index.d.ts +1 -1
  38. package/dist/queue/index.d.ts.map +1 -1
  39. package/dist/queue/index.js.map +1 -1
  40. package/dist/queue/job.interface.d.ts +4 -3
  41. package/dist/queue/job.interface.d.ts.map +1 -1
  42. package/dist/queue/manager.d.ts +14 -6
  43. package/dist/queue/manager.d.ts.map +1 -1
  44. package/dist/queue/manager.js +24 -12
  45. package/dist/queue/manager.js.map +2 -2
  46. package/dist/queue/processor/base.d.ts +6 -5
  47. package/dist/queue/processor/base.d.ts.map +1 -1
  48. package/dist/queue/processor/base.js.map +2 -2
  49. package/dist/queue/processor/processor.interface.d.ts +4 -3
  50. package/dist/queue/processor/processor.interface.d.ts.map +1 -1
  51. package/dist/redis/manager.d.ts.map +1 -1
  52. package/dist/redis/manager.js +13 -14
  53. package/dist/redis/manager.js.map +2 -2
  54. package/dist/services/aws/s3.js.map +2 -2
  55. package/dist/util/helper.d.ts +9 -10
  56. package/dist/util/helper.d.ts.map +1 -1
  57. package/dist/util/helper.js +73 -11
  58. package/dist/util/helper.js.map +2 -2
  59. package/dist/util/loader.d.ts +8 -6
  60. package/dist/util/loader.d.ts.map +1 -1
  61. package/dist/util/loader.js +5 -2
  62. package/dist/util/loader.js.map +2 -2
  63. package/dist/util/timing.interface.d.ts +1 -1
  64. package/dist/util/timing.interface.d.ts.map +1 -1
  65. package/dist/webserver/controller/base.d.ts +9 -9
  66. package/dist/webserver/controller/base.d.ts.map +1 -1
  67. package/dist/webserver/controller/base.interface.d.ts +12 -9
  68. package/dist/webserver/controller/base.interface.d.ts.map +1 -1
  69. package/dist/webserver/controller/base.js.map +2 -2
  70. package/dist/webserver/define-action.d.ts +26 -0
  71. package/dist/webserver/define-action.d.ts.map +1 -0
  72. package/dist/webserver/define-action.js +16 -0
  73. package/dist/webserver/define-action.js.map +7 -0
  74. package/dist/webserver/define-route.d.ts +53 -0
  75. package/dist/webserver/define-route.d.ts.map +1 -0
  76. package/dist/webserver/define-route.js +27 -0
  77. package/dist/webserver/define-route.js.map +7 -0
  78. package/dist/webserver/index.d.ts +4 -2
  79. package/dist/webserver/index.d.ts.map +1 -1
  80. package/dist/webserver/index.js +4 -0
  81. package/dist/webserver/index.js.map +2 -2
  82. package/dist/webserver/util.d.ts.map +1 -1
  83. package/dist/webserver/util.js +5 -2
  84. package/dist/webserver/util.js.map +2 -2
  85. package/dist/webserver/webserver.d.ts +20 -6
  86. package/dist/webserver/webserver.d.ts.map +1 -1
  87. package/dist/webserver/webserver.interface.d.ts +30 -4
  88. package/dist/webserver/webserver.interface.d.ts.map +1 -1
  89. package/dist/webserver/webserver.interface.js.map +2 -2
  90. package/dist/webserver/webserver.js +209 -57
  91. package/dist/webserver/webserver.js.map +2 -2
  92. package/dist/websocket/websocket-base.d.ts +6 -2
  93. package/dist/websocket/websocket-base.d.ts.map +1 -1
  94. package/dist/websocket/websocket-base.js.map +2 -2
  95. package/dist/websocket/websocket-client.js.map +1 -1
  96. package/dist/websocket/websocket-server.d.ts.map +1 -1
  97. package/dist/websocket/websocket-server.js +38 -14
  98. package/dist/websocket/websocket-server.js.map +2 -2
  99. package/dist/websocket/websocket.interface.d.ts +9 -4
  100. package/dist/websocket/websocket.interface.d.ts.map +1 -1
  101. package/dist/websocket/websocket.interface.js.map +2 -2
  102. package/package.json +14 -13
  103. package/pxl.js +0 -4
@@ -18,7 +18,7 @@ export default abstract class Command {
18
18
  /**
19
19
  * Run command
20
20
  */
21
- abstract run(): Promise<void>;
21
+ abstract run(argv?: unknown): Promise<void>;
22
22
  /**
23
23
  * Log command message
24
24
  */
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/command/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,OAAO;IACnC,mBAAmB;IACnB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,0BAA0B;IAC1B,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAE/C,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC;gBAEpB,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAAE,wBAAwB;IAU1G;;OAEG;aACa,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAEpC;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAUlE"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/command/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,OAAO;IACnC,mBAAmB;IACnB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,0BAA0B;IAC1B,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAE/C,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC;gBAEpB,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAAE,wBAAwB;IAU1G;;OAEG;aACa,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAElD;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAUlE"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/command/command.ts"],
4
- "sourcesContent": ["import type { ApplicationConfig } from '../application/base-application.interface.js';\nimport type DatabaseInstance from '../database/instance.js';\nimport type { QueueManager } from '../queue/index.js';\nimport type RedisInstance from '../redis/instance.js';\nimport type { CommandConstructorParams } from './command.interface.js';\nimport { Logger } from '../logger/index.js';\n\nexport default abstract class Command {\n /** Command name */\n public abstract name: string;\n\n /** Command description */\n public abstract description: string;\n\n protected applicationConfig: ApplicationConfig;\n\n protected redisInstance: RedisInstance;\n protected queueManager: QueueManager;\n protected databaseInstance: DatabaseInstance;\n\n protected logger: typeof Logger;\n\n constructor({ applicationConfig, redisInstance, queueManager, databaseInstance }: CommandConstructorParams) {\n this.applicationConfig = applicationConfig;\n\n this.redisInstance = redisInstance;\n this.queueManager = queueManager;\n this.databaseInstance = databaseInstance;\n\n this.logger = Logger;\n }\n\n /**\n * Run command\n */\n public abstract run(): Promise<void>;\n\n /**\n * Log command message\n */\n public log(message: string, meta?: Record<string, unknown>): void {\n this.logger.custom({\n level: 'command',\n message,\n meta: {\n Command: this.name,\n ...meta,\n },\n });\n }\n}\n"],
4
+ "sourcesContent": ["import type { ApplicationConfig } from '../application/base-application.interface.js';\nimport type DatabaseInstance from '../database/instance.js';\nimport type { QueueManager } from '../queue/index.js';\nimport type RedisInstance from '../redis/instance.js';\nimport type { CommandConstructorParams } from './command.interface.js';\nimport { Logger } from '../logger/index.js';\n\nexport default abstract class Command {\n /** Command name */\n public abstract name: string;\n\n /** Command description */\n public abstract description: string;\n\n protected applicationConfig: ApplicationConfig;\n\n protected redisInstance: RedisInstance;\n protected queueManager: QueueManager;\n protected databaseInstance: DatabaseInstance;\n\n protected logger: typeof Logger;\n\n constructor({ applicationConfig, redisInstance, queueManager, databaseInstance }: CommandConstructorParams) {\n this.applicationConfig = applicationConfig;\n\n this.redisInstance = redisInstance;\n this.queueManager = queueManager;\n this.databaseInstance = databaseInstance;\n\n this.logger = Logger;\n }\n\n /**\n * Run command\n */\n public abstract run(argv?: unknown): Promise<void>;\n\n /**\n * Log command message\n */\n public log(message: string, meta?: Record<string, unknown>): void {\n this.logger.custom({\n level: 'command',\n message,\n meta: {\n Command: this.name,\n ...meta,\n },\n });\n }\n}\n"],
5
5
  "mappings": ";;AAKA,SAAS,cAAc;AAEvB,MAAO,QAA+B;AAAA,EAPtC,OAOsC;AAAA;AAAA;AAAA,EAO1B;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAEV,YAAY,EAAE,mBAAmB,eAAe,cAAc,iBAAiB,GAA6B;AAC1G,SAAK,oBAAoB;AAEzB,SAAK,gBAAgB;AACrB,SAAK,eAAe;AACpB,SAAK,mBAAmB;AAExB,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAUO,IAAI,SAAiB,MAAsC;AAChE,SAAK,OAAO,OAAO;AAAA,MACjB,OAAO;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACJ,SAAS,KAAK;AAAA,QACd,GAAG;AAAA,MACL;AAAA,IACF,CAAC;AAAA,EACH;AACF;",
6
6
  "names": []
7
7
  }
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  export declare const RedisConfigSchema: z.ZodObject<{
3
3
  host: z.ZodString;
4
4
  port: z.ZodDefault<z.ZodNumber>;
5
- password: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
5
+ password: z.ZodOptional<z.ZodString>;
6
6
  }, z.core.$strip>;
7
7
  export declare const DatabaseConfigSchema: z.ZodObject<{
8
8
  enabled: z.ZodDefault<z.ZodBoolean>;
@@ -21,16 +21,26 @@ export declare const QueueLogConfigSchema: z.ZodOptional<z.ZodObject<{
21
21
  queuesRegistered: z.ZodOptional<z.ZodBoolean>;
22
22
  queueWaiting: z.ZodOptional<z.ZodBoolean>;
23
23
  }, z.core.$strip>>;
24
+ export declare const QueueJobSchema: z.ZodObject<{
25
+ id: z.ZodString;
26
+ maxConcurrency: z.ZodOptional<z.ZodNumber>;
27
+ }, z.core.$strip>;
24
28
  export declare const QueueItemSchema: z.ZodObject<{
25
29
  name: z.ZodString;
26
30
  isExternal: z.ZodOptional<z.ZodBoolean>;
27
- jobs: z.ZodDefault<z.ZodArray<z.ZodAny>>;
31
+ jobs: z.ZodDefault<z.ZodArray<z.ZodObject<{
32
+ id: z.ZodString;
33
+ maxConcurrency: z.ZodOptional<z.ZodNumber>;
34
+ }, z.core.$strip>>>;
28
35
  }, z.core.$strip>;
29
36
  export declare const QueueConfigSchema: z.ZodObject<{
30
37
  queues: z.ZodDefault<z.ZodArray<z.ZodObject<{
31
38
  name: z.ZodString;
32
39
  isExternal: z.ZodOptional<z.ZodBoolean>;
33
- jobs: z.ZodDefault<z.ZodArray<z.ZodAny>>;
40
+ jobs: z.ZodDefault<z.ZodArray<z.ZodObject<{
41
+ id: z.ZodString;
42
+ maxConcurrency: z.ZodOptional<z.ZodNumber>;
43
+ }, z.core.$strip>>>;
34
44
  }, z.core.$strip>>>;
35
45
  processorsDirectory: z.ZodString;
36
46
  log: z.ZodOptional<z.ZodObject<{
@@ -120,11 +130,13 @@ export declare const WebServerRouteSchema: z.ZodObject<{
120
130
  method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
121
131
  path: z.ZodString;
122
132
  url: z.ZodOptional<z.ZodString>;
123
- controller: z.ZodOptional<z.ZodAny>;
133
+ controller: z.ZodOptional<z.ZodUnknown>;
124
134
  controllerName: z.ZodOptional<z.ZodString>;
125
135
  action: z.ZodOptional<z.ZodString>;
126
136
  entityName: z.ZodOptional<z.ZodString>;
127
- validation: z.ZodOptional<z.ZodAny>;
137
+ validation: z.ZodOptional<z.ZodUnknown>;
138
+ handler: z.ZodOptional<z.ZodUnknown>;
139
+ schema: z.ZodOptional<z.ZodUnknown>;
128
140
  }, z.core.$loose>;
129
141
  export declare const WebServerConfigSchema: z.ZodObject<{
130
142
  enabled: z.ZodDefault<z.ZodBoolean>;
@@ -137,13 +149,16 @@ export declare const WebServerConfigSchema: z.ZodObject<{
137
149
  method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
138
150
  path: z.ZodString;
139
151
  url: z.ZodOptional<z.ZodString>;
140
- controller: z.ZodOptional<z.ZodAny>;
152
+ controller: z.ZodOptional<z.ZodUnknown>;
141
153
  controllerName: z.ZodOptional<z.ZodString>;
142
154
  action: z.ZodOptional<z.ZodString>;
143
155
  entityName: z.ZodOptional<z.ZodString>;
144
- validation: z.ZodOptional<z.ZodAny>;
156
+ validation: z.ZodOptional<z.ZodUnknown>;
157
+ handler: z.ZodOptional<z.ZodUnknown>;
158
+ schema: z.ZodOptional<z.ZodUnknown>;
145
159
  }, z.core.$loose>>>;
146
160
  controllersDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
161
+ routesDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
147
162
  cors: z.ZodOptional<z.ZodOptional<z.ZodObject<{
148
163
  enabled: z.ZodDefault<z.ZodBoolean>;
149
164
  urls: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -182,7 +197,7 @@ export declare const WebSocketRouteSchema: z.ZodObject<{
182
197
  type: z.ZodString;
183
198
  controllerName: z.ZodString;
184
199
  action: z.ZodString;
185
- controller: z.ZodOptional<z.ZodAny>;
200
+ controller: z.ZodOptional<z.ZodUnknown>;
186
201
  }, z.core.$strip>;
187
202
  export declare const WebSocketConfigSchema: z.ZodObject<{
188
203
  type: z.ZodOptional<z.ZodDefault<z.ZodString>>;
@@ -191,7 +206,7 @@ export declare const WebSocketConfigSchema: z.ZodObject<{
191
206
  type: z.ZodString;
192
207
  controllerName: z.ZodString;
193
208
  action: z.ZodString;
194
- controller: z.ZodOptional<z.ZodAny>;
209
+ controller: z.ZodOptional<z.ZodUnknown>;
195
210
  }, z.core.$strip>>>>;
196
211
  }, z.core.$strip>;
197
212
  export declare const ClusterConfigSchema: z.ZodObject<{
@@ -209,7 +224,7 @@ export declare const FrameworkConfigSchema: z.ZodObject<{
209
224
  redis: z.ZodObject<{
210
225
  host: z.ZodString;
211
226
  port: z.ZodDefault<z.ZodNumber>;
212
- password: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
227
+ password: z.ZodOptional<z.ZodString>;
213
228
  }, z.core.$strip>;
214
229
  cache: z.ZodOptional<z.ZodObject<{}, z.core.$strip>>;
215
230
  database: z.ZodOptional<z.ZodObject<{
@@ -225,7 +240,10 @@ export declare const FrameworkConfigSchema: z.ZodObject<{
225
240
  queues: z.ZodDefault<z.ZodArray<z.ZodObject<{
226
241
  name: z.ZodString;
227
242
  isExternal: z.ZodOptional<z.ZodBoolean>;
228
- jobs: z.ZodDefault<z.ZodArray<z.ZodAny>>;
243
+ jobs: z.ZodDefault<z.ZodArray<z.ZodObject<{
244
+ id: z.ZodString;
245
+ maxConcurrency: z.ZodOptional<z.ZodNumber>;
246
+ }, z.core.$strip>>>;
229
247
  }, z.core.$strip>>>;
230
248
  processorsDirectory: z.ZodString;
231
249
  log: z.ZodOptional<z.ZodObject<{
@@ -286,13 +304,16 @@ export declare const FrameworkConfigSchema: z.ZodObject<{
286
304
  method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
287
305
  path: z.ZodString;
288
306
  url: z.ZodOptional<z.ZodString>;
289
- controller: z.ZodOptional<z.ZodAny>;
307
+ controller: z.ZodOptional<z.ZodUnknown>;
290
308
  controllerName: z.ZodOptional<z.ZodString>;
291
309
  action: z.ZodOptional<z.ZodString>;
292
310
  entityName: z.ZodOptional<z.ZodString>;
293
- validation: z.ZodOptional<z.ZodAny>;
311
+ validation: z.ZodOptional<z.ZodUnknown>;
312
+ handler: z.ZodOptional<z.ZodUnknown>;
313
+ schema: z.ZodOptional<z.ZodUnknown>;
294
314
  }, z.core.$loose>>>;
295
315
  controllersDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
316
+ routesDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
296
317
  cors: z.ZodOptional<z.ZodOptional<z.ZodObject<{
297
318
  enabled: z.ZodDefault<z.ZodBoolean>;
298
319
  urls: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -338,13 +359,16 @@ export declare const FrameworkConfigSchema: z.ZodObject<{
338
359
  method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
339
360
  path: z.ZodString;
340
361
  url: z.ZodOptional<z.ZodString>;
341
- controller: z.ZodOptional<z.ZodAny>;
362
+ controller: z.ZodOptional<z.ZodUnknown>;
342
363
  controllerName: z.ZodOptional<z.ZodString>;
343
364
  action: z.ZodOptional<z.ZodString>;
344
365
  entityName: z.ZodOptional<z.ZodString>;
345
- validation: z.ZodOptional<z.ZodAny>;
366
+ validation: z.ZodOptional<z.ZodUnknown>;
367
+ handler: z.ZodOptional<z.ZodUnknown>;
368
+ schema: z.ZodOptional<z.ZodUnknown>;
346
369
  }, z.core.$loose>>>;
347
370
  controllersDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
371
+ routesDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
348
372
  cors: z.ZodOptional<z.ZodOptional<z.ZodObject<{
349
373
  enabled: z.ZodDefault<z.ZodBoolean>;
350
374
  urls: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -386,7 +410,7 @@ export declare const FrameworkConfigSchema: z.ZodObject<{
386
410
  type: z.ZodString;
387
411
  controllerName: z.ZodString;
388
412
  action: z.ZodString;
389
- controller: z.ZodOptional<z.ZodAny>;
413
+ controller: z.ZodOptional<z.ZodUnknown>;
390
414
  }, z.core.$strip>>>>;
391
415
  }, z.core.$strip>>;
392
416
  }, z.core.$strip>;
@@ -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,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+BiD,CAAC;AAGpF,eAAO,MAAM,oBAAoB;;;;;iBAK/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;iBAMtB,CAAC;AAGb,eAAO,MAAM,mBAAmB;;;iBAKpB,CAAC;AAGb,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiBhC,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"}
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;;;;;;;;;;;;iBAcjB,CAAC;AAEjB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgCwE,CAAC;AAG3G,eAAO,MAAM,oBAAoB;;;;;iBAK/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;iBAMtB,CAAC;AAGb,eAAO,MAAM,mBAAmB;;;iBAKpB,CAAC;AAGb,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiBhC,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"}
@@ -5,7 +5,7 @@ import crypto from "node:crypto";
5
5
  const RedisConfigSchema = z.object({
6
6
  host: z.string().min(1, "redis.host required"),
7
7
  port: z.number().int().positive().default(6379),
8
- password: z.preprocess((val) => val === "" ? void 0 : val, z.string().min(1).optional())
8
+ password: z.string().min(1).optional()
9
9
  });
10
10
  const DatabaseConfigSchema = z.object({
11
11
  enabled: z.boolean().default(false),
@@ -24,10 +24,14 @@ const QueueLogConfigSchema = z.object({
24
24
  queuesRegistered: z.boolean().optional(),
25
25
  queueWaiting: z.boolean().optional()
26
26
  }).optional();
27
+ const QueueJobSchema = z.object({
28
+ id: z.string().min(1),
29
+ maxConcurrency: z.number().int().positive().optional()
30
+ });
27
31
  const QueueItemSchema = z.object({
28
32
  name: z.string(),
29
33
  isExternal: z.boolean().optional(),
30
- jobs: z.array(z.any()).default([])
34
+ jobs: z.array(QueueJobSchema).default([])
31
35
  });
32
36
  const QueueConfigSchema = z.object({
33
37
  queues: z.array(QueueItemSchema).default([]),
@@ -102,12 +106,15 @@ const WebServerRouteSchema = z.object({
102
106
  path: z.string(),
103
107
  url: z.string().optional(),
104
108
  // Keep for backwards compatibility
105
- controller: z.any().optional(),
109
+ controller: z.unknown().optional(),
106
110
  // Controller class reference
107
111
  controllerName: z.string().optional(),
108
112
  action: z.string().optional(),
109
113
  entityName: z.string().optional(),
110
- validation: z.any().optional()
114
+ validation: z.unknown().optional(),
115
+ // Validation schema reference
116
+ handler: z.unknown().optional(),
117
+ schema: z.unknown().optional()
111
118
  }).passthrough();
112
119
  const WebServerConfigSchema = z.object({
113
120
  enabled: z.boolean().default(false),
@@ -120,6 +127,7 @@ const WebServerConfigSchema = z.object({
120
127
  routes: z.array(WebServerRouteSchema).default([]),
121
128
  controllersDirectory: z.string().optional(),
122
129
  // Controllers directory path
130
+ routesDirectory: z.string().optional(),
123
131
  cors: z.object({
124
132
  enabled: z.boolean().default(false),
125
133
  urls: z.array(z.string()).default([])
@@ -128,12 +136,13 @@ const WebServerConfigSchema = z.object({
128
136
  debug: z.object({
129
137
  logAllRegisteredRoutes: z.boolean().optional()
130
138
  }).default({}).optional()
131
- }).partial({ cors: true, debug: true, controllersDirectory: true, security: true });
139
+ }).partial({ cors: true, debug: true, controllersDirectory: true, routesDirectory: true, security: true });
132
140
  const WebSocketRouteSchema = z.object({
133
141
  type: z.string().min(1, "webSocket.routes.type required"),
134
142
  controllerName: z.string().min(1, "webSocket.routes.controllerName required"),
135
143
  action: z.string().min(1, "webSocket.routes.action required"),
136
- controller: z.any().optional()
144
+ controller: z.unknown().optional()
145
+ // Controller class reference
137
146
  });
138
147
  const WebSocketConfigSchema = z.object({
139
148
  type: z.string().default("native"),
@@ -178,7 +187,7 @@ function validateFrameworkConfig(raw, _options = {}) {
178
187
  const result = FrameworkConfigSchema.safeParse(raw);
179
188
  if (!result.success) {
180
189
  const issues = result.error.issues.map((i) => ({
181
- path: i.path.join(".") ?? "(root)",
190
+ path: i.path.join(".") || "(root)",
182
191
  message: i.message
183
192
  }));
184
193
  throw new ConfigValidationError("Invalid framework configuration", issues);
@@ -204,6 +213,7 @@ export {
204
213
  PerformanceThresholdsSchema,
205
214
  QueueConfigSchema,
206
215
  QueueItemSchema,
216
+ QueueJobSchema,
207
217
  QueueLogConfigSchema,
208
218
  RedisConfigSchema,
209
219
  SecurityConfigSchema,
@@ -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.preprocess(val => (val === '' ? undefined : val), 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 QueueItemSchema = z.object({\n name: z.string(),\n isExternal: z.boolean().optional(),\n jobs: z.array(z.any()).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 url: z.string().optional(), // Keep for backwards compatibility\n controller: z.any().optional(), // Controller class reference\n controllerName: z.string().optional(),\n action: z.string().optional(),\n entityName: z.string().optional(),\n validation: z.any().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).default([]),\n controllersDirectory: z.string().optional(), // Controllers directory path\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, 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.any().optional(),\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 })\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 webServer: WebServerConfigSchema.optional(), // Support both 'web' and 'webServer' for compatibility\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: any) => ({\n path: (i.path.join('.') ?? '(root)') as string,\n message: i.message as string,\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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",
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 url: z.string().optional(), // Keep for backwards compatibility\n controller: z.unknown().optional(), // Controller class reference\n controllerName: z.string().optional(),\n action: z.string().optional(),\n entityName: z.string().optional(),\n validation: z.unknown().optional(), // Validation schema reference\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).default([]),\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 })\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 webServer: WebServerConfigSchema.optional(), // Support both 'web' and 'webServer' for compatibility\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
  }
@@ -9,9 +9,9 @@ export default class EventManager {
9
9
  private eventHandlers;
10
10
  constructor(params: EventManagerConstructorParams);
11
11
  load(): Promise<void>;
12
- run({ name, data }: {
12
+ run<TPayload = unknown>({ name, data }: {
13
13
  name: string;
14
- data: any;
14
+ data: TPayload;
15
15
  }): Promise<void>;
16
16
  /**
17
17
  * Log event message
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/event/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAmB,6BAA6B,EAAuB,MAAM,wBAAwB,CAAC;AAMlH,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,MAAM,CAAyB;IAEvC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO,CAAC,aAAa,CAAwB;gBAEjC,MAAM,EAAE,6BAA6B;IAqBpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoFrB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B5E;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAGlE"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/event/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,6BAA6B,EAE9B,MAAM,wBAAwB,CAAC;AAMhC,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,MAAM,CAAyB;IAEvC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO,CAAC,aAAa,CAA4B;gBAErC,MAAM,EAAE,6BAA6B;IAqBpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoFrB,GAAG,CAAC,QAAQ,GAAG,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BrG;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAGlE"}
@@ -2,6 +2,7 @@ import type { ApplicationConfig } from '../application/base-application.interfac
2
2
  import type { RedisInstance } from '../redis/index.js';
3
3
  import type { DatabaseInstance } from '../database/index.js';
4
4
  import type { EventControllerType } from './controller/base.interface.js';
5
+ export type EventHandler<TPayload = unknown> = (data: TPayload) => Promise<void> | void;
5
6
  export interface EventDefinition {
6
7
  name: string;
7
8
  handlerName: string;
@@ -113,8 +114,10 @@ export interface ApplicationEvents {
113
114
  action: string;
114
115
  data?: Record<string, unknown>;
115
116
  };
116
- [key: string]: Record<string, unknown>;
117
117
  }
118
+ export interface CustomApplicationEvents {
119
+ }
120
+ export type AllApplicationEvents = ApplicationEvents & CustomApplicationEvents;
118
121
  export interface EventManagerOptions {
119
122
  controllersDirectory: string;
120
123
  log?: {
@@ -1 +1 @@
1
- {"version":3,"file":"manager.interface.d.ts","sourceRoot":"","sources":["../../src/event/manager.interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.interface.d.ts","sourceRoot":"","sources":["../../src/event/manager.interface.ts"],"names":[],"mappings":"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"}
@@ -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 { EventDefinition, EventManagerConstructorParams, EventManagerOptions } 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, Function>;\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];\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 Function).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 : '-',\n });\n\n if (this.options.debug?.printEvents) {\n this.log('Registered Events:');\n\n for (const eventName of registeredEvents) {\n console.log(`- ${eventName}`);\n }\n }\n }\n\n public async run({ name, data }: { name: string; data: any }): 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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",
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 : '-',\n });\n\n if (this.options.debug?.printEvents) {\n this.log('Registered Events:');\n\n for (const eventName of registeredEvents) {\n console.log(`- ${eventName}`);\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
  }
@@ -24,7 +24,7 @@ export declare class LifecycleManager {
24
24
  onShutdown(fn: LifecycleHook): () => void;
25
25
  addReadinessCheck(name: string, check: ReadinessCheck): () => void;
26
26
  trackDisposable(disposable: Disposable | {
27
- dispose: Function;
27
+ dispose: () => void | Promise<void>;
28
28
  }): Disposable;
29
29
  trackInterval(id: NodeJS.Timeout): NodeJS.Timeout;
30
30
  trackTimeout(id: NodeJS.Timeout): NodeJS.Timeout;
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-manager.d.ts","sourceRoot":"","sources":["../../src/lifecycle/lifecycle-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAC1B,MAAM,YAAY,CAAC;AAEpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,gBAAgB,CAA8B;IAEtD,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAYjD,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,MAAM,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAQrC,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAQtC,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAQtC,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAQ/C,UAAU,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAQzC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,IAAI;IAOlE,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG;QAAE,OAAO,EAAE,QAAQ,CAAA;KAAE,GAAG,UAAU;IAM3E,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;IAKjD,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;IAKhD;;;;;OAKG;IACH,oBAAoB,CAAC,UAAU,EAAE,eAAe,GAAG,eAAe;IAKlE;;;;OAIG;IACH,qBAAqB,IAAI,eAAe;IAKlC,UAAU,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAU5C,KAAK,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAUvC,KAAK,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAkBvC,QAAQ,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;YAgCrD,eAAe;YA4Cf,YAAY;YAYZ,gBAAgB;YAmChB,sBAAsB;IAiC9B,kBAAkB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,oBAAoB,EAAE,CAAA;KAAE,CAAC;CAKxF"}
1
+ {"version":3,"file":"lifecycle-manager.d.ts","sourceRoot":"","sources":["../../src/lifecycle/lifecycle-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAC1B,MAAM,YAAY,CAAC;AAEpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,gBAAgB,CAA8B;IAEtD,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAYjD,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,MAAM,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAQrC,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAQtC,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAQtC,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAQ/C,UAAU,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAQzC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,IAAI;IAOlE,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG;QAAE,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,GAAG,UAAU;IAO7F,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;IAKjD,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;IAKhD;;;;;OAKG;IACH,oBAAoB,CAAC,UAAU,EAAE,eAAe,GAAG,eAAe;IAKlE;;;;OAIG;IACH,qBAAqB,IAAI,eAAe;IAKlC,UAAU,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAU5C,KAAK,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAUvC,KAAK,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAkBvC,QAAQ,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;YA2BrD,eAAe;YA4Cf,YAAY;YAYZ,gBAAgB;YAmChB,sBAAsB;IAiC9B,kBAAkB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,oBAAoB,EAAE,CAAA;KAAE,CAAC;CAKxF"}
@@ -149,23 +149,18 @@ class LifecycleManager {
149
149
  this._phase = LifecyclePhase.STOPPING;
150
150
  const timeoutMs = this.config.gracefulShutdown.timeoutMs;
151
151
  if (timeoutMs > 0) {
152
- let completed = false;
153
- let timedOut = false;
154
- const shutdownPromise = this.performShutdown().then((result3) => {
155
- completed = true;
156
- return result3;
157
- });
152
+ const shutdownPromise = this.performShutdown().then((result3) => ({
153
+ ...result3,
154
+ timedOut: false
155
+ }));
158
156
  const timeoutPromise = new Promise((resolve) => {
159
157
  setTimeout(() => {
160
- if (!completed) {
161
- timedOut = true;
162
- resolve({ errors: ["Shutdown timeout exceeded"] });
163
- }
158
+ resolve({ errors: ["Shutdown timeout exceeded"], timedOut: true });
164
159
  }, timeoutMs);
165
160
  });
166
161
  const result2 = await Promise.race([shutdownPromise, timeoutPromise]);
167
162
  this._phase = LifecyclePhase.STOPPED;
168
- return { errors: result2.errors, timedOut };
163
+ return result2;
169
164
  }
170
165
  const result = await this.performShutdown();
171
166
  this._phase = LifecyclePhase.STOPPED;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lifecycle/lifecycle-manager.ts"],
4
- "sourcesContent": ["import {\n type Disposable,\n type LifecycleConfig,\n type LifecycleHook,\n LifecyclePhase,\n type ReadinessCheck,\n type ReadinessCheckResult,\n} from './types.js';\n\nexport class LifecycleManager {\n private _phase: LifecyclePhase = LifecyclePhase.CREATED;\n private config: LifecycleConfig;\n\n private initHooks: LifecycleHook[] = [];\n private startHooks: LifecycleHook[] = [];\n private readyHooks: LifecycleHook[] = [];\n private beforeShutdownHooks: LifecycleHook[] = [];\n private shutdownHooks: LifecycleHook[] = [];\n\n private disposables = new Set<Disposable>();\n private intervals = new Set<NodeJS.Timeout>();\n private timeouts = new Set<NodeJS.Timeout>();\n private abortControllers = new Set<AbortController>();\n\n private readinessChecks = new Map<string, ReadinessCheck>();\n private _isReady = false;\n\n constructor(config: Partial<LifecycleConfig> = {}) {\n this.config = {\n gracefulShutdown: {\n timeoutMs: config.gracefulShutdown?.timeoutMs ?? 10000,\n },\n readiness: {\n timeoutMs: config.readiness?.timeoutMs ?? 30000,\n checkIntervalMs: config.readiness?.checkIntervalMs ?? 100,\n },\n };\n }\n\n get phase(): LifecyclePhase {\n return this._phase;\n }\n\n get isShuttingDown(): boolean {\n return this._phase === LifecyclePhase.STOPPING || this._phase === LifecyclePhase.STOPPED;\n }\n\n get isReady(): boolean {\n return this._isReady && this._phase === LifecyclePhase.RUNNING;\n }\n\n onInit(fn: LifecycleHook): () => void {\n this.initHooks.push(fn);\n return () => {\n const i = this.initHooks.indexOf(fn);\n if (i >= 0) this.initHooks.splice(i, 1);\n };\n }\n\n onStart(fn: LifecycleHook): () => void {\n this.startHooks.push(fn);\n return () => {\n const i = this.startHooks.indexOf(fn);\n if (i >= 0) this.startHooks.splice(i, 1);\n };\n }\n\n onReady(fn: LifecycleHook): () => void {\n this.readyHooks.push(fn);\n return () => {\n const i = this.readyHooks.indexOf(fn);\n if (i >= 0) this.readyHooks.splice(i, 1);\n };\n }\n\n onBeforeShutdown(fn: LifecycleHook): () => void {\n this.beforeShutdownHooks.push(fn);\n return () => {\n const i = this.beforeShutdownHooks.indexOf(fn);\n if (i >= 0) this.beforeShutdownHooks.splice(i, 1);\n };\n }\n\n onShutdown(fn: LifecycleHook): () => void {\n this.shutdownHooks.push(fn);\n return () => {\n const i = this.shutdownHooks.indexOf(fn);\n if (i >= 0) this.shutdownHooks.splice(i, 1);\n };\n }\n\n addReadinessCheck(name: string, check: ReadinessCheck): () => void {\n this.readinessChecks.set(name, check);\n return () => {\n this.readinessChecks.delete(name);\n };\n }\n\n trackDisposable(disposable: Disposable | { dispose: Function }): Disposable {\n const d: Disposable = 'dispose' in disposable ? { dispose: () => (disposable as any).dispose() } : disposable;\n this.disposables.add(d);\n return d;\n }\n\n trackInterval(id: NodeJS.Timeout): NodeJS.Timeout {\n this.intervals.add(id);\n return id;\n }\n\n trackTimeout(id: NodeJS.Timeout): NodeJS.Timeout {\n this.timeouts.add(id);\n return id;\n }\n\n /**\n * Track an AbortController for automatic cleanup on shutdown.\n * When the lifecycle manager shuts down, it will call abort() on all tracked controllers.\n * @param controller - The AbortController to track\n * @returns The same AbortController for chaining\n */\n trackAbortController(controller: AbortController): AbortController {\n this.abortControllers.add(controller);\n return controller;\n }\n\n /**\n * Create and track a new AbortController.\n * Convenience method that creates a new controller and automatically tracks it.\n * @returns A new tracked AbortController\n */\n createAbortController(): AbortController {\n const controller = new AbortController();\n return this.trackAbortController(controller);\n }\n\n async initialize(): Promise<{ errors: unknown[] }> {\n if (this._phase !== LifecyclePhase.CREATED) {\n return { errors: [] };\n }\n this._phase = LifecyclePhase.INITIALIZING;\n\n const errors = await this.executeHooks(this.initHooks, 'init');\n return { errors };\n }\n\n async start(): Promise<{ errors: unknown[] }> {\n if (this._phase !== LifecyclePhase.INITIALIZING) {\n return { errors: [] };\n }\n this._phase = LifecyclePhase.STARTING;\n\n const errors = await this.executeHooks(this.startHooks, 'start');\n return { errors };\n }\n\n async ready(): Promise<{ errors: unknown[] }> {\n if (this._phase !== LifecyclePhase.STARTING) {\n return { errors: [] };\n }\n this._phase = LifecyclePhase.RUNNING;\n\n const errors = await this.executeHooks(this.readyHooks, 'ready');\n\n // Wait for readiness checks to pass\n const readinessResult = await this.waitForReadiness();\n if (readinessResult.errors.length > 0) {\n errors.push(...readinessResult.errors);\n }\n this._isReady = readinessResult.ready;\n\n return { errors };\n }\n\n async shutdown(): Promise<{ errors: unknown[]; timedOut: boolean }> {\n if (this.isShuttingDown) {\n return { errors: [], timedOut: false };\n }\n this._phase = LifecyclePhase.STOPPING;\n\n const timeoutMs = this.config.gracefulShutdown.timeoutMs;\n if (timeoutMs > 0) {\n let completed = false;\n let timedOut = false;\n const shutdownPromise = this.performShutdown().then(result => {\n completed = true;\n return result;\n });\n const timeoutPromise = new Promise<{ errors: unknown[] }>(resolve => {\n setTimeout(() => {\n if (!completed) {\n timedOut = true;\n resolve({ errors: ['Shutdown timeout exceeded'] });\n }\n }, timeoutMs);\n });\n const result = await Promise.race([shutdownPromise, timeoutPromise]);\n this._phase = LifecyclePhase.STOPPED;\n return { errors: result.errors, timedOut };\n }\n\n const result = await this.performShutdown();\n this._phase = LifecyclePhase.STOPPED;\n return { errors: result.errors, timedOut: false };\n }\n\n private async performShutdown(): Promise<{ errors: unknown[] }> {\n const errors: unknown[] = [];\n\n // Execute before-shutdown hooks in registration order (FIFO)\n const beforeShutdownErrors = await this.executeHooks(this.beforeShutdownHooks, 'before-shutdown');\n errors.push(...beforeShutdownErrors);\n\n // Abort all tracked AbortControllers\n for (const controller of this.abortControllers) {\n try {\n controller.abort();\n } catch (e) {\n errors.push(e);\n }\n }\n this.abortControllers.clear();\n\n // Clear intervals and timeouts\n for (const id of this.intervals) {\n clearInterval(id);\n }\n for (const id of this.timeouts) {\n clearTimeout(id);\n }\n this.intervals.clear();\n this.timeouts.clear();\n\n // Dispose of tracked disposables\n for (const disposable of this.disposables) {\n try {\n await disposable.dispose();\n } catch (e) {\n errors.push(e);\n }\n }\n this.disposables.clear();\n\n // Execute shutdown hooks in reverse registration order (LIFO)\n const shutdownErrors = await this.executeHooks([...this.shutdownHooks].reverse(), 'shutdown');\n errors.push(...shutdownErrors);\n\n return { errors };\n }\n\n private async executeHooks(hooks: LifecycleHook[], _phase: string): Promise<unknown[]> {\n const errors: unknown[] = [];\n for (const hook of hooks) {\n try {\n await hook();\n } catch (e) {\n errors.push(e);\n }\n }\n return errors;\n }\n\n private async waitForReadiness(): Promise<{ ready: boolean; errors: unknown[] }> {\n if (this.readinessChecks.size === 0) {\n return { ready: true, errors: [] };\n }\n\n const timeoutMs = this.config.readiness?.timeoutMs ?? 30000;\n const checkIntervalMs = this.config.readiness?.checkIntervalMs ?? 100;\n const startTime = Date.now();\n const errors: unknown[] = [];\n\n while (Date.now() - startTime < timeoutMs) {\n const results = await this.executeReadinessChecks();\n const allReady = results.every(r => r.ready);\n\n if (allReady) {\n return { ready: true, errors };\n }\n\n // Collect unique errors from failed checks\n for (const result of results) {\n if (!result.ready && result.error) {\n const errorMessage = result.error.message;\n if (!errors.some(e => (e as Error)?.message === errorMessage)) {\n errors.push(result.error);\n }\n }\n }\n\n // Wait before next check\n await new Promise(resolve => setTimeout(resolve, checkIntervalMs));\n }\n\n return { ready: false, errors: [...errors, new Error('Readiness check timeout exceeded')] };\n }\n\n private async executeReadinessChecks(): Promise<ReadinessCheckResult[]> {\n const checkEntries = Array.from(this.readinessChecks.entries());\n\n const settledResults = await Promise.allSettled(\n checkEntries.map(async ([name, check]) => {\n try {\n const result = await check();\n return { name, ready: result };\n } catch (error) {\n return { name, ready: false, error: error as Error };\n }\n }),\n );\n\n return settledResults.map((settledResult, index) => {\n const checkEntry = checkEntries.at(index);\n if (!checkEntry) {\n throw new Error(`Missing check entry at index ${index}`);\n }\n const [name] = checkEntry;\n\n if (settledResult.status === 'fulfilled') {\n return settledResult.value;\n }\n\n return {\n name,\n ready: false,\n error: settledResult.reason as Error,\n };\n });\n }\n\n async getReadinessStatus(): Promise<{ ready: boolean; checks: ReadinessCheckResult[] }> {\n const checks = await this.executeReadinessChecks();\n const ready = this._isReady && this._phase === LifecyclePhase.RUNNING && checks.every(c => c.ready);\n return { ready, checks };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n type Disposable,\n type LifecycleConfig,\n type LifecycleHook,\n LifecyclePhase,\n type ReadinessCheck,\n type ReadinessCheckResult,\n} from './types.js';\n\nexport class LifecycleManager {\n private _phase: LifecyclePhase = LifecyclePhase.CREATED;\n private config: LifecycleConfig;\n\n private initHooks: LifecycleHook[] = [];\n private startHooks: LifecycleHook[] = [];\n private readyHooks: LifecycleHook[] = [];\n private beforeShutdownHooks: LifecycleHook[] = [];\n private shutdownHooks: LifecycleHook[] = [];\n\n private disposables = new Set<Disposable>();\n private intervals = new Set<NodeJS.Timeout>();\n private timeouts = new Set<NodeJS.Timeout>();\n private abortControllers = new Set<AbortController>();\n\n private readinessChecks = new Map<string, ReadinessCheck>();\n private _isReady = false;\n\n constructor(config: Partial<LifecycleConfig> = {}) {\n this.config = {\n gracefulShutdown: {\n timeoutMs: config.gracefulShutdown?.timeoutMs ?? 10000,\n },\n readiness: {\n timeoutMs: config.readiness?.timeoutMs ?? 30000,\n checkIntervalMs: config.readiness?.checkIntervalMs ?? 100,\n },\n };\n }\n\n get phase(): LifecyclePhase {\n return this._phase;\n }\n\n get isShuttingDown(): boolean {\n return this._phase === LifecyclePhase.STOPPING || this._phase === LifecyclePhase.STOPPED;\n }\n\n get isReady(): boolean {\n return this._isReady && this._phase === LifecyclePhase.RUNNING;\n }\n\n onInit(fn: LifecycleHook): () => void {\n this.initHooks.push(fn);\n return () => {\n const i = this.initHooks.indexOf(fn);\n if (i >= 0) this.initHooks.splice(i, 1);\n };\n }\n\n onStart(fn: LifecycleHook): () => void {\n this.startHooks.push(fn);\n return () => {\n const i = this.startHooks.indexOf(fn);\n if (i >= 0) this.startHooks.splice(i, 1);\n };\n }\n\n onReady(fn: LifecycleHook): () => void {\n this.readyHooks.push(fn);\n return () => {\n const i = this.readyHooks.indexOf(fn);\n if (i >= 0) this.readyHooks.splice(i, 1);\n };\n }\n\n onBeforeShutdown(fn: LifecycleHook): () => void {\n this.beforeShutdownHooks.push(fn);\n return () => {\n const i = this.beforeShutdownHooks.indexOf(fn);\n if (i >= 0) this.beforeShutdownHooks.splice(i, 1);\n };\n }\n\n onShutdown(fn: LifecycleHook): () => void {\n this.shutdownHooks.push(fn);\n return () => {\n const i = this.shutdownHooks.indexOf(fn);\n if (i >= 0) this.shutdownHooks.splice(i, 1);\n };\n }\n\n addReadinessCheck(name: string, check: ReadinessCheck): () => void {\n this.readinessChecks.set(name, check);\n return () => {\n this.readinessChecks.delete(name);\n };\n }\n\n trackDisposable(disposable: Disposable | { dispose: () => void | Promise<void> }): Disposable {\n const d: Disposable =\n 'dispose' in disposable ? { dispose: () => (disposable as { dispose: () => void }).dispose() } : disposable;\n this.disposables.add(d);\n return d;\n }\n\n trackInterval(id: NodeJS.Timeout): NodeJS.Timeout {\n this.intervals.add(id);\n return id;\n }\n\n trackTimeout(id: NodeJS.Timeout): NodeJS.Timeout {\n this.timeouts.add(id);\n return id;\n }\n\n /**\n * Track an AbortController for automatic cleanup on shutdown.\n * When the lifecycle manager shuts down, it will call abort() on all tracked controllers.\n * @param controller - The AbortController to track\n * @returns The same AbortController for chaining\n */\n trackAbortController(controller: AbortController): AbortController {\n this.abortControllers.add(controller);\n return controller;\n }\n\n /**\n * Create and track a new AbortController.\n * Convenience method that creates a new controller and automatically tracks it.\n * @returns A new tracked AbortController\n */\n createAbortController(): AbortController {\n const controller = new AbortController();\n return this.trackAbortController(controller);\n }\n\n async initialize(): Promise<{ errors: unknown[] }> {\n if (this._phase !== LifecyclePhase.CREATED) {\n return { errors: [] };\n }\n this._phase = LifecyclePhase.INITIALIZING;\n\n const errors = await this.executeHooks(this.initHooks, 'init');\n return { errors };\n }\n\n async start(): Promise<{ errors: unknown[] }> {\n if (this._phase !== LifecyclePhase.INITIALIZING) {\n return { errors: [] };\n }\n this._phase = LifecyclePhase.STARTING;\n\n const errors = await this.executeHooks(this.startHooks, 'start');\n return { errors };\n }\n\n async ready(): Promise<{ errors: unknown[] }> {\n if (this._phase !== LifecyclePhase.STARTING) {\n return { errors: [] };\n }\n this._phase = LifecyclePhase.RUNNING;\n\n const errors = await this.executeHooks(this.readyHooks, 'ready');\n\n // Wait for readiness checks to pass\n const readinessResult = await this.waitForReadiness();\n if (readinessResult.errors.length > 0) {\n errors.push(...readinessResult.errors);\n }\n this._isReady = readinessResult.ready;\n\n return { errors };\n }\n\n async shutdown(): Promise<{ errors: unknown[]; timedOut: boolean }> {\n if (this.isShuttingDown) {\n return { errors: [], timedOut: false };\n }\n this._phase = LifecyclePhase.STOPPING;\n\n const timeoutMs = this.config.gracefulShutdown.timeoutMs;\n if (timeoutMs > 0) {\n const shutdownPromise = this.performShutdown().then(result => ({\n ...result,\n timedOut: false,\n }));\n const timeoutPromise = new Promise<{ errors: unknown[]; timedOut: boolean }>(resolve => {\n setTimeout(() => {\n resolve({ errors: ['Shutdown timeout exceeded'], timedOut: true });\n }, timeoutMs);\n });\n const result = await Promise.race([shutdownPromise, timeoutPromise]);\n this._phase = LifecyclePhase.STOPPED;\n return result;\n }\n\n const result = await this.performShutdown();\n this._phase = LifecyclePhase.STOPPED;\n return { errors: result.errors, timedOut: false };\n }\n\n private async performShutdown(): Promise<{ errors: unknown[] }> {\n const errors: unknown[] = [];\n\n // Execute before-shutdown hooks in registration order (FIFO)\n const beforeShutdownErrors = await this.executeHooks(this.beforeShutdownHooks, 'before-shutdown');\n errors.push(...beforeShutdownErrors);\n\n // Abort all tracked AbortControllers\n for (const controller of this.abortControllers) {\n try {\n controller.abort();\n } catch (e) {\n errors.push(e);\n }\n }\n this.abortControllers.clear();\n\n // Clear intervals and timeouts\n for (const id of this.intervals) {\n clearInterval(id);\n }\n for (const id of this.timeouts) {\n clearTimeout(id);\n }\n this.intervals.clear();\n this.timeouts.clear();\n\n // Dispose of tracked disposables\n for (const disposable of this.disposables) {\n try {\n await disposable.dispose();\n } catch (e) {\n errors.push(e);\n }\n }\n this.disposables.clear();\n\n // Execute shutdown hooks in reverse registration order (LIFO)\n const shutdownErrors = await this.executeHooks([...this.shutdownHooks].reverse(), 'shutdown');\n errors.push(...shutdownErrors);\n\n return { errors };\n }\n\n private async executeHooks(hooks: LifecycleHook[], _phase: string): Promise<unknown[]> {\n const errors: unknown[] = [];\n for (const hook of hooks) {\n try {\n await hook();\n } catch (e) {\n errors.push(e);\n }\n }\n return errors;\n }\n\n private async waitForReadiness(): Promise<{ ready: boolean; errors: unknown[] }> {\n if (this.readinessChecks.size === 0) {\n return { ready: true, errors: [] };\n }\n\n const timeoutMs = this.config.readiness?.timeoutMs ?? 30000;\n const checkIntervalMs = this.config.readiness?.checkIntervalMs ?? 100;\n const startTime = Date.now();\n const errors: unknown[] = [];\n\n while (Date.now() - startTime < timeoutMs) {\n const results = await this.executeReadinessChecks();\n const allReady = results.every(r => r.ready);\n\n if (allReady) {\n return { ready: true, errors };\n }\n\n // Collect unique errors from failed checks\n for (const result of results) {\n if (!result.ready && result.error) {\n const errorMessage = result.error.message;\n if (!errors.some(e => (e as Error)?.message === errorMessage)) {\n errors.push(result.error);\n }\n }\n }\n\n // Wait before next check\n await new Promise(resolve => setTimeout(resolve, checkIntervalMs));\n }\n\n return { ready: false, errors: [...errors, new Error('Readiness check timeout exceeded')] };\n }\n\n private async executeReadinessChecks(): Promise<ReadinessCheckResult[]> {\n const checkEntries = Array.from(this.readinessChecks.entries());\n\n const settledResults = await Promise.allSettled(\n checkEntries.map(async ([name, check]) => {\n try {\n const result = await check();\n return { name, ready: result };\n } catch (error) {\n return { name, ready: false, error: error as Error };\n }\n }),\n );\n\n return settledResults.map((settledResult, index) => {\n const checkEntry = checkEntries.at(index);\n if (!checkEntry) {\n throw new Error(`Missing check entry at index ${index}`);\n }\n const [name] = checkEntry;\n\n if (settledResult.status === 'fulfilled') {\n return settledResult.value;\n }\n\n return {\n name,\n ready: false,\n error: settledResult.reason as Error,\n };\n });\n }\n\n async getReadinessStatus(): Promise<{ ready: boolean; checks: ReadinessCheckResult[] }> {\n const checks = await this.executeReadinessChecks();\n const ready = this._isReady && this._phase === LifecyclePhase.RUNNING && checks.every(c => c.ready);\n return { ready, checks };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["result"]
7
7
  }