UNPKG

core-native

Version:

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

81 lines 2.81 kB
import { __generator, __values } from "tslib"; import { Exception, JavaScriptException } from "../Exception"; import {} from "../module"; import { app } from "../app"; import { spawn } from "../typed-saga"; import { sendEventLogs } from "../platform/bootstrap"; var errorHandlerRunning = false; export function errorToException(error) { if (error instanceof Exception) { return error; } else { var message = void 0; if (!error) { message = "[No Message]"; } else if (typeof error === "string") { message = error; } else if (error instanceof Error) { message = error.message; } else { try { message = JSON.stringify(error); } catch (e) { message = "[Unknown]"; } } return new JavaScriptException(message, error); } } export function captureError(error, action, extra) { if (extra === void 0) { extra = {}; } if (process.env.NODE_ENV === "development") { console.error("[framework] Error captured from [".concat(action, "]"), error); } var exception = errorToException(error); var errorStacktrace = error instanceof Error ? error.stack : undefined; var info = { payload: extra.actionPayload, extra_stacktrace: extra.extraStacktrace, stacktrace: errorStacktrace, }; app.logger.exception(exception, info, action); app.sagaMiddleware.run(runUserErrorHandler, app.errorHandler, exception); return exception; } export function runUserErrorHandler(handler, exception) { var e_1; return __generator(this, function (_a) { switch (_a.label) { case 0: // For app, report errors to event server ASAP, in case of sudden termination return [4 /*yield*/, spawn(sendEventLogs)]; case 1: // For app, report errors to event server ASAP, in case of sudden termination _a.sent(); if (errorHandlerRunning) return [2 /*return*/]; _a.label = 2; case 2: _a.trys.push([2, 4, 5, 6]); errorHandlerRunning = true; return [5 /*yield**/, __values(handler(exception))]; case 3: _a.sent(); return [3 /*break*/, 6]; case 4: e_1 = _a.sent(); console.warn("[framework] Fail to execute error handler", e_1); return [3 /*break*/, 6]; case 5: errorHandlerRunning = false; return [7 /*endfinally*/]; case 6: return [2 /*return*/]; } }); } //# sourceMappingURL=error-util.js.map