@orchestr-sh/orchestr 1.6.0 → 1.7.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/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/Commands/MigrateStatusCommand.d.ts.map +1 -1
- package/dist/Console/Commands/MigrateStatusCommand.js.map +1 -1
- package/dist/Console/orchestr.js +10 -0
- package/dist/Console/orchestr.js.map +1 -1
- package/dist/Container/Container.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/Connection.d.ts.map +1 -1
- package/dist/Database/Connection.js.map +1 -1
- package/dist/Database/Ensemble/Concerns/HasDynamicRelations.d.ts.map +1 -1
- package/dist/Database/Ensemble/Concerns/HasDynamicRelations.js +43 -12
- package/dist/Database/Ensemble/Concerns/HasDynamicRelations.js.map +1 -1
- package/dist/Database/Ensemble/Concerns/HasRelationships.d.ts.map +1 -1
- package/dist/Database/Ensemble/Concerns/HasRelationships.js +2 -5
- package/dist/Database/Ensemble/Concerns/HasRelationships.js.map +1 -1
- 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 +134 -11
- 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/Database/Ensemble/Relations/BelongsTo.d.ts.map +1 -1
- package/dist/Database/Ensemble/Relations/BelongsTo.js.map +1 -1
- package/dist/Database/Ensemble/Relations/BelongsToMany.d.ts.map +1 -1
- package/dist/Database/Ensemble/Relations/BelongsToMany.js +1 -4
- package/dist/Database/Ensemble/Relations/BelongsToMany.js.map +1 -1
- package/dist/Database/Ensemble/Relations/HasMany.d.ts.map +1 -1
- package/dist/Database/Ensemble/Relations/HasMany.js.map +1 -1
- package/dist/Database/Ensemble/Relations/HasOne.d.ts.map +1 -1
- package/dist/Database/Ensemble/Relations/HasOne.js.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphMany.d.ts.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphMany.js +2 -6
- package/dist/Database/Ensemble/Relations/MorphMany.js.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphOne.d.ts.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphOne.js +2 -6
- package/dist/Database/Ensemble/Relations/MorphOne.js.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphTo.d.ts.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphTo.js +5 -11
- package/dist/Database/Ensemble/Relations/MorphTo.js.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphToMany.d.ts.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphToMany.js +1 -3
- package/dist/Database/Ensemble/Relations/MorphToMany.js.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphedByMany.d.ts.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphedByMany.js.map +1 -1
- package/dist/Database/Ensemble/Relations/Relation.d.ts.map +1 -1
- package/dist/Database/Ensemble/Relations/Relation.js +4 -2
- package/dist/Database/Ensemble/Relations/Relation.js.map +1 -1
- package/dist/Database/Migrations/MigrationRepository.d.ts.map +1 -1
- package/dist/Database/Migrations/MigrationRepository.js +4 -19
- package/dist/Database/Migrations/MigrationRepository.js.map +1 -1
- package/dist/Database/Migrations/SchemaBuilder.d.ts.map +1 -1
- package/dist/Database/Migrations/SchemaBuilder.js +5 -15
- package/dist/Database/Migrations/SchemaBuilder.js.map +1 -1
- package/dist/Database/Query/Builder.d.ts.map +1 -1
- package/dist/Database/Query/Builder.js +5 -4
- package/dist/Database/Query/Builder.js.map +1 -1
- 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 +140 -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 +12 -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/DB.d.ts.map +1 -1
- package/dist/Facades/DB.js.map +1 -1
- 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/Facades/Route.js +1 -1
- package/dist/Foundation/Application.d.ts +33 -0
- package/dist/Foundation/Application.d.ts.map +1 -1
- package/dist/Foundation/Application.js +43 -3
- package/dist/Foundation/Application.js.map +1 -1
- package/dist/Foundation/Config/Config.js +1 -1
- package/dist/Foundation/Config/Config.js.map +1 -1
- package/dist/Foundation/Http/FormRequest.d.ts.map +1 -1
- package/dist/Foundation/Http/FormRequest.js +2 -2
- package/dist/Foundation/Http/FormRequest.js.map +1 -1
- package/dist/Foundation/Http/Kernel.d.ts.map +1 -1
- package/dist/Foundation/Http/Kernel.js +1 -1
- package/dist/Foundation/Http/Kernel.js.map +1 -1
- package/dist/Foundation/Http/Validator.d.ts.map +1 -1
- package/dist/Foundation/Http/Validator.js +27 -22
- package/dist/Foundation/Http/Validator.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/Routing/Request.js +1 -1
- package/dist/Routing/Request.js.map +1 -1
- package/dist/Routing/Route.js +1 -1
- package/dist/Routing/Route.js.map +1 -1
- package/dist/Routing/Router.d.ts.map +1 -1
- package/dist/Routing/Router.js +5 -6
- package/dist/Routing/Router.js.map +1 -1
- 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/Facade.js +2 -2
- 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 +10 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/package.json +33 -12
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Dispatcher = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Event Dispatcher
|
|
6
|
+
*
|
|
7
|
+
* The core event dispatcher implementation. Manages event listeners,
|
|
8
|
+
* handles wildcard patterns, and dispatches events to registered listeners.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const dispatcher = new Dispatcher(container);
|
|
13
|
+
*
|
|
14
|
+
* // Register listeners
|
|
15
|
+
* dispatcher.listen('user.registered', SendWelcomeEmail);
|
|
16
|
+
* dispatcher.listen('user.*', LogUserActivity);
|
|
17
|
+
*
|
|
18
|
+
* // Dispatch events
|
|
19
|
+
* dispatcher.dispatch(new UserRegistered(user));
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
class Dispatcher {
|
|
23
|
+
container;
|
|
24
|
+
/**
|
|
25
|
+
* Registered event listeners (direct event name matches)
|
|
26
|
+
*/
|
|
27
|
+
listeners = new Map();
|
|
28
|
+
/**
|
|
29
|
+
* Wildcard event listeners (patterns like 'user.*')
|
|
30
|
+
*/
|
|
31
|
+
wildcards = new Map();
|
|
32
|
+
/**
|
|
33
|
+
* Queued events waiting to be flushed
|
|
34
|
+
*/
|
|
35
|
+
queuedEvents = new Map();
|
|
36
|
+
/**
|
|
37
|
+
* Create a new event dispatcher
|
|
38
|
+
*
|
|
39
|
+
* @param container - The service container for resolving listeners
|
|
40
|
+
*/
|
|
41
|
+
constructor(container) {
|
|
42
|
+
this.container = container;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Register an event listener
|
|
46
|
+
*
|
|
47
|
+
* Supports single events, multiple events, and wildcard patterns
|
|
48
|
+
*
|
|
49
|
+
* @param events - Event name(s) to listen for
|
|
50
|
+
* @param listener - Listener to invoke when event is dispatched
|
|
51
|
+
*/
|
|
52
|
+
listen(events, listener) {
|
|
53
|
+
const eventArray = Array.isArray(events) ? events : [events];
|
|
54
|
+
for (const event of eventArray) {
|
|
55
|
+
if (event.includes('*')) {
|
|
56
|
+
this.setupWildcardListen(event, listener);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
if (!this.listeners.has(event)) {
|
|
60
|
+
this.listeners.set(event, []);
|
|
61
|
+
}
|
|
62
|
+
this.listeners.get(event).push(listener);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if an event has any listeners
|
|
68
|
+
*
|
|
69
|
+
* Checks both direct listeners and wildcard matches
|
|
70
|
+
*
|
|
71
|
+
* @param eventName - The event name to check
|
|
72
|
+
* @returns True if the event has listeners
|
|
73
|
+
*/
|
|
74
|
+
hasListeners(eventName) {
|
|
75
|
+
return this.getListeners(eventName).length > 0;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Register an event subscriber
|
|
79
|
+
*
|
|
80
|
+
* Subscribers can register multiple event listeners at once
|
|
81
|
+
*
|
|
82
|
+
* @param subscriber - The subscriber instance
|
|
83
|
+
*/
|
|
84
|
+
subscribe(subscriber) {
|
|
85
|
+
const result = subscriber.subscribe(this);
|
|
86
|
+
// If the subscriber returns a mapping, register those listeners
|
|
87
|
+
if (result && typeof result === 'object') {
|
|
88
|
+
for (const [event, listeners] of Object.entries(result)) {
|
|
89
|
+
const listenerArray = Array.isArray(listeners) ? listeners : [listeners];
|
|
90
|
+
for (const listener of listenerArray) {
|
|
91
|
+
this.listen(event, listener);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Dispatch an event to all listeners
|
|
98
|
+
*
|
|
99
|
+
* @param event - Event name or instance
|
|
100
|
+
* @param payload - Additional arguments to pass to listeners
|
|
101
|
+
* @param halt - Stop dispatching if a listener returns false
|
|
102
|
+
* @returns Array of results from listeners
|
|
103
|
+
*/
|
|
104
|
+
dispatch(event, payload = [], halt = false) {
|
|
105
|
+
const [eventName, eventInstance] = this.parseEventAndPayload(event, payload);
|
|
106
|
+
// Check if we should broadcast this event (for future broadcasting support)
|
|
107
|
+
if (eventInstance) {
|
|
108
|
+
this.shouldBroadcast(eventInstance, payload);
|
|
109
|
+
}
|
|
110
|
+
const listeners = this.getListeners(eventName);
|
|
111
|
+
const responses = [];
|
|
112
|
+
for (const listener of listeners) {
|
|
113
|
+
const response = this.callListener(listener, eventInstance || eventName, payload);
|
|
114
|
+
// If halting and response is false, stop propagation
|
|
115
|
+
if (halt && response === false) {
|
|
116
|
+
return responses;
|
|
117
|
+
}
|
|
118
|
+
// Collect non-null responses
|
|
119
|
+
if (response !== null && response !== undefined) {
|
|
120
|
+
responses.push(response);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return responses;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Dispatch an event until a listener returns a non-null response
|
|
127
|
+
*
|
|
128
|
+
* @param event - Event name or instance
|
|
129
|
+
* @param payload - Additional arguments to pass to listeners
|
|
130
|
+
* @returns The first non-null response from a listener
|
|
131
|
+
*/
|
|
132
|
+
until(event, payload = []) {
|
|
133
|
+
const [eventName, eventInstance] = this.parseEventAndPayload(event, payload);
|
|
134
|
+
const listeners = this.getListeners(eventName);
|
|
135
|
+
for (const listener of listeners) {
|
|
136
|
+
const response = this.callListener(listener, eventInstance || eventName, payload);
|
|
137
|
+
if (response !== null && response !== undefined) {
|
|
138
|
+
return response;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Queue an event for later dispatch
|
|
145
|
+
*
|
|
146
|
+
* @param event - Event name
|
|
147
|
+
* @param payload - Event payload
|
|
148
|
+
*/
|
|
149
|
+
push(event, payload = []) {
|
|
150
|
+
if (!this.queuedEvents.has(event)) {
|
|
151
|
+
this.queuedEvents.set(event, []);
|
|
152
|
+
}
|
|
153
|
+
this.queuedEvents.get(event).push({ payload });
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Flush (dispatch) all queued events for a specific event name
|
|
157
|
+
*
|
|
158
|
+
* @param event - Event name to flush
|
|
159
|
+
*/
|
|
160
|
+
flush(event) {
|
|
161
|
+
const queued = this.queuedEvents.get(event);
|
|
162
|
+
if (!queued || queued.length === 0) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// Dispatch each queued event
|
|
166
|
+
for (const { payload } of queued) {
|
|
167
|
+
this.dispatch(event, payload);
|
|
168
|
+
}
|
|
169
|
+
// Clear the queue for this event
|
|
170
|
+
this.queuedEvents.delete(event);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Remove all listeners for an event
|
|
174
|
+
*
|
|
175
|
+
* @param event - Event name
|
|
176
|
+
*/
|
|
177
|
+
forget(event) {
|
|
178
|
+
this.listeners.delete(event);
|
|
179
|
+
this.wildcards.delete(event);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Clear all queued events
|
|
183
|
+
*/
|
|
184
|
+
forgetPushed() {
|
|
185
|
+
this.queuedEvents.clear();
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get raw listener mappings
|
|
189
|
+
*
|
|
190
|
+
* @returns Map of event names to their listeners
|
|
191
|
+
*/
|
|
192
|
+
getRawListeners() {
|
|
193
|
+
return this.listeners;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get all listeners for an event (direct + wildcard matches)
|
|
197
|
+
*
|
|
198
|
+
* @param eventName - The event name
|
|
199
|
+
* @returns Array of listeners
|
|
200
|
+
*/
|
|
201
|
+
getListeners(eventName) {
|
|
202
|
+
const directListeners = this.listeners.get(eventName) || [];
|
|
203
|
+
const wildcardListeners = this.getWildcardListeners(eventName);
|
|
204
|
+
return [...directListeners, ...wildcardListeners];
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Setup a wildcard listener
|
|
208
|
+
*
|
|
209
|
+
* @param event - Wildcard pattern (e.g., 'user.*')
|
|
210
|
+
* @param listener - Listener to invoke
|
|
211
|
+
*/
|
|
212
|
+
setupWildcardListen(event, listener) {
|
|
213
|
+
if (!this.wildcards.has(event)) {
|
|
214
|
+
this.wildcards.set(event, []);
|
|
215
|
+
}
|
|
216
|
+
this.wildcards.get(event).push(listener);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get all wildcard listeners matching an event name
|
|
220
|
+
*
|
|
221
|
+
* @param eventName - The event name to match
|
|
222
|
+
* @returns Array of matching listeners
|
|
223
|
+
*/
|
|
224
|
+
getWildcardListeners(eventName) {
|
|
225
|
+
const matched = [];
|
|
226
|
+
for (const [pattern, listeners] of this.wildcards) {
|
|
227
|
+
if (this.wildcardMatch(pattern, eventName)) {
|
|
228
|
+
matched.push(...listeners);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return matched;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Check if an event name matches a wildcard pattern
|
|
235
|
+
*
|
|
236
|
+
* Supports patterns like:
|
|
237
|
+
* - 'event.*' - Matches 'event.created', 'event.updated', etc.
|
|
238
|
+
* - 'event.*.action' - Matches 'event.user.action', 'event.post.action', etc.
|
|
239
|
+
* - '*' - Matches everything
|
|
240
|
+
*
|
|
241
|
+
* @param pattern - Wildcard pattern
|
|
242
|
+
* @param eventName - Event name to test
|
|
243
|
+
* @returns True if the pattern matches
|
|
244
|
+
*/
|
|
245
|
+
wildcardMatch(pattern, eventName) {
|
|
246
|
+
// Convert wildcard pattern to regex
|
|
247
|
+
// Escape special regex characters except *
|
|
248
|
+
const regexPattern = pattern
|
|
249
|
+
.replace(/[.+?^${}()|[\]\\]/g, '\\$&')
|
|
250
|
+
.replace(/\*/g, '.*');
|
|
251
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
252
|
+
return regex.test(eventName);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Parse event and payload from dispatch arguments
|
|
256
|
+
*
|
|
257
|
+
* @param event - Event name or instance
|
|
258
|
+
* @param payload - Event payload
|
|
259
|
+
* @returns Tuple of [eventName, eventInstance]
|
|
260
|
+
*/
|
|
261
|
+
parseEventAndPayload(event, payload) {
|
|
262
|
+
if (typeof event === 'string') {
|
|
263
|
+
return [event, null];
|
|
264
|
+
}
|
|
265
|
+
// Event is an object
|
|
266
|
+
return [event.constructor.name, event];
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Call a listener with the event and payload
|
|
270
|
+
*
|
|
271
|
+
* Handles different listener types (closure, class instance, string reference)
|
|
272
|
+
*
|
|
273
|
+
* @param listener - The listener to call
|
|
274
|
+
* @param event - Event name or instance
|
|
275
|
+
* @param payload - Additional payload arguments
|
|
276
|
+
* @returns The result from the listener
|
|
277
|
+
*/
|
|
278
|
+
callListener(listener, event, payload) {
|
|
279
|
+
try {
|
|
280
|
+
const callable = this.makeListener(listener);
|
|
281
|
+
return callable(event, ...payload);
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
// Re-throw the error to allow application-level error handling
|
|
285
|
+
console.error(`Error calling event listener:`, error);
|
|
286
|
+
throw error;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Create a callable function from a listener
|
|
291
|
+
*
|
|
292
|
+
* Resolves string listeners from container and wraps class instances
|
|
293
|
+
*
|
|
294
|
+
* @param listener - The listener to convert
|
|
295
|
+
* @param wildcard - Whether this is for a wildcard listener
|
|
296
|
+
* @returns Callable function
|
|
297
|
+
*/
|
|
298
|
+
makeListener(listener, wildcard = false) {
|
|
299
|
+
// If it's a string, resolve from container
|
|
300
|
+
if (typeof listener === 'string') {
|
|
301
|
+
return this.createClassListener(listener, wildcard);
|
|
302
|
+
}
|
|
303
|
+
// If it's a function (closure), return as-is
|
|
304
|
+
if (typeof listener === 'function') {
|
|
305
|
+
return listener;
|
|
306
|
+
}
|
|
307
|
+
// If it's a class instance with handle method
|
|
308
|
+
if (typeof listener === 'object' && 'handle' in listener) {
|
|
309
|
+
const instance = listener;
|
|
310
|
+
return (event, ...payload) => {
|
|
311
|
+
return instance.handle(event);
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
throw new Error(`Invalid listener type: ${typeof listener}`);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Create a listener from a class string reference
|
|
318
|
+
*
|
|
319
|
+
* Resolves the class from the container and calls its handle method
|
|
320
|
+
*
|
|
321
|
+
* @param listener - Class name/path to resolve
|
|
322
|
+
* @param wildcard - Whether this is for a wildcard listener
|
|
323
|
+
* @returns Callable function
|
|
324
|
+
*/
|
|
325
|
+
createClassListener(listener, wildcard = false) {
|
|
326
|
+
return (event, ...payload) => {
|
|
327
|
+
// Resolve the listener class from the container
|
|
328
|
+
const instance = this.container.make(listener);
|
|
329
|
+
if (!instance || typeof instance.handle !== 'function') {
|
|
330
|
+
throw new Error(`Listener [${listener}] does not have a handle method`);
|
|
331
|
+
}
|
|
332
|
+
// Call the handle method
|
|
333
|
+
return instance.handle(event);
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Check if an event should broadcast
|
|
338
|
+
*
|
|
339
|
+
* This is a placeholder for future broadcasting support
|
|
340
|
+
*
|
|
341
|
+
* @param event - The event instance
|
|
342
|
+
* @param payload - The event payload
|
|
343
|
+
* @returns True if should broadcast
|
|
344
|
+
*/
|
|
345
|
+
shouldBroadcast(event, payload) {
|
|
346
|
+
// Check if event has shouldBroadcast method and it returns true
|
|
347
|
+
if (typeof event.shouldBroadcast === 'function') {
|
|
348
|
+
return event.shouldBroadcast();
|
|
349
|
+
}
|
|
350
|
+
// Check if event has broadcastOn method that returns channels
|
|
351
|
+
if (typeof event.broadcastOn === 'function') {
|
|
352
|
+
const channels = event.broadcastOn();
|
|
353
|
+
return Array.isArray(channels) ? channels.length > 0 : !!channels;
|
|
354
|
+
}
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
exports.Dispatcher = Dispatcher;
|
|
359
|
+
//# sourceMappingURL=Dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dispatcher.js","sourceRoot":"","sources":["../../src/Events/Dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Base Class
|
|
3
|
+
*
|
|
4
|
+
* Base class for all events in the application
|
|
5
|
+
* Provides serialization support and broadcasting capabilities
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* class UserRegistered extends Event {
|
|
10
|
+
* constructor(public readonly user: User) {
|
|
11
|
+
* super();
|
|
12
|
+
* }
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* // Dispatch the event
|
|
16
|
+
* UserRegistered.dispatch(user);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Abstract Event base class
|
|
21
|
+
*
|
|
22
|
+
* All application events should extend this class.
|
|
23
|
+
* It provides:
|
|
24
|
+
* - Event metadata storage
|
|
25
|
+
* - Serialization for queueing
|
|
26
|
+
* - Broadcasting support
|
|
27
|
+
* - Static dispatch methods (via Dispatchable mixin)
|
|
28
|
+
*/
|
|
29
|
+
export declare abstract class Event {
|
|
30
|
+
/**
|
|
31
|
+
* Properties to exclude from serialization
|
|
32
|
+
* Override in child classes to specify which properties should not be serialized
|
|
33
|
+
*/
|
|
34
|
+
protected static serializable: string[];
|
|
35
|
+
/**
|
|
36
|
+
* The name of the connection the job should be sent to
|
|
37
|
+
* Used when queueing event listeners
|
|
38
|
+
*/
|
|
39
|
+
connection?: string;
|
|
40
|
+
/**
|
|
41
|
+
* The name of the queue the job should be sent to
|
|
42
|
+
* Used when queueing event listeners
|
|
43
|
+
*/
|
|
44
|
+
queue?: string;
|
|
45
|
+
/**
|
|
46
|
+
* The number of seconds before the job should be processed
|
|
47
|
+
* Used when queueing event listeners
|
|
48
|
+
*/
|
|
49
|
+
delay?: number;
|
|
50
|
+
/**
|
|
51
|
+
* Convert event to JSON for queue serialization
|
|
52
|
+
*
|
|
53
|
+
* Serializes all public properties except those listed in the serializable array
|
|
54
|
+
*
|
|
55
|
+
* @returns Object representation of the event
|
|
56
|
+
*/
|
|
57
|
+
toJSON(): Record<string, any>;
|
|
58
|
+
/**
|
|
59
|
+
* Serialize a value for JSON storage
|
|
60
|
+
*
|
|
61
|
+
* @param value - Value to serialize
|
|
62
|
+
* @returns Serialized value
|
|
63
|
+
*/
|
|
64
|
+
protected serializeValue(value: any): any;
|
|
65
|
+
/**
|
|
66
|
+
* Recreate event from JSON
|
|
67
|
+
*
|
|
68
|
+
* This method should be overridden in child classes if custom deserialization is needed
|
|
69
|
+
*
|
|
70
|
+
* @param data - Serialized event data
|
|
71
|
+
* @returns Event instance
|
|
72
|
+
*/
|
|
73
|
+
static fromJSON<T extends Event>(this: typeof Event & (new (...args: any[]) => T), data: Record<string, any>): T;
|
|
74
|
+
/**
|
|
75
|
+
* Deserialize a value from JSON
|
|
76
|
+
*
|
|
77
|
+
* @param value - Serialized value
|
|
78
|
+
* @returns Deserialized value
|
|
79
|
+
*/
|
|
80
|
+
protected static deserializeValue(value: any): any;
|
|
81
|
+
/**
|
|
82
|
+
* Get the broadcast channel name(s)
|
|
83
|
+
*
|
|
84
|
+
* Override in child classes to specify which channels this event should broadcast on
|
|
85
|
+
*
|
|
86
|
+
* @returns Channel name(s) or empty array for no broadcasting
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* broadcastOn(): string | string[] {
|
|
91
|
+
* return 'users.' + this.user.id;
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
broadcastOn(): string | string[];
|
|
96
|
+
/**
|
|
97
|
+
* Get the data to broadcast
|
|
98
|
+
*
|
|
99
|
+
* Override in child classes to customize the broadcast payload
|
|
100
|
+
* By default, returns all public properties
|
|
101
|
+
*
|
|
102
|
+
* @returns Data to broadcast
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* broadcastWith(): Record<string, any> {
|
|
107
|
+
* return {
|
|
108
|
+
* userId: this.user.id,
|
|
109
|
+
* userName: this.user.name,
|
|
110
|
+
* };
|
|
111
|
+
* }
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
broadcastWith(): Record<string, any>;
|
|
115
|
+
/**
|
|
116
|
+
* Get the broadcast event name
|
|
117
|
+
*
|
|
118
|
+
* Override in child classes to customize the event name sent to clients
|
|
119
|
+
* By default, returns the class name
|
|
120
|
+
*
|
|
121
|
+
* @returns Event name for broadcasting
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```typescript
|
|
125
|
+
* broadcastAs(): string {
|
|
126
|
+
* return 'user.registered';
|
|
127
|
+
* }
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
broadcastAs(): string;
|
|
131
|
+
/**
|
|
132
|
+
* Determine if this event should broadcast
|
|
133
|
+
*
|
|
134
|
+
* Override in child classes to conditionally broadcast events
|
|
135
|
+
*
|
|
136
|
+
* @returns True if event should broadcast
|
|
137
|
+
*/
|
|
138
|
+
shouldBroadcast(): boolean;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=Event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../src/Events/Event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;GASG;AACH,8BAAsB,KAAK;IACzB;;;OAGG;IACH,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAM;IAE7C;;;OAGG;IACI,UAAU,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACI,KAAK,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACI,KAAK,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;OAMG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAkC7B;;;;;OAKG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;IAqCzC;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,OAAO,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;IAchH;;;;;OAKG;IACH,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;IAkClD;;;;;;;;;;;;;OAaG;IACH,WAAW,IAAI,MAAM,GAAG,MAAM,EAAE;IAIhC;;;;;;;;;;;;;;;;;OAiBG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA0BpC;;;;;;;;;;;;;;OAcG;IACH,WAAW,IAAI,MAAM;IAIrB;;;;;;OAMG;IACH,eAAe,IAAI,OAAO;CAI3B"}
|