{"_id":"5ndn-fsm","_rev":"4-02801ff1728112974830126386d076bc","name":"5ndn-fsm","description":"Javascript Finite State Machine","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"5ndn-fsm","version":"1.0.0","description":"Javascript Finite State Machine","main":"index.js","scripts":{"test":"nyc --require babel-core/register node_modules/.bin/mocha"},"repository":{"type":"git","url":"git+https://github.com/5ndn/fsm.git"},"keywords":["fsm"],"author":{"name":"Joel Caballero"},"license":"ISC","bugs":{"url":"https://github.com/5ndn/fsm/issues"},"homepage":"https://github.com/5ndn/fsm#readme","devDependencies":{"babel-core":"^6.22.1","babel-preset-es2015":"^6.22.0","chai":"^3.5.0","mocha":"^3.2.0"},"dependencies":{"signals":"^1.0.0"},"gitHead":"11600c2c3b804f8f2fb6c68fe4404461b3b304eb","_id":"5ndn-fsm@1.0.0","_shasum":"4ff293fa27e8ca26d28ba9943ab104895573a624","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.6.0","_npmUser":{"name":"meekgeek","email":"joel@meekgeek.net"},"dist":{"shasum":"4ff293fa27e8ca26d28ba9943ab104895573a624","tarball":"https://registry.npmjs.org/5ndn-fsm/-/5ndn-fsm-1.0.0.tgz","integrity":"sha512-WfjHtv/bCWhpJU11Za7xc5Ovev3BSFyMpGd48wOdrqI+yJwpbpFqVcFIHuhc4Cxhf2V4QWZeSv0wM9QbjByP4w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAy/4tBVIVg4GLGaIHH1LXV2D24pFyJsEsdpEUBFuw1nAiEAhhHp14vzUMNGTNng/z7dmrHXAAMjpBGtKef8wCyqiHQ="}]},"maintainers":[{"name":"meekgeek","email":"joel@meekgeek.net"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/5ndn-fsm-1.0.0.tgz_1485203294555_0.9508597599342465"}},"1.0.1":{"name":"5ndn-fsm","version":"1.0.1","description":"Javascript Finite State Machine","main":"index.js","scripts":{"test":"nyc --require babel-core/register node_modules/.bin/mocha"},"repository":{"type":"git","url":"git+https://github.com/5ndn/fsm.git"},"keywords":["fsm"],"author":{"name":"Joel Caballero"},"license":"ISC","bugs":{"url":"https://github.com/5ndn/fsm/issues"},"homepage":"https://github.com/5ndn/fsm#readme","devDependencies":{"babel-core":"^6.22.1","babel-preset-es2015":"^6.22.0","chai":"^3.5.0","mocha":"^3.2.0","nyc":"^10.1.2"},"dependencies":{"signals":"^1.0.0"},"gitHead":"0c5acc56ade20bc155ae7803ba74a5faf8214d2c","_id":"5ndn-fsm@1.0.1","_shasum":"ef155ba488967c0f2507f68c025145e8ef318a4a","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.6.0","_npmUser":{"name":"meekgeek","email":"joel@meekgeek.net"},"dist":{"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=="}]},"maintainers":[{"name":"meekgeek","email":"joel@meekgeek.net"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/5ndn-fsm-1.0.1.tgz_1485223436222_0.3525467268191278"}},"1.0.2":{"name":"5ndn-fsm","version":"1.0.2","description":"Javascript Finite State Machine","main":"index.js","scripts":{"test":"nyc --require babel-core/register node_modules/.bin/mocha"},"repository":{"type":"git","url":"git+https://github.com/5ndn/fsm.git"},"keywords":["fsm"],"author":{"name":"Joel Caballero"},"license":"ISC","bugs":{"url":"https://github.com/5ndn/fsm/issues"},"homepage":"https://github.com/5ndn/fsm#readme","devDependencies":{"babel-core":"^6.22.1","babel-preset-es2015":"^6.22.0","chai":"^3.5.0","mocha":"^3.2.0","nyc":"^10.1.2"},"dependencies":{"signals":"^1.0.0"},"gitHead":"0d913756841a76d94963d8eb482fbd15677ae17d","_id":"5ndn-fsm@1.0.2","_shasum":"4b0fd924c21a20f9d5a561bf13e916ffa5aacf17","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.6.0","_npmUser":{"name":"meekgeek","email":"joel@meekgeek.net"},"dist":{"shasum":"4b0fd924c21a20f9d5a561bf13e916ffa5aacf17","tarball":"https://registry.npmjs.org/5ndn-fsm/-/5ndn-fsm-1.0.2.tgz","integrity":"sha512-2M+Hn6kzcgjs3eY7gicV42vKtnSTY5vINsmRgIWFI/mXCHYViJZjRxphmE++7J4xjB5PWuVnKM21eEIa/agFPg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEZNtt3cEThb8M05Xauemq0HwTXrNGVlgxPTy9Q2iD8aAiEA8vFuH26y6xRIqoKwhjjlY67tt7vX6WJXR2JXP3zGNas="}]},"maintainers":[{"name":"meekgeek","email":"joel@meekgeek.net"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/5ndn-fsm-1.0.2.tgz_1485283739830_0.9164561645593494"}}},"readme":"# 5NDN FSM ![](https://api.travis-ci.org/5ndn/fsm.svg?branch=master)\n\nA Flexible Finite State Machine for Javascript.\n\n## Installation\n\n\n\n```sh\nnpm install 5ndn-fsm\n```\n\n## Basic Usage\n\nCreate an instance\n\n```javascript\nvar stateMachine = new StateMachine(this);\n```\n\nCreate some states\n\n```javascript\nvar RedState = new State();\nvar BlueState = new State();\n```\n\nAdd them to the Manager\n\n```javascript\n//pass true to initialize\nstateManager.addState( 'red', RedState, true );\nstateManager.addState( 'blue', BlueState );\n```\n\nChange States\n\n```javascript\nstateManager.setState('blue');\n```\n## Real Usage\n\nYou'll usually want to extend the *State* class.  The real magic happens inside of the methods you can override.\n\n### CREATING OUR STATES\nCreate your class and extend State\n\n```javascript\nimport {State} from '5ndn-fsm';\n\nclass RedState extend State{\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\t\n\tget KEY(){\n\t\treturn \"Red State\";\n\t}\n\t\n\tdoIntro(){\n\t\t\n\t\t// This is where your animation happen\n\t\n\t\t// When they're done! Don't forget to call the super method\n\t\tsuper.doIntro();\n\t}\n\t\n\taction(){\n\t\t\n\t\t// Use the context to change anything you need\n\t\tthis.context.color = \"red\"\n\t\t\n\t\t// This is called right after doIntro is completed\n\t}\n\t\n\tdoOutro(){\n\t\n\t\t// This is more animations happen\n\t\t\n\t\t// Again, do forget to call the super method\n\t\tsuper.doOutro();\n\t}\n}\n```\nThe 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.\n\n```javascript\nimport {State} from '5ndn-fsm';\n\nclass RedState extend State{\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\t\n\tget KEY(){\n\t\treturn 'Blue State';\n\t}\n\t\n\tdoIntro(){\n\t\t\n\t\t// This is where your animation happen\n\t\n\t\t// When they're done! Don't forget to call the super method\n\t\tsuper.doIntro();\n\t}\n\t\n\taction(){\n\t\t\n\t\t// This being the blue state\n\t\tthis.context.color = \"blue\";\n\t\t\n\t\t// This is called right after doIntro is completed\n\t}\n\t\n\tdoOutro(){\n\t\n\t\t// This is more animations happen\n\t\t\n\t\t// Again, do forget to call the super method\n\t\tsuper.doOutro();\n\t}\n}\n```\nIn both State classes above, we've changed the color in the *action* methods.\n\n### CREATING OUR MANAGER\n\nSince we used the *getter* method *KEY* we can just pass the Class functions.  ( looks pretty that way )\n\n```javascript\nimport {StateManager} from '5ndn-fsm';\n\nclass MyContext{\n\n\tconstructor(){\n\t\t\n\t\tthis.color = \"white\";\n\t\t\n\t\tthis.stateManager = new StateManager( this );\n\t\tthis.stateManager.addState( RedState, true );\n\t\tthis.stateManager.addState( BlueState );\n\t}\n```\n\n### CHANGE STATES AND LISTENING FOR CHANGES\n\nKnowing 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/\n\n```javascript\n\nthis.stateManager.action.add( function(key){ console.log(key) } );\nthis.stateManager.introStart.add( function(key){ console.log(key) } );\nthis.stateManager.outroStart.add( function(key){ console.log(key) } );\nthis.stateManager.introComplete.add( function(key){ console.log(key) } );\nthis.stateManager.outroComplete.add( function(key){ console.log(key) } );\n\nthis.stateManager.setState( BlueState.KEY );\n\n```\n\nSet State also returns a Promise ( if you're into that sort of thing ).  So you can do something like.\n\n```javascript \nthis.stateManager.setState( BlueState.KEY ).then( function(){\n\t// do other stuff\n});\n```\n\n\n## Support\n\n\n\n## Contributing\n\n\n","maintainers":[{"name":"meekgeek","email":"joel@meekgeek.net"}],"time":{"modified":"2022-06-12T14:08:13.308Z","created":"2017-01-23T20:28:14.803Z","1.0.0":"2017-01-23T20:28:14.803Z","1.0.1":"2017-01-24T02:03:56.444Z","1.0.2":"2017-01-24T18:49:01.623Z"},"homepage":"https://github.com/5ndn/fsm#readme","keywords":["fsm"],"repository":{"type":"git","url":"git+https://github.com/5ndn/fsm.git"},"author":{"name":"Joel Caballero"},"bugs":{"url":"https://github.com/5ndn/fsm/issues"},"license":"ISC","readmeFilename":"README.md"}