@orchestr-sh/orchestr 1.6.1 → 1.7.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.
- package/README.md +289 -22
- package/dist/Console/Commands/EventCacheCommand.d.ts +15 -0
- package/dist/Console/Commands/EventCacheCommand.d.ts.map +1 -0
- package/dist/Console/Commands/EventCacheCommand.js +99 -0
- package/dist/Console/Commands/EventCacheCommand.js.map +1 -0
- package/dist/Console/Commands/EventClearCommand.d.ts +15 -0
- package/dist/Console/Commands/EventClearCommand.d.ts.map +1 -0
- package/dist/Console/Commands/EventClearCommand.js +71 -0
- package/dist/Console/Commands/EventClearCommand.js.map +1 -0
- package/dist/Console/Commands/EventListCommand.d.ts +19 -0
- package/dist/Console/Commands/EventListCommand.d.ts.map +1 -0
- package/dist/Console/Commands/EventListCommand.js +106 -0
- package/dist/Console/Commands/EventListCommand.js.map +1 -0
- package/dist/Console/Commands/MakeEventCommand.d.ts +27 -0
- package/dist/Console/Commands/MakeEventCommand.d.ts.map +1 -0
- package/dist/Console/Commands/MakeEventCommand.js +117 -0
- package/dist/Console/Commands/MakeEventCommand.js.map +1 -0
- package/dist/Console/Commands/MakeListenerCommand.d.ts +27 -0
- package/dist/Console/Commands/MakeListenerCommand.d.ts.map +1 -0
- package/dist/Console/Commands/MakeListenerCommand.js +157 -0
- package/dist/Console/Commands/MakeListenerCommand.js.map +1 -0
- package/dist/Console/orchestr.js +10 -0
- package/dist/Console/orchestr.js.map +1 -1
- package/dist/Contracts/Events/Dispatcher.d.ts +94 -0
- package/dist/Contracts/Events/Dispatcher.d.ts.map +1 -0
- package/dist/Contracts/Events/Dispatcher.js +9 -0
- package/dist/Contracts/Events/Dispatcher.js.map +1 -0
- package/dist/Contracts/Events/index.d.ts +7 -0
- package/dist/Contracts/Events/index.d.ts.map +1 -0
- package/dist/Contracts/Events/index.js +8 -0
- package/dist/Contracts/Events/index.js.map +1 -0
- package/dist/Database/Ensemble/Ensemble.d.ts +7 -0
- package/dist/Database/Ensemble/Ensemble.d.ts.map +1 -1
- package/dist/Database/Ensemble/Ensemble.js +119 -0
- package/dist/Database/Ensemble/Ensemble.js.map +1 -1
- package/dist/Database/Ensemble/EnsembleBuilder.d.ts.map +1 -1
- package/dist/Database/Ensemble/EnsembleBuilder.js +7 -0
- package/dist/Database/Ensemble/EnsembleBuilder.js.map +1 -1
- package/dist/Database/Ensemble/Events/ModelCreated.d.ts +11 -0
- package/dist/Database/Ensemble/Events/ModelCreated.d.ts.map +1 -0
- package/dist/Database/Ensemble/Events/ModelCreated.js +16 -0
- package/dist/Database/Ensemble/Events/ModelCreated.js.map +1 -0
- package/dist/Database/Ensemble/Events/ModelCreating.d.ts +12 -0
- package/dist/Database/Ensemble/Events/ModelCreating.d.ts.map +1 -0
- package/dist/Database/Ensemble/Events/ModelCreating.js +17 -0
- package/dist/Database/Ensemble/Events/ModelCreating.js.map +1 -0
- package/dist/Database/Ensemble/Events/ModelDeleted.d.ts +11 -0
- package/dist/Database/Ensemble/Events/ModelDeleted.d.ts.map +1 -0
- package/dist/Database/Ensemble/Events/ModelDeleted.js +16 -0
- package/dist/Database/Ensemble/Events/ModelDeleted.js.map +1 -0
- package/dist/Database/Ensemble/Events/ModelDeleting.d.ts +12 -0
- package/dist/Database/Ensemble/Events/ModelDeleting.d.ts.map +1 -0
- package/dist/Database/Ensemble/Events/ModelDeleting.js +17 -0
- package/dist/Database/Ensemble/Events/ModelDeleting.js.map +1 -0
- package/dist/Database/Ensemble/Events/ModelEvent.d.ts +17 -0
- package/dist/Database/Ensemble/Events/ModelEvent.d.ts.map +1 -0
- package/dist/Database/Ensemble/Events/ModelEvent.js +22 -0
- package/dist/Database/Ensemble/Events/ModelEvent.js.map +1 -0
- package/dist/Database/Ensemble/Events/ModelRetrieved.d.ts +11 -0
- package/dist/Database/Ensemble/Events/ModelRetrieved.d.ts.map +1 -0
- package/dist/Database/Ensemble/Events/ModelRetrieved.js +16 -0
- package/dist/Database/Ensemble/Events/ModelRetrieved.js.map +1 -0
- package/dist/Database/Ensemble/Events/ModelSaved.d.ts +11 -0
- package/dist/Database/Ensemble/Events/ModelSaved.d.ts.map +1 -0
- package/dist/Database/Ensemble/Events/ModelSaved.js +16 -0
- package/dist/Database/Ensemble/Events/ModelSaved.js.map +1 -0
- package/dist/Database/Ensemble/Events/ModelSaving.d.ts +12 -0
- package/dist/Database/Ensemble/Events/ModelSaving.d.ts.map +1 -0
- package/dist/Database/Ensemble/Events/ModelSaving.js +17 -0
- package/dist/Database/Ensemble/Events/ModelSaving.js.map +1 -0
- package/dist/Database/Ensemble/Events/ModelUpdated.d.ts +11 -0
- package/dist/Database/Ensemble/Events/ModelUpdated.d.ts.map +1 -0
- package/dist/Database/Ensemble/Events/ModelUpdated.js +16 -0
- package/dist/Database/Ensemble/Events/ModelUpdated.js.map +1 -0
- package/dist/Database/Ensemble/Events/ModelUpdating.d.ts +12 -0
- package/dist/Database/Ensemble/Events/ModelUpdating.d.ts.map +1 -0
- package/dist/Database/Ensemble/Events/ModelUpdating.js +17 -0
- package/dist/Database/Ensemble/Events/ModelUpdating.js.map +1 -0
- package/dist/Database/Ensemble/Events/index.d.ts +16 -0
- package/dist/Database/Ensemble/Events/index.d.ts.map +1 -0
- package/dist/Database/Ensemble/Events/index.js +29 -0
- package/dist/Database/Ensemble/Events/index.js.map +1 -0
- package/dist/Events/Concerns/Dispatchable.d.ts +121 -0
- package/dist/Events/Concerns/Dispatchable.d.ts.map +1 -0
- package/dist/Events/Concerns/Dispatchable.js +165 -0
- package/dist/Events/Concerns/Dispatchable.js.map +1 -0
- package/dist/Events/Contracts/Dispatcher.d.ts +144 -0
- package/dist/Events/Contracts/Dispatcher.d.ts.map +1 -0
- package/dist/Events/Contracts/Dispatcher.js +3 -0
- package/dist/Events/Contracts/Dispatcher.js.map +1 -0
- package/dist/Events/Contracts/ShouldDispatchAfterCommit.d.ts +21 -0
- package/dist/Events/Contracts/ShouldDispatchAfterCommit.d.ts.map +1 -0
- package/dist/Events/Contracts/ShouldDispatchAfterCommit.js +3 -0
- package/dist/Events/Contracts/ShouldDispatchAfterCommit.js.map +1 -0
- package/dist/Events/Decorators/HandlesEvents.d.ts +83 -0
- package/dist/Events/Decorators/HandlesEvents.d.ts.map +1 -0
- package/dist/Events/Decorators/HandlesEvents.js +105 -0
- package/dist/Events/Decorators/HandlesEvents.js.map +1 -0
- package/dist/Events/Dispatcher.d.ts +201 -0
- package/dist/Events/Dispatcher.d.ts.map +1 -0
- package/dist/Events/Dispatcher.js +359 -0
- package/dist/Events/Dispatcher.js.map +1 -0
- package/dist/Events/Event.d.ts +164 -0
- package/dist/Events/Event.d.ts.map +1 -0
- package/dist/Events/Event.js +266 -0
- package/dist/Events/Event.js.map +1 -0
- package/dist/Events/EventDiscoveryCache.d.ts +205 -0
- package/dist/Events/EventDiscoveryCache.d.ts.map +1 -0
- package/dist/Events/EventDiscoveryCache.js +310 -0
- package/dist/Events/EventDiscoveryCache.js.map +1 -0
- package/dist/Events/EventServiceProvider.d.ts +148 -0
- package/dist/Events/EventServiceProvider.d.ts.map +1 -0
- package/dist/Events/EventServiceProvider.js +258 -0
- package/dist/Events/EventServiceProvider.js.map +1 -0
- package/dist/Events/NullDispatcher.d.ts +97 -0
- package/dist/Events/NullDispatcher.d.ts.map +1 -0
- package/dist/Events/NullDispatcher.js +118 -0
- package/dist/Events/NullDispatcher.js.map +1 -0
- package/dist/Events/PendingDispatch.d.ts +119 -0
- package/dist/Events/PendingDispatch.d.ts.map +1 -0
- package/dist/Events/PendingDispatch.js +162 -0
- package/dist/Events/PendingDispatch.js.map +1 -0
- package/dist/Events/index.d.ts +13 -0
- package/dist/Events/index.d.ts.map +1 -0
- package/dist/Events/index.js +20 -0
- package/dist/Events/index.js.map +1 -0
- package/dist/Events/types.d.ts +77 -0
- package/dist/Events/types.d.ts.map +1 -0
- package/dist/Events/types.js +3 -0
- package/dist/Events/types.js.map +1 -0
- package/dist/Facades/Event.d.ts +200 -0
- package/dist/Facades/Event.d.ts.map +1 -0
- package/dist/Facades/Event.js +331 -0
- package/dist/Facades/Event.js.map +1 -0
- package/dist/Foundation/Application.d.ts +33 -0
- package/dist/Foundation/Application.d.ts.map +1 -1
- package/dist/Foundation/Application.js +40 -0
- package/dist/Foundation/Application.js.map +1 -1
- package/dist/Listeners/Contracts/ShouldQueue.d.ts +142 -0
- package/dist/Listeners/Contracts/ShouldQueue.d.ts.map +1 -0
- package/dist/Listeners/Contracts/ShouldQueue.js +20 -0
- package/dist/Listeners/Contracts/ShouldQueue.js.map +1 -0
- package/dist/Listeners/Contracts/ShouldQueueAfterCommit.d.ts +24 -0
- package/dist/Listeners/Contracts/ShouldQueueAfterCommit.d.ts.map +1 -0
- package/dist/Listeners/Contracts/ShouldQueueAfterCommit.js +3 -0
- package/dist/Listeners/Contracts/ShouldQueueAfterCommit.js.map +1 -0
- package/dist/Support/EventDiscovery.d.ts +142 -0
- package/dist/Support/EventDiscovery.d.ts.map +1 -0
- package/dist/Support/EventDiscovery.js +302 -0
- package/dist/Support/EventDiscovery.js.map +1 -0
- package/dist/Support/Testing/Fakes/EventFake.d.ts +291 -0
- package/dist/Support/Testing/Fakes/EventFake.d.ts.map +1 -0
- package/dist/Support/Testing/Fakes/EventFake.js +444 -0
- package/dist/Support/Testing/Fakes/EventFake.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
/**
|
|
3
|
+
* HandlesEvents Decorator
|
|
4
|
+
*
|
|
5
|
+
* Decorator to explicitly specify which events a listener handles.
|
|
6
|
+
* This is particularly useful for:
|
|
7
|
+
* - Union types (TypeScript can't reflect union type information at runtime)
|
|
8
|
+
* - Multiple events handled by a single listener
|
|
9
|
+
* - Clarifying listener behavior
|
|
10
|
+
*
|
|
11
|
+
* The decorator stores the event types in metadata that can be read by
|
|
12
|
+
* the EventDiscovery system during listener scanning.
|
|
13
|
+
*
|
|
14
|
+
* @param events Array of event class constructors this listener handles
|
|
15
|
+
* @returns Class decorator function
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { HandlesEvents } from '@orchestr/Events/Decorators/HandlesEvents'
|
|
20
|
+
* import { UserRegistered } from '../Events/UserRegistered'
|
|
21
|
+
* import { UserUpdated } from '../Events/UserUpdated'
|
|
22
|
+
*
|
|
23
|
+
* // Single event
|
|
24
|
+
* @HandlesEvents([UserRegistered])
|
|
25
|
+
* class SendWelcomeEmail {
|
|
26
|
+
* handle(event: UserRegistered) {
|
|
27
|
+
* // Send welcome email
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
*
|
|
31
|
+
* // Multiple events (union type)
|
|
32
|
+
* @HandlesEvents([UserRegistered, UserUpdated])
|
|
33
|
+
* class UserNotificationListener {
|
|
34
|
+
* handle(event: UserRegistered | UserUpdated) {
|
|
35
|
+
* if (event instanceof UserRegistered) {
|
|
36
|
+
* // Handle registration
|
|
37
|
+
* } else {
|
|
38
|
+
* // Handle update
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* }
|
|
42
|
+
*
|
|
43
|
+
* // With ShouldQueue
|
|
44
|
+
* @HandlesEvents([OrderPlaced])
|
|
45
|
+
* class ProcessOrderListener implements ShouldQueue {
|
|
46
|
+
* public queue = 'orders'
|
|
47
|
+
*
|
|
48
|
+
* async handle(event: OrderPlaced) {
|
|
49
|
+
* // Process order
|
|
50
|
+
* }
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function HandlesEvents(events: Function[]): ClassDecorator;
|
|
55
|
+
/**
|
|
56
|
+
* Type guard to check if a class has the HandlesEvents decorator
|
|
57
|
+
*
|
|
58
|
+
* @param target Class to check
|
|
59
|
+
* @returns True if class has HandlesEvents metadata
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* if (hasHandlesEventsMetadata(MyListener)) {
|
|
64
|
+
* const events = getHandledEvents(MyListener)
|
|
65
|
+
* console.log('Listener handles:', events)
|
|
66
|
+
* }
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function hasHandlesEventsMetadata(target: any): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Get the event types from a listener class decorated with @HandlesEvents
|
|
72
|
+
*
|
|
73
|
+
* @param target Listener class constructor
|
|
74
|
+
* @returns Array of event class constructors, or empty array if not decorated
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const events = getHandledEvents(SendWelcomeEmail)
|
|
79
|
+
* // Returns: [UserRegistered]
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare function getHandledEvents(target: any): Function[];
|
|
83
|
+
//# sourceMappingURL=HandlesEvents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HandlesEvents.d.ts","sourceRoot":"","sources":["../../../src/Events/Decorators/HandlesEvents.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAQhE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAK7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,QAAQ,EAAE,CAMxD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HandlesEvents = HandlesEvents;
|
|
4
|
+
exports.hasHandlesEventsMetadata = hasHandlesEventsMetadata;
|
|
5
|
+
exports.getHandledEvents = getHandledEvents;
|
|
6
|
+
require("reflect-metadata");
|
|
7
|
+
/**
|
|
8
|
+
* HandlesEvents Decorator
|
|
9
|
+
*
|
|
10
|
+
* Decorator to explicitly specify which events a listener handles.
|
|
11
|
+
* This is particularly useful for:
|
|
12
|
+
* - Union types (TypeScript can't reflect union type information at runtime)
|
|
13
|
+
* - Multiple events handled by a single listener
|
|
14
|
+
* - Clarifying listener behavior
|
|
15
|
+
*
|
|
16
|
+
* The decorator stores the event types in metadata that can be read by
|
|
17
|
+
* the EventDiscovery system during listener scanning.
|
|
18
|
+
*
|
|
19
|
+
* @param events Array of event class constructors this listener handles
|
|
20
|
+
* @returns Class decorator function
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* import { HandlesEvents } from '@orchestr/Events/Decorators/HandlesEvents'
|
|
25
|
+
* import { UserRegistered } from '../Events/UserRegistered'
|
|
26
|
+
* import { UserUpdated } from '../Events/UserUpdated'
|
|
27
|
+
*
|
|
28
|
+
* // Single event
|
|
29
|
+
* @HandlesEvents([UserRegistered])
|
|
30
|
+
* class SendWelcomeEmail {
|
|
31
|
+
* handle(event: UserRegistered) {
|
|
32
|
+
* // Send welcome email
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
*
|
|
36
|
+
* // Multiple events (union type)
|
|
37
|
+
* @HandlesEvents([UserRegistered, UserUpdated])
|
|
38
|
+
* class UserNotificationListener {
|
|
39
|
+
* handle(event: UserRegistered | UserUpdated) {
|
|
40
|
+
* if (event instanceof UserRegistered) {
|
|
41
|
+
* // Handle registration
|
|
42
|
+
* } else {
|
|
43
|
+
* // Handle update
|
|
44
|
+
* }
|
|
45
|
+
* }
|
|
46
|
+
* }
|
|
47
|
+
*
|
|
48
|
+
* // With ShouldQueue
|
|
49
|
+
* @HandlesEvents([OrderPlaced])
|
|
50
|
+
* class ProcessOrderListener implements ShouldQueue {
|
|
51
|
+
* public queue = 'orders'
|
|
52
|
+
*
|
|
53
|
+
* async handle(event: OrderPlaced) {
|
|
54
|
+
* // Process order
|
|
55
|
+
* }
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
function HandlesEvents(events) {
|
|
60
|
+
return function (target) {
|
|
61
|
+
// Store event types in metadata
|
|
62
|
+
// This metadata is read by EventDiscovery.extractEventTypes()
|
|
63
|
+
Reflect.defineMetadata('event:types', events, target);
|
|
64
|
+
return target;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Type guard to check if a class has the HandlesEvents decorator
|
|
69
|
+
*
|
|
70
|
+
* @param target Class to check
|
|
71
|
+
* @returns True if class has HandlesEvents metadata
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* if (hasHandlesEventsMetadata(MyListener)) {
|
|
76
|
+
* const events = getHandledEvents(MyListener)
|
|
77
|
+
* console.log('Listener handles:', events)
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
function hasHandlesEventsMetadata(target) {
|
|
82
|
+
if (typeof target !== 'function')
|
|
83
|
+
return false;
|
|
84
|
+
const metadata = Reflect.getMetadata('event:types', target);
|
|
85
|
+
return metadata !== undefined && Array.isArray(metadata);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get the event types from a listener class decorated with @HandlesEvents
|
|
89
|
+
*
|
|
90
|
+
* @param target Listener class constructor
|
|
91
|
+
* @returns Array of event class constructors, or empty array if not decorated
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const events = getHandledEvents(SendWelcomeEmail)
|
|
96
|
+
* // Returns: [UserRegistered]
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
function getHandledEvents(target) {
|
|
100
|
+
if (!hasHandlesEventsMetadata(target)) {
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
return Reflect.getMetadata('event:types', target) || [];
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=HandlesEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HandlesEvents.js","sourceRoot":"","sources":["../../../src/Events/Decorators/HandlesEvents.ts"],"names":[],"mappings":";;AAsDA,sCAQC;AAgBD,4DAKC;AAcD,4CAMC;AAvGD,4BAA0B;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,SAAgB,aAAa,CAAC,MAAkB;IAC9C,OAAO,UAAU,MAAW;QAC1B,gCAAgC;QAChC,8DAA8D;QAC9D,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEtD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,wBAAwB,CAAC,MAAW;IAClD,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAE/C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC5D,OAAO,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,gBAAgB,CAAC,MAAW;IAC1C,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import type { Container } from '../Container/Container';
|
|
2
|
+
import type { DispatcherContract } from './Contracts/Dispatcher';
|
|
3
|
+
import type { Event } from './Event';
|
|
4
|
+
import type { EventListener, EventSubscriber } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Event Dispatcher
|
|
7
|
+
*
|
|
8
|
+
* The core event dispatcher implementation. Manages event listeners,
|
|
9
|
+
* handles wildcard patterns, and dispatches events to registered listeners.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const dispatcher = new Dispatcher(container);
|
|
14
|
+
*
|
|
15
|
+
* // Register listeners
|
|
16
|
+
* dispatcher.listen('user.registered', SendWelcomeEmail);
|
|
17
|
+
* dispatcher.listen('user.*', LogUserActivity);
|
|
18
|
+
*
|
|
19
|
+
* // Dispatch events
|
|
20
|
+
* dispatcher.dispatch(new UserRegistered(user));
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare class Dispatcher implements DispatcherContract {
|
|
24
|
+
protected container: Container;
|
|
25
|
+
/**
|
|
26
|
+
* Registered event listeners (direct event name matches)
|
|
27
|
+
*/
|
|
28
|
+
protected listeners: Map<string, EventListener[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Wildcard event listeners (patterns like 'user.*')
|
|
31
|
+
*/
|
|
32
|
+
protected wildcards: Map<string, EventListener[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Queued events waiting to be flushed
|
|
35
|
+
*/
|
|
36
|
+
protected queuedEvents: Map<string, Array<{
|
|
37
|
+
payload: any[];
|
|
38
|
+
}>>;
|
|
39
|
+
/**
|
|
40
|
+
* Create a new event dispatcher
|
|
41
|
+
*
|
|
42
|
+
* @param container - The service container for resolving listeners
|
|
43
|
+
*/
|
|
44
|
+
constructor(container: Container);
|
|
45
|
+
/**
|
|
46
|
+
* Register an event listener
|
|
47
|
+
*
|
|
48
|
+
* Supports single events, multiple events, and wildcard patterns
|
|
49
|
+
*
|
|
50
|
+
* @param events - Event name(s) to listen for
|
|
51
|
+
* @param listener - Listener to invoke when event is dispatched
|
|
52
|
+
*/
|
|
53
|
+
listen(events: string | string[], listener: EventListener): void;
|
|
54
|
+
/**
|
|
55
|
+
* Check if an event has any listeners
|
|
56
|
+
*
|
|
57
|
+
* Checks both direct listeners and wildcard matches
|
|
58
|
+
*
|
|
59
|
+
* @param eventName - The event name to check
|
|
60
|
+
* @returns True if the event has listeners
|
|
61
|
+
*/
|
|
62
|
+
hasListeners(eventName: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Register an event subscriber
|
|
65
|
+
*
|
|
66
|
+
* Subscribers can register multiple event listeners at once
|
|
67
|
+
*
|
|
68
|
+
* @param subscriber - The subscriber instance
|
|
69
|
+
*/
|
|
70
|
+
subscribe(subscriber: EventSubscriber): void;
|
|
71
|
+
/**
|
|
72
|
+
* Dispatch an event to all listeners
|
|
73
|
+
*
|
|
74
|
+
* @param event - Event name or instance
|
|
75
|
+
* @param payload - Additional arguments to pass to listeners
|
|
76
|
+
* @param halt - Stop dispatching if a listener returns false
|
|
77
|
+
* @returns Array of results from listeners
|
|
78
|
+
*/
|
|
79
|
+
dispatch(event: string | Event, payload?: any[], halt?: boolean): any[];
|
|
80
|
+
/**
|
|
81
|
+
* Dispatch an event until a listener returns a non-null response
|
|
82
|
+
*
|
|
83
|
+
* @param event - Event name or instance
|
|
84
|
+
* @param payload - Additional arguments to pass to listeners
|
|
85
|
+
* @returns The first non-null response from a listener
|
|
86
|
+
*/
|
|
87
|
+
until(event: string | Event, payload?: any[]): any;
|
|
88
|
+
/**
|
|
89
|
+
* Queue an event for later dispatch
|
|
90
|
+
*
|
|
91
|
+
* @param event - Event name
|
|
92
|
+
* @param payload - Event payload
|
|
93
|
+
*/
|
|
94
|
+
push(event: string, payload?: any[]): void;
|
|
95
|
+
/**
|
|
96
|
+
* Flush (dispatch) all queued events for a specific event name
|
|
97
|
+
*
|
|
98
|
+
* @param event - Event name to flush
|
|
99
|
+
*/
|
|
100
|
+
flush(event: string): void;
|
|
101
|
+
/**
|
|
102
|
+
* Remove all listeners for an event
|
|
103
|
+
*
|
|
104
|
+
* @param event - Event name
|
|
105
|
+
*/
|
|
106
|
+
forget(event: string): void;
|
|
107
|
+
/**
|
|
108
|
+
* Clear all queued events
|
|
109
|
+
*/
|
|
110
|
+
forgetPushed(): void;
|
|
111
|
+
/**
|
|
112
|
+
* Get raw listener mappings
|
|
113
|
+
*
|
|
114
|
+
* @returns Map of event names to their listeners
|
|
115
|
+
*/
|
|
116
|
+
getRawListeners(): Map<string, EventListener[]>;
|
|
117
|
+
/**
|
|
118
|
+
* Get all listeners for an event (direct + wildcard matches)
|
|
119
|
+
*
|
|
120
|
+
* @param eventName - The event name
|
|
121
|
+
* @returns Array of listeners
|
|
122
|
+
*/
|
|
123
|
+
protected getListeners(eventName: string): EventListener[];
|
|
124
|
+
/**
|
|
125
|
+
* Setup a wildcard listener
|
|
126
|
+
*
|
|
127
|
+
* @param event - Wildcard pattern (e.g., 'user.*')
|
|
128
|
+
* @param listener - Listener to invoke
|
|
129
|
+
*/
|
|
130
|
+
protected setupWildcardListen(event: string, listener: EventListener): void;
|
|
131
|
+
/**
|
|
132
|
+
* Get all wildcard listeners matching an event name
|
|
133
|
+
*
|
|
134
|
+
* @param eventName - The event name to match
|
|
135
|
+
* @returns Array of matching listeners
|
|
136
|
+
*/
|
|
137
|
+
protected getWildcardListeners(eventName: string): EventListener[];
|
|
138
|
+
/**
|
|
139
|
+
* Check if an event name matches a wildcard pattern
|
|
140
|
+
*
|
|
141
|
+
* Supports patterns like:
|
|
142
|
+
* - 'event.*' - Matches 'event.created', 'event.updated', etc.
|
|
143
|
+
* - 'event.*.action' - Matches 'event.user.action', 'event.post.action', etc.
|
|
144
|
+
* - '*' - Matches everything
|
|
145
|
+
*
|
|
146
|
+
* @param pattern - Wildcard pattern
|
|
147
|
+
* @param eventName - Event name to test
|
|
148
|
+
* @returns True if the pattern matches
|
|
149
|
+
*/
|
|
150
|
+
protected wildcardMatch(pattern: string, eventName: string): boolean;
|
|
151
|
+
/**
|
|
152
|
+
* Parse event and payload from dispatch arguments
|
|
153
|
+
*
|
|
154
|
+
* @param event - Event name or instance
|
|
155
|
+
* @param payload - Event payload
|
|
156
|
+
* @returns Tuple of [eventName, eventInstance]
|
|
157
|
+
*/
|
|
158
|
+
protected parseEventAndPayload(event: string | Event, payload: any[]): [string, Event | null];
|
|
159
|
+
/**
|
|
160
|
+
* Call a listener with the event and payload
|
|
161
|
+
*
|
|
162
|
+
* Handles different listener types (closure, class instance, string reference)
|
|
163
|
+
*
|
|
164
|
+
* @param listener - The listener to call
|
|
165
|
+
* @param event - Event name or instance
|
|
166
|
+
* @param payload - Additional payload arguments
|
|
167
|
+
* @returns The result from the listener
|
|
168
|
+
*/
|
|
169
|
+
protected callListener(listener: EventListener, event: string | Event, payload: any[]): any;
|
|
170
|
+
/**
|
|
171
|
+
* Create a callable function from a listener
|
|
172
|
+
*
|
|
173
|
+
* Resolves string listeners from container and wraps class instances
|
|
174
|
+
*
|
|
175
|
+
* @param listener - The listener to convert
|
|
176
|
+
* @param wildcard - Whether this is for a wildcard listener
|
|
177
|
+
* @returns Callable function
|
|
178
|
+
*/
|
|
179
|
+
protected makeListener(listener: EventListener, wildcard?: boolean): Function;
|
|
180
|
+
/**
|
|
181
|
+
* Create a listener from a class string reference
|
|
182
|
+
*
|
|
183
|
+
* Resolves the class from the container and calls its handle method
|
|
184
|
+
*
|
|
185
|
+
* @param listener - Class name/path to resolve
|
|
186
|
+
* @param wildcard - Whether this is for a wildcard listener
|
|
187
|
+
* @returns Callable function
|
|
188
|
+
*/
|
|
189
|
+
protected createClassListener(listener: string, wildcard?: boolean): Function;
|
|
190
|
+
/**
|
|
191
|
+
* Check if an event should broadcast
|
|
192
|
+
*
|
|
193
|
+
* This is a placeholder for future broadcasting support
|
|
194
|
+
*
|
|
195
|
+
* @param event - The event instance
|
|
196
|
+
* @param payload - The event payload
|
|
197
|
+
* @returns True if should broadcast
|
|
198
|
+
*/
|
|
199
|
+
protected shouldBroadcast(event: Event, payload: any[]): boolean;
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=Dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dispatcher.d.ts","sourceRoot":"","sources":["../../src/Events/Dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAC;AAEjF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,UAAW,YAAW,kBAAkB;IAqBvC,SAAS,CAAC,SAAS,EAAE,SAAS;IApB1C;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAa;IAE9D;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAa;IAE9D;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC,CAAa;IAE3E;;;;OAIG;gBACmB,SAAS,EAAE,SAAS;IAE1C;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAehE;;;;;;;OAOG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;;OAMG;IACH,SAAS,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAe5C;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAE,GAAG,EAAO,EAAE,IAAI,GAAE,OAAe,GAAG,GAAG,EAAE;IA4BlF;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAE,GAAG,EAAO,GAAG,GAAG;IAetD;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,GAAG,EAAO,GAAG,IAAI;IAQ9C;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAgB1B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3B;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;;;OAIG;IACH,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAI/C;;;;;OAKG;IACH,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE;IAO1D;;;;;OAKG;IACH,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAQ3E;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE;IAYlE;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAWpE;;;;;;OAMG;IACH,SAAS,CAAC,oBAAoB,CAC5B,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,OAAO,EAAE,GAAG,EAAE,GACb,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC;IASzB;;;;;;;;;OASG;IACH,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG;IAW3F;;;;;;;;OAQG;IACH,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,GAAE,OAAe,GAAG,QAAQ;IAsBpF;;;;;;;;OAQG;IACH,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAe,GAAG,QAAQ;IAcpF;;;;;;;;OAQG;IACH,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO;CAcjE"}
|