Skip to main content
Home

@lisez/xevt@0.9.0
Built and signed on GitHub Actions

Another event emiiter. Support sync/async/conjoined and mixed them.

This package works with Cloudflare Workers, Node.js, Deno, Bun, Browsers
This package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
This package works with Bun
This package works with 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.

Coverage Status License: MIT Github release NPM Version JSR

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

New Ticket: Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@lisez/xevt

Import symbol

import * as xevt from "@lisez/xevt";
or

Import directly with a jsr specifier

import * as xevt from "jsr:@lisez/xevt";

Add Package

pnpm i jsr:@lisez/xevt
or (using pnpm 10.8 or older)
pnpm dlx jsr add @lisez/xevt

Import symbol

import * as xevt from "@lisez/xevt";

Add Package

yarn add jsr:@lisez/xevt
or (using Yarn 4.8 or older)
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";