core-native
Version:
A lightweight framework based on React Native + Redux + Redux Saga, in strict TypeScript.
81 lines • 2.81 kB
JavaScript
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