Skip to content

Commit

Permalink
keyv - adding in once event handler (#1171)
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredwray authored Oct 21, 2024
1 parent abfc8cc commit 22bf937
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
2 changes: 1 addition & 1 deletion packages/keyv/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "keyv",
"version": "5.1.1",
"version": "5.1.2",
"description": "Simple key-value storage with support for multiple backends",
"type": "module",
"main": "dist/index.cjs",
Expand Down
9 changes: 9 additions & 0 deletions packages/keyv/src/event-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,15 @@ class EventManager {
}
}

public once(event: string, listener: EventListener): void {
const onceListener: EventListener = (...arguments_: any[]) => {
listener(...arguments_);
this.off(event, onceListener);
};

this.on(event, onceListener);
}

// Emit an event
public emit(event: string, ...arguments_: any[]): void {
const listeners = this._eventListeners.get(event);
Expand Down
14 changes: 14 additions & 0 deletions packages/keyv/test/event-manager.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,17 @@ test.it('if it is an error with no listeners throw error', () => {
emitter.emit('error', new Error('test'));
}).toThrow(Error);
});

test.it('once method', t => {
const emitter = new EventManager();
let dataReceived = 0;

emitter.once('test-event', () => {
dataReceived++;
});

emitter.emit('test-event');
emitter.emit('test-event');

t.expect(dataReceived).toBe(1);
});

0 comments on commit 22bf937

Please sign in to comment.