ctc-track-plugin
Version:
uniapp 小程序埋点劫持
13 lines • 2.96 kB
JavaScript
var y=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var I=(e,c)=>{for(var n in c)y(e,n,{get:c[n],enumerable:!0})},z=(e,c,n,a)=>{if(c&&typeof c=="object"||typeof c=="function")for(let r of P(c))!_.call(e,r)&&r!==n&&y(e,r,{get:()=>c[r],enumerable:!(a=M(c,r))||a.enumerable});return e};var L=e=>z(y({},"__esModule",{value:!0}),e);var j={};I(j,{default:()=>b});module.exports=L(j);var A=require("vue/compiler-sfc"),N=e=>e.props.find(c=>{var n;return c.type===7&&c.name==="on"&&((n=c.arg)==null?void 0:n.content)==="click"}),T=e=>{var n;return((n=e.children.find(a=>a.type===2))==null?void 0:n.content)??""},O=/^\s*[a-zA-Z_$][\w$]*\s*\([^)]*\)\s*$|^\s*[a-zA-Z_$][\w$]*\s*$/,Z=e=>O.test(e)&&!/\([^)]*\)/.test(e)?`${e}()`:e,R=(e,c,n,a)=>{var f;let r=((f=c.exp)==null?void 0:f.content)||"",$=Z(r),m=`@click.stop="${n};${$}"`,i=e.loc.source.replace(c.loc.source,m).trim();a.push({source:e.loc.source,replaceSource:i})},b=()=>({name:"inject-click-handler",transform(e,c){var n,a;try{if(!/.vue$/.test(c))return null;let r=(0,A.parse)(e);if(!r||!((a=(n=r.descriptor)==null?void 0:n.template)!=null&&a.content))return null;let{content:$}=r.descriptor.template,m=$,i=[],f=t=>{var g,d,k,E,C,S,w;if((g=t==null?void 0:t.props)!=null&&g.length){let u=t.props.find(s=>{var l;return s.type===6&&s.name==="data-manual-track"||s.type===7&&s.name==="bind"&&((l=s.arg)==null?void 0:l.content)==="data-manual-track"});if(u){let s=t.tag,l=u.type===6?`'${((d=u.value)==null?void 0:d.content)||""}'`:u.type===7&&((k=u.exp)==null?void 0:k.content)||"",x=N(t),p="",v=T(t);if(x){let o=`sendMd({
content:${l},
tag:'${s}',
text:'${v}'
})`;R(t,x,o,i)}else{p=`@click.stop="sendMd({
content:${l},
tag:${s},
text:'${v}'
})"`;let o=t.loc.source.lastIndexOf(">"),F=t.loc.source[o-1]==="/",h;F?h=t.loc.source.slice(0,o-1).trim()+` ${p} />`:h=t.loc.source.slice(0,o).trim()+` ${p}>`,i.push({source:t.loc.source,replaceSource:h})}}else{let s=t.tag;if(s==="navigator"&&t.type===1){let p=((C=(E=t.props.find(o=>o.name==="url"))==null?void 0:E.value)==null?void 0:C.content)??((w=(S=t.props.find(o=>o.rawName===":url"))==null?void 0:S.exp)==null?void 0:w.content),v=t.loc.source.replace(/<navigator([^>]*)>/,`<navigator$1 @click.stop="sendPageMd('${p}',{},'${s}')">`).trim();i.push({source:t.loc.source,replaceSource:v})}let l=N(t),x=T(t);if(l){let p=`sendMd({
tag: '${s}',
text:'${x}'
})`;R(t,l,p,i)}}}t.children&&t.children.forEach(u=>f(u))};return f(r.descriptor.template.ast),i.sort((t,g)=>g.source.length-t.source.length).forEach(({source:t,replaceSource:g})=>{m=m.replace(t,g)}),{code:e.replace($,m),map:null}}catch(r){return console.error(`\u57CB\u70B9\u6CE8\u5165\u5931\u8D25: ${r}`),null}}});
//# sourceMappingURL=inject-click-handler.cjs.map