simple state manager for nodejs built with typescript
npm install appolo-state --save
initialState
- any object
options
:
- maxStates
- max number of history states to hold default 1
import {Store} from "appolo-store"
let store = new Store<{ counter: number }>({counter: 0}, {maxStates: 10});
change the current to new state
event stateChanged
if fired on state changed
import {Store} from "appolo-store"
let store = new Store<{ counter: number }>({counter: 0});
store.setState({counter: 1});
return copy of the current state
import {Store} from "appolo-store"
let store = new Store<{ counter: number }>({counter: 0});
store.setState({counter: 1});
let state = store.state()
return state copy at given index
import {Store} from "appolo-store"
let store = new Store<{ counter: number }>({counter: 0},{maxStates:10});
store.setState({counter: 1});
store.setState({counter: 2});
store.stateAt(1).counter; // 1
return the previous state
return the next state
index - the state index to change to
import {Store} from "appolo-store"
let store = new Store<{ counter: number }>({counter: 0},{maxStates:10});
store.setState({counter: 1});
store.setState({counter: 2});
store.goToState(1);
store.state().counter // 1
go to previous state
go to next state
store extends appolo-event-dispatcher
every to time the state is changed the stateChanged
if fired
import {Store} from "appolo-store"
let store = new Store<{ counter: number }>({counter: 0});
store.on("stateChanged",(state)=>{
console.log(state.counter) // 1
})
store.setState({counter: 1});
you can use the action decorator to define custom action events the store will fire event with the action name when the action is finished
import {Store,action} from "appolo-store"
class MyStore extend Store<{ counter: number }>{
super({counter: 0})
@action()
set myCounter(value){
this.setState({counter:value})
}
@action()
async updateMyCounter(value){
await doSomeThingAsync()
this.setState({counter:value})
}
}
(async function (){
let store = new MyStore<>();
store.on("myCounter",(state)=>{
console.log(state.counter) // 1
})
store.myCounter = 1;
store.updateMyCounter(2);
let state = await store.once("updateMyCounter")
console.log(state.counter) // 2
})()
you can loop over all the states from the beginning iterator
import {Store} from "appolo-store"
let store = new Store<{ counter: number }>({counter: 0});
store.setState({counter: 1});
store.setState({counter: 2});
for (let state of store.states()) {
console.log(state.counter) // 0 ,1 ,2
}
import {Store} from "appolo-store"
let store = new Store<{ counter: number }>({counter: 0});
store.setState({counter: 1});
store.setState({counter: 2});
store.reset()
store.state().counter // 0
npm run test
MIT