UNPKG

use-monitor

Version:

use-monitor是轻量级前端埋点监控上报sdk

2 lines (1 loc) 8.18 kB
"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function n(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}Object.defineProperty(exports,"__esModule",{value:!0}),exports.MonitorConfig=void 0,(exports.MonitorConfig||(exports.MonitorConfig={})).version="1.0.0";var o=function(e){var t=history[e];return function(){var n=t.apply(this,arguments),r=new Event(e);return r.arguments=arguments,window.dispatchEvent(r),n}},i=["click"],a=["page","hashchange","popstate","pushState","replaceState","performance"];function s(){return navigator.sendBeacon&&"function"==typeof navigator.sendBeacon}var u=function(){try{return!("undefined"!=typeof window&&void 0!==document)}catch(e){return!0}}()?function(){}:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.addEventListener(t,n,r)},c=function t(n){return Object.keys(n).forEach((function(r){var o=n[r];o&&"object"===e(o)&&t(o),(""===o||null==o||0===o.length||0===Object.keys(o).length)&&delete n[r]})),n},l=function(t){switch(e(t)){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};function p(e,t){for(var n=[];(e=e.parentNode)&&9!==e.nodeType;)1===e.nodeType&&e.getAttribute(t)&&n.push(e);return n}function f(){var e=this;document.addEventListener("DOMContentLoaded",(function(){if(performance){var t=performance.timing;console.log("PerformanceNavigationTiming~~~",window.PerformanceNavigationTiming);var n,r,o,i,a=t.navigationStart;n=t.domainLookupEnd-t.domainLookupStart,r=t.connectEnd-t.connectStart,console.log("dnsTime~~ ",n),console.log("tcpTime~~ ",r),o=t.responseStart-a,i=t.domContentLoadedEventEnd-a,e.push({type:"performance",config:{performance_time:i,performance_type:"page_dom_ready_time"}}),e.push({type:"performance",config:{performance_type:"page_first_paint_time",performance_time:o}})}else console.log("你的浏览器不支持 performance 接口")}))}function d(){var e=this;window.addEventListener("error",(function(t){var n=t.srcElement||t.target,r=(null==n?void 0:n.src)||(null==n?void 0:n.href);e.push({type:"error",config:{error_url:r,error_message:t.message}})}),!0)}function h(){var e=this;window.addEventListener("unhandledrejection",(function(t){t.promise.catch((function(t){e.push({type:"reject",config:{error_message:t}})}))}))}var m=function(){function r(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r),this.requestOptions={},this.defaultOptons=this.initDef(e),this.installMonitor()}var m,v,y;return m=r,v=[{key:"setToken",value:function(e){this.defaultOptons.token=e}},{key:"initDef",value:function(e){return this.version=exports.MonitorConfig.version,this.setRequestOptions(e),window.history.pushState=o("pushState"),window.history.replaceState=o("replaceState"),Object.assign({sdkVersion:this.version,historyTracker:!1,hashTracker:!1,beaconTracker:!1,pushPerformance:!1,domTracker:!0,debug:!1,jsErrorTracker:!0},e)}},{key:"setRequestOptions",value:function(e){this.requestOptions=Object.assign(Object.assign(Object.assign({},this.requestOptions),{app_id:null==e?void 0:e.app_id,app_name:null==e?void 0:e.app_name,token:null==e?void 0:e.token,module:null==e?void 0:e.module,module_name:null==e?void 0:e.module_name}),null==e?void 0:e.config)}},{key:"setConfig",value:function(e){this.defaultOptons=Object.assign(Object.assign({},this.defaultOptons),e),this.setRequestOptions(this.defaultOptons)}},{key:"getCurrInfo",value:function(){return Object.assign(Object.assign({},this.requestOptions),{ua:navigator.userAgent,url:window.location.href,domain:document.domain||"",title:document.title,referrer:document.referrer||""})}},{key:"pushDebuggerLog",value:function(e){this.defaultOptons.debug&&(console.log("----------".concat(e.type,"------------")),-1!==a.indexOf(e.type)?console.log(e.app_name," ",e.module_name):console.log(e.app_name||e.app_name," ",e.module_name||e.module_name," ",e.path_name," ",e.event_name))}},{key:"captureEvents",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.requestOptions;e.forEach((function(e){u(window,e,(function(){t.push(Object.assign(Object.assign({},n),{type:e}))}))}))}},{key:"targetKeyReport",value:function(e){var t=this;e.forEach((function(e){u(window,e,(function(e){var n=e.target;t.clickTarget(n)}))}))}},{key:"clickTarget",value:function(e){var t,r=this,o=function(e){var t=p(e,"m_p");t.unshift(e);var o=function(){var e=[];return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach((function(t){var r=(t.getAttribute("m_p")||"").split("|");e.push.apply(e,n(r.reverse()))})),e.filter((function(e){return!!e})).reverse()}(t),i=e.getAttribute("m_btn")||e.innerText,a=e.getAttribute("m_val")||"";r.push({type:"click",path_name:JSON.stringify(o),event_name:i,event_value:a,actions:JSON.stringify([{name:i}])})},i=[];(null===(t=null==e?void 0:e.attributes)||void 0===t?void 0:t.getNamedItem("m_btn"))&&i.push(e);var a=p(e,"m_btn");(i=[].concat(n(i),n(a))).forEach((function(e){return o(e)}))}},{key:"clickPush",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.requestOptions;this.push({type:"click",path:e.path,actions:JSON.stringify([{name:e.name||"",value:e.value||""}])})}},{key:"push",value:function(e){if(e.path_name||(e.path_name="",e.path&&(Array.isArray(e.path)?e.path_name=JSON.stringify(e.path):e.path_name=e.path)),!e.event_name&&e.actions){var t=JSON.parse(e.actions);t.length&&(e.event_name=t[0].name||"",e.event_value=t[0].value||"")}this.reportTracker(e)}},{key:"reportTracker",value:function(e){var t=this.defaultOptons.requestUrl||this.defaultOptons.url,n=Object.assign(this.getCurrInfo(),e,{time:(new Date).getTime()},{actions:JSON.stringify(e.actions)},null==e?void 0:e.config);null==n||delete n.config;var r=c(n);this.pushDebuggerLog(r),this.defaultOptons.beaconTracker&&s?this.requestByPost(t,r):this.requestByGet(t,r)}},{key:"requestByPost",value:function(e,t){var n=new Blob([JSON.stringify(t)],{type:"application/x-www-form-urlencoded"});navigator.sendBeacon(e,n)}},{key:"requestByGet",value:function(t,n){var r,o,i,a,s=document.createElement("img");s.src="".concat(t,"?_t=").concat(+new Date,"&").concat((o=o||"&",i=i||"=",null===(r=n)&&(r=void 0),"object"===e(r)?Object.keys(r).map((function(e){var t=encodeURIComponent(l(e))+i;return Array.isArray(r[e])?r[e].map((function(e){return t+encodeURIComponent(l(e))})).join(o):t+encodeURIComponent(l(r[e]))})).filter(Boolean).join(o):a?encodeURIComponent(l(a))+i+encodeURIComponent(l(r)):"")),s.style.display="none",document.body.appendChild(s),s.parentNode.removeChild(s)}},{key:"installMonitor",value:function(){var e=this.defaultOptons,t=e.historyTracker,n=e.hashTracker,r=e.jsErrorTracker,o=e.pushPerformance,a=e.domTracker;if(t&&this.captureEvents(["pushState","replaceState","popstate"]),n&&this.captureEvents(["hashchange"]),a){var s=this.defaultOptons.domEventList,u=(null==s?void 0:s.length)?s:i;this.targetKeyReport(u)}o&&f.call(this),r&&(d.call(this),h.call(this))}}],v&&t(m.prototype,v),y&&t(m,y),Object.defineProperty(m,"prototype",{writable:!1}),r}();exports.default=m;