UNPKG

core-native

Version:

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

80 lines 3.33 kB
import { __generator, __read, __spreadArray, __values } from "tslib"; import { app } from "./app"; import { Exception } from "./Exception"; import { Module } from "./platform/Module"; import { ModuleProxy } from "./platform/ModuleProxy"; import { setStateAction } from "./reducer"; import {} from "./typed-saga"; import { stringifyWithMask } from "./util/json-util"; import { captureError } from "./util/error-util"; export function register(module) { var moduleName = module.name; if (!app.store.getState().app[moduleName]) { // To get private property app.store.dispatch(setStateAction(moduleName, module.initialState, "@@".concat(moduleName, "/@@init"))); } // Transform every method into ActionCreator var actions = {}; getMethods(module).forEach(function (_a) { var actionType = _a.name, method = _a.method; // Attach action name, for @Log / error handler reflection var qualifiedActionType = "".concat(moduleName, "/").concat(actionType); method.actionName = qualifiedActionType; actions[actionType] = function () { var payload = []; for (var _i = 0; _i < arguments.length; _i++) { payload[_i] = arguments[_i]; } return ({ type: qualifiedActionType, payload: payload }); }; app.actionHandlers[qualifiedActionType] = method.bind(module); }); return new ModuleProxy(module, actions); } export function executeAction(actionName, handler) { var _i, error_1, actionPayload; var _a; var payload = []; for (_i = 2; _i < arguments.length; _i++) { payload[_i - 2] = arguments[_i]; } return __generator(this, function (_b) { switch (_b.label) { case 0: _b.trys.push([0, 2, , 3]); return [5 /*yield**/, __values(handler.apply(void 0, __spreadArray([], __read(payload), false)))]; case 1: _b.sent(); return [3 /*break*/, 3]; case 2: error_1 = _b.sent(); actionPayload = stringifyWithMask.apply(void 0, __spreadArray([((_a = app.loggerConfig) === null || _a === void 0 ? void 0 : _a.maskedKeywords) || [], "***"], __read(payload), false)) || "[No Parameter]"; captureError(error_1, actionName, { actionPayload: actionPayload }); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); } function getMethods(module) { var e_1, _a; // Do not use Object.keys(Object.getPrototypeOf(module)), because class methods are not enumerable var keys = []; try { for (var _b = __values(Object.getOwnPropertyNames(Object.getPrototypeOf(module))), _c = _b.next(); !_c.done; _c = _b.next()) { var propertyName = _c.value; var method = Reflect.get(module, propertyName); if (method instanceof Function && propertyName !== "constructor") { keys.push({ name: propertyName, method: method }); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } return keys; } //# sourceMappingURL=module.js.map