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

@wbe/beeper

v0.2.1

Published

Beeper simple class pub/sub pattern implementation. It implements an internal state management witch track and expose the last dispatch state.

Downloads

232

Readme

Beeper

Beeper simple class pub/sub pattern implementation. It implements an internal state management witch track and expose the last dispatch state.

Summary

Installation

npm i @wbe/beeper

Usage

Use Beeper as a class to create a beeper instance.

import { Beeper } from "@wbe/beeper";

const beep = new Beeper();
const remove = beep.add(() => console.log("beep"));
beep.dispatch();
remove()

Dispatch and retrieve state.

import { Beeper } from "@wbe/beeper";

// define state type and default value (optional)
const beep = new Beeper<string>("foo");
const handler = (state: string) => {
  console.log(`dispatched state is bar`)
}
beep.add(handler);
// dispatch new state
beep.dispatch("bar");
// stop listening by passing the same handler reference
beep.remove(handler);

Real world usage

import { Beeper } from "@wbe/beeper";

/**
 * Create a global service/store
 * It contains a Beeper instance and associated action methods
 */
class CounterService {
  onCount = new Beeper<number>(0);
  increment() {
    this.onCount.dispatch(this.onCount.state + 1)
  }
}
const counterService = new CounterService();

/**
 * Create a button component witch increment the counter
 */
class Button {
  constructor() {
    addEventListener("click", () => counterService.increment());
  }
}

/**
 * This class will use the counter value
 * every time it changes
 */
class Display {
  constructor() {
    counterService.onCount.add((count) => {
      console.log(`count is ${count}`)
    });
  }
}

Use the same service in a React component.

import { Beeper } from "@wbe/beeper";

const Display = () => {
  const [count, setCount] = useState(0);
  
  // The on return the off method
  // So it can be used as return in a useEffect hook
  useEffect(() => {
    return counterService.onCount.add((count) => {
      setCount(count);
    });
  }, []);

  return <div>Count is {count}</div>
}

Methods

add(handler: THandler<S>): () => void

Subscribe to state changes and execute a callback.

once(handler: THandler<S>): () => void

Subscribe to the next state change only, perfect for one-time events.

remove(handler: THandler<S>): void

Unsubscribe from state changes when no longer needed.

dispatch(state?: S): THandlers<S>

Update the state and trigger associated callbacks effortlessly.

reset(): void

Reset Beeper to its initial state, wiping the slate clean.

API

state: S

Access the current state with ease.

handlers: THandlers<S>

Retrieve the array of registered handlers.

initialState: S

Obtain the initial state provided during instantiation.

Workflow

# build
pnpm run build:watch

# test
pnpm run test:watch

# pre-publish, build & tests
pnpm pre-publish

# update version
npm version patch|minor|major

# publish
npm publish

Credits

© Willy Brauner

License

Is released under the MIT License. See the LICENSE file for details.