Built and signed on GitHub ActionsBuilt and signed on GitHub Actions
Built and signed on GitHub Actions
latest
lisez/xevtAnother event emiiter. Support sync/async/conjoined and mixed them.
This package works with Cloudflare Workers, Node.js, Deno, Bun, Browsers




JSR Score
47%
Published
a year ago (0.9.0)
xevt
another event emiiter.
features:
- can listen async/conjoined event.
- support to mixed async/sync handlers
- conditional event handlers.
- return unscriber when you subscribe an event.
Installation
npm install xevt
Then:
import { Xevt } from "xevt";
Usage
Basic usage
const emitter = new Xevt(); let result = 0; emitter.on("event", () => { result++; }); emitter.emit("event");
Async event
const emitter = new Xevt(); let result = 0; emitter.on("event", async () => { result++; }); await emitter.emit("event");
Conditional event handlers.
IMPORTANT:
- NOT supported in conjoined events.
- NOT supported any arguments in handlers.
- It will be executed after the triggered event finished. (Blocking mode.)
const emitter = new Xevt(); const result: any[] = []; emitter.on("event", async (arg: number) => { result.push(arg); return arg % 2 === 0; }); emitter.on("event", { true: async () => { result.push("first"); }, }); emitter.on("event", { false: async () => { result.push("fail"); }, }); emitter.on("event", { true: () => { result.push(100); }, false: () => { result.push(99); }, }); emitter.emit("event", 1); emitter.emit("event", 2); await delay(10); // [1, "fail", 99, 2, "first", 100]
Conjoined event
IMPORTANT: conjoined events are not supported any arguments in handlers.
const emitter = new Xevt(); let count = 0; emitter.on(["event1", "event2"], () => { count++; }); emitter.emit("event1"); emitter.emit("event2"); console.log(count); // 1
Mixed async/sync handlers
Non-blocking in default.
const emitter = new Xevt(); const result: number[] = []; emitter.on("event", (data) => { result.push(data); }); emitter.on( "event", async (data) => new Promise((res) => { setTimeout(() => { result.push(data); res(true); }, 10); }), ); for (let i = 0; i < 5; i++) { emitter.emit("event", i); } // [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
Blocking mode.
const emitter = new Xevt(); const result: number[] = []; emitter.on("event", (data) => { result.push(data); }); emitter.on( "event", // deno-lint-ignore require-await async (data) => new Promise((res) => { setTimeout(() => { result.push(data); res(true); }, 1); }), { async: true }, ); for (let i = 0; i < 5; i++) { emitter.emit("event", i); } await delay(15); // [0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
Return unscriber after registered an event
const emitter = new Xevt(); const result: number[] = []; const unscribe = emitter.on("event", (arg: number) => { result.push(arg); }); unscribe();
const emitter = new Xevt(); const result: number[] = []; const unscribe = emitter.conjoin(["event1", "event2"], () => { result.push(1); }); unscribe();
Debug mode
const emitter = new Xevt(); emitter.debug = true;
Then you can see the debug information in the console.
Similar projects
Built and signed on
GitHub Actions
Add Package
deno add jsr:@lisez/xevt
Import symbol
import * as xevt from "@lisez/xevt";
Import directly with a jsr specifier
import * as xevt from "jsr:@lisez/xevt";
Add Package
pnpm i jsr:@lisez/xevt
pnpm dlx jsr add @lisez/xevt
Import symbol
import * as xevt from "@lisez/xevt";
Add Package
yarn add jsr:@lisez/xevt
yarn dlx jsr add @lisez/xevt
Import symbol
import * as xevt from "@lisez/xevt";
Add Package
vlt install jsr:@lisez/xevt
Import symbol
import * as xevt from "@lisez/xevt";
Add Package
npx jsr add @lisez/xevt
Import symbol
import * as xevt from "@lisez/xevt";
Add Package
bunx jsr add @lisez/xevt
Import symbol
import * as xevt from "@lisez/xevt";