diff --git a/README.md b/README.md index 0796e5f..11dcd11 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,7 @@ const emitter: mitt.Emitter = mitt(); - [Parameters](#parameters-1) - [emit](#emit) - [Parameters](#parameters-2) +- [clear](#clear) ### mitt @@ -142,6 +143,12 @@ Note: Manually firing "\*" handlers is not supported. - `type` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) \| [symbol](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Symbol))** The event type to invoke - `evt` **Any?** Any value (object is recommended and powerful), passed to each handler +### clear + +Remove all event handlers. + +Note: This will also remove event handlers passed via `mitt(all: EventHandlerMap)`. + ## Contribute First off, thanks for taking the time to contribute! diff --git a/src/index.ts b/src/index.ts index e640292..38bf19b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -21,6 +21,8 @@ export interface Emitter { emit(type: EventType, event?: T): void; emit(type: '*', event?: any): void; + + clear(): void; } /** Mitt: Tiny (~200b) functional event emitter / pubsub. @@ -73,6 +75,15 @@ export default function mitt(all?: EventHandlerMap): Emitter { emit(type: EventType, evt: any) { ((all.get(type) || []) as EventHandlerList).slice().map((handler) => { handler(evt); }); ((all.get('*') || []) as WildCardEventHandlerList).slice().map((handler) => { handler(type, evt); }); + }, + + /** + * Remove all event handlers. + * + * Note: This will also remove event handlers passed via `mitt(all: EventHandlerMap)`. + */ + clear() { + all.clear(); } }; } diff --git a/test/index.js b/test/index.js index a837d36..b8d0af3 100644 --- a/test/index.js +++ b/test/index.js @@ -179,4 +179,22 @@ describe('mitt#', () => { expect(star).to.have.been.calledOnce.and.calledWith('bar', eb); }); }); + + describe('clear()', () => { + it('should be a function', () => { + expect(inst) + .to.have.property('clear') + .that.is.a('function'); + }); + + it('should remove existing handlers', () => { + const foo = () => {}; + const bar = () => {}; + inst.on('foo', foo); + inst.on('bar', bar); + inst.clear(); + expect(events.get('foo')).to.be.undefined; + expect(events.size).to.equal(0); + }); + }); });