@asenajs/asena 0.5.0 → 0.6.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/adapter/AsenaAdapter.js.map +1 -1
- package/dist/lib/adapter/AsenaWebsocketAdapter.js.map +1 -1
- package/dist/lib/ioc/CircularDependencyDetector.js.map +1 -1
- package/dist/lib/ioc/Container.js +4 -4
- package/dist/lib/ioc/Container.js.map +1 -1
- package/dist/lib/ioc/CoreContainer.js +7 -0
- package/dist/lib/ioc/CoreContainer.js.map +1 -1
- package/dist/lib/ioc/IocEngine.js +0 -2
- package/dist/lib/ioc/IocEngine.js.map +1 -1
- package/dist/lib/ioc/component/componentUtils.js.map +1 -1
- package/dist/lib/ioc/constants/ComponentConstants.d.ts +2 -0
- package/dist/lib/ioc/constants/ComponentConstants.js +3 -0
- package/dist/lib/ioc/constants/ComponentConstants.js.map +1 -1
- package/dist/lib/ioc/types/ICoreServiceNamesType.d.ts +3 -0
- package/dist/lib/ioc/types/ICoreServiceNamesType.js +4 -0
- package/dist/lib/ioc/types/ICoreServiceNamesType.js.map +1 -1
- package/dist/lib/ioc/types/decorators/ComponentType.d.ts +2 -1
- package/dist/lib/ioc/types/decorators/ComponentType.js +1 -0
- package/dist/lib/ioc/types/decorators/ComponentType.js.map +1 -1
- package/dist/lib/server/AsenaServer.d.ts +1 -0
- package/dist/lib/server/AsenaServer.js +7 -1
- package/dist/lib/server/AsenaServer.js.map +1 -1
- package/dist/lib/server/AsenaServerFactory.js.map +1 -1
- package/dist/lib/server/decorators/components/Controller.js.map +1 -1
- package/dist/lib/server/decorators/components/EventService.d.ts +37 -0
- package/dist/lib/server/decorators/components/EventService.js +47 -0
- package/dist/lib/server/decorators/components/EventService.js.map +1 -0
- package/dist/lib/server/decorators/components/Schedule.js.map +1 -1
- package/dist/lib/server/decorators/components/StaticServe.js +1 -1
- package/dist/lib/server/decorators/components/StaticServe.js.map +1 -1
- package/dist/lib/server/decorators/components/index.d.ts +1 -0
- package/dist/lib/server/decorators/components/index.js +1 -0
- package/dist/lib/server/decorators/components/index.js.map +1 -1
- package/dist/lib/server/decorators/index.d.ts +1 -0
- package/dist/lib/server/decorators/index.js +1 -0
- package/dist/lib/server/decorators/index.js.map +1 -1
- package/dist/lib/server/event/EventDispatchService.d.ts +104 -0
- package/dist/lib/server/event/EventDispatchService.js +203 -0
- package/dist/lib/server/event/EventDispatchService.js.map +1 -0
- package/dist/lib/server/event/EventEmitter.d.ts +67 -0
- package/dist/lib/server/event/EventEmitter.js +88 -0
- package/dist/lib/server/event/EventEmitter.js.map +1 -0
- package/dist/lib/server/event/EventService.d.ts +5 -0
- package/dist/lib/server/event/EventService.js +6 -0
- package/dist/lib/server/event/EventService.js.map +1 -0
- package/dist/lib/server/event/decorators/On.d.ts +38 -0
- package/dist/lib/server/event/decorators/On.js +56 -0
- package/dist/lib/server/event/decorators/On.js.map +1 -0
- package/dist/lib/server/event/decorators/index.d.ts +1 -0
- package/dist/lib/server/event/decorators/index.js +2 -0
- package/dist/lib/server/event/decorators/index.js.map +1 -0
- package/dist/lib/server/event/emitter.d.ts +21 -0
- package/dist/lib/server/event/emitter.js +25 -0
- package/dist/lib/server/event/emitter.js.map +1 -0
- package/dist/lib/server/event/eventPatternMatcher.d.ts +24 -0
- package/dist/lib/server/event/eventPatternMatcher.js +112 -0
- package/dist/lib/server/event/eventPatternMatcher.js.map +1 -0
- package/dist/lib/server/event/index.d.ts +6 -0
- package/dist/lib/server/event/index.js +12 -0
- package/dist/lib/server/event/index.js.map +1 -0
- package/dist/lib/server/event/types.d.ts +70 -0
- package/dist/lib/server/event/types.js +2 -0
- package/dist/lib/server/event/types.js.map +1 -0
- package/dist/lib/server/index.d.ts +0 -2
- package/dist/lib/server/index.js +0 -3
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/messaging/Ulak.js.map +1 -1
- package/dist/lib/server/messaging/types.js.map +1 -1
- package/dist/lib/server/src/services/PrepareConfigService.js.map +1 -1
- package/dist/lib/server/src/services/PrepareEventService.d.ts +40 -0
- package/dist/lib/server/src/services/PrepareEventService.js +103 -0
- package/dist/lib/server/src/services/PrepareEventService.js.map +1 -0
- package/dist/lib/server/src/services/PrepareMiddlewareService.js.map +1 -1
- package/dist/lib/server/src/services/PrepareStaticServeConfigService.js +3 -3
- package/dist/lib/server/src/services/PrepareStaticServeConfigService.js.map +1 -1
- package/dist/lib/server/src/services/PrepareValidatorService.js.map +1 -1
- package/dist/lib/server/src/services/PrepareWebsocketService.d.ts +1 -1
- package/dist/lib/server/src/services/PrepareWebsocketService.js +2 -2
- package/dist/lib/server/src/services/PrepareWebsocketService.js.map +1 -1
- package/dist/lib/server/web/decorators/http.base.d.ts +1 -1
- package/dist/lib/server/web/decorators/http.base.js +1 -1
- package/dist/lib/server/web/decorators/http.base.js.map +1 -1
- package/dist/lib/server/web/helper/middlewareHelper.d.ts +1 -1
- package/dist/lib/server/web/helper/middlewareHelper.js +1 -1
- package/dist/lib/server/web/helper/middlewareHelper.js.map +1 -1
- package/dist/lib/server/web/middleware/AsenaMiddlewareService.js.map +1 -1
- package/dist/lib/server/web/middleware/AsenaStaticServeService.d.ts +1 -1
- package/dist/lib/server/web/middleware/AsenaStaticServeService.js.map +1 -1
- package/dist/lib/server/web/websocket/AsenaSocket.d.ts +237 -4
- package/dist/lib/server/web/websocket/AsenaSocket.js +234 -32
- package/dist/lib/server/web/websocket/AsenaSocket.js.map +1 -1
- package/dist/lib/server/web/websocket/AsenaWebSocketServer.js.map +1 -1
- package/dist/lib/server/web/websocket/AsenaWebSocketService.d.ts +0 -13
- package/dist/lib/server/web/websocket/AsenaWebSocketService.js +1 -21
- package/dist/lib/server/web/websocket/AsenaWebSocketService.js.map +1 -1
- package/dist/lib/utils/index.d.ts +2 -0
- package/dist/lib/utils/index.js +3 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/lib/utils/typedMetadata.js +0 -1
- package/dist/lib/utils/typedMetadata.js.map +1 -1
- package/package.json +25 -14
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { ICoreService } from '../../ioc';
|
|
2
|
+
import type { EventHandler, EventSubscription } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* @description Internal event dispatch service
|
|
5
|
+
* Handles pattern matching, storage, and dispatching of events
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* - EventEmitter (public API) → EventDispatchService (internal logic)
|
|
9
|
+
* - Similar to: AsenaWebSocketService → AsenaWebSocketServer
|
|
10
|
+
*
|
|
11
|
+
* Performance:
|
|
12
|
+
* - Exact patterns: O(1) lookup via Map
|
|
13
|
+
* - Wildcard patterns: O(n) check via Array
|
|
14
|
+
* - Lazy warmup: Indexes built on first dispatch
|
|
15
|
+
*
|
|
16
|
+
* @internal This service should not be used directly by users
|
|
17
|
+
*/
|
|
18
|
+
export declare class EventDispatchService implements ICoreService {
|
|
19
|
+
readonly serviceName = "EventDispatchService";
|
|
20
|
+
/**
|
|
21
|
+
* All registered event subscriptions
|
|
22
|
+
*/
|
|
23
|
+
private handlers;
|
|
24
|
+
/**
|
|
25
|
+
* Warmup state - lazy initialization on first dispatch
|
|
26
|
+
*/
|
|
27
|
+
private warmedUp;
|
|
28
|
+
/**
|
|
29
|
+
* Exact pattern cache for O(1) lookup
|
|
30
|
+
* Key: exact event pattern, Value: handlers for that pattern
|
|
31
|
+
*/
|
|
32
|
+
private exactMatches;
|
|
33
|
+
/**
|
|
34
|
+
* Wildcard patterns that need O(n) matching
|
|
35
|
+
*/
|
|
36
|
+
private wildcardPatterns;
|
|
37
|
+
/**
|
|
38
|
+
* Register a handler for an event pattern
|
|
39
|
+
*
|
|
40
|
+
* @param pattern - Event pattern (supports wildcards: 'user.*', '*.error')
|
|
41
|
+
* @param handler - Handler function to execute
|
|
42
|
+
* @param once - If true, handler will be removed after first execution
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* registerHandler('user.created', (eventName, data) => { ... });
|
|
46
|
+
* registerHandler('download.*', (eventName, data) => { ... });
|
|
47
|
+
*/
|
|
48
|
+
registerHandler(pattern: string, handler: EventHandler, once?: boolean): void;
|
|
49
|
+
/**
|
|
50
|
+
* Unregister a specific handler for a pattern
|
|
51
|
+
*
|
|
52
|
+
* @param pattern - Event pattern to unregister from
|
|
53
|
+
* @param handler - Handler function to remove
|
|
54
|
+
* @returns true if handler was found and removed, false otherwise
|
|
55
|
+
*/
|
|
56
|
+
unregisterHandler(pattern: string, handler: EventHandler): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Dispatch an event to all matching handlers
|
|
59
|
+
*
|
|
60
|
+
* Fire-and-forget pattern:
|
|
61
|
+
* - Returns immediately, doesn't wait for async handlers
|
|
62
|
+
* - Async handler errors are caught and logged
|
|
63
|
+
* - Handlers are isolated (one error doesn't affect others)
|
|
64
|
+
*
|
|
65
|
+
* @param eventName - Event name to dispatch
|
|
66
|
+
* @param data - Optional data to pass to handlers
|
|
67
|
+
* @returns true if any handler was called, false if no handlers matched
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* dispatch('user.created', { id: 123, name: 'John' }); // Returns true/false
|
|
71
|
+
*/
|
|
72
|
+
dispatch(eventName: string, data?: any): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Warmup - Build indexes for faster lookup
|
|
75
|
+
*
|
|
76
|
+
* Strategy (Hybrid):
|
|
77
|
+
* - Exact patterns → Map (O(1) lookup)
|
|
78
|
+
* - Wildcard patterns → Array (O(n) check needed)
|
|
79
|
+
*
|
|
80
|
+
* This is lazy initialization:
|
|
81
|
+
* - Called automatically on first dispatch
|
|
82
|
+
* - Invalidated when handlers change
|
|
83
|
+
*
|
|
84
|
+
* Performance:
|
|
85
|
+
* - Exact patterns: O(1) - Most common case
|
|
86
|
+
* - Wildcard patterns: O(n) - Less common, smaller n
|
|
87
|
+
*
|
|
88
|
+
* @private
|
|
89
|
+
*/
|
|
90
|
+
private warmup;
|
|
91
|
+
/**
|
|
92
|
+
* Get all registered handlers (for debugging/testing)
|
|
93
|
+
*
|
|
94
|
+
* @returns Array of all event subscriptions
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
getHandlers(): EventSubscription[];
|
|
98
|
+
/**
|
|
99
|
+
* Clear all registered handlers
|
|
100
|
+
*
|
|
101
|
+
* @internal Used for testing and cleanup
|
|
102
|
+
*/
|
|
103
|
+
clearHandlers(): void;
|
|
104
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { CoreService } from '../../ioc';
|
|
8
|
+
import { ICoreServiceNames } from '../../ioc';
|
|
9
|
+
import { matchesEventPattern } from './eventPatternMatcher';
|
|
10
|
+
/**
|
|
11
|
+
* @description Internal event dispatch service
|
|
12
|
+
* Handles pattern matching, storage, and dispatching of events
|
|
13
|
+
*
|
|
14
|
+
* Architecture:
|
|
15
|
+
* - EventEmitter (public API) → EventDispatchService (internal logic)
|
|
16
|
+
* - Similar to: AsenaWebSocketService → AsenaWebSocketServer
|
|
17
|
+
*
|
|
18
|
+
* Performance:
|
|
19
|
+
* - Exact patterns: O(1) lookup via Map
|
|
20
|
+
* - Wildcard patterns: O(n) check via Array
|
|
21
|
+
* - Lazy warmup: Indexes built on first dispatch
|
|
22
|
+
*
|
|
23
|
+
* @internal This service should not be used directly by users
|
|
24
|
+
*/
|
|
25
|
+
let EventDispatchService = class EventDispatchService {
|
|
26
|
+
serviceName = 'EventDispatchService';
|
|
27
|
+
/**
|
|
28
|
+
* All registered event subscriptions
|
|
29
|
+
*/
|
|
30
|
+
handlers = [];
|
|
31
|
+
/**
|
|
32
|
+
* Warmup state - lazy initialization on first dispatch
|
|
33
|
+
*/
|
|
34
|
+
warmedUp = false;
|
|
35
|
+
/**
|
|
36
|
+
* Exact pattern cache for O(1) lookup
|
|
37
|
+
* Key: exact event pattern, Value: handlers for that pattern
|
|
38
|
+
*/
|
|
39
|
+
exactMatches = new Map();
|
|
40
|
+
/**
|
|
41
|
+
* Wildcard patterns that need O(n) matching
|
|
42
|
+
*/
|
|
43
|
+
wildcardPatterns = [];
|
|
44
|
+
/**
|
|
45
|
+
* Register a handler for an event pattern
|
|
46
|
+
*
|
|
47
|
+
* @param pattern - Event pattern (supports wildcards: 'user.*', '*.error')
|
|
48
|
+
* @param handler - Handler function to execute
|
|
49
|
+
* @param once - If true, handler will be removed after first execution
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* registerHandler('user.created', (eventName, data) => { ... });
|
|
53
|
+
* registerHandler('download.*', (eventName, data) => { ... });
|
|
54
|
+
*/
|
|
55
|
+
registerHandler(pattern, handler, once = false) {
|
|
56
|
+
this.handlers.push({ pattern, handler, once });
|
|
57
|
+
// Invalidate warmup cache - will rebuild on next dispatch
|
|
58
|
+
this.warmedUp = false;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Unregister a specific handler for a pattern
|
|
62
|
+
*
|
|
63
|
+
* @param pattern - Event pattern to unregister from
|
|
64
|
+
* @param handler - Handler function to remove
|
|
65
|
+
* @returns true if handler was found and removed, false otherwise
|
|
66
|
+
*/
|
|
67
|
+
unregisterHandler(pattern, handler) {
|
|
68
|
+
const index = this.handlers.findIndex((sub) => sub.pattern === pattern && sub.handler === handler);
|
|
69
|
+
if (index !== -1) {
|
|
70
|
+
this.handlers.splice(index, 1);
|
|
71
|
+
// Invalidate warmup cache
|
|
72
|
+
this.warmedUp = false;
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Dispatch an event to all matching handlers
|
|
79
|
+
*
|
|
80
|
+
* Fire-and-forget pattern:
|
|
81
|
+
* - Returns immediately, doesn't wait for async handlers
|
|
82
|
+
* - Async handler errors are caught and logged
|
|
83
|
+
* - Handlers are isolated (one error doesn't affect others)
|
|
84
|
+
*
|
|
85
|
+
* @param eventName - Event name to dispatch
|
|
86
|
+
* @param data - Optional data to pass to handlers
|
|
87
|
+
* @returns true if any handler was called, false if no handlers matched
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* dispatch('user.created', { id: 123, name: 'John' }); // Returns true/false
|
|
91
|
+
*/
|
|
92
|
+
dispatch(eventName, data) {
|
|
93
|
+
// Lazy warmup - build indexes on first dispatch
|
|
94
|
+
if (!this.warmedUp) {
|
|
95
|
+
this.warmup();
|
|
96
|
+
}
|
|
97
|
+
const handlersToCall = [];
|
|
98
|
+
// 1. Check exact match cache - O(1)
|
|
99
|
+
const exactHandlers = this.exactMatches.get(eventName);
|
|
100
|
+
if (exactHandlers) {
|
|
101
|
+
for (const handler of exactHandlers) {
|
|
102
|
+
// Find full subscription info (for 'once' support)
|
|
103
|
+
const sub = this.handlers.find((s) => s.handler === handler && s.pattern === eventName);
|
|
104
|
+
if (sub) {
|
|
105
|
+
handlersToCall.push(sub);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// 2. Check wildcard patterns - O(n) but smaller n
|
|
110
|
+
for (const sub of this.wildcardPatterns) {
|
|
111
|
+
if (matchesEventPattern(eventName, sub.pattern)) {
|
|
112
|
+
handlersToCall.push(sub);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// 3. No handlers matched
|
|
116
|
+
if (handlersToCall.length === 0) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
// 4. Call all matching handlers (fire-and-forget, error isolation)
|
|
120
|
+
for (const sub of handlersToCall) {
|
|
121
|
+
try {
|
|
122
|
+
const result = sub.handler(eventName, data);
|
|
123
|
+
// Smart async detection: If Promise, handle errors but DON'T await
|
|
124
|
+
// Benchmark showed await Promise.resolve(syncHandler()) is 13x slower!
|
|
125
|
+
if (result instanceof Promise) {
|
|
126
|
+
result.catch((error) => {
|
|
127
|
+
console.error(`[EventDispatchService] Async error in handler for event "${eventName}":`, error);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
// Sync handler error - log but continue with other handlers
|
|
133
|
+
console.error(`[EventDispatchService] Sync error in handler for event "${eventName}":`, error);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// 5. Remove 'once' handlers
|
|
137
|
+
for (const sub of handlersToCall) {
|
|
138
|
+
if (sub.once) {
|
|
139
|
+
this.unregisterHandler(sub.pattern, sub.handler);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Warmup - Build indexes for faster lookup
|
|
146
|
+
*
|
|
147
|
+
* Strategy (Hybrid):
|
|
148
|
+
* - Exact patterns → Map (O(1) lookup)
|
|
149
|
+
* - Wildcard patterns → Array (O(n) check needed)
|
|
150
|
+
*
|
|
151
|
+
* This is lazy initialization:
|
|
152
|
+
* - Called automatically on first dispatch
|
|
153
|
+
* - Invalidated when handlers change
|
|
154
|
+
*
|
|
155
|
+
* Performance:
|
|
156
|
+
* - Exact patterns: O(1) - Most common case
|
|
157
|
+
* - Wildcard patterns: O(n) - Less common, smaller n
|
|
158
|
+
*
|
|
159
|
+
* @private
|
|
160
|
+
*/
|
|
161
|
+
warmup() {
|
|
162
|
+
this.exactMatches.clear();
|
|
163
|
+
this.wildcardPatterns = [];
|
|
164
|
+
for (const sub of this.handlers) {
|
|
165
|
+
if (sub.pattern.includes('*')) {
|
|
166
|
+
// Wildcard pattern - needs O(n) matching on dispatch
|
|
167
|
+
this.wildcardPatterns.push(sub);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
// Exact pattern - O(1) lookup on dispatch
|
|
171
|
+
const handlers = this.exactMatches.get(sub.pattern) || [];
|
|
172
|
+
handlers.push(sub.handler);
|
|
173
|
+
this.exactMatches.set(sub.pattern, handlers);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
this.warmedUp = true;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get all registered handlers (for debugging/testing)
|
|
180
|
+
*
|
|
181
|
+
* @returns Array of all event subscriptions
|
|
182
|
+
* @internal
|
|
183
|
+
*/
|
|
184
|
+
getHandlers() {
|
|
185
|
+
return [...this.handlers];
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Clear all registered handlers
|
|
189
|
+
*
|
|
190
|
+
* @internal Used for testing and cleanup
|
|
191
|
+
*/
|
|
192
|
+
clearHandlers() {
|
|
193
|
+
this.handlers = [];
|
|
194
|
+
this.exactMatches.clear();
|
|
195
|
+
this.wildcardPatterns = [];
|
|
196
|
+
this.warmedUp = false;
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
EventDispatchService = __decorate([
|
|
200
|
+
CoreService(ICoreServiceNames.EVENT_DISPATCH_SERVICE)
|
|
201
|
+
], EventDispatchService);
|
|
202
|
+
export { EventDispatchService };
|
|
203
|
+
//# sourceMappingURL=EventDispatchService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventDispatchService.js","sourceRoot":"","sources":["../../../../lib/server/event/EventDispatchService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { ICoreService } from '../../ioc';
|
|
2
|
+
/**
|
|
3
|
+
* @description Event Emitter - Public API for event-driven architecture
|
|
4
|
+
*
|
|
5
|
+
* Architecture:
|
|
6
|
+
* - EventEmitter (public API) → EventDispatchService (internal logic)
|
|
7
|
+
* - Similar pattern to: AsenaWebSocketService → AsenaWebSocketServer
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // In your code
|
|
12
|
+
* @Inject(emitter())
|
|
13
|
+
* private emitter!: EventEmitter;
|
|
14
|
+
*
|
|
15
|
+
* // Emit events
|
|
16
|
+
* this.emitter.emit('user.created', { id: 123, name: 'John' });
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* Event handlers are registered via decorators:
|
|
20
|
+
* ```typescript
|
|
21
|
+
* @EventService({ prefix: 'user' })
|
|
22
|
+
* export class UserEventService {
|
|
23
|
+
* @On('created')
|
|
24
|
+
* handleUserCreated(eventName: string, data: any) {
|
|
25
|
+
* // Handle event
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* Fire-and-Forget Pattern:
|
|
31
|
+
* - emit() returns immediately (doesn't wait for handlers)
|
|
32
|
+
* - Async handlers are executed without blocking
|
|
33
|
+
* - Handler errors are isolated and logged
|
|
34
|
+
*
|
|
35
|
+
* @see EventDispatchService for internal implementation details
|
|
36
|
+
*/
|
|
37
|
+
export declare class EventEmitter implements ICoreService {
|
|
38
|
+
readonly serviceName = "EventEmitter";
|
|
39
|
+
private dispatcher;
|
|
40
|
+
/**
|
|
41
|
+
* Emit an event to all registered handlers
|
|
42
|
+
*
|
|
43
|
+
* Fire-and-forget pattern (Spring style):
|
|
44
|
+
* - Returns immediately without waiting for handlers
|
|
45
|
+
* - Async handlers execute in background
|
|
46
|
+
* - Handler errors are caught and logged
|
|
47
|
+
*
|
|
48
|
+
* @param eventName - Event name to emit (e.g., 'user.created', 'download.complete')
|
|
49
|
+
* @param data - Optional data to pass to handlers
|
|
50
|
+
* @returns true if any handler was called, false if no handlers matched
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* // Emit event with data
|
|
54
|
+
* const success = this.emitter.emit('user.created', { id: 123, name: 'John' });
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* // Emit event without data
|
|
58
|
+
* this.emitter.emit('app.started');
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* // Check if event was handled
|
|
62
|
+
* if (!this.emitter.emit('user.created', data)) {
|
|
63
|
+
* console.warn('No handlers registered for user.created event');
|
|
64
|
+
* }
|
|
65
|
+
*/
|
|
66
|
+
emit(eventName: string, data?: any): boolean;
|
|
67
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { CoreService, ICoreServiceNames } from '../../ioc';
|
|
11
|
+
import { Inject } from '../../ioc/component';
|
|
12
|
+
/**
|
|
13
|
+
* @description Event Emitter - Public API for event-driven architecture
|
|
14
|
+
*
|
|
15
|
+
* Architecture:
|
|
16
|
+
* - EventEmitter (public API) → EventDispatchService (internal logic)
|
|
17
|
+
* - Similar pattern to: AsenaWebSocketService → AsenaWebSocketServer
|
|
18
|
+
*
|
|
19
|
+
* Usage:
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // In your code
|
|
22
|
+
* @Inject(emitter())
|
|
23
|
+
* private emitter!: EventEmitter;
|
|
24
|
+
*
|
|
25
|
+
* // Emit events
|
|
26
|
+
* this.emitter.emit('user.created', { id: 123, name: 'John' });
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* Event handlers are registered via decorators:
|
|
30
|
+
* ```typescript
|
|
31
|
+
* @EventService({ prefix: 'user' })
|
|
32
|
+
* export class UserEventService {
|
|
33
|
+
* @On('created')
|
|
34
|
+
* handleUserCreated(eventName: string, data: any) {
|
|
35
|
+
* // Handle event
|
|
36
|
+
* }
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* Fire-and-Forget Pattern:
|
|
41
|
+
* - emit() returns immediately (doesn't wait for handlers)
|
|
42
|
+
* - Async handlers are executed without blocking
|
|
43
|
+
* - Handler errors are isolated and logged
|
|
44
|
+
*
|
|
45
|
+
* @see EventDispatchService for internal implementation details
|
|
46
|
+
*/
|
|
47
|
+
let EventEmitter = class EventEmitter {
|
|
48
|
+
serviceName = 'EventEmitter';
|
|
49
|
+
dispatcher;
|
|
50
|
+
/**
|
|
51
|
+
* Emit an event to all registered handlers
|
|
52
|
+
*
|
|
53
|
+
* Fire-and-forget pattern (Spring style):
|
|
54
|
+
* - Returns immediately without waiting for handlers
|
|
55
|
+
* - Async handlers execute in background
|
|
56
|
+
* - Handler errors are caught and logged
|
|
57
|
+
*
|
|
58
|
+
* @param eventName - Event name to emit (e.g., 'user.created', 'download.complete')
|
|
59
|
+
* @param data - Optional data to pass to handlers
|
|
60
|
+
* @returns true if any handler was called, false if no handlers matched
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* // Emit event with data
|
|
64
|
+
* const success = this.emitter.emit('user.created', { id: 123, name: 'John' });
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* // Emit event without data
|
|
68
|
+
* this.emitter.emit('app.started');
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* // Check if event was handled
|
|
72
|
+
* if (!this.emitter.emit('user.created', data)) {
|
|
73
|
+
* console.warn('No handlers registered for user.created event');
|
|
74
|
+
* }
|
|
75
|
+
*/
|
|
76
|
+
emit(eventName, data) {
|
|
77
|
+
return this.dispatcher.dispatch(eventName, data);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
__decorate([
|
|
81
|
+
Inject(ICoreServiceNames.EVENT_DISPATCH_SERVICE),
|
|
82
|
+
__metadata("design:type", Function)
|
|
83
|
+
], EventEmitter.prototype, "dispatcher", void 0);
|
|
84
|
+
EventEmitter = __decorate([
|
|
85
|
+
CoreService(ICoreServiceNames.EVENT_EMITTER)
|
|
86
|
+
], EventEmitter);
|
|
87
|
+
export { EventEmitter };
|
|
88
|
+
//# sourceMappingURL=EventEmitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../../../../lib/server/event/EventEmitter.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAY;IACP,WAAW,GAAG,cAAc,CAAC;IAGrC,UAAU,CAAwB;IAE1C;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACI,IAAI,CAAC,SAAiB,EAAE,IAAU;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC;CACF,CAAA;AA/BS;IADP,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,CAAC;;gDACP;AAJ/B,YAAY;IADxB,WAAW,CAAC,iBAAiB,CAAC,aAAa,CAAC;GAChC,YAAY,CAmCxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventService.js","sourceRoot":"","sources":["../../../../lib/server/event/EventService.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,iBAAiB;CAAG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { OnParams } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* @description On decorator - Marks a method as an event handler
|
|
4
|
+
*
|
|
5
|
+
* Methods decorated with @On will be automatically registered when
|
|
6
|
+
* the event system boots up (via PrepareEventService).
|
|
7
|
+
*
|
|
8
|
+
* @param params - Event pattern or configuration object
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* @EventService({ prefix: 'user' })
|
|
12
|
+
* export class UserEventService {
|
|
13
|
+
* @On('created') // Handles 'user.created'
|
|
14
|
+
* handleCreated(eventName: string, data: any) {
|
|
15
|
+
* console.log('User created:', data);
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* @On('*.updated') // Handles 'user.*.updated'
|
|
19
|
+
* handleUpdated(eventName: string, data: any) { }
|
|
20
|
+
*
|
|
21
|
+
* @On({ event: 'deleted', skip: true }) // Temporarily disabled
|
|
22
|
+
* handleDeleted(eventName: string, data: any) { }
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // Without prefix (absolute pattern)
|
|
27
|
+
* @EventService()
|
|
28
|
+
* export class GlobalEventService {
|
|
29
|
+
* @On('*') // Handles ALL events
|
|
30
|
+
* handleAll(eventName: string, data: any) {
|
|
31
|
+
* console.log('Event:', eventName);
|
|
32
|
+
* }
|
|
33
|
+
*
|
|
34
|
+
* @On('*.error') // Handles all error events
|
|
35
|
+
* handleErrors(eventName: string, data: any) { }
|
|
36
|
+
* }
|
|
37
|
+
*/
|
|
38
|
+
export declare function On(params: OnParams | string): MethodDecorator;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ComponentConstants } from '../../../ioc';
|
|
2
|
+
import { defineTypedMetadata, getOwnTypedMetadata } from '../../../utils';
|
|
3
|
+
/**
|
|
4
|
+
* @description On decorator - Marks a method as an event handler
|
|
5
|
+
*
|
|
6
|
+
* Methods decorated with @On will be automatically registered when
|
|
7
|
+
* the event system boots up (via PrepareEventService).
|
|
8
|
+
*
|
|
9
|
+
* @param params - Event pattern or configuration object
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* @EventService({ prefix: 'user' })
|
|
13
|
+
* export class UserEventService {
|
|
14
|
+
* @On('created') // Handles 'user.created'
|
|
15
|
+
* handleCreated(eventName: string, data: any) {
|
|
16
|
+
* console.log('User created:', data);
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* @On('*.updated') // Handles 'user.*.updated'
|
|
20
|
+
* handleUpdated(eventName: string, data: any) { }
|
|
21
|
+
*
|
|
22
|
+
* @On({ event: 'deleted', skip: true }) // Temporarily disabled
|
|
23
|
+
* handleDeleted(eventName: string, data: any) { }
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* // Without prefix (absolute pattern)
|
|
28
|
+
* @EventService()
|
|
29
|
+
* export class GlobalEventService {
|
|
30
|
+
* @On('*') // Handles ALL events
|
|
31
|
+
* handleAll(eventName: string, data: any) {
|
|
32
|
+
* console.log('Event:', eventName);
|
|
33
|
+
* }
|
|
34
|
+
*
|
|
35
|
+
* @On('*.error') // Handles all error events
|
|
36
|
+
* handleErrors(eventName: string, data: any) { }
|
|
37
|
+
* }
|
|
38
|
+
*/
|
|
39
|
+
export function On(params) {
|
|
40
|
+
// Normalize params - support both object and string
|
|
41
|
+
const _params = typeof params === 'string' ? { event: params, skip: false } : params;
|
|
42
|
+
return function (target, propertyKey, descriptor) {
|
|
43
|
+
// Get existing handlers metadata (other @On methods)
|
|
44
|
+
const handlers = getOwnTypedMetadata(ComponentConstants.EventHandlersKey, target.constructor) || {};
|
|
45
|
+
// Add this handler's metadata
|
|
46
|
+
handlers[propertyKey.toString()] = {
|
|
47
|
+
pattern: _params.event,
|
|
48
|
+
methodName: propertyKey.toString(),
|
|
49
|
+
skip: _params.skip || false,
|
|
50
|
+
};
|
|
51
|
+
// Store updated metadata
|
|
52
|
+
defineTypedMetadata(ComponentConstants.EventHandlersKey, handlers, target.constructor);
|
|
53
|
+
return descriptor;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=On.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"On.js","sourceRoot":"","sources":["../../../../../lib/server/event/decorators/On.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,UAAU,EAAE,CAAC,MAAyB;IAC1C,oDAAoD;IACpD,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAErF,OAAO,UAAU,MAAc,EAAE,WAA4B,EAAE,UAA8B;QAC3F,qDAAqD;QACrD,MAAM,QAAQ,GACZ,mBAAmB,CACjB,kBAAkB,CAAC,gBAAgB,EACnC,MAAM,CAAC,WAAW,CACnB,IAAI,EAAE,CAAC;QAEV,8BAA8B;QAC9B,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,GAAG;YACjC,OAAO,EAAE,OAAO,CAAC,KAAK;YACtB,UAAU,EAAE,WAAW,CAAC,QAAQ,EAAE;YAClC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;SAC5B,CAAC;QAEF,yBAAyB;QACzB,mBAAmB,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEvF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './On';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/server/event/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Utility for injecting EventEmitter
|
|
3
|
+
*
|
|
4
|
+
* Returns the EventEmitter service key for use with @Inject decorator.
|
|
5
|
+
*
|
|
6
|
+
* @returns The EventEmitter service key
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* @Service()
|
|
11
|
+
* export class UserService {
|
|
12
|
+
* @Inject(emitter())
|
|
13
|
+
* private emitter!: EventEmitter;
|
|
14
|
+
*
|
|
15
|
+
* createUser(name: string) {
|
|
16
|
+
* this.emitter.emit('user.created', { name });
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function emitter(): string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ICoreServiceNames } from '../../ioc';
|
|
2
|
+
/**
|
|
3
|
+
* @description Utility for injecting EventEmitter
|
|
4
|
+
*
|
|
5
|
+
* Returns the EventEmitter service key for use with @Inject decorator.
|
|
6
|
+
*
|
|
7
|
+
* @returns The EventEmitter service key
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* @Service()
|
|
12
|
+
* export class UserService {
|
|
13
|
+
* @Inject(emitter())
|
|
14
|
+
* private emitter!: EventEmitter;
|
|
15
|
+
*
|
|
16
|
+
* createUser(name: string) {
|
|
17
|
+
* this.emitter.emit('user.created', { name });
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function emitter() {
|
|
23
|
+
return ICoreServiceNames.EVENT_EMITTER;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../../lib/server/event/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,OAAO;IACrB,OAAO,iBAAiB,CAAC,aAAa,CAAC;AACzC,CAAC"}
|