Skip to content

Adapters ​

Adapters are used to make handlery work with all kinds of emitter libraries.

They ensure that the emitter passed into handlery has a compatible API, meaning

  • Necessary functions like on, off, emit etc.
  • A promise-based listener approach
  • listener methods that return unsubscribe functions
  • ... and some more

The adapter acts like a 'bridge' between the emitter and handlery.

Supported emitters ​

Currently, we're focusing on making things stable. Thus, only two emitters are supported right now:

For example ​

Here is how the emittery adapter looks like (at the time of this writing, it might be outdated. See the source if you need to)

ts
export function emitteryAdapter<TEvents extends Events>(
  emittery: Emittery<TEvents, TEvents & OmnipresentEventData, never>,
): Emitter<TEvents> {
  return {
    on: <K extends PropertyKey>(event: K | K[], listener: (data: TEvents[K]) => void | Promise<void>) => {
      return emittery.on(event, listener);
    },
    off: <K extends PropertyKey>(event: K | K[], listener: (data: TEvents[K]) => void | Promise<void>) => {
      emittery.off(event, listener);
    },
    once: <K extends PropertyKey>(event: K | K[], listener: (data: TEvents[K]) => void | Promise<void>) => {
      void emittery.once(event).then(listener);

      return () => {
        emittery.off(event, listener);
      };
    },
    emit: <K extends PropertyKey>(event: K, data: TEvents[K]) => {
      return emittery.emit(event, data);
    },
  };
}

There is not much going on here! It mostly just takes emittery and wraps it's functions with proper types.