obvi
Observable state machine. Use pure functions to update state, subscribe to changes with 'observ-struct` interface.
install
$ npm install obvi
example
var test = require('tape');var Store = require('../'); var store = Store({ count: 0 });var unsubscribe; test('obvi', function (t) { t.plan(6); var pushEvent = store({ add: function (state, event) { t.deepEqual(event, { value: 2 }, 'should map add event'); t.deepEqual(state, { count: 0 }, 'should pass previous state'); return { count: state.count + event.value }; }, increment: function (state, event) { t.deepEqual(event, { type: 'increment' }, 'should map increment event'); t.deepEqual(state, { count: 2 }, 'should update state'); return { count: state.count + 1 }; } }); var called = 0; unsubscribe = store.state(function onChange (state) { if (called === 0) { t.deepEqual(state, { count: 2 }, 'should emit new state'); } if (called === 1) { t.deepEqual(state, { count: 3 }, 'should emit new state'); } called++; }); pushEvent('add', { value: 2 }); pushEvent('increment', { type: 'increment' });}); test('events have separate channels', function (t) { t.plan(1); unsubscribe(); var push = store({ increment: function (state, ev) { return { count: state.count + 10 }; } }); unsubscribe = store.state(function onChange (state) { t.deepEqual(state, { count: 13 }, 'should handle separate event channels'); }); push('increment')});