{"_id":"javascript-state-machine","_rev":"3282177","name":"javascript-state-machine","description":"A finite state machine library","dist-tags":{"latest":"3.1.0","next":"3.0.0-rc.1"},"maintainers":[{"name":"jakesgordon","email":""}],"time":{"modified":"2024-05-16T05:33:02.000Z","created":"2014-03-16T18:19:03.287Z","3.1.0":"2018-07-12T14:31:05.703Z","3.0.1":"2017-06-10T21:52:30.251Z","3.0.0-rc.1":"2017-01-10T17:58:35.474Z","2.4.0":"2016-11-20T22:40:46.402Z","2.3.5":"2015-01-21T04:19:19.223Z","2.3.4":"2015-01-21T03:31:19.330Z","2.3.2":"2014-03-16T18:25:20.739Z","2.3.1":"2014-03-16T18:19:03.287Z"},"users":{},"author":{"name":"Jake Gordon","email":"jake@codeincomplete.com"},"repository":{"type":"git","url":"git://github.com/jakesgordon/javascript-state-machine.git"},"versions":{"3.1.0":{"name":"javascript-state-machine","description":"A finite state machine library","homepage":"https://github.com/jakesgordon/javascript-state-machine","repository":{"type":"git","url":"git://github.com/jakesgordon/javascript-state-machine.git"},"keywords":["finite state machine","state machine","server","client"],"author":{"name":"Jake Gordon","email":"jake@codeincomplete.com"},"maintainers":[{"name":"jakesgordon","email":""}],"license":"MIT","main":"lib/state-machine.js","files":["lib/**/*.js","dist/**/*.js"],"directories":{},"devDependencies":{"ava":"^0.17.0","fs-sync":"^1.0.3","glob":"^7.1.1","nyc":"^10.0.0","pascal-case":"^2.0.0","uglify-js":"^2.7.5","webpack":"^2.2.0-rc.1"},"version":"3.1.0","scripts":{"start":"npm run watch","build":"npm run bundle && npm run minify","bundle":"webpack","minify":"bin/minify","watch":"ava --watch","test":"nyc ava -v && nyc report --reporter=html"},"ava":{"files":["test/**/*.js"],"source":["src/**/*.js"]},"gitHead":"bfee5d404e49e23e22a969375e4e030c0baea291","bugs":{"url":"https://github.com/jakesgordon/javascript-state-machine/issues"},"_id":"javascript-state-machine@3.1.0","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"jakesgordon","email":"jakesgordon@gmail.com"},"dist":{"shasum":"06eeb2136a6a19ae1b56105c25caec283dd5cd14","size":17427,"noattachment":false,"key":"/javascript-state-machine/-/javascript-state-machine-3.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/javascript-state-machine/download/javascript-state-machine-3.1.0.tgz"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/javascript-state-machine_3.1.0_1531405865630_0.8673616380360629"},"_hasShrinkwrap":false,"publish_time":1531405865703,"_cnpm_publish_time":1531405865703,"_cnpmcore_publish_time":"2021-12-16T16:52:04.133Z"},"3.0.1":{"name":"javascript-state-machine","description":"A finite state machine library","homepage":"https://github.com/jakesgordon/javascript-state-machine","repository":{"type":"git","url":"git://github.com/jakesgordon/javascript-state-machine.git"},"keywords":["finite state machine","state machine","server","client"],"author":{"name":"Jake Gordon","email":"jake@codeincomplete.com"},"maintainers":[{"name":"jakesgordon","email":""}],"license":"LGPL-3.0","main":"lib/state-machine.js","files":["lib/**/*.js","dist/**/*.js"],"directories":{},"devDependencies":{"ava":"^0.17.0","fs-sync":"^1.0.3","glob":"^7.1.1","nyc":"^10.0.0","pascal-case":"^2.0.0","uglify-js":"^2.7.5","webpack":"^2.2.0-rc.1"},"version":"3.0.1","scripts":{"start":"npm run watch","build":"npm run bundle && npm run minify","bundle":"webpack","minify":"bin/minify","watch":"ava --watch","test":"nyc ava -v && nyc report --reporter=html"},"ava":{"files":["test/**/*.js"],"source":["src/**/*.js"]},"gitHead":"e09614a51f2a64724bb151da6462bcb34fdb9883","bugs":{"url":"https://github.com/jakesgordon/javascript-state-machine/issues"},"_id":"javascript-state-machine@3.0.1","_shasum":"327320336a20364e26b51d91662c14f14d41ea52","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.11.0","_npmUser":{"name":"jakesgordon","email":"jakesgordon@gmail.com"},"dist":{"shasum":"327320336a20364e26b51d91662c14f14d41ea52","size":16069,"noattachment":false,"key":"/javascript-state-machine/-/javascript-state-machine-3.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/javascript-state-machine/download/javascript-state-machine-3.0.1.tgz"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/javascript-state-machine-3.0.1.tgz_1497131550123_0.5375977938529104"},"publish_time":1497131550251,"_hasShrinkwrap":false,"_cnpm_publish_time":1497131550251,"_cnpmcore_publish_time":"2021-12-16T16:52:04.387Z"},"3.0.0-rc.1":{"name":"javascript-state-machine","description":"A finite state machine library","homepage":"https://github.com/jakesgordon/javascript-state-machine","repository":{"type":"git","url":"git://github.com/jakesgordon/javascript-state-machine.git"},"keywords":["finite state machine","state machine","server","client"],"author":{"name":"Jake Gordon","email":"jake@codeincomplete.com"},"maintainers":[{"name":"jakesgordon","email":""}],"license":"LGPL-3.0","main":"lib/state-machine.js","files":["lib/**/*.js","dist/**/*.js"],"directories":{},"devDependencies":{"ava":"^0.17.0","fs-sync":"^1.0.3","glob":"^7.1.1","nyc":"^10.0.0","pascal-case":"^2.0.0","uglify-js":"^2.7.5","webpack":"^2.2.0-rc.1"},"version":"3.0.0-rc.1","scripts":{"start":"npm run watch","build":"npm run bundle && npm run minify","bundle":"webpack","minify":"bin/minify","watch":"ava --watch","test":"nyc ava -v && nyc report --reporter=html"},"ava":{"files":["test/**/*.js"],"source":["src/**/*.js"]},"gitHead":"efb57ea1c1489860c79bb03533677a1406a3e954","bugs":{"url":"https://github.com/jakesgordon/javascript-state-machine/issues"},"_id":"javascript-state-machine@3.0.0-rc.1","_shasum":"35a706544897ab1b29d98443f6a57005d6afc201","_from":".","_npmVersion":"4.1.1","_nodeVersion":"6.9.2","_npmUser":{"name":"jakesgordon","email":"jakesgordon@gmail.com"},"dist":{"shasum":"35a706544897ab1b29d98443f6a57005d6afc201","size":15697,"noattachment":false,"key":"/javascript-state-machine/-/javascript-state-machine-3.0.0-rc.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/javascript-state-machine/download/javascript-state-machine-3.0.0-rc.1.tgz"},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/javascript-state-machine-3.0.0-rc.1.tgz_1484071115221_0.8970068243797868"},"publish_time":1484071115474,"_hasShrinkwrap":false,"_cnpm_publish_time":1484071115474,"_cnpmcore_publish_time":"2021-12-16T16:52:04.651Z"},"2.4.0":{"name":"javascript-state-machine","description":"A simple finite state machine library","homepage":"https://github.com/jakesgordon/javascript-state-machine","keywords":["state machine","server","client"],"author":{"name":"Jake Gordon","email":"jake@codeincomplete.com"},"repository":{"type":"git","url":"git://github.com/jakesgordon/javascript-state-machine.git"},"main":"state-machine.js","devDependencies":{"local-web-server":"~1.2.6","qunit":"~0.9.1","uglify-js":"^2.7.4"},"version":"2.4.0","scripts":{"start":"ws --rewrite '/test -> /test/'","test":"node test/runner","minify":"uglifyjs state-machine.js --output state-machine.min.js --compress --mangle --stats"},"gitHead":"c7538b4fce486a84de7a456b72ce7dc15201c818","bugs":{"url":"https://github.com/jakesgordon/javascript-state-machine/issues"},"_id":"javascript-state-machine@2.4.0","_shasum":"d8be31ec38f24ac1a1832f0b672fc3cd5f79c96e","_from":".","_npmVersion":"4.0.3","_nodeVersion":"6.9.1","_npmUser":{"name":"jakesgordon","email":"jakesgordon@gmail.com"},"dist":{"shasum":"d8be31ec38f24ac1a1832f0b672fc3cd5f79c96e","size":99048,"noattachment":false,"key":"/javascript-state-machine/-/javascript-state-machine-2.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/javascript-state-machine/download/javascript-state-machine-2.4.0.tgz"},"maintainers":[{"name":"jakesgordon","email":""}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/javascript-state-machine-2.4.0.tgz_1479681644388_0.11312017869204283"},"directories":{},"publish_time":1479681646402,"_hasShrinkwrap":false,"_cnpm_publish_time":1479681646402,"_cnpmcore_publish_time":"2021-12-16T16:52:05.541Z"},"2.3.5":{"name":"javascript-state-machine","description":"A simple finite state machine library","homepage":"https://github.com/jakesgordon/javascript-state-machine","keywords":["state machine","server","client"],"author":{"name":"Jake Gordon","email":"jake@codeincomplete.com"},"repository":{"type":"git","url":"git://github.com/jakesgordon/javascript-state-machine.git"},"main":"state-machine.js","devDependencies":{"qunit":"~0.6.2"},"version":"2.3.5","gitHead":"b5e3918837f4c6902ffa33346fcb6ec2e40962e2","bugs":{"url":"https://github.com/jakesgordon/javascript-state-machine/issues"},"_id":"javascript-state-machine@2.3.5","scripts":{},"_shasum":"2e939462000ab632ff7a0a3121baed48cd444ae9","_from":".","_npmVersion":"2.2.0","_nodeVersion":"0.10.35","_npmUser":{"name":"jakesgordon","email":"jakesgordon@gmail.com"},"maintainers":[{"name":"jakesgordon","email":""}],"dist":{"shasum":"2e939462000ab632ff7a0a3121baed48cd444ae9","size":910329,"noattachment":false,"key":"/javascript-state-machine/-/javascript-state-machine-2.3.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/javascript-state-machine/download/javascript-state-machine-2.3.5.tgz"},"directories":{},"publish_time":1421813959223,"_hasShrinkwrap":false,"_cnpm_publish_time":1421813959223,"_cnpmcore_publish_time":"2021-12-16T16:52:09.301Z"},"2.3.4":{"name":"javascript-state-machine","description":"A simple finite state machine library","homepage":"https://github.com/jakesgordon/javascript-state-machine","keywords":["state machine","server","client"],"author":{"name":"Jake Gordon","email":"jake@codeincomplete.com"},"repository":{"type":"git","url":"git://github.com/jakesgordon/javascript-state-machine.git"},"main":"state-machine.js","devDependencies":{"qunit":"~0.6.2"},"version":"2.3.4","gitHead":"fdfbcddcf31ce8cc077aa077629f04b19e48dfd5","bugs":{"url":"https://github.com/jakesgordon/javascript-state-machine/issues"},"_id":"javascript-state-machine@2.3.4","scripts":{},"_shasum":"f175b456044ab442ff7f440a3b484736116f1428","_from":".","_npmVersion":"2.2.0","_nodeVersion":"0.10.35","_npmUser":{"name":"jakesgordon","email":"jakesgordon@gmail.com"},"maintainers":[{"name":"jakesgordon","email":""}],"dist":{"shasum":"f175b456044ab442ff7f440a3b484736116f1428","size":910178,"noattachment":false,"key":"/javascript-state-machine/-/javascript-state-machine-2.3.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/javascript-state-machine/download/javascript-state-machine-2.3.4.tgz"},"directories":{},"publish_time":1421811079330,"_hasShrinkwrap":false,"_cnpm_publish_time":1421811079330,"_cnpmcore_publish_time":"2021-12-16T16:52:11.465Z"},"2.3.2":{"name":"javascript-state-machine","description":"A simple finite state machine library","homepage":"https://github.com/jakesgordon/javascript-state-machine","keywords":["state machine","server","client"],"author":{"name":"Jake Gordon","email":"jake@codeincomplete.com"},"repository":{"type":"git","url":"git://github.com/jakesgordon/javascript-state-machine.git"},"main":"state-machine.js","devDependencies":{"qunit":"~0.6.2"},"version":"2.3.2","_id":"javascript-state-machine@2.3.2","dist":{"shasum":"c4861c8cea0f085c1f5b751cf51882d34068b05f","size":909749,"noattachment":false,"key":"/javascript-state-machine/-/javascript-state-machine-2.3.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/javascript-state-machine/download/javascript-state-machine-2.3.2.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"jakesgordon","email":"jakesgordon@gmail.com"},"maintainers":[{"name":"jakesgordon","email":""}],"directories":{},"publish_time":1394994320739,"_hasShrinkwrap":false,"_cnpm_publish_time":1394994320739,"_cnpmcore_publish_time":"2021-12-16T16:52:12.876Z"},"2.3.1":{"name":"javascript-state-machine","description":"A simple finite state machine library","homepage":"https://github.com/jakesgordon/javascript-state-machine","keywords":["state machine","server","client"],"author":{"name":"Jake Gordon","email":"jake@codeincomplete.com"},"repository":{"type":"git","url":"git://github.com/jakesgordon/javascript-state-machine.git"},"main":"state-machine.js","devDependencies":{"qunit":"~0.6.2"},"version":"2.3.1","_id":"javascript-state-machine@2.3.1","dist":{"shasum":"a2ace7381d65faa2c3d9377c3fd0fa4dd8707c6f","size":909669,"noattachment":false,"key":"/javascript-state-machine/-/javascript-state-machine-2.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/javascript-state-machine/download/javascript-state-machine-2.3.1.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"jakesgordon","email":"jakesgordon@gmail.com"},"maintainers":[{"name":"jakesgordon","email":""}],"directories":{},"publish_time":1394993943287,"_hasShrinkwrap":false,"_cnpm_publish_time":1394993943287,"_cnpmcore_publish_time":"2021-12-16T16:52:15.082Z"}},"readme":"# Javascript State Machine\n\n[![NPM version](https://img.shields.io/npm/v/javascript-state-machine.svg?style=flat)](https://www.npmjs.org/package/javascript-state-machine)\n[![Build Status](https://travis-ci.org/jakesgordon/javascript-state-machine.svg?branch=master)](https://travis-ci.org/jakesgordon/javascript-state-machine)\n\nA library for finite state machines.\n\n![matter state machine](examples/matter.png)\n\n<br>\n\n### NOTE for existing users\n\n> **VERSION 3.0** Is a significant rewrite from earlier versions.\n  Existing 2.x users should be sure to read the [Upgrade Guide](docs/upgrading-from-v2.md).\n\n<br>\n\n# Installation\n\nIn a browser:\n\n```html\n  <script src='state-machine.js'></script>\n```\n\n> after downloading the [source](dist/state-machine.js) or the [minified version](dist/state-machine.min.js)\n\nUsing npm:\n\n```shell\n  npm install --save-dev javascript-state-machine\n```\n\nIn Node.js:\n\n```javascript\n  var StateMachine = require('javascript-state-machine');\n```\n\n# Usage\n\nA state machine can be constructed using:\n\n```javascript\n  var fsm = new StateMachine({\n    init: 'solid',\n    transitions: [\n      { name: 'melt',     from: 'solid',  to: 'liquid' },\n      { name: 'freeze',   from: 'liquid', to: 'solid'  },\n      { name: 'vaporize', from: 'liquid', to: 'gas'    },\n      { name: 'condense', from: 'gas',    to: 'liquid' }\n    ],\n    methods: {\n      onMelt:     function() { console.log('I melted')    },\n      onFreeze:   function() { console.log('I froze')     },\n      onVaporize: function() { console.log('I vaporized') },\n      onCondense: function() { console.log('I condensed') }\n    }\n  });\n```\n\n... which creates an object with a current state property:\n\n  * `fsm.state`\n\n... methods to transition to a different state:\n\n  * `fsm.melt()`\n  * `fsm.freeze()`\n  * `fsm.vaporize()`\n  * `fsm.condense()`\n\n... observer methods called automatically during the lifecycle of a transition:\n\n  * `onMelt()`\n  * `onFreeze()`\n  * `onVaporize()`\n  * `onCondense()`\n\n... along with the following helper methods:\n\n  * `fsm.is(s)`            - return true if state `s` is the current state\n  * `fsm.can(t)`           - return true if transition `t` can occur from the current state\n  * `fsm.cannot(t)`        - return true if transition `t` cannot occur from the current state\n  * `fsm.transitions()`    - return list of transitions that are allowed from the current state\n  * `fsm.allTransitions()` - return list of all possible transitions\n  * `fsm.allStates()`      - return list of all possible states\n\n# Terminology\n\nA state machine consists of a set of [**States**](docs/states-and-transitions.md)\n\n  * solid\n  * liquid\n  * gas\n\nA state machine changes state by using [**Transitions**](docs/states-and-transitions.md)\n\n  * melt\n  * freeze\n  * vaporize\n  * condense\n\nA state machine can perform actions during a transition by observing [**Lifecycle Events**](docs/lifecycle-events.md)\n\n  * onBeforeMelt\n  * onAfterMelt\n  * onLeaveSolid\n  * onEnterLiquid\n  * ...\n\nA state machine can also have arbitrary [**Data and Methods**](docs/data-and-methods.md).\n\nMultiple instances of a state machine can be created using a [**State Machine Factory**](docs/state-machine-factory.md).\n\n# Documentation\n\nRead more about\n\n  * [States and Transitions](docs/states-and-transitions.md)\n  * [Data and Methods](docs/data-and-methods.md)\n  * [Lifecycle Events](docs/lifecycle-events.md)\n  * [Asynchronous Transitions](docs/async-transitions.md)\n  * [Initialization](docs/initialization.md)\n  * [Error Handling](docs/error-handling.md)\n  * [State History](docs/state-history.md)\n  * [Visualization](docs/visualization.md)\n  * [State Machine Factory](docs/state-machine-factory.md)\n  * [Upgrading from 2.x](docs/upgrading-from-v2.md)\n \n# Contributing\n\nYou can [Contribute](docs/contributing.md) to this project with issues or pull requests.\n\n# Release Notes\n\nSee [RELEASE NOTES](RELEASE_NOTES.md) file.\n\n# License\n\nSee [MIT LICENSE](https://github.com/jakesgordon/javascript-state-machine/blob/master/LICENSE) file.\n\n# Contact\n\nIf you have any ideas, feedback, requests or bug reports, you can reach me at\n[jake@codeincomplete.com](mailto:jake@codeincomplete.com), or via\nmy website: [Code inComplete](http://codeincomplete.com/)\n","_attachments":{},"homepage":"https://github.com/jakesgordon/javascript-state-machine","bugs":{"url":"https://github.com/jakesgordon/javascript-state-machine/issues"},"license":"MIT"}