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 ๐Ÿ™

ยฉ 2026 โ€“ย Pkg Stats / Ryan Hefner

@rbxts/statefy

v1.5.0

Published

NOT generated with chatgpt ๐Ÿ’”

Downloads

16

Readme

NOT generated with chatgpt ๐Ÿ’”

Statefy Class Documentation typescript export class Statefy A generic state management class that handles both persistent and temporary states with lifetime tracking and callback notifications.

Properties

override: boolean

If true, allows setting the same state value repeatedly (bypasses change check) Default: false listStateRewrite: boolean

If true, adding an existing state to the list resets its lifetime Default: true Constructor

constructor(defaultState: T)

Creates a new Statefy instance

defaultState: Initial state value Methods

get(): T

Returns current state (prioritizes temporal state if set) Returns: Current state value add(state: T, lifeTime: number): void

Adds a temporary state to the state list

state: State value to add lifeTime: Duration in seconds before automatic removal remove(state: T): void

Removes a state from the state list

state: State value to remove getListStates(): Set

Gets all active states in the list (within their lifetime)

Returns: Set of active states listHasState(state: T): boolean

Checks if a state exists in the active list

state: State value to check Returns: true if state exists and is active set(state: T): void

Sets the persistent base state

state: New state value (Ignores if same as current and override=false) setTemporal(state: T, time: number): void

Sets a temporary override state

state: Temporary state value time: Duration in seconds before reverting Events

onChange(callback: (newState: T, oldState: T) => void): { clear: () => void }

Registers callback for base state changes

callback: Function to execute on change Returns: Clear function to remove callback onAdd(callback: (state: T) => void): { clear: () => void }

Registers callback when states are added to list

callback: Function to execute on add Returns: Clear function to remove callback onRemove(callback: (state: T) => void): { clear: () => void }

Registers callback when states are removed from list

callback: Function to execute on remove Returns: Clear function to remove callback Usage Example

typescript const playerState = new Statefy<"Idle" | "Moving">("Idle");

playerState.onChange((newState, oldState) => { print(State changed: ${oldState} โ†’ ${newState}); });

playerState.add("Jumping", 2); // Temporary state for 2 seconds playerState.set("Moving"); // Persistent state change