bootifyjs 0.0.3 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +321 -465
  3. package/dist/api.d.ts +32 -0
  4. package/dist/api.js +149 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/config/app.config.d.ts +29 -0
  7. package/dist/config/app.config.js +55 -0
  8. package/dist/config/app.config.js.map +1 -0
  9. package/dist/controllers/config.controller.d.ts +16 -0
  10. package/dist/controllers/config.controller.js +66 -0
  11. package/dist/controllers/config.controller.js.map +1 -0
  12. package/dist/controllers/events.controller.d.ts +66 -0
  13. package/dist/controllers/events.controller.js +145 -0
  14. package/dist/controllers/events.controller.js.map +1 -0
  15. package/dist/controllers/health.controller.d.ts +20 -0
  16. package/dist/controllers/health.controller.js +92 -0
  17. package/dist/controllers/health.controller.js.map +1 -0
  18. package/dist/controllers/user.controller.d.ts +13 -0
  19. package/dist/controllers/user.controller.js +209 -0
  20. package/dist/controllers/user.controller.js.map +1 -0
  21. package/dist/core/application.d.ts +21 -0
  22. package/dist/core/application.js +90 -0
  23. package/dist/core/application.js.map +1 -0
  24. package/dist/core/config.d.ts +3 -0
  25. package/dist/core/config.js +78 -0
  26. package/dist/core/config.js.map +1 -0
  27. package/dist/core/container.d.ts +17 -0
  28. package/dist/core/container.js +92 -0
  29. package/dist/core/container.js.map +1 -0
  30. package/dist/core/decorators.d.ts +28 -0
  31. package/dist/core/decorators.js +204 -0
  32. package/dist/core/decorators.js.map +1 -0
  33. package/dist/core/errors.d.ts +18 -0
  34. package/dist/core/errors.js +74 -0
  35. package/dist/core/errors.js.map +1 -0
  36. package/dist/core/middleware.d.ts +8 -0
  37. package/dist/core/middleware.js +23 -0
  38. package/dist/core/middleware.js.map +1 -0
  39. package/dist/core/openapi.d.ts +80 -0
  40. package/dist/core/openapi.js +189 -0
  41. package/dist/core/openapi.js.map +1 -0
  42. package/dist/core/router.d.ts +32 -0
  43. package/dist/core/router.js +266 -0
  44. package/dist/core/router.js.map +1 -0
  45. package/dist/core/utils.d.ts +7 -0
  46. package/dist/core/utils.js +75 -0
  47. package/dist/core/utils.js.map +1 -0
  48. package/dist/core/validation.d.ts +15 -0
  49. package/dist/core/validation.js +161 -0
  50. package/dist/core/validation.js.map +1 -0
  51. package/dist/events/core/event-bus.d.ts +26 -0
  52. package/dist/events/core/event-bus.js +253 -0
  53. package/dist/events/core/event-bus.js.map +1 -0
  54. package/dist/events/core/event-registry.d.ts +31 -0
  55. package/dist/events/core/event-registry.js +170 -0
  56. package/dist/events/core/event-registry.js.map +1 -0
  57. package/dist/events/decorators/event.decorators.d.ts +11 -0
  58. package/dist/events/decorators/event.decorators.js +123 -0
  59. package/dist/events/decorators/event.decorators.js.map +1 -0
  60. package/dist/events/examples/system.events.d.ts +15 -0
  61. package/dist/events/examples/system.events.js +28 -0
  62. package/dist/events/examples/system.events.js.map +1 -0
  63. package/dist/events/examples/user.events.d.ts +68 -0
  64. package/dist/events/examples/user.events.js +73 -0
  65. package/dist/events/examples/user.events.js.map +1 -0
  66. package/dist/events/examples/user.handlers.d.ts +20 -0
  67. package/dist/events/examples/user.handlers.js +157 -0
  68. package/dist/events/examples/user.handlers.js.map +1 -0
  69. package/dist/events/index.d.ts +13 -0
  70. package/dist/events/index.js +71 -0
  71. package/dist/events/index.js.map +1 -0
  72. package/dist/events/middleware/logging.middleware.d.ts +7 -0
  73. package/dist/events/middleware/logging.middleware.js +44 -0
  74. package/dist/events/middleware/logging.middleware.js.map +1 -0
  75. package/dist/events/middleware/metrics.middleware.d.ts +11 -0
  76. package/dist/events/middleware/metrics.middleware.js +87 -0
  77. package/dist/events/middleware/metrics.middleware.js.map +1 -0
  78. package/dist/events/middleware/validation.middleware.d.ts +8 -0
  79. package/dist/events/middleware/validation.middleware.js +63 -0
  80. package/dist/events/middleware/validation.middleware.js.map +1 -0
  81. package/dist/events/store/memory-event-store.d.ts +21 -0
  82. package/dist/events/store/memory-event-store.js +81 -0
  83. package/dist/events/store/memory-event-store.js.map +1 -0
  84. package/dist/events/types/event.types.d.ts +57 -0
  85. package/dist/{decorators/cache/ICacheClient.js → events/types/event.types.js} +1 -1
  86. package/dist/events/types/event.types.js.map +1 -0
  87. package/dist/examples/basic-api.d.ts +1 -0
  88. package/dist/examples/basic-api.js +120 -0
  89. package/dist/examples/basic-api.js.map +1 -0
  90. package/dist/index.d.ts +17 -11
  91. package/dist/index.js +95 -31
  92. package/dist/index.js.map +1 -1
  93. package/dist/logging/config/logging.config.d.ts +5 -0
  94. package/dist/logging/config/logging.config.js +101 -0
  95. package/dist/logging/config/logging.config.js.map +1 -0
  96. package/dist/logging/core/log-context.service.d.ts +11 -0
  97. package/dist/logging/core/log-context.service.js +40 -0
  98. package/dist/logging/core/log-context.service.js.map +1 -0
  99. package/dist/logging/core/logger.service.d.ts +29 -0
  100. package/dist/logging/core/logger.service.js +178 -0
  101. package/dist/logging/core/logger.service.js.map +1 -0
  102. package/dist/logging/core/startup-logger.service.d.ts +17 -0
  103. package/dist/logging/core/startup-logger.service.js +156 -0
  104. package/dist/logging/core/startup-logger.service.js.map +1 -0
  105. package/dist/logging/decorators/log.decorator.d.ts +11 -0
  106. package/dist/logging/decorators/log.decorator.js +80 -0
  107. package/dist/logging/decorators/log.decorator.js.map +1 -0
  108. package/dist/logging/index.d.ts +15 -0
  109. package/dist/logging/index.js +46 -0
  110. package/dist/logging/index.js.map +1 -0
  111. package/dist/logging/middleware/context.middleware.d.ts +2 -0
  112. package/dist/logging/middleware/context.middleware.js +29 -0
  113. package/dist/logging/middleware/context.middleware.js.map +1 -0
  114. package/dist/logging/middleware/request-logging.middleware.d.ts +3 -0
  115. package/dist/logging/middleware/request-logging.middleware.js +78 -0
  116. package/dist/logging/middleware/request-logging.middleware.js.map +1 -0
  117. package/dist/logging/types/logging.types.d.ts +79 -0
  118. package/dist/{decorators/transaction/IDatabaseClient.js → logging/types/logging.types.js} +1 -1
  119. package/dist/logging/types/logging.types.js.map +1 -0
  120. package/dist/middlewares/auth.middleware.d.ts +2 -0
  121. package/dist/middlewares/auth.middleware.js +20 -0
  122. package/dist/middlewares/auth.middleware.js.map +1 -0
  123. package/dist/middlewares/cors.middleware.d.ts +2 -0
  124. package/dist/middlewares/cors.middleware.js +16 -0
  125. package/dist/middlewares/cors.middleware.js.map +1 -0
  126. package/dist/middlewares/swagger.middleware.d.ts +6 -0
  127. package/dist/middlewares/swagger.middleware.js +84 -0
  128. package/dist/middlewares/swagger.middleware.js.map +1 -0
  129. package/dist/repositories/user.repository.d.ts +16 -0
  130. package/dist/repositories/user.repository.js +110 -0
  131. package/dist/repositories/user.repository.js.map +1 -0
  132. package/dist/schemas/user.schemas.d.ts +214 -0
  133. package/dist/schemas/user.schemas.js +71 -0
  134. package/dist/schemas/user.schemas.js.map +1 -0
  135. package/dist/services/config-demo.service.d.ts +10 -0
  136. package/dist/services/config-demo.service.js +88 -0
  137. package/dist/services/config-demo.service.js.map +1 -0
  138. package/dist/services/user.service.d.ts +21 -0
  139. package/dist/services/user.service.js +201 -0
  140. package/dist/services/user.service.js.map +1 -0
  141. package/package.json +49 -14
  142. package/dist/application/Application.d.ts +0 -43
  143. package/dist/application/Application.d.ts.map +0 -1
  144. package/dist/application/Application.js +0 -283
  145. package/dist/application/Application.js.map +0 -1
  146. package/dist/container/container.d.ts +0 -9
  147. package/dist/container/container.d.ts.map +0 -1
  148. package/dist/container/container.js +0 -23
  149. package/dist/container/container.js.map +0 -1
  150. package/dist/decorators/cache/ICacheClient.d.ts +0 -6
  151. package/dist/decorators/cache/ICacheClient.d.ts.map +0 -1
  152. package/dist/decorators/cache/ICacheClient.js.map +0 -1
  153. package/dist/decorators/cache/cache.decorator.d.ts +0 -2
  154. package/dist/decorators/cache/cache.decorator.d.ts.map +0 -1
  155. package/dist/decorators/cache/cache.decorator.js +0 -38
  156. package/dist/decorators/cache/cache.decorator.js.map +0 -1
  157. package/dist/decorators/controller.decorator.d.ts +0 -9
  158. package/dist/decorators/controller.decorator.d.ts.map +0 -1
  159. package/dist/decorators/controller.decorator.js +0 -99
  160. package/dist/decorators/controller.decorator.js.map +0 -1
  161. package/dist/decorators/http.decorator.d.ts +0 -7
  162. package/dist/decorators/http.decorator.d.ts.map +0 -1
  163. package/dist/decorators/http.decorator.js +0 -26
  164. package/dist/decorators/http.decorator.js.map +0 -1
  165. package/dist/decorators/timing.decorator.d.ts +0 -2
  166. package/dist/decorators/timing.decorator.d.ts.map +0 -1
  167. package/dist/decorators/timing.decorator.js +0 -26
  168. package/dist/decorators/timing.decorator.js.map +0 -1
  169. package/dist/decorators/transaction/IDatabaseClient.d.ts +0 -9
  170. package/dist/decorators/transaction/IDatabaseClient.d.ts.map +0 -1
  171. package/dist/decorators/transaction/IDatabaseClient.js.map +0 -1
  172. package/dist/decorators/transaction/transactional.decorator.d.ts +0 -2
  173. package/dist/decorators/transaction/transactional.decorator.d.ts.map +0 -1
  174. package/dist/decorators/transaction/transactional.decorator.js +0 -27
  175. package/dist/decorators/transaction/transactional.decorator.js.map +0 -1
  176. package/dist/index.d.ts.map +0 -1
  177. package/dist/logger/Logger.d.ts +0 -37
  178. package/dist/logger/Logger.d.ts.map +0 -1
  179. package/dist/logger/Logger.js +0 -142
  180. package/dist/logger/Logger.js.map +0 -1
  181. package/dist/middleware/http.d.ts +0 -2
  182. package/dist/middleware/http.d.ts.map +0 -1
  183. package/dist/middleware/http.js +0 -80
  184. package/dist/middleware/http.js.map +0 -1
  185. package/dist/middleware/requestcontext.d.ts +0 -12
  186. package/dist/middleware/requestcontext.d.ts.map +0 -1
  187. package/dist/middleware/requestcontext.js +0 -6
  188. package/dist/middleware/requestcontext.js.map +0 -1
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventBus = void 0;
4
+ const event_registry_1 = require("./event-registry");
5
+ const logging_1 = require("../../logging");
6
+ const crypto_1 = require("crypto");
7
+ class EventBus {
8
+ constructor(options = {}) {
9
+ this.middlewares = [];
10
+ this.processingTimes = [];
11
+ this.registry = event_registry_1.EventRegistry.getInstance();
12
+ this.options = {
13
+ enableLogging: true,
14
+ enableMetrics: true,
15
+ maxRetries: 3,
16
+ retryDelay: 1000,
17
+ enableDeadLetterQueue: true,
18
+ ...options
19
+ };
20
+ this.metrics = {
21
+ totalEvents: 0,
22
+ eventsByType: {},
23
+ failedEvents: 0,
24
+ averageProcessingTime: 0
25
+ };
26
+ try {
27
+ this.logger = logging_1.LoggerService.getInstance();
28
+ }
29
+ catch (error) {
30
+ // Logger not initialized yet
31
+ }
32
+ }
33
+ static getInstance(options) {
34
+ if (!EventBus.instance) {
35
+ EventBus.instance = new EventBus(options);
36
+ }
37
+ return EventBus.instance;
38
+ }
39
+ // Add middleware
40
+ use(middleware) {
41
+ this.middlewares.push(middleware);
42
+ if (this.logger && this.options.enableLogging) {
43
+ this.logger.debug('Event middleware added', {
44
+ component: 'EventBus',
45
+ middleware: middleware.name,
46
+ totalMiddlewares: this.middlewares.length
47
+ });
48
+ }
49
+ }
50
+ // Emit event
51
+ async emit(eventType, eventData) {
52
+ const startTime = Date.now();
53
+ // Create complete event
54
+ const event = {
55
+ id: this.generateEventId(),
56
+ type: eventType,
57
+ timestamp: new Date(),
58
+ version: 1,
59
+ correlationId: eventData.correlationId,
60
+ causationId: eventData.causationId,
61
+ metadata: eventData.metadata,
62
+ ...eventData
63
+ };
64
+ if (this.logger && this.options.enableLogging) {
65
+ this.logger.info('Event emitted', {
66
+ component: 'EventBus',
67
+ eventType,
68
+ eventId: event.id,
69
+ correlationId: event.correlationId
70
+ });
71
+ }
72
+ try {
73
+ // Execute middlewares and handlers
74
+ await this.executeMiddlewares(event, async () => {
75
+ await this.processEvent(event);
76
+ });
77
+ // Update metrics
78
+ if (this.options.enableMetrics) {
79
+ this.updateMetrics(event, Date.now() - startTime, false);
80
+ }
81
+ }
82
+ catch (error) {
83
+ if (this.logger) {
84
+ this.logger.error('Event processing failed', error, {
85
+ component: 'EventBus',
86
+ eventType,
87
+ eventId: event.id
88
+ });
89
+ }
90
+ // Update failure metrics
91
+ if (this.options.enableMetrics) {
92
+ this.updateMetrics(event, Date.now() - startTime, true);
93
+ }
94
+ throw error;
95
+ }
96
+ }
97
+ // Process event with handlers
98
+ async processEvent(event) {
99
+ const handlers = this.registry.getHandlers(event.type);
100
+ if (handlers.length === 0) {
101
+ if (this.logger && this.options.enableLogging) {
102
+ this.logger.warn('No handlers found for event', {
103
+ component: 'EventBus',
104
+ eventType: event.type,
105
+ eventId: event.id
106
+ });
107
+ }
108
+ return;
109
+ }
110
+ // Execute handlers in parallel (can be changed to sequential if needed)
111
+ const handlerPromises = handlers.map(subscription => this.executeHandler(subscription.handler, event, subscription.id));
112
+ await Promise.all(handlerPromises);
113
+ }
114
+ // Execute single handler with retry logic
115
+ async executeHandler(handler, event, subscriptionId, attempt = 1) {
116
+ try {
117
+ await handler.handle(event);
118
+ if (this.logger && this.options.enableLogging) {
119
+ this.logger.debug('Event handler executed successfully', {
120
+ component: 'EventBus',
121
+ eventType: event.type,
122
+ eventId: event.id,
123
+ subscriptionId,
124
+ attempt
125
+ });
126
+ }
127
+ }
128
+ catch (error) {
129
+ if (this.logger) {
130
+ this.logger.error('Event handler failed', error, {
131
+ component: 'EventBus',
132
+ eventType: event.type,
133
+ eventId: event.id,
134
+ subscriptionId,
135
+ attempt
136
+ });
137
+ }
138
+ // Retry logic
139
+ if (attempt < this.options.maxRetries) {
140
+ if (this.logger) {
141
+ this.logger.info('Retrying event handler', {
142
+ component: 'EventBus',
143
+ eventType: event.type,
144
+ eventId: event.id,
145
+ subscriptionId,
146
+ attempt: attempt + 1,
147
+ maxRetries: this.options.maxRetries
148
+ });
149
+ }
150
+ // Wait before retry
151
+ await this.delay(this.options.retryDelay * attempt);
152
+ return this.executeHandler(handler, event, subscriptionId, attempt + 1);
153
+ }
154
+ // Send to dead letter queue if enabled
155
+ if (this.options.enableDeadLetterQueue) {
156
+ await this.sendToDeadLetterQueue(event, error, subscriptionId);
157
+ }
158
+ throw error;
159
+ }
160
+ }
161
+ // Execute middlewares
162
+ async executeMiddlewares(event, next) {
163
+ let index = 0;
164
+ const executeNext = async () => {
165
+ if (index < this.middlewares.length) {
166
+ const middleware = this.middlewares[index++];
167
+ await middleware.execute(event, executeNext);
168
+ }
169
+ else {
170
+ await next();
171
+ }
172
+ };
173
+ await executeNext();
174
+ }
175
+ // Send to dead letter queue
176
+ async sendToDeadLetterQueue(event, error, subscriptionId) {
177
+ if (this.logger) {
178
+ this.logger.error('Event sent to dead letter queue', error, {
179
+ component: 'EventBus',
180
+ eventType: event.type,
181
+ eventId: event.id,
182
+ subscriptionId,
183
+ deadLetterQueue: true
184
+ });
185
+ }
186
+ // Emit dead letter event
187
+ try {
188
+ await this.emit('system.event.dead_letter', {
189
+ id: event.id,
190
+ type: event.type,
191
+ failedEventData: JSON.stringify(event),
192
+ error: error.message,
193
+ subscriptionId,
194
+ timestamp: new Date()
195
+ });
196
+ }
197
+ catch (dlqError) {
198
+ if (this.logger) {
199
+ this.logger.error('Failed to send event to dead letter queue', dlqError, {
200
+ component: 'EventBus',
201
+ originalEventId: event.id
202
+ });
203
+ }
204
+ }
205
+ }
206
+ // Update metrics
207
+ updateMetrics(event, processingTime, failed) {
208
+ this.metrics.totalEvents++;
209
+ this.metrics.eventsByType[event.type] = (this.metrics.eventsByType[event.type] || 0) + 1;
210
+ this.metrics.lastEventTimestamp = event.timestamp;
211
+ if (failed) {
212
+ this.metrics.failedEvents++;
213
+ }
214
+ // Update processing time
215
+ this.processingTimes.push(processingTime);
216
+ if (this.processingTimes.length > 100) {
217
+ this.processingTimes.shift(); // Keep only last 100 measurements
218
+ }
219
+ this.metrics.averageProcessingTime =
220
+ this.processingTimes.reduce((sum, time) => sum + time, 0) / this.processingTimes.length;
221
+ }
222
+ // Get metrics
223
+ getMetrics() {
224
+ return { ...this.metrics };
225
+ }
226
+ // Get registry
227
+ getRegistry() {
228
+ return this.registry;
229
+ }
230
+ // Utility methods
231
+ generateEventId() {
232
+ return `evt_${Date.now()}_${(0, crypto_1.randomBytes)(8).toString('hex')}`;
233
+ }
234
+ delay(ms) {
235
+ return new Promise(resolve => setTimeout(resolve, ms));
236
+ }
237
+ // Health check
238
+ isHealthy() {
239
+ const stats = this.registry.getStatistics();
240
+ return stats.activeSubscriptions > 0;
241
+ }
242
+ // Shutdown gracefully
243
+ async shutdown() {
244
+ if (this.logger) {
245
+ this.logger.info('Event bus shutting down', {
246
+ component: 'EventBus',
247
+ metrics: this.metrics
248
+ });
249
+ }
250
+ }
251
+ }
252
+ exports.EventBus = EventBus;
253
+ //# sourceMappingURL=event-bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../../src/events/core/event-bus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import 'reflect-metadata';
2
+ import { BaseEvent, EventHandler, EventSubscription } from '../types/event.types';
3
+ export declare class EventRegistry {
4
+ private static instance;
5
+ private subscriptions;
6
+ private eventTypes;
7
+ private logger?;
8
+ private constructor();
9
+ static getInstance(): EventRegistry;
10
+ registerEventType<T extends BaseEvent>(eventType: string, eventClass: new () => T): void;
11
+ registerHandler<T extends BaseEvent>(eventType: string, handler: EventHandler<T>, options?: {
12
+ priority?: number;
13
+ metadata?: Record<string, any>;
14
+ }): string;
15
+ getHandlers(eventType: string): EventSubscription[];
16
+ getRegisteredEventTypes(): string[];
17
+ getAllSubscriptions(): Map<string, EventSubscription[]>;
18
+ unregisterHandler(subscriptionId: string): boolean;
19
+ deactivateHandler(subscriptionId: string): boolean;
20
+ activateHandler(subscriptionId: string): boolean;
21
+ isValidEventType(eventType: string): boolean;
22
+ createEventInstance<T extends BaseEvent>(eventType: string): T | null;
23
+ getStatistics(): {
24
+ totalEventTypes: number;
25
+ totalSubscriptions: number;
26
+ subscriptionsByType: Record<string, number>;
27
+ activeSubscriptions: number;
28
+ };
29
+ private generateSubscriptionId;
30
+ clear(): void;
31
+ }
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventRegistry = void 0;
4
+ require("reflect-metadata");
5
+ const logging_1 = require("../../logging");
6
+ class EventRegistry {
7
+ constructor() {
8
+ this.subscriptions = new Map();
9
+ this.eventTypes = new Map();
10
+ try {
11
+ this.logger = logging_1.LoggerService.getInstance();
12
+ }
13
+ catch (error) {
14
+ // Logger not initialized yet
15
+ }
16
+ }
17
+ static getInstance() {
18
+ if (!EventRegistry.instance) {
19
+ EventRegistry.instance = new EventRegistry();
20
+ }
21
+ return EventRegistry.instance;
22
+ }
23
+ // Register event type for type safety
24
+ registerEventType(eventType, eventClass) {
25
+ this.eventTypes.set(eventType, eventClass);
26
+ if (this.logger) {
27
+ this.logger.debug('Event type registered', {
28
+ component: 'EventRegistry',
29
+ eventType,
30
+ eventClass: eventClass.name
31
+ });
32
+ }
33
+ }
34
+ // Register event handler
35
+ registerHandler(eventType, handler, options = {}) {
36
+ const subscription = {
37
+ id: this.generateSubscriptionId(),
38
+ eventType,
39
+ handler: handler,
40
+ priority: options.priority || 0,
41
+ active: true,
42
+ metadata: options.metadata
43
+ };
44
+ if (!this.subscriptions.has(eventType)) {
45
+ this.subscriptions.set(eventType, []);
46
+ }
47
+ const handlers = this.subscriptions.get(eventType);
48
+ handlers.push(subscription);
49
+ // Sort by priority (higher priority first)
50
+ handlers.sort((a, b) => b.priority - a.priority);
51
+ if (this.logger) {
52
+ this.logger.debug('Event handler registered', {
53
+ component: 'EventRegistry',
54
+ eventType,
55
+ subscriptionId: subscription.id,
56
+ priority: subscription.priority,
57
+ totalHandlers: handlers.length
58
+ });
59
+ }
60
+ return subscription.id;
61
+ }
62
+ // Get handlers for event type
63
+ getHandlers(eventType) {
64
+ return this.subscriptions.get(eventType)?.filter(sub => sub.active) || [];
65
+ }
66
+ // Get all registered event types
67
+ getRegisteredEventTypes() {
68
+ return Array.from(this.eventTypes.keys());
69
+ }
70
+ // Get all subscriptions
71
+ getAllSubscriptions() {
72
+ return new Map(this.subscriptions);
73
+ }
74
+ // Unregister handler
75
+ unregisterHandler(subscriptionId) {
76
+ for (const [eventType, handlers] of this.subscriptions.entries()) {
77
+ const index = handlers.findIndex(sub => sub.id === subscriptionId);
78
+ if (index !== -1) {
79
+ handlers.splice(index, 1);
80
+ if (this.logger) {
81
+ this.logger.debug('Event handler unregistered', {
82
+ component: 'EventRegistry',
83
+ eventType,
84
+ subscriptionId
85
+ });
86
+ }
87
+ return true;
88
+ }
89
+ }
90
+ return false;
91
+ }
92
+ // Deactivate handler
93
+ deactivateHandler(subscriptionId) {
94
+ for (const handlers of this.subscriptions.values()) {
95
+ const subscription = handlers.find(sub => sub.id === subscriptionId);
96
+ if (subscription) {
97
+ subscription.active = false;
98
+ if (this.logger) {
99
+ this.logger.debug('Event handler deactivated', {
100
+ component: 'EventRegistry',
101
+ subscriptionId
102
+ });
103
+ }
104
+ return true;
105
+ }
106
+ }
107
+ return false;
108
+ }
109
+ // Activate handler
110
+ activateHandler(subscriptionId) {
111
+ for (const handlers of this.subscriptions.values()) {
112
+ const subscription = handlers.find(sub => sub.id === subscriptionId);
113
+ if (subscription) {
114
+ subscription.active = true;
115
+ if (this.logger) {
116
+ this.logger.debug('Event handler activated', {
117
+ component: 'EventRegistry',
118
+ subscriptionId
119
+ });
120
+ }
121
+ return true;
122
+ }
123
+ }
124
+ return false;
125
+ }
126
+ // Validate event type
127
+ isValidEventType(eventType) {
128
+ return this.eventTypes.has(eventType);
129
+ }
130
+ // Create event instance
131
+ createEventInstance(eventType) {
132
+ const EventClass = this.eventTypes.get(eventType);
133
+ if (!EventClass) {
134
+ return null;
135
+ }
136
+ return new EventClass();
137
+ }
138
+ // Get registry statistics
139
+ getStatistics() {
140
+ let totalSubscriptions = 0;
141
+ let activeSubscriptions = 0;
142
+ const subscriptionsByType = {};
143
+ for (const [eventType, handlers] of this.subscriptions.entries()) {
144
+ subscriptionsByType[eventType] = handlers.length;
145
+ totalSubscriptions += handlers.length;
146
+ activeSubscriptions += handlers.filter(sub => sub.active).length;
147
+ }
148
+ return {
149
+ totalEventTypes: this.eventTypes.size,
150
+ totalSubscriptions,
151
+ subscriptionsByType,
152
+ activeSubscriptions
153
+ };
154
+ }
155
+ generateSubscriptionId() {
156
+ return `sub_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
157
+ }
158
+ // Clear all registrations (for testing)
159
+ clear() {
160
+ this.subscriptions.clear();
161
+ this.eventTypes.clear();
162
+ if (this.logger) {
163
+ this.logger.debug('Event registry cleared', {
164
+ component: 'EventRegistry'
165
+ });
166
+ }
167
+ }
168
+ }
169
+ exports.EventRegistry = EventRegistry;
170
+ //# sourceMappingURL=event-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-registry.js","sourceRoot":"","sources":["../../../src/events/core/event-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import 'reflect-metadata';
2
+ import { BaseEvent } from '../types/event.types';
3
+ export declare function Event(eventType: string): ClassDecorator;
4
+ export declare function EventHandler<T extends BaseEvent = BaseEvent>(eventType: string, options?: {
5
+ priority?: number;
6
+ metadata?: Record<string, any>;
7
+ }): MethodDecorator;
8
+ export declare function EventEmitter(): ClassDecorator;
9
+ export declare function EventListener(): ClassDecorator;
10
+ export declare function registerEventHandlers(classes: any[]): void;
11
+ export declare function EmitEvent<T extends BaseEvent = BaseEvent>(eventType: string, eventDataFactory?: (result: any, args: any[]) => Partial<T>): MethodDecorator;
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Event = Event;
4
+ exports.EventHandler = EventHandler;
5
+ exports.EventEmitter = EventEmitter;
6
+ exports.EventListener = EventListener;
7
+ exports.registerEventHandlers = registerEventHandlers;
8
+ exports.EmitEvent = EmitEvent;
9
+ require("reflect-metadata");
10
+ const event_registry_1 = require("../core/event-registry");
11
+ const event_bus_1 = require("../core/event-bus");
12
+ const container_1 = require("../../core/container");
13
+ // Event class decorator
14
+ function Event(eventType) {
15
+ return function (target) {
16
+ const registry = event_registry_1.EventRegistry.getInstance();
17
+ registry.registerEventType(eventType, target);
18
+ // Store event type metadata
19
+ Reflect.defineMetadata('event:type', eventType, target);
20
+ return target;
21
+ };
22
+ }
23
+ // Event handler method decorator
24
+ function EventHandler(eventType, options = {}) {
25
+ return function (target, propertyKey, descriptor) {
26
+ const originalMethod = descriptor.value;
27
+ // Store handler metadata
28
+ const handlers = Reflect.getMetadata('event:handlers', target.constructor) || [];
29
+ handlers.push({
30
+ eventType,
31
+ methodName: propertyKey,
32
+ options
33
+ });
34
+ Reflect.defineMetadata('event:handlers', handlers, target.constructor);
35
+ return descriptor;
36
+ };
37
+ }
38
+ // Event emitter class decorator
39
+ function EventEmitter() {
40
+ return function (target) {
41
+ // Add eventBus property to the class
42
+ Object.defineProperty(target.prototype, 'eventBus', {
43
+ get: function () {
44
+ if (!this._eventBus) {
45
+ this._eventBus = event_bus_1.EventBus.getInstance();
46
+ }
47
+ return this._eventBus;
48
+ },
49
+ enumerable: false,
50
+ configurable: false
51
+ });
52
+ // Store emitter metadata
53
+ Reflect.defineMetadata('event:emitter', true, target);
54
+ return target;
55
+ };
56
+ }
57
+ // Event listener class decorator (auto-registers handlers)
58
+ function EventListener() {
59
+ return function (target) {
60
+ // Register the class in the container
61
+ container_1.container.register(target);
62
+ // Store listener metadata
63
+ Reflect.defineMetadata('event:listener', true, target);
64
+ return target;
65
+ };
66
+ }
67
+ // Helper function to register all event handlers from decorated classes
68
+ function registerEventHandlers(classes) {
69
+ const registry = event_registry_1.EventRegistry.getInstance();
70
+ classes.forEach(ClassConstructor => {
71
+ const isListener = Reflect.getMetadata('event:listener', ClassConstructor);
72
+ if (!isListener)
73
+ return;
74
+ const handlers = Reflect.getMetadata('event:handlers', ClassConstructor) || [];
75
+ if (handlers.length === 0)
76
+ return;
77
+ // Create instance
78
+ const instance = container_1.container.resolve(ClassConstructor);
79
+ // Register each handler
80
+ handlers.forEach((handlerInfo) => {
81
+ const handler = {
82
+ handle: async (event) => {
83
+ const instanceMethod = instance[handlerInfo.methodName];
84
+ if (typeof instanceMethod === 'function') {
85
+ await instanceMethod.call(instance, event);
86
+ }
87
+ else {
88
+ throw new Error(`Method ${String(handlerInfo.methodName)} not found on handler instance`);
89
+ }
90
+ }
91
+ };
92
+ registry.registerHandler(handlerInfo.eventType, handler, handlerInfo.options);
93
+ });
94
+ });
95
+ }
96
+ // Emit decorator for methods (automatically emits events after method execution)
97
+ function EmitEvent(eventType, eventDataFactory) {
98
+ return function (target, propertyKey, descriptor) {
99
+ const originalMethod = descriptor.value;
100
+ descriptor.value = async function (...args) {
101
+ const result = await originalMethod.apply(this, args);
102
+ // Get event bus
103
+ const eventBus = event_bus_1.EventBus.getInstance();
104
+ // Create event data
105
+ let eventData = {};
106
+ if (eventDataFactory) {
107
+ eventData = eventDataFactory(result, args);
108
+ }
109
+ else {
110
+ // Create a safe default payload
111
+ eventData = {
112
+ data: { result, args },
113
+ timestamp: new Date()
114
+ };
115
+ }
116
+ // Emit event
117
+ await eventBus.emit(eventType, eventData);
118
+ return result;
119
+ };
120
+ return descriptor;
121
+ };
122
+ }
123
+ //# sourceMappingURL=event.decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.decorators.js","sourceRoot":"","sources":["../../../src/events/decorators/event.decorators.ts"],"names":[],"mappings":";;AAOA,sBAUC;AAGD,oCAqBC;AAGD,oCAmBC;AAGD,sCAUC;AAGD,sDAiCC;AAGD,8BAiCC;AApJD,4BAA0B;AAE1B,2DAAuD;AACvD,iDAA6C;AAC7C,oDAAiD;AAEjD,wBAAwB;AACxB,SAAgB,KAAK,CAAC,SAAiB;IACrC,OAAO,UAAU,MAAW;QAC1B,MAAM,QAAQ,GAAG,8BAAa,CAAC,WAAW,EAAE,CAAC;QAC7C,QAAQ,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAE9C,4BAA4B;QAC5B,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAExD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,iCAAiC;AACjC,SAAgB,YAAY,CAC1B,SAAiB,EACjB,UAGI,EAAE;IAEN,OAAO,UAAU,MAAW,EAAE,WAA4B,EAAE,UAA8B;QACxF,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QAExC,yBAAyB;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACjF,QAAQ,CAAC,IAAI,CAAC;YACZ,SAAS;YACT,UAAU,EAAE,WAAW;YACvB,OAAO;SACR,CAAC,CAAC;QACH,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEvE,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED,gCAAgC;AAChC,SAAgB,YAAY;IAC1B,OAAO,UAAU,MAAW;QAC1B,qCAAqC;QACrC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE;YAClD,GAAG,EAAE;gBACH,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACpB,IAAI,CAAC,SAAS,GAAG,oBAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1C,CAAC;gBACD,OAAO,IAAI,CAAC,SAAS,CAAC;YACxB,CAAC;YACD,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QAEH,yBAAyB;QACzB,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEtD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,SAAgB,aAAa;IAC3B,OAAO,UAAU,MAAW;QAC1B,sCAAsC;QACtC,qBAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE3B,0BAA0B;QAC1B,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEvD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,SAAgB,qBAAqB,CAAC,OAAc;IAClD,MAAM,QAAQ,GAAG,8BAAa,CAAC,WAAW,EAAE,CAAC;IAE7C,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;QACjC,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU;YAAE,OAAO;QAExB,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC/E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAElC,kBAAkB;QAClB,MAAM,QAAQ,GAAG,qBAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAErD,wBAAwB;QACxB,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAgB,EAAE,EAAE;YACpC,MAAM,OAAO,GAAiB;gBAC5B,MAAM,EAAE,KAAK,EAAE,KAAgB,EAAE,EAAE;oBACjC,MAAM,cAAc,GAAI,QAAgB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;oBACjE,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;wBACzC,MAAM,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAC7C,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;oBAC5F,CAAC;gBACH,CAAC;aACF,CAAC;YAEF,QAAQ,CAAC,eAAe,CACtB,WAAW,CAAC,SAAS,EACrB,OAAO,EACP,WAAW,CAAC,OAAO,CACpB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AACjF,SAAgB,SAAS,CACvB,SAAiB,EACjB,gBAA2D;IAE3D,OAAO,UAAU,MAAW,EAAE,WAA4B,EAAE,UAA8B;QACxF,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QAExC,UAAU,CAAC,KAAK,GAAG,KAAK,WAAW,GAAG,IAAW;YAC/C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAEtD,gBAAgB;YAChB,MAAM,QAAQ,GAAG,oBAAQ,CAAC,WAAW,EAAE,CAAC;YAExC,oBAAoB;YACpB,IAAI,SAAS,GAAe,EAAE,CAAC;YAC/B,IAAI,gBAAgB,EAAE,CAAC;gBACrB,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,gCAAgC;gBAChC,SAAS,GAAG;oBACV,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;oBACtB,SAAS,EAAE,IAAI,IAAI,EAAE;iBACG,CAAC;YAC7B,CAAC;YAED,aAAa;YACb,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAE1C,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { BaseEvent, DeadLetterEvent } from '../types/event.types';
2
+ export declare class SystemDeadLetterEvent implements DeadLetterEvent {
3
+ id: string;
4
+ type: string;
5
+ timestamp: Date;
6
+ version: number;
7
+ correlationId?: string;
8
+ causationId?: string;
9
+ metadata?: Record<string, any>;
10
+ originalEvent: BaseEvent;
11
+ failedEventData: string;
12
+ error: string;
13
+ subscriptionId: string;
14
+ constructor(data?: Partial<SystemDeadLetterEvent>);
15
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SystemDeadLetterEvent = void 0;
13
+ const event_decorators_1 = require("../decorators/event.decorators");
14
+ let SystemDeadLetterEvent = class SystemDeadLetterEvent {
15
+ constructor(data) {
16
+ this.type = 'system.event.dead_letter';
17
+ this.version = 1;
18
+ if (data) {
19
+ Object.assign(this, data);
20
+ }
21
+ }
22
+ };
23
+ exports.SystemDeadLetterEvent = SystemDeadLetterEvent;
24
+ exports.SystemDeadLetterEvent = SystemDeadLetterEvent = __decorate([
25
+ (0, event_decorators_1.Event)('system.event.dead_letter'),
26
+ __metadata("design:paramtypes", [Object])
27
+ ], SystemDeadLetterEvent);
28
+ //# sourceMappingURL=system.events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.events.js","sourceRoot":"","sources":["../../../src/events/examples/system.events.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,qEAAuD;AAGhD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAehC,YAAY,IAAqC;QAbjD,SAAI,GAAG,0BAA0B,CAAC;QAElC,YAAO,GAAG,CAAC,CAAC;QAYV,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF,CAAA;AApBY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,wBAAK,EAAC,0BAA0B,CAAC;;GACrB,qBAAqB,CAoBjC"}