From 107d328f578ac9b7a97acf53fca374a351409e81 Mon Sep 17 00:00:00 2001 From: Hendrik Mans Date: Sat, 16 Apr 2022 17:04:54 +0200 Subject: [PATCH] Signals are now classes. For easier typing. --- src/Signal.ts | 26 +++++++++++--------------- test/Signal.test.ts | 14 +++++++++++--- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/Signal.ts b/src/Signal.ts index 0207431..7f2868c 100644 --- a/src/Signal.ts +++ b/src/Signal.ts @@ -1,26 +1,22 @@ -export function Signal() { - type Listener = (payload: Payload) => void +export class Signal void> { + private listeners = new Array() - const listeners = new Array() - - function add(fn: Listener) { - listeners.push(fn) + add(fn: Listener) { + this.listeners.push(fn) } - function remove(fn: Listener) { - const pos = listeners.indexOf(fn, 0) - if (pos > -1) listeners.splice(pos, 1) + remove(fn: Listener) { + const pos = this.listeners.indexOf(fn, 0) + if (pos > -1) this.listeners.splice(pos, 1) } - function clear() { - listeners.length = 0 + clear() { + this.listeners.length = 0 } - function emit(payload: Payload) { - for (const listener of listeners) { + emit(payload: Payload) { + for (const listener of this.listeners) { listener(payload) } } - - return { add, remove, clear, emit } } diff --git a/test/Signal.test.ts b/test/Signal.test.ts index 590dc8c..02056f1 100644 --- a/test/Signal.test.ts +++ b/test/Signal.test.ts @@ -4,7 +4,7 @@ describe("Signal", () => { it("provides a signal that listeners can be added to which are then called back once the signal is invoked", () => { let proof = "" - const signal = Signal() + const signal = new Signal() signal.add((payload) => (proof = payload)) signal.emit("it works") @@ -16,7 +16,7 @@ describe("Signal", () => { let proof = "" const listener = (payload: string) => (proof = payload) - const signal = Signal() + const signal = new Signal() signal.add(listener) signal.emit("it works") expect(proof).toEqual("it works") @@ -32,7 +32,7 @@ describe("Signal", () => { let proof = "" const listener = (payload: string) => (proof = payload) - const signal = Signal() + const signal = new Signal() signal.add(listener) signal.emit("it works") expect(proof).toEqual("it works") @@ -42,4 +42,12 @@ describe("Signal", () => { expect(proof).toEqual("it works") }) }) + + it("supports signals without payloads", () => { + let count = 0 + const signal = new Signal() + signal.add(() => count++) + signal.emit() + expect(count).toEqual(1) + }) })