Build a proxy-state from plain objects. With automatic rollback to previous state in case of errors.
$ npm install @geut/statyimport { staty, subscribe, snapshot, action } from '@geut/staty'
const state = staty({
count: 0
})
console.log(snapshot(state)) // => { count: 0 }
subscribe(state, () => {
console.log(state) // => { count: 1 }
})
subscribe(state, () => {
console.log(state.count) // => 1
}, { props: 'count' })
// filter multiple values
subscribe(state, () => {
console.log(state.count) // => 1
}, { props: ['count'] })
state.count++
try {
action(() => {
state.count = 100
throw new Error('ups')
})
} catch (err) {
console.log(err) // => ups
}
// rollback to the last good state and subscriptions won't be trigger it
state.count // => 1Creates a new proxy-state
target: anyopts?: Object = {}onReadOnly?: (target: any, prop: any, value: any) => {}global handle for readonly snapshot errorsonAction?: (state: Proxy, actionName: any) => {}global subscription to run before every action. Create a state is also an action so it will run on every staty({}) call.
Get subscription listeners count
state: any
Subscribe for changes in the state
state: anyhandler: () => voidopts?: Object = {}props?: string | string[]props to subscribefilter?: (actionName: string) => booleansubscribe only for specific action namesbatch?: boolean = falseexecute in batch turning the subscription into async. Required before=falseautorun?: booleanrun immediately. Required before=falsebefore?: booleanrun before the other subscriptions and after the action finish. Good place to validate your state. Required batch=false && autorun=false
Add a ref to another object
value: anymapSnapshot?: (ref: any) => anycache?: boolean = falseenable cache for snapshots
Create a action
handler: FunctionactionName: string
Creates a snapshot of the state
state: anyprop?: (string | Array<string>)
🐛 If you found an issue we encourage you to report it on github. Please specify your OS and the actions to reproduce it.
👥 Ideas and contributions to the project are welcome. You must follow this guideline.
MIT © A GEUT project