Have ideas to improve npm?Join in the discussion! ¬Ľ

    state-js

    1.0.0¬†‚Äʬ†Public¬†‚Äʬ†Published

    StateJS

    A JavaScript finite state machine with a more natural fashion.

    Installation

    Browser
    <script src="path/to/state.js"></script>
    var myState = StateJS.create(/* ... */);
    Node.JS
    var State = require('state-js');
    var myState = State.create(/* ... */);

    .create(config)

    Creates and returns a state machine object according to configuration defined in config.

    • config: A JavaScript object literal defining the state machine.

    State Machine Config Object

    A config object should be in the following form:

    {
      name: [{
        entry: 'Hello world', // `entry` specifies state entry conditions
        onEnter: function (newVal, oldVal) {
          // `onEnter` specifies the callback function to be invoked when entering the state.
          // `newVal`: current value.
          // `oldVal`: previous value.
        },
        onLeave: function (newVal, oldVal) {
          // `onLeave` specifies the callback function to be invoked when leaving the state.
          // `newVal`: current value.
          // `oldVal`: previous value.
        }
      }, {
        entry: 'StateJS', // Here is another state.
        onEnter: function () {/* ... */},
        onLeave: function () {/* ... */}
      }],
      version: {
        value: 1, // By wrapping state in an object literal, you can use `value` to define its default/initial value.
        states: [{ // Then use `states` to define states.
          entry: function (val) { return Math.floor(val) === 100 }, // `entry` can also be a function returning true or false. 
          onEnter: function () {/* ... */},
          onLeave: function () {/* ... */}
        }]
      }
    }

    Change/get states

    After create a state machine, you can change/get by:

    var state = StateJS(/* ... */);
    console.log(state.name); // To get.
    state.name = 'StateJS'; // To set/change. May trigger onEnter and onLeave callbacks.

    Add/remove states.

    You can add states by calling .add(config). To remove states, call .remove([stateName1, stateName2, ...]).

    Current Limitation

    In current version, entry cannot be either object or array. However, you can compare/manipulate such types by defining entry as a function and then access object/array through the passed argument.

    License

    MIT

    Install

    npm i state-js

    DownloadsWeekly Downloads

    0

    Version

    1.0.0

    License

    MIT

    Last publish

    Collaborators

    • avatar