Catalog npm
Back to packageRELEASE DETAILS

1.0.1

npm

5ndn-fsm

Javascript Finite State Machine

fsm
Published24 Jan 2017
Direct dependencies6
Transitive dependenciesNot calculated

README

Current package documentation

5NDN FSM

A Flexible Finite State Machine for Javascript.

Installation

npm install 5ndn-fsm

Basic Usage

Create an instance

var stateMachine = new StateMachine(this);

Create some states

var RedState = new State();
var BlueState = new State();

Add them to the Manager

//pass true to initialize
stateManager.addState( 'red', RedState, true );
stateManager.addState( 'blue', BlueState );

Change States

stateManager.setState('blue');

Real Usage

You'll usually want to extend the State class. The real magic happens inside of the methods you can override.

CREATING OUR STATES

Create your class and extend State

import {State} from '5ndn-fsm';

class RedState extend State{

	constructor(){
		super();
	}
	
	get KEY(){
		return "Red State";
	}
	
	doIntro(){
		
		// This is where your animation happen
	
		// When they're done! Don't forget to call the super method
		super.doIntro();
	}
	
	action(){
		
		// Use the context to change anything you need
		this.context.color = "red"
		
		// This is called right after doIntro is completed
	}
	
	doOutro(){
	
		// This is more animations happen
		
		// Again, do forget to call the super method
		super.doOutro();
	}
}

The getter "KEY" is there for is you want to pass only the State Class into the addState method. It's important to always call tho super methods to let the manager know where you're at. If you forget, the manager we'll let you know. The action method is the only one that doesn't have anything to call.

import {State} from '5ndn-fsm';

class RedState extend State{

	constructor(){
		super();
	}
	
	get KEY(){
		return 'Blue State';
	}
	
	doIntro(){
		
		// This is where your animation happen
	
		// When they're done! Don't forget to call the super method
		super.doIntro();
	}
	
	action(){
		
		// This being the blue state
		this.context.color = "blue";
		
		// This is called right after doIntro is completed
	}
	
	doOutro(){
	
		// This is more animations happen
		
		// Again, do forget to call the super method
		super.doOutro();
	}
}

In both State classes above, we've changed the color in the action methods.

CREATING OUR MANAGER

Since we used the getter method KEY we can just pass the Class functions. ( looks pretty that way )

import {StateManager} from '5ndn-fsm';

class MyContext{

	constructor(){
		
		this.color = "white";
		
		this.stateManager = new StateManager( this );
		this.stateManager.addState( RedState, true );
		this.stateManager.addState( BlueState );
	}

CHANGE STATES AND LISTENING FOR CHANGES

Knowing when your changes are done can be quit powerful. You can listen to this changes via the event emmtter. Thanks Miller Medeiros and Robert Penner https://millermedeiros.github.io/js-signals/


this.stateManager.action.add( function(key){ console.log(key) } );
this.stateManager.introStart.add( function(key){ console.log(key) } );
this.stateManager.outroStart.add( function(key){ console.log(key) } );
this.stateManager.introComplete.add( function(key){ console.log(key) } );
this.stateManager.outroComplete.add( function(key){ console.log(key) } );

this.stateManager.setState( BlueState.KEY );

Set State also returns a Promise ( if you're into that sort of thing ). So you can do something like.

this.stateManager.setState( BlueState.KEY ).then( function(){
	// do other stuff
});

Support

Contributing

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 6

Native requirements
6 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
signals
Environment
{
  "local_name": "signals",
  "alias": false,
  "peer_metadata": null
}
^1.0.0runtime
babel-core
Environment
{
  "local_name": "babel-core",
  "alias": false,
  "peer_metadata": null
}
^6.22.1development
babel-preset-es2015
Environment
{
  "local_name": "babel-preset-es2015",
  "alias": false,
  "peer_metadata": null
}
^6.22.0development
chai
Environment
{
  "local_name": "chai",
  "alias": false,
  "peer_metadata": null
}
^3.5.0development
mocha
Environment
{
  "local_name": "mocha",
  "alias": false,
  "peer_metadata": null
}
^3.2.0development
nyc
Environment
{
  "local_name": "nyc",
  "alias": false,
  "peer_metadata": null
}
^10.1.2development

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "ef155ba488967c0f2507f68c025145e8ef318a4a",
  "tarball": "https://registry.npmjs.org/5ndn-fsm/-/5ndn-fsm-1.0.1.tgz",
  "integrity": "sha512-CNvVNEgq+fIn3b7wOmpiftWTyxuQifZqgBaLkCSwrIJxksOTqXjJWSLqHdryeFSqcvVu8O+Hbzw5D97uuj2KAw==",
  "signatures": [
    {
      "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA",
      "sig": "MEQCIGVA0sZhTogCclgOZiQPn9FDlZWlSK1Jm1YTIcB+WsTBAiBWOWQ8BFDQjM8cKYwol28K2tV72vAUaRKL4yh8HfMl3w=="
    }
  ]
}

Repository

PENDING
5ndn/fsm

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 20:37 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:ea96ab35a9264e1e0dfd59261c0c4eb04a6326acfc0776884575d3ee81b3efdf

Other collected versions

1.0.224 Jan1.0.023 JanView all collected versions →