@vtj/renderer 0.13.9 → 0.13.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +5 -5
- package/dist/index.mjs +59 -54
- package/package.json +6 -6
- package/types/version.d.ts +2 -2
package/dist/index.cjs
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
* Copyright (c) 2025, VTJ.PRO All rights reserved.
|
3
3
|
* @name @vtj/renderer
|
4
4
|
* @author CHC chenhuachun1549@dingtalk.com
|
5
|
-
* @version 0.13.
|
5
|
+
* @version 0.13.11
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
|
-
*/const
|
8
|
-
`),u=t(c),p=a(u);return l(p)}catch(c){return console.error("CSS scoping failed:",c),console.error("Input CSS:",r),r.replace(/\/\*[\s\S]*?\*\//g,"").replace(/(@keyframes\s+[^{]+\s*{[^{}]*(?:{[^}]*}[^{}]*)*})/g,u=>u).replace(/([^{}@]+)(?=\s*{)/g,u=>{const p=u.trim();return!p||p.startsWith("@")||p.includes(`[${e}]`)||s(p)?u:`${p}[${e}]`})}}function ne(r){return f.isString(r)?r:JSON.stringify(r)}function z(r,e,t,s=!1){const n=r.CSSStyleSheet,o=s?`data-v-${e}`:e,i=s?Pe(t,o):t;if(n.prototype.replaceSync){const a=new n;a.id=e,a.replaceSync(i);const l=r.document,c=l.adoptedStyleSheets,u=Array.from(c).filter(p=>p.id!==e);l.adoptedStyleSheets=[...u,a]}else{const a=r.document;let l=a.getElementById(e);l?l.innerHTML=i:(l=a.createElement("style"),l.id=e,l.innerHTML=i,a.head.appendChild(l))}}async function Ae(r,e){const t=await window.fetch(e).then(s=>s.text()).catch(()=>"");t&&z(window,r,t)}function oe(r,e=window){const t=e.document,s=e.document.head;for(const n of r)if(!t.getElementById(n)){const i=t.createElement("link");i.rel="stylesheet",i.id=n,i.href=n,s.appendChild(i)}}async function ie(r,e,t=window){const s=t.document,n=t.document.head;let o=t[e];return o?o.default||o:new Promise((i,a)=>{for(const l of r){const c=s.createElement("script");c.src=l,c.onload=()=>{o=t[e],o?i(o.default||o):a(null)},c.onerror=u=>{a(u)},n.appendChild(c)}})}function Me(r){return f.isFunction(r)||f.isFunction(r?.install)}function Ie(r){return Ee.includes(r)}function Te(r){return we.includes(r)}function
|
7
|
+
*/const k="0.13.11";var _=(r=>(r.Runtime="Runtime",r.Design="Design",r.Raw="Raw",r.VNode="VNode",r))(_||{});const te=["$el","$emit","$nextTick","$parent","$root","$attrs","$slots","$watch","$props","$options","$forceUpdate"],et=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeUnmount","unmounted","errorCaptured","renderTracked","renderTriggered","activated","deactivated"],_e=["vIf","vElseIf","vElse","vShow","vModel","vFor","vBind","vHtml"],Se={String,Number,Boolean,Array,Object,Function,Date},F="VtjPage",x="VtjHomepage",we="html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot,svg".split(","),Ee="component,slot".split(","),tt=["h","t","t","p","s",":","/","/","l","c","d","p",".","v","t","j",".","p","r","o"].join(""),st={auth:["h","t","t","p","s",":","/","/","l","c","d","p",".","v","t","j",".","p","r","o","/","a","u","t","h",".","h","t","m","l"].join(""),storageKey:["R","R","O","_","I","D","E","_","A","C","C","E","S","S","_","S","T","O","R","A","G","E","_","_"].join(""),privateKey:"MIIBOgIBAAJBAKoIzmn1FYQ1YOhOBw9EhABxZ+PySAIaydI+zdhoKflrdgJ4A5E4/5gbQmRpk09hPWG8nvX7h+l/QLU8kXxAIBECAwEAAQJAAlgpxQY6sByLsXqzJcthC8LSGsLf2JEJkHwlnpwFqlEV8UCkoINpuZ2Wzl+aftURu5rIfAzRCQBvHmeOTW9/zQIhAO5ufWDmnSLyfAAsNo5JRNpVuLFCFodR8Xm+ulDlosR/AiEAtpAltyP9wmCABKG/v/hrtTr3mcvFNGCjoGa9bUAok28CIHbrVs9w1ijrBlvTsXYwJw46uP539uKRRT4ymZzlm9QjAiB+1KH/G9f9pEEL9rtaSOG7JF5D0JcOjlze4MGVFs+ZrQIhALKOUFBNr2zEsyJIjw2PlvEucdlG77UniszjXTROHSPd"};function H(r,e){return r.map(t=>f.isUrl(t)||t.startsWith("/")?t:`${e}${t}`)}function B(r){return/\.css$/.test(r)}function N(r){return/\.js$/.test(r)}function $e(r){return/\.json$/.test(r)}function rt(r){return r.map(e=>`<script src="${f.url.append(e,{v:k})}"><\/script>`).join("")}function nt(r=[]){return r.map(e=>`<link rel="stylesheet" href="${f.url.append(e,{v:k})}" />`).join("")}function je(r,e=!1){return e&&r.endsWith(".prod.js")?r.replace(".prod.js",".js"):r}function be(r,e,t=!1){const s=r.filter(m=>!!m.enabled),n=[],o=[],i=[],a=[],l={},c={},u=[],p={};return s.forEach(({urls:m,assetsUrl:d,library:h,assetsLibrary:v,localeLibrary:y})=>{m?.forEach(g=>{N(g)&&n.push(je(g,t)),B(g)&&o.push(g)}),h&&(a.push(h),l[h]=H(m||[],e),y&&(c[h]=y)),d&&i.push(d),v&&u.push(v),h&&v&&(p[v]=h)}),{scripts:H(n,e),css:H(o,e),materials:H(i,e),libraryExports:a,materialExports:f.dedupArray(u),materialMapLibrary:p,libraryMap:l,libraryLocaleMap:c}}function Re(r,e){const{name:t,parent:s,alias:n}=r;return s?e[s]?.[n||t]:e[n||t]}function Ce(r=[]){const e=r.filter(s=>B(s)),t=r.filter(s=>N(s));return{css:e,js:t}}function Pe(r,e){const t=c=>{const u=[];let p=0;for(;p<c.length;){if(/\s/.test(c[p])){p++;continue}if(c.substring(p,p+2)==="/*"){const g=c.indexOf("*/",p+2);if(g!==-1){p=g+2;continue}}if(c[p]==="@"){const g=p;for(;p<c.length&&c[p]!=="{"&&c[p]!==";";)p++;const C=c.substring(g,p).trim(),S=C.includes("@keyframes");if(c[p]===";")u.push({type:"simple-at-rule",content:c.substring(g,p+1)}),p++;else if(c[p]==="{"){const L=p+1;let M=1;for(p++;p<c.length&&M>0;)c[p]==="{"?M++:c[p]==="}"&&M--,p++;const W=c.substring(g,p),P=c.substring(L,p-1);u.push({type:S?"keyframes":"at-rule",rule:C,content:W,inner:P})}continue}const m=p;for(;p<c.length&&c[p]!=="{";)p++;if(p>=c.length)break;const d=c.substring(m,p).trim();if(!d){p++;continue}const h=p+1;let v=1;for(p++;p<c.length&&v>0;)c[p]==="{"?v++:c[p]==="}"&&v--,p++;const y=c.substring(h,p-1);u.push({type:"rule",selector:d,content:y.trim()})}return u},s=c=>{const u=c.trim();return/^(from|to|\d+(\.\d+)?%)$/.test(u)},n=c=>c.replace(/::v-deep\(/g,":deep(").replace(/::v-deep\s+/g,":deep(").replace(/\/deep\//g," ").replace(/>>>/g," ").replace(/(.*?):deep\(([^)]+)\)/g,(u,p,m)=>{const d=p.trim(),h=m.trim();return d?`${d}[${e}] ${h}`:h}),o=c=>{const u=c.trim();if(!u||u.includes(`[${e}]`)||/^(:root|:host|html|body)(\s|$|:|\.|\#|\[)/.test(u)||s(u))return u;const p=u.match(/^(.+?)((?:::?[\w-]+(?:\([^)]*\))?)*)\s*$/);if(p){const[,m,d=""]=p,h=m.trim();return h?`${h}[${e}]${d}`:u}return`${u}[${e}]`},i=c=>n(c).split(",").map(p=>o(p)).filter(p=>p.trim()).join(", "),a=c=>c.map(u=>{switch(u.type){case"simple-at-rule":return u.content;case"keyframes":return u.content;case"at-rule":try{const m=t(u.inner),d=a(m);return`${u.rule} { ${d} }`}catch{return u.content}case"rule":if(!u.selector||!u.content)return"";const p=i(u.selector);return p.trim()?`${p} { ${u.content} }`:"";default:return""}}).filter(u=>u.trim()).join(" "),l=c=>c.replace(/\s*{\s*/g," { ").replace(/\s*}\s*/g," } ").replace(/\s*;\s*/g,"; ").replace(/\s*,\s*/g,", ").replace(/\s+/g," ").replace(/^\s+|\s+$/g,"").replace(/\s*}\s*}/g," } }").trim();try{const c=r.replace(/\/\*(?!\s*!)[\s\S]*?\*\//g,"").replace(/^\s+|\s+$/gm,"").replace(/\n\s*\n/g,`
|
8
|
+
`),u=t(c),p=a(u);return l(p)}catch(c){return console.error("CSS scoping failed:",c),console.error("Input CSS:",r),r.replace(/\/\*[\s\S]*?\*\//g,"").replace(/(@keyframes\s+[^{]+\s*{[^{}]*(?:{[^}]*}[^{}]*)*})/g,u=>u).replace(/([^{}@]+)(?=\s*{)/g,u=>{const p=u.trim();return!p||p.startsWith("@")||p.includes(`[${e}]`)||s(p)?u:`${p}[${e}]`})}}function ne(r){return f.isString(r)?r:JSON.stringify(r)}function z(r,e,t,s=!1){const n=r.CSSStyleSheet,o=s?`data-v-${e}`:e,i=s?Pe(t,o):t;if(n.prototype.replaceSync){const a=new n;a.id=e,a.replaceSync(i);const l=r.document,c=l.adoptedStyleSheets,u=Array.from(c).filter(p=>p.id!==e);l.adoptedStyleSheets=[...u,a]}else{const a=r.document;let l=a.getElementById(e);l?l.innerHTML=i:(l=a.createElement("style"),l.id=e,l.innerHTML=i,a.head.appendChild(l))}}async function Ae(r,e){const t=await window.fetch(e).then(s=>s.text()).catch(()=>"");t&&z(window,r,t)}function oe(r,e=window){const t=e.document,s=e.document.head;for(const n of r)if(!t.getElementById(n)){const i=t.createElement("link");i.rel="stylesheet",i.id=n,i.href=n,s.appendChild(i)}}async function ie(r,e,t=window){const s=t.document,n=t.document.head;let o=t[e];return o?o.default||o:new Promise((i,a)=>{for(const l of r){const c=s.createElement("script");c.src=l,c.onload=()=>{o=t[e],o?i(o.default||o):a(null)},c.onerror=u=>{a(u)},n.appendChild(c)}})}function Me(r){return f.isFunction(r)||f.isFunction(r?.install)}function Ie(r){return Ee.includes(r)}function Te(r){return we.includes(r)}function O(r=window){const e=window?.Mock;if(e)return e;const t=r?.Mock;if(t&&window)return window.Mock=t,t}function ot(r,e,t){Object.assign(e.meta,t.meta);const s=r?._container;t?.type==="page"&&s.classList.add("is-page"),t?.pure&&s.classList.add("is-pure")}function D(r,e,t=!1,s=!1,n=!1){try{const o=['"use strict";',"var __self = arguments[0];"];o.push("return ");let i=(r.value||"").trim();n||(i=i.replace(/this(\W|$)/g,(l,c)=>`__self${c}`)),i=o.join(`
|
9
9
|
`)+i;const a=n?`
|
10
10
|
${i}
|
11
|
-
`:`with(${t?"{}":"$scope || {}"}) { ${i} }`;return new Function("$scope",a)(e)}catch(o){if(f.logger.error("parseExpression.error",o,r,e?.__self??e),s)throw o}}function R(r,e,t=!1,s=!1,n=!1){const o=D(r,e,t,s,n);if(typeof o!="function"&&(f.logger.error("parseFunction.error","not a function",r,e?.__self??e),s))throw new Error(`"${r.value}" not a function`);return o}function j(r){return r&&r.type==="JSExpression"}function $(r){return typeof r=="object"&&r&&r.type==="JSFunction"}function Fe(r){return j(r)||$(r)}function it(r){return Fe(r)?r.value:JSON.stringify(r)}const at={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ_",unauthorized:void 0,auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!",noPermissionMessage:"无权限访问该页面",appName:"",statusKey:"code"},ae=Symbol("access");class V{options;data=null;mode=_.Raw;interceptResponse=!0;constructor(e){this.options=Object.assign({},at,e),this.loadData()}enableIntercept(){this.interceptResponse=!0}disableIntercept(){this.interceptResponse=!1}connect(e){const{mode:t,router:s,request:n}=e;this.mode=t,s&&this.mode!==_.Design&&this.setGuard(s),n&&this.setRequest(n)}login(e){const{storageKey:t,storagePrefix:s,session:n,authKey:o}=this.options;this.setData(e),this.data&&(f.storage.save(t,e,{type:"local",prefix:s}),n&&f.cookie.set(o,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:n}=this.options;this.data=null,f.storage.remove(e,{type:"local",prefix:t}),s&&f.cookie.remove(n)}logout(){this.clear(),this.toLogin()}getData(){return this.data?this.data:(this.loadData(),this.data)}getToken(){return this.data||this.loadData(),this.data?.token}can(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return typeof e=="function"?e(s):f.toArray(e).every(o=>s[o]||s[t+"."+o])}some(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return f.toArray(e).some(o=>s[o]||s[t+"."+o])}install(e){e.config.globalProperties.$access=this,e.provide(ae,this)}isAuthPath(e){const{auth:t,isAuth:s}=this.options;if(s)return s(e);if(e.path&&typeof t=="string"){const n=t.split("#")[1]||t;return e.path===n}return!1}toLogin(){const{auth:e,redirectParam:t}=this.options;if(!e)return;const s=t?`?${t}=${encodeURIComponent(location.href)}`:"";typeof e=="function"?e(s):location.href=t?`${e}${s}`:e}setData(e){const{privateKey:t}=this.options;if(Array.isArray(e)&&t){const s=e.map(n=>f.unRSA(n,t));try{this.data=JSON.parse(s.join(""))}catch(n){console.warn(n)}return}if(typeof e=="string")try{const s=t?f.unRSA(e,t):e;s?this.data=JSON.parse(s):console.warn("RSA解密失败或登录信息缺失")}catch(s){console.warn(s)}else this.data=e}loadData(){const{storageKey:e,storagePrefix:t}=this.options,s=f.storage.get(e,{type:"local",prefix:t});this.setData(s||null)}isLogined(){const{session:e,authKey:t}=this.options;return e&&t?!!f.cookie.get(t):!!this.getToken()}hasRoutePermission(e){if(e.name===O){const t=e.params.id;return t&&this.can(t)}return e.meta.__vtj__?this.can(e.meta.__vtj__):!0}setGuard(e){e.beforeEach((t,s,n)=>this.guard(t,n))}async guard(e,t){if(this.isWhiteList(e)||this.isAuthPath(e))return t();if(this.isLogined()){if(this.hasRoutePermission(e))return t();{const{noPermissionMessage:s="无权限访问",unauthorized:n=!1}=this.options;return await this.showTip(s),f.isFunction(n)?(n(),t(!1)):f.isString(n)?t(n):t(!1)}}t(!1),await f.delay(0),this.toLogin()}isWhiteList(e){const{whiteList:t}=this.options;return t?Array.isArray(t)?t.some(s=>e.fullPath.startsWith(s)):t(e):!1}isUnauthorized(e){const{unauthorizedCode:t=401,statusKey:s="code"}=this.options;return e.status===t||e.data?.[s]===t}async showUnauthorizedAlert(e){const{unauthorizedMessage:t="登录已失效"}=this.options;this.isUnauthorized(e)&&(await this.showTip(t),this.toLogin())}async showTip(e){const{alert:t}=this.options;return t?(await f.delay(150),await t(e,{title:"提示",type:"warning"})?.catch(()=>!1)):(window.alert(e),!1)}setRequest(e){e.useRequest(t=>(this.data?.token&&(t.headers[this.options.authKey]=this.data?.token),t)),e.useResponse(async t=>(this.interceptResponse&&await this.showUnauthorizedAlert(t),t),async t=>{if(!this.interceptResponse)return Promise.reject(t);const s=t.response||t||{};return await this.showUnauthorizedAlert(s),Promise.reject(t)})}}function Oe(){return E.inject(ae,null)}function ct(r={}){const{notify:e,loading:t,settings:s={},Startup:n,access:o,useTitle:i,alert:a}=r;let l=null;return{request:f.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:u=>u.data?.code===0||!!u.data?.success,failMessage:!0,showError:u=>{e&&e(u||"未知错误")},showLoading:()=>{l&&l.close(),t&&(l=t())},hideLoading:()=>{l&&(l.close(),l=null)},...s}}),jsonp:f.jsonp,notify:e,loading:t,useTitle:i,alert:a,startupComponent:n,access:o?new V({alert:a,...o}):void 0}}function lt(r={}){return new V(r)}function ke(r,e){const{jsonp:t,request:s}=e;if(r.method==="jsonp")return(n={})=>t(r.url,{...r.jsonpOptions,query:n});{const n=r.headers?D(r.headers,{},!0):void 0,o={url:r.url,method:r.method,settings:{...r.settings,headers:n}};return(i,a)=>(delete o.data,s.send(f.merge(o,a||{},{data:i})))}}function De(r,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:n}=r;return(o,i)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,n,o,i)}}function He(r=[],e=[],t){const s={};for(const n of r)s[n.id]=ke(n,t);for(const n of e)s[n.id]=De(n,t);return s}async function xe(r=[],e=window){const t=k(e);t&&(ce(e),r.forEach(s=>Be(t,s)))}function Ue(r,e=window){const t=$(r.mockTemplate)&&r.mockTemplate.value?R(r.mockTemplate,{},!0):void 0,s=k(e);return async(...n)=>{let o={};if(t)try{o=await t.apply(t,n)}catch(i){f.logger.warn("模拟数据模版异常",i)}return s?.mock(o)}}function Be(r,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s)try{const n=f.isUrl(t)?new URL(t).pathname:t,o=f.pathToRegexp(`(.*)${n}(.*)`),i=f.pathToRegexpMatch(n,{decode:decodeURIComponent}),a=D(s,{},!0);r.mock(o,l=>{const c=f.url.parse(l.url)||{},u=l.body instanceof FormData?f.formDataToJson(l.body):l.body,p=f.isUrl(l.url)?new URL(l.url).pathname:l.url.split("?")[0],m=i(p)?.params;return Object.assign(l,{data:u,params:m,query:c}),r.mock(a(l))})}catch(n){console.warn("mockApi",n)}}function ce(r=window){const e=k(r);e&&(e._mocked={})}class Ne{__id=null;__mode;__instance=null;__contextRefs={};__refs={};context={};state={};props={};$props={};$refs={};$el=null;$emit=null;$nextTick=null;$parent=null;$root=null;$attrs=null;$slots=null;$watch=null;$options=null;$forceUpdate=null;$components={};$libs={};$apis={};__transform={};constructor(e){const{mode:t,dsl:s,attrs:n}=e;this.__mode=t,s&&(this.__id=s.id||null,this.__transform=s.transform||{}),n&&Object.assign(this,n)}setup(e,t=G){const s=t.getCurrentInstance();if(!s)return;this.__refs={},this.$refs={},this.context={},this.__contextRefs={},this.__instance=s.proxy;const n=s.appContext.config.globalProperties;Object.assign(this,n),Object.assign(this,e||{}),this.__proxy(),t.onMounted(()=>{this.__proxy()}),t.onUnmounted(()=>{this.__cleanup()}),t.onBeforeUpdate(()=>{this.__reset()})}__proxy(){this.__instance&&te.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){te.forEach(e=>{this[e]=null}),this.__reset()}__reset(){this.__refs={},this.$refs={},this.__contextRefs={},this.context={}}__parseFunction(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return R({type:s,value:n},this)}else return R(e,this)}__parseExpression(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return D({type:s,value:n},this)}else return D(e,this)}__ref(e=null,t){if(this.__mode!==_.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await f.delay(0);let n=s?.$vtjEl||s?.$el||s?._?.vnode?.el||s;if(!n){typeof t=="string"&&(delete this.$refs[t],e&&delete this.__refs[e]);return}return n.nodeType===3&&n.nextSibling&&(n=n.nextSibling),n.__vtj__=e,_.Design===this.__mode&&(n.__context__=this,n.draggable=!0),e&&(this.__refs[e]=this.__getRefEl(this.__refs,e,s)),typeof t=="function"?t(s):t&&(this.$refs[t]=this.__getRefEl(this.$refs,t,s)),s}}__getRefEl(e,t,s){const n=e[t];if(n&&s!==n){const o=new Set([].concat(n,s));return Array.from(o)}else return s}__clone(e={}){const t={...this.context,...e},s={...t,context:t};return s.context.__proto__=this.context,s.__proto__=this,s}}function J(r){const{Vue:e=G,mode:t=_.Runtime,components:s={},libs:n={},apis:o={},loader:i}=r,a=e.computed(()=>r.dsl),l={$components:s,$libs:n,$apis:o},c=new Ne({mode:t,dsl:a.value,attrs:l}),u=e.defineComponent({name:a.value.name,__scopeId:a.value.id?`data-v-${a.value.id}`:void 0,props:{...pt(a.value.props??[],c)},setup(p){c.$props=p,c.props=p,a.value.id&&z(r.window||window,a.value.id,a.value.css||"",!0),c.state=ft(e,a.value.state??{},c);const m=dt(e,a.value.computed??{},c),h=ht(a.value.methods??{},c),d=mt(e,a.value.inject,c);for(const[g,C]of Object.entries(d||{}))d[g]=e.inject(g,C);const v=Le(a.value.dataSources||{},c),y={...d,...m,...h,...v};return c.setup(y,e),gt(e,a.value.watch??[],c),{vtj:c}},emits:ut(a.value.emits),expose:["vtj"],render(){if(!a.value.nodes)return null;const p=a.value.nodes||[];return p.length===1?T(p[0],c,e,i,p):p.map(m=>T(m,c,e,i,p))},...vt(a.value.lifeCycles??{},c)});return{renderer:e.markRaw(u),context:c}}function ut(r=[]){return r.map(e=>f.isString(e)?e:e.name)}function pt(r=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(o=>Se[o]):void 0;return r.map(s=>f.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:j(s.default)?e.__parseExpression(s.default):s.default}).reduce((s,n)=>(s[n.name]={type:t(n.type),required:n.required,default:n.default},s),{})}function ft(r,e,t){return r.reactive(Object.keys(e||{}).reduce((s,n)=>{let o=e[n];return j(o)?o=t.__parseExpression(o):$(o)&&(o=t.__parseFunction(o)),s[n]=o,s},{}))}function dt(r,e,t){return Object.entries(e??{}).reduce((s,[n,o])=>(s[n]=r.computed(t.__parseFunction(o)),s),{})}function ht(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}function mt(r,e=[],t){return e.reduce((s,n)=>{const{name:o,from:i}=n||{};n.default;const a=j(i)?t.__parseExpression(i)||o:i??o,l=j(n.default)?t.__parseExpression(n.default):n.default??null;return s[o]=r.inject(a,l),s},{})}function Le(r,e){return Object.keys(r).reduce((t,s)=>{const n=r[s];if(n.type==="mock")t[s]=Ue(n);else if(n.ref){const o=e.$apis[n.ref],i=$(n.transform)?n.transform.value?e.__parseFunction(n.transform):void 0:n.transform;t[s]=async(...a)=>{const l=await o.apply(e,a);return i?i(l):l}}return t},{})}function gt(r,e=[],t){e.forEach(s=>{r.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function vt(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>{const o=e.__parseFunction(n);return t[s]=async()=>{await f.delay(0),f.isFunction(o)&&o()},t},{})}const qe=new f.Queue;let X=[],I={};const Je=r=>r;async function le(r,e=window){const{urls:t=[],library:s}=r,n=t.filter(a=>N(a));if(n.length===0||!s)return null;const o=t.filter(a=>B(a));return o.length&&oe(o,e),await ie(n,s,e).catch(a=>(console.warn("loadScriptUrl error",n,s,a),null))}function K(r){const{getDsl:e,getDslByUrl:t,options:s}=r;return s.window&&(X.forEach(n=>{delete s.window[n]}),X=[]),(n,o,i=G)=>{if(!o||typeof o=="string")return n;if(o.type==="Schema"&&o.id)return i.defineAsyncComponent(async()=>{const a=I[o.id]||await qe.add(o.id,()=>e(o.id));return a&&(a.name=n,I[o.id]=a),a?J({...s,Vue:i,dsl:f.cloneDeep(a),mode:_.Runtime,loader:K(r)}).renderer:null});if(o.type==="UrlSchema"&&o.url)return i.defineAsyncComponent(async()=>{const a=I[o.url]||await t(o.url);return a&&(a.name=n,I[o.url]=a),a?J({...s,Vue:i,dsl:f.cloneDeep(a),mode:_.Runtime,loader:K(r)}).renderer:null});if(o.type==="Plugin"){let a=o.library?I[o.library]:null;return a||(o.library&&X.push(o.library),a=I[o.library||Symbol()]=i.defineAsyncComponent(async()=>{const l=await le(o,s.window);return l||(console.warn("getPlugin result is null",o),null)}),a)}return n}}function yt(){I={},qe.clearAllCache()}function T(r,e,t=G,s=Je,n=[],o=!1){if(!r||!r.name||r.invisible)return null;const i=t.getCurrentInstance()?.appContext,{id:a=null,directives:l=[]}=r,{vIf:c,vElseIf:u,vElse:p,vFor:m,vShow:h,vModels:d,vBind:v,vHtml:y,others:g}=Ke(l);if(!o&&(u||p))return null;if(c&&!St(c,e))return jt(r,e,t,s,n);const C=(S,L=0)=>{const M=S.$components,W=(()=>{if(r.name==="component")return wt(S,r.props?.is);if(r.name==="slot")return r.name;const b=s(r.name,r.from,t);if(f.isString(b))return Ie(b)||Te(b)?b:M[b]??i?.app?.component(b)??b;if(f.isObject(b)&&r.id){const ge=`Loader${r.id}_${L}`,ve=M[ge];return ve||(M[ge]=b)}return b})(),P=Et(a,r.props??{},S),We=$t(t,r.events??{},S);if(r.name==="slot")return bt(t,r,P,S,s);v&&Object.assign(P,S.__parseExpression(v.value)),h&&(P.style=Object.assign(P.style??{},Ct(h,S))),y&&Object.assign(P,Pt(y,S)),d.forEach(b=>{Object.assign(P,At(t,b,S))});const Ye=Mt(t,r.children??[],S,s,r),he=S?.__id?`data-v-${S.__id}`:void 0,Xe=he?{[he]:""}:{};let Y=t.createVNode(W,{key:`${a}_${L}`,...Xe,...P,...We},Ye);const me=i?_t(i,g,S):[];return me.length&&(Y=t.withDirectives(Y,me)),Y};return m?Ft(m,C,e):C(e)}function _t(r,e,t){const s=r.app;return e.map(n=>{const o=typeof n.name=="string"?s.directive(n.name):t.__parseExpression(n.name);if(!o)return null;const i=[o];return n.value&&i.push(t.__parseExpression(n.value)),n.arg&&i.push(n.arg),n.modifiers&&i.push(n.modifiers),i}).filter(n=>!!n)}function Ke(r=[]){const e=r.find(u=>f.camelCase(u.name)==="vIf"),t=r.find(u=>f.camelCase(u.name)==="vElseIf"),s=r.find(u=>f.camelCase(u.name)==="vElse"),n=r.find(u=>f.camelCase(u.name)==="vFor"),o=r.find(u=>f.camelCase(u.name)==="vShow"),i=r.find(u=>f.camelCase(u.name)==="vBind"),a=r.find(u=>f.camelCase(u.name)==="vHtml"),l=r.filter(u=>f.camelCase(u.name)==="vModel"),c=r.filter(u=>!_e.includes(f.camelCase(u.name)));return{vIf:e,vElseIf:t,vElse:s,vFor:n,vShow:o,vModels:l,vBind:i,others:c,vHtml:a}}function St(r,e){return!!e.__parseExpression(r.value)}function wt(r,e){return e?j(e)?r.__parseExpression(e):e:"div"}function Et(r,e,t){const s=se(e,t);return s.ref=t.__ref(r,s.ref),s}function se(r,e){return j(r)?e.__parseExpression(r):$(r)?e.__parseFunction(r):Array.isArray(r)?r.map(t=>se(t,e)):typeof r=="object"?Object.keys(r||{}).reduce((t,s)=>{let n=r[s];return t[s]=se(n,e),t},{}):r}function $t(r,e,t){const s=["passive","capture","once"],n={capture:"Capture",once:"Once",passive:"OnceCapture"};return Object.keys(e||{}).reduce((o,i)=>{const a=e[i],l=ue(a.modifiers),c=l.find(m=>s.includes(m)),u="on"+f.upperFirst(i)+(c&&n[c]||""),p=t.__parseFunction(a.handler);return p&&(o[u]=r.withModifiers(p,l)),o},{})}function jt(r,e,t,s,n=[]){let o=n.findIndex(i=>i.id===r.id);for(let i=++o;i<n.length;i++){const{directives:a=[]}=n[i],{vElseIf:l,vElse:c}=Ke(a);if(l){if(e.__parseExpression(l.value))return T(n[i],e,t,s,n,!0);continue}if(c)return T(n[i],e,t,s,n,!0)}return null}function ue(r={},e=!1){const t=Object.keys(r);return e?t.map(s=>"."+s):t}function bt(r,e,t,s,n){const{children:o}=e,i=Rt(e,s),a=s.$slots?.[i.name];return a?a(t):o?f.isString(o)?r.createTextVNode(o):j(o)?r.createTextVNode(ne(s.__parseExpression(o))):Array.isArray(o)?o.map(l=>T(l,s,r,n,o)):null:null}function Rt(r,e){const{props:t}=r,s=t?.name||"default";return{name:j(s)?e.__parseExpression(s):s,params:[]}}function Ct(r,e){return e.__parseExpression(r.value)?{}:{display:"none"}}function Pt(r,e){return{innerHTML:e.__parseExpression(r.value)||""}}function At(r,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
11
|
+
`:`with(${t?"{}":"$scope || {}"}) { ${i} }`;return new Function("$scope",a)(e)}catch(o){if(f.logger.error("parseExpression.error",o,r,e?.__self??e),s)throw o}}function R(r,e,t=!1,s=!1,n=!1){const o=D(r,e,t,s,n);if(typeof o!="function"&&(f.logger.error("parseFunction.error","not a function",r,e?.__self??e),s))throw new Error(`"${r.value}" not a function`);return o}function j(r){return r&&r.type==="JSExpression"}function $(r){return typeof r=="object"&&r&&r.type==="JSFunction"}function ke(r){return j(r)||$(r)}function it(r){return ke(r)?r.value:JSON.stringify(r)}const at={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ_",unauthorized:void 0,auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!",noPermissionMessage:"无权限访问该页面",appName:"",statusKey:"code"},ae=Symbol("access");class V{options;data=null;mode=_.Raw;interceptResponse=!0;constructor(e){this.options=Object.assign({},at,e),this.loadData()}enableIntercept(){this.interceptResponse=!0}disableIntercept(){this.interceptResponse=!1}connect(e){const{mode:t,router:s,request:n}=e;this.mode=t,s&&this.mode!==_.Design&&this.setGuard(s),n&&this.setRequest(n)}login(e){const{storageKey:t,storagePrefix:s,session:n,authKey:o}=this.options;this.setData(e),this.data&&(f.storage.save(t,e,{type:"local",prefix:s}),n&&f.cookie.set(o,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:n}=this.options;this.data=null,f.storage.remove(e,{type:"local",prefix:t}),s&&f.cookie.remove(n)}logout(){this.clear(),this.toLogin()}getData(){return this.data?this.data:(this.loadData(),this.data)}getToken(){return this.data||this.loadData(),this.data?.token}can(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return typeof e=="function"?e(s):f.toArray(e).every(o=>s[o]||s[t+"."+o])}some(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return f.toArray(e).some(o=>s[o]||s[t+"."+o])}install(e){e.config.globalProperties.$access=this,e.provide(ae,this)}isAuthPath(e){const{auth:t,isAuth:s}=this.options;if(s)return s(e);if(e.path&&typeof t=="string"){const n=t.split("#")[1]||t;return e.path===n}return!1}toLogin(){const{auth:e,redirectParam:t}=this.options;if(!e)return;const s=t?`?${t}=${encodeURIComponent(location.href)}`:"";typeof e=="function"?e(s):location.href=t?`${e}${s}`:e}setData(e){const{privateKey:t}=this.options;if(Array.isArray(e)&&t){const s=e.map(n=>f.unRSA(n,t));try{this.data=JSON.parse(s.join(""))}catch(n){console.warn(n)}return}if(typeof e=="string")try{const s=t?f.unRSA(e,t):e;s?this.data=JSON.parse(s):console.warn("RSA解密失败或登录信息缺失")}catch(s){console.warn(s)}else this.data=e}loadData(){const{storageKey:e,storagePrefix:t}=this.options,s=f.storage.get(e,{type:"local",prefix:t});this.setData(s||null)}isLogined(){const{session:e,authKey:t}=this.options;return e&&t?!!f.cookie.get(t):!!this.getToken()}hasRoutePermission(e){if(e.name===F){const t=e.params.id;return t&&this.can(t)}return e.meta.__vtj__?this.can(e.meta.__vtj__):!0}setGuard(e){e.beforeEach((t,s,n)=>this.guard(t,n))}async guard(e,t){if(this.isWhiteList(e)||this.isAuthPath(e))return t();if(this.isLogined()){if(this.hasRoutePermission(e))return t();{const{noPermissionMessage:s="无权限访问",unauthorized:n=!1}=this.options;return await this.showTip(s),f.isFunction(n)?(n(),t(!1)):f.isString(n)?t(n):t(!1)}}t(!1),await f.delay(0),this.toLogin()}isWhiteList(e){const{whiteList:t}=this.options;return t?Array.isArray(t)?t.some(s=>e.fullPath.startsWith(s)):t(e):!1}isUnauthorized(e){const{unauthorizedCode:t=401,statusKey:s="code"}=this.options;return e.status===t||e.data?.[s]===t}async showUnauthorizedAlert(e){const{unauthorizedMessage:t="登录已失效"}=this.options;this.isUnauthorized(e)&&(await this.showTip(t),this.toLogin())}async showTip(e){const{alert:t}=this.options;return t?(await f.delay(150),await t(e,{title:"提示",type:"warning"})?.catch(()=>!1)):(window.alert(e),!1)}setRequest(e){e.useRequest(t=>(this.data?.token&&(t.headers[this.options.authKey]=this.data?.token),t)),e.useResponse(async t=>(this.interceptResponse&&await this.showUnauthorizedAlert(t),t),async t=>{if(!this.interceptResponse)return Promise.reject(t);const s=t.response||t||{};return await this.showUnauthorizedAlert(s),Promise.reject(t)})}}function Fe(){return E.inject(ae,null)}function ct(r={}){const{notify:e,loading:t,settings:s={},Startup:n,access:o,useTitle:i,alert:a}=r;let l=null;return{request:f.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:u=>u.data?.code===0||!!u.data?.success,failMessage:!0,showError:u=>{e&&e(u||"未知错误")},showLoading:()=>{l&&l.close(),t&&(l=t())},hideLoading:()=>{l&&(l.close(),l=null)},...s}}),jsonp:f.jsonp,notify:e,loading:t,useTitle:i,alert:a,startupComponent:n,access:o?new V({alert:a,...o}):void 0}}function lt(r={}){return new V(r)}function Oe(r,e){const{jsonp:t,request:s}=e;if(r.method==="jsonp")return(n={})=>t(r.url,{...r.jsonpOptions,query:n});{const n=r.headers?D(r.headers,{},!0):void 0,o={url:r.url,method:r.method,settings:{...r.settings,headers:n}};return(i,a)=>(delete o.data,s.send(f.merge(o,a||{},{data:i})))}}function De(r,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:n}=r;return(o,i)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,n,o,i)}}function He(r=[],e=[],t){const s={};for(const n of r)s[n.id]=Oe(n,t);for(const n of e)s[n.id]=De(n,t);return s}async function xe(r=[],e=window){const t=O(e);t&&(ce(e),r.forEach(s=>Be(t,s)))}function Ue(r,e=window){const t=$(r.mockTemplate)&&r.mockTemplate.value?R(r.mockTemplate,{},!0):void 0,s=O(e);return async(...n)=>{let o={};if(t)try{o=await t.apply(t,n)}catch(i){f.logger.warn("模拟数据模版异常",i)}return s?.mock(o)}}function Be(r,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s)try{const n=f.isUrl(t)?new URL(t).pathname:t,o=f.pathToRegexp(`(.*)${n}(.*)`),i=f.pathToRegexpMatch(n,{decode:decodeURIComponent}),a=D(s,{},!0);r.mock(o,l=>{const c=f.url.parse(l.url)||{},u=l.body instanceof FormData?f.formDataToJson(l.body):l.body,p=f.isUrl(l.url)?new URL(l.url).pathname:l.url.split("?")[0],m=i(p)?.params;Object.assign(l,{data:u,params:m,query:c});try{return r.mock(a(l))}catch(d){return console.warn("[mockApi]",o,l,d),null}})}catch(n){console.warn("mockApi",n)}}function ce(r=window){const e=O(r);e&&(e._mocked={})}class Ne{__id=null;__mode;__instance=null;__contextRefs={};__refs={};context={};state={};props={};$props={};$refs={};$el=null;$emit=null;$nextTick=null;$parent=null;$root=null;$attrs=null;$slots=null;$watch=null;$options=null;$forceUpdate=null;$components={};$libs={};$apis={};__transform={};constructor(e){const{mode:t,dsl:s,attrs:n}=e;this.__mode=t,s&&(this.__id=s.id||null,this.__transform=s.transform||{}),n&&Object.assign(this,n)}setup(e,t=G){const s=t.getCurrentInstance();if(!s)return;this.__refs={},this.$refs={},this.context={},this.__contextRefs={},this.__instance=s.proxy;const n=s.appContext.config.globalProperties;Object.assign(this,n),Object.assign(this,e||{}),this.__proxy(),t.onMounted(()=>{this.__proxy()}),t.onUnmounted(()=>{this.__cleanup()}),t.onBeforeUpdate(()=>{this.__reset()})}__proxy(){this.__instance&&te.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){te.forEach(e=>{this[e]=null}),this.__reset()}__reset(){this.__refs={},this.$refs={},this.__contextRefs={},this.context={}}__parseFunction(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return R({type:s,value:n},this)}else return R(e,this)}__parseExpression(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return D({type:s,value:n},this)}else return D(e,this)}__ref(e=null,t){if(this.__mode!==_.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await f.delay(0);let n=s?.$vtjEl||s?.$el||s?._?.vnode?.el||s;if(!n){typeof t=="string"&&(delete this.$refs[t],e&&delete this.__refs[e]);return}return n.nodeType===3&&n.nextSibling&&(n=n.nextSibling),n.__vtj__=e,_.Design===this.__mode&&(n.__context__=this,n.draggable=!0),e&&(this.__refs[e]=this.__getRefEl(this.__refs,e,s)),typeof t=="function"?t(s):t&&(this.$refs[t]=this.__getRefEl(this.$refs,t,s)),s}}__getRefEl(e,t,s){const n=e[t];if(n&&s!==n){const o=new Set([].concat(n,s));return Array.from(o)}else return s}__clone(e={}){const t={...this.context,...e},s={...t,context:t};return s.context.__proto__=this.context,s.__proto__=this,s}}function J(r){const{Vue:e=G,mode:t=_.Runtime,components:s={},libs:n={},apis:o={},loader:i}=r,a=e.computed(()=>r.dsl),l={$components:s,$libs:n,$apis:o},c=new Ne({mode:t,dsl:a.value,attrs:l}),u=e.defineComponent({name:a.value.name,__scopeId:a.value.id?`data-v-${a.value.id}`:void 0,props:{...pt(a.value.props??[],c)},setup(p){c.$props=p,c.props=p,a.value.id&&z(r.window||window,a.value.id,a.value.css||"",!0),c.state=ft(e,a.value.state??{},c);const m=dt(e,a.value.computed??{},c),d=ht(a.value.methods??{},c),h=mt(e,a.value.inject,c);for(const[g,C]of Object.entries(h||{}))h[g]=e.inject(g,C);const v=Le(a.value.dataSources||{},c),y={...h,...m,...d,...v};return c.setup(y,e),gt(e,a.value.watch??[],c),{vtj:c}},emits:ut(a.value.emits),expose:["vtj"],render(){if(!a.value.nodes)return null;const p=a.value.nodes||[];return p.length===1?T(p[0],c,e,i,p):p.map(m=>T(m,c,e,i,p))},...vt(a.value.lifeCycles??{},c)});return{renderer:e.markRaw(u),context:c}}function ut(r=[]){return r.map(e=>f.isString(e)?e:e.name)}function pt(r=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(o=>Se[o]):void 0;return r.map(s=>f.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:j(s.default)?e.__parseExpression(s.default):s.default}).reduce((s,n)=>(s[n.name]={type:t(n.type),required:n.required,default:n.default},s),{})}function ft(r,e,t){return r.reactive(Object.keys(e||{}).reduce((s,n)=>{let o=e[n];return j(o)?o=t.__parseExpression(o):$(o)&&(o=t.__parseFunction(o)),s[n]=o,s},{}))}function dt(r,e,t){return Object.entries(e??{}).reduce((s,[n,o])=>(s[n]=r.computed(t.__parseFunction(o)),s),{})}function ht(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}function mt(r,e=[],t){return e.reduce((s,n)=>{const{name:o,from:i}=n||{};n.default;const a=j(i)?t.__parseExpression(i)||o:i??o,l=j(n.default)?t.__parseExpression(n.default):n.default??null;return s[o]=r.inject(a,l),s},{})}function Le(r,e){return Object.keys(r).reduce((t,s)=>{const n=r[s];if(n.type==="mock")t[s]=Ue(n);else if(n.ref){const o=e.$apis[n.ref],i=$(n.transform)?n.transform.value?e.__parseFunction(n.transform):void 0:n.transform;t[s]=async(...a)=>{const l=await o.apply(e,a);return i?i(l):l}}return t},{})}function gt(r,e=[],t){e.forEach(s=>{r.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function vt(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>{const o=e.__parseFunction(n);return t[s]=async()=>{await f.delay(0),f.isFunction(o)&&o()},t},{})}const qe=new f.Queue;let X=[],I={};const Je=r=>r;async function le(r,e=window){const{urls:t=[],library:s}=r,n=t.filter(a=>N(a));if(n.length===0||!s)return null;const o=t.filter(a=>B(a));return o.length&&oe(o,e),await ie(n,s,e).catch(a=>(console.warn("loadScriptUrl error",n,s,a),null))}function K(r){const{getDsl:e,getDslByUrl:t,options:s}=r;return s.window&&(X.forEach(n=>{delete s.window[n]}),X=[]),(n,o,i=G)=>{if(!o||typeof o=="string")return n;if(o.type==="Schema"&&o.id)return i.defineAsyncComponent(async()=>{const a=I[o.id]||await qe.add(o.id,()=>e(o.id));return a&&(a.name=n,I[o.id]=a),a?J({...s,Vue:i,dsl:f.cloneDeep(a),mode:_.Runtime,loader:K(r)}).renderer:null});if(o.type==="UrlSchema"&&o.url)return i.defineAsyncComponent(async()=>{const a=I[o.url]||await t(o.url);return a&&(a.name=n,I[o.url]=a),a?J({...s,Vue:i,dsl:f.cloneDeep(a),mode:_.Runtime,loader:K(r)}).renderer:null});if(o.type==="Plugin"){let a=o.library?I[o.library]:null;return a||(o.library&&X.push(o.library),a=I[o.library||Symbol()]=i.defineAsyncComponent(async()=>{const l=await le(o,s.window);return l||(console.warn("getPlugin result is null",o),null)}),a)}return n}}function yt(){I={},qe.clearAllCache()}function T(r,e,t=G,s=Je,n=[],o=!1){if(!r||!r.name||r.invisible)return null;const i=t.getCurrentInstance()?.appContext,{id:a=null,directives:l=[]}=r,{vIf:c,vElseIf:u,vElse:p,vFor:m,vShow:d,vModels:h,vBind:v,vHtml:y,others:g}=Ke(l);if(!o&&(u||p))return null;if(c&&!St(c,e))return jt(r,e,t,s,n);const C=(S,L=0)=>{const M=S.$components,W=(()=>{if(r.name==="component")return wt(S,r.props?.is);if(r.name==="slot")return r.name;const b=s(r.name,r.from,t);if(f.isString(b))return Ie(b)||Te(b)?b:M[b]??i?.app?.component(b)??b;if(f.isObject(b)&&r.id){const ge=`Loader${r.id}_${L}`,ve=M[ge];return ve||(M[ge]=b)}return b})(),P=Et(a,r.props??{},S),We=$t(t,r.events??{},S);if(r.name==="slot")return bt(t,r,P,S,s);v&&Object.assign(P,S.__parseExpression(v.value)),d&&(P.style=Object.assign(P.style??{},Ct(d,S))),y&&Object.assign(P,Pt(y,S)),h.forEach(b=>{Object.assign(P,At(t,b,S))});const Ye=Mt(t,r.children??[],S,s,r),he=S?.__id?`data-v-${S.__id}`:void 0,Xe=he?{[he]:""}:{};let Y=t.createVNode(W,{key:`${a}_${L}`,...Xe,...P,...We},Ye);const me=i?_t(i,g,S):[];return me.length&&(Y=t.withDirectives(Y,me)),Y};return m?kt(m,C,e):C(e)}function _t(r,e,t){const s=r.app;return e.map(n=>{const o=typeof n.name=="string"?s.directive(n.name):t.__parseExpression(n.name);if(!o)return null;const i=[o];return n.value&&i.push(t.__parseExpression(n.value)),n.arg&&i.push(n.arg),n.modifiers&&i.push(n.modifiers),i}).filter(n=>!!n)}function Ke(r=[]){const e=r.find(u=>f.camelCase(u.name)==="vIf"),t=r.find(u=>f.camelCase(u.name)==="vElseIf"),s=r.find(u=>f.camelCase(u.name)==="vElse"),n=r.find(u=>f.camelCase(u.name)==="vFor"),o=r.find(u=>f.camelCase(u.name)==="vShow"),i=r.find(u=>f.camelCase(u.name)==="vBind"),a=r.find(u=>f.camelCase(u.name)==="vHtml"),l=r.filter(u=>f.camelCase(u.name)==="vModel"),c=r.filter(u=>!_e.includes(f.camelCase(u.name)));return{vIf:e,vElseIf:t,vElse:s,vFor:n,vShow:o,vModels:l,vBind:i,others:c,vHtml:a}}function St(r,e){return!!e.__parseExpression(r.value)}function wt(r,e){return e?j(e)?r.__parseExpression(e):e:"div"}function Et(r,e,t){const s=se(e,t);return s.ref=t.__ref(r,s.ref),s}function se(r,e){return j(r)?e.__parseExpression(r):$(r)?e.__parseFunction(r):Array.isArray(r)?r.map(t=>se(t,e)):typeof r=="object"?Object.keys(r||{}).reduce((t,s)=>{let n=r[s];return t[s]=se(n,e),t},{}):r}function $t(r,e,t){const s=["passive","capture","once"],n={capture:"Capture",once:"Once",passive:"OnceCapture"};return Object.keys(e||{}).reduce((o,i)=>{const a=e[i],l=ue(a.modifiers),c=l.find(m=>s.includes(m)),u="on"+f.upperFirst(i)+(c&&n[c]||""),p=t.__parseFunction(a.handler);return p&&(o[u]=r.withModifiers(p,l)),o},{})}function jt(r,e,t,s,n=[]){let o=n.findIndex(i=>i.id===r.id);for(let i=++o;i<n.length;i++){const{directives:a=[]}=n[i],{vElseIf:l,vElse:c}=Ke(a);if(l){if(e.__parseExpression(l.value))return T(n[i],e,t,s,n,!0);continue}if(c)return T(n[i],e,t,s,n,!0)}return null}function ue(r={},e=!1){const t=Object.keys(r);return e?t.map(s=>"."+s):t}function bt(r,e,t,s,n){const{children:o}=e,i=Rt(e,s),a=s.$slots?.[i.name];return a?a(t):o?f.isString(o)?r.createTextVNode(o):j(o)?r.createTextVNode(ne(s.__parseExpression(o))):Array.isArray(o)?o.map(l=>T(l,s,r,n,o)):null:null}function Rt(r,e){const{props:t}=r,s=t?.name||"default";return{name:j(s)?e.__parseExpression(s):s,params:[]}}function Ct(r,e){return e.__parseExpression(r.value)?{}:{display:"none"}}function Pt(r,e){return{innerHTML:e.__parseExpression(r.value)||""}}function At(r,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
12
12
|
${e.value.value} = v;
|
13
|
-
}`:"(v) => {}"},n=t.__parseFunction(s),o=ue(j(e.modifiers)?t.__parseExpression(e.modifiers):e.modifiers),i=j(e.arg)?t.__parseExpression(e.arg):e.arg||"modelValue";return{[i]:t.__parseExpression(e.value),[`onUpdate:${i}`]:o.length&&n?r.withModifiers(n,o):n}}function Mt(r,e,t,s,n){if(!e)return null;if(f.isString(e))return{default:()=>e};if(j(e))return{default:()=>ne(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const o=It(e),i=(a,l)=>!a||!n?{}:n?.id&&Object.keys(a).length?l?{[l]:a}:{[`scope_${n.id}`]:a}:l?{[l]:Object.create(null)}:{};return Object.entries(o).reduce((a,[l,{nodes:c,params:u,scope:p}])=>(a[l]=m=>{const h=u.length?f.pick(m??{},u):i(m,p);return c.map(d=>T(d,t.__clone(h),r,s,c))},a),{})}return null}function It(r){const e={};for(const t of r){const s=Tt(t.slot),n=s.name;e[n]?(e[n].nodes.push(t),e[n].params=e[n].params.concat(s.params),e[n].scope=s.scope||""):e[n]={nodes:[t],params:s.params,scope:s.scope||""}}return e}function Tt(r="default"){return f.isString(r)?{name:r,params:[],scope:""}:{params:[],scope:"",...r}}function Ft(r,e,t){const{value:s,iterator:n}=r,{item:o="item",index:i="index"}=n||{};let a=t.__parseExpression(s)||[];return Number.isInteger(a)&&(a=new Array(a).fill(!0).map((l,c)=>c+1)),Array.isArray(a)?a.map((l,c)=>e(t.__clone({[o]:l,[i]:c}),c)):(console.warn("[vForRender]:",`${s?.value} is not a Arrary`),[])}const Z=E.defineComponent({name:"VtjPageContainer",async setup(){const r=de(),e=ye.useRoute(),t=e.meta.__vtj__||e.params.id,s=t?r.getPage(t):r.getHomepage(),n=s?await r.getRenderComponent(s.id):null,o=E.ref(Symbol());if(s){Object.assign(e.meta,s.meta||{},{cache:s.cache});const{useTitle:i}=r?.adapter;i&&i(s.title||"VTJ")}return{provider:r,component:n,file:s,query:e.query,meta:e.meta,sid:o,route:e}},render(){const{component:r,query:e,sid:t}=this;return r?E.h(r,{...e,key:t}):E.h("div","页面不存在")},activated(){this.meta.cache===!1&&(this.sid=Symbol())}}),Ot=E.defineComponent({name:"VtjStartupContainer",render(){return E.h("div","page not found!")}});function U(r,e,t=[]){const s=[];for(const n of t){const{id:o,title:i,icon:a,children:l,hidden:c,layout:u}=n;if(u){const p=U(r,e,l||[]);s.push(...p)}else{const p={id:o,title:i,icon:a,hidden:c,url:`${r}/${e}/${o}`,children:l&&l.length?U(r,e,l):void 0};s.push(p)}}return s}function pe(r,e){if(!e)return r;let t=[];for(const s of r)if(s.children&&s.children.length){const n=pe(s.children,e);n.length&&(s.children=n,t.push(s))}else e.can(s.id.toString())&&t.push(s);return t}function kt(r){const{menuPathPrefix:e="",pageRouteName:t="page",disableMenusFilter:s=!1}=r||{},n=de(),o=ye.useRoute(),i=Oe(),a=E.ref(!1),l=E.ref(!1),c=n.project,u=(h,d)=>{a.value=!h?.mask,l.value=d?.pure??!!h?.pure};E.watchEffect(()=>{const{name:h,params:d,meta:v}=o;if(h===O){const y=n.getPage(d.id);u(y,v)}else if(h===x){const y=n.getHomepage();u(y,v)}else{const y=v.__vtj__;if(y){const g=n.getPage(y);u(g,v)}else a.value=!v.mask,l.value=!!v.pure}});const p=U(e,t,c?.pages),m=c?.config;return{disabled:a,logo:m?.logo,themeSwitchable:m?.themeSwitchable,title:m?.title||c?.description||c?.name||"VTJ App",menus:s?p:pe(p,i),pure:l}}function ee(r,e){const{id:t,title:s,meta:n}=r,{name:o="page",prefix:i="",component:a,routeMeta:l}=e;return{name:t,path:`${i}${o}/${t}`,component:a,meta:{title:s,...l,...n,__vtj__:t}}}function re(r){const{name:e="page",prefix:t="",pages:s=[],component:n,loader:o,routeMeta:i,homepage:a}=r,l=[];for(const c of s){const{id:u,title:p,dir:m,layout:h,children:d,meta:v}=c;if(m){const y=re({name:e,prefix:t,component:n,routeMeta:i,homepage:a,loader:o,pages:d||[]});l.push(...y)}else if(h){const y=re({name:e,prefix:t,component:n,routeMeta:i,homepage:a,loader:o,pages:d||[]}),g={name:`layout_${u}`,path:t,component:()=>o(u),meta:{title:p,...i,...v,__vtj__:u},children:y};l.push(g),l.push(ee(c,r))}else if(l.push(ee(c,r)),a===u){const y=ee(c,r);y.path="",y.name=`home_${u}`,l.push(y)}}return l}function Dt(r={},e){const{css:t,store:s,enhance:n}=r,{window:o,app:i,library:a={},adapter:l,mode:c}=e,{Pinia:u}=a;z(o,"global-css",t||""),u&&s&&Ht(s,i,u),Ut(i,l,r),!l.access&&r.access&&xt(r.access,i,c,l),Bt(i,r),n&&Nt(n,i)}function Ht(r,e,t){const s=t.createPinia();if(e.use(s),$(r)&&r.value){const n=R(r,{},!1,!1,!0),o=t.defineStore("$store",n(e)||{});e.config.globalProperties.$store=o()}}function xt(r,e,t,s){if($(r)&&r.value){const n=R(r,{},!1,!1,!0),{alert:o,request:i}=s,a=new V({alert:o,storagePrefix:"__VTJ_APP_",...n(e)}),l=e.config.globalProperties.$router;a.connect({mode:t,router:l,request:i}),e.use(a)}}function Ut(r,e,t){if(!e.request)return;const{axios:s,request:n,response:o}=t;if(s&&$(s)&&s.value){const i=R(s,{},!1,!1,!0);e.request.setConfig(i(r))}if(n&&$(n)&&n.value){const i=R(n,{},!1,!1,!0);e.request.useRequest(a=>i(a,r))}if(o&&$(o)&&o.value){const i=R(o,{},!1,!1,!0);e.request.useResponse(a=>i(a,r))}}function Bt(r,e){const{beforeEach:t,afterEach:s}=e,n=r.config.globalProperties.$router;if(t&&$(t)&&t.value){const o=R(t,{},!1,!1,!0);n&&n.beforeEach((i,a,l)=>o(i,a,l,r))}if(s&&$(s)&&s.value){const o=R(s,{},!1,!1,!0);n&&n.afterEach((i,a,l)=>o(i,a,l,r))}}function Nt(r,e){$(r)&&r.value&&R(r,{},!1,!1,!0)(e)}const fe=Symbol("Provider");var Ge=(r=>(r.Production="production",r.Development="development",r))(Ge||{});class ze extends A.Base{constructor(e){super(),this.options=e;const{service:t,mode:s=_.Raw,dependencies:n,materials:o,project:i={},adapter:a={},globals:l={},modules:c={},router:u=null,materialPath:p="./",nodeEnv:m="development"}=e;this.mode=s,this.modules=c,this.service=t,this.router=u,this.materialPath=p,this.nodeEnv=m,n&&(this.dependencies=n),o&&(this.materials=o),Object.assign(this.globals,l),Object.assign(this.adapter,a);const{access:h,request:d}=this.adapter;h&&h.connect({mode:s,router:u,request:d}),i&&s!==_.Design?this.load(i):this.project=i}mode;globals={};modules={};adapter={request:f.request,jsonp:f.jsonp};apis={};dependencies={};materials={};library={};service;project=null;components={};nodeEnv="development";router=null;materialPath="./";urlDslCaches={};createMock(e){return async(...t)=>{let s={};if(e)try{s=await e.apply(e,t)}catch(o){f.logger.warn("模拟数据模版异常",o)}return k()?.mock(s)}}async load(e){const{vtjDir:t=".vtj"}=this.options,s=this.modules[`${t}/projects/${e.id}.json`]||this.modules[`/src/${t}/projects/${e.id}.json`];if(this.project=s?await s():await this.service.init(e),!this.project)throw new Error("project is null");const{apis:n=[],meta:o=[]}=this.project,i=window;i&&(i.CKEDITOR_VERSION=void 0),this.mode===_.Raw?await this.loadDependencies(i):await this.loadAssets(i),this.initMock(i),this.apis=He(n,o,this.adapter),ce(i),xe(n,i),e.platform!=="uniapp"&&this.initRouter(),this.triggerReady()}initMock(e){const t=k(e);t&&t.setup({timeout:"50-500"})}async loadDependencies(e){const t=Object.entries(this.dependencies);for(const[s,n]of t)e[s]||(e[s]=this.library[s]=await n())}async loadAssets(e){const{dependencies:t=[]}=this.project,{dependencies:s,library:n,components:o,materialPath:i,nodeEnv:a}=this,{libraryExports:l,libraryMap:c,materials:u,materialExports:p,materialMapLibrary:m}=be(t,i,a==="development");for(const h of l){const d=s[h],v=e[h];if(v)n[h]=v;else if(d)e[h]=n[h]=await d();else{const y=c[h]||[];for(const g of y)B(g)&&await Ae(g,f.url.append(g,{v:F})),N(g)&&await f.loadScript(f.url.append(g,{v:F}));n[h]=e[h]}}if(a==="development"){for(const d of u)await f.loadScript(f.url.append(d,{v:F}));const h=this.materials||{};for(const d of p){const v=e[m[d]],y=A.BUILT_IN_COMPONENTS[d];if(y)v&&y.forEach(g=>{o[g]=v[g]});else{const g=h[d]?(await h[d]()).default:e[d];g&&v&&(g.components||[]).forEach(C=>{o[C.name]=Re(C,v)})}}}}initRouter(){const{router:e,project:t,options:s,adapter:n}=this;if(!e)return;const o=t?.platform==="uniapp"?"pages":"page",{routeAppendTo:i,pageRouteName:a=o,routeMeta:l}=s,c=i?"":"/",u={path:`${c}${a}/:id`,name:O,component:Z},p={path:c,name:x,component:t?.homepage?Z:n.startupComponent||Ot,meta:l};if(e.hasRoute(O)&&e.removeRoute(O),e.hasRoute(x)&&e.removeRoute(x),s.enableStaticRoute){const m=t?.pages||[];re({name:a,prefix:c,pages:m,component:Z,loader:this.getRenderComponent.bind(this),homepage:t?.homepage}).forEach(d=>{i?e.addRoute(i,d):e.addRoute(d)}),t?.homepage||(i?e.addRoute(i,p):e.addRoute(p))}else i?(e.addRoute(i,u),e.addRoute(i,p)):(e.addRoute(u),e.addRoute(p))}install(e){const t=e.config.globalProperties.installed||{};for(const[s,n]of Object.entries(this.library))!t[s]&&Me(n)&&(e.use(n),t[s]=!0);this.options.install&&e.use(this.options.install),this.adapter.access&&e.use(this.adapter.access),e.provide(fe,this),e.config.globalProperties.$provider=this,this.project?.platform!=="uniapp"&&this.initGlobals(this.project?.globals||{},{app:e,window,adapter:this.adapter,library:this.library,mode:this.mode}),this.options.enhance&&e.use(this.options.enhance,this),this.mode===_.Design&&(e.config.errorHandler=(s,n,o)=>{const i=n?.$options.name,a=typeof s=="string"?s:s?.message||s?.msg||"未知错误",l=`[ ${i} ] ${a} ${o}`;console.error("[VTJ Error]:",{err:s,instance:n,info:o},s?.stack),this.adapter.notify&&this.adapter.notify(l,"组件渲染错误","error")}),e.config.globalProperties.installed=t}getFile(e){const{blocks:t=[]}=this.project||{};return this.getPage(e)||t.find(s=>s.id===e)||null}getPage(e){const{pages:t=[]}=this.project||{},s=(n,o=[])=>{for(const i of o){if(i.id===n)return i;if(i.children&&i.children.length){const a=s(n,i.children);if(a)return a}}};return s(e,t)||null}getMenus(e="page",t=""){return U(t,e,this.project?.pages||[])}getHomepage(){const{homepage:e}=this.project||{};return e?this.getPage(e):null}async getDsl(e){const{vtjDir:t=".vtj"}=this.options,s=this.modules[`${t}/files/${e}.json`]||this.modules[`/src/${t}/files/${e}.json`];return s?await s():this.service.getFile(e,this.project||void 0).catch(()=>null)}async getDslByUrl(e){const t=this.urlDslCaches[e];return t||(this.adapter.request?this.urlDslCaches[e]=this.adapter.request.send({url:e,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(s=>s.data).catch(()=>null):null)}createDslRenderer(e,t={}){const{library:s,components:n,mode:o,apis:i}=this,a={mode:o,Vue:s.Vue,components:n,libs:s,apis:i,window,...t},l=K({getDsl:async c=>await this.getDsl(c)||null,getDslByUrl:async c=>await this.getDslByUrl(c)||null,options:a});return J({...a,dsl:e,loader:l})}async getRenderComponent(e,t){const s=this.getFile(e);if(!s)return f.logger.warn(`Can not find file: ${e}`),null;if(t&&t(s),this.mode===_.Raw){const{vtjRawDir:o=".vtj/vue"}=this.options,i=`${o}/${e}.vue`,a=this.modules[i]||this.modules[`/src/pages/${e}.vue`];return a?(await a())?.default:this.nodeEnv==="development"&&this.adapter.startupComponent||null}const n=await this.getDsl(s.id);return n?this.createDslRenderer(n).renderer:(f.logger.warn(`Can not find dsl: ${e}`),null)}defineUrlSchemaComponent(e,t){return E.defineAsyncComponent(async()=>{const s=await this.getDslByUrl(e);return s?(s.name=t||s.name,this.createDslRenderer(s).renderer):null})}definePluginComponent(e){return E.defineAsyncComponent(async()=>await le(e,window))}initGlobals(e,t){const s=Object.assign({adapter:this.adapter,window},t);Dt(e,s)}}function Lt(r){const e=new ze(r);return{provider:e,onReady:s=>e.ready(s)}}function de(r={}){const e=E.inject(fe,null);if(!e)throw new Error("Can not find provider");if(e.nodeEnv==="development"){const{id:t,version:s}=r;t&&s&&(async()=>{const n=await e.getDsl(t);n?.__VERSION__!==s&&e.adapter.notify&&e.adapter.notify(`[ ${n?.name} ] 组件源码版本与运行时版本不一致,请重新发布组件`,"版本不一致","warning")})()}return e}async function qt(r,e=""){const{name:t,urls:s=[]}=r||{},n=s.map(a=>e+a),{css:o,js:i}=Ce(n);if(o.length&&oe(o),i.length)return await ie(i,t).catch(()=>{})}const Ve={type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:r=>r.data?.code===0},Jt=(r,e="/__vtj__/api/:type.json")=>(t,s,n)=>r.send({url:e,method:"post",params:{type:t},query:n,data:{type:t,data:s},settings:Ve}),Kt=(r,e="/__vtj__/api/uploader.json")=>async(t,s)=>await r.send({url:e,method:"post",data:{files:t,projectId:s},settings:{...Ve,type:"data"}}).then(n=>n&&n[0]?n[0]:null).catch(()=>null);function Gt(r){return f.createRequest({settings:{type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:e=>e.data?.code===0,showError:e=>{r&&r(e||"未知错误")}}})}class Q{constructor(e=f.request){this.req=e,this.api=Jt(e),this.uploader=Kt(e)}api;pluginCaches={};uploader;async getExtension(){console.log("BaseService.getExtension")}async init(e){return console.log("BaseService.init",e),{}}async saveProject(e,t){return!!await this.api("saveProject",e,{type:t}).catch(()=>!1)}async saveMaterials(e,t){return console.log("BaseService.saveMaterials",e,t),!1}async saveFile(e){return console.log("BaseService.saveFile",e),!1}async getFile(e){return console.log("BaseService.getFile",e),{}}async removeFile(e){return console.log("BaseService.removeFile",e),!1}async saveHistory(e){return console.log("BaseService.saveHistory",e),!1}async removeHistory(e){return console.log("BaseService.removeHistory",e),!1}async getHistory(e){return console.log("BaseService.getHistory",e),{}}async getHistoryItem(e,t){return console.log("BaseService.getHistoryItem",e,t),{}}async saveHistoryItem(e,t){return console.log("BaseService.saveHistoryItem",e,t),!1}async removeHistoryItem(e,t){return console.log("BaseService.removeHistoryItem",e,t),!1}async publish(e){return!!await this.api("publish",e).catch(()=>!1)}async publishFile(e,t){return!!await this.api("publishFile",{project:e,file:t}).catch(()=>!1)}async genVueContent(e,t){return await this.api("genVueContent",{project:e,dsl:t}).catch(()=>"")}async parseVue(e,t){return await this.api("parseVue",{project:e,...t})}async createRawPage(e){return await this.api("createRawPage",e).catch(()=>"")}async removeRawPage(e){return await this.api("removeRawPage",e).catch(()=>"")}async uploadStaticFile(e,t){return await this.uploader(e,t).catch(()=>null)}async getStaticFiles(e){return await this.api("getStaticFiles",e).catch(()=>[])}async removeStaticFile(e,t){return await this.api("removeStaticFile",{name:e,projectId:t}).catch(()=>"")}async clearStaticFiles(e){return await this.api("clearStaticFiles",e).catch(()=>"")}async getPluginMaterial(e){const{urls:t=[]}=e,s=t.filter(o=>$e(o))[0];if(!s)return null;const n=this.pluginCaches[s];return n||(this.pluginCaches[s]=f.request.send({url:s,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(o=>o.data).catch(()=>null))}async genSource(e){return console.log("BaseService.genSource",e),""}}const w=new f.Storage({type:"local",expired:0,prefix:"__VTJ_"});class zt extends Q{init(e){const t=new A.ProjectModel(e),s=w.get(`project_${t.id}`),n=Object.assign(t.toDsl(),s||{});return w.save(`project_${t.id}`,n),Promise.resolve(n)}saveProject(e){const t=new A.ProjectModel(e);return w.save(`project_${t.id}`,t.toDsl()),Promise.resolve(!0)}saveMaterials(e,t){return w.save(`materials_${e.id}`,f.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return w.save(`file_${e.id}`,e),Promise.resolve(!0)}getFile(e){const t=w.get(`file_${e}`);return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return w.remove(`file_${e}`),Promise.resolve(!0)}saveHistory(e){return w.save(`history_${e.id}`,e),Promise.resolve(!0)}removeHistory(e){const t=w.get(`history_${e}`);if(t){const n=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,n),w.remove(`history_${e}`)}return Promise.resolve(!0)}getHistory(e){const t=w.get(`history_${e}`),s=new A.HistoryModel(t||{id:e});return Promise.resolve(s.toDsl())}getHistoryItem(e,t){const s=w.get(`history_${e}_${t}`);return Promise.resolve(s)}saveHistoryItem(e,t){return w.save(`history_${e}_${t.id}`,t),Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{w.remove(`history_${e}_${s}`)}),Promise.resolve(!0)}}class Qe extends Q{projects={};materials={};files={};histories={};historyItems={};init(e){const t=new A.ProjectModel(e),s=this.projects[t.id]||{},n=Object.assign(t.toDsl(),s);return this.projects[n.id]=n,Promise.resolve(n)}saveProject(e){const t=new A.ProjectModel(e);return this.projects[t.id]=t.toDsl(),Promise.resolve(!0)}saveMaterials(e,t){return e.id&&(this.materials[e.id]=f.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return this.files[e.id]=e,Promise.resolve(!0)}getFile(e){const t=this.files[e];return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return delete this.files[e],Promise.resolve(!0)}saveHistory(e){return this.histories[e.id]=e,Promise.resolve(!0)}removeHistory(e){const t=this.histories[e];if(t){const n=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,n),delete this.historyItems[e]}return Promise.resolve(!0)}getHistory(e){const t=this.histories[e],s=new A.HistoryModel(t||{id:e});return Promise.resolve(s)}getHistoryItem(e,t){const s=`${e}_${t}`,n=this.historyItems[s]||{};return Promise.resolve(n)}saveHistoryItem(e,t){const s=`${e}_${t.id}`;return this.historyItems[s]=t,Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{const n=`${e}_${s}`;delete this.historyItems[n]}),Promise.resolve(!0)}}let q=null;function Vt(){return q||(q=new Qe,q)}class Qt extends Q{getFileCaches={};async getExtension(){return await this.api("getExtension",{}).catch(()=>{})}async init(e){return await this.api("init",e).catch(()=>null)||{}}async saveProject(e,t){return!!await this.api("saveProject",e,{type:t}).catch(()=>!1)}async saveMaterials(e,t){return!!await this.api("saveMaterials",{project:e,materials:f.mapToObject(t)}).catch(()=>!1)}async saveFile(e){return!!await this.api("saveFile",e).catch(()=>!1)}async getFile(e){const t=this.getFileCaches[e];return t||(this.getFileCaches[e]=this.api("getFile",e).catch(()=>null)).finally(()=>{delete this.getFileCaches[e]})}async removeFile(e){return!!await this.api("removeFile",e).catch(()=>!1)}async saveHistory(e){return!!await this.api("saveHistory",e).catch(()=>!1)}async removeHistory(e){return!!await this.api("removeHistory",e).catch(()=>!1)}async getHistory(e){return await this.api("getHistory",e).catch(()=>null)||{}}async getHistoryItem(e,t){return await this.api("getHistoryItem",{fId:e,id:t}).catch(()=>null)||{}}async saveHistoryItem(e,t){return!!await this.api("saveHistoryItem",{fId:e,item:t}).catch(()=>!1)}async removeHistoryItem(e,t){return!!await this.api("removeHistoryItem",{fId:e,ids:t}).catch(()=>!1)}}exports.ACCESS=st;exports.ACCESS_KEY=ae;exports.Access=V;exports.BUILD_IN_TAGS=Ee;exports.BUILT_IN_DIRECTIVES=_e;exports.BaseService=Q;exports.CONTEXT_HOST=te;exports.Context=Ne;exports.ContextMode=_;exports.DATA_TYPES=Se;exports.HOMEPAGE_ROUTE_NAME=x;exports.HTML_TAGS=we;exports.JSCodeToString=it;exports.LIFE_CYCLES_LIST=et;exports.LocalService=Qt;exports.MemoryService=Qe;exports.NodeEnv=Ge;exports.PAGE_ROUTE_NAME=O;exports.Provider=ze;exports.REMOTE=tt;exports.StorageService=zt;exports.VTJ_RENDERER_VERSION=F;exports.adoptedStyleSheets=z;exports.clearLoaderCache=yt;exports.compileScopedCSS=Pe;exports.createAccess=lt;exports.createAdapter=ct;exports.createAssetScripts=rt;exports.createAssetsCss=nt;exports.createDataSources=Le;exports.createLoader=K;exports.createMemoryService=Vt;exports.createMenus=U;exports.createMetaApi=De;exports.createMock=Ue;exports.createProvider=Lt;exports.createRenderer=J;exports.createSchemaApi=ke;exports.createSchemaApis=He;exports.createServiceRequest=Gt;exports.defaultLoader=Je;exports.fillBasePath=H;exports.getMock=k;exports.getModifiers=ue;exports.getPlugin=le;exports.getRawComponent=Re;exports.isBuiltInTag=Ie;exports.isCSSUrl=B;exports.isJSCode=Fe;exports.isJSExpression=j;exports.isJSFunction=$;exports.isJSON=$e;exports.isJSUrl=N;exports.isNativeTag=Te;exports.isVuePlugin=Me;exports.loadCss=Ae;exports.loadCssUrl=oe;exports.loadEnhance=qt;exports.loadScriptUrl=ie;exports.menusFilter=pe;exports.mockApi=Be;exports.mockApis=xe;exports.mockCleanup=ce;exports.nodeRender=T;exports.parseDeps=be;exports.parseExpression=D;exports.parseFunction=R;exports.parseUrls=Ce;exports.providerKey=fe;exports.removeProdFlag=je;exports.setupPageSetting=ot;exports.toString=ne;exports.useAccess=Oe;exports.useMask=kt;exports.useProvider=de;
|
13
|
+
}`:"(v) => {}"},n=t.__parseFunction(s),o=ue(j(e.modifiers)?t.__parseExpression(e.modifiers):e.modifiers),i=j(e.arg)?t.__parseExpression(e.arg):e.arg||"modelValue";return{[i]:t.__parseExpression(e.value),[`onUpdate:${i}`]:o.length&&n?r.withModifiers(n,o):n}}function Mt(r,e,t,s,n){if(!e)return null;if(f.isString(e))return{default:()=>e};if(j(e))return{default:()=>ne(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const o=It(e),i=(a,l)=>!a||!n?{}:n?.id&&Object.keys(a).length?l?{[l]:a}:{[`scope_${n.id}`]:a}:l?{[l]:Object.create(null)}:{};return Object.entries(o).reduce((a,[l,{nodes:c,params:u,scope:p}])=>(a[l]=m=>{const d=u.length?f.pick(m??{},u):i(m,p);return c.map(h=>T(h,t.__clone(d),r,s,c))},a),{})}return null}function It(r){const e={};for(const t of r){const s=Tt(t.slot),n=s.name;e[n]?(e[n].nodes.push(t),e[n].params=e[n].params.concat(s.params),e[n].scope=s.scope||""):e[n]={nodes:[t],params:s.params,scope:s.scope||""}}return e}function Tt(r="default"){return f.isString(r)?{name:r,params:[],scope:""}:{params:[],scope:"",...r}}function kt(r,e,t){const{value:s,iterator:n}=r,{item:o="item",index:i="index"}=n||{};let a=t.__parseExpression(s)||[];return Number.isInteger(a)&&(a=new Array(a).fill(!0).map((l,c)=>c+1)),Array.isArray(a)?a.map((l,c)=>e(t.__clone({[o]:l,[i]:c}),c)):(console.warn("[vForRender]:",`${s?.value} is not a Arrary`),[])}const Z=E.defineComponent({name:"VtjPageContainer",async setup(){const r=de(),e=ye.useRoute(),t=e.meta.__vtj__||e.params.id,s=t?r.getPage(t):r.getHomepage(),n=s?await r.getRenderComponent(s.id):null,o=E.ref(Symbol());if(s){Object.assign(e.meta,s.meta||{},{cache:s.cache});const{useTitle:i}=r?.adapter;i&&i(s.title||"VTJ")}return{provider:r,component:n,file:s,query:e.query,meta:e.meta,sid:o,route:e}},render(){const{component:r,query:e,sid:t}=this;return r?E.h(r,{...e,key:t}):E.h("div","页面不存在")},activated(){this.meta.cache===!1&&(this.sid=Symbol())}}),Ft=E.defineComponent({name:"VtjStartupContainer",render(){return E.h("div","page not found!")}});function U(r,e,t=[]){const s=[];for(const n of t){const{id:o,title:i,icon:a,children:l,hidden:c,layout:u}=n;if(u){const p=U(r,e,l||[]);s.push(...p)}else{const p={id:o,title:i,icon:a,hidden:c,url:`${r}/${e}/${o}`,children:l&&l.length?U(r,e,l):void 0};s.push(p)}}return s}function pe(r,e){if(!e)return r;let t=[];for(const s of r)if(s.children&&s.children.length){const n=pe(s.children,e);n.length&&(s.children=n,t.push(s))}else e.can(s.id.toString())&&t.push(s);return t}function Ot(r){const{menuPathPrefix:e="",pageRouteName:t="page",disableMenusFilter:s=!1}=r||{},n=de(),o=ye.useRoute(),i=Fe(),a=E.ref(!1),l=E.ref(!1),c=n.project,u=(d,h)=>{a.value=!d?.mask,l.value=h?.pure??!!d?.pure};E.watchEffect(()=>{const{name:d,params:h,meta:v}=o;if(d===F){const y=n.getPage(h.id);u(y,v)}else if(d===x){const y=n.getHomepage();u(y,v)}else{const y=v.__vtj__;if(y){const g=n.getPage(y);u(g,v)}else a.value=!v.mask,l.value=!!v.pure}});const p=U(e,t,c?.pages),m=c?.config;return{disabled:a,logo:m?.logo,themeSwitchable:m?.themeSwitchable,title:m?.title||c?.description||c?.name||"VTJ App",menus:s?p:pe(p,i),pure:l}}function ee(r,e){const{id:t,title:s,meta:n}=r,{name:o="page",prefix:i="",component:a,routeMeta:l}=e;return{name:t,path:`${i}${o}/${t}`,component:a,meta:{title:s,...l,...n,__vtj__:t}}}function re(r){const{name:e="page",prefix:t="",pages:s=[],component:n,loader:o,routeMeta:i,homepage:a}=r,l=[];for(const c of s){const{id:u,title:p,dir:m,layout:d,children:h,meta:v}=c;if(m){const y=re({name:e,prefix:t,component:n,routeMeta:i,homepage:a,loader:o,pages:h||[]});l.push(...y)}else if(d){const y=re({name:e,prefix:t,component:n,routeMeta:i,homepage:a,loader:o,pages:h||[]}),g={name:`layout_${u}`,path:t,component:()=>o(u),meta:{title:p,...i,...v,__vtj__:u},children:y};l.push(g),l.push(ee(c,r))}else if(l.push(ee(c,r)),a===u){const y=ee(c,r);y.path="",y.name=`home_${u}`,l.push(y)}}return l}function Dt(r={},e){const{css:t,store:s,enhance:n}=r,{window:o,app:i,library:a={},adapter:l,mode:c}=e,{Pinia:u}=a;z(o,"global-css",t||""),u&&s&&Ht(s,i,u),Ut(i,l,r),!l.access&&r.access&&xt(r.access,i,c,l),Bt(i,r),n&&Nt(n,i)}function Ht(r,e,t){const s=t.createPinia();if(e.use(s),$(r)&&r.value){const n=R(r,{},!1,!1,!0),o=t.defineStore("$store",n(e)||{});e.config.globalProperties.$store=o()}}function xt(r,e,t,s){if($(r)&&r.value){const n=R(r,{},!1,!1,!0),{alert:o,request:i}=s,a=new V({alert:o,storagePrefix:"__VTJ_APP_",...n(e)}),l=e.config.globalProperties.$router;a.connect({mode:t,router:l,request:i}),e.use(a)}}function Ut(r,e,t){if(!e.request)return;const{axios:s,request:n,response:o}=t;if(s&&$(s)&&s.value){const i=R(s,{},!1,!1,!0);e.request.setConfig(i(r))}if(n&&$(n)&&n.value){const i=R(n,{},!1,!1,!0);e.request.useRequest(a=>i(a,r))}if(o&&$(o)&&o.value){const i=R(o,{},!1,!1,!0);e.request.useResponse(a=>i(a,r))}}function Bt(r,e){const{beforeEach:t,afterEach:s}=e,n=r.config.globalProperties.$router;if(t&&$(t)&&t.value){const o=R(t,{},!1,!1,!0);n&&n.beforeEach((i,a,l)=>o(i,a,l,r))}if(s&&$(s)&&s.value){const o=R(s,{},!1,!1,!0);n&&n.afterEach((i,a,l)=>o(i,a,l,r))}}function Nt(r,e){$(r)&&r.value&&R(r,{},!1,!1,!0)(e)}const fe=Symbol("Provider");var Ge=(r=>(r.Production="production",r.Development="development",r))(Ge||{});class ze extends A.Base{constructor(e){super(),this.options=e;const{service:t,mode:s=_.Raw,dependencies:n,materials:o,project:i={},adapter:a={},globals:l={},modules:c={},router:u=null,materialPath:p="./",nodeEnv:m="development"}=e;this.mode=s,this.modules=c,this.service=t,this.router=u,this.materialPath=p,this.nodeEnv=m,n&&(this.dependencies=n),o&&(this.materials=o),Object.assign(this.globals,l),Object.assign(this.adapter,a);const{access:d,request:h}=this.adapter;d&&d.connect({mode:s,router:u,request:h}),i&&s!==_.Design?this.load(i):this.project=i}mode;globals={};modules={};adapter={request:f.request,jsonp:f.jsonp};apis={};dependencies={};materials={};library={};service;project=null;components={};nodeEnv="development";router=null;materialPath="./";urlDslCaches={};createMock(e){return async(...t)=>{let s={};if(e)try{s=await e.apply(e,t)}catch(o){f.logger.warn("模拟数据模版异常",o)}return O()?.mock(s)}}async load(e){const{vtjDir:t=".vtj"}=this.options,s=this.modules[`${t}/projects/${e.id}.json`]||this.modules[`/src/${t}/projects/${e.id}.json`];if(this.project=s?await s():await this.service.init(e),!this.project)throw new Error("project is null");const{apis:n=[],meta:o=[]}=this.project,i=window;i&&(i.CKEDITOR_VERSION=void 0),this.mode===_.Raw?await this.loadDependencies(i):await this.loadAssets(i),this.initMock(i),this.apis=He(n,o,this.adapter),ce(i),xe(n,i),e.platform!=="uniapp"&&this.initRouter(),this.triggerReady()}initMock(e){const t=O(e);t&&t.setup({timeout:"50-500"})}async loadDependencies(e){const t=Object.entries(this.dependencies);for(const[s,n]of t)e[s]||(e[s]=this.library[s]=await n())}async loadAssets(e){const{dependencies:t=[]}=this.project,{dependencies:s,library:n,components:o,materialPath:i,nodeEnv:a}=this,{libraryExports:l,libraryMap:c,materials:u,materialExports:p,materialMapLibrary:m}=be(t,i,a==="development");for(const d of l){const h=s[d],v=e[d];if(v)n[d]=v;else if(h)e[d]=n[d]=await h();else{const y=c[d]||[];for(const g of y)B(g)&&await Ae(g,f.url.append(g,{v:k})),N(g)&&await f.loadScript(f.url.append(g,{v:k}));n[d]=e[d]}}if(a==="development"){for(const h of u)await f.loadScript(f.url.append(h,{v:k}));const d=this.materials||{};for(const h of p){const v=e[m[h]],y=A.BUILT_IN_COMPONENTS[h];if(y)v&&y.forEach(g=>{o[g]=v[g]});else{const g=d[h]?(await d[h]()).default:e[h];g&&v&&(g.components||[]).forEach(C=>{o[C.name]=Re(C,v)})}}}}initRouter(){const{router:e,project:t,options:s,adapter:n}=this;if(!e)return;const o=t?.platform==="uniapp"?"pages":"page",{routeAppendTo:i,pageRouteName:a=o,routeMeta:l}=s,c=i?"":"/",u={path:`${c}${a}/:id`,name:F,component:Z},p={path:c,name:x,component:t?.homepage?Z:n.startupComponent||Ft,meta:l};if(e.hasRoute(F)&&e.removeRoute(F),e.hasRoute(x)&&e.removeRoute(x),s.enableStaticRoute){const m=t?.pages||[];re({name:a,prefix:c,pages:m,component:Z,loader:this.getRenderComponent.bind(this),homepage:t?.homepage}).forEach(h=>{i?e.addRoute(i,h):e.addRoute(h)}),t?.homepage||(i?e.addRoute(i,p):e.addRoute(p))}else i?(e.addRoute(i,u),e.addRoute(i,p)):(e.addRoute(u),e.addRoute(p))}install(e){const t=e.config.globalProperties.installed||{};for(const[s,n]of Object.entries(this.library))!t[s]&&Me(n)&&(e.use(n),t[s]=!0);this.options.install&&e.use(this.options.install),this.adapter.access&&e.use(this.adapter.access),e.provide(fe,this),e.config.globalProperties.$provider=this,this.project?.platform!=="uniapp"&&this.initGlobals(this.project?.globals||{},{app:e,window,adapter:this.adapter,library:this.library,mode:this.mode}),this.options.enhance&&e.use(this.options.enhance,this),this.mode===_.Design&&(e.config.errorHandler=(s,n,o)=>{const i=n?.$options.name,a=typeof s=="string"?s:s?.message||s?.msg||"未知错误",l=`[ ${i} ] ${a} ${o}`;console.error("[VTJ Error]:",{err:s,instance:n,info:o},s?.stack),this.adapter.notify&&this.adapter.notify(l,"组件渲染错误","error")}),e.config.globalProperties.installed=t}getFile(e){const{blocks:t=[]}=this.project||{};return this.getPage(e)||t.find(s=>s.id===e)||null}getPage(e){const{pages:t=[]}=this.project||{},s=(n,o=[])=>{for(const i of o){if(i.id===n)return i;if(i.children&&i.children.length){const a=s(n,i.children);if(a)return a}}};return s(e,t)||null}getMenus(e="page",t=""){return U(t,e,this.project?.pages||[])}getHomepage(){const{homepage:e}=this.project||{};return e?this.getPage(e):null}async getDsl(e){const{vtjDir:t=".vtj"}=this.options,s=this.modules[`${t}/files/${e}.json`]||this.modules[`/src/${t}/files/${e}.json`];return s?await s():this.service.getFile(e,this.project||void 0).catch(()=>null)}async getDslByUrl(e){const t=this.urlDslCaches[e];return t||(this.adapter.request?this.urlDslCaches[e]=this.adapter.request.send({url:e,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(s=>s.data).catch(()=>null):null)}createDslRenderer(e,t={}){const{library:s,components:n,mode:o,apis:i}=this,a={mode:o,Vue:s.Vue,components:n,libs:s,apis:i,window,...t},l=K({getDsl:async c=>await this.getDsl(c)||null,getDslByUrl:async c=>await this.getDslByUrl(c)||null,options:a});return J({...a,dsl:e,loader:l})}async getRenderComponent(e,t){const s=this.getFile(e);if(!s)return f.logger.warn(`Can not find file: ${e}`),null;if(t&&t(s),this.mode===_.Raw){const{vtjRawDir:o=".vtj/vue"}=this.options,i=`${o}/${e}.vue`,a=this.modules[i]||this.modules[`/src/pages/${e}.vue`];return a?(await a())?.default:this.nodeEnv==="development"&&this.adapter.startupComponent||null}const n=await this.getDsl(s.id);return n?this.createDslRenderer(n).renderer:(f.logger.warn(`Can not find dsl: ${e}`),null)}defineUrlSchemaComponent(e,t){return E.defineAsyncComponent(async()=>{const s=await this.getDslByUrl(e);return s?(s.name=t||s.name,this.createDslRenderer(s).renderer):null})}definePluginComponent(e){return E.defineAsyncComponent(async()=>await le(e,window))}initGlobals(e,t){const s=Object.assign({adapter:this.adapter,window},t);Dt(e,s)}}function Lt(r){const e=new ze(r);return{provider:e,onReady:s=>e.ready(s)}}function de(r={}){const e=E.inject(fe,null);if(!e)throw new Error("Can not find provider");if(e.nodeEnv==="development"){const{id:t,version:s}=r;t&&s&&(async()=>{const n=await e.getDsl(t);n?.__VERSION__!==s&&e.adapter.notify&&e.adapter.notify(`[ ${n?.name} ] 组件源码版本与运行时版本不一致,请重新发布组件`,"版本不一致","warning")})()}return e}async function qt(r,e=""){const{name:t,urls:s=[]}=r||{},n=s.map(a=>e+a),{css:o,js:i}=Ce(n);if(o.length&&oe(o),i.length)return await ie(i,t).catch(()=>{})}const Ve={type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:r=>r.data?.code===0},Jt=(r,e="/__vtj__/api/:type.json")=>(t,s,n)=>r.send({url:e,method:"post",params:{type:t},query:n,data:{type:t,data:s},settings:Ve}),Kt=(r,e="/__vtj__/api/uploader.json")=>async(t,s)=>await r.send({url:e,method:"post",data:{files:t,projectId:s},settings:{...Ve,type:"data"}}).then(n=>n&&n[0]?n[0]:null).catch(()=>null);function Gt(r){return f.createRequest({settings:{type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:e=>e.data?.code===0,showError:e=>{r&&r(e||"未知错误")}}})}class Q{constructor(e=f.request){this.req=e,this.api=Jt(e),this.uploader=Kt(e)}api;pluginCaches={};uploader;async getExtension(){console.log("BaseService.getExtension")}async init(e){return console.log("BaseService.init",e),{}}async saveProject(e,t){return!!await this.api("saveProject",e,{type:t}).catch(()=>!1)}async saveMaterials(e,t){return console.log("BaseService.saveMaterials",e,t),!1}async saveFile(e){return console.log("BaseService.saveFile",e),!1}async getFile(e){return console.log("BaseService.getFile",e),{}}async removeFile(e){return console.log("BaseService.removeFile",e),!1}async saveHistory(e){return console.log("BaseService.saveHistory",e),!1}async removeHistory(e){return console.log("BaseService.removeHistory",e),!1}async getHistory(e){return console.log("BaseService.getHistory",e),{}}async getHistoryItem(e,t){return console.log("BaseService.getHistoryItem",e,t),{}}async saveHistoryItem(e,t){return console.log("BaseService.saveHistoryItem",e,t),!1}async removeHistoryItem(e,t){return console.log("BaseService.removeHistoryItem",e,t),!1}async publish(e){return!!await this.api("publish",e).catch(()=>!1)}async publishFile(e,t){return!!await this.api("publishFile",{project:e,file:t}).catch(()=>!1)}async genVueContent(e,t){return await this.api("genVueContent",{project:e,dsl:t}).catch(()=>"")}async parseVue(e,t){return await this.api("parseVue",{project:e,...t})}async createRawPage(e){return await this.api("createRawPage",e).catch(()=>"")}async removeRawPage(e){return await this.api("removeRawPage",e).catch(()=>"")}async uploadStaticFile(e,t){return await this.uploader(e,t).catch(()=>null)}async getStaticFiles(e){return await this.api("getStaticFiles",e).catch(()=>[])}async removeStaticFile(e,t){return await this.api("removeStaticFile",{name:e,projectId:t}).catch(()=>"")}async clearStaticFiles(e){return await this.api("clearStaticFiles",e).catch(()=>"")}async getPluginMaterial(e){const{urls:t=[]}=e,s=t.filter(o=>$e(o))[0];if(!s)return null;const n=this.pluginCaches[s];return n||(this.pluginCaches[s]=f.request.send({url:s,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(o=>o.data).catch(()=>null))}async genSource(e){return console.log("BaseService.genSource",e),""}}const w=new f.Storage({type:"local",expired:0,prefix:"__VTJ_"});class zt extends Q{init(e){const t=new A.ProjectModel(e),s=w.get(`project_${t.id}`),n=Object.assign(t.toDsl(),s||{});return w.save(`project_${t.id}`,n),Promise.resolve(n)}saveProject(e){const t=new A.ProjectModel(e);return w.save(`project_${t.id}`,t.toDsl()),Promise.resolve(!0)}saveMaterials(e,t){return w.save(`materials_${e.id}`,f.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return w.save(`file_${e.id}`,e),Promise.resolve(!0)}getFile(e){const t=w.get(`file_${e}`);return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return w.remove(`file_${e}`),Promise.resolve(!0)}saveHistory(e){return w.save(`history_${e.id}`,e),Promise.resolve(!0)}removeHistory(e){const t=w.get(`history_${e}`);if(t){const n=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,n),w.remove(`history_${e}`)}return Promise.resolve(!0)}getHistory(e){const t=w.get(`history_${e}`),s=new A.HistoryModel(t||{id:e});return Promise.resolve(s.toDsl())}getHistoryItem(e,t){const s=w.get(`history_${e}_${t}`);return Promise.resolve(s)}saveHistoryItem(e,t){return w.save(`history_${e}_${t.id}`,t),Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{w.remove(`history_${e}_${s}`)}),Promise.resolve(!0)}}class Qe extends Q{projects={};materials={};files={};histories={};historyItems={};init(e){const t=new A.ProjectModel(e),s=this.projects[t.id]||{},n=Object.assign(t.toDsl(),s);return this.projects[n.id]=n,Promise.resolve(n)}saveProject(e){const t=new A.ProjectModel(e);return this.projects[t.id]=t.toDsl(),Promise.resolve(!0)}saveMaterials(e,t){return e.id&&(this.materials[e.id]=f.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return this.files[e.id]=e,Promise.resolve(!0)}getFile(e){const t=this.files[e];return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return delete this.files[e],Promise.resolve(!0)}saveHistory(e){return this.histories[e.id]=e,Promise.resolve(!0)}removeHistory(e){const t=this.histories[e];if(t){const n=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,n),delete this.historyItems[e]}return Promise.resolve(!0)}getHistory(e){const t=this.histories[e],s=new A.HistoryModel(t||{id:e});return Promise.resolve(s)}getHistoryItem(e,t){const s=`${e}_${t}`,n=this.historyItems[s]||{};return Promise.resolve(n)}saveHistoryItem(e,t){const s=`${e}_${t.id}`;return this.historyItems[s]=t,Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{const n=`${e}_${s}`;delete this.historyItems[n]}),Promise.resolve(!0)}}let q=null;function Vt(){return q||(q=new Qe,q)}class Qt extends Q{getFileCaches={};async getExtension(){return await this.api("getExtension",{}).catch(()=>{})}async init(e){return await this.api("init",e).catch(()=>null)||{}}async saveProject(e,t){return!!await this.api("saveProject",e,{type:t}).catch(()=>!1)}async saveMaterials(e,t){return!!await this.api("saveMaterials",{project:e,materials:f.mapToObject(t)}).catch(()=>!1)}async saveFile(e){return!!await this.api("saveFile",e).catch(()=>!1)}async getFile(e){const t=this.getFileCaches[e];return t||(this.getFileCaches[e]=this.api("getFile",e).catch(()=>null)).finally(()=>{delete this.getFileCaches[e]})}async removeFile(e){return!!await this.api("removeFile",e).catch(()=>!1)}async saveHistory(e){return!!await this.api("saveHistory",e).catch(()=>!1)}async removeHistory(e){return!!await this.api("removeHistory",e).catch(()=>!1)}async getHistory(e){return await this.api("getHistory",e).catch(()=>null)||{}}async getHistoryItem(e,t){return await this.api("getHistoryItem",{fId:e,id:t}).catch(()=>null)||{}}async saveHistoryItem(e,t){return!!await this.api("saveHistoryItem",{fId:e,item:t}).catch(()=>!1)}async removeHistoryItem(e,t){return!!await this.api("removeHistoryItem",{fId:e,ids:t}).catch(()=>!1)}}exports.ACCESS=st;exports.ACCESS_KEY=ae;exports.Access=V;exports.BUILD_IN_TAGS=Ee;exports.BUILT_IN_DIRECTIVES=_e;exports.BaseService=Q;exports.CONTEXT_HOST=te;exports.Context=Ne;exports.ContextMode=_;exports.DATA_TYPES=Se;exports.HOMEPAGE_ROUTE_NAME=x;exports.HTML_TAGS=we;exports.JSCodeToString=it;exports.LIFE_CYCLES_LIST=et;exports.LocalService=Qt;exports.MemoryService=Qe;exports.NodeEnv=Ge;exports.PAGE_ROUTE_NAME=F;exports.Provider=ze;exports.REMOTE=tt;exports.StorageService=zt;exports.VTJ_RENDERER_VERSION=k;exports.adoptedStyleSheets=z;exports.clearLoaderCache=yt;exports.compileScopedCSS=Pe;exports.createAccess=lt;exports.createAdapter=ct;exports.createAssetScripts=rt;exports.createAssetsCss=nt;exports.createDataSources=Le;exports.createLoader=K;exports.createMemoryService=Vt;exports.createMenus=U;exports.createMetaApi=De;exports.createMock=Ue;exports.createProvider=Lt;exports.createRenderer=J;exports.createSchemaApi=Oe;exports.createSchemaApis=He;exports.createServiceRequest=Gt;exports.defaultLoader=Je;exports.fillBasePath=H;exports.getMock=O;exports.getModifiers=ue;exports.getPlugin=le;exports.getRawComponent=Re;exports.isBuiltInTag=Ie;exports.isCSSUrl=B;exports.isJSCode=ke;exports.isJSExpression=j;exports.isJSFunction=$;exports.isJSON=$e;exports.isJSUrl=N;exports.isNativeTag=Te;exports.isVuePlugin=Me;exports.loadCss=Ae;exports.loadCssUrl=oe;exports.loadEnhance=qt;exports.loadScriptUrl=ie;exports.menusFilter=pe;exports.mockApi=Be;exports.mockApis=xe;exports.mockCleanup=ce;exports.nodeRender=T;exports.parseDeps=be;exports.parseExpression=D;exports.parseFunction=R;exports.parseUrls=Ce;exports.providerKey=fe;exports.removeProdFlag=je;exports.setupPageSetting=ot;exports.toString=ne;exports.useAccess=Fe;exports.useMask=Ot;exports.useProvider=de;
|
package/dist/index.mjs
CHANGED
@@ -7,10 +7,10 @@ import { useRoute as Ae } from "vue-router";
|
|
7
7
|
* Copyright (c) 2025, VTJ.PRO All rights reserved.
|
8
8
|
* @name @vtj/renderer
|
9
9
|
* @author CHC chenhuachun1549@dingtalk.com
|
10
|
-
* @version 0.13.
|
10
|
+
* @version 0.13.11
|
11
11
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
12
12
|
*/
|
13
|
-
const O = "0.13.
|
13
|
+
const O = "0.13.11";
|
14
14
|
var _ = /* @__PURE__ */ ((n) => (n.Runtime = "Runtime", n.Design = "Design", n.Raw = "Raw", n.VNode = "VNode", n))(_ || {});
|
15
15
|
const je = [
|
16
16
|
"$el",
|
@@ -167,10 +167,10 @@ function ut(n, e = !1) {
|
|
167
167
|
function ft(n, e, t = !1) {
|
168
168
|
const s = n.filter((h) => !!h.enabled), r = [], o = [], i = [], a = [], l = {}, c = {}, u = [], f = {};
|
169
169
|
return s.forEach(
|
170
|
-
({ urls: h, assetsUrl:
|
170
|
+
({ urls: h, assetsUrl: p, library: d, assetsLibrary: g, localeLibrary: v }) => {
|
171
171
|
h?.forEach((m) => {
|
172
172
|
V(m) && r.push(ut(m, t)), G(m) && o.push(m);
|
173
|
-
}),
|
173
|
+
}), d && (a.push(d), l[d] = B(h || [], e), v && (c[d] = v)), p && i.push(p), g && u.push(g), d && g && (f[g] = d);
|
174
174
|
}
|
175
175
|
), {
|
176
176
|
scripts: B(r, e),
|
@@ -239,19 +239,19 @@ function ht(n, e) {
|
|
239
239
|
for (; f < c.length && c[f] !== "{"; )
|
240
240
|
f++;
|
241
241
|
if (f >= c.length) break;
|
242
|
-
const
|
243
|
-
if (!
|
242
|
+
const p = c.substring(h, f).trim();
|
243
|
+
if (!p) {
|
244
244
|
f++;
|
245
245
|
continue;
|
246
246
|
}
|
247
|
-
const
|
247
|
+
const d = f + 1;
|
248
248
|
let g = 1;
|
249
249
|
for (f++; f < c.length && g > 0; )
|
250
250
|
c[f] === "{" ? g++ : c[f] === "}" && g--, f++;
|
251
|
-
const v = c.substring(
|
251
|
+
const v = c.substring(d, f - 1);
|
252
252
|
u.push({
|
253
253
|
type: "rule",
|
254
|
-
selector:
|
254
|
+
selector: p,
|
255
255
|
content: v.trim()
|
256
256
|
});
|
257
257
|
}
|
@@ -260,16 +260,16 @@ function ht(n, e) {
|
|
260
260
|
const u = c.trim();
|
261
261
|
return /^(from|to|\d+(\.\d+)?%)$/.test(u);
|
262
262
|
}, r = (c) => c.replace(/::v-deep\(/g, ":deep(").replace(/::v-deep\s+/g, ":deep(").replace(/\/deep\//g, " ").replace(/>>>/g, " ").replace(/(.*?):deep\(([^)]+)\)/g, (u, f, h) => {
|
263
|
-
const
|
264
|
-
return
|
263
|
+
const p = f.trim(), d = h.trim();
|
264
|
+
return p ? `${p}[${e}] ${d}` : d;
|
265
265
|
}), o = (c) => {
|
266
266
|
const u = c.trim();
|
267
267
|
if (!u || u.includes(`[${e}]`) || /^(:root|:host|html|body)(\s|$|:|\.|\#|\[)/.test(u) || s(u))
|
268
268
|
return u;
|
269
269
|
const f = u.match(/^(.+?)((?:::?[\w-]+(?:\([^)]*\))?)*)\s*$/);
|
270
270
|
if (f) {
|
271
|
-
const [, h,
|
272
|
-
return
|
271
|
+
const [, h, p = ""] = f, d = h.trim();
|
272
|
+
return d ? `${d}[${e}]${p}` : u;
|
273
273
|
}
|
274
274
|
return `${u}[${e}]`;
|
275
275
|
}, i = (c) => r(c).split(",").map((f) => o(f)).filter((f) => f.trim()).join(", "), a = (c) => c.map((u) => {
|
@@ -280,8 +280,8 @@ function ht(n, e) {
|
|
280
280
|
return u.content;
|
281
281
|
case "at-rule":
|
282
282
|
try {
|
283
|
-
const h = t(u.inner),
|
284
|
-
return `${u.rule} { ${
|
283
|
+
const h = t(u.inner), p = a(h);
|
284
|
+
return `${u.rule} { ${p} }`;
|
285
285
|
} catch {
|
286
286
|
return u.content;
|
287
287
|
}
|
@@ -690,7 +690,12 @@ function Pt(n, e) {
|
|
690
690
|
const r = se(t) ? new URL(t).pathname : t, o = We(`(.*)${r}(.*)`), i = Xe(r, { decode: decodeURIComponent }), a = H(s, {}, !0);
|
691
691
|
n.mock(o, (l) => {
|
692
692
|
const c = F.parse(l.url) || {}, u = l.body instanceof FormData ? Ye(l.body) : l.body, f = se(l.url) ? new URL(l.url).pathname : l.url.split("?")[0], h = i(f)?.params;
|
693
|
-
|
693
|
+
Object.assign(l, { data: u, params: h, query: c });
|
694
|
+
try {
|
695
|
+
return n.mock(a(l));
|
696
|
+
} catch (p) {
|
697
|
+
return console.warn("[mockApi]", o, l, p), null;
|
698
|
+
}
|
694
699
|
});
|
695
700
|
} catch (r) {
|
696
701
|
console.warn("mockApi", r);
|
@@ -828,16 +833,16 @@ function ie(n) {
|
|
828
833
|
a.value.css || "",
|
829
834
|
!0
|
830
835
|
), c.state = Ft(e, a.value.state ?? {}, c);
|
831
|
-
const h = kt(e, a.value.computed ?? {}, c),
|
832
|
-
for (const [m, b] of Object.entries(
|
833
|
-
|
836
|
+
const h = kt(e, a.value.computed ?? {}, c), p = Mt(a.value.methods ?? {}, c), d = Ot(e, a.value.inject, c);
|
837
|
+
for (const [m, b] of Object.entries(d || {}))
|
838
|
+
d[m] = e.inject(m, b);
|
834
839
|
const g = Dt(
|
835
840
|
a.value.dataSources || {},
|
836
841
|
c
|
837
842
|
), v = {
|
838
|
-
...p,
|
839
|
-
...h,
|
840
843
|
...d,
|
844
|
+
...h,
|
845
|
+
...p,
|
841
846
|
...g
|
842
847
|
};
|
843
848
|
return c.setup(v, e), Tt(e, a.value.watch ?? [], c), {
|
@@ -1015,7 +1020,7 @@ function bs() {
|
|
1015
1020
|
}
|
1016
1021
|
function M(n, e, t = z, s = xt, r = [], o = !1) {
|
1017
1022
|
if (!n || !n.name || n.invisible) return null;
|
1018
|
-
const i = t.getCurrentInstance()?.appContext, { id: a = null, directives: l = [] } = n, { vIf: c, vElseIf: u, vElse: f, vFor: h, vShow:
|
1023
|
+
const i = t.getCurrentInstance()?.appContext, { id: a = null, directives: l = [] } = n, { vIf: c, vElseIf: u, vElse: f, vFor: h, vShow: p, vModels: d, vBind: g, vHtml: v, others: m } = He(l);
|
1019
1024
|
if (!o && (u || f))
|
1020
1025
|
return null;
|
1021
1026
|
if (c && !Ut(c, e))
|
@@ -1036,10 +1041,10 @@ function M(n, e, t = z, s = xt, r = [], o = !1) {
|
|
1036
1041
|
})(), R = Lt(a, n.props ?? {}, y), qe = qt(t, n.events ?? {}, y);
|
1037
1042
|
if (n.name === "slot")
|
1038
1043
|
return Kt(t, n, R, y, s);
|
1039
|
-
g && Object.assign(R, y.__parseExpression(g.value)),
|
1044
|
+
g && Object.assign(R, y.__parseExpression(g.value)), p && (R.style = Object.assign(
|
1040
1045
|
R.style ?? {},
|
1041
|
-
Gt(
|
1042
|
-
)), v && Object.assign(R, Vt(v, y)),
|
1046
|
+
Gt(p, y)
|
1047
|
+
)), v && Object.assign(R, Vt(v, y)), d.forEach(($) => {
|
1043
1048
|
Object.assign(R, Qt(t, $, y));
|
1044
1049
|
});
|
1045
1050
|
const Je = Wt(
|
@@ -1194,9 +1199,9 @@ function Wt(n, e, t, s, r) {
|
|
1194
1199
|
} : l ? { [l]: /* @__PURE__ */ Object.create(null) } : {};
|
1195
1200
|
return Object.entries(o).reduce(
|
1196
1201
|
(a, [l, { nodes: c, params: u, scope: f }]) => (a[l] = (h) => {
|
1197
|
-
const
|
1202
|
+
const p = u.length ? st(h ?? {}, u) : i(h, f);
|
1198
1203
|
return c.map(
|
1199
|
-
(
|
1204
|
+
(d) => M(d, t.__clone(p), n, s, c)
|
1200
1205
|
);
|
1201
1206
|
}, a),
|
1202
1207
|
{}
|
@@ -1293,15 +1298,15 @@ function Rs(n) {
|
|
1293
1298
|
menuPathPrefix: e = "",
|
1294
1299
|
pageRouteName: t = "page",
|
1295
1300
|
disableMenusFilter: s = !1
|
1296
|
-
} = n || {}, r = Ne(), o = Ae(), i = St(), a = oe(!1), l = oe(!1), c = r.project, u = (
|
1297
|
-
a.value = !
|
1301
|
+
} = n || {}, r = Ne(), o = Ae(), i = St(), a = oe(!1), l = oe(!1), c = r.project, u = (p, d) => {
|
1302
|
+
a.value = !p?.mask, l.value = d?.pure ?? !!p?.pure;
|
1298
1303
|
};
|
1299
1304
|
rt(() => {
|
1300
|
-
const { name:
|
1301
|
-
if (
|
1302
|
-
const v = r.getPage(
|
1305
|
+
const { name: p, params: d, meta: g } = o;
|
1306
|
+
if (p === D) {
|
1307
|
+
const v = r.getPage(d.id);
|
1303
1308
|
u(v, g);
|
1304
|
-
} else if (
|
1309
|
+
} else if (p === N) {
|
1305
1310
|
const v = r.getHomepage();
|
1306
1311
|
u(v, g);
|
1307
1312
|
} else {
|
@@ -1352,7 +1357,7 @@ function le(n) {
|
|
1352
1357
|
homepage: a
|
1353
1358
|
} = n, l = [];
|
1354
1359
|
for (const c of s) {
|
1355
|
-
const { id: u, title: f, dir: h, layout:
|
1360
|
+
const { id: u, title: f, dir: h, layout: p, children: d, meta: g } = c;
|
1356
1361
|
if (h) {
|
1357
1362
|
const v = le({
|
1358
1363
|
name: e,
|
@@ -1361,10 +1366,10 @@ function le(n) {
|
|
1361
1366
|
routeMeta: i,
|
1362
1367
|
homepage: a,
|
1363
1368
|
loader: o,
|
1364
|
-
pages:
|
1369
|
+
pages: d || []
|
1365
1370
|
});
|
1366
1371
|
l.push(...v);
|
1367
|
-
} else if (
|
1372
|
+
} else if (p) {
|
1368
1373
|
const v = le({
|
1369
1374
|
name: e,
|
1370
1375
|
prefix: t,
|
@@ -1372,7 +1377,7 @@ function le(n) {
|
|
1372
1377
|
routeMeta: i,
|
1373
1378
|
homepage: a,
|
1374
1379
|
loader: o,
|
1375
|
-
pages:
|
1380
|
+
pages: d || []
|
1376
1381
|
}), m = {
|
1377
1382
|
name: `layout_${u}`,
|
1378
1383
|
path: t,
|
@@ -1469,8 +1474,8 @@ class cs extends ze {
|
|
1469
1474
|
/* Development */
|
1470
1475
|
} = e;
|
1471
1476
|
this.mode = s, this.modules = c, this.service = t, this.router = u, this.materialPath = f, this.nodeEnv = h, r && (this.dependencies = r), o && (this.materials = o), Object.assign(this.globals, l), Object.assign(this.adapter, a);
|
1472
|
-
const { access:
|
1473
|
-
|
1477
|
+
const { access: p, request: d } = this.adapter;
|
1478
|
+
p && p.connect({ mode: s, router: u, request: d }), i && s !== _.Design ? this.load(i) : this.project = i;
|
1474
1479
|
}
|
1475
1480
|
mode;
|
1476
1481
|
// 当前运行模式(设计/源码/预览等)
|
@@ -1553,31 +1558,31 @@ class cs extends ze {
|
|
1553
1558
|
a === "development"
|
1554
1559
|
/* Development */
|
1555
1560
|
);
|
1556
|
-
for (const
|
1557
|
-
const
|
1561
|
+
for (const p of l) {
|
1562
|
+
const d = s[p], g = e[p];
|
1558
1563
|
if (g)
|
1559
|
-
r[
|
1560
|
-
else if (
|
1561
|
-
e[
|
1564
|
+
r[p] = g;
|
1565
|
+
else if (d)
|
1566
|
+
e[p] = r[p] = await d();
|
1562
1567
|
else {
|
1563
|
-
const v = c[
|
1568
|
+
const v = c[p] || [];
|
1564
1569
|
for (const m of v)
|
1565
1570
|
G(m) && await mt(m, F.append(m, { v: O })), V(m) && await Se(F.append(m, { v: O }));
|
1566
|
-
r[
|
1571
|
+
r[p] = e[p];
|
1567
1572
|
}
|
1568
1573
|
}
|
1569
1574
|
if (a === "development") {
|
1570
|
-
for (const
|
1571
|
-
await Se(F.append(
|
1572
|
-
const
|
1573
|
-
for (const
|
1574
|
-
const g = e[h[
|
1575
|
+
for (const d of u)
|
1576
|
+
await Se(F.append(d, { v: O }));
|
1577
|
+
const p = this.materials || {};
|
1578
|
+
for (const d of f) {
|
1579
|
+
const g = e[h[d]], v = Ge[d];
|
1575
1580
|
if (v)
|
1576
1581
|
g && v.forEach((m) => {
|
1577
1582
|
o[m] = g[m];
|
1578
1583
|
});
|
1579
1584
|
else {
|
1580
|
-
const m = d
|
1585
|
+
const m = p[d] ? (await p[d]()).default : e[d];
|
1581
1586
|
m && g && (m.components || []).forEach((b) => {
|
1582
1587
|
o[b.name] = pt(b, g);
|
1583
1588
|
});
|
@@ -1611,8 +1616,8 @@ class cs extends ze {
|
|
1611
1616
|
component: ee,
|
1612
1617
|
loader: this.getRenderComponent.bind(this),
|
1613
1618
|
homepage: t?.homepage
|
1614
|
-
}).forEach((
|
1615
|
-
i ? e.addRoute(i,
|
1619
|
+
}).forEach((d) => {
|
1620
|
+
i ? e.addRoute(i, d) : e.addRoute(d);
|
1616
1621
|
}), t?.homepage || (i ? e.addRoute(i, f) : e.addRoute(f));
|
1617
1622
|
} else
|
1618
1623
|
i ? (e.addRoute(i, u), e.addRoute(i, f)) : (e.addRoute(u), e.addRoute(f));
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vtj/renderer",
|
3
3
|
"private": false,
|
4
|
-
"version": "0.13.
|
4
|
+
"version": "0.13.11",
|
5
5
|
"type": "module",
|
6
6
|
"keywords": [
|
7
7
|
"低代码引擎",
|
@@ -21,15 +21,15 @@
|
|
21
21
|
"author": "chenhuachun",
|
22
22
|
"license": "MIT",
|
23
23
|
"dependencies": {
|
24
|
-
"@vtj/core": "~0.13.
|
25
|
-
"@vtj/utils": "~0.13.
|
24
|
+
"@vtj/core": "~0.13.11",
|
25
|
+
"@vtj/utils": "~0.13.11"
|
26
26
|
},
|
27
27
|
"devDependencies": {
|
28
28
|
"vue": "~3.5.5",
|
29
29
|
"vue-router": "~4.5.0",
|
30
|
-
"@vtj/
|
31
|
-
"@vtj/ui": "~0.13.
|
32
|
-
"@vtj/
|
30
|
+
"@vtj/icons": "~0.13.11",
|
31
|
+
"@vtj/ui": "~0.13.11",
|
32
|
+
"@vtj/cli": "~0.12.10"
|
33
33
|
},
|
34
34
|
"exports": {
|
35
35
|
".": {
|
package/types/version.d.ts
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
* Copyright (c) 2025, VTJ.PRO All rights reserved.
|
3
3
|
* @name @vtj/renderer
|
4
4
|
* @author CHC chenhuachun1549@dingtalk.com
|
5
|
-
* @version 0.13.
|
5
|
+
* @version 0.13.10
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
7
|
*/
|
8
|
-
export declare const version = "0.13.
|
8
|
+
export declare const version = "0.13.10";
|