@vtj/renderer 0.8.171 → 0.8.172
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 +31 -24
- package/package.json +5 -5
- package/types/plugins/access.d.ts +4 -0
- package/types/version.d.ts +2 -2
package/dist/index.cjs
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
* Copyright (c) 2024, VTJ.PRO All rights reserved.
|
3
3
|
* @name @vtj/renderer
|
4
4
|
* @author CHC chenhuachun1549@dingtalk.com
|
5
|
-
* @version 0.8.
|
5
|
+
* @version 0.8.172
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
|
-
*/const b="0.8.
|
8
|
-
`)+o;const a=`with(${t?"{}":"$scope || {}"}) { ${o} }`;return new Function("$scope",a)(e)}catch(r){if(c.logger.error("parseExpression.error",r,n,e?.__self??e),s)throw r}}function L(n,e,t=!1,s=!1){const r=R(n,e,t,s);if(typeof r!="function"&&(c.logger.error("parseFunction.error","not a function",n,e?.__self??e),s))throw new Error(`"${n.value}" not a function`);return r}function j(n){return n&&n.type==="JSExpression"}function M(n){return typeof n=="object"&&n&&n.type==="JSFunction"}function he(n){return j(n)||M(n)}function Le(n){return he(n)?n.value:JSON.stringify(n)}let $=null;const qe=c.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:n=>n.data?.code===0||!!n.data?.success,failMessage:!0,showError:n=>{F.ElNotification.error({message:n||"未知错误"})},showLoading:()=>{$&&$.close(),$=F.ElLoading.service({lock:!0,text:"Loading",background:"rgba(0, 0, 0, 0.05)"})},hideLoading:()=>{$&&($.close(),$=null)}}});let C;function me(n,e){const{jsonp:t,request:s}=e;if(n.method==="jsonp")return(r={})=>t(n.url,{...n.jsonpOptions,query:r});{const r=n.headers?R(n.headers,{},!0):void 0,o={url:n.url,method:n.method,settings:{...n.settings,headers:r}};return(a,i)=>(delete o.data,s.send(c.merge(o,i||{},{data:a})))}}function ge(n,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:r}=n;return(o,a)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,r,o,a)}}function ve(n=[],e=[],t){const s={};for(const r of n)s[r.id]=me(r,t);for(const r of e)s[r.id]=ge(r,t);return s}async function ye(n=[]){C=await import("mockjs").then(e=>e.default||e),C&&(C.setup({timeout:"50-500"}),K(),n.forEach(e=>_e(C,e)))}function _e(n,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const r=c.pathToRegexp(`${t}(.*)`),o=c.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=R(s,{},!0);n.mock(r,i=>{const l=c.url.parse(i.url)||{},u=i.body instanceof FormData?c.formDataToJson(i.body):i.body,h=o(i.url)?.params;return Object.assign(i,{data:u,params:l,query:h}),n.mock(a(i))})}}function K(){C&&(C._mocked={})}const Je={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ__",unauthorized:"/unauthorized",auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!"},z=Symbol("access");class Ve{options;data=null;mode=w.Raw;constructor(e){this.options=Object.assign({},Je,e),this.loadData()}connect(e){const{mode:t,router:s,request:r}=e;this.mode=t,s&&t===w.Raw&&this.setGuard(s),r&&this.setRequest(r)}login(e){const{storageKey:t,storagePrefix:s,session:r,authKey:o}=this.options;this.setData(e),this.data&&(c.storage.save(t,e,{type:"local",prefix:s}),r&&c.cookie.set(o,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:r}=this.options;this.data=null,c.storage.remove(e,{type:"local",prefix:t}),s&&c.cookie.remove(r)}logout(){this.clear(),this.toLogin()}getData(){return this.data}can(e){const{permissions:t={}}=this.data||{};return typeof e=="function"?e(t):c.toArray(e).every(r=>t[r])}some(e){const{permissions:t={}}=this.data||{};return c.toArray(e).some(r=>t[r])}install(e){e.config.globalProperties.$access||(e.config.globalProperties.$access=this),e.provide(z,this)}isAuthPath(e){const{auth:t,isAuth:s}=this.options;if(s)return s(e);if(e.path&&typeof t=="string"){const r=t.split("#")[1]||t;return e.path===r}return!1}toLogin(){const{auth:e,redirectParam:t}=this.options;if(!e||this.mode!==w.Raw)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(r=>c.unRSA(r,t));this.data=JSON.parse(s.join(""));return}if(typeof e=="string")try{const s=t?c.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=c.storage.get(e,{type:"local",prefix:t});this.setData(s)}isLogined(){const{session:e,authKey:t}=this.options;return e&&t?!!c.cookie.get(t):!!this.data}hasRoutePermission(e){if(e.name===q){const t=e.params.id;return t&&this.can(t)}return!0}setGuard(e){e.beforeEach((t,s,r)=>this.guard(t,r))}guard(e,t){if(this.isWhiteList(e)||this.isAuthPath(e))return t();if(this.isLogined())return this.hasRoutePermission(e)?t():(this.showTip("无权限访问该页面"),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;t&&(await c.delay(150),await t(e,{title:"提示",type:"warning"}).catch(s=>s))}setRequest(e){e.useRequest(t=>(this.data?.token&&(t.headers[this.options.authKey]=this.data?.token),t)),e.useResponse(async t=>(await this.showUnauthorizedAlert(t),t),async t=>{const s=t.response||t||{};return await this.showUnauthorizedAlert(s),Promise.reject(t)})}}function Se(){return m.inject(z,null)}class we{__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:r}=e;this.__mode=t,s&&(this.__id=s.id||null,this.__transform=s.transform||{}),r&&Object.assign(this,r)}setup(e,t=x){const s=t.getCurrentInstance();if(!s)return;this.__refs={},this.$refs={},this.context={},this.__contextRefs={},this.__instance=s.proxy;const r=s.appContext.config.globalProperties;Object.assign(this,r),Object.assign(this,e||{}),this.__proxy(),t.onMounted(()=>{this.__proxy()}),t.onUnmounted(()=>{this.__cleanup()}),t.onBeforeUpdate(()=>{this.__refs={},this.$refs={},this.__contextRefs={},this.context={}})}__proxy(){this.__instance&&B.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){B.forEach(e=>{this[e]=null})}__parseFunction(e){if(e)if(this.__mode===w.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return L({type:s,value:r},this)}else return L(e,this)}__parseExpression(e){if(e)if(this.__mode===w.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return R({type:s,value:r},this)}else return R(e,this)}__ref(e=null,t){if(this.__mode!==w.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await c.delay(0);let r=s?.$vtjEl||s?.$el||s?._?.vnode?.el||s;if(!r){typeof t=="string"&&(delete this.$refs[t],e&&delete this.__refs[e]);return}if(r.nodeType===3&&r.nextSibling&&(r=r.nextSibling),r.__vtj__=e,w.Design===this.__mode&&(r.__context__=this,r.draggable=!0),e&&(this.__refs[e]=s),typeof t=="function")t(s);else if(t){const o=this.$refs[t];if(o&&s!==o){const a=new Set([].concat(o,s));this.$refs[t]=Array.from(a)}else this.$refs[t]=s}return s}}__clone(e={}){const t={...this.context,...e},s={...t,context:t};return s.context.__proto__=this.context,s.__proto__=this,s}}function T(n){const{Vue:e=x,mode:t=w.Runtime,components:s={},libs:r={},apis:o={},loader:a}=n,i=e.computed(()=>n.dsl),l={$components:s,$libs:r,$apis:o},u=new we({mode:t,dsl:i.value,attrs:l}),h=e.defineComponent({name:i.value.name,props:{...ze(i.value.props??[],u)},setup(d){u.$props=d,u.props=d,i.value.id&&V(n.window||window,i.value.id,i.value.css||""),u.state=We(e,i.value.state??{},u);const f=Ge(e,i.value.computed??{},u),v=Ye(i.value.methods??{},u),p=Xe(e,i.value.inject,u),g=Ee(i.value.dataSources||{},u),E={...p,...f,...v,...g};return u.setup(E,e),Qe(e,i.value.watch??[],u),{vtj:u}},emits:Ke(i.value.emits),expose:["vtj"],render(){if(!i.value.nodes)return null;const d=i.value.nodes||[];return d.length===1?O(d[0],u,e,a):d.map(f=>O(f,u,e,a))},...Ze(i.value.lifeCycles??{},u)});return{renderer:e.markRaw(h),context:u}}function Ke(n=[]){return n.map(e=>c.isString(e)?e:e.name)}function ze(n=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(o=>re[o]):void 0;return n.map(s=>c.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:j(s.default)?e.__parseExpression(s.default):s.default}).reduce((s,r)=>(s[r.name]={type:t(r.type),required:r.required,default:r.default},s),{})}function We(n,e,t){return n.reactive(Object.keys(e||{}).reduce((s,r)=>{let o=e[r];return j(o)?o=t.__parseExpression(o):M(o)&&(o=t.__parseFunction(o)),s[r]=o,s},{}))}function Ge(n,e,t){return Object.entries(e??{}).reduce((s,[r,o])=>(s[r]=n.computed(t.__parseFunction(o)),s),{})}function Ye(n,e){return Object.entries(n??{}).reduce((t,[s,r])=>(t[s]=e.__parseFunction(r),t),{})}function Xe(n,e=[],t){return e.reduce((s,r)=>{const{name:o,from:a}=r||{};r.default;const i=j(a)?t.__parseExpression(a)||o:a??o,l=j(r.default)?t.__parseExpression(r.default):r.default??null;return s[o]=n.inject(i,l),s},{})}function Ee(n,e){return Object.keys(n).reduce((t,s)=>{const r=n[s],o=e.$apis[r.ref],a=M(r.transform)?r.transform.value?e.__parseFunction(r.transform):void 0:r.transform;return t[s]=async(...i)=>{const l=await o.apply(e,i);return a?a(l):l},t},{})}function Qe(n,e=[],t){e.forEach(s=>{n.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function Ze(n,e){return Object.entries(n??{}).reduce((t,[s,r])=>(t[s]=e.__parseFunction(r),t),{})}let N=[];const je=n=>n;async function W(n,e=window){const{urls:t=[],library:s}=n,r=t.filter(i=>k(i));if(r.length===0||!s)return null;const o=t.filter(i=>H(i));return o.length&&de(o,e),await fe(r,s,e).catch(i=>(console.warn("loadScriptUrl error",r,s,i),null))}function D(n){const{getDsl:e,getDslByUrl:t,options:s}=n;return s.window&&(N.forEach(r=>{delete s.window[r]}),N=[]),(r,o,a=x)=>!o||typeof o=="string"?r:o.type==="Schema"&&o.id?a.defineAsyncComponent(async()=>{const i=await e(o.id);return i&&(i.name=r),i?T({...s,Vue:a,dsl:i,mode:w.Runtime,loader:D(n)}).renderer:null}):o.type==="UrlSchema"&&o.url?a.defineAsyncComponent(async()=>{const i=await t(o.url);return i&&(i.name=r),i?T({...s,Vue:a,dsl:i,mode:w.Runtime,loader:D(n)}).renderer:null}):o.type==="Plugin"?(o.library&&N.push(o.library),a.defineAsyncComponent(async()=>{const i=await W(o,s.window);return i||(console.warn("getPlugin result is null",o),null)})):r}function O(n,e,t=x,s=je){if(!n||!n.name||n.invisible)return null;const{id:r=null,directives:o=[]}=n,{vIf:a,vFor:i,vShow:l,vModels:u,vBind:h}=et(o);if(a&&!tt(a,e))return null;const d=f=>{const v=f.$components,p=(()=>{if(n.name==="component")return st(f,n.props?.is);if(n.name==="slot")return n.name;const _=s(n.name,n.from,t);return c.isString(_)?v[_]??_:_})(),g=nt(r,n.props??{},f),E=rt(t,n.events??{},f);if(n.name==="slot")return ot(t,n,g,f,s);h&&Object.assign(g,f.__parseExpression(h.value)),l&&(g.style=Object.assign(g.style??{},at(l,f))),u.forEach(_=>{Object.assign(g,ct(t,_,f))});const y=ut(t,n.children??[],f,s,n);return t.createVNode(p,{...g,...E},y)};return i?ft(i,d,e):d(e)}function et(n=[]){const e=n.find(i=>c.camelCase(i.name)==="vIf"),t=n.find(i=>c.camelCase(i.name)==="vFor"),s=n.find(i=>c.camelCase(i.name)==="vShow"),r=n.find(i=>c.camelCase(i.name)==="vBind"),o=n.filter(i=>c.camelCase(i.name)==="vModel"),a=n.filter(i=>!ne.includes(c.camelCase(i.name)));return{vIf:e,vFor:t,vShow:s,vModels:o,vBind:r,others:a}}function tt(n,e){return!!e.__parseExpression(n.value)}function st(n,e){return e?j(e)?n.__parseExpression(e):e:"div"}function nt(n,e,t){const s=Object.keys(e||{}).reduce((r,o)=>{let a=e[o];return j(a)?a=t.__parseExpression(a):M(a)&&(a=t.__parseFunction(a)),r[o]=a,r},{});return s.ref=t.__ref(n,s.ref),s}function rt(n,e,t){const s=["passive","capture","once"],r={capture:"Capture",once:"Once",passive:"OnceCapture"};return Object.keys(e||{}).reduce((o,a)=>{const i=e[a],l=G(i.modifiers),u=l.find(f=>s.includes(f)),h="on"+c.upperFirst(a)+(u&&r[u]||""),d=t.__parseFunction(i.handler);return d&&(o[h]=n.withModifiers(d,l)),o},{})}function G(n={},e=!1){const t=Object.keys(n);return e?t.map(s=>"."+s):t}function ot(n,e,t,s,r){const{children:o}=e,a=it(e,s),i=s.$slots?.[a.name];return i?i(t):o?c.isString(o)?n.createTextVNode(o):j(o)?n.createTextVNode(J(s.__parseExpression(o))):Array.isArray(o)?o.map(l=>O(l,s,n,r)):null:null}function it(n,e){const{props:t}=n,s=t?.name||"default";return{name:j(s)?e.__parseExpression(s):s,params:[]}}function at(n,e){return e.__parseExpression(n.value)?{}:{display:"none"}}function ct(n,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
7
|
+
*/const b="0.8.172";var w=(n=>(n.Runtime="Runtime",n.Design="Design",n.Raw="Raw",n.VNode="VNode",n))(w||{});const B=["$el","$emit","$nextTick","$parent","$root","$attrs","$slots","$watch","$props","$options","$forceUpdate"],Ue=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeUnmount","unmounted","errorCaptured","renderTracked","renderTriggered","activated","deactivated"],ne=["vIf","vShow","vModel","vFor","vBind"],re={String,Number,Boolean,Array,Object,Function,Date},q="VtjPage",oe="VtjHomepage";function A(n,e){return n.map(t=>c.isUrl(t)||t.startsWith("/")?t:`${e}${t}`)}function H(n){return/\.css$/.test(n)}function k(n){return/\.js$/.test(n)}function ie(n){return/\.json$/.test(n)}function Ne(n){return n.map(e=>`<script src="${c.url.append(e,{v:b})}"><\/script>`).join("")}function Be(n=[]){return n.map(e=>`<link rel="stylesheet" href="${c.url.append(e,{v:b})}" />`).join("")}function ae(n,e=!1){return e&&n.endsWith(".prod.js")?n.replace(".prod.js",".js"):n}function ce(n,e,t=!1){const s=n.filter(f=>!!f.enabled),r=[],o=[],a=[],i=[],l={},u={},h=[],d={};return s.forEach(({urls:f,assetsUrl:v,library:p,assetsLibrary:g,localeLibrary:E})=>{f?.forEach(y=>{k(y)&&r.push(ae(y,t)),H(y)&&o.push(y)}),p&&(i.push(p),l[p]=A(f||[],e),E&&(u[p]=E)),v&&a.push(v),g&&h.push(g),p&&g&&(d[g]=p)}),{scripts:A(r,e),css:A(o,e),materials:A(a,e),libraryExports:i,materialExports:c.dedupArray(h),materialMapLibrary:d,libraryMap:l,libraryLocaleMap:u}}function ue(n,e){const{name:t,parent:s,alias:r}=n;return s?e[s]?.[r||t]:e[r||t]}function J(n){return c.isString(n)?n:JSON.stringify(n)}function V(n,e,t){const s=n.CSSStyleSheet;if(s.prototype.replaceSync){const r=new s;r.id=e,r.replaceSync(t);const o=n.document,a=o.adoptedStyleSheets,i=Array.from(a).filter(l=>l.id!==e);o.adoptedStyleSheets=[...i,r]}else{const r=n.document;let o=r.getElementById(e);o?o.innerHTML=t:(o=r.createElement("style"),o.id=e,o.innerHTML=t,r.head.appendChild(o))}}async function le(n,e){const t=await window.fetch(e).then(s=>s.text()).catch(()=>"");t&&V(window,n,t)}function de(n,e=window){const t=e.document,s=e.document.head;for(const r of n)if(!t.getElementById(r)){const a=t.createElement("link");a.rel="stylesheet",a.id=r,a.href=r,s.appendChild(a)}}async function fe(n,e,t=window){const s=t.document,r=t.document.head;let o=t[e];return o?o.default||o:new Promise((a,i)=>{for(const l of n){const u=s.createElement("script");u.src=l,u.onload=()=>{o=t[e],o?a(o.default||o):i(null)},u.onerror=h=>{i(h)},r.appendChild(u)}})}function pe(n){return c.isFunction(n)||c.isFunction(n?.install)}function R(n,e,t=!1,s=!1){try{const r=['"use strict";',"var __self = arguments[0];"];r.push("return ");let o=(n.value||"").trim();o=o.replace(/this(\W|$)/g,(i,l)=>`__self${l}`),o=r.join(`
|
8
|
+
`)+o;const a=`with(${t?"{}":"$scope || {}"}) { ${o} }`;return new Function("$scope",a)(e)}catch(r){if(c.logger.error("parseExpression.error",r,n,e?.__self??e),s)throw r}}function L(n,e,t=!1,s=!1){const r=R(n,e,t,s);if(typeof r!="function"&&(c.logger.error("parseFunction.error","not a function",n,e?.__self??e),s))throw new Error(`"${n.value}" not a function`);return r}function j(n){return n&&n.type==="JSExpression"}function M(n){return typeof n=="object"&&n&&n.type==="JSFunction"}function he(n){return j(n)||M(n)}function Le(n){return he(n)?n.value:JSON.stringify(n)}let $=null;const qe=c.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:n=>n.data?.code===0||!!n.data?.success,failMessage:!0,showError:n=>{F.ElNotification.error({message:n||"未知错误"})},showLoading:()=>{$&&$.close(),$=F.ElLoading.service({lock:!0,text:"Loading",background:"rgba(0, 0, 0, 0.05)"})},hideLoading:()=>{$&&($.close(),$=null)}}});let C;function me(n,e){const{jsonp:t,request:s}=e;if(n.method==="jsonp")return(r={})=>t(n.url,{...n.jsonpOptions,query:r});{const r=n.headers?R(n.headers,{},!0):void 0,o={url:n.url,method:n.method,settings:{...n.settings,headers:r}};return(a,i)=>(delete o.data,s.send(c.merge(o,i||{},{data:a})))}}function ge(n,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:r}=n;return(o,a)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,r,o,a)}}function ve(n=[],e=[],t){const s={};for(const r of n)s[r.id]=me(r,t);for(const r of e)s[r.id]=ge(r,t);return s}async function ye(n=[]){C=await import("mockjs").then(e=>e.default||e),C&&(C.setup({timeout:"50-500"}),K(),n.forEach(e=>_e(C,e)))}function _e(n,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const r=c.pathToRegexp(`${t}(.*)`),o=c.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=R(s,{},!0);n.mock(r,i=>{const l=c.url.parse(i.url)||{},u=i.body instanceof FormData?c.formDataToJson(i.body):i.body,h=o(i.url)?.params;return Object.assign(i,{data:u,params:l,query:h}),n.mock(a(i))})}}function K(){C&&(C._mocked={})}const Je={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ_",unauthorized:"/unauthorized",auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!",noPermissionMessage:"无权限访问该页面"},z=Symbol("access");class Ve{options;data=null;mode=w.Raw;constructor(e){this.options=Object.assign({},Je,e),this.loadData()}connect(e){const{mode:t,router:s,request:r}=e;this.mode=t,s&&t===w.Raw&&this.setGuard(s),r&&this.setRequest(r)}login(e){const{storageKey:t,storagePrefix:s,session:r,authKey:o}=this.options;this.setData(e),this.data&&(c.storage.save(t,e,{type:"local",prefix:s}),r&&c.cookie.set(o,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:r}=this.options;this.data=null,c.storage.remove(e,{type:"local",prefix:t}),s&&c.cookie.remove(r)}logout(){this.clear(),this.toLogin()}getData(){return this.data}can(e){const{permissions:t={}}=this.data||{};return typeof e=="function"?e(t):c.toArray(e).every(r=>t[r])}some(e){const{permissions:t={}}=this.data||{};return c.toArray(e).some(r=>t[r])}install(e){e.config.globalProperties.$access||(e.config.globalProperties.$access=this),e.provide(z,this)}isAuthPath(e){const{auth:t,isAuth:s}=this.options;if(s)return s(e);if(e.path&&typeof t=="string"){const r=t.split("#")[1]||t;return e.path===r}return!1}toLogin(){const{auth:e,redirectParam:t}=this.options;if(!e||this.mode!==w.Raw)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(r=>c.unRSA(r,t));this.data=JSON.parse(s.join(""));return}if(typeof e=="string")try{const s=t?c.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=c.storage.get(e,{type:"local",prefix:t});this.setData(s)}isLogined(){const{session:e,authKey:t}=this.options;return e&&t?!!c.cookie.get(t):!!this.data}hasRoutePermission(e){if(e.name===q){const t=e.params.id;return t&&this.can(t)}return!0}setGuard(e){e.beforeEach((t,s,r)=>this.guard(t,r))}guard(e,t){if(this.isWhiteList(e)||this.isAuthPath(e))return t();if(this.isLogined()){if(this.hasRoutePermission(e))return t();{const s=this.options.noPermissionMessage||"无权限访问";return this.showTip(s),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;t&&(await c.delay(150),await t(e,{title:"提示",type:"warning"}).catch(s=>s))}setRequest(e){e.useRequest(t=>(this.data?.token&&(t.headers[this.options.authKey]=this.data?.token),t)),e.useResponse(async t=>(await this.showUnauthorizedAlert(t),t),async t=>{const s=t.response||t||{};return await this.showUnauthorizedAlert(s),Promise.reject(t)})}}function Se(){return m.inject(z,null)}class we{__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:r}=e;this.__mode=t,s&&(this.__id=s.id||null,this.__transform=s.transform||{}),r&&Object.assign(this,r)}setup(e,t=x){const s=t.getCurrentInstance();if(!s)return;this.__refs={},this.$refs={},this.context={},this.__contextRefs={},this.__instance=s.proxy;const r=s.appContext.config.globalProperties;Object.assign(this,r),Object.assign(this,e||{}),this.__proxy(),t.onMounted(()=>{this.__proxy()}),t.onUnmounted(()=>{this.__cleanup()}),t.onBeforeUpdate(()=>{this.__refs={},this.$refs={},this.__contextRefs={},this.context={}})}__proxy(){this.__instance&&B.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){B.forEach(e=>{this[e]=null})}__parseFunction(e){if(e)if(this.__mode===w.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return L({type:s,value:r},this)}else return L(e,this)}__parseExpression(e){if(e)if(this.__mode===w.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return R({type:s,value:r},this)}else return R(e,this)}__ref(e=null,t){if(this.__mode!==w.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await c.delay(0);let r=s?.$vtjEl||s?.$el||s?._?.vnode?.el||s;if(!r){typeof t=="string"&&(delete this.$refs[t],e&&delete this.__refs[e]);return}if(r.nodeType===3&&r.nextSibling&&(r=r.nextSibling),r.__vtj__=e,w.Design===this.__mode&&(r.__context__=this,r.draggable=!0),e&&(this.__refs[e]=s),typeof t=="function")t(s);else if(t){const o=this.$refs[t];if(o&&s!==o){const a=new Set([].concat(o,s));this.$refs[t]=Array.from(a)}else this.$refs[t]=s}return s}}__clone(e={}){const t={...this.context,...e},s={...t,context:t};return s.context.__proto__=this.context,s.__proto__=this,s}}function T(n){const{Vue:e=x,mode:t=w.Runtime,components:s={},libs:r={},apis:o={},loader:a}=n,i=e.computed(()=>n.dsl),l={$components:s,$libs:r,$apis:o},u=new we({mode:t,dsl:i.value,attrs:l}),h=e.defineComponent({name:i.value.name,props:{...ze(i.value.props??[],u)},setup(d){u.$props=d,u.props=d,i.value.id&&V(n.window||window,i.value.id,i.value.css||""),u.state=We(e,i.value.state??{},u);const f=Ge(e,i.value.computed??{},u),v=Ye(i.value.methods??{},u),p=Xe(e,i.value.inject,u),g=Ee(i.value.dataSources||{},u),E={...p,...f,...v,...g};return u.setup(E,e),Qe(e,i.value.watch??[],u),{vtj:u}},emits:Ke(i.value.emits),expose:["vtj"],render(){if(!i.value.nodes)return null;const d=i.value.nodes||[];return d.length===1?O(d[0],u,e,a):d.map(f=>O(f,u,e,a))},...Ze(i.value.lifeCycles??{},u)});return{renderer:e.markRaw(h),context:u}}function Ke(n=[]){return n.map(e=>c.isString(e)?e:e.name)}function ze(n=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(o=>re[o]):void 0;return n.map(s=>c.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:j(s.default)?e.__parseExpression(s.default):s.default}).reduce((s,r)=>(s[r.name]={type:t(r.type),required:r.required,default:r.default},s),{})}function We(n,e,t){return n.reactive(Object.keys(e||{}).reduce((s,r)=>{let o=e[r];return j(o)?o=t.__parseExpression(o):M(o)&&(o=t.__parseFunction(o)),s[r]=o,s},{}))}function Ge(n,e,t){return Object.entries(e??{}).reduce((s,[r,o])=>(s[r]=n.computed(t.__parseFunction(o)),s),{})}function Ye(n,e){return Object.entries(n??{}).reduce((t,[s,r])=>(t[s]=e.__parseFunction(r),t),{})}function Xe(n,e=[],t){return e.reduce((s,r)=>{const{name:o,from:a}=r||{};r.default;const i=j(a)?t.__parseExpression(a)||o:a??o,l=j(r.default)?t.__parseExpression(r.default):r.default??null;return s[o]=n.inject(i,l),s},{})}function Ee(n,e){return Object.keys(n).reduce((t,s)=>{const r=n[s],o=e.$apis[r.ref],a=M(r.transform)?r.transform.value?e.__parseFunction(r.transform):void 0:r.transform;return t[s]=async(...i)=>{const l=await o.apply(e,i);return a?a(l):l},t},{})}function Qe(n,e=[],t){e.forEach(s=>{n.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function Ze(n,e){return Object.entries(n??{}).reduce((t,[s,r])=>(t[s]=e.__parseFunction(r),t),{})}let N=[];const je=n=>n;async function W(n,e=window){const{urls:t=[],library:s}=n,r=t.filter(i=>k(i));if(r.length===0||!s)return null;const o=t.filter(i=>H(i));return o.length&&de(o,e),await fe(r,s,e).catch(i=>(console.warn("loadScriptUrl error",r,s,i),null))}function D(n){const{getDsl:e,getDslByUrl:t,options:s}=n;return s.window&&(N.forEach(r=>{delete s.window[r]}),N=[]),(r,o,a=x)=>!o||typeof o=="string"?r:o.type==="Schema"&&o.id?a.defineAsyncComponent(async()=>{const i=await e(o.id);return i&&(i.name=r),i?T({...s,Vue:a,dsl:i,mode:w.Runtime,loader:D(n)}).renderer:null}):o.type==="UrlSchema"&&o.url?a.defineAsyncComponent(async()=>{const i=await t(o.url);return i&&(i.name=r),i?T({...s,Vue:a,dsl:i,mode:w.Runtime,loader:D(n)}).renderer:null}):o.type==="Plugin"?(o.library&&N.push(o.library),a.defineAsyncComponent(async()=>{const i=await W(o,s.window);return i||(console.warn("getPlugin result is null",o),null)})):r}function O(n,e,t=x,s=je){if(!n||!n.name||n.invisible)return null;const{id:r=null,directives:o=[]}=n,{vIf:a,vFor:i,vShow:l,vModels:u,vBind:h}=et(o);if(a&&!tt(a,e))return null;const d=f=>{const v=f.$components,p=(()=>{if(n.name==="component")return st(f,n.props?.is);if(n.name==="slot")return n.name;const _=s(n.name,n.from,t);return c.isString(_)?v[_]??_:_})(),g=nt(r,n.props??{},f),E=rt(t,n.events??{},f);if(n.name==="slot")return ot(t,n,g,f,s);h&&Object.assign(g,f.__parseExpression(h.value)),l&&(g.style=Object.assign(g.style??{},at(l,f))),u.forEach(_=>{Object.assign(g,ct(t,_,f))});const y=ut(t,n.children??[],f,s,n);return t.createVNode(p,{...g,...E},y)};return i?ft(i,d,e):d(e)}function et(n=[]){const e=n.find(i=>c.camelCase(i.name)==="vIf"),t=n.find(i=>c.camelCase(i.name)==="vFor"),s=n.find(i=>c.camelCase(i.name)==="vShow"),r=n.find(i=>c.camelCase(i.name)==="vBind"),o=n.filter(i=>c.camelCase(i.name)==="vModel"),a=n.filter(i=>!ne.includes(c.camelCase(i.name)));return{vIf:e,vFor:t,vShow:s,vModels:o,vBind:r,others:a}}function tt(n,e){return!!e.__parseExpression(n.value)}function st(n,e){return e?j(e)?n.__parseExpression(e):e:"div"}function nt(n,e,t){const s=Object.keys(e||{}).reduce((r,o)=>{let a=e[o];return j(a)?a=t.__parseExpression(a):M(a)&&(a=t.__parseFunction(a)),r[o]=a,r},{});return s.ref=t.__ref(n,s.ref),s}function rt(n,e,t){const s=["passive","capture","once"],r={capture:"Capture",once:"Once",passive:"OnceCapture"};return Object.keys(e||{}).reduce((o,a)=>{const i=e[a],l=G(i.modifiers),u=l.find(f=>s.includes(f)),h="on"+c.upperFirst(a)+(u&&r[u]||""),d=t.__parseFunction(i.handler);return d&&(o[h]=n.withModifiers(d,l)),o},{})}function G(n={},e=!1){const t=Object.keys(n);return e?t.map(s=>"."+s):t}function ot(n,e,t,s,r){const{children:o}=e,a=it(e,s),i=s.$slots?.[a.name];return i?i(t):o?c.isString(o)?n.createTextVNode(o):j(o)?n.createTextVNode(J(s.__parseExpression(o))):Array.isArray(o)?o.map(l=>O(l,s,n,r)):null:null}function it(n,e){const{props:t}=n,s=t?.name||"default";return{name:j(s)?e.__parseExpression(s):s,params:[]}}function at(n,e){return e.__parseExpression(n.value)?{}:{display:"none"}}function ct(n,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
9
9
|
${e.value.value} = v;
|
10
10
|
}`:"(v) => {}"},r=t.__parseFunction(s),o=G(e.modifiers),a=j(e.arg)?t.__parseExpression(e.arg):e.arg||"modelValue";return{[a]:t.__parseExpression(e.value),[`onUpdate:${a}`]:o.length&&r?n.withModifiers(r,o):r}}function ut(n,e,t,s,r){if(!e)return null;if(c.isString(e))return{default:()=>e};if(j(e))return{default:()=>J(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const o=lt(e),a=i=>!i||!r?{}:r?.id&&Object.keys(i).length?{[`scope_${r.id}`]:i}:{};return Object.entries(o).reduce((i,[l,{nodes:u,params:h}])=>(i[l]=d=>{const f=h.length?c.pick(d??{},h):a(d);return u.map(v=>O(v,t.__clone(f),n,s))},i),{})}return null}function lt(n){const e={default:{params:[],nodes:[]}};for(const t of n){const s=dt(t.slot),r=s.name;e[r]?(e[r].nodes.push(t),e[r].params=e[r].params.concat(s.params)):e[r]={nodes:[t],params:s.params}}return e}function dt(n="default"){return c.isString(n)?{name:n,params:[]}:{params:[],...n}}function ft(n,e,t){const{value:s,iterator:r}=n,{item:o="item",index:a="index"}=r||{};let i=t.__parseExpression(s)||[];return Number.isInteger(i)&&(i=new Array(i).fill(!0).map((l,u)=>u+1)),Array.isArray(i)?i.map((l,u)=>e(t.__clone({[o]:l,[a]:u}))):(console.warn("[vForRender]:",`${s?.value} is not a Arrary`),[])}function pt(n){return m.getCurrentScope()?(m.onScopeDispose(n),!0):!1}function Y(n){return typeof n=="function"?n():m.unref(n)}const Pe=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const ht=n=>n!=null,mt=()=>{};function gt(n){return m.getCurrentInstance()}function vt(...n){if(n.length!==1)return m.toRef(...n);const e=n[0];return typeof e=="function"?m.readonly(m.customRef(()=>({get:e,set:mt}))):m.ref(e)}function yt(n,e){gt()&&m.onBeforeUnmount(n,e)}const _t=Pe?window:void 0,St=Pe?window.document:void 0;function wt(n){var e;const t=Y(n);return(e=t?.$el)!=null?e:t}function Et(){const n=m.ref(!1),e=m.getCurrentInstance();return e&&m.onMounted(()=>{n.value=!0},e),n}function jt(n){const e=Et();return m.computed(()=>(e.value,!!n()))}function Pt(n,e,t={}){const{window:s=_t,...r}=t;let o;const a=jt(()=>s&&"MutationObserver"in s),i=()=>{o&&(o.disconnect(),o=void 0)},l=m.computed(()=>{const f=Y(n),v=(Array.isArray(f)?f:[f]).map(wt).filter(ht);return new Set(v)}),u=m.watch(()=>l.value,f=>{i(),a.value&&f.size&&(o=new MutationObserver(e),f.forEach(v=>o.observe(v,r)))},{immediate:!0,flush:"post"}),h=()=>o?.takeRecords(),d=()=>{u(),i()};return pt(d),{isSupported:a,stop:d,takeRecords:h}}function $t(n=null,e={}){var t,s,r;const{document:o=St,restoreOnUnmount:a=d=>d}=e,i=(t=o?.title)!=null?t:"",l=vt((s=n??o?.title)!=null?s:null),u=n&&typeof n=="function";function h(d){if(!("titleTemplate"in e))return d;const f=e.titleTemplate||"%s";return typeof f=="function"?f(d):Y(f).replace(/%s/g,d)}return m.watch(l,(d,f)=>{d!==f&&o&&(o.title=h(typeof d=="string"?d:""))},{immediate:!0}),e.observe&&!e.titleTemplate&&o&&!u&&Pt((r=o.head)==null?void 0:r.querySelector("title"),()=>{o&&o.title!==l.value&&(l.value=h(o.title))},{childList:!0}),yt(()=>{if(a){const d=a(i,l.value||"");d!=null&&o&&(o.title=d)}}),l}const te=m.defineComponent({name:"VtjPageContainer",async setup(){const n=Q(),e=se.useRoute(),t=e.params.id,s=t?n.getPage(t):n.getHomepage(),r=s?await n.getRenderComponent(s.id):null;return s&&$t(s.title||"VTJ"),{provider:n,component:r,file:s,query:e.query}},render(){return this.component?m.h(this.component,this.query):m.h("div","页面不存在")}}),Ct=m.defineComponent({name:"VtjStartupContainer",render(){return m.h(He.XStartup)}}),X=Symbol("Provider");var $e=(n=>(n.Production="production",n.Development="development",n))($e||{});class Ce extends P.Base{constructor(e){super(),this.options=e;const{service:t,mode:s=w.Raw,dependencies:r,materials:o,project:a={},adapter:i={},globals:l={},modules:u={},router:h=null,materialPath:d="./",nodeEnv:f="development"}=e;this.mode=s,this.modules=u,this.service=t,this.router=h,this.materialPath=d,this.nodeEnv=f,r&&(this.dependencies=r),o&&(this.materials=o),Object.assign(this.globals,l),Object.assign(this.adapter,i);const{access:v,request:p}=this.adapter;v&&v.connect({mode:s,router:h,request:p}),s!==w.Design&&this.load(a)}mode;globals={};modules={};adapter={request:qe,jsonp:c.jsonp};apis={};dependencies={};materials={};library={};service;project=null;components={};nodeEnv="development";router=null;materialPath="./";urlDslCaches={};async load(e){const t=this.modules[`.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:r=[]}=this.project,o=window;o.CKEDITOR_VERSION=void 0,this.nodeEnv!=="production"?await this.loadAssets(o):await this.loadDependencies(o),this.apis=ve(s,r,this.adapter),K(),this.project.config?.mock&&ye(s),this.initRouter(),this.triggerReady()}async loadDependencies(e){const t=Object.entries(this.dependencies);for(const[s,r]of t)e[s]||(e[s]=await r())}async loadAssets(e){const{dependencies:t=[]}=this.project,{dependencies:s,library:r,components:o,materialPath:a,nodeEnv:i}=this,{libraryExports:l,libraryMap:u,materials:h,materialExports:d,materialMapLibrary:f}=ce(t,a,i==="development");for(const p of l){const g=s[p],E=e[p];if(E)r[p]=E;else if(g)e[p]=r[p]=await g();else{const y=u[p]||[];for(const _ of y)H(_)&&await le(p,c.url.append(_,{v:b})),k(_)&&await c.loadScript(c.url.append(_,{v:b}));r[p]=e[p]}}for(const p of h)await c.loadScript(c.url.append(p,{v:b}));const v=this.materials||{};for(const p of d){const g=e[f[p]],E=P.BUILT_IN_COMPONENTS[p];if(E)g&&E.forEach(y=>{o[y]=g[y]});else{const y=v[p]?(await v[p]()).default:e[p];y&&g&&(y.components||[]).forEach(_=>{o[_.name]=ue(_,g)})}}}initRouter(){const{router:e,project:t}=this;e&&(e.addRoute({path:"/page/:id",name:q,component:te}),e.addRoute({path:"/",name:oe,component:t?.homepage?te:Ct}))}install(e){const t=e.config.globalProperties.installed||{};for(const[s,r]of Object.entries(this.library))!t[s]&&pe(r)&&(e.use(r),t[s]=!0);this.options.install&&e.use(this.options.install),this.adapter.access&&e.use(this.adapter.access),e.provide(X,this),e.config.globalProperties.installed=t,this.nodeEnv==="development"&&(e.config.errorHandler=(s,r,o)=>{const a=r?.$options.name,i=typeof s=="string"?s:s?.message||s?.msg||"未知错误",l=`[ ${a} ] ${i} ${o}`;console.error("[VTJ Error]:",{err:s,instance:r,info:o},s?.stack),F.ElNotification.error({title:"未处理的异常:请在控制台查看详情",message:l})})}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=(r,o=[])=>{for(const a of o){if(a.id===r)return a;if(a.children&&a.children.length){const i=s(r,a.children);if(i)return i}}};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`];return t?await t():this.service.getFile(e).catch(()=>null)}async getDslByUrl(e){const t=this.urlDslCaches[e];return t||(this.urlDslCaches[e]=this.adapter.request.send({url:e,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(s=>s.data).catch(()=>null))}createDslRenderer(e,t={}){const{library:s,components:r,mode:o,apis:a}=this,i={mode:o,Vue:s.Vue,components:r,libs:s,apis:a,window,...t},l=D({getDsl:async u=>await this.getDsl(u)||null,getDslByUrl:async u=>await this.getDslByUrl(u)||null,options:i});return T({...i,dsl:e,loader:l})}async getRenderComponent(e){const t=this.getFile(e);if(!t)return c.logger.warn(`Can not find file: ${e}`),null;const s=`.vtj/vue/${e}.vue`,r=this.modules[s];if(r)return(await r())?.default;const o=await this.getDsl(t.id);return o?this.createDslRenderer(o).renderer:(c.logger.warn(`Can not find dsl: ${e}`),null)}defineUrlSchemaComponent(e,t){return m.defineAsyncComponent(async()=>{const s=await this.getDslByUrl(e);return s?(s.name=t||s.name,this.createDslRenderer(s).renderer):null})}definePluginComponent(e){return m.defineAsyncComponent(async()=>await W(e,window))}}function bt(n){const e=new Ce(n);return{provider:e,onReady:s=>e.ready(s)}}function Q(n={}){const e=m.inject(X);if(!e)throw new Error("Can not find provider");if(e.nodeEnv==="development"){const{id:t,version:s}=n;t&&s&&(async()=>{const r=await e.getDsl(t);r?.__VERSION__!==s&&F.ElNotification.warning({title:r?.name,message:"当前组件源码版本与运行时版本不一致,请重新发布组件"})})()}return e}const Z=new c.Request({settings:{type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:n=>n.data?.code===0,showError:n=>{F.ElNotification.error({message:n||"未知错误"})}}}),Rt=(n="/__vtj__/api/:type.json")=>(e,t)=>Z.send({url:n,method:"post",params:{type:e},data:{type:e,data:t}}),At=(n="/__vtj__/api/uploader.json")=>async(e,t)=>await Z.send({url:n,method:"post",data:{files:e,projectId:t},settings:{type:"data"}}).then(s=>s&&s[0]?s[0]:null).catch(()=>null);class U{api;pluginCaches={};uploader;constructor(){this.api=Rt(),this.uploader=At()}async getExtension(){console.log("BaseService.getExtension")}async init(e){return console.log("BaseService.init",e),{}}async saveProject(e){return!!await this.api("saveProject",e).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(o=>ie(o))[0];if(!s)return null;const r=this.pluginCaches[s];return r||(this.pluginCaches[s]=Z.send({url:s,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(o=>o.data).catch(()=>null))}}const S=new c.Storage({type:"local",expired:0,prefix:"__VTJ_"});class Ft extends U{init(e){const t=new P.ProjectModel(e),s=S.get(`project_${t.id}`),r=Object.assign(t.toDsl(),s||{});return S.save(`project_${t.id}`,r),Promise.resolve(r)}saveProject(e){const t=new P.ProjectModel(e);return S.save(`project_${t.id}`,t.toDsl()),Promise.resolve(!0)}saveMaterials(e,t){return S.save(`materials_${e.id}`,c.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return S.save(`file_${e.id}`,e),Promise.resolve(!0)}getFile(e){const t=S.get(`file_${e}`);return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return S.remove(`file_${e}`),Promise.resolve(!0)}saveHistory(e){return S.save(`history_${e.id}`,e),Promise.resolve(!0)}removeHistory(e){const t=S.get(`history_${e}`);if(t){const r=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,r),S.remove(`history_${e}`)}return Promise.resolve(!0)}getHistory(e){const t=S.get(`history_${e}`),s=new P.HistoryModel(t||{id:e});return Promise.resolve(s.toDsl())}getHistoryItem(e,t){const s=S.get(`history_${e}_${t}`);return Promise.resolve(s)}saveHistoryItem(e,t){return S.save(`history_${e}_${t.id}`,t),Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{S.remove(`history_${e}_${s}`)}),Promise.resolve(!0)}}class be extends U{projects={};materials={};files={};histories={};historyItems={};init(e){const t=new P.ProjectModel(e),s=this.projects[t.id]||{},r=Object.assign(t.toDsl(),s);return this.projects[r.id]=r,Promise.resolve(r)}saveProject(e){const t=new P.ProjectModel(e);return this.projects[t.id]=t.toDsl(),Promise.resolve(!0)}saveMaterials(e,t){return e.id&&(this.materials[e.id]=c.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 r=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,r),delete this.historyItems[e]}return Promise.resolve(!0)}getHistory(e){const t=this.histories[e],s=new P.HistoryModel(t||{id:e});return Promise.resolve(s)}getHistoryItem(e,t){const s=`${e}_${t}`,r=this.historyItems[s]||{};return Promise.resolve(r)}saveHistoryItem(e,t){const s=`${e}_${t.id}`;return this.historyItems[s]=t,Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{const r=`${e}_${s}`;delete this.historyItems[r]}),Promise.resolve(!0)}}let I=null;function Ot(){return I||(I=new be,I)}class Mt extends U{getFileCaches={};async getExtension(){return await this.api("getExtension",{}).catch(()=>{})}async init(e){return await this.api("init",e).catch(()=>null)||{}}async saveProject(e){return!!await this.api("saveProject",e).catch(()=>!1)}async saveMaterials(e,t){return!!await this.api("saveMaterials",{project:e,materials:c.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 Re(n=[]){return n.map(e=>{const{id:t,title:s,icon:r,children:o,hidden:a}=e;return{id:t,title:s,icon:r,hidden:a,url:`/page/${t}`,children:o&&o.length?Re(o):void 0}})}function Ae(n,e){if(!e)return n;let t=[];for(const s of n)if(s.children&&s.children.length){const r=Ae(s.children,e);r.length&&(s.children=r,t.push(s))}else e[s.id]&&t.push(s);return t}function It(){const n=Q(),e=se.useRoute(),t=Se(),s=m.ref(!1),r=t?.getData(),o=n.project;m.watchEffect(()=>{const{name:l,params:u,meta:h}=e;if(l==="VtjPage"){const d=n.getPage(u.id);s.value=!d?.mask}else if(l==="VtjHomepage"){const d=n.getHomepage();s.value=!d?.mask}else s.value=!h.mask});const a=Re(o?.pages),i=o?.config;return{disabled:s,logo:i?.logo,themeSwitchable:i?.themeSwitchable,title:i?.title||o?.description||o?.name||"VTJ App",menus:Ae(a,r?.permissions)}}exports.ACCESS_KEY=z;exports.Access=Ve;exports.BUILT_IN_DIRECTIVES=ne;exports.BaseService=U;exports.CONTEXT_HOST=B;exports.Context=we;exports.ContextMode=w;exports.DATA_TYPES=re;exports.HOMEPAGE_ROUTE_NAME=oe;exports.JSCodeToString=Le;exports.LIFE_CYCLES_LIST=Ue;exports.LocalService=Mt;exports.MemoryService=be;exports.NodeEnv=$e;exports.PAGE_ROUTE_NAME=q;exports.Provider=Ce;exports.StorageService=Ft;exports.VTJ_RENDERER_VERSION=b;exports.adoptedStyleSheets=V;exports.createAssetScripts=Ne;exports.createAssetsCss=Be;exports.createDataSources=Ee;exports.createLoader=D;exports.createMemoryService=Ot;exports.createMetaApi=ge;exports.createProvider=bt;exports.createRenderer=T;exports.createSchemaApi=me;exports.createSchemaApis=ve;exports.defaultLoader=je;exports.fillBasePath=A;exports.getModifiers=G;exports.getPlugin=W;exports.getRawComponent=ue;exports.isCSSUrl=H;exports.isJSCode=he;exports.isJSExpression=j;exports.isJSFunction=M;exports.isJSON=ie;exports.isJSUrl=k;exports.isVuePlugin=pe;exports.loadCss=le;exports.loadCssUrl=de;exports.loadScriptUrl=fe;exports.mockApi=_e;exports.mockApis=ye;exports.mockCleanup=K;exports.nodeRender=O;exports.parseDeps=ce;exports.parseExpression=R;exports.parseFunction=L;exports.providerKey=X;exports.removeProdFlag=ae;exports.toString=J;exports.useAccess=Se;exports.useMask=It;exports.useProvider=Q;
|
package/dist/index.mjs
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
import { Base as Ee, BUILT_IN_COMPONENTS as Pe, ProjectModel as I, HistoryModel as re } from "@vtj/core";
|
2
|
-
import { isUrl as Re, url as R, dedupArray as be, isString as $, isFunction as Y, logger as O, createRequest as Ce, merge as Fe, pathToRegexp as Ae, pathToRegexpMatch as Ie, formDataToJson as Oe, storage as T, cookie as k, toArray as Q, unRSA as X, delay as oe, camelCase as j, upperFirst as xe, pick as De, jsonp as
|
2
|
+
import { isUrl as Re, url as R, dedupArray as be, isString as $, isFunction as Y, logger as O, createRequest as Ce, merge as Fe, pathToRegexp as Ae, pathToRegexpMatch as Ie, formDataToJson as Oe, storage as T, cookie as k, toArray as Q, unRSA as X, delay as oe, camelCase as j, upperFirst as xe, pick as De, jsonp as Me, loadScript as Z, Request as He, Storage as Te, mapToObject as q } from "@vtj/utils";
|
3
3
|
import * as D from "vue";
|
4
4
|
import { inject as ie, toRef as ke, readonly as Ue, customRef as Be, ref as J, onBeforeUnmount as Ne, getCurrentScope as Le, onScopeDispose as qe, unref as Je, getCurrentInstance as ae, watch as ce, computed as ue, onMounted as Ve, defineComponent as le, h as B, defineAsyncComponent as ee, watchEffect as ze } from "vue";
|
5
5
|
import { useRoute as fe } from "vue-router";
|
6
|
-
import { ElNotification as
|
6
|
+
import { ElNotification as M, ElLoading as Ke } from "element-plus";
|
7
7
|
import { XStartup as We } from "@vtj/ui";
|
8
8
|
/**!
|
9
9
|
* Copyright (c) 2024, VTJ.PRO All rights reserved.
|
10
10
|
* @name @vtj/renderer
|
11
11
|
* @author CHC chenhuachun1549@dingtalk.com
|
12
|
-
* @version 0.8.
|
12
|
+
* @version 0.8.172
|
13
13
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
14
14
|
*/
|
15
|
-
const b = "0.8.
|
15
|
+
const b = "0.8.172";
|
16
16
|
var _ = /* @__PURE__ */ ((n) => (n.Runtime = "Runtime", n.Design = "Design", n.Raw = "Raw", n.VNode = "VNode", n))(_ || {});
|
17
17
|
const te = [
|
18
18
|
"$el",
|
@@ -172,11 +172,11 @@ function se(n, e, t = !1, s = !1) {
|
|
172
172
|
function S(n) {
|
173
173
|
return n && n.type === "JSExpression";
|
174
174
|
}
|
175
|
-
function
|
175
|
+
function H(n) {
|
176
176
|
return typeof n == "object" && n && n.type === "JSFunction";
|
177
177
|
}
|
178
178
|
function it(n) {
|
179
|
-
return S(n) ||
|
179
|
+
return S(n) || H(n);
|
180
180
|
}
|
181
181
|
function ps(n) {
|
182
182
|
return it(n) ? n.value : JSON.stringify(n);
|
@@ -191,7 +191,7 @@ const at = Ce({
|
|
191
191
|
validate: (n) => n.data?.code === 0 || !!n.data?.success,
|
192
192
|
failMessage: !0,
|
193
193
|
showError: (n) => {
|
194
|
-
|
194
|
+
M.error({
|
195
195
|
message: n || "未知错误"
|
196
196
|
});
|
197
197
|
},
|
@@ -270,12 +270,13 @@ const pt = {
|
|
270
270
|
session: !1,
|
271
271
|
authKey: "Authorization",
|
272
272
|
storageKey: "ACCESS_STORAGE",
|
273
|
-
storagePrefix: "
|
273
|
+
storagePrefix: "__VTJ_",
|
274
274
|
unauthorized: "/unauthorized",
|
275
275
|
auth: "/#/login",
|
276
276
|
redirectParam: "r",
|
277
277
|
unauthorizedCode: 401,
|
278
|
-
unauthorizedMessage: "登录已经失效,请重新登录!"
|
278
|
+
unauthorizedMessage: "登录已经失效,请重新登录!",
|
279
|
+
noPermissionMessage: "无权限访问该页面"
|
279
280
|
}, ve = Symbol("access");
|
280
281
|
class hs {
|
281
282
|
options;
|
@@ -376,8 +377,14 @@ class hs {
|
|
376
377
|
guard(e, t) {
|
377
378
|
if (this.isWhiteList(e) || this.isAuthPath(e))
|
378
379
|
return t();
|
379
|
-
if (this.isLogined())
|
380
|
-
|
380
|
+
if (this.isLogined()) {
|
381
|
+
if (this.hasRoutePermission(e))
|
382
|
+
return t();
|
383
|
+
{
|
384
|
+
const s = this.options.noPermissionMessage || "无权限访问";
|
385
|
+
return this.showTip(s), t(!1);
|
386
|
+
}
|
387
|
+
}
|
381
388
|
t(!1), this.toLogin();
|
382
389
|
}
|
383
390
|
isWhiteList(e) {
|
@@ -590,7 +597,7 @@ function yt(n, e, t) {
|
|
590
597
|
Object.keys(e || {}).reduce(
|
591
598
|
(s, r) => {
|
592
599
|
let o = e[r];
|
593
|
-
return S(o) ? o = t.__parseExpression(o) :
|
600
|
+
return S(o) ? o = t.__parseExpression(o) : H(o) && (o = t.__parseFunction(o)), s[r] = o, s;
|
594
601
|
},
|
595
602
|
{}
|
596
603
|
)
|
@@ -622,7 +629,7 @@ function St(n, e = [], t) {
|
|
622
629
|
function $t(n, e) {
|
623
630
|
return Object.keys(n).reduce(
|
624
631
|
(t, s) => {
|
625
|
-
const r = n[s], o = e.$apis[r.ref], a =
|
632
|
+
const r = n[s], o = e.$apis[r.ref], a = H(r.transform) ? r.transform.value ? e.__parseFunction(r.transform) : void 0 : r.transform;
|
626
633
|
return t[s] = async (...i) => {
|
627
634
|
const u = await o.apply(e, i);
|
628
635
|
return a ? a(u) : u;
|
@@ -707,7 +714,7 @@ function x(n, e, t = D, s = Pt) {
|
|
707
714
|
)), c.forEach((g) => {
|
708
715
|
Object.assign(h, Dt(t, g, f));
|
709
716
|
});
|
710
|
-
const v =
|
717
|
+
const v = Mt(
|
711
718
|
t,
|
712
719
|
n.children ?? [],
|
713
720
|
f,
|
@@ -741,7 +748,7 @@ function Ft(n, e, t) {
|
|
741
748
|
const s = Object.keys(e || {}).reduce(
|
742
749
|
(r, o) => {
|
743
750
|
let a = e[o];
|
744
|
-
return S(a) ? a = t.__parseExpression(a) :
|
751
|
+
return S(a) ? a = t.__parseExpression(a) : H(a) && (a = t.__parseFunction(a)), r[o] = a, r;
|
745
752
|
},
|
746
753
|
{}
|
747
754
|
);
|
@@ -797,7 +804,7 @@ function Dt(n, e, t) {
|
|
797
804
|
[`onUpdate:${a}`]: o.length && r ? n.withModifiers(r, o) : r
|
798
805
|
};
|
799
806
|
}
|
800
|
-
function
|
807
|
+
function Mt(n, e, t, s, r) {
|
801
808
|
if (!e) return null;
|
802
809
|
if ($(e))
|
803
810
|
return { default: () => e };
|
@@ -806,7 +813,7 @@ function Ht(n, e, t, s, r) {
|
|
806
813
|
default: () => pe(t.__parseExpression(e))
|
807
814
|
};
|
808
815
|
if (Array.isArray(e) && e.length > 0) {
|
809
|
-
const o =
|
816
|
+
const o = Ht(e), a = (i) => !i || !r ? {} : r?.id && Object.keys(i).length ? {
|
810
817
|
[`scope_${r.id}`]: i
|
811
818
|
} : {};
|
812
819
|
return Object.entries(o).reduce((i, [u, { nodes: c, params: p }]) => (i[u] = (l) => {
|
@@ -818,7 +825,7 @@ function Ht(n, e, t, s, r) {
|
|
818
825
|
}
|
819
826
|
return null;
|
820
827
|
}
|
821
|
-
function
|
828
|
+
function Ht(n) {
|
822
829
|
const e = {
|
823
830
|
default: {
|
824
831
|
params: [],
|
@@ -979,7 +986,7 @@ class es extends Ee {
|
|
979
986
|
mode;
|
980
987
|
globals = {};
|
981
988
|
modules = {};
|
982
|
-
adapter = { request: at, jsonp:
|
989
|
+
adapter = { request: at, jsonp: Me };
|
983
990
|
apis = {};
|
984
991
|
dependencies = {};
|
985
992
|
materials = {};
|
@@ -1072,7 +1079,7 @@ class es extends Ee {
|
|
1072
1079
|
info: o
|
1073
1080
|
},
|
1074
1081
|
s?.stack
|
1075
|
-
),
|
1082
|
+
), M.error({
|
1076
1083
|
title: "未处理的异常:请在控制台查看详情",
|
1077
1084
|
message: u
|
1078
1085
|
});
|
@@ -1170,7 +1177,7 @@ function Se(n = {}) {
|
|
1170
1177
|
const { id: t, version: s } = n;
|
1171
1178
|
t && s && (async () => {
|
1172
1179
|
const r = await e.getDsl(t);
|
1173
|
-
r?.__VERSION__ !== s &&
|
1180
|
+
r?.__VERSION__ !== s && M.warning({
|
1174
1181
|
title: r?.name,
|
1175
1182
|
message: "当前组件源码版本与运行时版本不一致,请重新发布组件"
|
1176
1183
|
});
|
@@ -1178,7 +1185,7 @@ function Se(n = {}) {
|
|
1178
1185
|
}
|
1179
1186
|
return e;
|
1180
1187
|
}
|
1181
|
-
const W = new
|
1188
|
+
const W = new He({
|
1182
1189
|
settings: {
|
1183
1190
|
type: "json",
|
1184
1191
|
validSuccess: !0,
|
@@ -1186,7 +1193,7 @@ const W = new Me({
|
|
1186
1193
|
failMessage: !0,
|
1187
1194
|
validate: (n) => n.data?.code === 0,
|
1188
1195
|
showError: (n) => {
|
1189
|
-
|
1196
|
+
M.error({
|
1190
1197
|
message: n || "未知错误"
|
1191
1198
|
});
|
1192
1199
|
}
|
@@ -1556,7 +1563,7 @@ export {
|
|
1556
1563
|
V as isCSSUrl,
|
1557
1564
|
it as isJSCode,
|
1558
1565
|
S as isJSExpression,
|
1559
|
-
|
1566
|
+
H as isJSFunction,
|
1560
1567
|
Xe as isJSON,
|
1561
1568
|
z as isJSUrl,
|
1562
1569
|
ot as isVuePlugin,
|
package/package.json
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vtj/renderer",
|
3
3
|
"private": false,
|
4
|
-
"version": "0.8.
|
4
|
+
"version": "0.8.172",
|
5
5
|
"type": "module",
|
6
6
|
"dependencies": {
|
7
7
|
"mockjs": "~1.1.0",
|
8
|
-
"@vtj/core": "~0.8.
|
9
|
-
"@vtj/
|
10
|
-
"@vtj/
|
11
|
-
"@vtj/
|
8
|
+
"@vtj/core": "~0.8.172",
|
9
|
+
"@vtj/ui": "~0.8.172",
|
10
|
+
"@vtj/utils": "~0.8.172",
|
11
|
+
"@vtj/icons": "~0.8.172"
|
12
12
|
},
|
13
13
|
"devDependencies": {
|
14
14
|
"vue": "~3.5.5",
|
package/types/version.d.ts
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
* Copyright (c) 2024, VTJ.PRO All rights reserved.
|
3
3
|
* @name @vtj/renderer
|
4
4
|
* @author CHC chenhuachun1549@dingtalk.com
|
5
|
-
* @version 0.8.
|
5
|
+
* @version 0.8.171
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
7
|
*/
|
8
|
-
export declare const version = "0.8.
|
8
|
+
export declare const version = "0.8.171";
|