@vtj/renderer 0.13.27 → 0.13.29
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 +4 -4
- package/dist/index.mjs +58 -55
- package/package.json +6 -6
- package/types/version.d.ts +2 -2
package/dist/index.cjs
CHANGED
@@ -2,13 +2,13 @@
|
|
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.29
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
|
-
*/const O="0.13.
|
7
|
+
*/const O="0.13.29";var S=(r=>(r.Runtime="Runtime",r.Design="Design",r.Raw="Raw",r.VNode="VNode",r))(S||{});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",L="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 x(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 je(r){return/\.json$/.test(r)}function rt(r){return r.map(e=>`<script src="${f.url.append(e,{v:O})}"><\/script>`).join("")}function nt(r=[]){return r.map(e=>`<link rel="stylesheet" href="${f.url.append(e,{v:O})}" />`).join("")}function $e(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(d=>!!d.enabled),n=[],o=[],a=[],i=[],l={},c={},u=[],p={};return s.forEach(({urls:d,assetsUrl:m,library:h,assetsLibrary:g,localeLibrary:y})=>{d?.forEach(v=>{N(v)&&n.push($e(v,t)),B(v)&&o.push(v)}),h&&(i.push(h),l[h]=x(d||[],e),y&&(c[h]=y)),m&&a.push(m),g&&u.push(g),h&&g&&(p[g]=h)}),{scripts:x(n,e),css:x(o,e),materials:x(a,e),libraryExports:i,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 v=c.indexOf("*/",p+2);if(v!==-1){p=v+2;continue}}if(c[p]==="@"){const v=p;for(;p<c.length&&c[p]!=="{"&&c[p]!==";";)p++;const w=c.substring(v,p).trim(),_=w.includes("@keyframes");if(c[p]===";")u.push({type:"simple-at-rule",content:c.substring(v,p+1)}),p++;else if(c[p]==="{"){const E=p+1;let A=1;for(p++;p<c.length&&A>0;)c[p]==="{"?A++:c[p]==="}"&&A--,p++;const W=c.substring(v,p),I=c.substring(E,p-1);u.push({type:_?"keyframes":"at-rule",rule:w,content:W,inner:I})}continue}const d=p;for(;p<c.length&&c[p]!=="{";)p++;if(p>=c.length)break;const m=c.substring(d,p).trim();if(!m){p++;continue}const h=p+1;let g=1;for(p++;p<c.length&&g>0;)c[p]==="{"?g++:c[p]==="}"&&g--,p++;const y=c.substring(h,p-1);u.push({type:"rule",selector:m,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,d)=>{const m=p.trim(),h=d.trim();return m?`${m}[${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[,d,m=""]=p,h=d.trim();return h?`${h}[${e}]${m}`:u}return`${u}[${e}]`},a=c=>n(c).split(",").map(p=>o(p)).filter(p=>p.trim()).join(", "),i=c=>c.map(u=>{switch(u.type){case"simple-at-rule":return u.content;case"keyframes":return u.content;case"at-rule":try{const d=t(u.inner),m=i(d);return`${u.rule} { ${m} }`}catch{return u.content}case"rule":if(!u.selector||!u.content)return"";const p=a(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
8
|
`),u=t(c),p=i(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,a=s?Pe(t,o):t;if(n.prototype.replaceSync){const i=new n;i.id=e,i.replaceSync(a);const l=r.document,c=l.adoptedStyleSheets,u=Array.from(c).filter(p=>p.id!==e);l.adoptedStyleSheets=[...u,i]}else{const i=r.document;let l=i.getElementById(e);l?l.innerHTML=a:(l=i.createElement("style"),l.id=e,l.innerHTML=a,i.head.appendChild(l))}}function ot(r){const e=r.adoptedStyleSheets||[];let t="";if(e.forEach(s=>{try{for(const n of s.cssRules)t+=n.cssText+`
|
9
9
|
`}catch(n){console.error("Failed to read cssRules from adopted stylesheet:",n)}}),t){const s=r.createElement("style");s.textContent=t,r.head.appendChild(s)}}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 a=t.createElement("link");a.rel="stylesheet",a.id=n,a.href=n,s.appendChild(a)}}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((a,i)=>{for(const l of r){const c=s.createElement("script");c.src=l,c.onload=()=>{o=t[e],o?a(o.default||o):i(null)},c.onerror=u=>{i(u)},n.appendChild(c)}})}function Ie(r){return f.isFunction(r)&&Object.getOwnPropertyNames(r.prototype||{}).length===0||f.isFunction(r?.install)}function Me(r){return Ee.includes(r)}function Te(r){return we.includes(r)}function D(r=window){const e=window?.Mock;if(e)return e;const t=r?.Mock;if(t&&window)return window.Mock=t,t}function it(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 H(r,e,t=!1,s=!1,n=!1){try{const o=['"use strict";',"var __self = arguments[0];"];o.push("return ");let a=(r.value||"").trim();n||(a=a.replace(/this(\W|$)/g,(l,c)=>`__self${c}`)),a=o.join(`
|
10
10
|
`)+a;const i=n?`
|
11
11
|
${a}
|
12
|
-
`:`with(${t?"{}":"$scope || {}"}) { ${a} }`;return new Function("$scope",i)(e)}catch(o){if(f.logger.error("parseExpression.error",o,r,e?.__self??e),s)throw o}}function P(r,e,t=!1,s=!1,n=!1){const o=H(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 R(r){return r&&r.type==="JSExpression"}function b(r){return typeof r=="object"&&r&&r.type==="JSFunction"}function ke(r){return R(r)||b(r)}function at(r){return ke(r)?r.value:JSON.stringify(r)}const ct={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=S.Raw;interceptResponse=!0;constructor(e){this.options=Object.assign({},ct,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!==S.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 Oe(){return $.inject(ae,null)}function lt(r={}){const{notify:e,loading:t,settings:s={},Startup:n,access:o,useTitle:a,alert:i}=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:a,alert:i,startupComponent:n,access:o?new V({alert:i,...o}):void 0}}function ut(r={}){return new V(r)}function Fe(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?H(r.headers,{},!0):void 0,o={url:r.url,method:r.method,settings:{...r.settings,headers:n}};return(a,i)=>(delete o.data,s.send(f.merge(o,i||{},{data:a})))}}function De(r,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:n}=r;return(o,a)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,n,o,a)}}function He(r=[],e=[],t){const s={};for(const n of r)s[n.id]=Fe(n,t);for(const n of e)s[n.id]=De(n,t);return s}async function xe(r=[],e=window){const t=D(e);t&&(ce(e),r.forEach(s=>Ue(t,s)))}function Le(r,e=window){const t=b(r.mockTemplate)&&r.mockTemplate.value?P(r.mockTemplate,{},!0):void 0,s=D(e);return async(...n)=>{let o={};if(t)try{o=await t.apply(t,n)}catch(a){f.logger.warn("模拟数据模版异常",a)}return s?.mock(o)}}function Ue(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}(.*)`),a=f.pathToRegexpMatch(n,{decode:decodeURIComponent}),i=H(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],d=a(p)?.params;Object.assign(l,{data:u,params:d,query:c});try{return r.mock(i(l))}catch(g){return console.warn("[mockApi]",o,l,g),null}})}catch(n){console.warn("mockApi",n)}}function ce(r=window){const e=D(r);e&&(e._mocked={})}class Be{__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===S.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return P({type:s,value:n},this)}else return P(e,this)}__parseExpression(e){if(e)if(this.__mode===S.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return H({type:s,value:n},this)}else return H(e,this)}__ref(e=null,t){if(this.__mode!==S.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,S.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=S.Runtime,components:s={},libs:n={},apis:o={},loader:a}=r,i=e.computed(()=>r.dsl),l={$components:s,$libs:n,$apis:o},c=new Be({mode:t,dsl:i.value,attrs:l}),u=e.defineComponent({name:i.value.name,__scopeId:i.value.id?`data-v-${i.value.id}`:void 0,props:{...ft(i.value.props??[],c)},setup(p){c.$props=p,c.props=p,i.value.id&&z(r.window||window,i.value.id,i.value.css||"",!0),c.state=dt(e,i.value.state??{},c);const d=ht(e,i.value.computed??{},c),g=mt(i.value.methods??{},c),h=gt(e,i.value.inject,c);for(const[v,w]of Object.entries(h||{}))h[v]=e.inject(v,w);const m=Ne(i.value.dataSources||{},c),y={...h,...d,...g,...m};return c.setup(y,e),yt(e,i.value.watch??[],c),{vtj:c}},emits:pt(i.value.emits),expose:["vtj"],render(){if(!i.value.nodes)return null;const p=i.value.nodes||[];return p.length===1?k(p[0],c,e,a,p):p.map(d=>k(d,c,e,a,p))},...vt(i.value.lifeCycles??{},c)});return{renderer:e.markRaw(u),context:c}}function pt(r=[]){return r.map(e=>f.isString(e)?e:e.name)}function ft(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:R(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 dt(r,e,t){return r.reactive(Object.keys(e||{}).reduce((s,n)=>{let o=e[n];return R(o)?o=t.__parseExpression(o):b(o)&&(o=t.__parseFunction(o)),s[n]=o,s},{}))}function ht(r,e,t){return Object.entries(e??{}).reduce((s,[n,o])=>(s[n]=r.computed(t.__parseFunction(o)),s),{})}function mt(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}function gt(r,e=[],t){return e.reduce((s,n)=>{const{name:o,from:a}=n||{};n.default;const i=R(a)?t.__parseExpression(a)||o:a??o,l=R(n.default)?t.__parseExpression(n.default):n.default??null;return s[o]=r.inject(i,l),s},{})}function Ne(r,e){return Object.keys(r).reduce((t,s)=>{const n=r[s];if(n.type==="mock")t[s]=Le(n);else if(n.ref){const o=e.$apis[n.ref],a=b(n.transform)?n.transform.value?e.__parseFunction(n.transform):void 0:n.transform;t[s]=async(...i)=>{const l=await o.apply(e,i);return a?a(l):l}}return t},{})}function yt(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=[],T={};const Je=r=>r;async function le(r,e=window){const{urls:t=[],library:s}=r,n=t.filter(i=>N(i));if(n.length===0||!s)return null;const o=t.filter(i=>B(i));return o.length&&oe(o,e),await ie(n,s,e).catch(i=>(console.warn("loadScriptUrl error",n,s,i),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,a=G)=>{if(!o||typeof o=="string")return n;if(o.type==="Schema"&&o.id)return a.defineAsyncComponent(async()=>{const i=T[o.id]||await qe.add(o.id,()=>e(o.id));return i&&(i.name=n,T[o.id]=i),i?J({...s,Vue:a,dsl:f.cloneDeep(i),mode:S.Runtime,loader:K(r)}).renderer:null});if(o.type==="UrlSchema"&&o.url)return a.defineAsyncComponent(async()=>{const i=T[o.url]||await t(o.url);return i&&(i.name=n,T[o.url]=i),i?J({...s,Vue:a,dsl:f.cloneDeep(i),mode:S.Runtime,loader:K(r)}).renderer:null});if(o.type==="Plugin"){let i=o.library?T[o.library]:null;return i||(o.library&&X.push(o.library),i=T[o.library||Symbol()]=a.defineAsyncComponent(async()=>{const l=await le(o,s.window);return l||(console.warn("getPlugin result is null",o),null)}),i)}return n}}function _t(){T={},qe.clearAllCache()}function k(r,e,t=G,s=Je,n=[],o=!1){if(!r||!r.name||r.invisible)return null;const a=t.getCurrentInstance()?.appContext,{id:i=null,directives:l=[]}=r,{vIf:c,vElseIf:u,vElse:p,vFor:d,vShow:g,vModels:h,vBind:m,vHtml:y,others:v}=Ke(l);if(!o&&(u||p))return null;if(c&&!wt(c,e))return bt(r,e,t,s,n);const w=(_,E=0)=>{const A=_.$components,W=(()=>{if(r.name==="component")return Et(_,r.props?.is);if(r.name==="slot")return r.name;const C=s(r.name,r.from,t);if(f.isString(C))return Me(C)||Te(C)?C:A[C]??a?.app?.component(C)??C;if(f.isObject(C)&&r.id){const ge=`Loader${r.id}_${E}`,ye=A[ge];return ye||(A[ge]=C)}return C})(),I=jt(i,r.props??{},_),We=$t(t,r.events??{},_);if(r.name==="slot")return Rt(t,r,I,_,s);m&&Object.assign(I,_.__parseExpression(m.value)),g&&(I.style=Object.assign(I.style??{},Pt(g,_))),y&&Object.assign(I,At(y,_)),h.forEach(C=>{Object.assign(I,It(t,C,_))});const Ye=Mt(t,r.children??[],_,s,r),he=_?.__id?`data-v-${_.__id}`:void 0,Xe=he?{[he]:""}:{};let Y=t.createVNode(W,{key:`${i}_${E}`,...Xe,...I,...We},Ye);const me=a?St(a,v,_):[];return me.length&&(Y=t.withDirectives(Y,me)),Y};return d?Ot(d,w,e):w(e)}function St(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 a=[o];return n.value&&a.push(t.__parseExpression(n.value)),n.arg&&a.push(n.arg),n.modifiers&&a.push(n.modifiers),a}).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"),a=r.find(u=>f.camelCase(u.name)==="vBind"),i=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:a,others:c,vHtml:i}}function wt(r,e){return!!e.__parseExpression(r.value)}function Et(r,e){return e?R(e)?r.__parseExpression(e):e:"div"}function jt(r,e,t){const s=se(e,t);return s.ref=t.__ref(r,s.ref),s}function se(r,e){return R(r)?e.__parseExpression(r):b(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,a)=>{const i=e[a],l=ue(i.modifiers),c=l.find(d=>s.includes(d)),u="on"+f.upperFirst(a)+(c&&n[c]||""),p=t.__parseFunction(i.handler);return p&&(o[u]=r.withModifiers(p,l)),o},{})}function bt(r,e,t,s,n=[]){let o=n.findIndex(a=>a.id===r.id);for(let a=++o;a<n.length;a++){const{directives:i=[]}=n[a],{vElseIf:l,vElse:c}=Ke(i);if(l){if(e.__parseExpression(l.value))return k(n[a],e,t,s,n,!0);continue}if(c)return k(n[a],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 Rt(r,e,t,s,n){const{children:o}=e,a=Ct(e,s),i=s.$slots?.[a.name];return i?i(t):o?f.isString(o)?r.createTextVNode(o):R(o)?r.createTextVNode(ne(s.__parseExpression(o))):Array.isArray(o)?o.map(l=>k(l,s,r,n,o)):null:null}function Ct(r,e){const{props:t}=r,s=t?.name||"default";return{name:R(s)?e.__parseExpression(s):s,params:[]}}function Pt(r,e){return e.__parseExpression(r.value)?{}:{display:"none"}}function At(r,e){return{innerHTML:e.__parseExpression(r.value)||""}}function It(r,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
12
|
+
`:`with(${t?"{}":"$scope || {}"}) { ${a} }`;return new Function("$scope",i)(e)}catch(o){if(f.logger.error("parseExpression.error",o,r,e?.__self??e),s)throw o}}function P(r,e,t=!1,s=!1,n=!1){const o=H(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 R(r){return r&&r.type==="JSExpression"}function b(r){return typeof r=="object"&&r&&r.type==="JSFunction"}function ke(r){return R(r)||b(r)}function at(r){return ke(r)?r.value:JSON.stringify(r)}const ct={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=S.Raw;interceptResponse=!0;constructor(e){this.options=Object.assign({},ct,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!==S.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 Oe(){return $.inject(ae,null)}function lt(r={}){const{notify:e,loading:t,settings:s={},Startup:n,access:o,useTitle:a,alert:i}=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:a,alert:i,startupComponent:n,access:o?new V({alert:i,...o}):void 0}}function ut(r={}){return new V(r)}function Fe(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?H(r.headers,{},!0):void 0,o={url:r.url,method:r.method,settings:{...r.settings,headers:n}};return(a,i)=>(delete o.data,s.send(f.merge(o,i||{},{data:a})))}}function De(r,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:n}=r;return(o,a)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,n,o,a)}}function He(r=[],e=[],t){const s={};for(const n of r)s[n.id]=Fe(n,t);for(const n of e)s[n.id]=De(n,t);return s}async function xe(r=[],e=window){const t=D(e);t&&(ce(e),r.forEach(s=>Ue(t,s)))}function Le(r,e=window){const t=b(r.mockTemplate)&&r.mockTemplate.value?P(r.mockTemplate,{},!0):void 0,s=D(e);return async(...n)=>{let o={};if(t)try{o=await t.apply(t,n)}catch(a){f.logger.warn("模拟数据模版异常",a)}return s?.mock(o)}}function Ue(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}(.*)`),a=f.pathToRegexpMatch(n,{decode:decodeURIComponent}),i=H(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],d=a(p)?.params;Object.assign(l,{data:u,params:d,query:c});try{return r.mock(i(l))}catch(m){return console.warn("[mockApi]",o,l,m),null}})}catch(n){console.warn("mockApi",n)}}function ce(r=window){const e=D(r);e&&(e._mocked={})}class Be{__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===S.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return P({type:s,value:n},this)}else return P(e,this)}__parseExpression(e){if(e)if(this.__mode===S.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return H({type:s,value:n},this)}else return H(e,this)}__ref(e=null,t){if(this.__mode!==S.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,S.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=S.Runtime,components:s={},libs:n={},apis:o={},loader:a}=r,i=e.computed(()=>r.dsl),l={$components:s,$libs:n,$apis:o},c=new Be({mode:t,dsl:i.value,attrs:l}),u=e.defineComponent({name:i.value.name,__scopeId:i.value.id?`data-v-${i.value.id}`:void 0,props:{...ft(i.value.props??[],c)},setup(p){c.$props=p,c.props=p,i.value.id&&z(r.window||window,i.value.id,i.value.css||"",!0),c.state=dt(e,i.value.state??{},c);const d=ht(e,i.value.computed??{},c),m=mt(i.value.methods??{},c),h=gt(e,i.value.inject,c);for(const[v,w]of Object.entries(h||{}))h[v]=e.inject(v,w);const g=Ne(i.value.dataSources||{},c),y={...h,...d,...m,...g};return c.setup(y,e),yt(e,i.value.watch??[],c),{vtj:c,state:c.state,...d,...m}},emits:pt(i.value.emits),expose:["vtj",...i.value.expose||[]],render(){if(!i.value.nodes)return null;const p=i.value.nodes||[];return p.length===1?k(p[0],c,e,a,p):p.map(d=>k(d,c,e,a,p))},...vt(i.value.lifeCycles??{},c)});return{renderer:e.markRaw(u),context:c}}function pt(r=[]){return r.map(e=>f.isString(e)?e:e.name)}function ft(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:R(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 dt(r,e,t){return r.reactive(Object.keys(e||{}).reduce((s,n)=>{let o=e[n];return R(o)?o=t.__parseExpression(o):b(o)&&(o=t.__parseFunction(o)),s[n]=o,s},{}))}function ht(r,e,t){return Object.entries(e??{}).reduce((s,[n,o])=>(s[n]=r.computed(t.__parseFunction(o)),s),{})}function mt(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}function gt(r,e=[],t){return e.reduce((s,n)=>{const{name:o,from:a}=n||{};n.default;const i=R(a)?t.__parseExpression(a)||o:a??o,l=R(n.default)?t.__parseExpression(n.default):n.default??null;return s[o]=r.inject(i,l),s},{})}function Ne(r,e){return Object.keys(r).reduce((t,s)=>{const n=r[s];if(n.type==="mock")t[s]=Le(n);else if(n.ref){const o=e.$apis[n.ref],a=b(n.transform)?n.transform.value?e.__parseFunction(n.transform):void 0:n.transform;t[s]=async(...i)=>{const l=await o.apply(e,i);return a?a(l):l}}return t},{})}function yt(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=[],T={};const Je=r=>r;async function le(r,e=window){const{urls:t=[],library:s}=r,n=t.filter(i=>N(i));if(n.length===0||!s)return null;const o=t.filter(i=>B(i));return o.length&&oe(o,e),await ie(n,s,e).catch(i=>(console.warn("loadScriptUrl error",n,s,i),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,a=G)=>{if(!o||typeof o=="string")return n;if(o.type==="Schema"&&o.id)return a.defineAsyncComponent(async()=>{const i=T[o.id]||await qe.add(o.id,()=>e(o.id));return i&&(i.name=n,T[o.id]=i),i?J({...s,Vue:a,dsl:f.cloneDeep(i),mode:S.Runtime,loader:K(r)}).renderer:null});if(o.type==="UrlSchema"&&o.url)return a.defineAsyncComponent(async()=>{const i=T[o.url]||await t(o.url);return i&&(i.name=n,T[o.url]=i),i?J({...s,Vue:a,dsl:f.cloneDeep(i),mode:S.Runtime,loader:K(r)}).renderer:null});if(o.type==="Plugin"){let i=o.library?T[o.library]:null;return i||(o.library&&X.push(o.library),i=T[o.library||Symbol()]=a.defineAsyncComponent(async()=>{const l=await le(o,s.window);return l||(console.warn("getPlugin result is null",o),null)}),i)}return n}}function _t(){T={},qe.clearAllCache()}function k(r,e,t=G,s=Je,n=[],o=!1){if(!r||!r.name||r.invisible)return null;const a=t.getCurrentInstance()?.appContext,{id:i=null,directives:l=[]}=r,{vIf:c,vElseIf:u,vElse:p,vFor:d,vShow:m,vModels:h,vBind:g,vHtml:y,others:v}=Ke(l);if(!o&&(u||p))return null;if(c&&!wt(c,e))return bt(r,e,t,s,n);const w=(_,E=0)=>{const A=_.$components,W=(()=>{if(r.name==="component")return Et(_,r.props?.is);if(r.name==="slot")return r.name;const C=s(r.name,r.from,t);if(f.isString(C))return Me(C)||Te(C)?C:A[C]??a?.app?.component(C)??C;if(f.isObject(C)&&r.id){const ge=`Loader${r.id}_${E}`,ye=A[ge];return ye||(A[ge]=C)}return C})(),I=jt(i,r.props??{},_),We=$t(t,r.events??{},_);if(r.name==="slot")return Rt(t,r,I,_,s);g&&Object.assign(I,_.__parseExpression(g.value)),m&&(I.style=Object.assign(I.style??{},Pt(m,_))),y&&Object.assign(I,At(y,_)),h.forEach(C=>{Object.assign(I,It(t,C,_))});const Ye=Mt(t,r.children??[],_,s,r),he=_?.__id?`data-v-${_.__id}`:void 0,Xe=he?{[he]:""}:{};let Y=t.createVNode(W,{key:`${i}_${E}`,...Xe,...I,...We},Ye);const me=a?St(a,v,_):[];return me.length&&(Y=t.withDirectives(Y,me)),Y};return d?Ot(d,w,e):w(e)}function St(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 a=[o];return n.value&&a.push(t.__parseExpression(n.value)),n.arg&&a.push(n.arg),n.modifiers&&a.push(n.modifiers),a}).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"),a=r.find(u=>f.camelCase(u.name)==="vBind"),i=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:a,others:c,vHtml:i}}function wt(r,e){return!!e.__parseExpression(r.value)}function Et(r,e){return e?R(e)?r.__parseExpression(e):e:"div"}function jt(r,e,t){const s=se(e,t);return s.ref=t.__ref(r,s.ref),s}function se(r,e){return R(r)?e.__parseExpression(r):b(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,a)=>{const i=e[a],l=ue(i.modifiers),c=l.find(d=>s.includes(d)),u="on"+f.upperFirst(a)+(c&&n[c]||""),p=t.__parseFunction(i.handler);return p&&(o[u]=r.withModifiers(p,l)),o},{})}function bt(r,e,t,s,n=[]){let o=n.findIndex(a=>a.id===r.id);for(let a=++o;a<n.length;a++){const{directives:i=[]}=n[a],{vElseIf:l,vElse:c}=Ke(i);if(l){if(e.__parseExpression(l.value))return k(n[a],e,t,s,n,!0);continue}if(c)return k(n[a],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 Rt(r,e,t,s,n){const{children:o}=e,a=Ct(e,s),i=s.$slots?.[a.name];return i?i(t):o?f.isString(o)?r.createTextVNode(o):R(o)?r.createTextVNode(ne(s.__parseExpression(o))):Array.isArray(o)?o.map(l=>k(l,s,r,n,o)):null:null}function Ct(r,e){const{props:t}=r,s=t?.name||"default";return{name:R(s)?e.__parseExpression(s):s,params:[]}}function Pt(r,e){return e.__parseExpression(r.value)?{}:{display:"none"}}function At(r,e){return{innerHTML:e.__parseExpression(r.value)||""}}function It(r,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
13
13
|
${e.value.value} = v;
|
14
|
-
}`:"(v) => {}"},n=t.__parseFunction(s),o=ue(R(e.modifiers)?t.__parseExpression(e.modifiers):e.modifiers),a=R(e.arg)?t.__parseExpression(e.arg):e.arg||"modelValue";return{[a]:t.__parseExpression(e.value),[`onUpdate:${a}`]: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(R(e))return{default:()=>ne(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const o=Tt(e),a=(i,l)=>!i||!n?{}:n?.id&&Object.keys(i).length?l?{[l]:i}:{[`scope_${n.id}`]:i}:l?{[l]:Object.create(null)}:{};return Object.entries(o).reduce((i,[l,{nodes:c,params:u,scope:p}])=>(i[l]=d=>{const g=u.length?f.pick(d??{},u):a(d,p);return c.map(h=>k(h,t.__clone(g),r,s,c))},i),{})}return null}function Tt(r){const e={};for(const t of r){const s=kt(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 kt(r="default"){return f.isString(r)?{name:r,params:[],scope:""}:{params:[],scope:"",...r}}function Ot(r,e,t){const{value:s,iterator:n}=r,{item:o="item",index:a="index"}=n||{};let i=t.__parseExpression(s)||[];return Number.isInteger(i)&&(i=new Array(i).fill(!0).map((l,c)=>c+1)),Array.isArray(i)?i.map((l,c)=>e(t.__clone({[o]:l,[a]:c}),c)):(console.warn("[vForRender]:",`${s?.value} is not a Arrary`),[])}const Z=$.defineComponent({name:"VtjPageContainer",async setup(){const r=de(),e=ve.useRoute(),t=e.meta.__vtj__||e.params.id,s=t?r.getPage(t):r.getHomepage(),n=s?await r.getRenderComponent(s.id):null,o=$.ref(Symbol());if(s){Object.assign(e.meta,s.meta||{},{cache:s.cache});const{useTitle:a}=r?.adapter;a&&a(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?$.h(r,{...e,key:t}):$.h("div","页面不存在")},activated(){this.meta.cache===!1&&(this.sid=Symbol())}}),Ft=$.defineComponent({name:"VtjStartupContainer",render(){return $.h("div","page not found!")}});function U(r,e,t=[]){const s=[];for(const n of t){const{id:o,title:a,icon:i,children:l,hidden:c,layout:u}=n;if(u){const p=U(r,e,l||[]);s.push(...p)}else{const p={id:o,title:a,icon:i,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 Dt(r){const{menuPathPrefix:e="",pageRouteName:t="page",disableMenusFilter:s=!1}=r||{},n=de(),o=ve.useRoute(),a=Oe(),i=$.ref(!1),l=$.ref(!1),c=n.project,u=(g,h)=>{i.value=!g?.mask,l.value=h?.pure??!!g?.pure};$.watchEffect(()=>{const{name:g,params:h,meta:m}=o;if(g===F){const y=n.getPage(h.id);u(y,m)}else if(g===L){const y=n.getHomepage();u(y,m)}else{const y=m.__vtj__;if(y){const v=n.getPage(y);u(v,m)}else i.value=!m.mask,l.value=!!m.pure}});const p=U(e,t,c?.pages),d=c?.config;return{disabled:i,logo:d?.logo,themeSwitchable:d?.themeSwitchable,title:d?.title||c?.description||c?.name||"VTJ App",menus:s?p:pe(p,a),pure:l}}function ee(r,e){const{id:t,title:s,meta:n}=r,{name:o="page",prefix:a="",component:i,routeMeta:l}=e;return{name:t,path:`${a}${o}/${t}`,component:i,meta:{title:s,...l,...n,__vtj__:t}}}function re(r){const{name:e="page",prefix:t="",pages:s=[],component:n,loader:o,routeMeta:a,homepage:i}=r,l=[];for(const c of s){const{id:u,title:p,dir:d,layout:g,children:h,meta:m}=c;if(d){const y=re({name:e,prefix:t,component:n,routeMeta:a,homepage:i,loader:o,pages:h||[]});l.push(...y)}else if(g){const y=re({name:e,prefix:t,component:n,routeMeta:a,homepage:i,loader:o,pages:h||[]}),v={name:`layout_${u}`,path:t,component:()=>o(u),meta:{title:p,...a,...m,__vtj__:u},children:y};l.push(v),l.push(ee(c,r))}else if(l.push(ee(c,r)),i===u){const y=ee(c,r);y.path="",y.name=`home_${u}`,l.push(y)}}return l}function Ht(r={},e){const{css:t,store:s,enhance:n}=r,{window:o,app:a,library:i={},adapter:l,mode:c}=e,{Pinia:u}=i;a.config.globalProperties.$libs=i,z(o,"global-css",t||""),u&&s&&xt(s,a,u),Ut(a,l,r),!l.access&&r.access&&Lt(r.access,a,c,l),Bt(a,r),n&&Nt(n,a,i)}function xt(r,e,t){const s=t.createPinia();if(e.use(s),b(r)&&r.value){const n=P(r,{},!1,!1,!0),o=t.defineStore("$store",n(e)||{});e.config.globalProperties.$store=o()}}function Lt(r,e,t,s){if(b(r)&&r.value){const n=P(r,{},!1,!1,!0),{alert:o,request:a}=s,i=new V({alert:o,storagePrefix:"__VTJ_APP_",...n(e)}),l=e.config.globalProperties.$router;i.connect({mode:t,router:l,request:a}),e.use(i)}}function Ut(r,e,t){if(!e.request)return;const{axios:s,request:n,response:o}=t;if(s&&b(s)&&s.value){const a=P(s,{},!1,!1,!0);e.request.setConfig(a(r))}if(n&&b(n)&&n.value){const a=P(n,{},!1,!1,!0),i=e.request;i.__unReq&&i.__unReq(),i.__unReq=e.request.useRequest(l=>a(l,r))}if(o&&b(o)&&o.value){const a=P(o,{},!1,!1,!0),i=e.request;i.__unRes&&i.__unRes(),i.__unRes=e.request.useResponse(l=>a(l,r))}}function Bt(r,e){const{beforeEach:t,afterEach:s}=e,n=r.config.globalProperties.$router;if(t&&b(t)&&t.value){const o=P(t,{},!1,!1,!0);n&&n.beforeEach((a,i,l)=>o(a,i,l,r))}if(s&&b(s)&&s.value){const o=P(s,{},!1,!1,!0);n&&n.afterEach((a,i,l)=>o(a,i,l,r))}}function Nt(r,e,t={}){b(r)&&r.value&&P(r,{},!1,!1,!0)(e,t)}function qt(r,e,t){if(!r||!e||!t)return;const{VueI18n:s}=e;if(s){const{locale:n,fallbackLocale:o,messages:a=[]}=t,i={};for(let c of a){const u=Object.keys(c).filter(p=>p!=="key");for(const p of u)i[p]||(i[p]={}),i[p][c.key]=c[p]}const l=s.createI18n({legacy:!1,locale:n,fallbackLocale:o,messages:i});r.use(l)}}const fe=Symbol("Provider");var Ge=(r=>(r.Production="production",r.Development="development",r))(Ge||{});class ze extends M.Base{constructor(e){super(),this.options=e;const{service:t,mode:s=S.Raw,dependencies:n,materials:o,project:a={},adapter:i={},globals:l={},modules:c={},router:u=null,materialPath:p="./",nodeEnv:d="development"}=e;this.mode=s,this.modules=c,this.service=t,this.router=u,this.materialPath=p,this.nodeEnv=d,n&&(this.dependencies=n),o&&(this.materials=o),Object.assign(this.globals,l),Object.assign(this.adapter,i);const{access:g,request:h}=this.adapter;g&&g.connect({mode:s,router:u,request:h}),a&&s!==S.Design?this.load(a):this.project=a}mode;globals={};modules={};adapter={request:f.request,jsonp:f.jsonp};apis={};dependencies={};materials={};library={};libraryLocales={};libraryLocaleMap={};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 D()?.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,a=window;a&&(a.CKEDITOR_VERSION=void 0),this.mode===S.Raw?await this.loadDependencies(a):await this.loadAssets(a),this.initMock(a),this.apis=He(n,o,this.adapter),ce(a),xe(n,a),e.platform!=="uniapp"&&this.initRouter(),this.triggerReady()}initMock(e){const t=D(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:a,nodeEnv:i,libraryLocales:l}=this,{libraryExports:c,libraryMap:u,materials:p,materialExports:d,materialMapLibrary:g,libraryLocaleMap:h}=be(t,a,i==="development");Object.assign(this.libraryLocaleMap,h);for(const m of c){const y=s[m],v=e[m];if(v)n[m]=v;else if(y)e[m]=n[m]=await y();else{const _=u[m]||[];for(const E of _)B(E)&&await Ae(E,f.url.append(E,{v:O})),N(E)&&await f.loadScript(f.url.append(E,{v:O}));n[m]=e[m]?.default||e[m]}const w=h[m];if(w){const _=s[w];l[w]=_?await _():e[w]}}if(i==="development"){for(const y of p)await f.loadScript(f.url.append(y,{v:O}));const m=this.materials||{};for(const y of d){const v=e[g[y]],w=v?.default||v,_=M.BUILT_IN_COMPONENTS[y];if(_)w&&_.forEach(E=>{o[E]=w[E]});else{const E=m[y]?(await m[y]()).default:e[y];E&&w&&(E.components||[]).forEach(A=>{o[A.name]=Re(A,w)})}}}}initRouter(){const{router:e,project:t,options:s,adapter:n}=this;if(!e)return;const o=t?.platform==="uniapp"?"pages":"page",{routeAppendTo:a,pageRouteName:i=o,routeMeta:l}=s,c=a?"":"/",u={path:`${c}${i}/:id`,name:F,component:Z},p={path:c,name:L,component:t?.homepage?Z:n.startupComponent||Ft,meta:l};if(e.hasRoute(F)&&e.removeRoute(F),e.hasRoute(L)&&e.removeRoute(L),s.enableStaticRoute){const d=t?.pages||[];re({name:i,prefix:c,pages:d,component:Z,loader:this.getRenderComponent.bind(this),homepage:t?.homepage}).forEach(h=>{a?e.addRoute(a,h):e.addRoute(h)}),t?.homepage||(a?e.addRoute(a,p):e.addRoute(p))}else a?(e.addRoute(a,u),e.addRoute(a,p)):(e.addRoute(u),e.addRoute(p))}install(e){const{libraryLocaleMap:t,libraryLocales:s}=this,n=e.config.globalProperties.installed||{};for(const[o,a]of Object.entries(this.library))if(!n[o]&&Ie(a)){const i=s[t[o]];e.use(a,{locale:i}),n[o]=!0}this.options.install&&e.use(this.options.install),this.adapter.access&&e.use(this.adapter.access),this.project?.platform!=="uniapp"&&this.mode!==S.Design&&this.initGlobals(this.project?.globals||{},{app:e,window,adapter:this.adapter,library:this.library,mode:this.mode}),this.mode!==S.Design&&this.project?.i18n&&this.initI18n(e,this.library,this.project.i18n),e.provide(fe,this),e.config.globalProperties.$provider=this,this.options.enhance&&e.use(this.options.enhance,this),this.mode===S.Design&&(e.config.errorHandler=(o,a,i)=>{const l=a?.$options.name,c=typeof o=="string"?o:o?.message||o?.msg||"未知错误",u=`[ ${l} ] ${c} ${i}`;console.error("[VTJ Error]:",{err:o,instance:a,info:i},o?.stack),this.adapter.notify&&this.adapter.notify(u,"组件渲染错误","error")}),e.config.globalProperties.installed=n}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 a of o){if(a.id===n)return a;if(a.children&&a.children.length){const i=s(n,a.children);if(i)return i}}};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:a}=this,i={mode:o,Vue:s.Vue,components:n,libs:s,apis:a,window,...t},l=K({getDsl:async c=>await this.getDsl(c)||null,getDslByUrl:async c=>await this.getDslByUrl(c)||null,options:i});return J({...i,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===S.Raw){const{vtjRawDir:o=".vtj/vue"}=this.options,a=`${o}/${e}.vue`,i=this.modules[a]||this.modules[`/src/pages/${e}.vue`];return i?(await i())?.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 $.defineAsyncComponent(async()=>{const s=await this.getDslByUrl(e);return s?(s.name=t||s.name,this.createDslRenderer(s).renderer):null})}definePluginComponent(e){return $.defineAsyncComponent(async()=>await le(e,window))}initGlobals(e,t){const s=Object.assign({adapter:this.adapter,window},t);Ht(e,s)}initI18n(e,t,s){qt(e,t,s)}}function Jt(r){const e=new ze(r);return{provider:e,onReady:s=>e.ready(s)}}function de(r={}){const 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 Kt(r,e=""){const{name:t,urls:s=[]}=r||{},n=s.map(i=>e+i),{css:o,js:a}=Ce(n);if(o.length&&oe(o),a.length)return await ie(a,t).catch(()=>{})}const Ve={type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:r=>r.data?.code===0},Gt=(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}),zt=(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 Vt(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=Gt(e),this.uploader=zt(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=>je(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 j=new f.Storage({type:"local",expired:0,prefix:"__VTJ_"});class Qt extends Q{init(e){const t=new M.ProjectModel(e),s=j.get(`project_${t.id}`),n=Object.assign(t.toDsl(),s||{});return j.save(`project_${t.id}`,n),Promise.resolve(n)}saveProject(e){const t=new M.ProjectModel(e);return j.save(`project_${t.id}`,t.toDsl()),Promise.resolve(!0)}saveMaterials(e,t){return j.save(`materials_${e.id}`,f.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return j.save(`file_${e.id}`,e),Promise.resolve(!0)}getFile(e){const t=j.get(`file_${e}`);return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return j.remove(`file_${e}`),Promise.resolve(!0)}saveHistory(e){return j.save(`history_${e.id}`,e),Promise.resolve(!0)}removeHistory(e){const t=j.get(`history_${e}`);if(t){const n=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,n),j.remove(`history_${e}`)}return Promise.resolve(!0)}getHistory(e){const t=j.get(`history_${e}`),s=new M.HistoryModel(t||{id:e});return Promise.resolve(s.toDsl())}getHistoryItem(e,t){const s=j.get(`history_${e}_${t}`);return Promise.resolve(s)}saveHistoryItem(e,t){return j.save(`history_${e}_${t.id}`,t),Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{j.remove(`history_${e}_${s}`)}),Promise.resolve(!0)}}class Qe extends Q{projects={};materials={};files={};histories={};historyItems={};init(e){const t=new M.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 M.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 M.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 Wt(){return q||(q=new Qe,q)}class Yt 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=Be;exports.ContextMode=S;exports.DATA_TYPES=Se;exports.HOMEPAGE_ROUTE_NAME=L;exports.HTML_TAGS=we;exports.JSCodeToString=at;exports.LIFE_CYCLES_LIST=et;exports.LocalService=Yt;exports.MemoryService=Qe;exports.NodeEnv=Ge;exports.PAGE_ROUTE_NAME=F;exports.Provider=ze;exports.REMOTE=tt;exports.StorageService=Qt;exports.VTJ_RENDERER_VERSION=O;exports.adoptStylesToInline=ot;exports.adoptedStyleSheets=z;exports.clearLoaderCache=_t;exports.compileScopedCSS=Pe;exports.createAccess=ut;exports.createAdapter=lt;exports.createAssetScripts=rt;exports.createAssetsCss=nt;exports.createDataSources=Ne;exports.createLoader=K;exports.createMemoryService=Wt;exports.createMenus=U;exports.createMetaApi=De;exports.createMock=Le;exports.createProvider=Jt;exports.createRenderer=J;exports.createSchemaApi=Fe;exports.createSchemaApis=He;exports.createServiceRequest=Vt;exports.defaultLoader=Je;exports.fillBasePath=x;exports.getMock=D;exports.getModifiers=ue;exports.getPlugin=le;exports.getRawComponent=Re;exports.isBuiltInTag=Me;exports.isCSSUrl=B;exports.isJSCode=ke;exports.isJSExpression=R;exports.isJSFunction=b;exports.isJSON=je;exports.isJSUrl=N;exports.isNativeTag=Te;exports.isVuePlugin=Ie;exports.loadCss=Ae;exports.loadCssUrl=oe;exports.loadEnhance=Kt;exports.loadScriptUrl=ie;exports.menusFilter=pe;exports.mockApi=Ue;exports.mockApis=xe;exports.mockCleanup=ce;exports.nodeRender=k;exports.parseDeps=be;exports.parseExpression=H;exports.parseFunction=P;exports.parseUrls=Ce;exports.providerKey=fe;exports.removeProdFlag=$e;exports.setupPageSetting=it;exports.toString=ne;exports.useAccess=Oe;exports.useMask=Dt;exports.useProvider=de;
|
14
|
+
}`:"(v) => {}"},n=t.__parseFunction(s),o=ue(R(e.modifiers)?t.__parseExpression(e.modifiers):e.modifiers),a=R(e.arg)?t.__parseExpression(e.arg):e.arg||"modelValue";return{[a]:t.__parseExpression(e.value),[`onUpdate:${a}`]: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(R(e))return{default:()=>ne(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const o=Tt(e),a=(i,l)=>!i||!n?{}:n?.id&&Object.keys(i).length?l?{[l]:i}:{[`scope_${n.id}`]:i}:l?{[l]:Object.create(null)}:{};return Object.entries(o).reduce((i,[l,{nodes:c,params:u,scope:p}])=>(i[l]=d=>{const m=u.length?f.pick(d??{},u):a(d,p);return c.map(h=>k(h,t.__clone(m),r,s,c))},i),{})}return null}function Tt(r){const e={};for(const t of r){const s=kt(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 kt(r="default"){return f.isString(r)?{name:r,params:[],scope:""}:{params:[],scope:"",...r}}function Ot(r,e,t){const{value:s,iterator:n}=r,{item:o="item",index:a="index"}=n||{};let i=t.__parseExpression(s)||[];return Number.isInteger(i)&&(i=new Array(i).fill(!0).map((l,c)=>c+1)),Array.isArray(i)?i.map((l,c)=>e(t.__clone({[o]:l,[a]:c}),c)):(console.warn("[vForRender]:",`${s?.value} is not a Arrary`),[])}const Z=$.defineComponent({name:"VtjPageContainer",async setup(){const r=de(),e=ve.useRoute(),t=e.meta.__vtj__||e.params.id,s=t?r.getPage(t):r.getHomepage(),n=s?await r.getRenderComponent(s.id):null,o=$.ref(Symbol());if(s){Object.assign(e.meta,s.meta||{},{cache:s.cache});const{useTitle:a}=r?.adapter;a&&a(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?$.h(r,{...e,key:t}):$.h("div","页面不存在")},activated(){this.meta.cache===!1&&(this.sid=Symbol())}}),Ft=$.defineComponent({name:"VtjStartupContainer",render(){return $.h("div","page not found!")}});function U(r,e,t=[]){const s=[];for(const n of t){const{id:o,title:a,icon:i,children:l,hidden:c,layout:u}=n;if(u){const p=U(r,e,l||[]);s.push(...p)}else{const p={id:o,title:a,icon:i,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 Dt(r){const{menuPathPrefix:e="",pageRouteName:t="page",disableMenusFilter:s=!1}=r||{},n=de(),o=ve.useRoute(),a=Oe(),i=$.ref(!1),l=$.ref(!1),c=n.project,u=(m,h)=>{i.value=!m?.mask,l.value=h?.pure??!!m?.pure};$.watchEffect(()=>{const{name:m,params:h,meta:g}=o;if(m===F){const y=n.getPage(h.id);u(y,g)}else if(m===L){const y=n.getHomepage();u(y,g)}else{const y=g.__vtj__;if(y){const v=n.getPage(y);u(v,g)}else i.value=!g.mask,l.value=!!g.pure}});const p=U(e,t,c?.pages),d=c?.config;return{disabled:i,logo:d?.logo,themeSwitchable:d?.themeSwitchable,title:d?.title||c?.description||c?.name||"VTJ App",menus:s?p:pe(p,a),pure:l}}function ee(r,e){const{id:t,title:s,meta:n}=r,{name:o="page",prefix:a="",component:i,routeMeta:l}=e;return{name:t,path:`${a}${o}/${t}`,component:i,meta:{title:s,...l,...n,__vtj__:t}}}function re(r){const{name:e="page",prefix:t="",pages:s=[],component:n,loader:o,routeMeta:a,homepage:i}=r,l=[];for(const c of s){const{id:u,title:p,dir:d,layout:m,children:h,meta:g}=c;if(d){const y=re({name:e,prefix:t,component:n,routeMeta:a,homepage:i,loader:o,pages:h||[]});l.push(...y)}else if(m){const y=re({name:e,prefix:t,component:n,routeMeta:a,homepage:i,loader:o,pages:h||[]}),v={name:`layout_${u}`,path:t,component:()=>o(u),meta:{title:p,...a,...g,__vtj__:u},children:y};l.push(v),l.push(ee(c,r))}else if(l.push(ee(c,r)),i===u){const y=ee(c,r);y.path="",y.name=`home_${u}`,l.push(y)}}return l}function Ht(r={},e){const{css:t,store:s,enhance:n}=r,{window:o,app:a,library:i={},adapter:l,mode:c}=e,{Pinia:u}=i;a.config.globalProperties.$libs=i,z(o,"global-css",t||""),u&&s&&xt(s,a,u),Ut(a,l,r),!l.access&&r.access&&Lt(r.access,a,c,l),Bt(a,r),n&&Nt(n,a,i)}function xt(r,e,t){const s=t.createPinia();if(e.use(s),b(r)&&r.value){const n=P(r,{},!1,!1,!0),o=t.defineStore("$store",n(e)||{});e.config.globalProperties.$store=o()}}function Lt(r,e,t,s){if(b(r)&&r.value){const n=P(r,{},!1,!1,!0),{alert:o,request:a}=s,i=new V({alert:o,storagePrefix:"__VTJ_APP_",...n(e)}),l=e.config.globalProperties.$router;i.connect({mode:t,router:l,request:a}),e.use(i)}}function Ut(r,e,t){if(!e.request)return;const{axios:s,request:n,response:o}=t;if(s&&b(s)&&s.value){const a=P(s,{},!1,!1,!0);e.request.setConfig(a(r))}if(n&&b(n)&&n.value){const a=P(n,{},!1,!1,!0),i=e.request;i.__unReq&&i.__unReq(),i.__unReq=e.request.useRequest(l=>a(l,r))}if(o&&b(o)&&o.value){const a=P(o,{},!1,!1,!0),i=e.request;i.__unRes&&i.__unRes(),i.__unRes=e.request.useResponse(l=>a(l,r))}}function Bt(r,e){const{beforeEach:t,afterEach:s}=e,n=r.config.globalProperties.$router;if(t&&b(t)&&t.value){const o=P(t,{},!1,!1,!0);n&&n.beforeEach((a,i,l)=>o(a,i,l,r))}if(s&&b(s)&&s.value){const o=P(s,{},!1,!1,!0);n&&n.afterEach((a,i,l)=>o(a,i,l,r))}}function Nt(r,e,t={}){b(r)&&r.value&&P(r,{},!1,!1,!0)(e,t)}function qt(r,e,t){if(!r||!e||!t)return;const{VueI18n:s}=e;if(s){const{locale:n,fallbackLocale:o,messages:a=[]}=t,i={};for(let c of a){const u=Object.keys(c).filter(p=>p!=="key");for(const p of u)i[p]||(i[p]={}),i[p][c.key]=c[p]}const l=s.createI18n({legacy:!1,locale:n,fallbackLocale:o,messages:i});r.use(l)}}const fe=Symbol("Provider");var Ge=(r=>(r.Production="production",r.Development="development",r))(Ge||{});class ze extends M.Base{constructor(e){super(),this.options=e;const{service:t,mode:s=S.Raw,dependencies:n,materials:o,project:a={},adapter:i={},globals:l={},modules:c={},router:u=null,materialPath:p="./",nodeEnv:d="development"}=e;this.mode=s,this.modules=c,this.service=t,this.router=u,this.materialPath=p,this.nodeEnv=d,n&&(this.dependencies=n),o&&(this.materials=o),Object.assign(this.globals,l),Object.assign(this.adapter,i);const{access:m,request:h}=this.adapter;m&&m.connect({mode:s,router:u,request:h}),a&&s!==S.Design?this.load(a):this.project=a}mode;globals={};modules={};adapter={request:f.request,jsonp:f.jsonp};apis={};dependencies={};materials={};library={};libraryLocales={};libraryLocaleMap={};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 D()?.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,a=window;a&&(a.CKEDITOR_VERSION=void 0),this.mode===S.Raw?await this.loadDependencies(a):await this.loadAssets(a),this.initMock(a),this.apis=He(n,o,this.adapter),ce(a),xe(n,a),e.platform!=="uniapp"&&this.initRouter(),this.triggerReady()}initMock(e){const t=D(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:a,nodeEnv:i,libraryLocales:l}=this,{libraryExports:c,libraryMap:u,materials:p,materialExports:d,materialMapLibrary:m,libraryLocaleMap:h}=be(t,a,i==="development");Object.assign(this.libraryLocaleMap,h);for(const g of c){const y=s[g],v=e[g];if(v)n[g]=v;else if(y)e[g]=n[g]=await y();else{const _=u[g]||[];for(const E of _)B(E)&&await Ae(E,f.url.append(E,{v:O})),N(E)&&await f.loadScript(f.url.append(E,{v:O}));n[g]=e[g]}const w=h[g];if(w){const _=s[w];l[w]=_?await _():e[w]}}if(i==="development"){for(const y of p)await f.loadScript(f.url.append(y,{v:O}));const g=this.materials||{};for(const y of d){const v=e[m[y]],w=v?.default||v,_=M.BUILT_IN_COMPONENTS[y];if(_)w&&_.forEach(E=>{o[E]=w[E]});else{const E=g[y]?(await g[y]()).default:e[y];E&&w&&(E.components||[]).forEach(A=>{o[A.name]=Re(A,w)})}}}}initRouter(){const{router:e,project:t,options:s,adapter:n}=this;if(!e)return;const o=t?.platform==="uniapp"?"pages":"page",{routeAppendTo:a,pageRouteName:i=o,routeMeta:l}=s,c=a?"":"/",u={path:`${c}${i}/:id`,name:F,component:Z},p={path:c,name:L,component:t?.homepage?Z:n.startupComponent||Ft,meta:l};if(e.hasRoute(F)&&e.removeRoute(F),e.hasRoute(L)&&e.removeRoute(L),s.enableStaticRoute){const d=t?.pages||[];re({name:i,prefix:c,pages:d,component:Z,loader:this.getRenderComponent.bind(this),homepage:t?.homepage}).forEach(h=>{a?e.addRoute(a,h):e.addRoute(h)}),t?.homepage||(a?e.addRoute(a,p):e.addRoute(p))}else a?(e.addRoute(a,u),e.addRoute(a,p)):(e.addRoute(u),e.addRoute(p))}install(e){const{libraryLocaleMap:t,libraryLocales:s}=this,n=e.config.globalProperties.installed||{};for(const[o,a]of Object.entries(this.library))if(!n[o]&&Ie(a)){const i=s[t[o]];e.use(a,{locale:i}),n[o]=!0}this.options.install&&e.use(this.options.install),this.adapter.access&&e.use(this.adapter.access),this.project?.platform!=="uniapp"&&this.mode!==S.Design&&this.initGlobals(this.project?.globals||{},{app:e,window,adapter:this.adapter,library:this.library,mode:this.mode}),this.mode!==S.Design&&this.project?.i18n&&this.initI18n(e,this.library,this.project.i18n),e.provide(fe,this),e.config.globalProperties.$provider=this,this.options.enhance&&e.use(this.options.enhance,this),this.mode===S.Design&&(e.config.errorHandler=(o,a,i)=>{const l=a?.$options.name,c=typeof o=="string"?o:o?.message||o?.msg||"未知错误",u=`[ ${l} ] ${c} ${i}`;console.error("[VTJ Error]:",{err:o,instance:a,info:i},o?.stack),this.adapter.notify&&this.adapter.notify(u,"组件渲染错误","error")}),e.config.globalProperties.installed=n}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 a of o){if(a.id===n)return a;if(a.children&&a.children.length){const i=s(n,a.children);if(i)return i}}};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:a}=this,i={mode:o,Vue:s.Vue,components:n,libs:s,apis:a,window,...t},l=K({getDsl:async c=>await this.getDsl(c)||null,getDslByUrl:async c=>await this.getDslByUrl(c)||null,options:i});return J({...i,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===S.Raw){const{vtjRawDir:o=".vtj/vue"}=this.options,a=`${o}/${e}.vue`,i=this.modules[a]||this.modules[`/src/pages/${e}.vue`];return i?(await i())?.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 $.defineAsyncComponent(async()=>{const s=await this.getDslByUrl(e);return s?(s.name=t||s.name,this.createDslRenderer(s).renderer):null})}definePluginComponent(e){return $.defineAsyncComponent(async()=>await le(e,window))}initGlobals(e,t){const s=Object.assign({adapter:this.adapter,window},t);Ht(e,s)}initI18n(e,t,s){qt(e,t,s)}}function Jt(r){const e=new ze(r);return{provider:e,onReady:s=>e.ready(s)}}function de(r={}){const 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 Kt(r,e=""){const{name:t,urls:s=[]}=r||{},n=s.map(i=>e+i),{css:o,js:a}=Ce(n);if(o.length&&oe(o),a.length)return await ie(a,t).catch(()=>{})}const Ve={type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:r=>r.data?.code===0},Gt=(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}),zt=(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 Vt(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=Gt(e),this.uploader=zt(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=>je(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 j=new f.Storage({type:"local",expired:0,prefix:"__VTJ_"});class Qt extends Q{init(e){const t=new M.ProjectModel(e),s=j.get(`project_${t.id}`),n=Object.assign(t.toDsl(),s||{});return j.save(`project_${t.id}`,n),Promise.resolve(n)}saveProject(e){const t=new M.ProjectModel(e);return j.save(`project_${t.id}`,t.toDsl()),Promise.resolve(!0)}saveMaterials(e,t){return j.save(`materials_${e.id}`,f.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return j.save(`file_${e.id}`,e),Promise.resolve(!0)}getFile(e){const t=j.get(`file_${e}`);return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return j.remove(`file_${e}`),Promise.resolve(!0)}saveHistory(e){return j.save(`history_${e.id}`,e),Promise.resolve(!0)}removeHistory(e){const t=j.get(`history_${e}`);if(t){const n=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,n),j.remove(`history_${e}`)}return Promise.resolve(!0)}getHistory(e){const t=j.get(`history_${e}`),s=new M.HistoryModel(t||{id:e});return Promise.resolve(s.toDsl())}getHistoryItem(e,t){const s=j.get(`history_${e}_${t}`);return Promise.resolve(s)}saveHistoryItem(e,t){return j.save(`history_${e}_${t.id}`,t),Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{j.remove(`history_${e}_${s}`)}),Promise.resolve(!0)}}class Qe extends Q{projects={};materials={};files={};histories={};historyItems={};init(e){const t=new M.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 M.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 M.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 Wt(){return q||(q=new Qe,q)}class Yt 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=Be;exports.ContextMode=S;exports.DATA_TYPES=Se;exports.HOMEPAGE_ROUTE_NAME=L;exports.HTML_TAGS=we;exports.JSCodeToString=at;exports.LIFE_CYCLES_LIST=et;exports.LocalService=Yt;exports.MemoryService=Qe;exports.NodeEnv=Ge;exports.PAGE_ROUTE_NAME=F;exports.Provider=ze;exports.REMOTE=tt;exports.StorageService=Qt;exports.VTJ_RENDERER_VERSION=O;exports.adoptStylesToInline=ot;exports.adoptedStyleSheets=z;exports.clearLoaderCache=_t;exports.compileScopedCSS=Pe;exports.createAccess=ut;exports.createAdapter=lt;exports.createAssetScripts=rt;exports.createAssetsCss=nt;exports.createDataSources=Ne;exports.createLoader=K;exports.createMemoryService=Wt;exports.createMenus=U;exports.createMetaApi=De;exports.createMock=Le;exports.createProvider=Jt;exports.createRenderer=J;exports.createSchemaApi=Fe;exports.createSchemaApis=He;exports.createServiceRequest=Vt;exports.defaultLoader=Je;exports.fillBasePath=x;exports.getMock=D;exports.getModifiers=ue;exports.getPlugin=le;exports.getRawComponent=Re;exports.isBuiltInTag=Me;exports.isCSSUrl=B;exports.isJSCode=ke;exports.isJSExpression=R;exports.isJSFunction=b;exports.isJSON=je;exports.isJSUrl=N;exports.isNativeTag=Te;exports.isVuePlugin=Ie;exports.loadCss=Ae;exports.loadCssUrl=oe;exports.loadEnhance=Kt;exports.loadScriptUrl=ie;exports.menusFilter=pe;exports.mockApi=Ue;exports.mockApis=xe;exports.mockCleanup=ce;exports.nodeRender=k;exports.parseDeps=be;exports.parseExpression=H;exports.parseFunction=P;exports.parseUrls=Ce;exports.providerKey=fe;exports.removeProdFlag=$e;exports.setupPageSetting=it;exports.toString=ne;exports.useAccess=Oe;exports.useMask=Dt;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.29
|
11
11
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
12
12
|
*/
|
13
|
-
const D = "0.13.
|
13
|
+
const D = "0.13.29";
|
14
14
|
var w = /* @__PURE__ */ ((n) => (n.Runtime = "Runtime", n.Design = "Design", n.Raw = "Raw", n.VNode = "VNode", n))(w || {});
|
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((p) => !!p.enabled), r = [], o = [], a = [], i = [], l = {}, c = {}, u = [], f = {};
|
169
169
|
return s.forEach(
|
170
|
-
({ urls: p, assetsUrl:
|
170
|
+
({ urls: p, assetsUrl: h, library: d, assetsLibrary: m, localeLibrary: g }) => {
|
171
171
|
p?.forEach((y) => {
|
172
172
|
V(y) && r.push(ut(y, t)), G(y) && o.push(y);
|
173
|
-
}), d && (i.push(d), l[d] = B(p || [], e), g && (c[d] = g)),
|
173
|
+
}), d && (i.push(d), l[d] = B(p || [], e), g && (c[d] = g)), h && a.push(h), m && u.push(m), d && m && (f[m] = 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 h = c.substring(p, f).trim();
|
243
|
+
if (!h) {
|
244
244
|
f++;
|
245
245
|
continue;
|
246
246
|
}
|
247
247
|
const d = f + 1;
|
248
|
-
let
|
249
|
-
for (f++; f < c.length &&
|
250
|
-
c[f] === "{" ?
|
248
|
+
let m = 1;
|
249
|
+
for (f++; f < c.length && m > 0; )
|
250
|
+
c[f] === "{" ? m++ : c[f] === "}" && m--, f++;
|
251
251
|
const g = c.substring(d, f - 1);
|
252
252
|
u.push({
|
253
253
|
type: "rule",
|
254
|
-
selector:
|
254
|
+
selector: h,
|
255
255
|
content: g.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, p) => {
|
263
|
-
const
|
264
|
-
return
|
263
|
+
const h = f.trim(), d = p.trim();
|
264
|
+
return h ? `${h}[${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 [, p,
|
272
|
-
return d ? `${d}[${e}]${
|
271
|
+
const [, p, h = ""] = f, d = p.trim();
|
272
|
+
return d ? `${d}[${e}]${h}` : u;
|
273
273
|
}
|
274
274
|
return `${u}[${e}]`;
|
275
275
|
}, a = (c) => r(c).split(",").map((f) => o(f)).filter((f) => f.trim()).join(", "), i = (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 p = t(u.inner),
|
284
|
-
return `${u.rule} { ${
|
283
|
+
const p = t(u.inner), h = i(p);
|
284
|
+
return `${u.rule} { ${h} }`;
|
285
285
|
} catch {
|
286
286
|
return u.content;
|
287
287
|
}
|
@@ -709,8 +709,8 @@ function Pt(n, e) {
|
|
709
709
|
Object.assign(l, { data: u, params: p, query: c });
|
710
710
|
try {
|
711
711
|
return n.mock(i(l));
|
712
|
-
} catch (
|
713
|
-
return console.warn("[mockApi]", o, l,
|
712
|
+
} catch (h) {
|
713
|
+
return console.warn("[mockApi]", o, l, h), null;
|
714
714
|
}
|
715
715
|
});
|
716
716
|
} catch (r) {
|
@@ -849,24 +849,27 @@ function ie(n) {
|
|
849
849
|
i.value.css || "",
|
850
850
|
!0
|
851
851
|
), c.state = kt(e, i.value.state ?? {}, c);
|
852
|
-
const p = Ft(e, i.value.computed ?? {}, c),
|
852
|
+
const p = Ft(e, i.value.computed ?? {}, c), h = Mt(i.value.methods ?? {}, c), d = Ot(e, i.value.inject, c);
|
853
853
|
for (const [y, _] of Object.entries(d || {}))
|
854
854
|
d[y] = e.inject(y, _);
|
855
|
-
const
|
855
|
+
const m = Dt(
|
856
856
|
i.value.dataSources || {},
|
857
857
|
c
|
858
858
|
), g = {
|
859
859
|
...d,
|
860
860
|
...p,
|
861
|
-
...
|
862
|
-
...
|
861
|
+
...h,
|
862
|
+
...m
|
863
863
|
};
|
864
864
|
return c.setup(g, e), Tt(e, i.value.watch ?? [], c), {
|
865
|
-
vtj: c
|
865
|
+
vtj: c,
|
866
|
+
state: c.state,
|
867
|
+
...p,
|
868
|
+
...h
|
866
869
|
};
|
867
870
|
},
|
868
871
|
emits: At(i.value.emits),
|
869
|
-
expose: ["vtj"],
|
872
|
+
expose: ["vtj", ...i.value.expose || []],
|
870
873
|
render() {
|
871
874
|
if (!i.value.nodes) return null;
|
872
875
|
const f = i.value.nodes || [];
|
@@ -1036,7 +1039,7 @@ function Ps() {
|
|
1036
1039
|
}
|
1037
1040
|
function O(n, e, t = z, s = xt, r = [], o = !1) {
|
1038
1041
|
if (!n || !n.name || n.invisible) return null;
|
1039
|
-
const a = t.getCurrentInstance()?.appContext, { id: i = null, directives: l = [] } = n, { vIf: c, vElseIf: u, vElse: f, vFor: p, vShow:
|
1042
|
+
const a = t.getCurrentInstance()?.appContext, { id: i = null, directives: l = [] } = n, { vIf: c, vElseIf: u, vElse: f, vFor: p, vShow: h, vModels: d, vBind: m, vHtml: g, others: y } = He(l);
|
1040
1043
|
if (!o && (u || f))
|
1041
1044
|
return null;
|
1042
1045
|
if (c && !Lt(c, e))
|
@@ -1057,9 +1060,9 @@ function O(n, e, t = z, s = xt, r = [], o = !1) {
|
|
1057
1060
|
})(), C = Ut(i, n.props ?? {}, v), qe = qt(t, n.events ?? {}, v);
|
1058
1061
|
if (n.name === "slot")
|
1059
1062
|
return Kt(t, n, C, v, s);
|
1060
|
-
|
1063
|
+
m && Object.assign(C, v.__parseExpression(m.value)), h && (C.style = Object.assign(
|
1061
1064
|
C.style ?? {},
|
1062
|
-
Gt(
|
1065
|
+
Gt(h, v)
|
1063
1066
|
)), g && Object.assign(C, Vt(g, v)), d.forEach((b) => {
|
1064
1067
|
Object.assign(C, Qt(t, b, v));
|
1065
1068
|
});
|
@@ -1215,9 +1218,9 @@ function Wt(n, e, t, s, r) {
|
|
1215
1218
|
} : l ? { [l]: /* @__PURE__ */ Object.create(null) } : {};
|
1216
1219
|
return Object.entries(o).reduce(
|
1217
1220
|
(i, [l, { nodes: c, params: u, scope: f }]) => (i[l] = (p) => {
|
1218
|
-
const
|
1221
|
+
const h = u.length ? st(p ?? {}, u) : a(p, f);
|
1219
1222
|
return c.map(
|
1220
|
-
(d) => O(d, t.__clone(
|
1223
|
+
(d) => O(d, t.__clone(h), n, s, c)
|
1221
1224
|
);
|
1222
1225
|
}, i),
|
1223
1226
|
{}
|
@@ -1314,24 +1317,24 @@ function Cs(n) {
|
|
1314
1317
|
menuPathPrefix: e = "",
|
1315
1318
|
pageRouteName: t = "page",
|
1316
1319
|
disableMenusFilter: s = !1
|
1317
|
-
} = n || {}, r = Ne(), o = Ae(), a = St(), i = oe(!1), l = oe(!1), c = r.project, u = (
|
1318
|
-
i.value = !
|
1320
|
+
} = n || {}, r = Ne(), o = Ae(), a = St(), i = oe(!1), l = oe(!1), c = r.project, u = (h, d) => {
|
1321
|
+
i.value = !h?.mask, l.value = d?.pure ?? !!h?.pure;
|
1319
1322
|
};
|
1320
1323
|
rt(() => {
|
1321
|
-
const { name:
|
1322
|
-
if (
|
1324
|
+
const { name: h, params: d, meta: m } = o;
|
1325
|
+
if (h === T) {
|
1323
1326
|
const g = r.getPage(d.id);
|
1324
|
-
u(g,
|
1325
|
-
} else if (
|
1327
|
+
u(g, m);
|
1328
|
+
} else if (h === N) {
|
1326
1329
|
const g = r.getHomepage();
|
1327
|
-
u(g,
|
1330
|
+
u(g, m);
|
1328
1331
|
} else {
|
1329
|
-
const g =
|
1332
|
+
const g = m.__vtj__;
|
1330
1333
|
if (g) {
|
1331
1334
|
const y = r.getPage(g);
|
1332
|
-
u(y,
|
1335
|
+
u(y, m);
|
1333
1336
|
} else
|
1334
|
-
i.value = !
|
1337
|
+
i.value = !m.mask, l.value = !!m.pure;
|
1335
1338
|
}
|
1336
1339
|
});
|
1337
1340
|
const f = K(
|
@@ -1373,7 +1376,7 @@ function le(n) {
|
|
1373
1376
|
homepage: i
|
1374
1377
|
} = n, l = [];
|
1375
1378
|
for (const c of s) {
|
1376
|
-
const { id: u, title: f, dir: p, layout:
|
1379
|
+
const { id: u, title: f, dir: p, layout: h, children: d, meta: m } = c;
|
1377
1380
|
if (p) {
|
1378
1381
|
const g = le({
|
1379
1382
|
name: e,
|
@@ -1385,7 +1388,7 @@ function le(n) {
|
|
1385
1388
|
pages: d || []
|
1386
1389
|
});
|
1387
1390
|
l.push(...g);
|
1388
|
-
} else if (
|
1391
|
+
} else if (h) {
|
1389
1392
|
const g = le({
|
1390
1393
|
name: e,
|
1391
1394
|
prefix: t,
|
@@ -1401,7 +1404,7 @@ function le(n) {
|
|
1401
1404
|
meta: {
|
1402
1405
|
title: f,
|
1403
1406
|
...a,
|
1404
|
-
...
|
1407
|
+
...m,
|
1405
1408
|
__vtj__: u
|
1406
1409
|
},
|
1407
1410
|
children: g
|
@@ -1509,8 +1512,8 @@ class ls extends ze {
|
|
1509
1512
|
/* Development */
|
1510
1513
|
} = e;
|
1511
1514
|
this.mode = s, this.modules = c, this.service = t, this.router = u, this.materialPath = f, this.nodeEnv = p, r && (this.dependencies = r), o && (this.materials = o), Object.assign(this.globals, l), Object.assign(this.adapter, i);
|
1512
|
-
const { access:
|
1513
|
-
|
1515
|
+
const { access: h, request: d } = this.adapter;
|
1516
|
+
h && h.connect({ mode: s, router: u, request: d }), a && s !== w.Design ? this.load(a) : this.project = a;
|
1514
1517
|
}
|
1515
1518
|
mode;
|
1516
1519
|
// 当前运行模式(设计/源码/预览等)
|
@@ -1597,7 +1600,7 @@ class ls extends ze {
|
|
1597
1600
|
libraryMap: u,
|
1598
1601
|
materials: f,
|
1599
1602
|
materialExports: p,
|
1600
|
-
materialMapLibrary:
|
1603
|
+
materialMapLibrary: h,
|
1601
1604
|
libraryLocaleMap: d
|
1602
1605
|
} = ft(
|
1603
1606
|
t,
|
@@ -1606,19 +1609,19 @@ class ls extends ze {
|
|
1606
1609
|
/* Development */
|
1607
1610
|
);
|
1608
1611
|
Object.assign(this.libraryLocaleMap, d);
|
1609
|
-
for (const
|
1610
|
-
const g = s[
|
1612
|
+
for (const m of c) {
|
1613
|
+
const g = s[m], y = e[m];
|
1611
1614
|
if (y)
|
1612
|
-
r[
|
1615
|
+
r[m] = y;
|
1613
1616
|
else if (g)
|
1614
|
-
e[
|
1617
|
+
e[m] = r[m] = await g();
|
1615
1618
|
else {
|
1616
|
-
const v = u[
|
1619
|
+
const v = u[m] || [];
|
1617
1620
|
for (const S of v)
|
1618
1621
|
G(S) && await mt(S, F.append(S, { v: D })), V(S) && await Se(F.append(S, { v: D }));
|
1619
|
-
r[
|
1622
|
+
r[m] = e[m];
|
1620
1623
|
}
|
1621
|
-
const _ = d[
|
1624
|
+
const _ = d[m];
|
1622
1625
|
if (_) {
|
1623
1626
|
const v = s[_];
|
1624
1627
|
l[_] = v ? await v() : e[_];
|
@@ -1627,15 +1630,15 @@ class ls extends ze {
|
|
1627
1630
|
if (i === "development") {
|
1628
1631
|
for (const g of f)
|
1629
1632
|
await Se(F.append(g, { v: D }));
|
1630
|
-
const
|
1633
|
+
const m = this.materials || {};
|
1631
1634
|
for (const g of p) {
|
1632
|
-
const y = e[
|
1635
|
+
const y = e[h[g]], _ = y?.default || y, v = Ge[g];
|
1633
1636
|
if (v)
|
1634
1637
|
_ && v.forEach((S) => {
|
1635
1638
|
o[S] = _[S];
|
1636
1639
|
});
|
1637
1640
|
else {
|
1638
|
-
const S =
|
1641
|
+
const S = m[g] ? (await m[g]()).default : e[g];
|
1639
1642
|
S && _ && (S.components || []).forEach((P) => {
|
1640
1643
|
o[P.name] = pt(P, _);
|
1641
1644
|
});
|
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.29",
|
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.29",
|
25
|
+
"@vtj/utils": "~0.13.29"
|
26
26
|
},
|
27
27
|
"devDependencies": {
|
28
28
|
"vue": "~3.5.5",
|
29
29
|
"vue-router": "~4.5.0",
|
30
|
-
"@vtj/
|
31
|
-
"@vtj/icons": "~0.13.
|
32
|
-
"@vtj/
|
30
|
+
"@vtj/ui": "~0.13.29",
|
31
|
+
"@vtj/icons": "~0.13.29",
|
32
|
+
"@vtj/cli": "~0.12.13"
|
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.28
|
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.28";
|