sentry-uniapp
Version:
用于Uniapp/小程序/快应用等平台的 Sentry SDK
151 lines • 6.14 kB
JavaScript
import { __assign } from "tslib";
import { getCurrentHub } from "@sentry/core";
import { logger } from "@sentry/utils";
import { sdk } from "../crossPlatform";
/** Global handlers */
var GlobalHandlers = /** @class */ (function () {
/** JSDoc */
function GlobalHandlers(options) {
/**
* @inheritDoc
*/
this.name = GlobalHandlers.id;
/** JSDoc */
this._onErrorHandlerInstalled = false;
/** JSDoc */
this._onUnhandledRejectionHandlerInstalled = false;
/** JSDoc */
this._onPageNotFoundHandlerInstalled = false;
/** JSDoc */
this._onMemoryWarningHandlerInstalled = false;
this._options = __assign({ onerror: true, onunhandledrejection: true, onpagenotfound: true, onmemorywarning: true }, options);
}
/** JSDoc */
GlobalHandlers.prototype.setExtraOptions = function (extraOptions) {
if (extraOptions) {
if (extraOptions.onerror !== undefined) {
this._options.onerror = !!extraOptions.onerror;
}
if (extraOptions.onunhandledrejection !== undefined) {
this._options.onunhandledrejection = !!extraOptions.onunhandledrejection;
}
if (extraOptions.onpagenotfound !== undefined) {
this._options.onpagenotfound = !!extraOptions.onpagenotfound;
}
if (extraOptions.onmemorywarning !== undefined) {
this._options.onmemorywarning = !!extraOptions.onmemorywarning;
}
}
};
/**
* @inheritDoc
*/
GlobalHandlers.prototype.setupOnce = function () {
Error.stackTraceLimit = 50;
if (this._options.onerror) {
logger.log("Global Handler attached: onError");
this._installGlobalOnErrorHandler();
}
if (this._options.onunhandledrejection) {
logger.log("Global Handler attached: onunhandledrejection");
this._installGlobalOnUnhandledRejectionHandler();
}
if (this._options.onpagenotfound) {
logger.log("Global Handler attached: onPageNotFound");
this._installGlobalOnPageNotFoundHandler();
}
if (this._options.onmemorywarning) {
logger.log("Global Handler attached: onMemoryWarning");
this._installGlobalOnMemoryWarningHandler();
}
};
/** JSDoc */
GlobalHandlers.prototype._installGlobalOnErrorHandler = function () {
if (this._onErrorHandlerInstalled) {
return;
}
if (!!sdk.onError) {
var currentHub_1 = getCurrentHub();
// https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onError.html
sdk.onError(function (err) {
// console.info("sentry-uniapp", err);
var error = typeof err === 'string' ? new Error(err) : err;
currentHub_1.captureException(error);
});
}
this._onErrorHandlerInstalled = true;
};
/** JSDoc */
GlobalHandlers.prototype._installGlobalOnUnhandledRejectionHandler = function () {
if (this._onUnhandledRejectionHandlerInstalled) {
return;
}
if (!!sdk.onUnhandledRejection) {
var currentHub_2 = getCurrentHub();
// https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onUnhandledRejection.html
sdk.onUnhandledRejection(function (_a) {
var reason = _a.reason, promise = _a.promise;
// console.log(reason, typeof reason, promise)
// 为什么官方文档上说 reason 是 string 类型,但是实际返回的确实 object 类型
var error = typeof reason === 'string' ? new Error(reason) : reason;
currentHub_2.captureException(error, {
data: promise,
});
});
}
this._onUnhandledRejectionHandlerInstalled = true;
};
/** JSDoc */
GlobalHandlers.prototype._installGlobalOnPageNotFoundHandler = function () {
if (this._onPageNotFoundHandlerInstalled) {
return;
}
if (!!sdk.onPageNotFound) {
var currentHub_3 = getCurrentHub();
sdk.onPageNotFound(function (res) {
var url = res.path.split("?")[0];
currentHub_3.setTag("pagenotfound", url);
currentHub_3.setExtra("message", JSON.stringify(res));
currentHub_3.captureMessage("\u9875\u9762\u65E0\u6CD5\u627E\u5230: " + url);
});
}
this._onPageNotFoundHandlerInstalled = true;
};
/** JSDoc */
GlobalHandlers.prototype._installGlobalOnMemoryWarningHandler = function () {
if (this._onMemoryWarningHandlerInstalled) {
return;
}
if (!!sdk.onMemoryWarning) {
var currentHub_4 = getCurrentHub();
sdk.onMemoryWarning(function (_a) {
var _b = _a.level, level = _b === void 0 ? -1 : _b;
var levelMessage = "没有获取到告警级别信息";
switch (level) {
case 5:
levelMessage = "TRIM_MEMORY_RUNNING_MODERATE";
break;
case 10:
levelMessage = "TRIM_MEMORY_RUNNING_LOW";
break;
case 15:
levelMessage = "TRIM_MEMORY_RUNNING_CRITICAL";
break;
default:
return;
}
currentHub_4.setTag("memory-warning", String(level));
currentHub_4.setExtra("message", levelMessage);
currentHub_4.captureMessage("\u5185\u5B58\u4E0D\u8DB3\u544A\u8B66");
});
}
this._onMemoryWarningHandlerInstalled = true;
};
/**
* @inheritDoc
*/
GlobalHandlers.id = "GlobalHandlers";
return GlobalHandlers;
}());
export { GlobalHandlers };
//# sourceMappingURL=globalhandlers.js.map