UNPKG

realloc

Version:

Observable and Immutable State Manager Base On JSONPath For Javascript Applications

36 lines (35 loc) 1.02 kB
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 } }