@vtj/coder
Version:
VVTJ.PRO 是一个开源的、AI 驱动的 Vue3 企业级应用开发平台,通过 AI 智能体与可视化编排实现高效开发,并支持导出标准 Vue 代码以避免平台锁定。
154 lines (153 loc) • 34.1 kB
JavaScript
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("@vtj/base"),H=require("prettier/standalone"),je=require("prettier/plugins/html"),ke=require("prettier/plugins/babel"),we=require("prettier/plugins/postcss"),Ae=require("prettier/plugins/estree");function F(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const n=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,n.get?n:{enumerable:!0,get:()=>t[s]})}}return e.default=t,Object.freeze(e)}const Oe=F(je),X=F(ke),Y=F(we),K=F(Ae);/**!
* Copyright (c) 2026, VTJ.PRO All rights reserved.
* @name @vtj/coder
* @author CHC chenhuachun1549@dingtalk.com
* @version 0.18.29
* @license <a href="https://vtj.pro/license.html">MIT License</a>
*/const Ie="0.18.29";/**!
* Copyright (c) 2026, VTJ.PRO All rights reserved.
* @name @vtj/core
* @author CHC chenhuachun1549@dingtalk.com
* @version 0.18.29
* @license <a href="https://vtj.pro/license.html">MIT License</a>
*/const Ce=["slot","template","component","img","div","p","h1","h2","h3","span","a"];b.mitt();const q={arrowParens:"always",bracketSpacing:!0,bracketSameLine:!0,endOfLine:"lf",htmlWhitespaceSensitivity:"css",insertPragma:!1,jsxBracketSameLine:!0,jsxSingleQuote:!0,printWidth:80,proseWrap:"preserve",quoteProps:"as-needed",requirePragma:!1,semi:!0,singleQuote:!0,tabWidth:2,trailingComma:"none",useTabs:!1,vueIndentScriptAndStyle:!0,removeBlankLines:!0};async function G(t,e){return e?t:await H.format(t,{parser:"vue",...q,plugins:[Oe,X,K,Y]})}async function ee(t,e){if(e)return t;try{return(await H.format(t,{parser:"babel-ts",...q,plugins:[X,K]})).replace(/;\n$/gi,"")}catch(s){return console.warn(s),t}}async function J(t,e){return e?t:H.format(t,{parser:"scss",...q,plugins:[Y]})}function T(t){return t&&t.type==="JSExpression"}function D(t){return typeof t=="object"&&t&&t.type==="JSFunction"}function j(t){return T(t)||D(t)}function te(t){return t.replace(new RegExp("this.","g"),"")}function W(t){return t.replace(/this\.context\??\./g,"")}function y(t,e=!0,s=!0,n=[],o=!0){let r=t;return j(t)?(r=t.value.trim().replace(/;$/,""),o&&(r=r.replace(/\"/g,"'"))):r=e?JSON.stringify(r):t,r=R(r,n),s?te(W(r)):W(r)}function R(t="",e=[]){let s=t;for(const n of e)s=s.replace(new RegExp(`this.${n}.value`,"g"),`this.${n}`);return s}function se(t){let e=t.trim().replace(/;$/,"");if(e=/^\((\(|async|function)/.test(e)?e.substring(1,e.length-1):e,e.startsWith("{"))return e;if(e.startsWith("async function"))e=e.replace(/^async function/,"async");else if(e.startsWith("function"))e=e.replace(/^function/,"");else{const o=/^(async\s)?\([\w]*\)\s+\=\>\s([\w\W]+)/,r=e.match(o);r&&r[2]&&(r[2].startsWith("{")||(e=e.replace(r[2],`{ return ${r[2]} }`))),e=e.replace("=>","")}return e}function Pe(t={}){return Object.entries(t).map(([e,s])=>`"${e}": ${y(s)}`)}function ne(t={},e=!1){const s=Object.keys(t);return e?s.map(n=>"."+n):s}function xe(t){let e="";for(var s in t)if(t.hasOwnProperty(s)){var n=t[s];e+=s+": "+n+";"}return e}function Ee(t=[],e=[]){return t.filter(s=>!e.includes(s))}function Z(t){return b.base64(JSON.stringify(t))}class Ne{constructor(e,s){this.dsl=e,this.dependencies=s,this.collectEasycom(),this.libraryRegex=this.collectLibrary(),this.walk(e),this.walkNodes(e),this.members=this.getLibraryMember()}imports={};context={};style={};members=[];urlSchemas={};blockPlugins={};easycomPackages=new Set;libraryRegex=[];collectEasycom(){for(const e of this.dependencies)e.easycom?.key&&e.easycom?.value&&e.package&&this.easycomPackages.add(e.package)}collectLibrary(){return this.dependencies.filter(e=>!!e.library).map(e=>new RegExp(`(this.\\$libs.${e.library}.([\\w]+))`,"g"))}collectImport(e){const s=e.split(".");if(s.length===4){const n=s.pop(),o=s.join(".")+".",r=s.pop();if(n&&r){const a=this.dependencies.find(c=>c.library===r)?.package;a&&!this.easycomPackages.has(a)&&(this.imports[a]||(this.imports[a]=new Set)).add(n)}return{name:n,path:o,library:r}}return null}replaceLibraryPath(e){const{libraryRegex:s}=this;let n=e.value;for(const o of s){const r=e.value?.match(o)||[];for(const a of r){const c=this.collectImport(a);if(c){const l=c.path.replace(/\$/g,"\\$");n=n.replace(new RegExp(l,"g"),"")}}}return n}walk(e){const s=n=>{if(!n||typeof n!="object")return;if(Array.isArray(n)){for(let r of n)s(r);return}const o=Object.values(n);for(const r of o)j(r)?r.value=this.replaceLibraryPath(r):s(r)};s(e)}getLibraryMember(e=[]){let s=[...e];const n={...this.imports};delete n["uni-h5"],delete n["@dcloudio/uni-h5"],delete n["uni-ui"],delete n["@dcloudio/uni-ui"];for(const o of Object.values(n))s=s.concat(Array.from(o));return b.dedupArray(s)}collectContext(e,s){const n=new Set(s?.id?this.context[s.id]:[]),o=(e.directives||[]).find(c=>c.name==="vFor");let r=new Set(Array.from(n));if(o){const{item:c="item",index:l="index"}=o.iterator||{};r=new Set([c,l,...Array.from(r)])}const a=e.slot;if(a){const c=typeof a=="string"?[]:a.params||[],l=c.length?c:[`scope_${s?.id}`];r=new Set([...l,...Array.from(r)])}this.context[e.id]=r}collectStyle(e){e.id&&e.props?.style&&Object.keys(e.props.style).length&&!j(e.props.style)&&(this.style[`.${e.name}_${e.id}`]=e.props.style)}collectUrlSchema(e){typeof e.from=="object"&&e.from.type==="UrlSchema"&&(this.urlSchemas[e.name]=e.from)}collectBlockPlugin(e){typeof e.from=="object"&&e.from.type==="Plugin"&&(this.blockPlugins[e.name]=e.from)}walkNodes(e){const s=(n,o)=>{this.collectContext(n,o),this.collectStyle(n),this.collectUrlSchema(n),this.collectBlockPlugin(n),Array.isArray(n.children)&&n.children.forEach(r=>s(r,n))};Array.isArray(e.nodes)&&e.nodes.forEach(n=>s(n))}}function Be(t={}){return Object.entries(t).map(([e,s])=>{const n=y(s,!1,!0,[],!1);return`${e}:${n}`})}function Me(t=[]){return t.map(e=>`${e.name}: {
from: '${e.from||e.name}',
default: ${y(e.default,!0,!1,[],!1)}
}`)}function re(t=[]){const e=s=>s?`[${b.toArray(s).map(r=>r.replace(/\'|\"/gi,"")).join(",")}]`:void 0;return t.map(s=>typeof s=="string"?`${s}: {}`:(j(s.default)&&!s.default.value&&(s.default.value="undefined"),`${s.name}: {
type:${e(s.type)},
required: ${y(!!s.required,!0,!1,[],!1)},
default: ${s.default?y(s.default,!0,!1,[],!1):"undefined"}
}`))}function oe(t=[]){return t.map(e=>`'${typeof e=="string"?e:e.name}'`)}function U(t={},e=[]){return Object.entries(t).map(([s,n])=>{let o=se(y(n,!1,!1,[],!1));return o=R(o,e)?.trim(),o.startsWith("async")?`async ${s}${o.replace(/^async/,"")}`:o.startsWith("(")||o.startsWith("{")?`${s}${o}`:null}).filter(s=>!!s)}function Te(t=[],e=[]){const s=t.reduce((r,a)=>(a.id&&D(a.source)&&(r[`watcher_${a.id}`]=a.source),r),{}),n=U(s,e),o=t.map(r=>r.handler&&r.handler.value?`watcher_${r.id}: {
deep: ${r.deep},
immediate:${r.immediate},
handler${se(r.handler.value)}
}`:null).filter(r=>!!r);return{computed:n,watches:o}}function Re(t={}){return Object.values(t).map(e=>{if(e.type==="mock"){const s=D(e.mockTemplate)&&e.mockTemplate.value||"(params) => ({})";return`async ${e.name}(...args) {
// DataSource: ${Z(e)}
const mock = this.provider.createMock(${s});
return await mock.apply(this, args);
}`}else{const s=D(e.transform)&&e.transform.value||"(res) => res";return`async ${e.name}(...args) {
// DataSource: ${Z(e)}
return await this.provider.apis['${e.ref}'].apply(this, args).then(${s});
}`}})}const De=["img","input","br","hr","area","base","col","embed","link","meta","param","source","track","wbr"],Q=["vIf","vElseIf","vElse","vShow","vModel","vFor","vBind","vHtml"];function V(t,e,s=[],n={},o,r=new Set){const a=[];let c={},l=[];const p=[];let m=[];return Ue(t).forEach(u=>{const f=[];for(const g of u.children){let{id:A,name:d,invisible:v,from:h}=g;if(v)continue;const S=Fe(d,e,h);S&&l.push(S),ae(h)&&m.push({id:h.id,name:d});const{props:$,events:w}=Ge(g,A,g.props,g.events,n,s),C=Ve(g.directives,s,p).join(" "),I=g.children?Qe(g.children,s,e,n,g,r):"";let N="";typeof I=="string"?N=I:(N=(I?.nodes||[]).join(`
`),Object.assign(c,I?.methods||{}),l=l.concat(I?.components||[]),m=m.concat(I?.importBlocks||[]));const B=h||e.get(d)?.package,M=r.has(B)||["@dcloudio/uni-h5","@dcloudio/uni-ui"].includes(B)?b.kebabCase(d):ce(h)||ie(h)?"component":d;f.push(De.includes(M)?`<${M} ${C} ${$} ${w} />`:`<${M} ${C} ${$} ${w}>${N?`
`+N.trim():""}</${M}>`)}const _=Xe(u.slot,f.join(`
`),o?.id);a.push(_)}),{nodes:a,methods:c,directives:Le(p),components:b.dedupArray(l),importBlocks:b.dedupArray(m,"id")}}function Le(t){return b.dedupArray(t).map(e=>`${e.startsWith("v")?e.substring(1):e}:${e}`)}function Ue(t=[]){const e=new Map;for(const s of t){const n=typeof s.slot=="string"?s.slot:s.slot?.name,o=e.get(n);o?o.children.push(s):e.set(n,{slot:s.slot,children:[s]})}return e}function Fe(t,e,s){if(Ce.includes(t))return null;const n=e.get(t);if(n&&n.alias){const o=n.parent?`${n.parent}.${n.alias}`:n.alias;return`${t}: ${o}`}return ae(s)||n?t:null}function ae(t){return!!t&&typeof t=="object"&&t.type==="Schema"}function ce(t){return typeof t=="object"&&t.type==="UrlSchema"}function ie(t){return typeof t=="object"&&t.type==="Plugin"}function Je(t,e,s=[]){return t==="style"?j(e)?`:style="${y({...e,value:R(e.value,s)})}"`:"":t==="__class"&&j(e)?`:class="${y({...e,value:R(e.value,s)})}"`:typeof e=="string"?`${t}="${e}"`:j(e)?`:${t}="${y({...e,value:R(e.value,s)})}"`:b.isPlainObject(e)?`:${t}='{${Pe(e).join(", ")}}'`:`:${t}='${JSON.stringify(e)}'`}function We(t,e={},s=[]){if(!!Object.keys(e.style||{}).length){const r=`${t.name}_${t.id}`;e.class?typeof e.class=="string"?e.class=[e.class,r].join(" "):(e.__class=e.class,e.class=r):e.class=r,j(e.style)||delete e.style}const o=t.from;return(ce(o)||ie(o))&&(e.is={type:"JSExpression",value:t.name}),Object.entries(e).map(([r,a])=>Je(r,a,s))}function He(t,e,s){const n=ne(e.modifiers,!0);return`@${t}${n.join("")}="${s}"`}function qe(t,e={},s={}){const n={};return{binders:Object.entries(e).map(([r,a])=>{const c=te(W(a.handler.value)).replace(/\"/g,"'");return He(r,a,c)}),handlers:n}}function Ge(t,e,s={},n={},o={},r){const{binders:a,handlers:c}=qe(e,n,o);return{props:We(t,s,r).join(" "),handlers:c,binders:a,events:a.join(" ")}}function Ve(t=[],e=[],s=[]){const n=[],{vIf:o,vElse:r,vElseIf:a,vShow:c,vModels:l,vFor:p,vBind:m,vHtml:i,customDirectives:u}=ze(t);if(o&&n.push(`v-if="${y(o.value,!0,!0,e)}"`),a&&n.push(`v-else-if="${y(a.value,!0,!0,e)}"`),r&&n.push("v-else"),c&&n.push(`v-show="${y(c.value,!0,!0,e)}"`),m&&n.push(`v-bind="${y(m.value,!0,!0,e)}"`),l.forEach(f=>{const _=ne(f.modifiers,!0),g=f.arg?T(f.arg)?`:[${y(f.arg,!0,!0,e)}]`:`:${f.arg}`:"";n.push(`v-model${g}${_}="${y(f.value,!0,!0,e)}"`)}),p){const{item:f,index:_}={item:"item",index:"index",...p.iterator};n.push(`v-for="(${f}, ${_}) in ${y(p.value,!0,!0,e)}"`)}return i&&n.push(`v-html="${y(i.value,!0,!0,e)}"`),u&&u.length&&u.forEach(f=>{if(!f.name)return;let _="",g="";T(f.name)?(g=y(f.name,!0,!0,e),s.push(g)):g=f.name;const A=g?.startsWith("v")?b.kebabCase(g):b.kebabCase("v-"+g);if(_+=A,f.arg&&(T(f.arg)?_+=`:[${y(f.name,!0,!0,e)}]`:_+=`:${f.arg}`),f.modifiers){const d=Object.keys(f.modifiers);d.length&&(_+=d.map(v=>"."+v))}f.value?n.push(`${_}="${y(f.value,!0,!0,e)}"`):n.push(_)}),n}function ze(t=[]){const e=t.filter(i=>Q.includes(i.name)),s=t.filter(i=>!Q.includes(i.name)),n=e.find(i=>b.camelCase(i.name)==="vIf"),o=e.find(i=>b.camelCase(i.name)==="vElseIf"),r=e.find(i=>b.camelCase(i.name)==="vElse"),a=e.find(i=>b.camelCase(i.name)==="vFor"),c=e.find(i=>b.camelCase(i.name)==="vShow"),l=e.find(i=>b.camelCase(i.name)==="vBind"),p=e.find(i=>b.camelCase(i.name)==="vHtml"),m=e.filter(i=>b.camelCase(i.name)==="vModel");return{vIf:n,vElseIf:o,vElse:r,vFor:a,vShow:c,vModels:m,vBind:l,vHtml:p,customDirectives:s}}function Ze(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function Qe(t,e,s,n,o,r=new Set){return typeof t=="string"?Ze(t):T(t)?`{{ ${y(t,!1,!0,e)} }}`:Array.isArray(t)?V(t,s,e,n,o,r):""}function Xe(t,e,s){if(!t)return e;const n=typeof t=="string"?{name:t,params:[],scope:""}:{params:[],scope:"",...t};return`<template ${`#${n.name}="${n.scope?n.scope:n.params?.length>0?`{${n.params?.join(",")}}`:`scope_${s}`}"`}>
${e}
</template>`}function Ye(t,e=[],s=[],n={},o="web",r=new Set){const a=["@dcloudio/uni-h5","uni-h5","@dcloudio/uni-ui","uni-ui"],c={vue:["defineComponent","reactive"]},l=[];for(const m of e){const i=t.get(m.split(":")[0]);if(i&&i.package){if(r.has(i.package))continue;const u=c[i.package]??(c[i.package]=[]),f=i.parent||(i.alias||"").split(".")[0]||i.name;u.push(f),o==="uniapp"&&a.includes(i.package)&&l.push(f)}}for(const[m,i]of Object.entries(n))(c[m]??(c[m]=[])).push(...Array.from(i)),o==="uniapp"&&a.includes(m)&&l.push(...Array.from(i));return{imports:Object.entries(c).filter(([m,i])=>o==="uniapp"?!a.includes(m)&&!!i.length:!!i.length).map(([m,i])=>`import { ${b.dedupArray(i).join(",")}} from '${m}';`).concat(s),uniComponents:l}}function le(t={}){const e=[];for(const[s,n]of Object.entries(t))e.push(`
${s} {
${xe(n)}
}
`);return e.join(`
`)}function ue(t={}){const e=[];return Object.entries(t).forEach(([s,n])=>{e.push(`const ${s} = provider.defineUrlSchemaComponent('${n.url}');`)}),e}function pe(t={}){const e=[];return Object.entries(t).forEach(([s,n])=>{e.push(`const ${s} = provider.definePluginComponent(${JSON.stringify(n)});`)}),e}function Ke(t,e,s="web"){const{dsl:n}=t,o=Object.keys(n.computed||{}),r=U(n.lifeCycles,o),a=U(n.computed,o),c=Te(n.watch,o),l=Re(n.dataSources),{methods:p,nodes:m,components:i,importBlocks:u,directives:f}=V(n.nodes||[],e,o,t.context,void 0,t.easycomPackages),_=[...a,...c.computed],g=U({...p,...n.methods||{}},o),A=u.map(w=>`import ${w.name} from './${w.id}.vue';`);let{imports:d,uniComponents:v}=Ye(e,i,A,t.imports,s,t.easycomPackages);const h=Object.keys({...t.urlSchemas,...t.blockPlugins}),S=ue(t.urlSchemas),$=pe(t.blockPlugins);return{id:n.id,version:n.__VERSION__,name:n.name,state:Be(n.state).join(","),inject:Me(n.inject).join(","),props:re(n.props).join(","),emits:oe(n.emits).join(","),expose:n.expose&&n.expose.length?JSON.stringify(n.expose||[]):"",watch:c.watches.join(","),lifeCycles:r.join(","),computed:_.join(","),methods:[...l,...g].join(","),imports:`
`+d.join(`
`),components:Ee(i,v).join(","),directives:f.join(","),returns:t.members.join(","),template:m.join(`
`),css:n.css||"",style:le(t.style),urlSchemas:S.join(`
`),blockPlugins:$.join(`
`),asyncComponents:h.join(","),uniComponents:v,renderer:s==="uniapp"?"@vtj/uni-app":"@vtj/renderer"}}const x={state:{composable:null,from:"self",declare:null,replace:"__state"},$uni:{composable:null,from:"self",declare:null,replace:"uni"},$getApp:{composable:null,from:"self",declare:null,replace:"getApp"},$emit:{composable:null,from:"vue",declare:null,replace:"__emit"},$props:{composable:null,from:"vue",declare:null,replace:"__props"},$attrs:{composable:"useAttrs",from:"vue",declare:"const __attrs = useAttrs();",replace:"__attrs"},$slots:{composable:"useSlots",from:"vue",declare:"const __slots = useSlots();",replace:"__slots"},$nextTick:{composable:"nextTick",from:"vue",declare:null,replace:"nextTick"},$watch:{composable:"watch",from:"vue",declare:null,replace:"watch"},$refs:{composable:"getCurrentInstance",from:"vue",declare:"const __instance = getCurrentInstance();",replace:"__instance.proxy.$refs"},$el:{composable:"getCurrentInstance",from:"vue",declare:"const __instance = getCurrentInstance();",replace:"__instance.proxy.$el"},$root:{composable:"getCurrentInstance",from:"vue",declare:"const __instance = getCurrentInstance();",replace:"__instance.proxy.$root"},$parent:{composable:"getCurrentInstance",from:"vue",declare:"const __instance = getCurrentInstance();",replace:"__instance.proxy.$parent"},$options:{composable:"getCurrentInstance",from:"vue",declare:"const __instance = getCurrentInstance();",replace:"__instance.proxy.$options"},$forceUpdate:{composable:"getCurrentInstance",from:"vue",declare:"const __instance = getCurrentInstance();",replace:"__instance.proxy.$forceUpdate"},$router:{composable:"useRouter",from:"vue-router",declare:"const __router = useRouter();",replace:"__router"},$route:{composable:"useRoute",from:"vue-router",declare:"const __route = useRoute();",replace:"__route"},$i18n:{composable:"useI18n",from:"vue-i18n",declare:"const __i18n = useI18n();",replace:"__i18n"},$t:{composable:"useI18n",from:"vue-i18n",declare:"const __i18n = useI18n();",replace:"__i18n.t"},$n:{composable:"useI18n",from:"vue-i18n",declare:"const __i18n = useI18n();",replace:"__i18n.n"},$d:{composable:"useI18n",from:"vue-i18n",declare:"const __i18n = useI18n();",replace:"__i18n.d"},$rt:{composable:"useI18n",from:"vue-i18n",declare:"const __i18n = useI18n();",replace:"__i18n.rt"},$te:{composable:"useI18n",from:"vue-i18n",declare:"const __i18n = useI18n();",replace:"__i18n.te"},$tm:{composable:"useI18n",from:"vue-i18n",declare:"const __i18n = useI18n();",replace:"__i18n.tm"},$provider:{composable:"useStore",from:"__renderer__",declare:null,replace:"__provider"},$store:{composable:"useStore",from:"__renderer__",declare:"const __store = useStore();",replace:"__store"},$pinia:{composable:"usePinia",from:"__renderer__",declare:"const __pinia = usePinia();",replace:"__pinia"},$request:{composable:"useRequest",from:"__renderer__",declare:"const __request = useRequest();",replace:"__request"},$libs:{composable:"useLibs",from:"__renderer__",declare:"const __libs = useLibs();",replace:"__libs"},$access:{composable:"useAccess",from:"__renderer__",declare:"const __access = useAccess();",replace:"__access"},$apis:{composable:"useApis",from:"__renderer__",declare:"const __apis = useApis();",replace:"__apis"}},z={"element-plus":{$loading:{composable:"ElLoading",from:"element-plus",declare:null,replace:"ElLoading.service"},$message:{composable:"ElMessage",from:"element-plus",declare:null,replace:"ElMessage"},$notify:{composable:"ElNotification",from:"element-plus",declare:null,replace:"ElNotification"},$messageBox:{composable:"ElMessageBox",from:"element-plus",declare:null,replace:"ElMessageBox"},$msgbox:{composable:"ElMessageBox",from:"element-plus",declare:null,replace:"ElMessageBox"},$confirm:{composable:"ElMessageBox",from:"element-plus",declare:null,replace:"ElMessageBox.confirm"},$prompt:{composable:"ElMessageBox",from:"element-plus",declare:null,replace:"ElMessageBox.prompt"}},"ant-design-vue":{$confirm:{composable:"Modal",from:"ant-design-vue",declare:null,replace:"Modal.confirm"},$message:{composable:"message",from:"ant-design-vue",declare:null,replace:"message"},$notification:{composable:"notification",from:"ant-design-vue",declare:null,replace:"notification"},$info:{composable:"message",from:"ant-design-vue",declare:null,replace:"message.info"},$success:{composable:"message",from:"ant-design-vue",declare:null,replace:"message.success"},$warning:{composable:"message",from:"ant-design-vue",declare:null,replace:"message.warning"},$error:{composable:"message",from:"ant-design-vue",declare:null,replace:"message.error"}}},fe=Object.keys(z);function me(t){for(const[,e]of t)if(fe.includes(e.package))return e.package;return null}function de(t){const e=t?z[t]??{}:{};return{...x,...e}}function et(t,e=x){const s=new Set,n=/this\.\$(\w+)\b/g,o=r=>{if(r&&typeof r=="object"){if(Array.isArray(r)){for(const a of r)o(a);return}if(j(r)&&r.value){let a;for(n.lastIndex=0;(a=n.exec(r.value))!==null;){const c="$"+a[1];c in e&&s.add(c)}return}for(const a of Object.values(r))o(a)}};return o(t.refs),o(t.reactives),o(t.state),o(t.computed),o(t.methods),o(t.watch),o(t.lifeCycles),o(t.inject),o(t.composables),o(t.provide),o(t.dataSources),o(t.setup),o(t.nodes),s}function tt(t,e=x){const s=[];for(const n of t){const o=e[n];o&&o.declare&&!s.includes(o.declare)&&s.push(o.declare)}return s}function st(t,e=x){const s={};for(const n of t){const o=e[n];if(o&&o.composable){const r=s[o.from]??(s[o.from]=[]);r.includes(o.composable)||r.push(o.composable)}}return s}function nt(t,e=x){const s=new Set(Object.keys(t.refs??{})),n=new Set(Object.keys(t.reactives??{})),r=Object.keys(t.state??{}).length>0;r&&n.add("__state");const a=new Set(Object.keys(t.computed??{})),c=new Set(Object.keys(t.methods??{})),l=new Set;for(const u of t.props??[])b.isString(u)?l.add(u):l.add(u.name);const p=new Set;for(const u of t.composables??[])if(u.destructure&&u.destructure.length>0)for(const f of u.destructure)p.add(f);else u.name&&p.add(u.name);const m=new Set;for(const u of t.inject??[])u.name&&m.add(u.name);const i=new Set;for(const[,u]of Object.entries(t.dataSources??{}))u.name&&i.add(u.name);return{refs:s,reactives:n,computed:a,methods:c,props:l,composables:p,injects:m,dataSources:i,hasState:r,effectiveApiMap:e}}function k(t,e,s="script"){if(!t)return t;let n=t;for(const[o,r]of Object.entries(e.effectiveApiMap)){const a=o.replace(/\$/g,"\\$"),c=new RegExp(`this\\.${a}\\b`,"g");n=n.replace(c,r.replace)}return n=n.replace(/this\.([A-Za-z_$][\w$]*)\.value\b/g,(o,r)=>e.refs.has(r)||e.computed.has(r)?s==="script"?`${r}.value`:r:o),n=n.replace(/this\.([A-Za-z_$][\w$]*)/g,(o,r)=>e.refs.has(r)||e.computed.has(r)?s==="script"?`${r}.value`:r:r==="state"?"__state":e.reactives.has(r)||e.methods.has(r)||e.composables.has(r)||e.injects.has(r)||e.dataSources.has(r)?r:e.props.has(r)?s==="script"?`__props.${r}`:r:o),n}function E(t){let e=t.trim().replace(/;$/,"");return/^\((\(|async|function)/.test(e)&&(e=e.substring(1,e.length-1).trim()),e}function rt(t={},e){return Object.entries(t).map(([s,n])=>{let o;return j(n)?o=k(n.value||"undefined",e,"script"):o=JSON.stringify(n),`const ${s} = ref(${o});`})}function ot(t={},e){return Object.entries(t).map(([s,n])=>{let o;return j(n)?o=k(n.value||"{}",e,"script"):o=JSON.stringify(n??{}),`const ${s} = reactive(${o});`})}function at(t={},e){const s=Object.entries(t);return s.length===0?"":`const __state = reactive({ ${s.map(([o,r])=>{let a;return j(r)?a=k(r.value||"undefined",e,"script"):a=JSON.stringify(r),`${o}: ${a}`}).join(", ")} });`}function ct(t=[],e){const s=[],n={},o=new Set;for(const r of t){if(!r||!r.composable)continue;let a="";if(j(r.composable)?a=r.composable.value||"":typeof r.composable=="string"&&(a=r.composable),!a||a==="useProvider")continue;if(r.name){if(o.has(r.name))continue;o.add(r.name)}const l=(r.args??[]).map(p=>j(p)?k(p.value||"",e,"script"):JSON.stringify(p)).join(", ");r.destructure&&r.destructure.length>0?s.push(`const { ${r.destructure.join(", ")} } = ${a}(${l});`):r.name?s.push(`const ${r.name} = ${a}(${l});`):s.push(`${a}(${l});`)}return{statements:s,imports:n}}function it(t=[],e){return t.map(s=>{const n=j(s.from)?k(s.from.value||`'${s.name}'`,e,"script"):`'${s.from||s.name}'`;let o="undefined";return s.default!==void 0&&s.default!==null&&(j(s.default)?o=k(s.default.value||"undefined",e,"script"):o=JSON.stringify(s.default)),`const ${s.name} = inject(${n}, ${o});`})}function lt(t={},e){return Object.entries(t).map(([s,n])=>{if(!n||!n.value)return null;const o=k(n.value,e,"script"),r=E(o);return`const ${s} = computed(${r});`}).filter(s=>!!s)}function ut(t={},e){return Object.entries(t).map(([s,n])=>{if(!n||!n.value)return null;const o=k(n.value,e,"script"),r=E(o);return`const ${s} = ${r};`}).filter(s=>!!s)}function pt(t={},e){return Object.values(t).map(s=>{if(!s||!s.name)return null;if(s.type==="mock"){const n=s.mockTemplate&&s.mockTemplate.value?s.mockTemplate.value:"(params) => ({})",o=e?k(n,e,"script"):n;return`const ${s.name} = async (...args) => {
const mock = __provider.createMock(${o});
return await mock.apply(null, args);
};`}else{const n=s.transform&&s.transform.value?s.transform.value:"(res) => res",o=e?k(n,e,"script"):n;return`const ${s.name} = async (...args) => {
return await __provider.apis['${s.ref}'].apply(null, args).then(${o});
};`}}).filter(s=>!!s)}function ft(t=[],e){return t.map(s=>{if(!s||!s.handler||!s.handler.value)return null;const n=s.source&&s.source.value?k(s.source.value,e,"script"):"() => null",o=E(n),r=k(s.handler.value,e,"script"),a=E(r),c=[];s.deep&&c.push("deep: true"),s.immediate&&c.push("immediate: true"),s.flush&&c.push(`flush: '${s.flush}'`);const l=c.length>0?`, { ${c.join(", ")} }`:"";return`watch(${o}, ${a}${l});`}).filter(s=>!!s)}function mt(t={},e){return Object.entries(t).map(([s,n])=>{let o;if(D(n)){const r=k(n.value||"",e,"script");o=E(r)}else j(n)?o=k(n.value||"undefined",e,"script"):o=JSON.stringify(n);return`provide('${s}', ${o});`})}function he(t){let e=t.trim().replace(/;$/,"");/^\((\(|async|function)/.test(e)&&(e=e.substring(1,e.length-1).trim());const s=e.match(/^(?:async\s+)?\([^)]*\)\s*=>\s*([\s\S]+)$/);if(s){let o=s[1].trim();return o.startsWith("{")&&o.endsWith("}")?o=o.slice(1,-1).trim():o=o.replace(/;$/,"")+";",o}const n=e.match(/^(?:async\s+)?function\s*\w*\s*\([^)]*\)\s*\{([\s\S]*)\}$/);return n?n[1].trim():e}function dt(t,e){if(!t||!t.value)return"";const s=k(t.value,e,"script");return he(s)}function ht(t={},e){const s=[];for(const n of["beforeCreate","created"]){const o=t[n];if(o&&o.value){const r=k(o.value,e,"script"),a=he(r);a&&s.push(`// ${n}
${a}`)}}return s.join(`
`)}const gt={beforeMount:"onBeforeMount",mounted:"onMounted",beforeUpdate:"onBeforeUpdate",updated:"onUpdated",beforeUnmount:"onBeforeUnmount",unmounted:"onUnmounted",errorCaptured:"onErrorCaptured",renderTracked:"onRenderTracked",renderTriggered:"onRenderTriggered",activated:"onActivated",deactivated:"onDeactivated"},vt=new Set(["onBeforeMount","onMounted","onBeforeUpdate","onUpdated","onBeforeUnmount","onUnmounted","onErrorCaptured","onRenderTracked","onRenderTriggered","onActivated","onDeactivated"]),$t=new Set(["onLoad","onShow","onReady","onHide","onUnload","onResize","onPullDownRefresh","onReachBottom","onTabItemTap","onShareAppMessage","onPageScroll","onNavigationBarButtonTap","onBackPress","onNavigationBarSearchInputChanged","onNavigationBarSearchInputConfirmed","onNavigationBarSearchInputClicked","onShareTimeline","onAddToFavorites"]);function bt(t={},e){const s=[],n=new Set,o=new Set;for(const[r,a]of Object.entries(t)){if(!a||!a.value||r==="created"||r==="beforeCreate")continue;const c=gt[r]||r;if(vt.has(c)){const l=k(a.value,e,"script"),p=E(l);s.push(`${c}(${p});`),n.add(c)}else if($t.has(c)){const l=k(a.value,e,"script"),p=E(l);s.push(`${c}(${p});`),o.add(c)}}return{statements:s,usedHooks:n,usedUniHooks:o}}function _t(t){const{componentMap:e,components:s,importBlocks:n,collectImports:o,platform:r,vueImports:a,composableImports:c,globalApiImports:l,uniHookImports:p,easycomPackages:m}=t,i=["@dcloudio/uni-h5","uni-h5","@dcloudio/uni-ui","uni-ui"],u={vue:[...a]},f=[],_=[],g={};for(const d of s){const v=d.split(":")[0],h=e.get(v);if(!h||!h.package||h.parent||m.has(h.package))continue;const S=u[h.package]??(u[h.package]=[]),$=(h.alias||"").split(".")[0]||h.name,w=v,C=$!==w?`${$} as ${w}`:$;S.push(C),g[$]=w,r==="uniapp"&&i.includes(h.package)&&f.push($)}for(const d of s){const v=d.split(":")[0],h=e.get(v);if(!h||!h.package||!h.parent||m.has(h.package))continue;const S=h.parent,$=g[S]??S,w=h.alias||"";_.push(`const ${v} = ${$}.${w};`),g[S]||((u[h.package]??(u[h.package]=[])).push(S),g[S]=S)}for(const[d,v]of Object.entries(o))(u[d]??(u[d]=[])).push(...Array.from(v)),r==="uniapp"&&i.includes(d)&&f.push(...Array.from(v));for(const[d,v]of Object.entries(c))(u[d]??(u[d]=[])).push(...v);for(const[d,v]of Object.entries(l))(u[d]??(u[d]=[])).push(...v);return r==="uniapp"&&p.length>0&&(u["@dcloudio/uni-app"]??(u["@dcloudio/uni-app"]=[])).push(...p),{imports:Object.entries(u).filter(([d,v])=>r==="uniapp"?!i.includes(d)&&!!v.length:!!v.length).map(([d,v])=>`import { ${b.dedupArray(v).join(",")}} from '${d}';`).concat(n),uniComponents:f,componentDeclarations:_}}function yt(t,e=x,s=new Set,n=new Set){const o=Object.entries(e),r=a=>{if(a==null||typeof a!="object")return a;if(Array.isArray(a))return a.map(r);if(j(a)&&typeof a.value=="string"){let l=a.value;for(const[p,m]of o){const i=p.replace(/\$/g,"\\$"),u=new RegExp(`this\\.${i}\\b`,"g");l=l.replace(u,m.replace)}return l=l.replace(/this\.([A-Za-z_$][\w$]*)\.value\b/g,(p,m)=>s.has(m)||n.has(m)?m:p),{...a,value:l}}const c={};for(const[l,p]of Object.entries(a))c[l]=r(p);return c};return t.map(r)}function St(t,e,s=[],n={},o,r=x,a=new Set,c=new Set,l=new Set){const p=yt(t,r,a,c);return V(p,e,s,n,o,l)}function jt(t,e,s="web"){const{dsl:n}=t,o=me(e),r=de(o),a=nt(n,r),c=et(n,r),l=tt(c,r),p=st(c,r),m=p.__renderer__||[];delete p.__renderer__;const i=St(n.nodes||[],e,Object.keys(n.computed||{}),t.context,void 0,r,a.refs,a.computed,t.easycomPackages),u=i.importBlocks.map(O=>`import ${O.name} from './${O.id}.vue';`),f=rt(n.refs||{},a),_=ot(n.reactives||{},a),g=at(n.state||{},a),A=lt(n.computed||{},a),d={...i.methods||{},...n.methods||{}},v=ut(d,a),h=pt(n.dataSources||{},a),S=ft(n.watch||[],a),$=it(n.inject||[],a),w=mt(n.provide||{},a),C=ct(n.composables||[],a),I=new Set;for(const O of n.composables||[])if(O.destructure&&O.destructure.length>0)for(const L of O.destructure)I.add(L);else O.name&&I.add(O.name);const N=l.filter(O=>{const L=O.match(/^const\s+(\w+)\s*=/);return!(L&&I.has(L[1]))}),B=bt(n.lifeCycles||{},a),M=ht(n.lifeCycles||{},a),ge=dt(n.setup,a),P=new Set;f.length>0&&P.add("ref"),(_.length>0||g)&&P.add("reactive"),A.length>0&&P.add("computed"),S.length>0&&P.add("watch"),$.length>0&&P.add("inject"),w.length>0&&P.add("provide");for(const O of B.usedHooks)P.add(O);const ve=s==="uniapp"?Array.from(B.usedUniHooks):[],{imports:$e,uniComponents:be,componentDeclarations:_e}=_t({componentMap:e,components:i.components,importBlocks:u,collectImports:t.imports,platform:s,vueImports:Array.from(P),composableImports:C.imports,globalApiImports:p,uniHookImports:ve,easycomPackages:t.easycomPackages}),ye=ue(t.urlSchemas),Se=pe(t.blockPlugins);return{id:n.id,version:n.__VERSION__,name:n.name,imports:`
`+$e.join(`
`),props:re(n.props).join(","),emits:oe(n.emits).join(","),needsProps:c.has("$props"),needsEmit:c.has("$emit"),expose:n.expose&&n.expose.length?`{ ${n.expose.join(", ")} }`:"",globalApiDeclares:N.join(`
`),injects:$.join(`
`),composables:C.statements.join(`
`),state:g,refs:f.join(`
`),reactives:_.join(`
`),computed:A.join(`
`),methods:v.join(`
`),dataSources:h.join(`
`),watch:S.join(`
`),provide:w.join(`
`),createdStatements:M,setupStatements:ge,lifeCycles:B.statements.join(`
`),template:i.nodes.join(`
`),css:n.css||"",style:le(t.style),urlSchemas:ye.join(`
`),blockPlugins:Se.join(`
`),uniComponents:be,renderer:s==="uniapp"?"@vtj/uni-app":"@vtj/renderer",rendererImports:["useProvider",...m].join(", "),componentDeclarations:_e.join(`
`)}}const kt=`
// @ts-nocheck
import { useProvider } from '<%= renderer %>';
<%= imports %>
export default defineComponent({
name: '<%= name %>',
<% if(inject) { %> inject: { <%= inject %>}, <% } %>
<% if(components) { %> components: { <%= components %> }, <% } %>
<% if(directives) { %> directives: { <%= directives %> }, <% } %>
<% if(props) { %> props: { <%= props %> }, <% } %>
<% if(emits) {%> emits: [<%= emits %>], <% } %>
<% if(expose) {%> expose: <%= expose %>, <% } %>
setup(props) {
const provider = useProvider({
id: '<%= id %>',
version: '<%= version %>'
});
const state = reactive({ <%= state %> });
<%= urlSchemas %>
<%= blockPlugins %>
return {
state,
props,
provider
<% if(asyncComponents) { %>, <%= asyncComponents %> <% }%>
<% if(returns) { %>, <%= returns %> <% } %>
};
},
<% if(computed) { %> computed: { <%= computed %> }, <% } %>
<% if(methods) { %> methods: { <%= methods %> }, <% } %>
<% if(watch) { %> watch: { <%= watch %> }, <% } %> <%= lifeCycles %>
});
`,wt=`
<template>
<%= template %>
</template>
<script lang="<%= scriptLang %>"<% if(scriptSetup) { %> setup<% } %>>
<%= script %>
<\/script>
<style lang="<%= styleLang %>" scoped>
<%= css %>
<%= style %>
</style>
`,At=`// @ts-nocheck
import { <%= rendererImports %> } from '<%= renderer %>';<%= imports %>
<% if(componentDeclarations) { %><%= componentDeclarations %><% } %>
<% if(props) { %>const __props = defineProps({ <%= props %> });<% } else if(needsProps) { %>const __props = defineProps();<% } %>
<% if(emits) { %>const __emit = defineEmits([<%= emits %>]);<% } else if(needsEmit) { %>const __emit = defineEmits();<% } %>
const __provider = useProvider({ id: '<%= id %>', version: '<%= version %>' });
<%= urlSchemas %>
<%= blockPlugins %>
<%= globalApiDeclares %>
<%= injects %>
<%= composables %>
<%= createdStatements %>
<%= refs %>
<%= reactives %>
<%= computed %>
<%= state %>
<%= methods %>
<%= setupStatements %>
<%= dataSources %>
<%= watch %>
<%= provide %>
<%= lifeCycles %>
<% if(expose) { %>defineExpose(<%= expose %>);<% } %>
`,Ot=b.template(kt),It=b.template(At),Ct=b.template(wt);async function Pt(t,e=new Map,s=[],n="web",o){const r=t,a=typeof r.dsl=="object"&&arguments.length===1?r:{dsl:t,componentMap:e,dependencies:s,platform:n,formatterDisabled:o},{dsl:c,componentMap:l=new Map,dependencies:p=[],platform:m="web",formatterDisabled:i=!1,ts:u=!0,scss:f=!1}=a,_=new Ne(b.cloneDeep(c),p),g=c.apiMode==="composition";let A,d,v,h;if(g){const $=jt(_,l,m);h=It($),A=$.template||`
<!--组件模版内容-->
`,d=$.css,v=$.style}else{const $=Ke(_,l,m);h=Ot($),A=$.template||`
<!--组件模版内容-->
`,d=$.css,v=$.style}const S=Ct({template:A,css:await J(d,i)||`
/* 组件样式内容 */
`,script:await ee(h,i),style:await J(v,i),scriptLang:u?"ts":"js",styleLang:f?"scss":"css",scriptSetup:g});return await G(S,i).catch($=>($.content=S,Promise.reject($)))}async function xt(t){const e=`
<template>
<div>
<h3>源码模式页面</h3>
<div>文件路径:/.vtj/vue/${t.id}.vue</div>
</div>
</template>
<script lang="ts" setup>
<\/script>
<style scoped lang="scss">
</style>
`;return await G(e)}exports.GLOBAL_API_MAP=x;exports.UI_GLOBAL_API_MAPS=z;exports.UI_PACKAGES=fe;exports.VTJ_CODER_VERSION=Ie;exports.buildEffectiveApiMap=de;exports.createEmptyPage=xt;exports.cssFormatter=J;exports.detectUIPackage=me;exports.generator=Pt;exports.tsFormatter=ee;exports.vueFormatter=G;