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

statemanager

v1.3.0

Published

Manages states with optional before and after transitions per state. Always built with JavaScript performance in mind.

Downloads

29

Readme

statemanager

Manages states with optional before and after transitions per state. Always built with JavaScript performance in mind.

Universal module defined to be used with requirejs, node, commonjs, or global scoped if no module loader is used.

  • All files in the dist folder are minified for production use.
  • All files in the src directory are the source code for development use.
  • Packages point at the dist minified code with source maps.
  • nodejs
  • npm install
  • npm install -g gulp bower

gulp test

Each process is dependent upon the previous. If one fails the build process exits.

  • gulp
  • gulp test (Unit specifications)
  • gulp build (Test, folder clean-ups, minification, source maps, renaming)
  • gulp deploy (Test, build, versioning)

npm: npm install statemanager bower: bower install statemanager

var stateExample = {
    enter: function() {},
    leave: function() {},
    transitions: {
        beforeEnter: function() {},             // Optional
        beforeEnterFromStill: function() {},    // Optional
        leaveToWalking: function() {},          // Optional
    }
};

var movementStates = {
    'Still': {
        enter: function() {
            console.log('Standing Still.');
        },
        leave: function() {
            console.log('Leaving \'Still\'.');
        },
        transitions: {
            beforeEnter: function() {
                console.log('Transitioning to \'Still\'.');
            }
        }
    },
    'Walking': {
        enter: function() {
            console.log('Walking.');
        },
        leave: function() {
            console.log('Leaving \'Walking\'.');
        },
        transitions: {
            beforeEnter: function() {
                console.log('Transitioning to \'Walking\'.');
            }
        }
    },
    'Running': {
        enter: function() {
            console.log('Running.');
        },
        leave: function() {
            console.log('Leaving \'Running\'.');
        },
        transitions: {
            beforeEnterFromWalking: function() {
                console.log('Enter \'Running\' from \'Walking\'.');
            },
            leaveToStill: function() {
                console.log('Leave \'Running\' to \'Still\'.');
            }
        }
    }
}

var listener1 = function(data) {
    console.log('State change listener!');
    console.log(JSON.stringify(data));
};

var movementStateManager = new StateManager(this);

console.log('Adding states.');
movementStateManager.initialize(movementStates, 'Still');

console.log('Initial state: ' + movementStateManager.getCurrentStateId());

console.log('Changing state...');
movementStateManager.changeState('Walking');

console.log('Changing state...');
movementStateManager.changeState('Running');

console.log('Changing state...');
movementStateManager.changeState('Still');

console.log('Changing state...');
movementStateManager.changeState('Walking');

These are breaking only if you were using them.

  • Removed the initialize and unload processes. An object should be keeping track of it's own initial state. The object would run it's initialize method in the beforeEnter or enter processes and it's unload method in the leave process.

  • Removed before leave processes because these make no sense to have since enter is the main(update) process and before enter is the previous which means leave is the next so we don't need a before next since there's no before previous.

  • Removed the enterFrom process because one process to distinguish what state we're transitioning from is enough.

  • Added: /**

    • Accessor.
    • @return {object} - The actual state object to re-run the enter process if needed. */ StateManager.prototype.getCurrentState;
  • Change the process order of the beforeEnter/beforeEnterFrom/enter calls as well as the beforeLeave/beforeLeaveTo/leave calls. It now is in the logical order of when they would need to be called unless I see something differently down the road but this was pretty thought out.
  • Removed initialStateId paramenter from addStates(). This is now done on the initializeStates() method or can me manually set by setInitialState().
  • addStates no longer runs the initial state. The initialize method should be used which will call addStates and then start();
  • Names of the transistion events for each state have changed format. Before ex. onBeforeEnter, Now ex. beforEnter.
  • Added setInitialState();
  • Added ability to have optional initialize process for each state that will only get run once unless it's unloaded.
  • Added ability to have optional unload process for each state that will only get run if the initialize process has been run.
  • Make sure the transition object for a state exists.
  • leaveState now passes the data parameter into all leave processes.