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

state-prism

v0.0.5

Published

`state-prism` lets you subscribe to state changes. It is thin layer on top of [`on-change`](https://github.com/sindresorhus/on-change).

Downloads

9

Readme

:sparkles: Features

state-prism lets you subscribe to state changes. It is thin layer on top of on-change.

I use it mainly for games. Whenever the game's state is updated, I trigger a callback to re render UI components that are dependent on that state.


:wrench: Example usage

Let's say my state looks like this:

state.js

import { init } from 'state-prism'

const state = {
  player: {
    mana: 10,
  },
}

export default init(state)

Somewhere in my code the player spends 5 mana:

battle.js

import state from './state'

state.player.mana -= 5

Then I can re render my UI component that renders the mana.

ui.js

import { subscribe } from 'state-prism'

subscribe('player.mana', (mana) => {
  renderMana(mana)
})

Using this pattern, the state logic and the render functions can be kept separate.


:package: Install

npm

npm install state-prism

yarn

yarn add state-prism

:newspaper: API

Basic

init - Initialize state-prism with your state object. Enables listening to changes.

subscribe - Attach a callback to a path in your state. The callback will be called whenever the state changes.

Advanced

target - Access the original state object.

Useful for:

  • Logging
  • Destructuring

getSubscriberCount - Get the total subscribers count.


:book: Recipes

Dynamically activate listeners

If you are creating an advanced application you probably don't want all listeners to be active at the same time.

For example, if you only want to render mana during battle, you can do this:

import * as prism from 'state-prism'

prism.subscribe(
  'player.mana', 
  (mana) => {
    renderMana(mana)
  }, 
  { enabled: () => state.scene === 'battle' }
)

:computer: Develop

Commands

| Command | Description | | -------------- | ---------------------------------------------- | | yarn build | Generate files in the dist folder | | yarn release | Start the process to release a new version | | yarn qa | Run tsc and xo | | yarn clean | Remove build artefact (.tgz file) | | yarn go | Builds, packs and installs to example folder |

Workflow

  1. Make changes
  2. Update tests
  3. yarn go and verify that your changes work.
  4. Commit to master or make PR

Release

yarn release