emittery 1.0.2 → 1.1.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/index.d.ts +4 -2
- package/index.js +36 -11
- package/package.json +2 -2
- package/readme.md +18 -3
package/index.d.ts
CHANGED
|
@@ -341,7 +341,8 @@ export default class Emittery<
|
|
|
341
341
|
*/
|
|
342
342
|
on<Name extends keyof AllEventData>(
|
|
343
343
|
eventName: Name | readonly Name[],
|
|
344
|
-
listener: (eventData: AllEventData[Name]) => void | Promise<void
|
|
344
|
+
listener: (eventData: AllEventData[Name]) => void | Promise<void>,
|
|
345
|
+
options?: {signal?: AbortSignal}
|
|
345
346
|
): UnsubscribeFunction;
|
|
346
347
|
|
|
347
348
|
/**
|
|
@@ -520,7 +521,8 @@ export default class Emittery<
|
|
|
520
521
|
listener: (
|
|
521
522
|
eventName: keyof EventData,
|
|
522
523
|
eventData: EventData[keyof EventData]
|
|
523
|
-
) => void | Promise<void
|
|
524
|
+
) => void | Promise<void>,
|
|
525
|
+
options?: {signal?: AbortSignal}
|
|
524
526
|
): UnsubscribeFunction;
|
|
525
527
|
|
|
526
528
|
/**
|
package/index.js
CHANGED
|
@@ -165,13 +165,15 @@ function defaultMethodNamesOrAssert(methodNames) {
|
|
|
165
165
|
const isMetaEvent = eventName => eventName === listenerAdded || eventName === listenerRemoved;
|
|
166
166
|
|
|
167
167
|
function emitMetaEvent(emitter, eventName, eventData) {
|
|
168
|
-
if (isMetaEvent(eventName)) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
168
|
+
if (!isMetaEvent(eventName)) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
try {
|
|
173
|
+
canEmitMetaEvents = true;
|
|
174
|
+
emitter.emit(eventName, eventData);
|
|
175
|
+
} finally {
|
|
176
|
+
canEmitMetaEvents = false;
|
|
175
177
|
}
|
|
176
178
|
}
|
|
177
179
|
|
|
@@ -273,7 +275,7 @@ export default class Emittery {
|
|
|
273
275
|
}
|
|
274
276
|
}
|
|
275
277
|
|
|
276
|
-
on(eventNames, listener) {
|
|
278
|
+
on(eventNames, listener, {signal} = {}) {
|
|
277
279
|
assertListener(listener);
|
|
278
280
|
|
|
279
281
|
eventNames = Array.isArray(eventNames) ? eventNames : [eventNames];
|
|
@@ -295,7 +297,18 @@ export default class Emittery {
|
|
|
295
297
|
}
|
|
296
298
|
}
|
|
297
299
|
|
|
298
|
-
|
|
300
|
+
const off = () => {
|
|
301
|
+
this.off(eventNames, listener);
|
|
302
|
+
signal?.removeEventListener('abort', off);
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
signal?.addEventListener('abort', off, {once: true});
|
|
306
|
+
|
|
307
|
+
if (signal?.aborted) {
|
|
308
|
+
off();
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
return off;
|
|
299
312
|
}
|
|
300
313
|
|
|
301
314
|
off(eventNames, listener) {
|
|
@@ -405,14 +418,26 @@ export default class Emittery {
|
|
|
405
418
|
/* eslint-enable no-await-in-loop */
|
|
406
419
|
}
|
|
407
420
|
|
|
408
|
-
onAny(listener) {
|
|
421
|
+
onAny(listener, {signal} = {}) {
|
|
409
422
|
assertListener(listener);
|
|
410
423
|
|
|
411
424
|
this.logIfDebugEnabled('subscribeAny', undefined, undefined);
|
|
412
425
|
|
|
413
426
|
anyMap.get(this).add(listener);
|
|
414
427
|
emitMetaEvent(this, listenerAdded, {listener});
|
|
415
|
-
|
|
428
|
+
|
|
429
|
+
const offAny = () => {
|
|
430
|
+
this.offAny(listener);
|
|
431
|
+
signal?.removeEventListener('abort', offAny);
|
|
432
|
+
};
|
|
433
|
+
|
|
434
|
+
signal?.addEventListener('abort', offAny, {once: true});
|
|
435
|
+
|
|
436
|
+
if (signal?.aborted) {
|
|
437
|
+
offAny();
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
return offAny;
|
|
416
441
|
}
|
|
417
442
|
|
|
418
443
|
anyEvent() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "emittery",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Simple and modern async event emitter",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "sindresorhus/emittery",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"ava": "^4.3.3",
|
|
58
58
|
"delay": "^5.0.0",
|
|
59
59
|
"nyc": "^15.1.0",
|
|
60
|
-
"p-event": "^
|
|
60
|
+
"p-event": "^6.0.0",
|
|
61
61
|
"tsd": "^0.23.0",
|
|
62
62
|
"xo": "^0.55.0"
|
|
63
63
|
},
|
package/readme.md
CHANGED
|
@@ -197,7 +197,7 @@ emitter.emit('test');
|
|
|
197
197
|
//=> [subscribe]: test
|
|
198
198
|
```
|
|
199
199
|
|
|
200
|
-
#### on(eventName | eventName[], listener)
|
|
200
|
+
#### on(eventName | eventName[], listener, options?: {signal?: AbortSignal})
|
|
201
201
|
|
|
202
202
|
Subscribe to one or more events.
|
|
203
203
|
|
|
@@ -222,6 +222,21 @@ emitter.emit('🦄', '🌈'); // log => '🌈' x2
|
|
|
222
222
|
emitter.emit('🐶', '🍖'); // log => '🍖'
|
|
223
223
|
```
|
|
224
224
|
|
|
225
|
+
You can pass an [abort signal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to unsubscribe too:
|
|
226
|
+
|
|
227
|
+
```js
|
|
228
|
+
import Emittery from 'emittery';
|
|
229
|
+
|
|
230
|
+
const abortController = new AbortController();
|
|
231
|
+
|
|
232
|
+
emitter.on('🐗', data => {
|
|
233
|
+
console.log(data);
|
|
234
|
+
}, {signal: abortController.signal});
|
|
235
|
+
|
|
236
|
+
abortController.abort();
|
|
237
|
+
emitter.emit('🐗', '🍞'); // nothing happens
|
|
238
|
+
```
|
|
239
|
+
|
|
225
240
|
##### Custom subscribable events
|
|
226
241
|
|
|
227
242
|
Emittery exports some symbols which represent "meta" events that can be passed to `Emitter.on` and similar methods.
|
|
@@ -399,11 +414,11 @@ Same as above, but it waits for each listener to resolve before triggering the n
|
|
|
399
414
|
|
|
400
415
|
If any of the listeners throw/reject, the returned promise will be rejected with the error and the remaining listeners will *not* be called.
|
|
401
416
|
|
|
402
|
-
#### onAny(listener)
|
|
417
|
+
#### onAny(listener, options?: {signal?: AbortSignal})
|
|
403
418
|
|
|
404
419
|
Subscribe to be notified about any event.
|
|
405
420
|
|
|
406
|
-
Returns a method to unsubscribe.
|
|
421
|
+
Returns a method to unsubscribe. Abort signal is respected too.
|
|
407
422
|
|
|
408
423
|
##### listener(eventName, data)
|
|
409
424
|
|