UNPKG

ctc-track-plugin

Version:

uniapp 小程序埋点劫持

10 lines 2.32 kB
import{parse as z}from"vue/compiler-sfc";var F=()=>({name:"inject-click-handler",transform(m,P){var f,$;try{if(!/.vue$/.test(P))return null;let a=z(m);if(!a||!(($=(f=a.descriptor)==null?void 0:f.template)!=null&&$.content))return null;let{content:g}=a.descriptor.template,u=g,h=[],M=(t,c)=>{var i,d,v,S,y,k,w,C;let r=t.props.find(n=>{var s;return n.type===6&&n.name==="data-manual-track"||n.type===7&&n.name==="bind"&&((s=n.arg)==null?void 0:s.content)==="data-manual-track"});if(r){let n=t.tag,s=r.type===6?`'${((i=r.value)==null?void 0:i.content)||""}'`:((d=r.exp)==null?void 0:d.content)||"",o=t.props.find(e=>{var l;return e.type===7&&e.name==="on"&&((l=e.arg)==null?void 0:l.content)==="click"}),E=((v=t.children.find(e=>e.type===2))==null?void 0:v.content)??"";if(o){let e=((S=o.exp)==null?void 0:S.content)||"",N=/^\s*[a-zA-Z_$][\w$]*\s*\([^)]*\)\s*$|^\s*[a-zA-Z_$][\w$]*\s*$/.test(e)?/\([^)]*\)/.test(e)?e:`${e}()`:/\s*[\w-]+\s*=\s*.*?\s*/.test(e)?e:`${e}($event)`,p=`@click.stop="sendMd({ content:${s}, tag:'${n}', text:'${E}' });${N}"`,R=t.loc.source.replace(o.loc.source,p).trim();c.push({source:t.loc.source,replaceSource:R})}else{let e=`@click.stop="sendMd({ content:${s}, tag:${n}, text:'${E}' })"`,l=t.loc.source.lastIndexOf(">"),p=t.loc.source[l-1]==="/"?t.loc.source.slice(0,l-1).trim()+` ${e} />`:t.loc.source.slice(0,l).trim()+` ${e}>`;c.push({source:t.loc.source,replaceSource:p})}}else if(t.tag==="navigator"&&t.type===1){let n=((k=(y=t.props.find(o=>o.name==="url"))==null?void 0:y.value)==null?void 0:k.content)??((C=(w=t.props.find(o=>o.rawName===":url"))==null?void 0:w.exp)==null?void 0:C.content),s=t.loc.source.replace(/<navigator([^>]*)>/,`<navigator$1 @click.stop="sendPageMd('${n}')">`).trim();c.push({source:t.loc.source,replaceSource:s})}},x=(t,c)=>{var r;(r=t==null?void 0:t.props)!=null&&r.length&&M(t,c),t.children&&t.children.forEach(i=>x(i,c))};return x(a.descriptor.template.ast,h),h.sort((t,c)=>c.source.length-t.source.length).forEach(({source:t,replaceSource:c})=>{u=u.replace(t,c)}),{code:m.replace(g,u),map:null}}catch(a){return console.error(`\u57CB\u70B9\u6CE8\u5165\u5931\u8D25: ${a}`),null}}});export{F as default}; //# sourceMappingURL=inject-click-handler.js.map