UNPKG

core-native

Version:

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

44 lines 1.89 kB
import { app } from "./app"; import { ModuleProxy } from "./platform/ModuleProxy"; import { setStateAction } from "./reducer"; import { stringifyWithMask } from "./util/json-util"; import { captureError } from "./util/error-util"; export function register(module) { const moduleName = module.name; if (!app.store.getState().app[moduleName]) { // To get private property app.store.dispatch(setStateAction(moduleName, module.initialState, `@@${moduleName}/@@init`)); } // Transform every method into ActionCreator const actions = {}; getKeys(module).forEach((actionType) => { // Attach action name, for @Log / error handler reflection const method = module[actionType]; const qualifiedActionType = `${moduleName}/${actionType}`; method.actionName = qualifiedActionType; actions[actionType] = (...payload) => ({ type: qualifiedActionType, payload }); app.actionHandlers[qualifiedActionType] = method.bind(module); }); return new ModuleProxy(module, actions); } export function* executeAction(actionName, handler, ...payload) { var _a; try { yield* handler(...payload); } catch (error) { const actionPayload = stringifyWithMask(((_a = app.loggerConfig) === null || _a === void 0 ? void 0 : _a.maskedKeywords) || [], "***", ...payload) || "[No Parameter]"; captureError(error, actionName, { actionPayload }); } } function getKeys(module) { // Do not use Object.keys(Object.getPrototypeOf(module)), because class methods are not enumerable const keys = []; for (const propertyName of Object.getOwnPropertyNames(Object.getPrototypeOf(module))) { if (module[propertyName] instanceof Function && propertyName !== "constructor") { keys.push(propertyName); } } return keys; } //# sourceMappingURL=module.js.map