npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@kteventshuttle/shuttle

v1.0.3

Published

The EventShuttle service is a subscribe event manager which allows de-coupling of event source and handler

Downloads

4

Readme

eventShuttle

The EventShuttle service is a subscribe event manager which allows de-coupling of event source and handler.

Implementation

The EventShuttle is a singleton, so any file in any on-page app which imports the eventShuttle will receive the same instance. This allows for events to be raised on one app and handled in another.

import { eventShuttle } from '@kteventshuttle/shuttle';

Adding Listeners

The EventShuttle attaches one or more listeners to a single event by using a unique event key (string) per event. There is no limit to how many listeners can be attached to a single event key. Event listeners are called in the order they are added.

eventShuttle.addListener('unique_key', myEventHandlerFunction) Tip: It is recommended to export your event keys as constants from a shared file.

Removing Listeners & Cleaning Up

To avoid memory leaks, event listeners must be removed when they are no longer needed. The same key and function which were provided to addEventListener must be provided to removeEventListener.

eventShuttle.removeEventListener('unique_key', myEventHandlerFunction)

Removing Listeners

Both the key and the event must be exactly the same as the ones provided to the addEventListener function. The listener function must be a reference to exactly the same function. This means you cannot use an anonymous function in your addEventListener call.

Dont do this:

eventShuttle.addEventListener('toolbarMode', () => console.log('hello world'))

You wont be able to remove this event listener.

eventShuttle.removeEventListener('toolbarMode', () => console.log('hello world'))

Dispatching Events

Sending an event through the eventShuttle is done with the dispatch function.

eventShuttle.dispatch('toolbarMode' [, payload])

Any object, array or primitive can be sent along with the event via the optional payload parameter. The payload will be the second parameter provided to the event listeners.

React use case

const handleMode = (eventName: string, payload: { mode: string }) => {
    setState({
        uiMode: mode
    })
}

React.useEffect(() => {
    eventShuttle.addEventListener('toolbarMode', handleMode)
    //When component unmounts you must remove event listener.
    //If component will rerender 10 times it will execute handleMode 10 times when its called. 
    return () => {
        eventShuttle.removeEventListener('toolbarMode', handleMode)
    }
})

<button onClick={(e, data) => eventShuttle.dispatch('toolbarMode', { mode: data.value })}>Click ME!<button/>