UNPKG

@metagptx/vite-plugin-source-locator

Version:

A Vite plugin for source code location tracking

7 lines (6 loc) 2.23 kB
/*! * @metagptx/vite-plugin-source-locator v0.0.19 * (c) 2026 caowenyue@fuzhi.ai */ import e from"path";import*as t from"@babel/types";import{i as s,h as i,a as r,b as n,g as o,s as a,f as c,c as l,d as p}from"./utils-Byr4NCI7.mjs";import"util";function u(e){let t,s=e[0],i=1;for(;i<e.length;){const r=e[i],n=e[i+1];if(i+=2,("optionalAccess"===r||"optionalCall"===r)&&null==s)return;"access"===r||"optionalAccess"===r?(t=s,s=n(s)):"call"!==r&&"optionalCall"!==r||(s=n((...e)=>s.call(t,...e)),t=void 0)}return s}const f="locator",d=["**/*.{jsx,tsx,js,ts}"],x=e=>Object.entries(e).map(([e,s])=>((e,s)=>{const i=t.isValidIdentifier(e)?t.identifier(e):t.stringLiteral(e);return t.objectProperty(i,t.stringLiteral(s))})(p(e),s)),b=(e,s)=>{if(e.value&&t.isJSXExpressionContainer(e.value))return t.isObjectExpression(e.value.expression)?void((e,s)=>{const i=e.properties.findIndex(e=>t.isSpreadElement(e));-1===i?e.properties.push(...s):e.properties.splice(i,0,...s)})(e.value.expression,s):void(e.value.expression=t.objectExpression([...s,t.spreadElement(e.value.expression)]));e.value=t.jsxExpressionContainer(t.objectExpression(s))};function m(p={}){const{include:m=d,exclude:v=[],prefix:j=f,enable:E=!0,attributes:S,filterTag:A}=p;return function(){return{name:"@metagptx/source-locator-rn",visitor:{JSXOpeningElement(p,f){if(!E)return;const d=f.filename||u([f,"access",e=>e.file,"optionalAccess",e=>e.opts,"optionalAccess",e=>e.filename]),g=u([f,"access",e=>e.file,"optionalAccess",e=>e.code]);if(!d||!g)return;const h=e.relative(process.cwd(),d);if(!s(h,m,v))return;if(i(p,j))return;if(r(p))return;if(n(p))return;const J=o(p.node.name);if(!a(J,A))return;const X=c(process.cwd()),C=e.relative(X,d),I=l({code:g,path:p,prefix:j,relativePath:C,attributes:S});if(!I)return;const O=x(I.attrs),w=p.node.attributes.find(e=>t.isJSXAttribute(e)&&t.isJSXIdentifier(e.name)&&"dataSet"===e.name.name);if(w&&t.isJSXAttribute(w))return void b(w,O);const y=p.node.attributes.findIndex(e=>t.isJSXSpreadAttribute(e)),L=t.jsxAttribute(t.jsxIdentifier("dataSet"),t.jsxExpressionContainer(t.objectExpression(O)));-1===y?p.node.attributes.push(L):p.node.attributes.splice(y,0,L)}}}}}export{m as rnSourceLocator}; //# sourceMappingURL=rn.mjs.map