JSPM

evnty

1.2.4
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 16088
  • Score
    100M100P100Q133086F
  • License MIT

0-Deps, simple, fast, for browser and node js anonymous event library

Package Exports

  • evnty

Readme

Evnty

0-Deps, simple, fast, for browser and node js anonymous event library.

Coverage Status Github Build Status NPM version Downloads Snyk

Table of Contents

Features

  • Supports ESM and CommonJS
  • Promises support
  • Full-featured typeScript support
  • Browser & Workers environment compatibility
  • Performance eventemitter3/eventemitter2/event-emitter/events/native node/native browser

Roadmap

  • Namespaces/Wildcards
  • Times To Listen (TTL)
  • Subscribe/UnSubscribe

Browser Support

Chrome Firefox Safari Opera Edge
Latest ✔ Latest ✔ Latest ✔ Latest ✔ Latest ✔

Installing

Using yarn:

yarn add evnty

Using npm:

npm install evnty

Interface

type Unsubscribe = () => void;
type Listener = (...args: any[]) => void;
type Dispose = () => void;
type Filter = (...args: any[]) => boolean;
type Mapper = <T = any>(...args: any[]) => T;
type Reducer = <T = any>(value: any, ...args: any[]) => T;

class Dismiss {
  async after(process: () => MaybePromise<any>): Promise<void>;
  afterTimes(count: number): () => void;
}

class Event {
  // Merges multiple events
  static merge(...events: Event[]): Event;
  // Emits event by interval
  static interval(interval: number): Event;

  readonly size: Number;

  constructor(dispose?: Dispose);
  lacks(listener: Listener): boolean;
  has(listener: Listener): boolean;
  off(listener: Listener): void;
  on(listener: Listener): Dismiss;
  once(listener: Listener): Dismiss;
  clear(): void;
  toPromise(): Promise<any[]>;
  filter(filter: Filter): Event;
  map(mapper: Mapper): Event;
  reduce(reducer: Reducer, init: any): Event;
  dispose(): Dispose;
}

Usage

import event, { once } from 'evnty';

const handleClick = ({ button }) => console.log('Clicked button is', button);
const clickEvent = event();
const unsubscribeClick = clickEvent.on(handleClick);

const keyPressEvent = event();
const handleKeyPress = ({ key }) => console.log('Key pressed', key);
const unsubscribeKeyPress = keyPressEvent.on(handleKeyPress);

const handleInput = ({ button, key }) => {};
const inputEvent = Event.merge(clickEvent, keyPressEvent);
inputEvent.on(handleInput);

const handleLeftClick = () => console.log('Left button is clicked');
const leftClickEvent = clickEvent.filter(({ button }) => button === 'left');
leftClickEvent.on(handleLeftClick);

setTimeout(() => keyPressEvent, 100, 'Enter');
await once(keyPressEvent);

keyPressEvent({ key: 'W' });
keyPressEvent({ key: 'A' });
keyPressEvent({ key: 'S' });
keyPressEvent({ key: 'D' });

clickEvent({ button: 'right' });
clickEvent({ button: 'left' });
clickEvent({ button: 'middle' });

unsubscribeClick();
unsubscribeKeyPress.after(() => once(keyPressEvent));
leftClickEvent.off(handleLeftClick);
keyPressEvent({ key: 'Esc' });

License

License Apache-2.0 Copyright (c) 2021-present Ivan Zakharchanka