UNPKG

@ustinian-wang/js-monitor

Version:

A universal front-end error monitor and reporting tool for Vue and JS.

125 lines (124 loc) 3.75 kB
function h(e) { return typeof e == "function"; } function w(e, r = () => { }) { return function(...s) { e.apply(this, s), r.apply(this, s); }; } function W(e) { t("setupVue start", e); let r = window.Vue; if (r) { t("vue proxy warn handler start"); let s = (u, a, l) => { var p, d; (p = e.warnHandler) == null || p.call(e, u, a, l), o(e, { type: "vue-warn", error: u, vmName: (d = a == null ? void 0 : a.$options) == null ? void 0 : d.name, info: l }); }; r.config.warnHandler ? r.config.warnHandler = w(r.config.warnHandler, s) : r.config.warnHandler = s, t("vue proxy warn handler end"), t("vue proxy error handler start"); let n = (u, a, l) => { var p, d; (p = e.errorHandler) == null || p.call(e, u, a, l), o(e, { type: "vue-error", error: u, vmName: (d = a == null ? void 0 : a.$options) == null ? void 0 : d.name, info: l }); }; r.config.errorHandler ? r.config.errorHandler = w(r.config.errorHandler, n) : r.config.errorHandler = n, t("vue proxy error handler end"); } t("setupVue end", e); } function j(e) { t("setupWin start"), t("setupWin onerror start"); let r = function(s, n, u, a, l) { var p; (p = e.onerror) == null || p.call(e, s, n, u, a, l), o(e, { type: "onerror", message: s, source: n, lineno: u, colno: a, stack: l == null ? void 0 : l.stack, error: l }); }; window.onerror ? window.onerror = w(window.onerror, r) : window.onerror = r, t("setupWin onerror end"), t("setupWin unhandledrejection start"), window.addEventListener("unhandledrejection", function(s) { var n, u, a; (n = e.unhandledrejection) == null || n.call(e, s), o(e, { type: "unhandledrejection", reason: s.reason, stack: (u = s.reason) == null ? void 0 : u.stack, error: s.reason, message: (a = s.reason) == null ? void 0 : a.message }); }), t("setupWin unhandledrejection end"), t("setupWin error start"), window.addEventListener( "error", function(s) { var l, p; (l = e.error) == null || l.call(e, s); const n = s.target; let u = (p = n == null ? void 0 : n.tagName) == null ? void 0 : p.toLowerCase(); n && ["img", "script", "link"].includes(u) && o(e, { type: "resource-error", tagName: u, src: n.src || n.href }); }, !0 // 必须捕获阶段 ), t("setupWin error end"); } function i(e) { return { ...{}, ...e }; } let H = !1; function t(...e) { H && console.log("[monitor] ", ...e); } let y = !1; function m(e) { if (t("setup launch start"), !e.force) { if (y) { t("setup already launch", e); return; } y = !0; } e = i(e), H = e.debug || !1, t("setup start"), W(e), j(e), t("setup end"), t("setup launch end"); } function o(e, r) { var u, a, l; (u = e.report) == null || u.call(e, e, r), t("report start"), e = i(e); let { appId: s = "", api: n = "" } = e; if (h(e == null ? void 0 : e.filter) && (a = e == null ? void 0 : e.filter) != null && a.call(e, r)) { t("report filter report", r); return; } r = { ...r, appId: s, time: Date.now(), url: location.href, userAgent: navigator.userAgent }, h(e == null ? void 0 : e.transform) && (t("report transform before", r), r = (l = e == null ? void 0 : e.transform) == null ? void 0 : l.call(e, r), t("report transform after", r)), typeof n == "string" ? (t("report api function", r), fetch(n, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(r) })) : (t("report api fetch", r), n(r)); } export { o as report, m as setup };