A TypeScript friendly event emitter with lazy re-emitting events
Installations
npm install remitter
Developer Guide
Typescript
Yes
Module System
CommonJS
Node Version
20.18.0
NPM Version
10.8.2
Score
75.6
Supply Chain
96.6
Quality
81.7
Maintenance
100
Vulnerability
100
License
Releases
Unable to fetch releases
Contributors
Languages
TypeScript (93.6%)
JavaScript (6.16%)
CSS (0.24%)
Developer
Download Statistics
Total Downloads
100,663
Last Day
130
Last Week
702
Last Month
3,792
Last Year
61,823
GitHub Statistics
11 Stars
113 Commits
1 Forks
2 Watching
3 Branches
2 Contributors
Bundle Size
4.00 kB
Minified
1.47 kB
Minified + Gzipped
Package Meta Information
Latest Version
0.4.6
Package Id
remitter@0.4.6
Unpacked Size
69.09 kB
Size
10.63 kB
File Count
15
NPM Version
10.8.2
Node Version
20.18.0
Publised On
22 Oct 2024
Total Downloads
Cumulative downloads
Total Downloads
100,663
Last day
-22.6%
130
Compared to previous day
Last week
-26.7%
702
Compared to previous week
Last month
-4.4%
3,792
Compared to previous month
Last year
107%
61,823
Compared to previous year
Daily Downloads
Weekly Downloads
Monthly Downloads
Yearly Downloads
remitter
A tiny TypeScript friendly event emitter that supports lazy re-emitting events from other sources.
Install
1npm add remitter
Usage
1import { Remitter } from "remitter"; 2 3interface EventData { 4 event1: string; 5 event2: void; 6} 7 8const remitter = new Remitter<EventData>(); 9 10const disposer = remitter.on("event1", value => { 11 console.log("event1", value); 12}); 13 14remitter.once("event1", value => { 15 console.log("event1-once", value); 16}); 17 18remitter.has("event1"); // true 19 20remitter.emit("event1", "hello"); // logs "event1 hello" and "event1-once hello" 21 22remitter.emit("event1", "hello"); // logs "event1 hello" 23 24remitter.emit("event2"); // nothing logs 25 26disposer(); 27remitter.emit("event1", "world"); // nothing logs 28 29remitter.clear("event2"); // remove all listeners for event2 30 31remitter.has(); // false 32 33remitter.dispose(); // removes all listeners and dispose tapped events
Listen to any event
1import { Remitter } from "remitter"; 2 3interface EventData { 4 event1: string; 5 event2: string; 6} 7 8const remitter = new Remitter<EventData>(); 9 10remitter.onAny(({ event, data }) => { 11 console.log(event, data); 12}); 13 14remitter.emit("event1", "hello"); // logs "event1 hello" 15remitter.emit("event2", "world"); // logs "event2 world"
Listen to unhandled subscriber errors
1import { Remitter } from "remitter"; 2 3interface EventData { 4 event1: string; 5 event2: string; 6} 7 8const remitter = new Remitter<EventData>(); 9 10remitter.onError(error => { 11 console.log(error); 12}); 13 14remitter.emit("event1", () => { 15 throw new Error("error"); 16}); 17 18remitter.emit("event2", async () => { 19 await new Promise(resolve => setTimeout(resolve, 100)); 20 throw new Error("async-error"); 21});
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.
1remitter.remit("cursor", () => { 2 const handler = ev => { 3 remitter.emit("cursor", { x: ev.clientX, y: ev.clientY }); 4 }; 5 6 window.addEventListener("mousemove", handler); 7 8 return () => { 9 window.removeListener("mousemove", handler); 10 }; 11}); 12 13// Remit callback does not execute until the first "cursor" listener is added 14remitter.on("cursor", value => { 15 console.log("cursor", value); 16}); 17 18// Remit callback is disposed when no listener on the 19// "cursor" event. (`window.removeListener` triggered) 20remitter.clear("cursor");
The callback function can also be a pure function.
1const myCursorEvent = remitter => { 2 const handler = ev => { 3 remitter.emit("cursor", { x: ev.clientX, y: ev.clientY }); 4 }; 5 6 window.addEventListener("mousemove", handler); 7 8 return () => { 9 window.removeListener("mousemove", handler); 10 }; 11}; 12 13remitter.remit("cursor", myCursorEvent);
Acknowledgment
Huge thanks to @recursivefunk for giving away the NPM package name remitter
.
No vulnerabilities found.
No security vulnerabilities found.