UNPKG

1.18 kBJavaScriptView Raw
1"use strict";var compilerDom=require("@vue/compiler-dom"),MagicString=require("magic-string");const isElement=t=>(t==null?void 0:t.type)===1,importStatement='import "vue-frag-plugin/install-vue-frag";';function wrapVueFrag(t,n){const e=n.children[0],i=n.children[n.children.length-1];t.appendRight(e.loc.start.offset,"<div v-frag>"),t.appendRight(i.loc.end.offset,"</div>")}function injectVueFragImport(t,n,e){if(!e){t.appendRight(n.loc.end.offset,`<script>${importStatement}export default {};<\/script>`);return}const i=e.children[0];if(i)t.appendLeft(i.loc.start.offset,importStatement);else{const{source:r}=e.loc,s=r.indexOf("<\/script>")+1;t.prependRight(e.loc.end.offset-s,importStatement)}}function transform(t,n){const e={code:t},i=compilerDom.parse(t),r=i.children.filter(isElement).find(o=>o.tag==="template");if(!r||r.children.length===0)return e;const[s]=r.children;if(isElement(s)&&s.tag==="template"||r.children.length>1){const o=new MagicString(t);wrapVueFrag(o,r);const c=i.children.filter(isElement).find(l=>l.tag==="script");injectVueFragImport(o,r,c),e.map=o.generateMap({source:n,file:`${n}.map`}),e.code=o.toString()}return e}exports.transform=transform;