@orchestr-sh/orchestr 1.6.1 → 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.
Files changed (159) hide show
  1. package/README.md +289 -22
  2. package/dist/Console/Commands/EventCacheCommand.d.ts +15 -0
  3. package/dist/Console/Commands/EventCacheCommand.d.ts.map +1 -0
  4. package/dist/Console/Commands/EventCacheCommand.js +99 -0
  5. package/dist/Console/Commands/EventCacheCommand.js.map +1 -0
  6. package/dist/Console/Commands/EventClearCommand.d.ts +15 -0
  7. package/dist/Console/Commands/EventClearCommand.d.ts.map +1 -0
  8. package/dist/Console/Commands/EventClearCommand.js +71 -0
  9. package/dist/Console/Commands/EventClearCommand.js.map +1 -0
  10. package/dist/Console/Commands/EventListCommand.d.ts +19 -0
  11. package/dist/Console/Commands/EventListCommand.d.ts.map +1 -0
  12. package/dist/Console/Commands/EventListCommand.js +106 -0
  13. package/dist/Console/Commands/EventListCommand.js.map +1 -0
  14. package/dist/Console/Commands/MakeEventCommand.d.ts +27 -0
  15. package/dist/Console/Commands/MakeEventCommand.d.ts.map +1 -0
  16. package/dist/Console/Commands/MakeEventCommand.js +117 -0
  17. package/dist/Console/Commands/MakeEventCommand.js.map +1 -0
  18. package/dist/Console/Commands/MakeListenerCommand.d.ts +27 -0
  19. package/dist/Console/Commands/MakeListenerCommand.d.ts.map +1 -0
  20. package/dist/Console/Commands/MakeListenerCommand.js +157 -0
  21. package/dist/Console/Commands/MakeListenerCommand.js.map +1 -0
  22. package/dist/Console/orchestr.js +10 -0
  23. package/dist/Console/orchestr.js.map +1 -1
  24. package/dist/Contracts/Events/Dispatcher.d.ts +94 -0
  25. package/dist/Contracts/Events/Dispatcher.d.ts.map +1 -0
  26. package/dist/Contracts/Events/Dispatcher.js +9 -0
  27. package/dist/Contracts/Events/Dispatcher.js.map +1 -0
  28. package/dist/Contracts/Events/index.d.ts +7 -0
  29. package/dist/Contracts/Events/index.d.ts.map +1 -0
  30. package/dist/Contracts/Events/index.js +8 -0
  31. package/dist/Contracts/Events/index.js.map +1 -0
  32. package/dist/Database/Ensemble/Ensemble.d.ts +7 -0
  33. package/dist/Database/Ensemble/Ensemble.d.ts.map +1 -1
  34. package/dist/Database/Ensemble/Ensemble.js +119 -0
  35. package/dist/Database/Ensemble/Ensemble.js.map +1 -1
  36. package/dist/Database/Ensemble/EnsembleBuilder.d.ts.map +1 -1
  37. package/dist/Database/Ensemble/EnsembleBuilder.js +7 -0
  38. package/dist/Database/Ensemble/EnsembleBuilder.js.map +1 -1
  39. package/dist/Database/Ensemble/Events/ModelCreated.d.ts +11 -0
  40. package/dist/Database/Ensemble/Events/ModelCreated.d.ts.map +1 -0
  41. package/dist/Database/Ensemble/Events/ModelCreated.js +16 -0
  42. package/dist/Database/Ensemble/Events/ModelCreated.js.map +1 -0
  43. package/dist/Database/Ensemble/Events/ModelCreating.d.ts +12 -0
  44. package/dist/Database/Ensemble/Events/ModelCreating.d.ts.map +1 -0
  45. package/dist/Database/Ensemble/Events/ModelCreating.js +17 -0
  46. package/dist/Database/Ensemble/Events/ModelCreating.js.map +1 -0
  47. package/dist/Database/Ensemble/Events/ModelDeleted.d.ts +11 -0
  48. package/dist/Database/Ensemble/Events/ModelDeleted.d.ts.map +1 -0
  49. package/dist/Database/Ensemble/Events/ModelDeleted.js +16 -0
  50. package/dist/Database/Ensemble/Events/ModelDeleted.js.map +1 -0
  51. package/dist/Database/Ensemble/Events/ModelDeleting.d.ts +12 -0
  52. package/dist/Database/Ensemble/Events/ModelDeleting.d.ts.map +1 -0
  53. package/dist/Database/Ensemble/Events/ModelDeleting.js +17 -0
  54. package/dist/Database/Ensemble/Events/ModelDeleting.js.map +1 -0
  55. package/dist/Database/Ensemble/Events/ModelEvent.d.ts +17 -0
  56. package/dist/Database/Ensemble/Events/ModelEvent.d.ts.map +1 -0
  57. package/dist/Database/Ensemble/Events/ModelEvent.js +22 -0
  58. package/dist/Database/Ensemble/Events/ModelEvent.js.map +1 -0
  59. package/dist/Database/Ensemble/Events/ModelRetrieved.d.ts +11 -0
  60. package/dist/Database/Ensemble/Events/ModelRetrieved.d.ts.map +1 -0
  61. package/dist/Database/Ensemble/Events/ModelRetrieved.js +16 -0
  62. package/dist/Database/Ensemble/Events/ModelRetrieved.js.map +1 -0
  63. package/dist/Database/Ensemble/Events/ModelSaved.d.ts +11 -0
  64. package/dist/Database/Ensemble/Events/ModelSaved.d.ts.map +1 -0
  65. package/dist/Database/Ensemble/Events/ModelSaved.js +16 -0
  66. package/dist/Database/Ensemble/Events/ModelSaved.js.map +1 -0
  67. package/dist/Database/Ensemble/Events/ModelSaving.d.ts +12 -0
  68. package/dist/Database/Ensemble/Events/ModelSaving.d.ts.map +1 -0
  69. package/dist/Database/Ensemble/Events/ModelSaving.js +17 -0
  70. package/dist/Database/Ensemble/Events/ModelSaving.js.map +1 -0
  71. package/dist/Database/Ensemble/Events/ModelUpdated.d.ts +11 -0
  72. package/dist/Database/Ensemble/Events/ModelUpdated.d.ts.map +1 -0
  73. package/dist/Database/Ensemble/Events/ModelUpdated.js +16 -0
  74. package/dist/Database/Ensemble/Events/ModelUpdated.js.map +1 -0
  75. package/dist/Database/Ensemble/Events/ModelUpdating.d.ts +12 -0
  76. package/dist/Database/Ensemble/Events/ModelUpdating.d.ts.map +1 -0
  77. package/dist/Database/Ensemble/Events/ModelUpdating.js +17 -0
  78. package/dist/Database/Ensemble/Events/ModelUpdating.js.map +1 -0
  79. package/dist/Database/Ensemble/Events/index.d.ts +16 -0
  80. package/dist/Database/Ensemble/Events/index.d.ts.map +1 -0
  81. package/dist/Database/Ensemble/Events/index.js +29 -0
  82. package/dist/Database/Ensemble/Events/index.js.map +1 -0
  83. package/dist/Events/Concerns/Dispatchable.d.ts +121 -0
  84. package/dist/Events/Concerns/Dispatchable.d.ts.map +1 -0
  85. package/dist/Events/Concerns/Dispatchable.js +165 -0
  86. package/dist/Events/Concerns/Dispatchable.js.map +1 -0
  87. package/dist/Events/Contracts/Dispatcher.d.ts +144 -0
  88. package/dist/Events/Contracts/Dispatcher.d.ts.map +1 -0
  89. package/dist/Events/Contracts/Dispatcher.js +3 -0
  90. package/dist/Events/Contracts/Dispatcher.js.map +1 -0
  91. package/dist/Events/Contracts/ShouldDispatchAfterCommit.d.ts +21 -0
  92. package/dist/Events/Contracts/ShouldDispatchAfterCommit.d.ts.map +1 -0
  93. package/dist/Events/Contracts/ShouldDispatchAfterCommit.js +3 -0
  94. package/dist/Events/Contracts/ShouldDispatchAfterCommit.js.map +1 -0
  95. package/dist/Events/Decorators/HandlesEvents.d.ts +83 -0
  96. package/dist/Events/Decorators/HandlesEvents.d.ts.map +1 -0
  97. package/dist/Events/Decorators/HandlesEvents.js +105 -0
  98. package/dist/Events/Decorators/HandlesEvents.js.map +1 -0
  99. package/dist/Events/Dispatcher.d.ts +201 -0
  100. package/dist/Events/Dispatcher.d.ts.map +1 -0
  101. package/dist/Events/Dispatcher.js +359 -0
  102. package/dist/Events/Dispatcher.js.map +1 -0
  103. package/dist/Events/Event.d.ts +140 -0
  104. package/dist/Events/Event.d.ts.map +1 -0
  105. package/dist/Events/Event.js +266 -0
  106. package/dist/Events/Event.js.map +1 -0
  107. package/dist/Events/EventDiscoveryCache.d.ts +205 -0
  108. package/dist/Events/EventDiscoveryCache.d.ts.map +1 -0
  109. package/dist/Events/EventDiscoveryCache.js +310 -0
  110. package/dist/Events/EventDiscoveryCache.js.map +1 -0
  111. package/dist/Events/EventServiceProvider.d.ts +148 -0
  112. package/dist/Events/EventServiceProvider.d.ts.map +1 -0
  113. package/dist/Events/EventServiceProvider.js +258 -0
  114. package/dist/Events/EventServiceProvider.js.map +1 -0
  115. package/dist/Events/NullDispatcher.d.ts +97 -0
  116. package/dist/Events/NullDispatcher.d.ts.map +1 -0
  117. package/dist/Events/NullDispatcher.js +118 -0
  118. package/dist/Events/NullDispatcher.js.map +1 -0
  119. package/dist/Events/PendingDispatch.d.ts +119 -0
  120. package/dist/Events/PendingDispatch.d.ts.map +1 -0
  121. package/dist/Events/PendingDispatch.js +162 -0
  122. package/dist/Events/PendingDispatch.js.map +1 -0
  123. package/dist/Events/index.d.ts +12 -0
  124. package/dist/Events/index.d.ts.map +1 -0
  125. package/dist/Events/index.js +20 -0
  126. package/dist/Events/index.js.map +1 -0
  127. package/dist/Events/types.d.ts +77 -0
  128. package/dist/Events/types.d.ts.map +1 -0
  129. package/dist/Events/types.js +3 -0
  130. package/dist/Events/types.js.map +1 -0
  131. package/dist/Facades/Event.d.ts +200 -0
  132. package/dist/Facades/Event.d.ts.map +1 -0
  133. package/dist/Facades/Event.js +331 -0
  134. package/dist/Facades/Event.js.map +1 -0
  135. package/dist/Foundation/Application.d.ts +33 -0
  136. package/dist/Foundation/Application.d.ts.map +1 -1
  137. package/dist/Foundation/Application.js +40 -0
  138. package/dist/Foundation/Application.js.map +1 -1
  139. package/dist/Listeners/Contracts/ShouldQueue.d.ts +142 -0
  140. package/dist/Listeners/Contracts/ShouldQueue.d.ts.map +1 -0
  141. package/dist/Listeners/Contracts/ShouldQueue.js +20 -0
  142. package/dist/Listeners/Contracts/ShouldQueue.js.map +1 -0
  143. package/dist/Listeners/Contracts/ShouldQueueAfterCommit.d.ts +24 -0
  144. package/dist/Listeners/Contracts/ShouldQueueAfterCommit.d.ts.map +1 -0
  145. package/dist/Listeners/Contracts/ShouldQueueAfterCommit.js +3 -0
  146. package/dist/Listeners/Contracts/ShouldQueueAfterCommit.js.map +1 -0
  147. package/dist/Support/EventDiscovery.d.ts +142 -0
  148. package/dist/Support/EventDiscovery.d.ts.map +1 -0
  149. package/dist/Support/EventDiscovery.js +302 -0
  150. package/dist/Support/EventDiscovery.js.map +1 -0
  151. package/dist/Support/Testing/Fakes/EventFake.d.ts +291 -0
  152. package/dist/Support/Testing/Fakes/EventFake.d.ts.map +1 -0
  153. package/dist/Support/Testing/Fakes/EventFake.js +444 -0
  154. package/dist/Support/Testing/Fakes/EventFake.js.map +1 -0
  155. package/dist/index.d.ts +6 -0
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +11 -1
  158. package/dist/index.js.map +1 -1
  159. package/package.json +3 -3
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.EventServiceProvider = void 0;
37
+ const ServiceProvider_1 = require("../Foundation/ServiceProvider");
38
+ const Dispatcher_1 = require("./Dispatcher");
39
+ const fs = __importStar(require("fs"));
40
+ /**
41
+ * Event Service Provider
42
+ *
43
+ * Provides event registration and discovery services following Laravel's
44
+ * EventServiceProvider pattern. Supports both manual registration and
45
+ * automatic listener discovery.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * export class AppEventServiceProvider extends EventServiceProvider {
50
+ * protected listen = {
51
+ * 'UserRegistered': [
52
+ * 'SendWelcomeEmail',
53
+ * 'CreateUserProfile'
54
+ * ],
55
+ * 'OrderPlaced': 'SendOrderConfirmation'
56
+ * }
57
+ *
58
+ * protected subscribe = [
59
+ * 'UserEventSubscriber'
60
+ * ]
61
+ * }
62
+ * ```
63
+ */
64
+ class EventServiceProvider extends ServiceProvider_1.ServiceProvider {
65
+ /**
66
+ * The event listener mappings for the application
67
+ *
68
+ * Maps event names to listener class names (string) or arrays of listener names.
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * protected listen = {
73
+ * 'UserRegistered': ['SendWelcomeEmail', 'LogRegistration'],
74
+ * 'OrderPlaced': 'ProcessOrder'
75
+ * }
76
+ * ```
77
+ */
78
+ listen = {};
79
+ /**
80
+ * The subscriber classes to register
81
+ *
82
+ * Subscribers provide their own event-to-listener mappings via a subscribe() method.
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * protected subscribe = [
87
+ * 'UserEventSubscriber',
88
+ * 'OrderEventSubscriber'
89
+ * ]
90
+ * ```
91
+ */
92
+ subscribe = [];
93
+ /**
94
+ * Register the application's event listeners
95
+ *
96
+ * Binds the event dispatcher as a singleton in the container.
97
+ */
98
+ register() {
99
+ this.app.singleton('events', (app) => {
100
+ return new Dispatcher_1.Dispatcher(app);
101
+ });
102
+ // Register alias for convenience
103
+ this.app.alias('events', Dispatcher_1.Dispatcher);
104
+ }
105
+ /**
106
+ * Bootstrap the application events
107
+ *
108
+ * Performs three key operations:
109
+ * 1. Registers manual event-listener mappings from the `listen` property
110
+ * 2. Registers event subscribers from the `subscribe` property
111
+ * 3. Performs automatic event discovery if enabled
112
+ *
113
+ * @throws {Error} If the dispatcher cannot be resolved from the container
114
+ */
115
+ async boot() {
116
+ const events = this.app.make('events');
117
+ // Register event listeners from listen property
118
+ for (const [event, listeners] of Object.entries(this.listen)) {
119
+ const listenerArray = Array.isArray(listeners) ? listeners : [listeners];
120
+ for (const listener of listenerArray) {
121
+ events.listen(event, listener);
122
+ }
123
+ }
124
+ // Register event subscribers
125
+ for (const subscriber of this.subscribe) {
126
+ const subscriberInstance = this.app.make(subscriber);
127
+ events.subscribe(subscriberInstance);
128
+ }
129
+ // Perform event discovery if enabled
130
+ if (this.shouldDiscoverEvents()) {
131
+ await this.discoverEvents(events);
132
+ }
133
+ }
134
+ /**
135
+ * Determine if events and listeners should be automatically discovered
136
+ *
137
+ * By default, discovery is enabled unless events are cached.
138
+ * Override this method to customize discovery behavior.
139
+ *
140
+ * @returns {boolean} True if event discovery should run
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * protected shouldDiscoverEvents(): boolean {
145
+ * // Disable discovery in production
146
+ * return this.app.environment() !== 'production'
147
+ * }
148
+ * ```
149
+ */
150
+ shouldDiscoverEvents() {
151
+ // Check for cached events first
152
+ return !this.eventsAreCached();
153
+ }
154
+ /**
155
+ * Discover the events and listeners for the application
156
+ *
157
+ * Uses EventDiscovery to scan specified directories for listener classes
158
+ * and automatically registers them with their corresponding events.
159
+ *
160
+ * @param {Dispatcher} events - The event dispatcher instance
161
+ *
162
+ * @throws {Error} If EventDiscovery is not available (Task 6 dependency)
163
+ */
164
+ async discoverEvents(events) {
165
+ // Import EventDiscovery dynamically to avoid circular dependency
166
+ try {
167
+ const { EventDiscovery } = await Promise.resolve().then(() => __importStar(require('../Support/EventDiscovery')));
168
+ const discovery = new EventDiscovery(this.app);
169
+ const listeners = await discovery.discover(this.discoverEventsWithin());
170
+ for (const [event, listenerClasses] of listeners) {
171
+ for (const listener of listenerClasses) {
172
+ events.listen(event, listener);
173
+ }
174
+ }
175
+ }
176
+ catch (error) {
177
+ // EventDiscovery not implemented yet (Task 6)
178
+ // Silently skip discovery for now
179
+ if (error.code !== 'MODULE_NOT_FOUND') {
180
+ throw error;
181
+ }
182
+ }
183
+ }
184
+ /**
185
+ * Get the directories to discover events within
186
+ *
187
+ * By default, uses the paths configured via Application.withEvents()
188
+ * or falls back to the standard 'Listeners' directory.
189
+ *
190
+ * Override this method to customize discovery paths.
191
+ *
192
+ * @returns {string[]} Array of absolute directory paths to scan
193
+ *
194
+ * @example
195
+ * ```typescript
196
+ * protected discoverEventsWithin(): string[] {
197
+ * return [
198
+ * this.app.path('Listeners'),
199
+ * this.app.path('Domain/Listeners')
200
+ * ]
201
+ * }
202
+ * ```
203
+ */
204
+ discoverEventsWithin() {
205
+ return this.app.getEventDiscoveryPaths();
206
+ }
207
+ /**
208
+ * Determine if events are cached
209
+ *
210
+ * Checks for the existence of the cached events file.
211
+ *
212
+ * @returns {boolean} True if cached events file exists
213
+ */
214
+ eventsAreCached() {
215
+ const cachePath = this.app.storagePath('framework/events.json');
216
+ try {
217
+ fs.accessSync(cachePath, fs.constants.F_OK);
218
+ return true;
219
+ }
220
+ catch {
221
+ return false;
222
+ }
223
+ }
224
+ /**
225
+ * Get the events and handlers from the cached file
226
+ *
227
+ * Loads and parses the cached events JSON file.
228
+ *
229
+ * @returns {Map<string, string[]>} Map of event names to listener class names
230
+ */
231
+ getCachedEvents() {
232
+ const cachePath = this.app.storagePath('framework/events.json');
233
+ if (!fs.existsSync(cachePath)) {
234
+ return new Map();
235
+ }
236
+ try {
237
+ const cached = JSON.parse(fs.readFileSync(cachePath, 'utf-8'));
238
+ // Convert array of entries back to Map
239
+ return new Map(cached);
240
+ }
241
+ catch {
242
+ return new Map();
243
+ }
244
+ }
245
+ /**
246
+ * Get all registered event-listener mappings
247
+ *
248
+ * Returns the complete mapping of events to listeners for inspection.
249
+ * Useful for debugging and console commands.
250
+ *
251
+ * @returns {Record<string, string | string[]>} The listen property mappings
252
+ */
253
+ listens() {
254
+ return this.listen;
255
+ }
256
+ }
257
+ exports.EventServiceProvider = EventServiceProvider;
258
+ //# sourceMappingURL=EventServiceProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventServiceProvider.js","sourceRoot":"","sources":["../../src/Events/EventServiceProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import type { DispatcherContract } from './Contracts/Dispatcher';
2
+ import type { Event } from './Event';
3
+ import type { EventListener, EventSubscriber } from './types';
4
+ /**
5
+ * Null Dispatcher
6
+ *
7
+ * A no-op event dispatcher implementation following the Null Object pattern.
8
+ * Useful for testing or when you want to disable event dispatching entirely.
9
+ *
10
+ * All methods are implemented but do nothing, allowing code to call
11
+ * dispatcher methods without side effects.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // Use in tests to disable events
16
+ * const dispatcher = new NullDispatcher();
17
+ * container.instance('events', dispatcher);
18
+ *
19
+ * // Events will be "dispatched" but nothing happens
20
+ * dispatcher.dispatch(new UserRegistered(user));
21
+ * // No listeners are called
22
+ *
23
+ * // Use for performance when events aren't needed
24
+ * if (config.disableEvents) {
25
+ * app.singleton('events', () => new NullDispatcher());
26
+ * }
27
+ * ```
28
+ */
29
+ export declare class NullDispatcher implements DispatcherContract {
30
+ /**
31
+ * Register an event listener (no-op)
32
+ *
33
+ * @param events - Event name(s) to listen for (ignored)
34
+ * @param listener - Listener to invoke (ignored)
35
+ */
36
+ listen(events: string | string[], listener: EventListener): void;
37
+ /**
38
+ * Check if an event has any listeners (always returns false)
39
+ *
40
+ * @param eventName - The event name to check (ignored)
41
+ * @returns Always false
42
+ */
43
+ hasListeners(eventName: string): boolean;
44
+ /**
45
+ * Register an event subscriber (no-op)
46
+ *
47
+ * @param subscriber - The subscriber instance (ignored)
48
+ */
49
+ subscribe(subscriber: EventSubscriber): void;
50
+ /**
51
+ * Dispatch an event to all listeners (no-op, returns empty array)
52
+ *
53
+ * @param event - Event name or instance (ignored)
54
+ * @param payload - Additional arguments (ignored)
55
+ * @param halt - Stop on false return (ignored)
56
+ * @returns Empty array
57
+ */
58
+ dispatch(event: string | Event, payload?: any[], halt?: boolean): any[];
59
+ /**
60
+ * Dispatch an event until a listener returns a non-null response (always returns null)
61
+ *
62
+ * @param event - Event name or instance (ignored)
63
+ * @param payload - Additional arguments (ignored)
64
+ * @returns Always null
65
+ */
66
+ until(event: string | Event, payload?: any[]): any;
67
+ /**
68
+ * Queue an event for later dispatch (no-op)
69
+ *
70
+ * @param event - Event name (ignored)
71
+ * @param payload - Event payload (ignored)
72
+ */
73
+ push(event: string, payload?: any[]): void;
74
+ /**
75
+ * Flush all queued events (no-op)
76
+ *
77
+ * @param event - Event name to flush (ignored)
78
+ */
79
+ flush(event: string): void;
80
+ /**
81
+ * Remove all listeners for an event (no-op)
82
+ *
83
+ * @param event - Event name (ignored)
84
+ */
85
+ forget(event: string): void;
86
+ /**
87
+ * Clear all queued events (no-op)
88
+ */
89
+ forgetPushed(): void;
90
+ /**
91
+ * Get raw listener mappings (always returns empty map)
92
+ *
93
+ * @returns Empty Map
94
+ */
95
+ getRawListeners(): Map<string, EventListener[]>;
96
+ }
97
+ //# sourceMappingURL=NullDispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NullDispatcher.d.ts","sourceRoot":"","sources":["../../src/Events/NullDispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,cAAe,YAAW,kBAAkB;IACvD;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAIhE;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;OAIG;IACH,SAAS,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAI5C;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAE,GAAG,EAAO,EAAE,IAAI,GAAE,OAAe,GAAG,GAAG,EAAE;IAIlF;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAE,GAAG,EAAO,GAAG,GAAG;IAItD;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,GAAG,EAAO,GAAG,IAAI;IAI9C;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3B;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;;;OAIG;IACH,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;CAGhD"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NullDispatcher = void 0;
4
+ /**
5
+ * Null Dispatcher
6
+ *
7
+ * A no-op event dispatcher implementation following the Null Object pattern.
8
+ * Useful for testing or when you want to disable event dispatching entirely.
9
+ *
10
+ * All methods are implemented but do nothing, allowing code to call
11
+ * dispatcher methods without side effects.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // Use in tests to disable events
16
+ * const dispatcher = new NullDispatcher();
17
+ * container.instance('events', dispatcher);
18
+ *
19
+ * // Events will be "dispatched" but nothing happens
20
+ * dispatcher.dispatch(new UserRegistered(user));
21
+ * // No listeners are called
22
+ *
23
+ * // Use for performance when events aren't needed
24
+ * if (config.disableEvents) {
25
+ * app.singleton('events', () => new NullDispatcher());
26
+ * }
27
+ * ```
28
+ */
29
+ class NullDispatcher {
30
+ /**
31
+ * Register an event listener (no-op)
32
+ *
33
+ * @param events - Event name(s) to listen for (ignored)
34
+ * @param listener - Listener to invoke (ignored)
35
+ */
36
+ listen(events, listener) {
37
+ // No-op
38
+ }
39
+ /**
40
+ * Check if an event has any listeners (always returns false)
41
+ *
42
+ * @param eventName - The event name to check (ignored)
43
+ * @returns Always false
44
+ */
45
+ hasListeners(eventName) {
46
+ return false;
47
+ }
48
+ /**
49
+ * Register an event subscriber (no-op)
50
+ *
51
+ * @param subscriber - The subscriber instance (ignored)
52
+ */
53
+ subscribe(subscriber) {
54
+ // No-op
55
+ }
56
+ /**
57
+ * Dispatch an event to all listeners (no-op, returns empty array)
58
+ *
59
+ * @param event - Event name or instance (ignored)
60
+ * @param payload - Additional arguments (ignored)
61
+ * @param halt - Stop on false return (ignored)
62
+ * @returns Empty array
63
+ */
64
+ dispatch(event, payload = [], halt = false) {
65
+ return [];
66
+ }
67
+ /**
68
+ * Dispatch an event until a listener returns a non-null response (always returns null)
69
+ *
70
+ * @param event - Event name or instance (ignored)
71
+ * @param payload - Additional arguments (ignored)
72
+ * @returns Always null
73
+ */
74
+ until(event, payload = []) {
75
+ return null;
76
+ }
77
+ /**
78
+ * Queue an event for later dispatch (no-op)
79
+ *
80
+ * @param event - Event name (ignored)
81
+ * @param payload - Event payload (ignored)
82
+ */
83
+ push(event, payload = []) {
84
+ // No-op
85
+ }
86
+ /**
87
+ * Flush all queued events (no-op)
88
+ *
89
+ * @param event - Event name to flush (ignored)
90
+ */
91
+ flush(event) {
92
+ // No-op
93
+ }
94
+ /**
95
+ * Remove all listeners for an event (no-op)
96
+ *
97
+ * @param event - Event name (ignored)
98
+ */
99
+ forget(event) {
100
+ // No-op
101
+ }
102
+ /**
103
+ * Clear all queued events (no-op)
104
+ */
105
+ forgetPushed() {
106
+ // No-op
107
+ }
108
+ /**
109
+ * Get raw listener mappings (always returns empty map)
110
+ *
111
+ * @returns Empty Map
112
+ */
113
+ getRawListeners() {
114
+ return new Map();
115
+ }
116
+ }
117
+ exports.NullDispatcher = NullDispatcher;
118
+ //# sourceMappingURL=NullDispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NullDispatcher.js","sourceRoot":"","sources":["../../src/Events/NullDispatcher.ts"],"names":[],"mappings":";;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAa,cAAc;IACzB;;;;;OAKG;IACH,MAAM,CAAC,MAAyB,EAAE,QAAuB;QACvD,QAAQ;IACV,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,SAAiB;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,UAA2B;QACnC,QAAQ;IACV,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAqB,EAAE,UAAiB,EAAE,EAAE,OAAgB,KAAK;QACxE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAqB,EAAE,UAAiB,EAAE;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,KAAa,EAAE,UAAiB,EAAE;QACrC,QAAQ;IACV,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAa;QACjB,QAAQ;IACV,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAa;QAClB,QAAQ;IACV,CAAC;IAED;;OAEG;IACH,YAAY;QACV,QAAQ;IACV,CAAC;IAED;;;;OAIG;IACH,eAAe;QACb,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;CACF;AAhGD,wCAgGC"}
@@ -0,0 +1,119 @@
1
+ import type { Event } from './Event';
2
+ import type { DispatcherContract } from './Contracts/Dispatcher';
3
+ /**
4
+ * Pending Dispatch
5
+ *
6
+ * A deferred dispatch helper that allows chaining configuration
7
+ * before actually dispatching an event.
8
+ *
9
+ * This is useful for building fluent APIs around event dispatching,
10
+ * similar to Laravel's job dispatching.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * // Defer dispatch with configuration
15
+ * const pending = new PendingDispatch(dispatcher, new UserRegistered(user));
16
+ * pending
17
+ * .onConnection('redis')
18
+ * .onQueue('notifications')
19
+ * .delay(60)
20
+ * .dispatch();
21
+ *
22
+ * // Or dispatch immediately with configuration
23
+ * PendingDispatch.for(dispatcher, new OrderPlaced(order))
24
+ * .delay(300)
25
+ * .dispatch();
26
+ * ```
27
+ */
28
+ export declare class PendingDispatch {
29
+ protected dispatcher: DispatcherContract;
30
+ protected event: Event;
31
+ /**
32
+ * Event configuration options
33
+ */
34
+ protected options: {
35
+ connection?: string;
36
+ queue?: string;
37
+ delay?: number;
38
+ };
39
+ /**
40
+ * Create a new pending dispatch instance
41
+ *
42
+ * @param dispatcher - The event dispatcher
43
+ * @param event - The event to dispatch
44
+ */
45
+ constructor(dispatcher: DispatcherContract, event: Event);
46
+ /**
47
+ * Static factory method for fluent API
48
+ *
49
+ * @param dispatcher - The event dispatcher
50
+ * @param event - The event to dispatch
51
+ * @returns PendingDispatch instance
52
+ */
53
+ static for(dispatcher: DispatcherContract, event: Event): PendingDispatch;
54
+ /**
55
+ * Set the queue connection for the event
56
+ *
57
+ * Only applicable if the event's listeners are queued
58
+ *
59
+ * @param connection - Connection name
60
+ * @returns This instance for chaining
61
+ */
62
+ onConnection(connection: string): this;
63
+ /**
64
+ * Set the queue for the event
65
+ *
66
+ * Only applicable if the event's listeners are queued
67
+ *
68
+ * @param queue - Queue name
69
+ * @returns This instance for chaining
70
+ */
71
+ onQueue(queue: string): this;
72
+ /**
73
+ * Set the delay before dispatching
74
+ *
75
+ * @param delay - Delay in seconds
76
+ * @returns This instance for chaining
77
+ */
78
+ delay(delay: number): this;
79
+ /**
80
+ * Set the delay before dispatching (alias for delay)
81
+ *
82
+ * @param delay - Delay in seconds
83
+ * @returns This instance for chaining
84
+ */
85
+ afterDelay(delay: number): this;
86
+ /**
87
+ * Apply the configured options to the event
88
+ *
89
+ * @returns The configured event
90
+ */
91
+ protected applyOptions(): Event;
92
+ /**
93
+ * Dispatch the event to all listeners
94
+ *
95
+ * @returns Array of results from listeners
96
+ */
97
+ dispatch(): any[];
98
+ /**
99
+ * Dispatch the event until the first listener returns a non-null response
100
+ *
101
+ * @returns The first non-null response
102
+ */
103
+ until(): any;
104
+ /**
105
+ * Conditionally dispatch the event
106
+ *
107
+ * @param condition - Boolean or function returning boolean
108
+ * @returns Array of results or empty array
109
+ */
110
+ dispatchIf(condition: boolean | (() => boolean)): any[];
111
+ /**
112
+ * Dispatch unless the condition is true
113
+ *
114
+ * @param condition - Boolean or function returning boolean
115
+ * @returns Array of results or empty array
116
+ */
117
+ dispatchUnless(condition: boolean | (() => boolean)): any[];
118
+ }
119
+ //# sourceMappingURL=PendingDispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PendingDispatch.d.ts","sourceRoot":"","sources":["../../src/Events/PendingDispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,eAAe;IAiBxB,SAAS,CAAC,UAAU,EAAE,kBAAkB;IACxC,SAAS,CAAC,KAAK,EAAE,KAAK;IAjBxB;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAM;IAEP;;;;;OAKG;gBAES,UAAU,EAAE,kBAAkB,EAC9B,KAAK,EAAE,KAAK;IAGxB;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,GAAG,eAAe;IAIzE;;;;;;;OAOG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKtC;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B;;;;OAIG;IACH,SAAS,CAAC,YAAY,IAAI,KAAK;IAgB/B;;;;OAIG;IACH,QAAQ,IAAI,GAAG,EAAE;IAKjB;;;;OAIG;IACH,KAAK,IAAI,GAAG;IAKZ;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,GAAG,EAAE;IAUvD;;;;;OAKG;IACH,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,GAAG,EAAE;CAS5D"}