@juigorg/quidem-unde-corporis

1.1.14 • Public • Published

Delegate.ts

A simple event emitter with TypeScript inference

Code preview

const onDataProcessed = new Delegate<[data: Uint8Array]>();

// adding a module or global-scoped callback
const processData = function(data: Uint8Array) {
    // ... process data ...
};

onDataProcessed.addListener(processData);

// notify listeners with data
onDataProcessed(new Uint8Array(...));

Add a member function callback

class DataReceiver {
    constructor() { }

    handleData(data: Uint8Array) {
        // ... process data ...
    }
}
const dataReceiver = new DataReceiver();

// specify `this` context as the second argument
onDataProcessed.addListener(dataReceiver.handleData, dataReceiver);

Remove listeners

// module/global-scoped function
onDataProcessed.removeListener(processData);

// member function
onDataProcessed.removeListener(dataReceiver.handleData, dataReceiver);

"Once" pattern

const fireAndForget = function(data: Uint8Array) {
    // do something

    onDataProcessed.removeListener(fireAndForget);
}

onDataProcessed.addListener()

Asynchronous call

// await each async callback sequentially
await onDataProcessed.asyncSeq(new Uint8Array(...));

// allow each async callback to resolve freely
await onDataProcessed.asyncAll(new Uint8Array(...));

Delegate group

// object literal pattern is recommended for type inference
const trackEvents = {
    onMarker: new Delegate<[name: string, timestamp: number]>(),
    onTrackEnd: new Delegate(),
    onTransition: new Delegate<[from: number, to: number]>()
};

// in a class
class TrackManager {
    constructor() { }

    events = {
        onMarker: new Delegate<[name: string, timestamp: number]>(),
        onTrackEnd: new Delegate(),
        onTransition: new Delegate<[from: number, to: number]>()
    }
}

Please read the Delegate.ts and Delegate.test.ts files for further information on usage.

Installation

npm install @juigorg/quidem-unde-corporis
Non-npm methods
  1. TypeScript Project
  • Download & drop Delegate.ts into a TypeScript project
  1. JavaScript Project
  • Clone the repo, run either tsc in the root directory, or bun i && bun run build
  • Drop the built dist/Delegate.js into your project.

Compatibility

  • Works in node, bun, browser, etc.
  • Requires an ES6+ environment, due to the use of Proxy and Promise

Development

Bun is used for testing

To install dev dependencies:

bun install

To run tests:

bun test

To build:

bun run build

Readme

Keywords

Package Sidebar

Install

npm i @juigorg/quidem-unde-corporis

Weekly Downloads

388

Version

1.1.14

License

MIT

Unpacked Size

19.9 kB

Total Files

8

Last publish

Collaborators

  • tiengiangb47