realloc
Version:
Observable and Immutable State Manager Base On JSONPath For Javascript Applications
36 lines (35 loc) • 1.02 kB
JavaScript
import actionCreatorFactory from './actionCreatorFactory'
import { createJSONPathMatcher } from './JSONPathCompiler'
export default function createObservableState(initialState = {}, options = {}){
let currentState = {
$:initialState
}
let subscribers = []
function subscribe(callback){
subscribers = subscribers.concat(callback)
return () => {
subscribers = subscribers.filter((cb) => cb !== callback)
}
}
function getState(){
return currentState.$
}
function createGetter(path){
const matcher = createJSONPathMatcher(path)
return (...args) => {
return matcher(currentState.$, args).map((v) => v.value)
}
}
const {createAction, createActions} = actionCreatorFactory(() => currentState.$, (nextState, results) => {
let prevState = currentState.$
currentState.$ = nextState
subscribers.forEach((cb) => cb(currentState.$, prevState, results))
})
return {
getState,
createGetter,
subscribe,
createAction,
createActions
}
}