UNPKG

core-native

Version:

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

63 lines 1.97 kB
import { Exception, JavaScriptException } from "../Exception"; import { app } from "../app"; import { spawn } from "../typed-saga"; import { sendEventLogs } from "../platform/bootstrap"; let errorHandlerRunning = false; export function errorToException(error) { if (error instanceof Exception) { return error; } else { let message; 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 (process.env.NODE_ENV === "development") { console.error(`[framework] Error captured from [${action}]`, error); } const exception = errorToException(error); const errorStacktrace = error instanceof Error ? error.stack : undefined; const 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) { // For app, report errors to event server ASAP, in case of sudden termination yield spawn(sendEventLogs); if (errorHandlerRunning) return; try { errorHandlerRunning = true; yield* handler(exception); } catch (e) { console.warn("[framework] Fail to execute error handler", e); } finally { errorHandlerRunning = false; } } //# sourceMappingURL=error-util.js.map