@scpxl/nodejs-framework 1.0.17 → 1.0.20

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 (192) hide show
  1. package/README.md +29 -0
  2. package/dist/api-requester/api-requester.d.ts +27 -6
  3. package/dist/api-requester/api-requester.d.ts.map +1 -1
  4. package/dist/api-requester/api-requester.js +188 -26
  5. package/dist/api-requester/api-requester.js.map +2 -2
  6. package/dist/api-requester/index.d.ts +1 -0
  7. package/dist/api-requester/index.d.ts.map +1 -1
  8. package/dist/api-requester/index.js.map +1 -1
  9. package/dist/application/base-application.d.ts +15 -22
  10. package/dist/application/base-application.d.ts.map +1 -1
  11. package/dist/application/base-application.js +145 -111
  12. package/dist/application/base-application.js.map +2 -2
  13. package/dist/application/command-application.d.ts.map +1 -1
  14. package/dist/application/command-application.js +3 -4
  15. package/dist/application/command-application.js.map +2 -2
  16. package/dist/application/web-application.d.ts.map +1 -1
  17. package/dist/application/web-application.js +9 -2
  18. package/dist/application/web-application.js.map +2 -2
  19. package/dist/cache/manager.d.ts +87 -6
  20. package/dist/cache/manager.d.ts.map +1 -1
  21. package/dist/cache/manager.js +77 -30
  22. package/dist/cache/manager.js.map +2 -2
  23. package/dist/cluster/cluster-manager.d.ts.map +1 -1
  24. package/dist/cluster/cluster-manager.js +5 -8
  25. package/dist/cluster/cluster-manager.js.map +2 -2
  26. package/dist/config/env.d.ts +11 -0
  27. package/dist/config/env.d.ts.map +1 -0
  28. package/dist/config/env.js +103 -0
  29. package/dist/config/env.js.map +7 -0
  30. package/dist/config/index.d.ts +3 -0
  31. package/dist/config/index.d.ts.map +1 -0
  32. package/dist/config/index.js +3 -0
  33. package/dist/config/index.js.map +7 -0
  34. package/dist/config/schema.d.ts +408 -0
  35. package/dist/config/schema.d.ts.map +1 -0
  36. package/dist/config/schema.js +218 -0
  37. package/dist/config/schema.js.map +7 -0
  38. package/dist/database/dynamic-entity.d.ts.map +1 -1
  39. package/dist/database/dynamic-entity.js +6 -2
  40. package/dist/database/dynamic-entity.js.map +2 -2
  41. package/dist/database/instance.d.ts.map +1 -1
  42. package/dist/database/instance.js +0 -8
  43. package/dist/database/instance.js.map +2 -2
  44. package/dist/database/manager.d.ts.map +1 -1
  45. package/dist/database/manager.js +71 -9
  46. package/dist/database/manager.js.map +2 -2
  47. package/dist/error/error-reporter.d.ts +96 -0
  48. package/dist/error/error-reporter.d.ts.map +1 -0
  49. package/dist/error/error-reporter.js +228 -0
  50. package/dist/error/error-reporter.js.map +7 -0
  51. package/dist/error/error.interface.d.ts +126 -0
  52. package/dist/error/error.interface.d.ts.map +1 -0
  53. package/dist/error/error.interface.js +45 -0
  54. package/dist/error/error.interface.js.map +7 -0
  55. package/dist/error/framework-errors.d.ts +113 -0
  56. package/dist/error/framework-errors.d.ts.map +1 -0
  57. package/dist/error/framework-errors.js +176 -0
  58. package/dist/error/framework-errors.js.map +7 -0
  59. package/dist/error/index.d.ts +6 -0
  60. package/dist/error/index.d.ts.map +1 -0
  61. package/dist/error/index.js +34 -0
  62. package/dist/error/index.js.map +7 -0
  63. package/dist/event/manager.d.ts.map +1 -1
  64. package/dist/event/manager.js +2 -9
  65. package/dist/event/manager.js.map +2 -2
  66. package/dist/index.d.ts +5 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +5 -1
  69. package/dist/index.js.map +2 -2
  70. package/dist/lifecycle/exit.d.ts +2 -1
  71. package/dist/lifecycle/exit.d.ts.map +1 -1
  72. package/dist/lifecycle/exit.js +6 -0
  73. package/dist/lifecycle/exit.js.map +2 -2
  74. package/dist/lifecycle/index.d.ts +7 -0
  75. package/dist/lifecycle/index.d.ts.map +1 -0
  76. package/dist/lifecycle/index.js +12 -0
  77. package/dist/lifecycle/index.js.map +7 -0
  78. package/dist/lifecycle/lifecycle-manager.d.ts +55 -2
  79. package/dist/lifecycle/lifecycle-manager.d.ts.map +1 -1
  80. package/dist/lifecycle/lifecycle-manager.js +233 -7
  81. package/dist/lifecycle/lifecycle-manager.js.map +3 -3
  82. package/dist/lifecycle/shutdown-controller.d.ts +15 -0
  83. package/dist/lifecycle/shutdown-controller.d.ts.map +1 -0
  84. package/dist/lifecycle/shutdown-controller.js +38 -0
  85. package/dist/lifecycle/shutdown-controller.js.map +7 -0
  86. package/dist/lifecycle/types.d.ts +28 -0
  87. package/dist/lifecycle/types.d.ts.map +1 -0
  88. package/dist/lifecycle/types.js +13 -0
  89. package/dist/lifecycle/types.js.map +7 -0
  90. package/dist/logger/logger.d.ts +2 -1
  91. package/dist/logger/logger.d.ts.map +1 -1
  92. package/dist/logger/logger.js +35 -11
  93. package/dist/logger/logger.js.map +2 -2
  94. package/dist/performance/cache-performance.d.ts +6 -0
  95. package/dist/performance/cache-performance.d.ts.map +1 -1
  96. package/dist/performance/cache-performance.js +16 -0
  97. package/dist/performance/cache-performance.js.map +2 -2
  98. package/dist/performance/index.d.ts +1 -0
  99. package/dist/performance/index.d.ts.map +1 -1
  100. package/dist/performance/index.js +1 -0
  101. package/dist/performance/index.js.map +2 -2
  102. package/dist/performance/performance-monitor.d.ts.map +1 -1
  103. package/dist/performance/performance-monitor.js +47 -18
  104. package/dist/performance/performance-monitor.js.map +2 -2
  105. package/dist/performance/performance-monitor.plugin.d.ts +24 -0
  106. package/dist/performance/performance-monitor.plugin.d.ts.map +1 -0
  107. package/dist/performance/performance-monitor.plugin.js +89 -0
  108. package/dist/performance/performance-monitor.plugin.js.map +7 -0
  109. package/dist/performance/webserver-performance.js +1 -1
  110. package/dist/performance/webserver-performance.js.map +2 -2
  111. package/dist/queue/manager.d.ts.map +1 -1
  112. package/dist/queue/manager.js +3 -10
  113. package/dist/queue/manager.js.map +2 -2
  114. package/dist/queue/worker.d.ts.map +1 -1
  115. package/dist/queue/worker.js +2 -2
  116. package/dist/queue/worker.js.map +2 -2
  117. package/dist/redis/manager.d.ts.map +1 -1
  118. package/dist/redis/manager.js +228 -33
  119. package/dist/redis/manager.js.map +2 -2
  120. package/dist/request-context/index.d.ts +3 -0
  121. package/dist/request-context/index.d.ts.map +1 -0
  122. package/dist/request-context/index.js +25 -0
  123. package/dist/request-context/index.js.map +7 -0
  124. package/dist/request-context/request-context.d.ts +108 -0
  125. package/dist/request-context/request-context.d.ts.map +1 -0
  126. package/dist/request-context/request-context.interface.d.ts +46 -0
  127. package/dist/request-context/request-context.interface.d.ts.map +1 -0
  128. package/dist/request-context/request-context.interface.js +1 -0
  129. package/dist/request-context/request-context.interface.js.map +7 -0
  130. package/dist/request-context/request-context.js +79 -0
  131. package/dist/request-context/request-context.js.map +7 -0
  132. package/dist/services/aws/s3.js +4 -6
  133. package/dist/services/aws/s3.js.map +2 -2
  134. package/dist/util/file.d.ts +13 -0
  135. package/dist/util/file.d.ts.map +1 -1
  136. package/dist/util/file.js +46 -9
  137. package/dist/util/file.js.map +2 -2
  138. package/dist/util/helper.d.ts +16 -1
  139. package/dist/util/helper.d.ts.map +1 -1
  140. package/dist/util/helper.js +19 -43
  141. package/dist/util/helper.js.map +2 -2
  142. package/dist/util/index.d.ts +1 -0
  143. package/dist/util/index.d.ts.map +1 -1
  144. package/dist/util/index.js +18 -16
  145. package/dist/util/index.js.map +2 -2
  146. package/dist/util/loader.d.ts.map +1 -1
  147. package/dist/util/loader.js +13 -2
  148. package/dist/util/loader.js.map +2 -2
  149. package/dist/util/os.d.ts.map +1 -1
  150. package/dist/util/os.js +8 -14
  151. package/dist/util/os.js.map +2 -2
  152. package/dist/util/time.d.ts +8 -2
  153. package/dist/util/time.d.ts.map +1 -1
  154. package/dist/util/time.js +12 -7
  155. package/dist/util/time.js.map +2 -2
  156. package/dist/util/timing.d.ts +36 -0
  157. package/dist/util/timing.d.ts.map +1 -0
  158. package/dist/util/timing.interface.d.ts +47 -0
  159. package/dist/util/timing.interface.d.ts.map +1 -0
  160. package/dist/util/timing.interface.js +1 -0
  161. package/dist/util/timing.interface.js.map +7 -0
  162. package/dist/util/timing.js +98 -0
  163. package/dist/util/timing.js.map +7 -0
  164. package/dist/util/url.js +1 -1
  165. package/dist/util/url.js.map +2 -2
  166. package/dist/webserver/controller/base.d.ts +3 -1
  167. package/dist/webserver/controller/base.d.ts.map +1 -1
  168. package/dist/webserver/controller/base.interface.d.ts +2 -0
  169. package/dist/webserver/controller/base.interface.d.ts.map +1 -1
  170. package/dist/webserver/controller/base.js +4 -1
  171. package/dist/webserver/controller/base.js.map +2 -2
  172. package/dist/webserver/controller/health.d.ts +8 -1
  173. package/dist/webserver/controller/health.d.ts.map +1 -1
  174. package/dist/webserver/controller/health.js +36 -22
  175. package/dist/webserver/controller/health.js.map +2 -2
  176. package/dist/webserver/webserver.d.ts +16 -2
  177. package/dist/webserver/webserver.d.ts.map +1 -1
  178. package/dist/webserver/webserver.interface.d.ts +37 -0
  179. package/dist/webserver/webserver.interface.d.ts.map +1 -1
  180. package/dist/webserver/webserver.interface.js.map +2 -2
  181. package/dist/webserver/webserver.js +117 -20
  182. package/dist/webserver/webserver.js.map +2 -2
  183. package/dist/websocket/controllers/server/system.d.ts.map +1 -1
  184. package/dist/websocket/controllers/server/system.js.map +2 -2
  185. package/dist/websocket/websocket-base.d.ts.map +1 -1
  186. package/dist/websocket/websocket-base.js +2 -3
  187. package/dist/websocket/websocket-base.js.map +2 -2
  188. package/dist/websocket/websocket-server.d.ts +1 -1
  189. package/dist/websocket/websocket-server.d.ts.map +1 -1
  190. package/dist/websocket/websocket-server.js +7 -31
  191. package/dist/websocket/websocket-server.js.map +2 -2
  192. package/package.json +51 -10
