@vtj/renderer 0.11.5 → 0.11.7
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 +3 -3
- package/dist/index.mjs +92 -96
- package/package.json +5 -5
- package/types/version.d.ts +2 -2
package/dist/index.cjs
CHANGED
@@ -2,9 +2,9 @@
|
|
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.11.
|
5
|
+
* @version 0.11.7
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
|
-
*/const R="0.11.
|
8
|
-
`)+i;const a=`with(${t?"{}":"$scope || {}"}) { ${i} }`;return new Function("$scope",a)(e)}catch(n){if(l.logger.error("parseExpression.error",n,r,e?.__self??e),s)throw n}}function D(r,e,t=!1,s=!1){const n=M(r,e,t,s);if(typeof n!="function"&&(l.logger.error("parseFunction.error","not a function",r,e?.__self??e),s))throw new Error(`"${r.value}" not a function`);return n}function w(r){return r&&r.type==="JSExpression"}function T(r){return typeof r=="object"&&r&&r.type==="JSFunction"}function _e(r){return w(r)||T(r)}function qe(r){return _e(r)?r.value:JSON.stringify(r)}const Je={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ_",unauthorized:void 0,auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!",noPermissionMessage:"无权限访问该页面",appName:""},W=Symbol("access");class Y{options;data=null;mode=y.Raw;interceptResponse=!0;constructor(e){this.options=Object.assign({},Je,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===y.Raw&&this.setGuard(s),n&&this.setRequest(n)}login(e){const{storageKey:t,storagePrefix:s,session:n,authKey:i}=this.options;this.setData(e),this.data&&(l.storage.save(t,e,{type:"local",prefix:s}),n&&l.cookie.set(i,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:n}=this.options;this.data=null,l.storage.remove(e,{type:"local",prefix:t}),s&&l.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):l.toArray(e).every(i=>s[i]||s[t+"."+i])}some(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return l.toArray(e).some(i=>s[i]||s[t+"."+i])}install(e){e.config.globalProperties.$access||(e.config.globalProperties.$access=this,e.provide(W,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=>l.unRSA(n,t));try{this.data=JSON.parse(s.join(""))}catch(n){console.warn(n)}return}if(typeof e=="string")try{const s=t?l.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=l.storage.get(e,{type:"local",prefix:t});this.setData(s||null)}isLogined(){const{session:e,authKey:t}=this.options;return e&&t?!!l.cookie.get(t):!!this.getToken()}hasRoutePermission(e){if(e.name===C){const t=e.params.id;return t&&this.can(t)}return!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),l.isFunction(n)?(n(),t(!1)):l.isString(n)?t(n):t(!1)}}t(!1),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}=this.options;return e.status===t||e.data?.code===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 l.delay(150),await t(e,{title:"提示",type:"warning"}).catch(()=>!1)):!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 Se(){return S.inject(W,null)}function Ke(r={}){const{notify:e,loading:t,settings:s={},Startup:n,access:i,useTitle:a,alert:o}=r;let c=null;return{request:l.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:d=>d.data?.code===0||!!d.data?.success,failMessage:!0,showError:d=>{e&&e(d||"未知错误")},showLoading:()=>{c&&c.close(),t&&(c=t())},hideLoading:()=>{c&&(c.close(),c=null)},...s}}),jsonp:l.jsonp,notify:e,loading:t,useTitle:a,startupComponent:n,access:i?new Y({alert:o,...i}):void 0}}function Ve(r={}){return new Y(r)}function we(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?M(r.headers,{},!0):void 0,i={url:r.url,method:r.method,settings:{...r.settings,headers:n}};return(a,o)=>(delete i.data,s.send(l.merge(i,o||{},{data:a})))}}function je(r,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:n}=r;return(i,a)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,n,i,a)}}function Ee(r=[],e=[],t){const s={};for(const n of r)s[n.id]=we(n,t);for(const n of e)s[n.id]=je(n,t);return s}async function Pe(r=[],e=window){const t=A(e);t&&(Q(e),r.forEach(s=>$e(t,s)))}function be(r,e=window){const t=T(r.mockTemplate)&&r.mockTemplate.value?D(r.mockTemplate,{},!0):void 0,s=A(e);return async(...n)=>{let i={};if(t)try{i=await t.apply(t,n)}catch(a){l.logger.warn("模拟数据模版异常",a)}return s?.mock(i)}}function $e(r,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const n=l.pathToRegexp(`${t}(.*)`),i=l.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=M(s,{},!0);r.mock(n,o=>{const c=l.url.parse(o.url)||{},u=o.body instanceof FormData?l.formDataToJson(o.body):o.body,d=i(o.url)?.params;return Object.assign(o,{data:u,params:c,query:d}),r.mock(a(o))})}}function Q(r=window){const e=A(r);e&&(e._mocked={})}class Re{__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=N){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&&K.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){K.forEach(e=>{this[e]=null}),this.__reset()}__reset(){this.__refs={},this.$refs={},this.__contextRefs={},this.context={}}__parseFunction(e){if(e)if(this.__mode===y.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return D({type:s,value:n},this)}else return D(e,this)}__parseExpression(e){if(e)if(this.__mode===y.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return M({type:s,value:n},this)}else return M(e,this)}__ref(e=null,t){if(this.__mode!==y.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await l.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,y.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 i=new Set([].concat(n,s));return Array.from(i)}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 H(r){const{Vue:e=N,mode:t=y.Runtime,components:s={},libs:n={},apis:i={},loader:a}=r,o=e.computed(()=>r.dsl),c={$components:s,$libs:n,$apis:i},u=new Re({mode:t,dsl:o.value,attrs:c}),d=e.defineComponent({name:o.value.name,props:{...Ge(o.value.props??[],u)},setup(f){u.$props=f,u.props=f,o.value.id&&G(r.window||window,o.value.id,o.value.css||""),u.state=We(e,o.value.state??{},u);const g=Ye(e,o.value.computed??{},u),m=Qe(o.value.methods??{},u),h=Xe(e,o.value.inject,u),p=Ce(o.value.dataSources||{},u),j={...h,...g,...m,...p};return u.setup(j,e),Ze(e,o.value.watch??[],u),{vtj:u}},emits:ze(o.value.emits),expose:["vtj"],render(){if(!o.value.nodes)return null;const f=o.value.nodes||[];return f.length===1?I(f[0],u,e,a):f.map(g=>I(g,u,e,a))},...et(o.value.lifeCycles??{},u)});return{renderer:e.markRaw(d),context:u}}function ze(r=[]){return r.map(e=>l.isString(e)?e:e.name)}function Ge(r=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(i=>oe[i]):void 0;return r.map(s=>l.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:w(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 We(r,e,t){return r.reactive(Object.keys(e||{}).reduce((s,n)=>{let i=e[n];return w(i)?i=t.__parseExpression(i):T(i)&&(i=t.__parseFunction(i)),s[n]=i,s},{}))}function Ye(r,e,t){return Object.entries(e??{}).reduce((s,[n,i])=>(s[n]=r.computed(t.__parseFunction(i)),s),{})}function Qe(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}function Xe(r,e=[],t){return e.reduce((s,n)=>{const{name:i,from:a}=n||{};n.default;const o=w(a)?t.__parseExpression(a)||i:a??i,c=w(n.default)?t.__parseExpression(n.default):n.default??null;return s[i]=r.inject(o,c),s},{})}function Ce(r,e){return Object.keys(r).reduce((t,s)=>{const n=r[s];if(n.type==="mock")t[s]=be(n);else if(n.ref){const i=e.$apis[n.ref],a=T(n.transform)?n.transform.value?e.__parseFunction(n.transform):void 0:n.transform;t[s]=async(...o)=>{const c=await i.apply(e,o);return a?a(c):c}}return t},{})}function Ze(r,e=[],t){e.forEach(s=>{r.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function et(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}let J=[],$={};const Ae=r=>r;async function X(r,e=window){const{urls:t=[],library:s}=r,n=t.filter(o=>B(o));if(n.length===0||!s)return null;const i=t.filter(o=>U(o));return i.length&&he(i,e),await me(n,s,e).catch(o=>(console.warn("loadScriptUrl error",n,s,o),null))}function x(r){const{getDsl:e,getDslByUrl:t,options:s}=r;return s.window&&(J.forEach(n=>{delete s.window[n]}),J=[]),(n,i,a=N)=>{if(!i||typeof i=="string")return n;if(i.type==="Schema"&&i.id){let o=$[i.id];return o?l.cloneDeep(o):(o=$[i.id]=a.defineAsyncComponent(async()=>{const c=await e(i.id);return c&&(c.name=n),c?H({...s,Vue:a,dsl:c,mode:y.Runtime,loader:x(r)}).renderer:null}),o)}if(i.type==="UrlSchema"&&i.url){let o=$[i.url];return o||(o=$[i.url]=a.defineAsyncComponent(async()=>{const c=await t(i.url);return c&&(c.name=n),c?H({...s,Vue:a,dsl:c,mode:y.Runtime,loader:x(r)}).renderer:null}),o)}if(i.type==="Plugin"){let o=i.library?$[i.library]:null;return o||(i.library&&J.push(i.library),o=$[i.library||Symbol()]=a.defineAsyncComponent(async()=>{const c=await X(i,s.window);return c||(console.warn("getPlugin result is null",i),null)}),o)}return n}}function tt(){$={}}function I(r,e,t=N,s=Ae){if(!r||!r.name||r.invisible)return null;const n=t.getCurrentInstance()?.appContext,{id:i=null,directives:a=[]}=r,{vIf:o,vFor:c,vShow:u,vModels:d,vBind:f,vHtml:g,others:m}=rt(a);if(o&&!nt(o,e))return null;const h=p=>{const j=p.$components,v=(()=>{if(r.name==="component")return it(p,r.props?.is);if(r.name==="slot")return r.name;const P=s(r.name,r.from,t);return l.isString(P)?ve(P)||ye(P)?P:j[P]??n?.app?.component(P)??P:P})(),E=ot(i,r.props??{},p),De=at(t,r.events??{},p);if(r.name==="slot")return ct(t,r,E,p,s);f&&Object.assign(E,p.__parseExpression(f.value)),u&&(E.style=Object.assign(E.style??{},ut(u,p))),g&&Object.assign(E,pt(g,p)),d.forEach(P=>{Object.assign(E,dt(t,P,p))});const He=ft(t,r.children??[],p,s,r);let q=t.createVNode(v,{...E,...De},He);const se=n?st(n,m,p):[];return se.length&&(q=t.withDirectives(q,se)),q};return c?gt(c,h,e):h(e)}function st(r,e,t){const s=r.app;return e.map(n=>{const i=typeof n.name=="string"?s.directive(n.name):t.__parseExpression(n.name);if(!i)return null;const a=[i];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 rt(r=[]){const e=r.find(c=>l.camelCase(c.name)==="vIf"),t=r.find(c=>l.camelCase(c.name)==="vFor"),s=r.find(c=>l.camelCase(c.name)==="vShow"),n=r.find(c=>l.camelCase(c.name)==="vBind"),i=r.find(c=>l.camelCase(c.name)==="vHtml"),a=r.filter(c=>l.camelCase(c.name)==="vModel"),o=r.filter(c=>!ie.includes(l.camelCase(c.name)));return{vIf:e,vFor:t,vShow:s,vModels:a,vBind:n,others:o,vHtml:i}}function nt(r,e){return!!e.__parseExpression(r.value)}function it(r,e){return e?w(e)?r.__parseExpression(e):e:"div"}function ot(r,e,t){const s=V(e,t);return s.ref=t.__ref(r,s.ref),s}function V(r,e){return w(r)?e.__parseExpression(r):T(r)?e.__parseFunction(r):Array.isArray(r)?r.map(t=>V(t,e)):typeof r=="object"?Object.keys(r||{}).reduce((t,s)=>{let n=r[s];return t[s]=V(n,e),t},{}):r}function at(r,e,t){const s=["passive","capture","once"],n={capture:"Capture",once:"Once",passive:"OnceCapture"};return Object.keys(e||{}).reduce((i,a)=>{const o=e[a],c=Z(o.modifiers),u=c.find(g=>s.includes(g)),d="on"+l.upperFirst(a)+(u&&n[u]||""),f=t.__parseFunction(o.handler);return f&&(i[d]=r.withModifiers(f,c)),i},{})}function Z(r={},e=!1){const t=Object.keys(r);return e?t.map(s=>"."+s):t}function ct(r,e,t,s,n){const{children:i}=e,a=lt(e,s),o=s.$slots?.[a.name];return o?o(t):i?l.isString(i)?r.createTextVNode(i):w(i)?r.createTextVNode(z(s.__parseExpression(i))):Array.isArray(i)?i.map(c=>I(c,s,r,n)):null:null}function lt(r,e){const{props:t}=r,s=t?.name||"default";return{name:w(s)?e.__parseExpression(s):s,params:[]}}function ut(r,e){return e.__parseExpression(r.value)?{}:{display:"none"}}function pt(r,e){return{innerHTML:e.__parseExpression(r.value)||""}}function dt(r,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
7
|
+
*/const R="0.11.7";var y=(r=>(r.Runtime="Runtime",r.Design="Design",r.Raw="Raw",r.VNode="VNode",r))(y||{});const K=["$el","$emit","$nextTick","$parent","$root","$attrs","$slots","$watch","$props","$options","$forceUpdate"],Ne=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeUnmount","unmounted","errorCaptured","renderTracked","renderTriggered","activated","deactivated"],ie=["vIf","vShow","vModel","vFor","vBind","vHtml"],oe={String,Number,Boolean,Array,Object,Function,Date},C="VtjPage",F="VtjHomepage",ae="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".split(","),ce="component,slot".split(",");function k(r,e){return r.map(t=>l.isUrl(t)||t.startsWith("/")?t:`${e}${t}`)}function U(r){return/\.css$/.test(r)}function B(r){return/\.js$/.test(r)}function le(r){return/\.json$/.test(r)}function Ue(r){return r.map(e=>`<script src="${l.url.append(e,{v:R})}"><\/script>`).join("")}function Be(r=[]){return r.map(e=>`<link rel="stylesheet" href="${l.url.append(e,{v:R})}" />`).join("")}function ue(r,e=!1){return e&&r.endsWith(".prod.js")?r.replace(".prod.js",".js"):r}function pe(r,e,t=!1){const s=r.filter(g=>!!g.enabled),n=[],i=[],a=[],o=[],c={},u={},d=[],f={};return s.forEach(({urls:g,assetsUrl:m,library:h,assetsLibrary:p,localeLibrary:j})=>{g?.forEach(v=>{B(v)&&n.push(ue(v,t)),U(v)&&i.push(v)}),h&&(o.push(h),c[h]=k(g||[],e),j&&(u[h]=j)),m&&a.push(m),p&&d.push(p),h&&p&&(f[p]=h)}),{scripts:k(n,e),css:k(i,e),materials:k(a,e),libraryExports:o,materialExports:l.dedupArray(d),materialMapLibrary:f,libraryMap:c,libraryLocaleMap:u}}function de(r,e){const{name:t,parent:s,alias:n}=r;return s?e[s]?.[n||t]:e[n||t]}function z(r){return l.isString(r)?r:JSON.stringify(r)}function G(r,e,t){const s=r.CSSStyleSheet;if(s.prototype.replaceSync){const n=new s;n.id=e,n.replaceSync(t);const i=r.document,a=i.adoptedStyleSheets,o=Array.from(a).filter(c=>c.id!==e);i.adoptedStyleSheets=[...o,n]}else{const n=r.document;let i=n.getElementById(e);i?i.innerHTML=t:(i=n.createElement("style"),i.id=e,i.innerHTML=t,n.head.appendChild(i))}}async function fe(r,e){const t=await window.fetch(e).then(s=>s.text()).catch(()=>"");t&&G(window,r,t)}function he(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 me(r,e,t=window){const s=t.document,n=t.document.head;let i=t[e];return i?i.default||i:new Promise((a,o)=>{for(const c of r){const u=s.createElement("script");u.src=c,u.onload=()=>{i=t[e],i?a(i.default||i):o(null)},u.onerror=d=>{o(d)},n.appendChild(u)}})}function ge(r){return l.isFunction(r)||l.isFunction(r?.install)}function ve(r){return ce.includes(r)}function ye(r){return ae.includes(r)}function A(r=window){const e=window?.Mock;if(e)return e;const t=r?.Mock;if(t&&window)return window.Mock=t,t}function Le(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 M(r,e,t=!1,s=!1){try{const n=['"use strict";',"var __self = arguments[0];"];n.push("return ");let i=(r.value||"").trim();i=i.replace(/this(\W|$)/g,(o,c)=>`__self${c}`),i=n.join(`
|
8
|
+
`)+i;const a=`with(${t?"{}":"$scope || {}"}) { ${i} }`;return new Function("$scope",a)(e)}catch(n){if(l.logger.error("parseExpression.error",n,r,e?.__self??e),s)throw n}}function D(r,e,t=!1,s=!1){const n=M(r,e,t,s);if(typeof n!="function"&&(l.logger.error("parseFunction.error","not a function",r,e?.__self??e),s))throw new Error(`"${r.value}" not a function`);return n}function w(r){return r&&r.type==="JSExpression"}function T(r){return typeof r=="object"&&r&&r.type==="JSFunction"}function _e(r){return w(r)||T(r)}function qe(r){return _e(r)?r.value:JSON.stringify(r)}const Je={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ_",unauthorized:void 0,auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!",noPermissionMessage:"无权限访问该页面",appName:""},W=Symbol("access");class Y{options;data=null;mode=y.Raw;interceptResponse=!0;constructor(e){this.options=Object.assign({},Je,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===y.Raw&&this.setGuard(s),n&&this.setRequest(n)}login(e){const{storageKey:t,storagePrefix:s,session:n,authKey:i}=this.options;this.setData(e),this.data&&(l.storage.save(t,e,{type:"local",prefix:s}),n&&l.cookie.set(i,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:n}=this.options;this.data=null,l.storage.remove(e,{type:"local",prefix:t}),s&&l.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):l.toArray(e).every(i=>s[i]||s[t+"."+i])}some(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return l.toArray(e).some(i=>s[i]||s[t+"."+i])}install(e){e.config.globalProperties.$access||(e.config.globalProperties.$access=this,e.provide(W,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=>l.unRSA(n,t));try{this.data=JSON.parse(s.join(""))}catch(n){console.warn(n)}return}if(typeof e=="string")try{const s=t?l.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=l.storage.get(e,{type:"local",prefix:t});this.setData(s||null)}isLogined(){const{session:e,authKey:t}=this.options;return e&&t?!!l.cookie.get(t):!!this.getToken()}hasRoutePermission(e){if(e.name===C){const t=e.params.id;return t&&this.can(t)}return!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),l.isFunction(n)?(n(),t(!1)):l.isString(n)?t(n):t(!1)}}t(!1),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}=this.options;return e.status===t||e.data?.code===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 l.delay(150),await t(e,{title:"提示",type:"warning"}).catch(()=>!1)):!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 Se(){return S.inject(W,null)}function Ke(r={}){const{notify:e,loading:t,settings:s={},Startup:n,access:i,useTitle:a,alert:o}=r;let c=null;return{request:l.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:d=>d.data?.code===0||!!d.data?.success,failMessage:!0,showError:d=>{e&&e(d||"未知错误")},showLoading:()=>{c&&c.close(),t&&(c=t())},hideLoading:()=>{c&&(c.close(),c=null)},...s}}),jsonp:l.jsonp,notify:e,loading:t,useTitle:a,startupComponent:n,access:i?new Y({alert:o,...i}):void 0}}function Ve(r={}){return new Y(r)}function we(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?M(r.headers,{},!0):void 0,i={url:r.url,method:r.method,settings:{...r.settings,headers:n}};return(a,o)=>(delete i.data,s.send(l.merge(i,o||{},{data:a})))}}function je(r,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:n}=r;return(i,a)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,n,i,a)}}function Ee(r=[],e=[],t){const s={};for(const n of r)s[n.id]=we(n,t);for(const n of e)s[n.id]=je(n,t);return s}async function Pe(r=[],e=window){const t=A(e);t&&(Q(e),r.forEach(s=>$e(t,s)))}function be(r,e=window){const t=T(r.mockTemplate)&&r.mockTemplate.value?D(r.mockTemplate,{},!0):void 0,s=A(e);return async(...n)=>{let i={};if(t)try{i=await t.apply(t,n)}catch(a){l.logger.warn("模拟数据模版异常",a)}return s?.mock(i)}}function $e(r,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const n=l.pathToRegexp(`${t}(.*)`),i=l.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=M(s,{},!0);r.mock(n,o=>{const c=l.url.parse(o.url)||{},u=o.body instanceof FormData?l.formDataToJson(o.body):o.body,d=i(o.url)?.params;return Object.assign(o,{data:u,params:c,query:d}),r.mock(a(o))})}}function Q(r=window){const e=A(r);e&&(e._mocked={})}class Re{__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=N){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&&K.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){K.forEach(e=>{this[e]=null}),this.__reset()}__reset(){this.__refs={},this.$refs={},this.__contextRefs={},this.context={}}__parseFunction(e){if(e)if(this.__mode===y.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return D({type:s,value:n},this)}else return D(e,this)}__parseExpression(e){if(e)if(this.__mode===y.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return M({type:s,value:n},this)}else return M(e,this)}__ref(e=null,t){if(this.__mode!==y.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await l.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,y.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 i=new Set([].concat(n,s));return Array.from(i)}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 H(r){const{Vue:e=N,mode:t=y.Runtime,components:s={},libs:n={},apis:i={},loader:a}=r,o=e.computed(()=>r.dsl),c={$components:s,$libs:n,$apis:i},u=new Re({mode:t,dsl:o.value,attrs:c}),d=e.defineComponent({name:o.value.name,props:{...Ge(o.value.props??[],u)},setup(f){u.$props=f,u.props=f,o.value.id&&G(r.window||window,o.value.id,o.value.css||""),u.state=We(e,o.value.state??{},u);const g=Ye(e,o.value.computed??{},u),m=Qe(o.value.methods??{},u),h=Xe(e,o.value.inject,u),p=Ce(o.value.dataSources||{},u),j={...h,...g,...m,...p};return u.setup(j,e),Ze(e,o.value.watch??[],u),{vtj:u}},emits:ze(o.value.emits),expose:["vtj"],render(){if(!o.value.nodes)return null;const f=o.value.nodes||[];return f.length===1?I(f[0],u,e,a):f.map(g=>I(g,u,e,a))},...et(o.value.lifeCycles??{},u)});return{renderer:e.markRaw(d),context:u}}function ze(r=[]){return r.map(e=>l.isString(e)?e:e.name)}function Ge(r=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(i=>oe[i]):void 0;return r.map(s=>l.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:w(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 We(r,e,t){return r.reactive(Object.keys(e||{}).reduce((s,n)=>{let i=e[n];return w(i)?i=t.__parseExpression(i):T(i)&&(i=t.__parseFunction(i)),s[n]=i,s},{}))}function Ye(r,e,t){return Object.entries(e??{}).reduce((s,[n,i])=>(s[n]=r.computed(t.__parseFunction(i)),s),{})}function Qe(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}function Xe(r,e=[],t){return e.reduce((s,n)=>{const{name:i,from:a}=n||{};n.default;const o=w(a)?t.__parseExpression(a)||i:a??i,c=w(n.default)?t.__parseExpression(n.default):n.default??null;return s[i]=r.inject(o,c),s},{})}function Ce(r,e){return Object.keys(r).reduce((t,s)=>{const n=r[s];if(n.type==="mock")t[s]=be(n);else if(n.ref){const i=e.$apis[n.ref],a=T(n.transform)?n.transform.value?e.__parseFunction(n.transform):void 0:n.transform;t[s]=async(...o)=>{const c=await i.apply(e,o);return a?a(c):c}}return t},{})}function Ze(r,e=[],t){e.forEach(s=>{r.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function et(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}let J=[],$={};const Ae=r=>r;async function X(r,e=window){const{urls:t=[],library:s}=r,n=t.filter(o=>B(o));if(n.length===0||!s)return null;const i=t.filter(o=>U(o));return i.length&&he(i,e),await me(n,s,e).catch(o=>(console.warn("loadScriptUrl error",n,s,o),null))}function x(r){const{getDsl:e,getDslByUrl:t,options:s}=r;return s.window&&(J.forEach(n=>{delete s.window[n]}),J=[]),(n,i,a=N)=>{if(!i||typeof i=="string")return n;if(i.type==="Schema"&&i.id)return a.defineAsyncComponent(async()=>{const o=$[i.id]||await e(i.id);return o&&(o.name=n,$[i.id]=o),o?H({...s,Vue:a,dsl:l.cloneDeep(o),mode:y.Runtime,loader:x(r)}).renderer:null});if(i.type==="UrlSchema"&&i.url)return a.defineAsyncComponent(async()=>{const o=$[i.url]||await t(i.url);return o&&(o.name=n,$[i.url]=o),o?H({...s,Vue:a,dsl:l.cloneDeep(o),mode:y.Runtime,loader:x(r)}).renderer:null});if(i.type==="Plugin"){let o=i.library?$[i.library]:null;return o||(i.library&&J.push(i.library),o=$[i.library||Symbol()]=a.defineAsyncComponent(async()=>{const c=await X(i,s.window);return c||(console.warn("getPlugin result is null",i),null)}),o)}return n}}function tt(){$={}}function I(r,e,t=N,s=Ae){if(!r||!r.name||r.invisible)return null;const n=t.getCurrentInstance()?.appContext,{id:i=null,directives:a=[]}=r,{vIf:o,vFor:c,vShow:u,vModels:d,vBind:f,vHtml:g,others:m}=rt(a);if(o&&!nt(o,e))return null;const h=p=>{const j=p.$components,v=(()=>{if(r.name==="component")return it(p,r.props?.is);if(r.name==="slot")return r.name;const P=s(r.name,r.from,t);return l.isString(P)?ve(P)||ye(P)?P:j[P]??n?.app?.component(P)??P:P})(),E=ot(i,r.props??{},p),De=at(t,r.events??{},p);if(r.name==="slot")return ct(t,r,E,p,s);f&&Object.assign(E,p.__parseExpression(f.value)),u&&(E.style=Object.assign(E.style??{},ut(u,p))),g&&Object.assign(E,pt(g,p)),d.forEach(P=>{Object.assign(E,dt(t,P,p))});const He=ft(t,r.children??[],p,s,r);let q=t.createVNode(v,{...E,...De},He);const se=n?st(n,m,p):[];return se.length&&(q=t.withDirectives(q,se)),q};return c?gt(c,h,e):h(e)}function st(r,e,t){const s=r.app;return e.map(n=>{const i=typeof n.name=="string"?s.directive(n.name):t.__parseExpression(n.name);if(!i)return null;const a=[i];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 rt(r=[]){const e=r.find(c=>l.camelCase(c.name)==="vIf"),t=r.find(c=>l.camelCase(c.name)==="vFor"),s=r.find(c=>l.camelCase(c.name)==="vShow"),n=r.find(c=>l.camelCase(c.name)==="vBind"),i=r.find(c=>l.camelCase(c.name)==="vHtml"),a=r.filter(c=>l.camelCase(c.name)==="vModel"),o=r.filter(c=>!ie.includes(l.camelCase(c.name)));return{vIf:e,vFor:t,vShow:s,vModels:a,vBind:n,others:o,vHtml:i}}function nt(r,e){return!!e.__parseExpression(r.value)}function it(r,e){return e?w(e)?r.__parseExpression(e):e:"div"}function ot(r,e,t){const s=V(e,t);return s.ref=t.__ref(r,s.ref),s}function V(r,e){return w(r)?e.__parseExpression(r):T(r)?e.__parseFunction(r):Array.isArray(r)?r.map(t=>V(t,e)):typeof r=="object"?Object.keys(r||{}).reduce((t,s)=>{let n=r[s];return t[s]=V(n,e),t},{}):r}function at(r,e,t){const s=["passive","capture","once"],n={capture:"Capture",once:"Once",passive:"OnceCapture"};return Object.keys(e||{}).reduce((i,a)=>{const o=e[a],c=Z(o.modifiers),u=c.find(g=>s.includes(g)),d="on"+l.upperFirst(a)+(u&&n[u]||""),f=t.__parseFunction(o.handler);return f&&(i[d]=r.withModifiers(f,c)),i},{})}function Z(r={},e=!1){const t=Object.keys(r);return e?t.map(s=>"."+s):t}function ct(r,e,t,s,n){const{children:i}=e,a=lt(e,s),o=s.$slots?.[a.name];return o?o(t):i?l.isString(i)?r.createTextVNode(i):w(i)?r.createTextVNode(z(s.__parseExpression(i))):Array.isArray(i)?i.map(c=>I(c,s,r,n)):null:null}function lt(r,e){const{props:t}=r,s=t?.name||"default";return{name:w(s)?e.__parseExpression(s):s,params:[]}}function ut(r,e){return e.__parseExpression(r.value)?{}:{display:"none"}}function pt(r,e){return{innerHTML:e.__parseExpression(r.value)||""}}function dt(r,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
9
9
|
${e.value.value} = v;
|
10
10
|
}`:"(v) => {}"},n=t.__parseFunction(s),i=Z(w(e.modifiers)?t.__parseExpression(e.modifiers):e.modifiers),a=w(e.arg)?t.__parseExpression(e.arg):e.arg||"modelValue";return{[a]:t.__parseExpression(e.value),[`onUpdate:${a}`]:i.length&&n?r.withModifiers(n,i):n}}function ft(r,e,t,s,n){if(!e)return null;if(l.isString(e))return{default:()=>e};if(w(e))return{default:()=>z(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const i=ht(e),a=o=>!o||!n?{}:n?.id&&Object.keys(o).length?{[`scope_${n.id}`]:o}:{};return Object.entries(i).reduce((o,[c,{nodes:u,params:d}])=>(o[c]=f=>{const g=d.length?l.pick(f??{},d):a(f);return u.map(m=>I(m,t.__clone(g),r,s))},o),{})}return null}function ht(r){const e={default:{params:[],nodes:[]}};for(const t of r){const s=mt(t.slot),n=s.name;e[n]?(e[n].nodes.push(t),e[n].params=e[n].params.concat(s.params)):e[n]={nodes:[t],params:s.params}}return e}function mt(r="default"){return l.isString(r)?{name:r,params:[]}:{params:[],...r}}function gt(r,e,t){const{value:s,iterator:n}=r,{item:i="item",index:a="index"}=n||{};let o=t.__parseExpression(s)||[];return Number.isInteger(o)&&(o=new Array(o).fill(!0).map((c,u)=>u+1)),Array.isArray(o)?o.map((c,u)=>e(t.__clone({[i]:c,[a]:u}))):(console.warn("[vForRender]:",`${s?.value} is not a Arrary`),[])}const re=S.defineComponent({name:"VtjPageContainer",async setup(){const r=te(),e=ne.useRoute(),t=e.params.id,s=t?r.getPage(t):r.getHomepage(),n=s?await r.getRenderComponent(s.id):null,i=S.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:i,route:e}},render(){const{component:r,query:e,sid:t}=this;return r?S.h(r,{...e,key:t}):S.h("div","页面不存在")},activated(){this.meta.cache===!1&&(this.sid=Symbol())}}),vt=S.defineComponent({name:"VtjStartupContainer",render(){return S.h("div","page not found!")}}),ee=Symbol("Provider");var Me=(r=>(r.Production="production",r.Development="development",r))(Me||{});class Te extends b.Base{constructor(e){super(),this.options=e;const{service:t,mode:s=y.Raw,dependencies:n,materials:i,project:a={},adapter:o={},globals:c={},modules:u={},router:d=null,materialPath:f="./",nodeEnv:g="development"}=e;this.mode=s,this.modules=u,this.service=t,this.router=d,this.materialPath=f,this.nodeEnv=g,n&&(this.dependencies=n),i&&(this.materials=i),Object.assign(this.globals,c),Object.assign(this.adapter,o);const{access:m,request:h}=this.adapter;m&&m.connect({mode:s,router:d,request:h}),a&&s!==y.Design?this.load(a):this.project=a}mode;globals={};modules={};adapter={request:l.request,jsonp:l.jsonp};apis={};dependencies={};materials={};library={};service;project=null;components={};nodeEnv="development";router=null;materialPath="./";urlDslCaches={};createMock(e){return async(...t)=>{let s={};if(e)try{s=await e.apply(e,t)}catch(i){l.logger.warn("模拟数据模版异常",i)}return A()?.mock(s)}}async load(e){const t=this.modules[`.vtj/projects/${e.id}.json`]||this.modules[`/src/.vtj/projects/${e.id}.json`];if(this.project=t?await t():await this.service.init(e),!this.project)throw new Error("project is null");const{apis:s=[],meta:n=[]}=this.project,i=window;i&&(i.CKEDITOR_VERSION=void 0),this.mode===y.Raw?await this.loadDependencies(i):await this.loadAssets(i),this.initMock(i),this.apis=Ee(s,n,this.adapter),Q(i),Pe(s,i),e.platform!=="uniapp"&&this.initRouter(),this.triggerReady()}initMock(e){const t=A(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:i,materialPath:a,nodeEnv:o}=this,{libraryExports:c,libraryMap:u,materials:d,materialExports:f,materialMapLibrary:g}=pe(t,a,o==="development");for(const m of c){const h=s[m],p=e[m];if(p)n[m]=p;else if(h)e[m]=n[m]=await h();else{const j=u[m]||[];for(const v of j)U(v)&&await fe(m,l.url.append(v,{v:R})),B(v)&&await l.loadScript(l.url.append(v,{v:R}));n[m]=e[m]}}if(o==="development"){for(const h of d)await l.loadScript(l.url.append(h,{v:R}));const m=this.materials||{};for(const h of f){const p=e[g[h]],j=b.BUILT_IN_COMPONENTS[h];if(j)p&&j.forEach(v=>{i[v]=p[v]});else{const v=m[h]?(await m[h]()).default:e[h];v&&p&&(v.components||[]).forEach(E=>{i[E.name]=de(E,p)})}}}}initRouter(){const{router:e,project:t,options:s,adapter:n}=this;if(!e)return;const i=t?.platform==="uniapp"?"pages":"page",{routeAppendTo:a,pageRouteName:o=i,routeMeta:c}=s,u=a?"":"/",d={path:`${u}${o}/:id`,name:C,component:re},f={path:u,name:F,component:t?.homepage?re:n.startupComponent||vt,meta:c};e.hasRoute(C)&&e.removeRoute(C),e.hasRoute(F)&&e.removeRoute(F),a?(e.addRoute(a,d),e.addRoute(a,f)):(e.addRoute(d),e.addRoute(f))}install(e){const t=e.config.globalProperties.installed||{};for(const[s,n]of Object.entries(this.library))!t[s]&&ge(n)&&(e.use(n),t[s]=!0);this.options.install&&e.use(this.options.install),this.adapter.access&&e.use(this.adapter.access),e.provide(ee,this),e.config.globalProperties.$provider=this,e.config.globalProperties.installed=t,this.mode===y.Design&&(e.config.errorHandler=(s,n,i)=>{const a=n?.$options.name,o=typeof s=="string"?s:s?.message||s?.msg||"未知错误",c=`[ ${a} ] ${o} ${i}`;console.error("[VTJ Error]:",{err:s,instance:n,info:i},s?.stack),this.adapter.notify&&this.adapter.notify(c,"组件渲染错误","error")})}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,i=[])=>{for(const a of i){if(a.id===n)return a;if(a.children&&a.children.length){const o=s(n,a.children);if(o)return o}}};return s(e,t)||null}getHomepage(){const{homepage:e}=this.project||{};return e?this.getPage(e):null}async getDsl(e){const t=this.modules[`.vtj/files/${e}.json`]||this.modules[`/src/.vtj/files/${e}.json`];return t?await t():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:i,apis:a}=this,o={mode:i,Vue:s.Vue,components:n,libs:s,apis:a,window,...t},c=x({getDsl:async u=>await this.getDsl(u)||null,getDslByUrl:async u=>await this.getDslByUrl(u)||null,options:o});return H({...o,dsl:e,loader:c})}async getRenderComponent(e,t){const s=this.getFile(e);if(!s)return l.logger.warn(`Can not find file: ${e}`),null;t&&t(s);const n=`.vtj/vue/${e}.vue`,i=this.modules[n]||this.modules[`/src/pages/${e}.vue`];if(i)return(await i())?.default;const a=await this.getDsl(s.id);return a?this.createDslRenderer(a).renderer:(l.logger.warn(`Can not find dsl: ${e}`),null)}defineUrlSchemaComponent(e,t){return S.defineAsyncComponent(async()=>{const s=await this.getDslByUrl(e);return s?(s.name=t||s.name,this.createDslRenderer(s).renderer):null})}definePluginComponent(e){return S.defineAsyncComponent(async()=>await X(e,window))}}function yt(r){const e=new Te(r);return{provider:e,onReady:s=>e.ready(s)}}function te(r={}){const e=S.inject(ee,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}const ke={type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:r=>r.data?.code===0},_t=(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:ke}),St=(r,e="/__vtj__/api/uploader.json")=>async(t,s)=>await r.send({url:e,method:"post",data:{files:t,projectId:s},settings:{...ke,type:"data"}}).then(n=>n&&n[0]?n[0]:null).catch(()=>null);function wt(r){return l.createRequest({settings:{type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:e=>e.data?.code===0,showError:e=>{r&&r(e||"未知错误")}}})}class L{api;pluginCaches={};uploader;constructor(e=l.request){this.api=_t(e),this.uploader=St(e)}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 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(i=>le(i))[0];if(!s)return null;const n=this.pluginCaches[s];return n||(this.pluginCaches[s]=l.request.send({url:s,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(i=>i.data).catch(()=>null))}async genSource(e){return console.log("BaseService.genSource",e),""}}const _=new l.Storage({type:"local",expired:0,prefix:"__VTJ_"});class jt extends L{init(e){const t=new b.ProjectModel(e),s=_.get(`project_${t.id}`),n=Object.assign(t.toDsl(),s||{});return _.save(`project_${t.id}`,n),Promise.resolve(n)}saveProject(e){const t=new b.ProjectModel(e);return _.save(`project_${t.id}`,t.toDsl()),Promise.resolve(!0)}saveMaterials(e,t){return _.save(`materials_${e.id}`,l.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return _.save(`file_${e.id}`,e),Promise.resolve(!0)}getFile(e){const t=_.get(`file_${e}`);return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return _.remove(`file_${e}`),Promise.resolve(!0)}saveHistory(e){return _.save(`history_${e.id}`,e),Promise.resolve(!0)}removeHistory(e){const t=_.get(`history_${e}`);if(t){const n=(t.items||[]).map(i=>i.id);this.removeHistoryItem(e,n),_.remove(`history_${e}`)}return Promise.resolve(!0)}getHistory(e){const t=_.get(`history_${e}`),s=new b.HistoryModel(t||{id:e});return Promise.resolve(s.toDsl())}getHistoryItem(e,t){const s=_.get(`history_${e}_${t}`);return Promise.resolve(s)}saveHistoryItem(e,t){return _.save(`history_${e}_${t.id}`,t),Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{_.remove(`history_${e}_${s}`)}),Promise.resolve(!0)}}class Fe extends L{projects={};materials={};files={};histories={};historyItems={};init(e){const t=new b.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 b.ProjectModel(e);return this.projects[t.id]=t.toDsl(),Promise.resolve(!0)}saveMaterials(e,t){return e.id&&(this.materials[e.id]=l.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(i=>i.id);this.removeHistoryItem(e,n),delete this.historyItems[e]}return Promise.resolve(!0)}getHistory(e){const t=this.histories[e],s=new b.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 O=null;function Et(){return O||(O=new Fe,O)}class Pt extends L{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:l.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)}}function Ie(r,e,t=[]){return t.map(s=>{const{id:n,title:i,icon:a,children:o,hidden:c}=s;return{id:n,title:i,icon:a,hidden:c,url:`${r}/${e}/${n}`,children:o&&o.length?Ie(r,e,o):void 0}})}function Oe(r,e){if(!e)return r;let t=[];for(const s of r)if(s.children&&s.children.length){const n=Oe(s.children,e);n.length&&(s.children=n,t.push(s))}else e.can(s.id.toString())&&t.push(s);return t}function bt(r){const{menuPathPrefix:e="",pageRouteName:t="page",disableMenusFilter:s=!1}=r||{},n=te(),i=ne.useRoute(),a=Se(),o=S.ref(!1),c=S.ref(!1),u=n.project;S.watchEffect(()=>{const{name:g,params:m,meta:h}=i;if(g===C){const p=n.getPage(m.id);o.value=!p?.mask,c.value=!!p?.pure}else if(g===F){const p=n.getHomepage();o.value=!p?.mask,c.value=!!p?.pure}else o.value=!h.mask,c.value=!!h.pure});const d=Ie(e,t,u?.pages),f=u?.config;return{disabled:o,logo:f?.logo,themeSwitchable:f?.themeSwitchable,title:f?.title||u?.description||u?.name||"VTJ App",menus:s?d:Oe(d,a),pure:c}}exports.ACCESS_KEY=W;exports.Access=Y;exports.BUILD_IN_TAGS=ce;exports.BUILT_IN_DIRECTIVES=ie;exports.BaseService=L;exports.CONTEXT_HOST=K;exports.Context=Re;exports.ContextMode=y;exports.DATA_TYPES=oe;exports.HOMEPAGE_ROUTE_NAME=F;exports.HTML_TAGS=ae;exports.JSCodeToString=qe;exports.LIFE_CYCLES_LIST=Ne;exports.LocalService=Pt;exports.MemoryService=Fe;exports.NodeEnv=Me;exports.PAGE_ROUTE_NAME=C;exports.Provider=Te;exports.StorageService=jt;exports.VTJ_RENDERER_VERSION=R;exports.adoptedStyleSheets=G;exports.clearLoaderCache=tt;exports.createAccess=Ve;exports.createAdapter=Ke;exports.createAssetScripts=Ue;exports.createAssetsCss=Be;exports.createDataSources=Ce;exports.createLoader=x;exports.createMemoryService=Et;exports.createMetaApi=je;exports.createMock=be;exports.createProvider=yt;exports.createRenderer=H;exports.createSchemaApi=we;exports.createSchemaApis=Ee;exports.createServiceRequest=wt;exports.defaultLoader=Ae;exports.fillBasePath=k;exports.getMock=A;exports.getModifiers=Z;exports.getPlugin=X;exports.getRawComponent=de;exports.isBuiltInTag=ve;exports.isCSSUrl=U;exports.isJSCode=_e;exports.isJSExpression=w;exports.isJSFunction=T;exports.isJSON=le;exports.isJSUrl=B;exports.isNativeTag=ye;exports.isVuePlugin=ge;exports.loadCss=fe;exports.loadCssUrl=he;exports.loadScriptUrl=me;exports.mockApi=$e;exports.mockApis=Pe;exports.mockCleanup=Q;exports.nodeRender=I;exports.parseDeps=pe;exports.parseExpression=M;exports.parseFunction=D;exports.providerKey=ee;exports.removeProdFlag=ue;exports.setupPageSetting=Le;exports.toString=z;exports.useAccess=Se;exports.useMask=bt;exports.useProvider=te;
|
package/dist/index.mjs
CHANGED
@@ -1,18 +1,18 @@
|
|
1
|
-
import { Base as
|
2
|
-
import { isUrl as
|
1
|
+
import { Base as Fe, BUILT_IN_COMPONENTS as Ae, ProjectModel as D, HistoryModel as le } from "@vtj/core";
|
2
|
+
import { isUrl as Me, url as E, dedupArray as Ie, isString as j, isFunction as q, logger as R, storage as B, cookie as U, toArray as se, unRSA as re, delay as ue, createRequest as pe, jsonp as de, merge as He, pathToRegexp as Te, pathToRegexpMatch as De, formDataToJson as xe, cloneDeep as ne, camelCase as b, upperFirst as Oe, pick as Ne, request as J, loadScript as ie, Storage as Be, mapToObject as Q } from "@vtj/utils";
|
3
3
|
import * as O from "vue";
|
4
|
-
import { inject as
|
5
|
-
import { useRoute as
|
4
|
+
import { inject as fe, defineComponent as he, h as K, ref as z, defineAsyncComponent as oe, watchEffect as Ue } from "vue";
|
5
|
+
import { useRoute as me } from "vue-router";
|
6
6
|
/**!
|
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.11.
|
10
|
+
* @version 0.11.7
|
11
11
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
12
12
|
*/
|
13
|
-
const C = "0.11.
|
13
|
+
const C = "0.11.7";
|
14
14
|
var y = /* @__PURE__ */ ((r) => (r.Runtime = "Runtime", r.Design = "Design", r.Raw = "Raw", r.VNode = "VNode", r))(y || {});
|
15
|
-
const
|
15
|
+
const ae = [
|
16
16
|
"$el",
|
17
17
|
"$emit",
|
18
18
|
"$nextTick",
|
@@ -57,7 +57,7 @@ const oe = [
|
|
57
57
|
","
|
58
58
|
), Ke = "component,slot".split(",");
|
59
59
|
function I(r, e) {
|
60
|
-
return r.map((t) =>
|
60
|
+
return r.map((t) => Me(t) || t.startsWith("/") ? t : `${e}${t}`);
|
61
61
|
}
|
62
62
|
function X(r) {
|
63
63
|
return /\.css$/.test(r);
|
@@ -94,7 +94,7 @@ function We(r, e, t = !1) {
|
|
94
94
|
css: I(i, e),
|
95
95
|
materials: I(a, e),
|
96
96
|
libraryExports: o,
|
97
|
-
materialExports:
|
97
|
+
materialExports: Ie(p),
|
98
98
|
materialMapLibrary: d,
|
99
99
|
libraryMap: c,
|
100
100
|
libraryLocaleMap: l
|
@@ -104,10 +104,10 @@ function Ge(r, e) {
|
|
104
104
|
const { name: t, parent: s, alias: n } = r;
|
105
105
|
return s ? e[s]?.[n || t] : e[n || t];
|
106
106
|
}
|
107
|
-
function
|
107
|
+
function ge(r) {
|
108
108
|
return j(r) ? r : JSON.stringify(r);
|
109
109
|
}
|
110
|
-
function
|
110
|
+
function ve(r, e, t) {
|
111
111
|
const s = r.CSSStyleSheet;
|
112
112
|
if (s.prototype.replaceSync) {
|
113
113
|
const n = new s();
|
@@ -124,7 +124,7 @@ function ge(r, e, t) {
|
|
124
124
|
}
|
125
125
|
async function Ye(r, e) {
|
126
126
|
const t = await window.fetch(e).then((s) => s.text()).catch(() => "");
|
127
|
-
t &&
|
127
|
+
t && ve(window, r, t);
|
128
128
|
}
|
129
129
|
function Qe(r, e = window) {
|
130
130
|
const t = e.document, s = e.document.head;
|
@@ -218,8 +218,8 @@ const rt = {
|
|
218
218
|
unauthorizedMessage: "登录已经失效,请重新登录!",
|
219
219
|
noPermissionMessage: "无权限访问该页面",
|
220
220
|
appName: ""
|
221
|
-
},
|
222
|
-
class
|
221
|
+
}, ye = Symbol("access");
|
222
|
+
class _e {
|
223
223
|
options;
|
224
224
|
data = null;
|
225
225
|
mode = y.Raw;
|
@@ -269,7 +269,7 @@ class ye {
|
|
269
269
|
return se(e).some((i) => s[i] || s[t + "." + i]);
|
270
270
|
}
|
271
271
|
install(e) {
|
272
|
-
e.config.globalProperties.$access || (e.config.globalProperties.$access = this, e.provide(
|
272
|
+
e.config.globalProperties.$access || (e.config.globalProperties.$access = this, e.provide(ye, this));
|
273
273
|
}
|
274
274
|
isAuthPath(e) {
|
275
275
|
const { auth: t, isAuth: s } = this.options;
|
@@ -356,7 +356,7 @@ class ye {
|
|
356
356
|
}
|
357
357
|
async showTip(e) {
|
358
358
|
const { alert: t } = this.options;
|
359
|
-
return t ? (await
|
359
|
+
return t ? (await ue(150), await t(e, {
|
360
360
|
title: "提示",
|
361
361
|
type: "warning"
|
362
362
|
}).catch(() => !1)) : !1;
|
@@ -373,7 +373,7 @@ class ye {
|
|
373
373
|
}
|
374
374
|
}
|
375
375
|
function nt() {
|
376
|
-
return
|
376
|
+
return fe(ye, null);
|
377
377
|
}
|
378
378
|
function Xt(r = {}) {
|
379
379
|
const {
|
@@ -387,7 +387,7 @@ function Xt(r = {}) {
|
|
387
387
|
} = r;
|
388
388
|
let c = null;
|
389
389
|
return {
|
390
|
-
request:
|
390
|
+
request: pe({
|
391
391
|
settings: {
|
392
392
|
type: "form",
|
393
393
|
validSuccess: !0,
|
@@ -407,16 +407,16 @@ function Xt(r = {}) {
|
|
407
407
|
...s
|
408
408
|
}
|
409
409
|
}),
|
410
|
-
jsonp:
|
410
|
+
jsonp: de,
|
411
411
|
notify: e,
|
412
412
|
loading: t,
|
413
413
|
useTitle: a,
|
414
414
|
startupComponent: n,
|
415
|
-
access: i ? new
|
415
|
+
access: i ? new _e({ alert: o, ...i }) : void 0
|
416
416
|
};
|
417
417
|
}
|
418
418
|
function Zt(r = {}) {
|
419
|
-
return new
|
419
|
+
return new _e(r);
|
420
420
|
}
|
421
421
|
function it(r, e) {
|
422
422
|
const { jsonp: t, request: s } = e;
|
@@ -434,7 +434,7 @@ function it(r, e) {
|
|
434
434
|
headers: n
|
435
435
|
}
|
436
436
|
};
|
437
|
-
return (a, o) => (delete i.data, s.send(
|
437
|
+
return (a, o) => (delete i.data, s.send(He(i, o || {}, { data: a })));
|
438
438
|
}
|
439
439
|
}
|
440
440
|
function ot(r, e) {
|
@@ -459,7 +459,7 @@ function at(r = [], e = [], t) {
|
|
459
459
|
}
|
460
460
|
async function ct(r = [], e = window) {
|
461
461
|
const t = F(e);
|
462
|
-
t && (
|
462
|
+
t && (we(e), r.forEach((s) => ut(t, s)));
|
463
463
|
}
|
464
464
|
function lt(r, e = window) {
|
465
465
|
const t = M(r.mockTemplate) && r.mockTemplate.value ? V(r.mockTemplate, {}, !0) : void 0, s = F(e);
|
@@ -478,14 +478,14 @@ function ut(r, e) {
|
|
478
478
|
if (!e.mock) return;
|
479
479
|
const { url: t, mockTemplate: s } = e;
|
480
480
|
if (t && s) {
|
481
|
-
const n =
|
481
|
+
const n = Te(`${t}(.*)`), i = De(t, { decode: decodeURIComponent }), a = A(s, {}, !0);
|
482
482
|
r.mock(n, (o) => {
|
483
|
-
const c = E.parse(o.url) || {}, l = o.body instanceof FormData ?
|
483
|
+
const c = E.parse(o.url) || {}, l = o.body instanceof FormData ? xe(o.body) : o.body, p = i(o.url)?.params;
|
484
484
|
return Object.assign(o, { data: l, params: c, query: p }), r.mock(a(o));
|
485
485
|
});
|
486
486
|
}
|
487
487
|
}
|
488
|
-
function
|
488
|
+
function we(r = window) {
|
489
489
|
const e = F(r);
|
490
490
|
e && (e._mocked = {});
|
491
491
|
}
|
@@ -532,12 +532,12 @@ class pt {
|
|
532
532
|
});
|
533
533
|
}
|
534
534
|
__proxy() {
|
535
|
-
this.__instance &&
|
535
|
+
this.__instance && ae.forEach((e) => {
|
536
536
|
this[e] = this.__instance?.[e];
|
537
537
|
});
|
538
538
|
}
|
539
539
|
__cleanup() {
|
540
|
-
|
540
|
+
ae.forEach((e) => {
|
541
541
|
this[e] = null;
|
542
542
|
}), this.__reset();
|
543
543
|
}
|
@@ -563,7 +563,7 @@ class pt {
|
|
563
563
|
__ref(e = null, t) {
|
564
564
|
if (this.__mode !== y.VNode)
|
565
565
|
return e && e !== this.__id && (this.__contextRefs[e] = this), async (s) => {
|
566
|
-
await
|
566
|
+
await ue(0);
|
567
567
|
let n = s?.$vtjEl || s?.$el || s?._?.vnode?.el || s;
|
568
568
|
if (!n) {
|
569
569
|
typeof t == "string" && (delete this.$refs[t], e && delete this.__refs[e]);
|
@@ -610,7 +610,7 @@ function W(r) {
|
|
610
610
|
...ft(o.value.props ?? [], l)
|
611
611
|
},
|
612
612
|
setup(d) {
|
613
|
-
l.$props = d, l.props = d, o.value.id &&
|
613
|
+
l.$props = d, l.props = d, o.value.id && ve(
|
614
614
|
r.window || window,
|
615
615
|
o.value.id,
|
616
616
|
o.value.css || ""
|
@@ -735,7 +735,7 @@ function wt(r, e) {
|
|
735
735
|
}
|
736
736
|
let L = [], P = {};
|
737
737
|
const St = (r) => r;
|
738
|
-
async function
|
738
|
+
async function Se(r, e = window) {
|
739
739
|
const { urls: t = [], library: s } = r, n = t.filter((o) => Z(o));
|
740
740
|
if (n.length === 0 || !s) return null;
|
741
741
|
const i = t.filter((o) => X(o));
|
@@ -749,37 +749,33 @@ function G(r) {
|
|
749
749
|
delete s.window[n];
|
750
750
|
}), L = []), (n, i, a = O) => {
|
751
751
|
if (!i || typeof i == "string") return n;
|
752
|
-
if (i.type === "Schema" && i.id)
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
return c && (c.name = n), c ? W({
|
752
|
+
if (i.type === "Schema" && i.id)
|
753
|
+
return a.defineAsyncComponent(async () => {
|
754
|
+
const o = P[i.id] || await e(i.id);
|
755
|
+
return o && (o.name = n, P[i.id] = o), o ? W({
|
757
756
|
...s,
|
758
757
|
Vue: a,
|
759
|
-
dsl:
|
758
|
+
dsl: ne(o),
|
760
759
|
mode: y.Runtime,
|
761
760
|
loader: G(r)
|
762
761
|
}).renderer : null;
|
763
|
-
})
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
const c = await t(i.url);
|
769
|
-
return c && (c.name = n), c ? W({
|
762
|
+
});
|
763
|
+
if (i.type === "UrlSchema" && i.url)
|
764
|
+
return a.defineAsyncComponent(async () => {
|
765
|
+
const o = P[i.url] || await t(i.url);
|
766
|
+
return o && (o.name = n, P[i.url] = o), o ? W({
|
770
767
|
...s,
|
771
768
|
Vue: a,
|
772
|
-
dsl:
|
769
|
+
dsl: ne(o),
|
773
770
|
mode: y.Runtime,
|
774
771
|
loader: G(r)
|
775
772
|
}).renderer : null;
|
776
|
-
})
|
777
|
-
}
|
773
|
+
});
|
778
774
|
if (i.type === "Plugin") {
|
779
775
|
let o = i.library ? P[i.library] : null;
|
780
776
|
return o || (i.library && L.push(i.library), o = P[i.library || Symbol()] = a.defineAsyncComponent(
|
781
777
|
async () => {
|
782
|
-
const c = await
|
778
|
+
const c = await Se(i, s.window);
|
783
779
|
return c || (console.warn("getPlugin result is null", i), null);
|
784
780
|
}
|
785
781
|
), o);
|
@@ -802,7 +798,7 @@ function x(r, e, t = O, s = St) {
|
|
802
798
|
if (r.name === "slot") return r.name;
|
803
799
|
const $ = s(r.name, r.from, t);
|
804
800
|
return j($) ? et($) || tt($) ? $ : w[$] ?? n?.app?.component($) ?? $ : $;
|
805
|
-
})(), S = Et(i, r.props ?? {}, u),
|
801
|
+
})(), S = Et(i, r.props ?? {}, u), Ce = Rt(t, r.events ?? {}, u);
|
806
802
|
if (r.name === "slot")
|
807
803
|
return Ct(t, r, S, u, s);
|
808
804
|
d && Object.assign(S, u.__parseExpression(d.value)), l && (S.style = Object.assign(
|
@@ -811,14 +807,14 @@ function x(r, e, t = O, s = St) {
|
|
811
807
|
)), m && Object.assign(S, At(m, u)), p.forEach(($) => {
|
812
808
|
Object.assign(S, Mt(t, $, u));
|
813
809
|
});
|
814
|
-
const
|
810
|
+
const ke = It(
|
815
811
|
t,
|
816
812
|
r.children ?? [],
|
817
813
|
u,
|
818
814
|
s,
|
819
815
|
r
|
820
816
|
);
|
821
|
-
let N = t.createVNode(g, { ...S, ...
|
817
|
+
let N = t.createVNode(g, { ...S, ...Ce }, ke);
|
822
818
|
const te = n ? $t(n, h, u) : [];
|
823
819
|
return te.length && (N = t.withDirectives(N, te)), N;
|
824
820
|
};
|
@@ -876,20 +872,20 @@ function Rt(r, e, t) {
|
|
876
872
|
};
|
877
873
|
return Object.keys(e || {}).reduce(
|
878
874
|
(i, a) => {
|
879
|
-
const o = e[a], c =
|
875
|
+
const o = e[a], c = $e(o.modifiers), l = c.find((m) => s.includes(m)), p = "on" + Oe(a) + (l && n[l] || ""), d = t.__parseFunction(o.handler);
|
880
876
|
return d && (i[p] = r.withModifiers(d, c)), i;
|
881
877
|
},
|
882
878
|
{}
|
883
879
|
);
|
884
880
|
}
|
885
|
-
function
|
881
|
+
function $e(r = {}, e = !1) {
|
886
882
|
const t = Object.keys(r);
|
887
883
|
return e ? t.map((s) => "." + s) : t;
|
888
884
|
}
|
889
885
|
function Ct(r, e, t, s, n) {
|
890
886
|
const { children: i } = e, a = kt(e, s), o = s.$slots?.[a.name];
|
891
887
|
return o ? o(t) : i ? j(i) ? r.createTextVNode(i) : _(i) ? r.createTextVNode(
|
892
|
-
|
888
|
+
ge(s.__parseExpression(i))
|
893
889
|
) : Array.isArray(i) ? i.map(
|
894
890
|
(c) => x(c, s, r, n)
|
895
891
|
) : null : null;
|
@@ -917,7 +913,7 @@ function Mt(r, e, t) {
|
|
917
913
|
value: e.value?.value ? `(v) => {
|
918
914
|
${e.value.value} = v;
|
919
915
|
}` : "(v) => {}"
|
920
|
-
}, n = t.__parseFunction(s), i =
|
916
|
+
}, n = t.__parseFunction(s), i = $e(
|
921
917
|
_(e.modifiers) ? t.__parseExpression(e.modifiers) : e.modifiers
|
922
918
|
), a = _(e.arg) ? t.__parseExpression(e.arg) : e.arg || "modelValue";
|
923
919
|
return {
|
@@ -931,7 +927,7 @@ function It(r, e, t, s, n) {
|
|
931
927
|
return { default: () => e };
|
932
928
|
if (_(e))
|
933
929
|
return {
|
934
|
-
default: () =>
|
930
|
+
default: () => ge(t.__parseExpression(e))
|
935
931
|
};
|
936
932
|
if (Array.isArray(e) && e.length > 0) {
|
937
933
|
const i = Ht(e), a = (o) => !o || !n ? {} : n?.id && Object.keys(o).length ? {
|
@@ -970,10 +966,10 @@ function Dt(r, e, t) {
|
|
970
966
|
let o = t.__parseExpression(s) || [];
|
971
967
|
return Number.isInteger(o) && (o = new Array(o).fill(!0).map((c, l) => l + 1)), Array.isArray(o) ? o.map((c, l) => e(t.__clone({ [i]: c, [a]: l }))) : (console.warn("[vForRender]:", `${s?.value} is not a Arrary`), []);
|
972
968
|
}
|
973
|
-
const
|
969
|
+
const ce = he({
|
974
970
|
name: "VtjPageContainer",
|
975
971
|
async setup() {
|
976
|
-
const r =
|
972
|
+
const r = be(), e = me(), t = e.params.id, s = t ? r.getPage(t) : r.getHomepage(), n = s ? await r.getRenderComponent(s.id) : null, i = z(Symbol());
|
977
973
|
if (s) {
|
978
974
|
Object.assign(e.meta, s.meta || {}, { cache: s.cache });
|
979
975
|
const { useTitle: a } = r?.adapter;
|
@@ -996,14 +992,14 @@ const ae = fe({
|
|
996
992
|
activated() {
|
997
993
|
this.meta.cache === !1 && (this.sid = Symbol());
|
998
994
|
}
|
999
|
-
}), xt =
|
995
|
+
}), xt = he({
|
1000
996
|
name: "VtjStartupContainer",
|
1001
997
|
render() {
|
1002
998
|
return K("div", "page not found!");
|
1003
999
|
}
|
1004
|
-
}),
|
1000
|
+
}), je = Symbol("Provider");
|
1005
1001
|
var Ot = /* @__PURE__ */ ((r) => (r.Production = "production", r.Development = "development", r))(Ot || {});
|
1006
|
-
class Nt extends
|
1002
|
+
class Nt extends Fe {
|
1007
1003
|
constructor(e) {
|
1008
1004
|
super(), this.options = e;
|
1009
1005
|
const {
|
@@ -1027,7 +1023,7 @@ class Nt extends ke {
|
|
1027
1023
|
mode;
|
1028
1024
|
globals = {};
|
1029
1025
|
modules = {};
|
1030
|
-
adapter = { request: J, jsonp:
|
1026
|
+
adapter = { request: J, jsonp: de };
|
1031
1027
|
apis = {};
|
1032
1028
|
dependencies = {};
|
1033
1029
|
materials = {};
|
@@ -1056,7 +1052,7 @@ class Nt extends ke {
|
|
1056
1052
|
if (this.project = t ? await t() : await this.service.init(e), !this.project)
|
1057
1053
|
throw new Error("project is null");
|
1058
1054
|
const { apis: s = [], meta: n = [] } = this.project, i = window;
|
1059
|
-
i && (i.CKEDITOR_VERSION = void 0), this.mode === y.Raw ? await this.loadDependencies(i) : await this.loadAssets(i), this.initMock(i), this.apis = at(s, n, this.adapter),
|
1055
|
+
i && (i.CKEDITOR_VERSION = void 0), this.mode === y.Raw ? await this.loadDependencies(i) : await this.loadAssets(i), this.initMock(i), this.apis = at(s, n, this.adapter), we(i), ct(s, i), e.platform !== "uniapp" && this.initRouter(), this.triggerReady();
|
1060
1056
|
}
|
1061
1057
|
initMock(e) {
|
1062
1058
|
const t = F(e);
|
@@ -1091,16 +1087,16 @@ class Nt extends ke {
|
|
1091
1087
|
else {
|
1092
1088
|
const w = l[h] || [];
|
1093
1089
|
for (const g of w)
|
1094
|
-
X(g) && await Ye(h, E.append(g, { v: C })), Z(g) && await
|
1090
|
+
X(g) && await Ye(h, E.append(g, { v: C })), Z(g) && await ie(E.append(g, { v: C }));
|
1095
1091
|
n[h] = e[h];
|
1096
1092
|
}
|
1097
1093
|
}
|
1098
1094
|
if (o === "development") {
|
1099
1095
|
for (const f of p)
|
1100
|
-
await
|
1096
|
+
await ie(E.append(f, { v: C }));
|
1101
1097
|
const h = this.materials || {};
|
1102
1098
|
for (const f of d) {
|
1103
|
-
const u = e[m[f]], w =
|
1099
|
+
const u = e[m[f]], w = Ae[f];
|
1104
1100
|
if (w)
|
1105
1101
|
u && w.forEach((g) => {
|
1106
1102
|
i[g] = u[g];
|
@@ -1124,11 +1120,11 @@ class Nt extends ke {
|
|
1124
1120
|
} = s, l = a ? "" : "/", p = {
|
1125
1121
|
path: `${l}${o}/:id`,
|
1126
1122
|
name: k,
|
1127
|
-
component:
|
1123
|
+
component: ce
|
1128
1124
|
}, d = {
|
1129
1125
|
path: l,
|
1130
1126
|
name: T,
|
1131
|
-
component: t?.homepage ?
|
1127
|
+
component: t?.homepage ? ce : n.startupComponent || xt,
|
1132
1128
|
meta: c
|
1133
1129
|
};
|
1134
1130
|
e.hasRoute(k) && e.removeRoute(k), e.hasRoute(T) && e.removeRoute(T), a ? (e.addRoute(a, p), e.addRoute(a, d)) : (e.addRoute(p), e.addRoute(d));
|
@@ -1137,7 +1133,7 @@ class Nt extends ke {
|
|
1137
1133
|
const t = e.config.globalProperties.installed || {};
|
1138
1134
|
for (const [s, n] of Object.entries(this.library))
|
1139
1135
|
!t[s] && Ze(n) && (e.use(n), t[s] = !0);
|
1140
|
-
this.options.install && e.use(this.options.install), this.adapter.access && e.use(this.adapter.access), e.provide(
|
1136
|
+
this.options.install && e.use(this.options.install), this.adapter.access && e.use(this.adapter.access), e.provide(je, this), e.config.globalProperties.$provider = this, e.config.globalProperties.installed = t, this.mode === y.Design && (e.config.errorHandler = (s, n, i) => {
|
1141
1137
|
const a = n?.$options.name, o = typeof s == "string" ? s : s?.message || s?.msg || "未知错误", c = `[ ${a} ] ${o} ${i}`;
|
1142
1138
|
console.error(
|
1143
1139
|
"[VTJ Error]:",
|
@@ -1219,13 +1215,13 @@ class Nt extends ke {
|
|
1219
1215
|
return a ? this.createDslRenderer(a).renderer : (R.warn(`Can not find dsl: ${e}`), null);
|
1220
1216
|
}
|
1221
1217
|
defineUrlSchemaComponent(e, t) {
|
1222
|
-
return
|
1218
|
+
return oe(async () => {
|
1223
1219
|
const s = await this.getDslByUrl(e);
|
1224
1220
|
return s ? (s.name = t || s.name, this.createDslRenderer(s).renderer) : null;
|
1225
1221
|
});
|
1226
1222
|
}
|
1227
1223
|
definePluginComponent(e) {
|
1228
|
-
return
|
1224
|
+
return oe(async () => await Se(e, window));
|
1229
1225
|
}
|
1230
1226
|
}
|
1231
1227
|
function ts(r) {
|
@@ -1235,8 +1231,8 @@ function ts(r) {
|
|
1235
1231
|
onReady: (s) => e.ready(s)
|
1236
1232
|
};
|
1237
1233
|
}
|
1238
|
-
function
|
1239
|
-
const e =
|
1234
|
+
function be(r = {}) {
|
1235
|
+
const e = fe(je, null);
|
1240
1236
|
if (!e)
|
1241
1237
|
throw new Error("Can not find provider");
|
1242
1238
|
if (e.nodeEnv === "development") {
|
@@ -1252,7 +1248,7 @@ function je(r = {}) {
|
|
1252
1248
|
}
|
1253
1249
|
return e;
|
1254
1250
|
}
|
1255
|
-
const
|
1251
|
+
const Pe = {
|
1256
1252
|
type: "json",
|
1257
1253
|
validSuccess: !0,
|
1258
1254
|
originResponse: !1,
|
@@ -1267,7 +1263,7 @@ const be = {
|
|
1267
1263
|
type: t,
|
1268
1264
|
data: s
|
1269
1265
|
},
|
1270
|
-
settings:
|
1266
|
+
settings: Pe
|
1271
1267
|
}), Ut = (r, e = "/__vtj__/api/uploader.json") => async (t, s) => await r.send({
|
1272
1268
|
url: e,
|
1273
1269
|
method: "post",
|
@@ -1276,12 +1272,12 @@ const be = {
|
|
1276
1272
|
projectId: s
|
1277
1273
|
},
|
1278
1274
|
settings: {
|
1279
|
-
...
|
1275
|
+
...Pe,
|
1280
1276
|
type: "data"
|
1281
1277
|
}
|
1282
1278
|
}).then((n) => n && n[0] ? n[0] : null).catch(() => null);
|
1283
1279
|
function ss(r) {
|
1284
|
-
return
|
1280
|
+
return pe({
|
1285
1281
|
settings: {
|
1286
1282
|
type: "json",
|
1287
1283
|
validSuccess: !0,
|
@@ -1429,7 +1425,7 @@ class rs extends ee {
|
|
1429
1425
|
return Promise.resolve(!0);
|
1430
1426
|
}
|
1431
1427
|
getHistory(e) {
|
1432
|
-
const t = v.get(`history_${e}`), s = new
|
1428
|
+
const t = v.get(`history_${e}`), s = new le(t || { id: e });
|
1433
1429
|
return Promise.resolve(s.toDsl());
|
1434
1430
|
}
|
1435
1431
|
getHistoryItem(e, t) {
|
@@ -1484,7 +1480,7 @@ class Lt extends ee {
|
|
1484
1480
|
return Promise.resolve(!0);
|
1485
1481
|
}
|
1486
1482
|
getHistory(e) {
|
1487
|
-
const t = this.histories[e], s = new
|
1483
|
+
const t = this.histories[e], s = new le(t || { id: e });
|
1488
1484
|
return Promise.resolve(s);
|
1489
1485
|
}
|
1490
1486
|
getHistoryItem(e, t) {
|
@@ -1563,7 +1559,7 @@ class is extends ee {
|
|
1563
1559
|
);
|
1564
1560
|
}
|
1565
1561
|
}
|
1566
|
-
function
|
1562
|
+
function Ee(r, e, t = []) {
|
1567
1563
|
return t.map((s) => {
|
1568
1564
|
const { id: n, title: i, icon: a, children: o, hidden: c } = s;
|
1569
1565
|
return {
|
@@ -1572,16 +1568,16 @@ function Pe(r, e, t = []) {
|
|
1572
1568
|
icon: a,
|
1573
1569
|
hidden: c,
|
1574
1570
|
url: `${r}/${e}/${n}`,
|
1575
|
-
children: o && o.length ?
|
1571
|
+
children: o && o.length ? Ee(r, e, o) : void 0
|
1576
1572
|
};
|
1577
1573
|
});
|
1578
1574
|
}
|
1579
|
-
function
|
1575
|
+
function Re(r, e) {
|
1580
1576
|
if (!e) return r;
|
1581
1577
|
let t = [];
|
1582
1578
|
for (const s of r)
|
1583
1579
|
if (s.children && s.children.length) {
|
1584
|
-
const n =
|
1580
|
+
const n = Re(s.children, e);
|
1585
1581
|
n.length && (s.children = n, t.push(s));
|
1586
1582
|
} else
|
1587
1583
|
e.can(s.id.toString()) && t.push(s);
|
@@ -1592,7 +1588,7 @@ function os(r) {
|
|
1592
1588
|
menuPathPrefix: e = "",
|
1593
1589
|
pageRouteName: t = "page",
|
1594
1590
|
disableMenusFilter: s = !1
|
1595
|
-
} = r || {}, n =
|
1591
|
+
} = r || {}, n = be(), i = me(), a = nt(), o = z(!1), c = z(!1), l = n.project;
|
1596
1592
|
Ue(() => {
|
1597
1593
|
const { name: m, params: h, meta: f } = i;
|
1598
1594
|
if (m === k) {
|
@@ -1604,7 +1600,7 @@ function os(r) {
|
|
1604
1600
|
} else
|
1605
1601
|
o.value = !f.mask, c.value = !!f.pure;
|
1606
1602
|
});
|
1607
|
-
const p =
|
1603
|
+
const p = Ee(
|
1608
1604
|
e,
|
1609
1605
|
t,
|
1610
1606
|
l?.pages
|
@@ -1614,17 +1610,17 @@ function os(r) {
|
|
1614
1610
|
logo: d?.logo,
|
1615
1611
|
themeSwitchable: d?.themeSwitchable,
|
1616
1612
|
title: d?.title || l?.description || l?.name || "VTJ App",
|
1617
|
-
menus: s ? p :
|
1613
|
+
menus: s ? p : Re(p, a),
|
1618
1614
|
pure: c
|
1619
1615
|
};
|
1620
1616
|
}
|
1621
1617
|
export {
|
1622
|
-
|
1623
|
-
|
1618
|
+
ye as ACCESS_KEY,
|
1619
|
+
_e as Access,
|
1624
1620
|
Ke as BUILD_IN_TAGS,
|
1625
1621
|
Le as BUILT_IN_DIRECTIVES,
|
1626
1622
|
ee as BaseService,
|
1627
|
-
|
1623
|
+
ae as CONTEXT_HOST,
|
1628
1624
|
pt as Context,
|
1629
1625
|
y as ContextMode,
|
1630
1626
|
qe as DATA_TYPES,
|
@@ -1639,7 +1635,7 @@ export {
|
|
1639
1635
|
Nt as Provider,
|
1640
1636
|
rs as StorageService,
|
1641
1637
|
C as VTJ_RENDERER_VERSION,
|
1642
|
-
|
1638
|
+
ve as adoptedStyleSheets,
|
1643
1639
|
es as clearLoaderCache,
|
1644
1640
|
Zt as createAccess,
|
1645
1641
|
Xt as createAdapter,
|
@@ -1658,8 +1654,8 @@ export {
|
|
1658
1654
|
St as defaultLoader,
|
1659
1655
|
I as fillBasePath,
|
1660
1656
|
F as getMock,
|
1661
|
-
|
1662
|
-
|
1657
|
+
$e as getModifiers,
|
1658
|
+
Se as getPlugin,
|
1663
1659
|
Ge as getRawComponent,
|
1664
1660
|
et as isBuiltInTag,
|
1665
1661
|
X as isCSSUrl,
|
@@ -1675,16 +1671,16 @@ export {
|
|
1675
1671
|
Xe as loadScriptUrl,
|
1676
1672
|
ut as mockApi,
|
1677
1673
|
ct as mockApis,
|
1678
|
-
|
1674
|
+
we as mockCleanup,
|
1679
1675
|
x as nodeRender,
|
1680
1676
|
We as parseDeps,
|
1681
1677
|
A as parseExpression,
|
1682
1678
|
V as parseFunction,
|
1683
|
-
|
1679
|
+
je as providerKey,
|
1684
1680
|
Ve as removeProdFlag,
|
1685
1681
|
Yt as setupPageSetting,
|
1686
|
-
|
1682
|
+
ge as toString,
|
1687
1683
|
nt as useAccess,
|
1688
1684
|
os as useMask,
|
1689
|
-
|
1685
|
+
be as useProvider
|
1690
1686
|
};
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vtj/renderer",
|
3
3
|
"private": false,
|
4
|
-
"version": "0.11.
|
4
|
+
"version": "0.11.7",
|
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.11.
|
25
|
-
"@vtj/utils": "~0.11.
|
24
|
+
"@vtj/core": "~0.11.7",
|
25
|
+
"@vtj/utils": "~0.11.7"
|
26
26
|
},
|
27
27
|
"devDependencies": {
|
28
28
|
"vue": "~3.5.5",
|
29
29
|
"vue-router": "~4.5.0",
|
30
30
|
"@vtj/cli": "~0.11.2",
|
31
|
-
"@vtj/icons": "~0.11.
|
32
|
-
"@vtj/ui": "~0.11.
|
31
|
+
"@vtj/icons": "~0.11.7",
|
32
|
+
"@vtj/ui": "~0.11.7"
|
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.11.
|
5
|
+
* @version 0.11.6
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
7
|
*/
|
8
|
-
export declare const version = "0.11.
|
8
|
+
export declare const version = "0.11.6";
|