1.0.2 • Published 4 years ago
@axel669/event-bridge v1.0.2
EventBridge
A pubsub-like event emitter with neat features for node & browser
Installation
Yarn
yarn install @axel669/event-bridgeBrowser (Standalone)
<script src="https://cdn.jsdelivr.net/npm/@axel669/event-bridge/dist/event-bridge.js"></script>API
on(type, listener)
type:StringThe type of events to listen forlistener:FunctionThe listener function Adds and event listener. Returns a function that removes the listeners.
once(type, listener)
type:StringThe type of events to listen forlistener:FunctionThe 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:StringThe type of event to triggerdata:AnyData to attach to the event Emits an event to the appropriate listeners.
pull(source, prefix)
source:EventBridgeThe EventBridge to pull events fromprefix:StringOptional 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:EventEmitterThe source to pull events from. An EventEmitter is any object that hasaddEventListenerandremoveEventListenerfunctions.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.*", "*"]