UNPKG

ayanami

Version:
40 lines (39 loc) 1.62 kB
import { Subject } from 'rxjs'; import { getActionNames } from '../decorators'; import { effectSymbols, reducerSymbols, immerReducerSymbols, defineActionSymbols } from '../symbols'; const getOriginalFunctionNames = (ayanami) => ({ effects: getActionNames(effectSymbols, ayanami.constructor), reducers: getActionNames(reducerSymbols, ayanami.constructor), defineActions: getActionNames(defineActionSymbols, ayanami.constructor), immerReducers: getActionNames(immerReducerSymbols, ayanami.constructor), }); const transformDefineActions = (actionNames) => { const result = {}; actionNames.forEach((actionName) => { const actions$ = new Subject(); result[actionName] = { observable: actions$.asObservable(), next: (params) => actions$.next(params), }; }); return result; }; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export const getOriginalFunctions = (ayanami) => { const { effects, reducers, immerReducers, defineActions } = getOriginalFunctionNames(ayanami); return { effects: effects.reduce((acc, method) => { acc[method] = ayanami[method].bind(ayanami); return acc; }, {}), reducers: reducers.reduce((acc, method) => { acc[method] = ayanami[method].bind(ayanami); return acc; }, {}), immerReducers: immerReducers.reduce((acc, method) => { acc[method] = ayanami[method].bind(ayanami); return acc; }, {}), defineActions: transformDefineActions(defineActions), }; };