UNPKG

core-native

Version:

A lightweight framework based on React Native + Redux + Redux Saga, in strict TypeScript.

48 lines 1.86 kB
import { applyMiddleware, compose, createStore } from "redux"; import createSagaMiddleware from "redux-saga"; import { takeEvery } from "redux-saga/effects"; import { LoggerImpl } from "./Logger"; import { executeAction } from "./module"; import { LOADING_ACTION, rootReducer } from "./reducer"; import { captureError } from "./util/error-util"; export const app = createApp(); export const logger = app.logger; function composeWithDevTools(enhancer) { let composeEnhancers = compose; if (process.env.NODE_ENV === "development") { const extension = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__; if (extension) { composeEnhancers = extension({ // Ref: https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md actionsBlacklist: [LOADING_ACTION], }); } } return composeEnhancers(enhancer); } function createApp() { const eventLogger = new LoggerImpl(); const sagaMiddleware = createSagaMiddleware({ onError: (error, info) => captureError(error, "@@framework/detached-saga", { extraStacktrace: info.sagaStack }), }); const store = createStore(rootReducer(), composeWithDevTools(applyMiddleware(sagaMiddleware))); sagaMiddleware.run(function* () { yield takeEvery("*", function* (action) { const handler = app.actionHandlers[action.type]; if (handler) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore yield* executeAction(action.type, handler, ...action.payload); } }); }); return { store, sagaMiddleware, actionHandlers: {}, logger: eventLogger, loggerConfig: null, *errorHandler() { }, }; } //# sourceMappingURL=app.js.map