UNPKG

@open-editor/vue

Version:

Add a _debugSource prop to all Elements

2 lines (1 loc) 5.39 kB
import{relative as e,extname as t}from"node:path";import{normalizePath as r}from"@open-editor/shared";import{isDev as n}from"@open-editor/shared/node";import{DS as o}from"@open-editor/shared/debugSource";import{createUnplugin as i}from"unplugin";import{createFilter as s}from"@rollup/pluginutils";import l from"magic-string";import{parse as u}from"@babel/parser";import{traverse as p}from"@babel/core";import{ElementTypes as c,parse as a,NodeTypes as f}from"@vue/compiler-dom";function _define_property(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _object_spread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){_define_property(e,t,r[t])})}return e}function _object_without_properties(e,t){if(null==e)return{};var r,n,o=_object_without_properties_loose(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _object_without_properties_loose(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}let d="OpenEditorVueUnplugin",m=new Set([c.ELEMENT,c.COMPONENT]),g=Object.freeze({type:"template"});function resolveOptions(e){var t,n,o,i;return{rootDir:r(null!=(t=e.rootDir)?t:process.cwd()),sourceMap:null!=(n=e.sourceMap)&&n,include:null!=(o=e.include)?o:/\.(vue|jsx|tsx)$/,exclude:null!=(i=e.exclude)?i:/\/node_modules\//}}function parseID(n,o){let[i,s]=r(n).split("?",2),l=e(o,i),u=t(l).slice(1);return{file:l,isSfc:"vue"===u,isJSX:"jsx"===u,isTsx:"tsx"===u,query:s?_object_spread({},g,Object.fromEntries(new URLSearchParams(s))):g}}function genVue3Inject(){let{defineDebug:e,defineVNode:t}=genDefineCodes("vnode","el",o.VUE_V3);return`;const _debug=vnode.props&&vnode.props.${o.INJECT_PROP};if(_debug){delete vnode.props.${o.INJECT_PROP};vnode.dynamicProps=vnode.dynamicProps&&vnode.dynamicProps.filter((prop)=> prop!=='${o.INJECT_PROP}');${e}}if(typeof vnode.type==='string'){${t}};`}function genVue2Inject(){let{defineDebug:e,defineVNode:t}=genDefineCodes("this","elm",o.VUE_V2);return`;var _debug=this.data&&this.data.attrs&&this.data.attrs.${o.INJECT_PROP};if(_debug){delete this.data.attrs.${o.INJECT_PROP};${e}}if(!this.componentOptions){${t}};`}function genDefineCodes(e,t,r){return{defineDebug:`;Object.defineProperty(${e},${o.SHADOW_PROP},{get(){return _debug;},enumerable:false,});`,defineVNode:`;${r===o.VUE_V2?"var ":"let "}_${t}=${e}.${t};Object.defineProperty(${e},'${t}',{get(){return _${t};},set(${t}){_${t}=${t};if(${t})${t}.${r}=${e};},});`}}function transformTemplate(e,t){walkNodes(e.children,e=>{t(e.props.length>0?Math.max(...e.props.map(e=>e.loc.end.offset)):e.loc.start.offset+e.tag.length+1,e.loc.start.line,e.loc.start.column,!0)})}function walkNodes(e,t){for(let r of e)r.type===f.ELEMENT&&m.has(r.tagType)&&(t(r),r.children.length&&walkNodes(r.children,t))}function extractScriptJsxOptions(e){var t,r,n;let o=e.children.find(e=>"script"===e.tag);if(!o)return;let i=null==(t=o.children[0])?void 0:t.content,s=null==(n=o.props.find(e=>"lang"===e.name))||null==(r=n.value)?void 0:r.content;if(!i||!/[jt]sx/.test(s||""))return;let l=o.children[0].loc.start;return{code:i,isTsx:"tsx"===s,startIndex:l.offset,startLine:l.line,startColumn:l.column}}function transformJSX(e,t,r){let{isTsx:n=!1,startIndex:o=0,startLine:i=1,startColumn:s=1}=r;p(u(e,{sourceType:"unambiguous",startIndex:o,startLine:i,startColumn:s-1,ranges:!0,plugins:n?["jsx","typescript"]:["jsx"]}),{JSXOpeningElement({node:e}){let r=e.selfClosing?e.end-2:e.end-1,{line:n,column:o}=e.loc.start;t(r,n,o+1,!1)}})}var b=i((e={},t)=>{if(!n())return{name:d};let r="vite"===t.framework,{rootDir:i,sourceMap:u,include:p,exclude:c}=resolveOptions(e),f=s(p,c),m=r?["/runtime-core.esm-bundler.js","/deps/vue.js"]:["/runtime-core.cjs.js","/runtime-core.esm-bundler.js","/vue.runtime.esm.js","/vue.runtime.js"],isRuntimeFile=e=>m.some(t=>e.endsWith(t));return{name:d,enforce:"pre",transformInclude(e){let{file:t,query:r}=parseID(e,i);return isRuntimeFile(t)||null==r.raw&&r.type===g.type&&f(t)},transform(e,t){let n=parseID(t,i),{file:s,isSfc:p}=n,c=_object_without_properties(n,["file","isSfc"]);if(isRuntimeFile(s)){if(r&&s.endsWith("/vue.js")){let t=e.match(/\/[\w-]+\.js/g)||[];m.push(...t)}for(let{matchRE:t,injectCode:r}of[{matchRE:/([\s\S]*?function\s+createBaseVNode\b[\s\S]*?\})([\s\S]*)/,injectCode:genVue3Inject},{matchRE:/([\s\S]*?function\s+VNode\b[\s\S]*?)(\}[\s\S]*)/,injectCode:genVue2Inject}]){let n=e.match(t);if(n){let[,e,t]=n;return`${e}${r()}${t}`}}return null}if(e.includes(o.INJECT_PROP))return null;let f=new l(e);function insertDebugProp(e,t,r,n){let i=JSON.stringify({file:s,line:t,column:r}),l=n?` :${o.INJECT_PROP}='${i}'`:` ${o.INJECT_PROP}={${i}}`;f.prependLeft(e,l)}if(p){let t=a(e);transformTemplate(t,insertDebugProp);let r=extractScriptJsxOptions(t);r&&transformJSX(r.code,insertDebugProp,r)}else transformJSX(e,insertDebugProp,c);return f.hasChanged()?{code:f.toString(),map:u?f.generateMap({source:s,file:s}):null}:null}}});export{b as u};