remitter


A tiny TypeScript friendly event emitter that supports lazy re-emitting events form other sources.
Install
npm add remitter
Usage
import { Remitter } from "remitter";
interface EventData {
event1: string;
event2: void;
}
const remitter = new Remitter<EventData>();
const disposer = remitter.on("event1", value => {
console.log("event1", value);
});
remitter.once("event1", value => {
console.log("event1-once", value);
});
remitter.count("event1");
remitter.emit("event1", "hello");
remitter.emit("event1", "hello");
remitter.emit("event2");
disposer();
remitter.emit("event1", "world");
remitter.clear("event2");
remitter.count();
remitter.dispose();
Listen to any event
import { Remitter } from "remitter";
interface EventData {
event1: string;
event2: string;
}
const remitter = new Remitter<EventData>();
remitter.on(remitter.ANY_EVENT, ({ event, data }) => {
console.log(event, data);
});
remitter.emit("event1", "hello");
remitter.emit("event2", "world");
Remit
You may tap into other events easily with remit
. It is lazy-executed when listener count of the event name grows from 0 to 1. It is disposed when listener count of the event name drops from 1 to 0.
remitter.remit("cursor", () => {
const handler = ev => {
remitter.emit("cursor", { x: ev.clientX, y: ev.clientY });
};
window.addEventListener("mousemove", handler);
return () => {
window.removeListener("mousemove", handler);
};
});
remitter.on("cursor", value => {
console.log("cursor", value);
});
remitter.clear("cursor");
The callback function can also be a pure function.
const myCursorEvent = remitter => {
const handler = ev => {
remitter.emit("cursor", { x: ev.clientX, y: ev.clientY });
};
window.addEventListener("mousemove", handler);
return () => {
window.removeListener("mousemove", handler);
};
};
remitter.remit("cursor", myCursorEvent);
Acknowledgment
Huge thanks to @recursivefunk for giving away the NPM package name remitter
.