UNPKG

@snipsonian/observable-state

Version:

Observable-state snippets (redux-like)

41 lines (40 loc) 1.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const createObservableStateStore_1 = require("../store/createObservableStateStore"); const createObservableStateActionMiddleware_1 = require("./createObservableStateActionMiddleware"); function createActionableObservableStateStore(config) { const store = (0, createObservableStateStore_1.default)(config); const middlewares = [ ...(config.middlewares || []), (0, createObservableStateActionMiddleware_1.default)({ store, extraProcessInput: config.observableStateActionExtraProcessInput, }), ]; store.dispatch = applyMiddleware({ store, middlewares }); return store; } exports.default = createActionableObservableStateStore; function applyMiddleware({ store, middlewares, }) { let dispatch = () => { throw new Error('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.'); }; const middlewareAPI = { getState: store.getState, dispatch: (...args) => dispatch(...args), }; const innerDispatch = (action) => action; const chain = middlewares.map((middleware) => middleware(middlewareAPI)); dispatch = compose(...chain)(innerDispatch); return dispatch; } function compose(...funcs) { if (funcs.length === 0) { return (arg) => arg; } if (funcs.length === 1) { return funcs[0]; } return funcs.reduce((a, b) => (...args) => a(b(...args))); }