@axel669/event-bridge

1.0.2 • Public • Published

EventBridge

A pubsub-like event emitter with neat features for node & browser

Installation

Yarn

yarn install @axel669/event-bridge

Browser (Standalone)

<script src="https://cdn.jsdelivr.net/npm/@axel669/event-bridge/dist/event-bridge.js"></script>

API

on(type, listener)

  • type:String The type of events to listen for
  • listener:Function The listener function Adds and event listener. Returns a function that removes the listeners.

once(type, listener)

  • type:String The type of events to listen for
  • listener:Function The listener function Adds and event listener that is only triggered once. Returns a function that removes the listener if it hasn't been fired (and just does a noop if the listener has been triggered).

emit(type, data)

  • type:String The type of event to trigger
  • data:Any Data to attach to the event Emits an event to the appropriate listeners.

pull(source, prefix)

  • source:EventBridge The EventBridge to pull events from
  • prefix:String Optional A prefix to attach to the event type when pulling. If nothing is given, will use the exact event type. Pulls all events from the given bridge to the current one. Returns a function to cancel the pulling (like the on function).

bind(source, types)

  • source:EventEmitter The source to pull events from. An EventEmitter is any object that has addEventListener and removeEventListener functions.
  • type:Array[String] The list of event types to pull from the source Pulls events from the source and passes them into the EventBridge. Returns a function that stops the event pulling.

removeAll()

Removes all listeners for all events on the EventBridge.

Usage

import EventBridge from "@axel669/event-bridge"

//  new is not required
const bridge = EventBridge()

//  standard event emitter stuff
bridge.on("demo", listener)
//  namespaced events
bridge.on("demo.nested", listener)
//  wildcard events
bridge.on("demo.*", listener)

//  will trigger the demo.nested and demo.* listeners
bridge.emit("demo.nested", data)

const allEvents = EventBridge()
bridge.forward(allEvents)
allEvents.pull(window, ["click", "mousemove"])

allEvents.on("mousemove", something)
allEvents.on("demo.*", something)

bridge.removeAll()

Event Trigger Path

Events fired will fire upward through the namespaces as well in a very specific way, which can be seen using EventBridge.tracePath(type). Listeners are fired from most specific to least specific, and only wildcard listeners for namespaces are triggered for things inside the namespace. All events can be listened for using the "*" type, as all paths end with it.

Examples

"demo"
> ["demo", "*"]

"demo.nested"
> ["demo.nested", "demo.*", "*"]

"demo.nested.again"
> ["demo.nested.again", "demo.nested.*", "demo.*", "*"]

Package Sidebar

Install

npm i @axel669/event-bridge

Weekly Downloads

1

Version

1.0.2

License

MIT

Unpacked Size

22.1 kB

Total Files

17

Last publish

Collaborators

  • axel669