UNPKG

nedux

Version:

the next redux state management

39 lines 1.41 kB
import { BehaviorSubject } from 'rxjs'; export const createStore = (initState, middlewares = []) => { // Map each `initState` entiries to a BehaviorSubject const subjects = Object.keys(initState).reduce((acc, key) => { const defaultValue = initState[key]; const subject = new BehaviorSubject(defaultValue); return { ...acc, [key]: subject }; }, {}); /** * Get the stored value at the key * @param key target key */ const get = (key) => { return subjects[key].getValue(); }; /** * Set a new value of the propertie `key` of the store * @param key target key * @param value new value */ const set = (key, value) => { subjects[key].next(typeof value === 'function' ? value(get(key)) : value); }; // @todo conditional typing return /** * Subscribe to a key of the store * @param key target key you want to subscribe * @param observer observer that will be called each time the value of key has changed */ const subscribe = (key, observer) => key === '' ? Object.values(subjects).map(sub => sub.subscribe(observer)) : subjects[key].subscribe(observer); // Create the store const store = { get, set, subscribe }; // Intialize all middlewares middlewares.forEach(factory => factory(store)); return store; }; //# sourceMappingURL=store.js.map