@vtj/renderer 0.11.7 → 0.11.8
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 +30 -30
- package/package.json +5 -5
- package/types/services/base.d.ts +1 -0
- 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.8
|
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)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) => {
|
7
|
+
*/const R="0.11.8";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=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
|
-
}`:"(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;
|
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{constructor(e=l.request){this.req=e,this.api=_t(e),this.uploader=St(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 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,5 +1,5 @@
|
|
1
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
|
2
|
+
import { isUrl as Me, url as P, 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
4
|
import { inject as fe, defineComponent as he, h as K, ref as z, defineAsyncComponent as oe, watchEffect as Ue } from "vue";
|
5
5
|
import { useRoute as me } from "vue-router";
|
@@ -7,10 +7,10 @@ import { useRoute as me } 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.11.
|
10
|
+
* @version 0.11.8
|
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.8";
|
14
14
|
var y = /* @__PURE__ */ ((r) => (r.Runtime = "Runtime", r.Design = "Design", r.Raw = "Raw", r.VNode = "VNode", r))(y || {});
|
15
15
|
const ae = [
|
16
16
|
"$el",
|
@@ -70,12 +70,12 @@ function ze(r) {
|
|
70
70
|
}
|
71
71
|
function Wt(r) {
|
72
72
|
return r.map(
|
73
|
-
(e) => `<script src="${
|
73
|
+
(e) => `<script src="${P.append(e, { v: C })}"><\/script>`
|
74
74
|
).join("");
|
75
75
|
}
|
76
76
|
function Gt(r = []) {
|
77
77
|
return r.map(
|
78
|
-
(e) => `<link rel="stylesheet" href="${
|
78
|
+
(e) => `<link rel="stylesheet" href="${P.append(e, { v: C })}" />`
|
79
79
|
).join("");
|
80
80
|
}
|
81
81
|
function Ve(r, e = !1) {
|
@@ -269,7 +269,7 @@ class _e {
|
|
269
269
|
return se(e).some((i) => s[i] || s[t + "." + i]);
|
270
270
|
}
|
271
271
|
install(e) {
|
272
|
-
e.config.globalProperties.$access
|
272
|
+
e.config.globalProperties.$access = this, e.provide(ye, this);
|
273
273
|
}
|
274
274
|
isAuthPath(e) {
|
275
275
|
const { auth: t, isAuth: s } = this.options;
|
@@ -480,7 +480,7 @@ function ut(r, e) {
|
|
480
480
|
if (t && s) {
|
481
481
|
const n = Te(`${t}(.*)`), i = De(t, { decode: decodeURIComponent }), a = A(s, {}, !0);
|
482
482
|
r.mock(n, (o) => {
|
483
|
-
const c =
|
483
|
+
const c = P.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
|
}
|
@@ -733,7 +733,7 @@ function wt(r, e) {
|
|
733
733
|
{}
|
734
734
|
);
|
735
735
|
}
|
736
|
-
let L = [],
|
736
|
+
let L = [], E = {};
|
737
737
|
const St = (r) => r;
|
738
738
|
async function Se(r, e = window) {
|
739
739
|
const { urls: t = [], library: s } = r, n = t.filter((o) => Z(o));
|
@@ -751,8 +751,8 @@ function G(r) {
|
|
751
751
|
if (!i || typeof i == "string") return n;
|
752
752
|
if (i.type === "Schema" && i.id)
|
753
753
|
return a.defineAsyncComponent(async () => {
|
754
|
-
const o =
|
755
|
-
return o && (o.name = n,
|
754
|
+
const o = E[i.id] || await e(i.id);
|
755
|
+
return o && (o.name = n, E[i.id] = o), o ? W({
|
756
756
|
...s,
|
757
757
|
Vue: a,
|
758
758
|
dsl: ne(o),
|
@@ -762,8 +762,8 @@ function G(r) {
|
|
762
762
|
});
|
763
763
|
if (i.type === "UrlSchema" && i.url)
|
764
764
|
return a.defineAsyncComponent(async () => {
|
765
|
-
const o =
|
766
|
-
return o && (o.name = n,
|
765
|
+
const o = E[i.url] || await t(i.url);
|
766
|
+
return o && (o.name = n, E[i.url] = o), o ? W({
|
767
767
|
...s,
|
768
768
|
Vue: a,
|
769
769
|
dsl: ne(o),
|
@@ -772,8 +772,8 @@ function G(r) {
|
|
772
772
|
}).renderer : null;
|
773
773
|
});
|
774
774
|
if (i.type === "Plugin") {
|
775
|
-
let o = i.library ?
|
776
|
-
return o || (i.library && L.push(i.library), o =
|
775
|
+
let o = i.library ? E[i.library] : null;
|
776
|
+
return o || (i.library && L.push(i.library), o = E[i.library || Symbol()] = a.defineAsyncComponent(
|
777
777
|
async () => {
|
778
778
|
const c = await Se(i, s.window);
|
779
779
|
return c || (console.warn("getPlugin result is null", i), null);
|
@@ -784,7 +784,7 @@ function G(r) {
|
|
784
784
|
};
|
785
785
|
}
|
786
786
|
function es() {
|
787
|
-
|
787
|
+
E = {};
|
788
788
|
}
|
789
789
|
function x(r, e, t = O, s = St) {
|
790
790
|
if (!r || !r.name || r.invisible) return null;
|
@@ -794,11 +794,11 @@ function x(r, e, t = O, s = St) {
|
|
794
794
|
const f = (u) => {
|
795
795
|
const w = u.$components, g = (() => {
|
796
796
|
if (r.name === "component")
|
797
|
-
return
|
797
|
+
return Et(u, r.props?.is);
|
798
798
|
if (r.name === "slot") return r.name;
|
799
799
|
const $ = s(r.name, r.from, t);
|
800
800
|
return j($) ? et($) || tt($) ? $ : w[$] ?? n?.app?.component($) ?? $ : $;
|
801
|
-
})(), S =
|
801
|
+
})(), S = Pt(i, r.props ?? {}, u), Ce = Rt(t, r.events ?? {}, u);
|
802
802
|
if (r.name === "slot")
|
803
803
|
return Ct(t, r, S, u, s);
|
804
804
|
d && Object.assign(S, u.__parseExpression(d.value)), l && (S.style = Object.assign(
|
@@ -848,10 +848,10 @@ function jt(r = []) {
|
|
848
848
|
function bt(r, e) {
|
849
849
|
return !!e.__parseExpression(r.value);
|
850
850
|
}
|
851
|
-
function
|
851
|
+
function Et(r, e) {
|
852
852
|
return e ? _(e) ? r.__parseExpression(e) : e : "div";
|
853
853
|
}
|
854
|
-
function
|
854
|
+
function Pt(r, e, t) {
|
855
855
|
const s = Y(e, t);
|
856
856
|
return s.ref = t.__ref(r, s.ref), s;
|
857
857
|
}
|
@@ -1087,13 +1087,13 @@ class Nt extends Fe {
|
|
1087
1087
|
else {
|
1088
1088
|
const w = l[h] || [];
|
1089
1089
|
for (const g of w)
|
1090
|
-
X(g) && await Ye(h,
|
1090
|
+
X(g) && await Ye(h, P.append(g, { v: C })), Z(g) && await ie(P.append(g, { v: C }));
|
1091
1091
|
n[h] = e[h];
|
1092
1092
|
}
|
1093
1093
|
}
|
1094
1094
|
if (o === "development") {
|
1095
1095
|
for (const f of p)
|
1096
|
-
await ie(
|
1096
|
+
await ie(P.append(f, { v: C }));
|
1097
1097
|
const h = this.materials || {};
|
1098
1098
|
for (const f of d) {
|
1099
1099
|
const u = e[m[f]], w = Ae[f];
|
@@ -1248,7 +1248,7 @@ function be(r = {}) {
|
|
1248
1248
|
}
|
1249
1249
|
return e;
|
1250
1250
|
}
|
1251
|
-
const
|
1251
|
+
const Ee = {
|
1252
1252
|
type: "json",
|
1253
1253
|
validSuccess: !0,
|
1254
1254
|
originResponse: !1,
|
@@ -1263,7 +1263,7 @@ const Pe = {
|
|
1263
1263
|
type: t,
|
1264
1264
|
data: s
|
1265
1265
|
},
|
1266
|
-
settings:
|
1266
|
+
settings: Ee
|
1267
1267
|
}), Ut = (r, e = "/__vtj__/api/uploader.json") => async (t, s) => await r.send({
|
1268
1268
|
url: e,
|
1269
1269
|
method: "post",
|
@@ -1272,7 +1272,7 @@ const Pe = {
|
|
1272
1272
|
projectId: s
|
1273
1273
|
},
|
1274
1274
|
settings: {
|
1275
|
-
...
|
1275
|
+
...Ee,
|
1276
1276
|
type: "data"
|
1277
1277
|
}
|
1278
1278
|
}).then((n) => n && n[0] ? n[0] : null).catch(() => null);
|
@@ -1291,12 +1291,12 @@ function ss(r) {
|
|
1291
1291
|
});
|
1292
1292
|
}
|
1293
1293
|
class ee {
|
1294
|
+
constructor(e = J) {
|
1295
|
+
this.req = e, this.api = Bt(e), this.uploader = Ut(e);
|
1296
|
+
}
|
1294
1297
|
api;
|
1295
1298
|
pluginCaches = {};
|
1296
1299
|
uploader;
|
1297
|
-
constructor(e = J) {
|
1298
|
-
this.api = Bt(e), this.uploader = Ut(e);
|
1299
|
-
}
|
1300
1300
|
async getExtension() {
|
1301
1301
|
console.log("BaseService.getExtension");
|
1302
1302
|
}
|
@@ -1559,7 +1559,7 @@ class is extends ee {
|
|
1559
1559
|
);
|
1560
1560
|
}
|
1561
1561
|
}
|
1562
|
-
function
|
1562
|
+
function Pe(r, e, t = []) {
|
1563
1563
|
return t.map((s) => {
|
1564
1564
|
const { id: n, title: i, icon: a, children: o, hidden: c } = s;
|
1565
1565
|
return {
|
@@ -1568,7 +1568,7 @@ function Ee(r, e, t = []) {
|
|
1568
1568
|
icon: a,
|
1569
1569
|
hidden: c,
|
1570
1570
|
url: `${r}/${e}/${n}`,
|
1571
|
-
children: o && o.length ?
|
1571
|
+
children: o && o.length ? Pe(r, e, o) : void 0
|
1572
1572
|
};
|
1573
1573
|
});
|
1574
1574
|
}
|
@@ -1600,7 +1600,7 @@ function os(r) {
|
|
1600
1600
|
} else
|
1601
1601
|
o.value = !f.mask, c.value = !!f.pure;
|
1602
1602
|
});
|
1603
|
-
const p =
|
1603
|
+
const p = Pe(
|
1604
1604
|
e,
|
1605
1605
|
t,
|
1606
1606
|
l?.pages
|
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.8",
|
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.8",
|
25
|
+
"@vtj/utils": "~0.11.8"
|
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/
|
32
|
-
"@vtj/
|
31
|
+
"@vtj/ui": "~0.11.8",
|
32
|
+
"@vtj/icons": "~0.11.8"
|
33
33
|
},
|
34
34
|
"exports": {
|
35
35
|
".": {
|
package/types/services/base.d.ts
CHANGED
@@ -2,6 +2,7 @@ import { ProjectSchema, PageFile, BlockFile, BlockSchema, MaterialDescription, H
|
|
2
2
|
import { IStaticRequest } from '@vtj/utils';
|
3
3
|
export declare function createServiceRequest(notify?: (msg: string) => void): IStaticRequest<any, any>;
|
4
4
|
export declare class BaseService implements Service {
|
5
|
+
req: IStaticRequest;
|
5
6
|
protected api: (type: string, data: any, query?: any) => Promise<any>;
|
6
7
|
private pluginCaches;
|
7
8
|
protected uploader: (file: File, projectId: string) => Promise<StaticFileInfo>;
|
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.7
|
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.7";
|