UNPKG

tracker-mn

Version:
2 lines (1 loc) 2.17 kB
"use strict";var i=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var u=(s,e)=>{for(var r in e)i(s,r,{get:e[r],enumerable:!0})},v=(s,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of h(e))!d.call(s,t)&&t!==r&&i(s,t,{get:()=>e[t],enumerable:!(a=c(e,t))||a.enumerable});return s};var l=s=>v(i({},"__esModule",{value:!0}),s);var m={};u(m,{Tracker:()=>n});module.exports=l(m);var p=["click","dblclick","contextmenu","mousedown","mouseup","mouseenter","mouseout","mouseover"];var o=s=>{let e=history[s];return function(...r){let a=e.apply(this,r),t=new Event(s);return window.dispatchEvent(t),a}};var n=class{constructor(e){this.data=Object.assign(this.initDef(),e),this.installTracker()}setUserId(e){this.data.uuid=e}setExtra(e){this.data.extra=e}sendTracker(e){this.reportTracker(e)}initDef(){return window.history.pushState=o("pushState"),window.history.replaceState=o("replaceState"),{sdkVersion:"1.0.0",historyTracker:!1,hashTracker:!1,domTracker:!1,jsError:!1}}targetKeyReport(){for(let e of p)window.addEventListener(e,r=>{let t=r.target.getAttribute("target-key");t&&this.reportTracker({event:e,targetKey:t})})}captureEvents(e,r,a){for(let t of e)window.addEventListener(t,()=>{this.reportTracker({event:t,targetKey:r,data:a})})}installTracker(){let{historyTracker:e,hashTracker:r,domTracker:a,jsError:t}=this.data;e&&this.captureEvents(["pushState","replaceState","popstate"],"history-pv"),r&&this.captureEvents(["hashchange"],"hash-pv"),a&&this.targetKeyReport(),t&&this.jsError()}jsError(){this.errorEvent(),this.promiseReject()}errorEvent(){window.addEventListener("error",e=>{this.reportTracker({targetKey:"message",event:"error",message:e.message})})}promiseReject(){window.addEventListener("unhandledrejection",e=>{e.promise.catch(r=>{this.reportTracker({targetKey:"message",event:"promiseReject",message:r.message})})})}reportTracker(e){let r=Object.assign(this.data,e,{time:new Date().getTime()}),a={type:"application/x-www-form-urlencoded"},t=new Blob([JSON.stringify(r)],a);navigator.sendBeacon(this.data.requestUrl,t)}};0&&(module.exports={Tracker});