1.3.1 • Published 3 years ago
@nano-utils/evt-src v1.3.1
Description
A lightweight event source library inspired by the nanoevents library
Installation
npm i @nano-utils/event-srcor
yarn add @nano-utils/event-srcUsage
import { EventSrc } from '@nano-utils/event-src';
const src = new EventSrc();
src.on('MY_EVENT', (evt) => {
console.log(`Foo: ${evt.foo}`);
});
src.dispatch('MY_EVENT', { foo: 'bar' }); // Foo: barThis package comes fully typed:
import { EventSrc } from '@nano-utils/event-src';
type Events = {
MY_EVENT: [{ foo: string }];
};
const src = new EventSrc<Events>();
src.on('MY_EVENT', (evt) => {
console.log(`Foo: ${evt.foo}`);
});
src.dispatch('MY_EVENT', { foo: 'baz' }); // Foo: bazThe type Events may also be declared as an interface:
import { EventSrc } from '@nano-utils/event-src';
interface Events {
MY_EVENT: [{ foo: string }];
}
const src = new EventSrc<Events>();
src.on('MY_EVENT', (evt) => {
console.log(`Foo: ${evt.foo}`);
});
src.dispatch('MY_EVENT', { foo: 'fizz' }); // Foo: fizzEventSrc.wrap
EventSrc may also be used to "wrap" existing event sources with an addEventListener method (ie. DOM Elements). An array of the underlying events to listen to must be passed in.
import { EventSrc } from '@nano-utils/event-src';
const btn = document.getElementById<HTMLButtonElement>('my-btn');
const src = EventSrc.wrap<HTMLElementEventMap>(btn, 'click');
src.on('click', (evt) => console.log(evt));Usage Notes:
- All listeners for each event are run synchronously, in the order in which they are added