@@ -0,0 +1,408 @@
1
+ import { z } from 'zod';
2
+ export declare const RedisConfigSchema: z.ZodObject<{
3
+ host: z.ZodString;
4
+ port: z.ZodDefault<z.ZodNumber>;
5
+ password: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
6
+ }, z.core.$strip>;
7
+ export declare const DatabaseConfigSchema: z.ZodObject<{
8
+ enabled: z.ZodDefault<z.ZodBoolean>;
9
+ host: z.ZodString;
10
+ port: z.ZodDefault<z.ZodNumber>;
11
+ username: z.ZodString;
12
+ password: z.ZodString;
13
+ databaseName: z.ZodString;
14
+ entitiesDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
15
+ }, z.core.$strip>;
16
+ export declare const QueueLogConfigSchema: z.ZodOptional<z.ZodObject<{
17
+ jobRegistered: z.ZodOptional<z.ZodBoolean>;
18
+ jobAdded: z.ZodOptional<z.ZodBoolean>;
19
+ jobCompleted: z.ZodOptional<z.ZodBoolean>;
20
+ queueRegistered: z.ZodOptional<z.ZodBoolean>;
21
+ queuesRegistered: z.ZodOptional<z.ZodBoolean>;
22
+ queueWaiting: z.ZodOptional<z.ZodBoolean>;
23
+ }, z.core.$strip>>;
24
+ export declare const QueueItemSchema: z.ZodObject<{
25
+ name: z.ZodString;
26
+ isExternal: z.ZodOptional<z.ZodBoolean>;
27
+ jobs: z.ZodDefault<z.ZodArray<z.ZodAny>>;
28
+ }, z.core.$strip>;
29
+ export declare const QueueConfigSchema: z.ZodObject<{
30
+ queues: z.ZodDefault<z.ZodArray<z.ZodObject<{
31
+ name: z.ZodString;
32
+ isExternal: z.ZodOptional<z.ZodBoolean>;
33
+ jobs: z.ZodDefault<z.ZodArray<z.ZodAny>>;
34
+ }, z.core.$strip>>>;
35
+ processorsDirectory: z.ZodString;
36
+ log: z.ZodOptional<z.ZodObject<{
37
+ jobRegistered: z.ZodOptional<z.ZodBoolean>;
38
+ jobAdded: z.ZodOptional<z.ZodBoolean>;
39
+ jobCompleted: z.ZodOptional<z.ZodBoolean>;
40
+ queueRegistered: z.ZodOptional<z.ZodBoolean>;
41
+ queuesRegistered: z.ZodOptional<z.ZodBoolean>;
42
+ queueWaiting: z.ZodOptional<z.ZodBoolean>;
43
+ }, z.core.$strip>>;
44
+ }, z.core.$strip>;
45
+ export declare const EventDefinitionSchema: z.ZodObject<{
46
+ name: z.ZodString;
47
+ }, z.core.$strip>;
48
+ export declare const EventConfigSchema: z.ZodObject<{
49
+ enabled: z.ZodDefault<z.ZodBoolean>;
50
+ controllersDirectory: z.ZodString;
51
+ events: z.ZodDefault<z.ZodArray<z.ZodObject<{
52
+ name: z.ZodString;
53
+ }, z.core.$strip>>>;
54
+ }, z.core.$strip>;
55
+ export declare const LogConfigSchema: z.ZodOptional<z.ZodObject<{
56
+ startUp: z.ZodOptional<z.ZodBoolean>;
57
+ shutdown: z.ZodOptional<z.ZodBoolean>;
58
+ }, z.core.$strip>>;
59
+ export declare const PerformanceThresholdsSchema: z.ZodObject<{
60
+ httpMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
61
+ dbMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
62
+ queueMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
63
+ cacheMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
64
+ wsMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
65
+ }, z.core.$strip>;
66
+ export declare const PerformanceMonitoringSchema: z.ZodObject<{
67
+ enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
68
+ thresholds: z.ZodOptional<z.ZodOptional<z.ZodObject<{
69
+ httpMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
70
+ dbMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
71
+ queueMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
72
+ cacheMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
73
+ wsMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
74
+ }, z.core.$strip>>>;
75
+ maxMetricsHistory: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
76
+ logSlowOperations: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
77
+ logAllOperations: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
78
+ monitorHttpRequests: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
79
+ monitorDatabaseOperations: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
80
+ monitorWebSocketOperations: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
81
+ monitorQueueOperations: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
82
+ monitorCacheOperations: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
83
+ reportInterval: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodNumber>>>;
84
+ reportFormat: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodEnum<{
85
+ simple: "simple";
86
+ detailed: "detailed";
87
+ }>>>>;
88
+ }, z.core.$strip>;
89
+ export declare const AuthConfigSchema: z.ZodOptional<z.ZodObject<{
90
+ jwtSecretKey: z.ZodString;
91
+ }, z.core.$strip>>;
92
+ export declare const SecurityConfigSchema: z.ZodOptional<z.ZodObject<{
93
+ helmet: z.ZodOptional<z.ZodObject<{
94
+ enabled: z.ZodOptional<z.ZodBoolean>;
95
+ contentSecurityPolicy: z.ZodOptional<z.ZodBoolean>;
96
+ crossOriginEmbedderPolicy: z.ZodOptional<z.ZodBoolean>;
97
+ crossOriginOpenerPolicy: z.ZodOptional<z.ZodBoolean>;
98
+ crossOriginResourcePolicy: z.ZodOptional<z.ZodBoolean>;
99
+ dnsPrefetchControl: z.ZodOptional<z.ZodBoolean>;
100
+ frameguard: z.ZodOptional<z.ZodBoolean>;
101
+ hidePoweredBy: z.ZodOptional<z.ZodBoolean>;
102
+ hsts: z.ZodOptional<z.ZodBoolean>;
103
+ ieNoOpen: z.ZodOptional<z.ZodBoolean>;
104
+ noSniff: z.ZodOptional<z.ZodBoolean>;
105
+ originAgentCluster: z.ZodOptional<z.ZodBoolean>;
106
+ permittedCrossDomainPolicies: z.ZodOptional<z.ZodBoolean>;
107
+ referrerPolicy: z.ZodOptional<z.ZodBoolean>;
108
+ xssFilter: z.ZodOptional<z.ZodBoolean>;
109
+ }, z.core.$strip>>;
110
+ rateLimit: z.ZodOptional<z.ZodObject<{
111
+ enabled: z.ZodOptional<z.ZodBoolean>;
112
+ max: z.ZodOptional<z.ZodNumber>;
113
+ timeWindow: z.ZodOptional<z.ZodString>;
114
+ ban: z.ZodOptional<z.ZodNumber>;
115
+ cache: z.ZodOptional<z.ZodNumber>;
116
+ }, z.core.$strip>>;
117
+ }, z.core.$strip>>;
118
+ export declare const WebServerRouteSchema: z.ZodObject<{
119
+ type: z.ZodOptional<z.ZodString>;
120
+ method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
121
+ path: z.ZodString;
122
+ url: z.ZodOptional<z.ZodString>;
123
+ controller: z.ZodOptional<z.ZodAny>;
124
+ controllerName: z.ZodOptional<z.ZodString>;
125
+ action: z.ZodOptional<z.ZodString>;
126
+ entityName: z.ZodOptional<z.ZodString>;
127
+ validation: z.ZodOptional<z.ZodAny>;
128
+ }, z.core.$loose>;
129
+ export declare const WebServerConfigSchema: z.ZodObject<{
130
+ enabled: z.ZodDefault<z.ZodBoolean>;
131
+ host: z.ZodDefault<z.ZodString>;
132
+ port: z.ZodDefault<z.ZodNumber>;
133
+ bodyLimit: z.ZodDefault<z.ZodNumber>;
134
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
135
+ routes: z.ZodDefault<z.ZodArray<z.ZodObject<{
136
+ type: z.ZodOptional<z.ZodString>;
137
+ method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
138
+ path: z.ZodString;
139
+ url: z.ZodOptional<z.ZodString>;
140
+ controller: z.ZodOptional<z.ZodAny>;
141
+ controllerName: z.ZodOptional<z.ZodString>;
142
+ action: z.ZodOptional<z.ZodString>;
143
+ entityName: z.ZodOptional<z.ZodString>;
144
+ validation: z.ZodOptional<z.ZodAny>;
145
+ }, z.core.$loose>>>;
146
+ controllersDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
147
+ cors: z.ZodOptional<z.ZodOptional<z.ZodObject<{
148
+ enabled: z.ZodDefault<z.ZodBoolean>;
149
+ urls: z.ZodDefault<z.ZodArray<z.ZodString>>;
150
+ }, z.core.$strip>>>;
151
+ security: z.ZodOptional<z.ZodOptional<z.ZodOptional<z.ZodObject<{
152
+ helmet: z.ZodOptional<z.ZodObject<{
153
+ enabled: z.ZodOptional<z.ZodBoolean>;
154
+ contentSecurityPolicy: z.ZodOptional<z.ZodBoolean>;
155
+ crossOriginEmbedderPolicy: z.ZodOptional<z.ZodBoolean>;
156
+ crossOriginOpenerPolicy: z.ZodOptional<z.ZodBoolean>;
157
+ crossOriginResourcePolicy: z.ZodOptional<z.ZodBoolean>;
158
+ dnsPrefetchControl: z.ZodOptional<z.ZodBoolean>;
159
+ frameguard: z.ZodOptional<z.ZodBoolean>;
160
+ hidePoweredBy: z.ZodOptional<z.ZodBoolean>;
161
+ hsts: z.ZodOptional<z.ZodBoolean>;
162
+ ieNoOpen: z.ZodOptional<z.ZodBoolean>;
163
+ noSniff: z.ZodOptional<z.ZodBoolean>;
164
+ originAgentCluster: z.ZodOptional<z.ZodBoolean>;
165
+ permittedCrossDomainPolicies: z.ZodOptional<z.ZodBoolean>;
166
+ referrerPolicy: z.ZodOptional<z.ZodBoolean>;
167
+ xssFilter: z.ZodOptional<z.ZodBoolean>;
168
+ }, z.core.$strip>>;
169
+ rateLimit: z.ZodOptional<z.ZodObject<{
170
+ enabled: z.ZodOptional<z.ZodBoolean>;
171
+ max: z.ZodOptional<z.ZodNumber>;
172
+ timeWindow: z.ZodOptional<z.ZodString>;
173
+ ban: z.ZodOptional<z.ZodNumber>;
174
+ cache: z.ZodOptional<z.ZodNumber>;
175
+ }, z.core.$strip>>;
176
+ }, z.core.$strip>>>>;
177
+ debug: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodObject<{
178
+ logAllRegisteredRoutes: z.ZodOptional<z.ZodBoolean>;
179
+ }, z.core.$strip>>>>;
180
+ }, z.core.$strip>;
181
+ export declare const WebSocketRouteSchema: z.ZodObject<{
182
+ type: z.ZodString;
183
+ controllerName: z.ZodString;
184
+ action: z.ZodString;
185
+ controller: z.ZodOptional<z.ZodAny>;
186
+ }, z.core.$strip>;
187
+ export declare const WebSocketConfigSchema: z.ZodObject<{
188
+ type: z.ZodOptional<z.ZodDefault<z.ZodString>>;
189
+ enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
190
+ routes: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
191
+ type: z.ZodString;
192
+ controllerName: z.ZodString;
193
+ action: z.ZodString;
194
+ controller: z.ZodOptional<z.ZodAny>;
195
+ }, z.core.$strip>>>>;
196
+ }, z.core.$strip>;
197
+ export declare const ClusterConfigSchema: z.ZodObject<{
198
+ enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
199
+ workers: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
200
+ }, z.core.$strip>;
201
+ export declare const FrameworkConfigSchema: z.ZodObject<{
202
+ name: z.ZodString;
203
+ instanceId: z.ZodDefault<z.ZodString>;
204
+ rootDirectory: z.ZodString;
205
+ cluster: z.ZodOptional<z.ZodObject<{
206
+ enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
207
+ workers: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
208
+ }, z.core.$strip>>;
209
+ redis: z.ZodObject<{
210
+ host: z.ZodString;
211
+ port: z.ZodDefault<z.ZodNumber>;
212
+ password: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
213
+ }, z.core.$strip>;
214
+ cache: z.ZodOptional<z.ZodObject<{}, z.core.$strip>>;
215
+ database: z.ZodOptional<z.ZodObject<{
216
+ enabled: z.ZodDefault<z.ZodBoolean>;
217
+ host: z.ZodString;
218
+ port: z.ZodDefault<z.ZodNumber>;
219
+ username: z.ZodString;
220
+ password: z.ZodString;
221
+ databaseName: z.ZodString;
222
+ entitiesDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
223
+ }, z.core.$strip>>;
224
+ queue: z.ZodObject<{
225
+ queues: z.ZodDefault<z.ZodArray<z.ZodObject<{
226
+ name: z.ZodString;
227
+ isExternal: z.ZodOptional<z.ZodBoolean>;
228
+ jobs: z.ZodDefault<z.ZodArray<z.ZodAny>>;
229
+ }, z.core.$strip>>>;
230
+ processorsDirectory: z.ZodString;
231
+ log: z.ZodOptional<z.ZodObject<{
232
+ jobRegistered: z.ZodOptional<z.ZodBoolean>;
233
+ jobAdded: z.ZodOptional<z.ZodBoolean>;
234
+ jobCompleted: z.ZodOptional<z.ZodBoolean>;
235
+ queueRegistered: z.ZodOptional<z.ZodBoolean>;
236
+ queuesRegistered: z.ZodOptional<z.ZodBoolean>;
237
+ queueWaiting: z.ZodOptional<z.ZodBoolean>;
238
+ }, z.core.$strip>>;
239
+ }, z.core.$strip>;
240
+ event: z.ZodOptional<z.ZodObject<{
241
+ enabled: z.ZodDefault<z.ZodBoolean>;
242
+ controllersDirectory: z.ZodString;
243
+ events: z.ZodDefault<z.ZodArray<z.ZodObject<{
244
+ name: z.ZodString;
245
+ }, z.core.$strip>>>;
246
+ }, z.core.$strip>>;
247
+ log: z.ZodOptional<z.ZodObject<{
248
+ startUp: z.ZodOptional<z.ZodBoolean>;
249
+ shutdown: z.ZodOptional<z.ZodBoolean>;
250
+ }, z.core.$strip>>;
251
+ performanceMonitoring: z.ZodOptional<z.ZodObject<{
252
+ enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
253
+ thresholds: z.ZodOptional<z.ZodOptional<z.ZodObject<{
254
+ httpMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
255
+ dbMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
256
+ queueMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
257
+ cacheMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
258
+ wsMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
259
+ }, z.core.$strip>>>;
260
+ maxMetricsHistory: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
261
+ logSlowOperations: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
262
+ logAllOperations: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
263
+ monitorHttpRequests: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
264
+ monitorDatabaseOperations: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
265
+ monitorWebSocketOperations: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
266
+ monitorQueueOperations: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
267
+ monitorCacheOperations: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
268
+ reportInterval: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodNumber>>>;
269
+ reportFormat: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodEnum<{
270
+ simple: "simple";
271
+ detailed: "detailed";
272
+ }>>>>;
273
+ }, z.core.$strip>>;
274
+ email: z.ZodOptional<z.ZodObject<{}, z.core.$strip>>;
275
+ auth: z.ZodOptional<z.ZodObject<{
276
+ jwtSecretKey: z.ZodString;
277
+ }, z.core.$strip>>;
278
+ web: z.ZodOptional<z.ZodObject<{
279
+ enabled: z.ZodDefault<z.ZodBoolean>;
280
+ host: z.ZodDefault<z.ZodString>;
281
+ port: z.ZodDefault<z.ZodNumber>;
282
+ bodyLimit: z.ZodDefault<z.ZodNumber>;
283
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
284
+ routes: z.ZodDefault<z.ZodArray<z.ZodObject<{
285
+ type: z.ZodOptional<z.ZodString>;
286
+ method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
287
+ path: z.ZodString;
288
+ url: z.ZodOptional<z.ZodString>;
289
+ controller: z.ZodOptional<z.ZodAny>;
290
+ controllerName: z.ZodOptional<z.ZodString>;
291
+ action: z.ZodOptional<z.ZodString>;
292
+ entityName: z.ZodOptional<z.ZodString>;
293
+ validation: z.ZodOptional<z.ZodAny>;
294
+ }, z.core.$loose>>>;
295
+ controllersDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
296
+ cors: z.ZodOptional<z.ZodOptional<z.ZodObject<{
297
+ enabled: z.ZodDefault<z.ZodBoolean>;
298
+ urls: z.ZodDefault<z.ZodArray<z.ZodString>>;
299
+ }, z.core.$strip>>>;
300
+ security: z.ZodOptional<z.ZodOptional<z.ZodOptional<z.ZodObject<{
301
+ helmet: z.ZodOptional<z.ZodObject<{
302
+ enabled: z.ZodOptional<z.ZodBoolean>;
303
+ contentSecurityPolicy: z.ZodOptional<z.ZodBoolean>;
304
+ crossOriginEmbedderPolicy: z.ZodOptional<z.ZodBoolean>;
305
+ crossOriginOpenerPolicy: z.ZodOptional<z.ZodBoolean>;
306
+ crossOriginResourcePolicy: z.ZodOptional<z.ZodBoolean>;
307
+ dnsPrefetchControl: z.ZodOptional<z.ZodBoolean>;
308
+ frameguard: z.ZodOptional<z.ZodBoolean>;
309
+ hidePoweredBy: z.ZodOptional<z.ZodBoolean>;
310
+ hsts: z.ZodOptional<z.ZodBoolean>;
311
+ ieNoOpen: z.ZodOptional<z.ZodBoolean>;
312
+ noSniff: z.ZodOptional<z.ZodBoolean>;
313
+ originAgentCluster: z.ZodOptional<z.ZodBoolean>;
314
+ permittedCrossDomainPolicies: z.ZodOptional<z.ZodBoolean>;
315
+ referrerPolicy: z.ZodOptional<z.ZodBoolean>;
316
+ xssFilter: z.ZodOptional<z.ZodBoolean>;
317
+ }, z.core.$strip>>;
318
+ rateLimit: z.ZodOptional<z.ZodObject<{
319
+ enabled: z.ZodOptional<z.ZodBoolean>;
320
+ max: z.ZodOptional<z.ZodNumber>;
321
+ timeWindow: z.ZodOptional<z.ZodString>;
322
+ ban: z.ZodOptional<z.ZodNumber>;
323
+ cache: z.ZodOptional<z.ZodNumber>;
324
+ }, z.core.$strip>>;
325
+ }, z.core.$strip>>>>;
326
+ debug: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodObject<{
327
+ logAllRegisteredRoutes: z.ZodOptional<z.ZodBoolean>;
328
+ }, z.core.$strip>>>>;
329
+ }, z.core.$strip>>;
330
+ webServer: z.ZodOptional<z.ZodObject<{
331
+ enabled: z.ZodDefault<z.ZodBoolean>;
332
+ host: z.ZodDefault<z.ZodString>;
333
+ port: z.ZodDefault<z.ZodNumber>;
334
+ bodyLimit: z.ZodDefault<z.ZodNumber>;
335
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
336
+ routes: z.ZodDefault<z.ZodArray<z.ZodObject<{
337
+ type: z.ZodOptional<z.ZodString>;
338
+ method: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
339
+ path: z.ZodString;
340
+ url: z.ZodOptional<z.ZodString>;
341
+ controller: z.ZodOptional<z.ZodAny>;
342
+ controllerName: z.ZodOptional<z.ZodString>;
343
+ action: z.ZodOptional<z.ZodString>;
344
+ entityName: z.ZodOptional<z.ZodString>;
345
+ validation: z.ZodOptional<z.ZodAny>;
346
+ }, z.core.$loose>>>;
347
+ controllersDirectory: z.ZodOptional<z.ZodOptional<z.ZodString>>;
348
+ cors: z.ZodOptional<z.ZodOptional<z.ZodObject<{
349
+ enabled: z.ZodDefault<z.ZodBoolean>;
350
+ urls: z.ZodDefault<z.ZodArray<z.ZodString>>;
351
+ }, z.core.$strip>>>;
352
+ security: z.ZodOptional<z.ZodOptional<z.ZodOptional<z.ZodObject<{
353
+ helmet: z.ZodOptional<z.ZodObject<{
354
+ enabled: z.ZodOptional<z.ZodBoolean>;
355
+ contentSecurityPolicy: z.ZodOptional<z.ZodBoolean>;
356
+ crossOriginEmbedderPolicy: z.ZodOptional<z.ZodBoolean>;
357
+ crossOriginOpenerPolicy: z.ZodOptional<z.ZodBoolean>;
358
+ crossOriginResourcePolicy: z.ZodOptional<z.ZodBoolean>;
359
+ dnsPrefetchControl: z.ZodOptional<z.ZodBoolean>;
360
+ frameguard: z.ZodOptional<z.ZodBoolean>;
361
+ hidePoweredBy: z.ZodOptional<z.ZodBoolean>;
362
+ hsts: z.ZodOptional<z.ZodBoolean>;
363
+ ieNoOpen: z.ZodOptional<z.ZodBoolean>;
364
+ noSniff: z.ZodOptional<z.ZodBoolean>;
365
+ originAgentCluster: z.ZodOptional<z.ZodBoolean>;
366
+ permittedCrossDomainPolicies: z.ZodOptional<z.ZodBoolean>;
367
+ referrerPolicy: z.ZodOptional<z.ZodBoolean>;
368
+ xssFilter: z.ZodOptional<z.ZodBoolean>;
369
+ }, z.core.$strip>>;
370
+ rateLimit: z.ZodOptional<z.ZodObject<{
371
+ enabled: z.ZodOptional<z.ZodBoolean>;
372
+ max: z.ZodOptional<z.ZodNumber>;
373
+ timeWindow: z.ZodOptional<z.ZodString>;
374
+ ban: z.ZodOptional<z.ZodNumber>;
375
+ cache: z.ZodOptional<z.ZodNumber>;
376
+ }, z.core.$strip>>;
377
+ }, z.core.$strip>>>>;
378
+ debug: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodObject<{
379
+ logAllRegisteredRoutes: z.ZodOptional<z.ZodBoolean>;
380
+ }, z.core.$strip>>>>;
381
+ }, z.core.$strip>>;
382
+ webSocket: z.ZodOptional<z.ZodObject<{
383
+ type: z.ZodOptional<z.ZodDefault<z.ZodString>>;
384
+ enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
385
+ routes: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
386
+ type: z.ZodString;
387
+ controllerName: z.ZodString;
388
+ action: z.ZodString;
389
+ controller: z.ZodOptional<z.ZodAny>;
390
+ }, z.core.$strip>>>>;
391
+ }, z.core.$strip>>;
392
+ }, z.core.$strip>;
393
+ export type InferFrameworkConfig = z.infer<typeof FrameworkConfigSchema>;
394
+ export interface ValidateConfigOptions {
395
+ collectAllErrors?: boolean;
396
+ }
397
+ export interface ValidationIssueDetail {
398
+ path: string;
399
+ message: string;
400
+ }
401
+ export declare class ConfigValidationError extends Error {
402
+ issues: ValidationIssueDetail[];
403
+ constructor(message: string, issues: ValidationIssueDetail[]);
404
+ }
405
+ export declare function validateFrameworkConfig(raw: unknown, _options?: ValidateConfigOptions): InferFrameworkConfig;
406
+ export declare function formatConfigIssues(issues: ValidationIssueDetail[]): string;
407
+ export default FrameworkConfigSchema;
408
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,218 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { z } from "zod";
4
+ import crypto from "node:crypto";
5
+ const RedisConfigSchema = z.object({
6
+ host: z.string().min(1, "redis.host required"),
7
+ port: z.number().int().positive().default(6379),
8
+ password: z.preprocess((val) => val === "" ? void 0 : val, z.string().min(1).optional())
9
+ });
10
+ const DatabaseConfigSchema = z.object({
11
+ enabled: z.boolean().default(false),
12
+ host: z.string().min(1, "database.host required"),
13
+ port: z.number().int().positive().default(5432),
14
+ username: z.string().min(1, "database.username required"),
15
+ password: z.string().min(1, "database.password required"),
16
+ databaseName: z.string().min(1, "database.databaseName required"),
17
+ entitiesDirectory: z.string().min(1).optional()
18
+ }).partial({ entitiesDirectory: true });
19
+ const QueueLogConfigSchema = z.object({
20
+ jobRegistered: z.boolean().optional(),
21
+ jobAdded: z.boolean().optional(),
22
+ jobCompleted: z.boolean().optional(),
23
+ queueRegistered: z.boolean().optional(),
24
+ queuesRegistered: z.boolean().optional(),
25
+ queueWaiting: z.boolean().optional()
26
+ }).optional();
27
+ const QueueItemSchema = z.object({
28
+ name: z.string(),
29
+ isExternal: z.boolean().optional(),
30
+ jobs: z.array(z.any()).default([])
31
+ });
32
+ const QueueConfigSchema = z.object({
33
+ queues: z.array(QueueItemSchema).default([]),
34
+ processorsDirectory: z.string().min(1, "queue.processorsDirectory required"),
35
+ log: QueueLogConfigSchema
36
+ });
37
+ const EventDefinitionSchema = z.object({
38
+ name: z.string().min(1)
39
+ });
40
+ const EventConfigSchema = z.object({
41
+ enabled: z.boolean().default(false),
42
+ controllersDirectory: z.string().min(1),
43
+ events: z.array(EventDefinitionSchema).default([])
44
+ });
45
+ const LogConfigSchema = z.object({
46
+ startUp: z.boolean().optional(),
47
+ shutdown: z.boolean().optional()
48
+ }).optional();
49
+ const PerformanceThresholdsSchema = z.object({
50
+ httpMs: z.number().int().positive().optional(),
51
+ dbMs: z.number().int().positive().optional(),
52
+ queueMs: z.number().int().positive().optional(),
53
+ cacheMs: z.number().int().positive().optional(),
54
+ wsMs: z.number().int().positive().optional()
55
+ }).partial();
56
+ const PerformanceMonitoringSchema = z.object({
57
+ enabled: z.boolean().default(false),
58
+ thresholds: PerformanceThresholdsSchema.optional(),
59
+ maxMetricsHistory: z.number().int().positive().optional(),
60
+ logSlowOperations: z.boolean().optional(),
61
+ logAllOperations: z.boolean().optional(),
62
+ monitorHttpRequests: z.boolean().default(true).optional(),
63
+ monitorDatabaseOperations: z.boolean().default(true).optional(),
64
+ monitorWebSocketOperations: z.boolean().default(true).optional(),
65
+ monitorQueueOperations: z.boolean().default(true).optional(),
66
+ monitorCacheOperations: z.boolean().default(true).optional(),
67
+ reportInterval: z.number().int().positive().default(6e4).optional(),
68
+ reportFormat: z.enum(["simple", "detailed"]).default("simple").optional()
69
+ }).partial();
70
+ const AuthConfigSchema = z.object({
71
+ jwtSecretKey: z.string().min(1, "auth.jwtSecretKey required")
72
+ }).optional();
73
+ const SecurityConfigSchema = z.object({
74
+ helmet: z.object({
75
+ enabled: z.boolean().optional(),
76
+ contentSecurityPolicy: z.boolean().optional(),
77
+ crossOriginEmbedderPolicy: z.boolean().optional(),
78
+ crossOriginOpenerPolicy: z.boolean().optional(),
79
+ crossOriginResourcePolicy: z.boolean().optional(),
80
+ dnsPrefetchControl: z.boolean().optional(),
81
+ frameguard: z.boolean().optional(),
82
+ hidePoweredBy: z.boolean().optional(),
83
+ hsts: z.boolean().optional(),
84
+ ieNoOpen: z.boolean().optional(),
85
+ noSniff: z.boolean().optional(),
86
+ originAgentCluster: z.boolean().optional(),
87
+ permittedCrossDomainPolicies: z.boolean().optional(),
88
+ referrerPolicy: z.boolean().optional(),
89
+ xssFilter: z.boolean().optional()
90
+ }).optional(),
91
+ rateLimit: z.object({
92
+ enabled: z.boolean().optional(),
93
+ max: z.number().int().positive().optional(),
94
+ timeWindow: z.string().optional(),
95
+ ban: z.number().int().optional(),
96
+ cache: z.number().int().optional()
97
+ }).optional()
98
+ }).optional();
99
+ const WebServerRouteSchema = z.object({
100
+ type: z.string().optional(),
101
+ method: z.union([z.string(), z.array(z.string())]).optional(),
102
+ path: z.string(),
103
+ url: z.string().optional(),
104
+ // Keep for backwards compatibility
105
+ controller: z.any().optional(),
106
+ // Controller class reference
107
+ controllerName: z.string().optional(),
108
+ action: z.string().optional(),
109
+ entityName: z.string().optional(),
110
+ validation: z.any().optional()
111
+ }).passthrough();
112
+ const WebServerConfigSchema = z.object({
113
+ enabled: z.boolean().default(false),
114
+ host: z.string().default("0.0.0.0"),
115
+ port: z.number().int().positive().default(3001),
116
+ bodyLimit: z.number().int().positive().default(25 * 1024 * 1024),
117
+ // 25MB default (was 100MB)
118
+ connectionTimeout: z.number().int().positive().default(10 * 1e3),
119
+ // 10s default (was 30s)
120
+ routes: z.array(WebServerRouteSchema).default([]),
121
+ controllersDirectory: z.string().optional(),
122
+ // Controllers directory path
123
+ cors: z.object({
124
+ enabled: z.boolean().default(false),
125
+ urls: z.array(z.string()).default([])
126
+ }).optional(),
127
+ security: SecurityConfigSchema.optional(),
128
+ debug: z.object({
129
+ logAllRegisteredRoutes: z.boolean().optional()
130
+ }).default({}).optional()
131
+ }).partial({ cors: true, debug: true, controllersDirectory: true, security: true });
132
+ const WebSocketRouteSchema = z.object({
133
+ type: z.string().min(1, "webSocket.routes.type required"),
134
+ controllerName: z.string().min(1, "webSocket.routes.controllerName required"),
135
+ action: z.string().min(1, "webSocket.routes.action required"),
136
+ controller: z.any().optional()
137
+ });
138
+ const WebSocketConfigSchema = z.object({
139
+ type: z.string().default("native"),
140
+ enabled: z.boolean().default(false),
141
+ routes: z.array(WebSocketRouteSchema).default([])
142
+ }).partial();
143
+ const ClusterConfigSchema = z.object({
144
+ enabled: z.boolean().default(false),
145
+ workers: z.number().int().positive().optional()
146
+ }).partial();
147
+ const FrameworkConfigSchema = z.object({
148
+ name: z.string().min(1, "name required"),
149
+ instanceId: z.string().default(() => crypto.randomUUID()),
150
+ rootDirectory: z.string().min(1, "rootDirectory required"),
151
+ cluster: ClusterConfigSchema.optional(),
152
+ redis: RedisConfigSchema,
153
+ cache: z.object({}).optional(),
154
+ database: DatabaseConfigSchema.optional(),
155
+ queue: QueueConfigSchema,
156
+ event: EventConfigSchema.optional(),
157
+ log: LogConfigSchema,
158
+ performanceMonitoring: PerformanceMonitoringSchema.optional(),
159
+ email: z.object({}).optional(),
160
+ auth: AuthConfigSchema,
161
+ web: WebServerConfigSchema.optional(),
162
+ webServer: WebServerConfigSchema.optional(),
163
+ // Support both 'web' and 'webServer' for compatibility
164
+ webSocket: WebSocketConfigSchema.optional()
165
+ });
166
+ class ConfigValidationError extends Error {
167
+ static {
168
+ __name(this, "ConfigValidationError");
169
+ }
170
+ issues;
171
+ constructor(message, issues) {
172
+ super(message);
173
+ this.name = "ConfigValidationError";
174
+ this.issues = issues;
175
+ }
176
+ }
177
+ function validateFrameworkConfig(raw, _options = {}) {
178
+ const result = FrameworkConfigSchema.safeParse(raw);
179
+ if (!result.success) {
180
+ const issues = result.error.issues.map((i) => ({
181
+ path: i.path.join(".") ?? "(root)",
182
+ message: i.message
183
+ }));
184
+ throw new ConfigValidationError("Invalid framework configuration", issues);
185
+ }
186
+ return result.data;
187
+ }
188
+ __name(validateFrameworkConfig, "validateFrameworkConfig");
189
+ function formatConfigIssues(issues) {
190
+ return issues.map((i) => ` - ${i.path}: ${i.message}`).join("\n");
191
+ }
192
+ __name(formatConfigIssues, "formatConfigIssues");
193
+ var schema_default = FrameworkConfigSchema;
194
+ export {
195
+ AuthConfigSchema,
196
+ ClusterConfigSchema,
197
+ ConfigValidationError,
198
+ DatabaseConfigSchema,
199
+ EventConfigSchema,
200
+ EventDefinitionSchema,
201
+ FrameworkConfigSchema,
202
+ LogConfigSchema,
203
+ PerformanceMonitoringSchema,
204
+ PerformanceThresholdsSchema,
205
+ QueueConfigSchema,
206
+ QueueItemSchema,
207
+ QueueLogConfigSchema,
208
+ RedisConfigSchema,
209
+ SecurityConfigSchema,
210
+ WebServerConfigSchema,
211
+ WebServerRouteSchema,
212
+ WebSocketConfigSchema,
213
+ WebSocketRouteSchema,
214
+ schema_default as default,
215
+ formatConfigIssues,
216
+ validateFrameworkConfig
217
+ };
218
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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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",
6
+ "names": []
7
+ }