UNPKG

vue-auto-track

Version:

auto tracking for vue

2 lines (1 loc) 2.92 kB
"use strict";var e=require("vue-auto-track/src/untils/exposure"),t=require("vue-auto-track/src/untils/lifecycle"),n=require("vue-auto-track/src/untils/get-upload"),o=require("vue-auto-track/src/untils/global");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=r(e),s=r(n);const a=[],u=[];let l={},p=null,c={},f=null,h=0,x=0,g=[],d=null,m="";const y={...t.AppLifeCycle,...t.VueLifeCycle,data:()=>({}),onLaunch(){m="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},onShow(){h=(new Date).getTime(),x=0,this.mpType&&p("page_in",{},"page"),l[f]&&l[f].selectorsPg.forEach((e=>{const t=new i.default(this);t.startObserver(e.selector,(e=>{if(1===e.intersectionRatio){const e=Object.keys(this);let t={};for(let n of e)"function"!=typeof this[n]&&(/^_|\$/.test(n)||~["mpHost","mpType"].indexOf(n)||(t[n]=this[n]));p("exposure",t)}})),a.push(t)}))},onUnload(){for(c={};u.length;)u.shift().disconnect()},onHide(){for(c={},this.mpType?(x=(new Date).getTime(),p("page_out",{},"page")):p("quit",{},"aplication");a.length;)a.shift().disconnect()},mounted(){"page"!==this.mpType&&l[f]&&l[f].selectorsCp.forEach((e=>{const t=new i.default(this);t.startObserver(e.selector,(e=>{if(1===e.intersectionRatio){const e=Object.keys(this);let t={};for(let n of e)"function"!=typeof this[n]&&(/^_|\$/.test(n)||~["mpHost","mpType"].indexOf(n)||(t[n]=this[n]));p("exposure",t)}})),u.push(t)}))},created(){"page"===this.mpType&&(g=getCurrentPages(),f=this.__route__);let e=[],t={};const n=Object.keys(this);for(let o of n)if("function"==typeof this[o]){if(/^_|\$/.test(o))continue;if(-1!==e.indexOf(o))throw new Error(`实例中存在重名的方法--${o}`);c[o]?(c[o],e.sort().toString(),this.$options.name):c[o]=e.sort().toString()+this.$options.name,e.push(o)}else{if(/^_|\$/.test(o))continue;if(~["mpHost","mpType"].indexOf(o))continue;t[o]=""}for(let t of e){const e=this[t];l[f]&&(l[f].pageEvent,l[f].contentEvent),this[t]=(n,o,r,i,s)=>{if(arguments.length>5)throw new Error(`方法${t}的入参数量不能大于5`);return-1!==t.indexOf("track")&&(d?clearTimeout(d):p(t,n&&o&&r?{arg1:n,arg2:o,arg3:r}:n&&o?{arg1:n,arg2:o}:{arg1:n}),d=setTimeout((()=>{d=null}),300)),e(n,o,r,i,s)}}}};var T={install(e,t){if(!t.env||!t.upload)throw new Error("请配置环境以及上传埋点数据的请求");if(t.env==o.ENV_WX&&t.size>=o.MAX_LOCALSTORAGE)throw new Error(`上传触发最大存储限制不能超过${o.MAX_LOCALSTORAGE}字节`);if(t.upload.then)throw new Error("请求必须配置为promise对象");l=t.pageConfig||{},s.default(t.env);let{plugins:r=[]}=t;p=(e,o,i="component")=>{let s=g.length&&g[g.length-1].route||"";r.length&&t.plugins.forEach((t=>t(e,{pageInTime:h+"",pageOutTime:x+"",pageId:s,...o}))),n.thirdTrack(e,{eventType:i,pageInTime:h+"",pageOutTime:x+"",pageId:s,linkId:m,...o},t)},e.mixin(y)}};module.exports=T;