@@ -98,7 +98,7 @@ export class Emitter extends EventEmitter {
98
98
/**
99
99
* Singleton store
100
100
*/
101
- static singleton : Emitter | undefined = undefined ;
101
+ static instance : Emitter | undefined = undefined ;
102
102
url ?: string ;
103
103
protocol : Protocol ;
104
104
binaryEmitter : EmitterFunction ;
@@ -153,20 +153,42 @@ export class Emitter extends EventEmitter {
153
153
*
154
154
* @return {Emitter } return Emitter singleton
155
155
*/
156
- static getSingleton ( ) : Emitter {
157
- if ( ! Emitter . singleton ) {
158
- Emitter . singleton = new Emitter ( ) ;
156
+ static getInstance ( ) : Emitter {
157
+ if ( ! Emitter . instance ) {
158
+ Emitter . instance = new Emitter ( ) ;
159
159
}
160
- return Emitter . singleton ;
160
+ return Emitter . instance ;
161
+ }
162
+
163
+ /**
164
+ * Add a listener for eventing
165
+ *
166
+ * @param {string } event type to listen to
167
+ * @param {Function } listener to call on event
168
+ * @return {void }
169
+ */
170
+ static on ( event : "cloudevent" | "newListener" | "removeListener" , listener : ( ...args : any [ ] ) => void ) : void {
171
+ this . getInstance ( ) . on ( event , listener ) ;
161
172
}
162
173
163
174
/**
164
175
* Emit an event inside this application
165
176
*
166
177
* @param {CloudEvent } event to emit
178
+ * @param {boolean } ensureDelivery fail the promise if one listener fail
167
179
* @return {void }
168
180
*/
169
- static emitEvent ( event : CloudEvent ) : void {
170
- this . getSingleton ( ) . emit ( "event" , event ) ;
181
+ static async emitEvent ( event : CloudEvent , ensureDelivery = false ) : Promise < void > {
182
+ if ( ! ensureDelivery ) {
183
+ // Ensure delivery is disable so we do wait for Promise
184
+ Emitter . getInstance ( ) . emit ( "cloudevent" , event ) ;
185
+ } else {
186
+ // Execute all listeners and wrap them in a Promise
187
+ await Promise . all (
188
+ Emitter . getInstance ( )
189
+ . listeners ( "cloudevent" )
190
+ . map ( ( l ) => Promise . resolve ( l ( event ) ) ) ,
191
+ ) ;
192
+ }
171
193
}
172
194
}
0 commit comments