A universal, human-centric, replayable event emitter.
- Motivation
- Features
- Installation
- Usage
- Creating a noel instance
- Emitting and listening to events
- Replaying events
- Disabling replay
- Enabling replay
- Removing an event listener
- Removing all event listeners
- Clearing an event replay buffer
- Clearing all events replay buffers
- Changing the events replay buffer size
- Disabling the no event listeners warning
- Enabling the no event listeners warning
- Development
The world just like software is full of events. Sometimes these events occur while we are busy doing other things. Wouldn't it be nice to have a way to replay all events? Noel is the way.
By being able to replay events we can design reactive systems without having to worry about timing.
For example, code like
// Check if there is a user in case we missed the userChanged event
const user = sessionService.getUser();
if(user) updateAvatarPhoto(user)
// Listen for further changes
sessionService.listenUserChanged(updateAvatarPhoto);can become
sessionService.listenUserChanged(doSomethingWithUser).replay();Meaning that if the userChanged event was already fired, it will be replayed with the last arguments and if it gets fired again, we'll be listening.
- Event replaying. Never miss a beat.
- API designed for humans. No useless concepts to try to make sense of.
npm install noelconst Noel = require('Noel');
const noel = new Noel();// Listen for an event
noel.on('friday', partyAllNightLong);
// Emit an event
noel.emit('friday', arg1, arg2 ....);// Replay an event once
noel.on(eventName, eventListener).replay();
// Replay an event x amount of times
noel.on(eventName, eventListener).replay(x);// When creating the noel instance
const noel = new Noel({
replay: false
});
// At runtime
noel.disableReplay(anotherBufferSize);Please do note that replay is enabled by default, so this should only be necessary if it was disabled at runtime.
// At runtime
noel.enableReplay(anotherBufferSize);noel.removeListener(eventName, eventListener);or if you save a reference to the eventManager
const eventManager = noel.on('myEvent', eventListener);
// ...
eventManager.remove();noel.removeAllListeners(eventName, eventListener);If you would like to clear all saved event emissions for replay
noel.clearReplayBufferForEvent(eventName);If you would like to clear all saved events emissions for replay
noel.clearEventsReplayBuffers();Or in human words, changing the amount of event emissions that are saved for replays.
Default is 1.
// When creating the noel instance
const noel = new Noel({
replayBufferSize: aNewBufferSize
});
// ...
// At runtime
noel.setReplayBufferSize(anotherBufferSize);When an event is emitted, no listeners have been set AND the replay was disabled so there is no way of doing anything with the emission, a warning will be logged into the console if available. To disable this behaviour:
// When creating the noel instance
const noel = new Noel({
noEventListenersWarning: false
});
// ...
// At runtime
noel.disableNoEventListenersWarning();Please do note that the no event listeners warning is enabled by default, so this should only be necessary if it was disabled at runtime.
noel.enableNoEventListenersWarning();git clone [email protected]:lifenautjoe/noel.gitnpm t: Run test suitenpm start: Runsnpm run buildin watch modenpm run test:watch: Run test suite in interactive watch modenpm run test:prod: Run linting and generate coveragenpm run build: Generate bundles and typings, create docsnpm run lint: Lints codenpm run commit: Commit using conventional commit style (husky will tell you to use it if you haven't 😉)
Author Joel Hernandez
