@ustinian-wang/js-monitor
Version:
A universal front-end error monitor and reporting tool for Vue and JS.
2 lines (1 loc) • 3.78 kB
JavaScript
(function(d,o){typeof exports=="object"&&typeof module<"u"?o(exports):typeof define=="function"&&define.amd?define(["exports"],o):(d=typeof globalThis<"u"?globalThis:d||self,o(d.JsMonitor={}))})(this,function(d){"use strict";function o(e){return typeof e=="function"}function i(e,r=()=>{}){return function(...t){e.apply(this,t),r.apply(this,t)}}const p={VUE_WARN:"vue-warn",VUE_ERROR:"vue-error",UNHANDLEDREJECTION:"unhandledrejection",ONERROR:"onerror",RESOURCE_ERROR:"resource-error",TEST:"test"};function h(e,r,t,n){var l,s;(l=e.warnHandler)==null||l.call(e,r,t,n),E(e,{type:p.VUE_WARN,error:r,message:r.message,stack:r.stack,vmName:(s=t==null?void 0:t.$options)==null?void 0:s.name,info:n})}function w(e,r,t,n){var l,s;(l=e.errorHandler)==null||l.call(e,r,t,n),E(e,{type:p.VUE_ERROR,error:r,message:r.message,stack:r.stack,vmName:(s=t==null?void 0:t.$options)==null?void 0:s.name,info:n})}function y(e,r){var l,s,u,R;(l=e.unhandledrejection)==null||l.call(e,r);let t=r.reason,n="";(s=t==null?void 0:t.response)!=null&&s.config&&(n=JSON.stringify(t.response.config)),E(e,{type:p.UNHANDLEDREJECTION,reason:r.reason,stack:((u=r.reason)==null?void 0:u.stack)||"",error:r.reason,message:((R=r.reason)==null?void 0:R.message)||"",resConfig:n})}function m(e){let r=Object.values(p);return e.watch||r}function C(e){let r=e==null?void 0:e.vueConfig;if(r){a("vue proxy warn handler start");let t=(n,l,s)=>{h(e,n,l,s)};r.warnHandler?r.warnHandler=i(r.warnHandler,t):r.warnHandler=t,a("vue proxy warn handler end")}}function U(e){let r=e==null?void 0:e.vueConfig;if(r){a("vue proxy error handler start");let t=(n,l,s)=>{w(e,n,l,s)};r.errorHandler?r.errorHandler=i(r.errorHandler,t):r.errorHandler=t,a("vue proxy error handler end")}}const O=(e,r)=>{var s,u;(s=e.error)==null||s.call(e,r);const t=r.target;let n=(u=t==null?void 0:t.tagName)==null?void 0:u.toLowerCase();t&&["img","script","link"].includes(n)&&E(e,{type:p.RESOURCE_ERROR,tagName:n,src:t.src||t.href})};function j(e){a("setupWin onerror start");let r=function(t,n,l,s,u){var R;(R=e.onerror)==null||R.call(e,t,n,l,s,u),E(e,{type:p.ONERROR,message:t,source:n,lineno:l,colno:s,stack:u==null?void 0:u.stack,error:u})};window.onerror?window.onerror=i(window.onerror,r):window.onerror=r,a("setupWin onerror end")}function T(e){a("setupWin unhandledrejection start"),window.addEventListener("unhandledrejection",function(r){y(e,r)}),a("setupWin unhandledrejection end")}function W(e){a("setupWin error start"),window.addEventListener("error",function(r){O(e,r)},!0),a("setupWin error end")}function H(e){return{...{},...e}}let N=!1;function a(...e){N&&console.log("[monitor] ",...e)}let _=!1;function k(e){if(a("setup launch start"),!e.force){if(_){a("setup already launch",e);return}_=!0}e=H(e),N=e.debug||!1;let r=m(e);a("setup start"),r.includes(p.VUE_WARN)&&C(e),r.includes(p.VUE_ERROR)&&U(e),r.includes(p.ONERROR)&&j(e),r.includes(p.RESOURCE_ERROR)&&W(e),r.includes(p.UNHANDLEDREJECTION)&&T(e),a("setup launch end")}function E(e,r){var l,s,u;(l=e.report)==null||l.call(e,e,r),a("report start"),e=H(e);let{appId:t="",api:n=""}=e;if(o(e==null?void 0:e.filter)&&(s=e==null?void 0:e.filter)!=null&&s.call(e,r)){a("report filter report",r);return}r={...r,appId:t,time:Date.now(),url:location.href,userAgent:navigator.userAgent},o(e==null?void 0:e.transform)&&(a("report transform before",r),r=(u=e==null?void 0:e.transform)==null?void 0:u.call(e,r),a("report transform after",r)),typeof n=="string"?(a("report api function",r),fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})):(a("report api fetch",r),n(r))}d.ErrTypeEnum=p,d.callError=O,d.callErrorHandler=w,d.callUnhandledrejection=y,d.callWarnHandler=h,d.report=E,d.setup=k,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});