@vtj/renderer 0.9.12 → 0.9.14
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 +79 -78
- package/package.json +6 -6
- package/types/render/context.d.ts +2 -0
- package/types/version.d.ts +2 -2
package/dist/index.cjs
CHANGED
@@ -2,10 +2,10 @@
|
|
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.9.
|
5
|
+
* @version 0.9.14
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
|
-
*/const P="0.9.
|
8
|
-
`)+o;const a=`with(${t?"{}":"$scope || {}"}) { ${o} }`;return new Function("$scope",a)(e)}catch(r){if(l.logger.error("parseExpression.error",r,n,e?.__self??e),s)throw r}}function O(n,e,t=!1,s=!1){const r=k(n,e,t,s);if(typeof r!="function"&&(l.logger.error("parseFunction.error","not a function",n,e?.__self??e),s))throw new Error(`"${n.value}" not a function`);return r}function S(n){return n&&n.type==="JSExpression"}function x(n){return typeof n=="object"&&n&&n.type==="JSFunction"}function ve(n){return S(n)||x(n)}function Le(n){return ve(n)?n.value:JSON.stringify(n)}const qe={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ_",unauthorized:void 0,auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!",noPermissionMessage:"无权限访问该页面",appName:""},K=Symbol("access");class Je{options;data=null;mode=_.Raw;constructor(e){this.options=Object.assign({},qe,e),this.loadData()}connect(e){const{mode:t,router:s,request:r}=e;this.mode=t,s&&this.mode===_.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&&(l.storage.save(t,e,{type:"local",prefix:s}),r&&l.cookie.set(o,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:r}=this.options;this.data=null,l.storage.remove(e,{type:"local",prefix:t}),s&&l.cookie.remove(r)}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(o=>s[o]||s[t+"."+o])}some(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return l.toArray(e).some(o=>s[o]||s[t+"."+o])}install(e){e.config.globalProperties.$access||(e.config.globalProperties.$access=this),e.provide(K,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)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=>l.unRSA(r,t));this.data=JSON.parse(s.join(""));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===R){const t=e.params.id;return t&&this.can(t)}return!0}setGuard(e){e.beforeEach((t,s,r)=>this.guard(t,r))}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:r=!1}=this.options;return await this.showTip(s),l.isFunction(r)?(r(),t(!1)):l.isString(r)?t(r):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=>(await this.showUnauthorizedAlert(t),t),async t=>{const s=t.response||t||{};return await this.showUnauthorizedAlert(s),Promise.reject(t)})}}function ye(){return p.inject(K,null)}function Ve(n={}){const{notify:e,loading:t,settings:s={}}=n;let r=null;return{request:l.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:a=>a.data?.code===0||!!a.data?.success,failMessage:!0,showError:a=>{e&&e(a||"未知错误")},showLoading:()=>{r&&r.close(),t&&(r=t())},hideLoading:()=>{r&&(r.close(),r=null)},...s}}),jsonp:l.jsonp,notify:e,loading:t}}function _e(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?k(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(l.merge(o,i||{},{data:a})))}}function we(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 Se(n=[],e=[],t){const s={};for(const r of n)s[r.id]=_e(r,t);for(const r of e)s[r.id]=we(r,t);return s}async function be(n=[]){C&&(G(),n.forEach(e=>Ee(C,e)))}function je(n){const e=x(n.mockTemplate)&&n.mockTemplate.value?O(n.mockTemplate,{},!0):void 0;return async(...t)=>{let s={};if(e)try{s=await e.apply(e,t)}catch(r){l.logger.warn("模拟数据模版异常",r)}return C.mock(s)}}function Ee(n,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const r=l.pathToRegexp(`${t}(.*)`),o=l.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=k(s,{},!0);n.mock(r,i=>{const c=l.url.parse(i.url)||{},u=i.body instanceof FormData?l.formDataToJson(i.body):i.body,m=o(i.url)?.params;return Object.assign(i,{data:u,params:c,query:m}),n.mock(a(i))})}}function G(){C&&(C._mocked={})}class $e{__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=H){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&&J.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){J.forEach(e=>{this[e]=null})}__parseFunction(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return O({type:s,value:r},this)}else return O(e,this)}__parseExpression(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return k({type:s,value:r},this)}else return k(e,this)}__ref(e=null,t){if(this.__mode!==_.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await l.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,_.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 I(n){const{Vue:e=H,mode:t=_.Runtime,components:s={},libs:r={},apis:o={},loader:a}=n,i=e.computed(()=>n.dsl),c={$components:s,$libs:r,$apis:o},u=new $e({mode:t,dsl:i.value,attrs:c}),m=e.defineComponent({name:i.value.name,props:{...Ke(i.value.props??[],u)},setup(d){u.$props=d,u.props=d,i.value.id&&z(n.window||window,i.value.id,i.value.css||""),u.state=Ge(e,i.value.state??{},u);const f=We(e,i.value.computed??{},u),g=Ye(i.value.methods??{},u),v=Qe(e,i.value.inject,u),h=Ce(i.value.dataSources||{},u),b={...v,...f,...g,...h};return u.setup(b,e),Xe(e,i.value.watch??[],u),{vtj:u}},emits:ze(i.value.emits),expose:["vtj"],render(){if(!i.value.nodes)return null;const d=i.value.nodes||[];return d.length===1?M(d[0],u,e,a):d.map(f=>M(f,u,e,a))},...Ze(i.value.lifeCycles??{},u)});return{renderer:e.markRaw(m),context:u}}function ze(n=[]){return n.map(e=>l.isString(e)?e:e.name)}function Ke(n=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(o=>re[o]):void 0;return n.map(s=>l.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:S(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 Ge(n,e,t){return n.reactive(Object.keys(e||{}).reduce((s,r)=>{let o=e[r];return S(o)?o=t.__parseExpression(o):x(o)&&(o=t.__parseFunction(o)),s[r]=o,s},{}))}function We(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 Qe(n,e=[],t){return e.reduce((s,r)=>{const{name:o,from:a}=r||{};r.default;const i=S(a)?t.__parseExpression(a)||o:a??o,c=S(r.default)?t.__parseExpression(r.default):r.default??null;return s[o]=n.inject(i,c),s},{})}function Ce(n,e){return Object.keys(n).reduce((t,s)=>{const r=n[s];if(r.type==="mock")t[s]=je(r);else if(r.ref){const o=e.$apis[r.ref],a=x(r.transform)?r.transform.value?e.__parseFunction(r.transform):void 0:r.transform;t[s]=async(...i)=>{const c=await o.apply(e,i);return a?a(c):c}}return t},{})}function Xe(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 q=[];const Pe=n=>n;async function W(n,e=window){const{urls:t=[],library:s}=n,r=t.filter(i=>B(i));if(r.length===0||!s)return null;const o=t.filter(i=>N(i));return o.length&&pe(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&&(q.forEach(r=>{delete s.window[r]}),q=[]),(r,o,a=H)=>!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?I({...s,Vue:a,dsl:i,mode:_.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?I({...s,Vue:a,dsl:i,mode:_.Runtime,loader:D(n)}).renderer:null}):o.type==="Plugin"?(o.library&&q.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 M(n,e,t=H,s=Pe){if(!n||!n.name||n.invisible)return null;const r=t.getCurrentInstance()?.appContext,{id:o=null,directives:a=[]}=n,{vIf:i,vFor:c,vShow:u,vModels:m,vBind:d,vHtml:f,others:g}=tt(a);if(i&&!st(i,e))return null;const v=h=>{const b=h.$components,y=(()=>{if(n.name==="component")return nt(h,n.props?.is);if(n.name==="slot")return n.name;const E=s(n.name,n.from,t);return l.isString(E)?me(E)||ge(E)?E:b[E]??r?.app?.component(E)??E:E})(),j=rt(o,n.props??{},h),Ie=ot(t,n.events??{},h);if(n.name==="slot")return it(t,n,j,h,s);d&&Object.assign(j,h.__parseExpression(d.value)),u&&(j.style=Object.assign(j.style??{},ct(u,h))),f&&Object.assign(j,lt(f,h)),m.forEach(E=>{Object.assign(j,ut(t,E,h))});const De=dt(t,n.children??[],h,s,n);let L=t.createVNode(y,{...j,...Ie},De);const ee=r?et(r,g,h):[];return ee.length&&(L=t.withDirectives(L,ee)),L};return c?ht(c,v,e):v(e)}function et(n,e,t){const s=n.app;return e.map(r=>{const o=typeof r.name=="string"?s.directive(r.name):t.__parseExpression(r.name);if(!o)return null;const a=[o];return r.value&&a.push(t.__parseExpression(r.value)),r.arg&&a.push(r.arg),r.modifiers&&a.push(r.modifiers),a}).filter(r=>!!r)}function tt(n=[]){const e=n.find(c=>l.camelCase(c.name)==="vIf"),t=n.find(c=>l.camelCase(c.name)==="vFor"),s=n.find(c=>l.camelCase(c.name)==="vShow"),r=n.find(c=>l.camelCase(c.name)==="vBind"),o=n.find(c=>l.camelCase(c.name)==="vHtml"),a=n.filter(c=>l.camelCase(c.name)==="vModel"),i=n.filter(c=>!ne.includes(l.camelCase(c.name)));return{vIf:e,vFor:t,vShow:s,vModels:a,vBind:r,others:i,vHtml:o}}function st(n,e){return!!e.__parseExpression(n.value)}function nt(n,e){return e?S(e)?n.__parseExpression(e):e:"div"}function rt(n,e,t){const s=Object.keys(e||{}).reduce((r,o)=>{let a=e[o];return S(a)?a=t.__parseExpression(a):x(a)&&(a=t.__parseFunction(a)),r[o]=a,r},{});return s.ref=t.__ref(n,s.ref),s}function ot(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],c=Y(i.modifiers),u=c.find(f=>s.includes(f)),m="on"+l.upperFirst(a)+(u&&r[u]||""),d=t.__parseFunction(i.handler);return d&&(o[m]=n.withModifiers(d,c)),o},{})}function Y(n={},e=!1){const t=Object.keys(n);return e?t.map(s=>"."+s):t}function it(n,e,t,s,r){const{children:o}=e,a=at(e,s),i=s.$slots?.[a.name];return i?i(t):o?l.isString(o)?n.createTextVNode(o):S(o)?n.createTextVNode(V(s.__parseExpression(o))):Array.isArray(o)?o.map(c=>M(c,s,n,r)):null:null}function at(n,e){const{props:t}=n,s=t?.name||"default";return{name:S(s)?e.__parseExpression(s):s,params:[]}}function ct(n,e){return e.__parseExpression(n.value)?{}:{display:"none"}}function lt(n,e){return{innerHTML:e.__parseExpression(n.value)||""}}function ut(n,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
7
|
+
*/const P="0.9.14";var _=(n=>(n.Runtime="Runtime",n.Design="Design",n.Raw="Raw",n.VNode="VNode",n))(_||{});const J=["$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"],ne=["vIf","vShow","vModel","vFor","vBind","vHtml"],re={String,Number,Boolean,Array,Object,Function,Date},R="VtjPage",T="VtjHomepage",oe="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(","),ie="component,slot".split(",");function A(n,e){return n.map(t=>l.isUrl(t)||t.startsWith("/")?t:`${e}${t}`)}function N(n){return/\.css$/.test(n)}function B(n){return/\.js$/.test(n)}function ae(n){return/\.json$/.test(n)}function Be(n){return n.map(e=>`<script src="${l.url.append(e,{v:P})}"><\/script>`).join("")}function Ue(n=[]){return n.map(e=>`<link rel="stylesheet" href="${l.url.append(e,{v:P})}" />`).join("")}function ce(n,e=!1){return e&&n.endsWith(".prod.js")?n.replace(".prod.js",".js"):n}function le(n,e,t=!1){const s=n.filter(f=>!!f.enabled),r=[],o=[],a=[],i=[],c={},u={},m=[],d={};return s.forEach(({urls:f,assetsUrl:g,library:v,assetsLibrary:h,localeLibrary:b})=>{f?.forEach(y=>{B(y)&&r.push(ce(y,t)),N(y)&&o.push(y)}),v&&(i.push(v),c[v]=A(f||[],e),b&&(u[v]=b)),g&&a.push(g),h&&m.push(h),v&&h&&(d[h]=v)}),{scripts:A(r,e),css:A(o,e),materials:A(a,e),libraryExports:i,materialExports:l.dedupArray(m),materialMapLibrary:d,libraryMap:c,libraryLocaleMap:u}}function ue(n,e){const{name:t,parent:s,alias:r}=n;return s?e[s]?.[r||t]:e[r||t]}function V(n){return l.isString(n)?n:JSON.stringify(n)}function z(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(c=>c.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 de(n,e){const t=await window.fetch(e).then(s=>s.text()).catch(()=>"");t&&z(window,n,t)}function pe(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 c of n){const u=s.createElement("script");u.src=c,u.onload=()=>{o=t[e],o?a(o.default||o):i(null)},u.onerror=m=>{i(m)},r.appendChild(u)}})}function he(n){return l.isFunction(n)||l.isFunction(n?.install)}function me(n){return ie.includes(n)}function ge(n){return oe.includes(n)}function k(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,c)=>`__self${c}`),o=r.join(`
|
8
|
+
`)+o;const a=`with(${t?"{}":"$scope || {}"}) { ${o} }`;return new Function("$scope",a)(e)}catch(r){if(l.logger.error("parseExpression.error",r,n,e?.__self??e),s)throw r}}function O(n,e,t=!1,s=!1){const r=k(n,e,t,s);if(typeof r!="function"&&(l.logger.error("parseFunction.error","not a function",n,e?.__self??e),s))throw new Error(`"${n.value}" not a function`);return r}function S(n){return n&&n.type==="JSExpression"}function x(n){return typeof n=="object"&&n&&n.type==="JSFunction"}function ve(n){return S(n)||x(n)}function Le(n){return ve(n)?n.value:JSON.stringify(n)}const qe={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ_",unauthorized:void 0,auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!",noPermissionMessage:"无权限访问该页面",appName:""},K=Symbol("access");class Je{options;data=null;mode=_.Raw;constructor(e){this.options=Object.assign({},qe,e),this.loadData()}connect(e){const{mode:t,router:s,request:r}=e;this.mode=t,s&&this.mode===_.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&&(l.storage.save(t,e,{type:"local",prefix:s}),r&&l.cookie.set(o,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:r}=this.options;this.data=null,l.storage.remove(e,{type:"local",prefix:t}),s&&l.cookie.remove(r)}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(o=>s[o]||s[t+"."+o])}some(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return l.toArray(e).some(o=>s[o]||s[t+"."+o])}install(e){e.config.globalProperties.$access||(e.config.globalProperties.$access=this),e.provide(K,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)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=>l.unRSA(r,t));this.data=JSON.parse(s.join(""));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===R){const t=e.params.id;return t&&this.can(t)}return!0}setGuard(e){e.beforeEach((t,s,r)=>this.guard(t,r))}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:r=!1}=this.options;return await this.showTip(s),l.isFunction(r)?(r(),t(!1)):l.isString(r)?t(r):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=>(await this.showUnauthorizedAlert(t),t),async t=>{const s=t.response||t||{};return await this.showUnauthorizedAlert(s),Promise.reject(t)})}}function ye(){return p.inject(K,null)}function Ve(n={}){const{notify:e,loading:t,settings:s={}}=n;let r=null;return{request:l.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:a=>a.data?.code===0||!!a.data?.success,failMessage:!0,showError:a=>{e&&e(a||"未知错误")},showLoading:()=>{r&&r.close(),t&&(r=t())},hideLoading:()=>{r&&(r.close(),r=null)},...s}}),jsonp:l.jsonp,notify:e,loading:t}}function _e(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?k(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(l.merge(o,i||{},{data:a})))}}function we(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 Se(n=[],e=[],t){const s={};for(const r of n)s[r.id]=_e(r,t);for(const r of e)s[r.id]=we(r,t);return s}async function be(n=[]){C&&(G(),n.forEach(e=>Ee(C,e)))}function je(n){const e=x(n.mockTemplate)&&n.mockTemplate.value?O(n.mockTemplate,{},!0):void 0;return async(...t)=>{let s={};if(e)try{s=await e.apply(e,t)}catch(r){l.logger.warn("模拟数据模版异常",r)}return C.mock(s)}}function Ee(n,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const r=l.pathToRegexp(`${t}(.*)`),o=l.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=k(s,{},!0);n.mock(r,i=>{const c=l.url.parse(i.url)||{},u=i.body instanceof FormData?l.formDataToJson(i.body):i.body,m=o(i.url)?.params;return Object.assign(i,{data:u,params:c,query:m}),n.mock(a(i))})}}function G(){C&&(C._mocked={})}class $e{__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=H){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.__reset()})}__proxy(){this.__instance&&J.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){J.forEach(e=>{this[e]=null}),this.__reset()}__reset(){this.__refs={},this.$refs={},this.__contextRefs={},this.context={}}__parseFunction(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return O({type:s,value:r},this)}else return O(e,this)}__parseExpression(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return k({type:s,value:r},this)}else return k(e,this)}__ref(e=null,t){if(this.__mode!==_.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await l.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}return r.nodeType===3&&r.nextSibling&&(r=r.nextSibling),r.__vtj__=e,_.Design===this.__mode&&(r.__context__=this,r.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 r=e[t];if(r&&s!==r){const o=new Set([].concat(r,s));return Array.from(o)}else return s}__clone(e={}){const t={...this.context,...e},s={...t,context:t};return s.context.__proto__=this.context,s.__proto__=this,s}}function I(n){const{Vue:e=H,mode:t=_.Runtime,components:s={},libs:r={},apis:o={},loader:a}=n,i=e.computed(()=>n.dsl),c={$components:s,$libs:r,$apis:o},u=new $e({mode:t,dsl:i.value,attrs:c}),m=e.defineComponent({name:i.value.name,props:{...Ke(i.value.props??[],u)},setup(d){u.$props=d,u.props=d,i.value.id&&z(n.window||window,i.value.id,i.value.css||""),u.state=Ge(e,i.value.state??{},u);const f=We(e,i.value.computed??{},u),g=Ye(i.value.methods??{},u),v=Qe(e,i.value.inject,u),h=Ce(i.value.dataSources||{},u),b={...v,...f,...g,...h};return u.setup(b,e),Xe(e,i.value.watch??[],u),{vtj:u}},emits:ze(i.value.emits),expose:["vtj"],render(){if(!i.value.nodes)return null;const d=i.value.nodes||[];return d.length===1?M(d[0],u,e,a):d.map(f=>M(f,u,e,a))},...Ze(i.value.lifeCycles??{},u)});return{renderer:e.markRaw(m),context:u}}function ze(n=[]){return n.map(e=>l.isString(e)?e:e.name)}function Ke(n=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(o=>re[o]):void 0;return n.map(s=>l.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:S(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 Ge(n,e,t){return n.reactive(Object.keys(e||{}).reduce((s,r)=>{let o=e[r];return S(o)?o=t.__parseExpression(o):x(o)&&(o=t.__parseFunction(o)),s[r]=o,s},{}))}function We(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 Qe(n,e=[],t){return e.reduce((s,r)=>{const{name:o,from:a}=r||{};r.default;const i=S(a)?t.__parseExpression(a)||o:a??o,c=S(r.default)?t.__parseExpression(r.default):r.default??null;return s[o]=n.inject(i,c),s},{})}function Ce(n,e){return Object.keys(n).reduce((t,s)=>{const r=n[s];if(r.type==="mock")t[s]=je(r);else if(r.ref){const o=e.$apis[r.ref],a=x(r.transform)?r.transform.value?e.__parseFunction(r.transform):void 0:r.transform;t[s]=async(...i)=>{const c=await o.apply(e,i);return a?a(c):c}}return t},{})}function Xe(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 q=[];const Pe=n=>n;async function W(n,e=window){const{urls:t=[],library:s}=n,r=t.filter(i=>B(i));if(r.length===0||!s)return null;const o=t.filter(i=>N(i));return o.length&&pe(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&&(q.forEach(r=>{delete s.window[r]}),q=[]),(r,o,a=H)=>!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?I({...s,Vue:a,dsl:i,mode:_.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?I({...s,Vue:a,dsl:i,mode:_.Runtime,loader:D(n)}).renderer:null}):o.type==="Plugin"?(o.library&&q.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 M(n,e,t=H,s=Pe){if(!n||!n.name||n.invisible)return null;const r=t.getCurrentInstance()?.appContext,{id:o=null,directives:a=[]}=n,{vIf:i,vFor:c,vShow:u,vModels:m,vBind:d,vHtml:f,others:g}=tt(a);if(i&&!st(i,e))return null;const v=h=>{const b=h.$components,y=(()=>{if(n.name==="component")return nt(h,n.props?.is);if(n.name==="slot")return n.name;const E=s(n.name,n.from,t);return l.isString(E)?me(E)||ge(E)?E:b[E]??r?.app?.component(E)??E:E})(),j=rt(o,n.props??{},h),Ie=ot(t,n.events??{},h);if(n.name==="slot")return it(t,n,j,h,s);d&&Object.assign(j,h.__parseExpression(d.value)),u&&(j.style=Object.assign(j.style??{},ct(u,h))),f&&Object.assign(j,lt(f,h)),m.forEach(E=>{Object.assign(j,ut(t,E,h))});const De=dt(t,n.children??[],h,s,n);let L=t.createVNode(y,{...j,...Ie},De);const ee=r?et(r,g,h):[];return ee.length&&(L=t.withDirectives(L,ee)),L};return c?ht(c,v,e):v(e)}function et(n,e,t){const s=n.app;return e.map(r=>{const o=typeof r.name=="string"?s.directive(r.name):t.__parseExpression(r.name);if(!o)return null;const a=[o];return r.value&&a.push(t.__parseExpression(r.value)),r.arg&&a.push(r.arg),r.modifiers&&a.push(r.modifiers),a}).filter(r=>!!r)}function tt(n=[]){const e=n.find(c=>l.camelCase(c.name)==="vIf"),t=n.find(c=>l.camelCase(c.name)==="vFor"),s=n.find(c=>l.camelCase(c.name)==="vShow"),r=n.find(c=>l.camelCase(c.name)==="vBind"),o=n.find(c=>l.camelCase(c.name)==="vHtml"),a=n.filter(c=>l.camelCase(c.name)==="vModel"),i=n.filter(c=>!ne.includes(l.camelCase(c.name)));return{vIf:e,vFor:t,vShow:s,vModels:a,vBind:r,others:i,vHtml:o}}function st(n,e){return!!e.__parseExpression(n.value)}function nt(n,e){return e?S(e)?n.__parseExpression(e):e:"div"}function rt(n,e,t){const s=Object.keys(e||{}).reduce((r,o)=>{let a=e[o];return S(a)?a=t.__parseExpression(a):x(a)&&(a=t.__parseFunction(a)),r[o]=a,r},{});return s.ref=t.__ref(n,s.ref),s}function ot(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],c=Y(i.modifiers),u=c.find(f=>s.includes(f)),m="on"+l.upperFirst(a)+(u&&r[u]||""),d=t.__parseFunction(i.handler);return d&&(o[m]=n.withModifiers(d,c)),o},{})}function Y(n={},e=!1){const t=Object.keys(n);return e?t.map(s=>"."+s):t}function it(n,e,t,s,r){const{children:o}=e,a=at(e,s),i=s.$slots?.[a.name];return i?i(t):o?l.isString(o)?n.createTextVNode(o):S(o)?n.createTextVNode(V(s.__parseExpression(o))):Array.isArray(o)?o.map(c=>M(c,s,n,r)):null:null}function at(n,e){const{props:t}=n,s=t?.name||"default";return{name:S(s)?e.__parseExpression(s):s,params:[]}}function ct(n,e){return e.__parseExpression(n.value)?{}:{display:"none"}}function lt(n,e){return{innerHTML:e.__parseExpression(n.value)||""}}function ut(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=Y(S(e.modifiers)?t.__parseExpression(e.modifiers):e.modifiers),a=S(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 dt(n,e,t,s,r){if(!e)return null;if(l.isString(e))return{default:()=>e};if(S(e))return{default:()=>V(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const o=pt(e),a=i=>!i||!r?{}:r?.id&&Object.keys(i).length?{[`scope_${r.id}`]:i}:{};return Object.entries(o).reduce((i,[c,{nodes:u,params:m}])=>(i[c]=d=>{const f=m.length?l.pick(d??{},m):a(d);return u.map(g=>M(g,t.__clone(f),n,s))},i),{})}return null}function pt(n){const e={default:{params:[],nodes:[]}};for(const t of n){const s=ft(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 ft(n="default"){return l.isString(n)?{name:n,params:[]}:{params:[],...n}}function ht(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((c,u)=>u+1)),Array.isArray(i)?i.map((c,u)=>e(t.__clone({[o]:c,[a]:u}))):(console.warn("[vForRender]:",`${s?.value} is not a Arrary`),[])}function mt(n){return p.getCurrentScope()?(p.onScopeDispose(n),!0):!1}function Q(n){return typeof n=="function"?n():p.unref(n)}const Re=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const gt=n=>n!=null,vt=()=>{};function yt(n){return p.getCurrentInstance()}function _t(...n){if(n.length!==1)return p.toRef(...n);const e=n[0];return typeof e=="function"?p.readonly(p.customRef(()=>({get:e,set:vt}))):p.ref(e)}function wt(n,e){yt()&&p.onBeforeUnmount(n,e)}const St=Re?window:void 0,bt=Re?window.document:void 0;function jt(n){var e;const t=Q(n);return(e=t?.$el)!=null?e:t}function Et(){const n=p.ref(!1),e=p.getCurrentInstance();return e&&p.onMounted(()=>{n.value=!0},e),n}function $t(n){const e=Et();return p.computed(()=>(e.value,!!n()))}function Ct(n,e,t={}){const{window:s=St,...r}=t;let o;const a=$t(()=>s&&"MutationObserver"in s),i=()=>{o&&(o.disconnect(),o=void 0)},c=p.computed(()=>{const f=Q(n),g=(Array.isArray(f)?f:[f]).map(jt).filter(gt);return new Set(g)}),u=p.watch(()=>c.value,f=>{i(),a.value&&f.size&&(o=new MutationObserver(e),f.forEach(g=>o.observe(g,r)))},{immediate:!0,flush:"post"}),m=()=>o?.takeRecords(),d=()=>{u(),i()};return mt(d),{isSupported:a,stop:d,takeRecords:m}}function Pt(n=null,e={}){var t,s,r;const{document:o=bt,restoreOnUnmount:a=d=>d}=e,i=(t=o?.title)!=null?t:"",c=_t((s=n??o?.title)!=null?s:null),u=n&&typeof n=="function";function m(d){if(!("titleTemplate"in e))return d;const f=e.titleTemplate||"%s";return typeof f=="function"?f(d):Q(f).replace(/%s/g,d)}return p.watch(c,(d,f)=>{d!==f&&o&&(o.title=m(typeof d=="string"?d:""))},{immediate:!0}),e.observe&&!e.titleTemplate&&o&&!u&&Ct((r=o.head)==null?void 0:r.querySelector("title"),()=>{o&&o.title!==c.value&&(c.value=m(o.title))},{childList:!0}),wt(()=>{if(a){const d=a(i,c.value||"");d!=null&&o&&(o.title=d)}}),c}const te=p.defineComponent({name:"VtjPageContainer",async setup(){const n=Z(),e=se.useRoute(),t=e.params.id,s=t?n.getPage(t):n.getHomepage(),r=s?await n.getRenderComponent(s.id):null,o=p.ref(Symbol());return s&&(Object.assign(e.meta,s.meta||{},{cache:s.cache}),Pt(s.title||"VTJ")),{provider:n,component:r,file:s,query:e.query,meta:e.meta,sid:o,route:e}},render(){const{component:n,query:e,sid:t}=this;return n?p.h(n,{...e,key:t}):p.h("div","页面不存在")},activated(){this.meta.cache===!1&&(this.sid=Symbol())}}),Rt={"data-l-h6o7ki7":"",class:"vtj-startup__wrapper"},kt={"data-l-h6o7ki7":"",class:"vtj-startup"},xt={"data-l-h6o7ki7":"",class:"vtj-startup__name"},At={"data-l-h6o7ki7":""},Tt={"data-l-h6o7ki7":"",class:"vtj-startup__tagline"},Mt={"data-l-h6o7ki7":"",class:"vtj-startup__actions"},ke=p.defineComponent({__name:"Startup",props:{name:{default:"VTJ.PRO"},tagline:{default:"基于 Vue3 + TypeScript 快速打造高生产力的低代码研发平台"},actionText:{default:"开始设计"},link:{}},setup(n){((r,o)=>{let a=document.getElementById("h6o7ki7");a||(a=document.createElement("style"),a.id="h6o7ki7",document.head.appendChild(a),a.innerHTML=o)})("h6o7ki7",`
|
11
11
|
.vtj-startup[data-l-h6o7ki7]{
|
package/dist/index.mjs
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
import { Base as Ae, BUILT_IN_COMPONENTS as Ie, ProjectModel as H, HistoryModel as ue } from "@vtj/core";
|
2
|
-
import { isUrl as Me, url as
|
2
|
+
import { isUrl as Me, url as k, dedupArray as De, isString as j, isFunction as V, logger as P, storage as U, cookie as L, toArray as re, unRSA as oe, delay as pe, createRequest as de, jsonp as fe, merge as He, pathToRegexp as Oe, pathToRegexpMatch as Be, formDataToJson as Ne, camelCase as $, upperFirst as Ue, pick as Le, request as z, loadScript as ie, Storage as qe, mapToObject as Q } from "@vtj/utils";
|
3
3
|
import * as B from "vue";
|
4
|
-
import { inject as he, toRef as Je, readonly as Ve, customRef as ze, ref as F, onBeforeUnmount as Ke, getCurrentScope as We, onScopeDispose as Ge, unref as Ye, getCurrentInstance as me, watch as
|
4
|
+
import { inject as he, toRef as Je, readonly as Ve, customRef as ze, ref as F, onBeforeUnmount as Ke, getCurrentScope as We, onScopeDispose as Ge, unref as Ye, getCurrentInstance as me, watch as ge, computed as ve, onMounted as Qe, defineComponent as X, h as K, openBlock as Xe, createElementBlock as Ze, createElementVNode as R, toDisplayString as q, defineAsyncComponent as ae, watchEffect as et } from "vue";
|
5
5
|
import E from "mockjs";
|
6
6
|
import { useRoute as ye } from "vue-router";
|
7
7
|
/**!
|
8
8
|
* Copyright (c) 2025, VTJ.PRO All rights reserved.
|
9
9
|
* @name @vtj/renderer
|
10
10
|
* @author CHC chenhuachun1549@dingtalk.com
|
11
|
-
* @version 0.9.
|
11
|
+
* @version 0.9.14
|
12
12
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
13
13
|
*/
|
14
|
-
const x = "0.9.
|
14
|
+
const x = "0.9.14";
|
15
15
|
var y = /* @__PURE__ */ ((n) => (n.Runtime = "Runtime", n.Design = "Design", n.Raw = "Raw", n.VNode = "VNode", n))(y || {});
|
16
16
|
const ce = [
|
17
17
|
"$el",
|
@@ -25,7 +25,7 @@ const ce = [
|
|
25
25
|
"$props",
|
26
26
|
"$options",
|
27
27
|
"$forceUpdate"
|
28
|
-
],
|
28
|
+
], ks = [
|
29
29
|
"beforeCreate",
|
30
30
|
"created",
|
31
31
|
"beforeMount",
|
@@ -71,12 +71,12 @@ function ot(n) {
|
|
71
71
|
}
|
72
72
|
function Ps(n) {
|
73
73
|
return n.map(
|
74
|
-
(e) => `<script src="${
|
74
|
+
(e) => `<script src="${k.append(e, { v: x })}"><\/script>`
|
75
75
|
).join("");
|
76
76
|
}
|
77
77
|
function xs(n = []) {
|
78
78
|
return n.map(
|
79
|
-
(e) => `<link rel="stylesheet" href="${
|
79
|
+
(e) => `<link rel="stylesheet" href="${k.append(e, { v: x })}" />`
|
80
80
|
).join("");
|
81
81
|
}
|
82
82
|
function it(n, e = !1) {
|
@@ -86,8 +86,8 @@ function at(n, e, t = !1) {
|
|
86
86
|
const s = n.filter((p) => !!p.enabled), r = [], o = [], a = [], i = [], c = {}, l = {}, f = [], u = {};
|
87
87
|
return s.forEach(
|
88
88
|
({ urls: p, assetsUrl: h, library: m, assetsLibrary: d, localeLibrary: w }) => {
|
89
|
-
p?.forEach((
|
90
|
-
ee(
|
89
|
+
p?.forEach((g) => {
|
90
|
+
ee(g) && r.push(it(g, t)), Z(g) && o.push(g);
|
91
91
|
}), m && (i.push(m), c[m] = I(p || [], e), w && (l[m] = w)), h && a.push(h), d && f.push(d), m && d && (u[d] = m);
|
92
92
|
}
|
93
93
|
), {
|
@@ -195,7 +195,7 @@ function mt(n) {
|
|
195
195
|
function Cs(n) {
|
196
196
|
return mt(n) ? n.value : JSON.stringify(n);
|
197
197
|
}
|
198
|
-
const
|
198
|
+
const gt = {
|
199
199
|
session: !1,
|
200
200
|
authKey: "Authorization",
|
201
201
|
storageKey: "ACCESS_STORAGE",
|
@@ -213,7 +213,7 @@ class Fs {
|
|
213
213
|
data = null;
|
214
214
|
mode = y.Raw;
|
215
215
|
constructor(e) {
|
216
|
-
this.options = Object.assign({},
|
216
|
+
this.options = Object.assign({}, gt, e), this.loadData();
|
217
217
|
}
|
218
218
|
connect(e) {
|
219
219
|
const { mode: t, router: s, request: r } = e;
|
@@ -349,7 +349,7 @@ class Fs {
|
|
349
349
|
);
|
350
350
|
}
|
351
351
|
}
|
352
|
-
function
|
352
|
+
function vt() {
|
353
353
|
return he(Se, null);
|
354
354
|
}
|
355
355
|
function Ts(n = {}) {
|
@@ -442,7 +442,7 @@ function jt(n, e) {
|
|
442
442
|
if (t && s) {
|
443
443
|
const r = Oe(`${t}(.*)`), o = Be(t, { decode: decodeURIComponent }), a = T(s, {}, !0);
|
444
444
|
n.mock(r, (i) => {
|
445
|
-
const c =
|
445
|
+
const c = k.parse(i.url) || {}, l = i.body instanceof FormData ? Ne(i.body) : i.body, f = o(i.url)?.params;
|
446
446
|
return Object.assign(i, { data: l, params: c, query: f }), n.mock(a(i));
|
447
447
|
});
|
448
448
|
}
|
@@ -489,7 +489,7 @@ class $t {
|
|
489
489
|
}), t.onUnmounted(() => {
|
490
490
|
this.__cleanup();
|
491
491
|
}), t.onBeforeUpdate(() => {
|
492
|
-
this.
|
492
|
+
this.__reset();
|
493
493
|
});
|
494
494
|
}
|
495
495
|
__proxy() {
|
@@ -500,7 +500,10 @@ class $t {
|
|
500
500
|
__cleanup() {
|
501
501
|
ce.forEach((e) => {
|
502
502
|
this[e] = null;
|
503
|
-
});
|
503
|
+
}), this.__reset();
|
504
|
+
}
|
505
|
+
__reset() {
|
506
|
+
this.__refs = {}, this.$refs = {}, this.__contextRefs = {}, this.context = {};
|
504
507
|
}
|
505
508
|
__parseFunction(e) {
|
506
509
|
if (e)
|
@@ -527,19 +530,17 @@ class $t {
|
|
527
530
|
typeof t == "string" && (delete this.$refs[t], e && delete this.__refs[e]);
|
528
531
|
return;
|
529
532
|
}
|
530
|
-
|
531
|
-
t(s);
|
532
|
-
else if (t) {
|
533
|
-
const o = this.$refs[t];
|
534
|
-
if (o && s !== o) {
|
535
|
-
const a = new Set([].concat(o, s));
|
536
|
-
this.$refs[t] = Array.from(a);
|
537
|
-
} else
|
538
|
-
this.$refs[t] = s;
|
539
|
-
}
|
540
|
-
return s;
|
533
|
+
return r.nodeType === 3 && r.nextSibling && (r = r.nextSibling), r.__vtj__ = e, y.Design === this.__mode && (r.__context__ = this, r.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;
|
541
534
|
};
|
542
535
|
}
|
536
|
+
__getRefEl(e, t, s) {
|
537
|
+
const r = e[t];
|
538
|
+
if (r && s !== r) {
|
539
|
+
const o = new Set([].concat(r, s));
|
540
|
+
return Array.from(o);
|
541
|
+
} else
|
542
|
+
return s;
|
543
|
+
}
|
543
544
|
__clone(e = {}) {
|
544
545
|
const t = { ...this.context, ...e }, s = {
|
545
546
|
...t,
|
@@ -567,14 +568,14 @@ function G(n) {
|
|
567
568
|
}), f = e.defineComponent({
|
568
569
|
name: i.value.name,
|
569
570
|
props: {
|
570
|
-
...
|
571
|
+
...Rt(i.value.props ?? [], l)
|
571
572
|
},
|
572
573
|
setup(u) {
|
573
574
|
l.$props = u, l.props = u, i.value.id && we(
|
574
575
|
n.window || window,
|
575
576
|
i.value.id,
|
576
577
|
i.value.css || ""
|
577
|
-
), l.state =
|
578
|
+
), l.state = kt(e, i.value.state ?? {}, l);
|
578
579
|
const p = Pt(e, i.value.computed ?? {}, l), h = xt(i.value.methods ?? {}, l), m = Ct(e, i.value.inject, l), d = Ft(
|
579
580
|
i.value.dataSources || {},
|
580
581
|
l
|
@@ -605,7 +606,7 @@ function G(n) {
|
|
605
606
|
function Et(n = []) {
|
606
607
|
return n.map((e) => j(e) ? e : e.name);
|
607
608
|
}
|
608
|
-
function
|
609
|
+
function Rt(n = [], e) {
|
609
610
|
const t = (s) => s ? (Array.isArray(s) ? s : [s]).map((o) => st[o]) : void 0;
|
610
611
|
return n.map((s) => j(s) ? {
|
611
612
|
name: s
|
@@ -623,7 +624,7 @@ function kt(n = [], e) {
|
|
623
624
|
{}
|
624
625
|
);
|
625
626
|
}
|
626
|
-
function
|
627
|
+
function kt(n, e, t) {
|
627
628
|
return n.reactive(
|
628
629
|
Object.keys(e || {}).reduce(
|
629
630
|
(s, r) => {
|
@@ -736,7 +737,7 @@ function O(n, e, t = B, s = It) {
|
|
736
737
|
if (i && !Ht(i, e))
|
737
738
|
return null;
|
738
739
|
const m = (d) => {
|
739
|
-
const w = d.$components,
|
740
|
+
const w = d.$components, g = (() => {
|
740
741
|
if (n.name === "component")
|
741
742
|
return Ot(d, n.props?.is);
|
742
743
|
if (n.name === "slot") return n.name;
|
@@ -758,7 +759,7 @@ function O(n, e, t = B, s = It) {
|
|
758
759
|
s,
|
759
760
|
n
|
760
761
|
);
|
761
|
-
let N = t.createVNode(
|
762
|
+
let N = t.createVNode(g, { ...S, ...Fe }, Te);
|
762
763
|
const ne = r ? Mt(r, h, d) : [];
|
763
764
|
return ne.length && (N = t.withDirectives(N, ne)), N;
|
764
765
|
};
|
@@ -943,17 +944,17 @@ function os() {
|
|
943
944
|
}
|
944
945
|
function is(n) {
|
945
946
|
const e = os();
|
946
|
-
return
|
947
|
+
return ve(() => (e.value, !!n()));
|
947
948
|
}
|
948
949
|
function as(n, e, t = {}) {
|
949
950
|
const { window: s = ss, ...r } = t;
|
950
951
|
let o;
|
951
952
|
const a = is(() => s && "MutationObserver" in s), i = () => {
|
952
953
|
o && (o.disconnect(), o = void 0);
|
953
|
-
}, c =
|
954
|
+
}, c = ve(() => {
|
954
955
|
const p = te(n), h = (Array.isArray(p) ? p : [p]).map(rs).filter(Qt);
|
955
956
|
return new Set(h);
|
956
|
-
}), l =
|
957
|
+
}), l = ge(
|
957
958
|
() => c.value,
|
958
959
|
(p) => {
|
959
960
|
i(), a.value && p.size && (o = new MutationObserver(e), p.forEach((h) => o.observe(h, r)));
|
@@ -980,7 +981,7 @@ function cs(n = null, e = {}) {
|
|
980
981
|
const p = e.titleTemplate || "%s";
|
981
982
|
return typeof p == "function" ? p(u) : te(p).replace(/%s/g, u);
|
982
983
|
}
|
983
|
-
return
|
984
|
+
return ge(
|
984
985
|
c,
|
985
986
|
(u, p) => {
|
986
987
|
u !== p && o && (o.title = f(typeof u == "string" ? u : ""));
|
@@ -1002,7 +1003,7 @@ function cs(n = null, e = {}) {
|
|
1002
1003
|
const le = X({
|
1003
1004
|
name: "VtjPageContainer",
|
1004
1005
|
async setup() {
|
1005
|
-
const n =
|
1006
|
+
const n = ke(), e = ye(), t = e.params.id, s = t ? n.getPage(t) : n.getHomepage(), r = s ? await n.getRenderComponent(s.id) : null, o = F(Symbol());
|
1006
1007
|
return s && (Object.assign(e.meta, s.meta || {}, { cache: s.cache }), cs(s.title || "VTJ")), {
|
1007
1008
|
provider: n,
|
1008
1009
|
component: r,
|
@@ -1124,13 +1125,13 @@ const le = X({
|
|
1124
1125
|
}
|
1125
1126
|
};
|
1126
1127
|
return (r, o) => (Xe(), Ze("div", ls, [
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1128
|
+
R("div", us, [
|
1129
|
+
R("h1", ps, [
|
1130
|
+
R("span", ds, q(t.name), 1)
|
1130
1131
|
]),
|
1131
|
-
|
1132
|
-
|
1133
|
-
|
1132
|
+
R("div", fs, q(t.tagline), 1),
|
1133
|
+
R("div", hs, [
|
1134
|
+
R("button", {
|
1134
1135
|
"data-l-h6o7ki7": "",
|
1135
1136
|
onClick: s
|
1136
1137
|
}, q(t.actionText), 1)
|
@@ -1138,13 +1139,13 @@ const le = X({
|
|
1138
1139
|
])
|
1139
1140
|
]));
|
1140
1141
|
}
|
1141
|
-
}),
|
1142
|
+
}), gs = X({
|
1142
1143
|
name: "VtjStartupContainer",
|
1143
1144
|
render() {
|
1144
1145
|
return K(ms);
|
1145
1146
|
}
|
1146
|
-
}),
|
1147
|
-
var
|
1147
|
+
}), Re = Symbol("Provider");
|
1148
|
+
var vs = /* @__PURE__ */ ((n) => (n.Production = "production", n.Development = "development", n))(vs || {});
|
1148
1149
|
class ys extends Ae {
|
1149
1150
|
constructor(e) {
|
1150
1151
|
super(), this.options = e;
|
@@ -1228,24 +1229,24 @@ class ys extends Ae {
|
|
1228
1229
|
e[h] = r[h] = await m();
|
1229
1230
|
else {
|
1230
1231
|
const w = l[h] || [];
|
1231
|
-
for (const
|
1232
|
-
Z(
|
1232
|
+
for (const g of w)
|
1233
|
+
Z(g) && await lt(h, k.append(g, { v: x })), ee(g) && await ie(k.append(g, { v: x }));
|
1233
1234
|
r[h] = e[h];
|
1234
1235
|
}
|
1235
1236
|
}
|
1236
1237
|
if (i === "development") {
|
1237
1238
|
for (const m of f)
|
1238
|
-
await ie(
|
1239
|
+
await ie(k.append(m, { v: x }));
|
1239
1240
|
const h = this.materials || {};
|
1240
1241
|
for (const m of u) {
|
1241
1242
|
const d = e[p[m]], w = Ie[m];
|
1242
1243
|
if (w)
|
1243
|
-
d && w.forEach((
|
1244
|
-
o[
|
1244
|
+
d && w.forEach((g) => {
|
1245
|
+
o[g] = d[g];
|
1245
1246
|
});
|
1246
1247
|
else {
|
1247
|
-
const
|
1248
|
-
|
1248
|
+
const g = h[m] ? (await h[m]()).default : e[m];
|
1249
|
+
g && d && (g.components || []).forEach((S) => {
|
1249
1250
|
o[S.name] = ct(S, d);
|
1250
1251
|
});
|
1251
1252
|
}
|
@@ -1262,7 +1263,7 @@ class ys extends Ae {
|
|
1262
1263
|
}, f = {
|
1263
1264
|
path: c,
|
1264
1265
|
name: D,
|
1265
|
-
component: t?.homepage ? le : r.startupComponent ||
|
1266
|
+
component: t?.homepage ? le : r.startupComponent || gs,
|
1266
1267
|
meta: i
|
1267
1268
|
};
|
1268
1269
|
e.hasRoute(C) && e.removeRoute(C), e.hasRoute(D) && e.removeRoute(D), o ? (e.addRoute(o, l), e.addRoute(o, f)) : (e.addRoute(l), e.addRoute(f));
|
@@ -1271,7 +1272,7 @@ class ys extends Ae {
|
|
1271
1272
|
const t = e.config.globalProperties.installed || {};
|
1272
1273
|
for (const [s, r] of Object.entries(this.library))
|
1273
1274
|
!t[s] && dt(r) && (e.use(r), t[s] = !0);
|
1274
|
-
this.options.install && e.use(this.options.install), this.adapter.access && e.use(this.adapter.access), e.provide(
|
1275
|
+
this.options.install && e.use(this.options.install), this.adapter.access && e.use(this.adapter.access), e.provide(Re, this), e.config.globalProperties.installed = t, this.mode === y.Design && (e.config.errorHandler = (s, r, o) => {
|
1275
1276
|
const a = r?.$options.name, i = typeof s == "string" ? s : s?.message || s?.msg || "未知错误", c = `[ ${a} ] ${i} ${o}`;
|
1276
1277
|
console.error(
|
1277
1278
|
"[VTJ Error]:",
|
@@ -1369,8 +1370,8 @@ function As(n) {
|
|
1369
1370
|
onReady: (s) => e.ready(s)
|
1370
1371
|
};
|
1371
1372
|
}
|
1372
|
-
function
|
1373
|
-
const e = he(
|
1373
|
+
function ke(n = {}) {
|
1374
|
+
const e = he(Re);
|
1374
1375
|
if (!e)
|
1375
1376
|
throw new Error("Can not find provider");
|
1376
1377
|
if (e.nodeEnv === "development") {
|
@@ -1521,58 +1522,58 @@ class se {
|
|
1521
1522
|
return console.log("BaseService.genSource", e), "";
|
1522
1523
|
}
|
1523
1524
|
}
|
1524
|
-
const
|
1525
|
+
const v = new qe({
|
1525
1526
|
type: "local",
|
1526
1527
|
expired: 0,
|
1527
1528
|
prefix: "__VTJ_"
|
1528
1529
|
});
|
1529
1530
|
class Ms extends se {
|
1530
1531
|
init(e) {
|
1531
|
-
const t = new H(e), s =
|
1532
|
-
return
|
1532
|
+
const t = new H(e), s = v.get(`project_${t.id}`), r = Object.assign(t.toDsl(), s || {});
|
1533
|
+
return v.save(`project_${t.id}`, r), Promise.resolve(r);
|
1533
1534
|
}
|
1534
1535
|
saveProject(e) {
|
1535
1536
|
const t = new H(e);
|
1536
|
-
return
|
1537
|
+
return v.save(`project_${t.id}`, t.toDsl()), Promise.resolve(!0);
|
1537
1538
|
}
|
1538
1539
|
saveMaterials(e, t) {
|
1539
|
-
return
|
1540
|
+
return v.save(`materials_${e.id}`, Q(t)), Promise.resolve(!0);
|
1540
1541
|
}
|
1541
1542
|
saveFile(e) {
|
1542
|
-
return
|
1543
|
+
return v.save(`file_${e.id}`, e), Promise.resolve(!0);
|
1543
1544
|
}
|
1544
1545
|
getFile(e) {
|
1545
|
-
const t =
|
1546
|
+
const t = v.get(`file_${e}`);
|
1546
1547
|
return t ? Promise.resolve(t) : Promise.reject(null);
|
1547
1548
|
}
|
1548
1549
|
removeFile(e) {
|
1549
|
-
return
|
1550
|
+
return v.remove(`file_${e}`), Promise.resolve(!0);
|
1550
1551
|
}
|
1551
1552
|
saveHistory(e) {
|
1552
|
-
return
|
1553
|
+
return v.save(`history_${e.id}`, e), Promise.resolve(!0);
|
1553
1554
|
}
|
1554
1555
|
removeHistory(e) {
|
1555
|
-
const t =
|
1556
|
+
const t = v.get(`history_${e}`);
|
1556
1557
|
if (t) {
|
1557
1558
|
const r = (t.items || []).map((o) => o.id);
|
1558
|
-
this.removeHistoryItem(e, r),
|
1559
|
+
this.removeHistoryItem(e, r), v.remove(`history_${e}`);
|
1559
1560
|
}
|
1560
1561
|
return Promise.resolve(!0);
|
1561
1562
|
}
|
1562
1563
|
getHistory(e) {
|
1563
|
-
const t =
|
1564
|
+
const t = v.get(`history_${e}`), s = new ue(t || { id: e });
|
1564
1565
|
return Promise.resolve(s.toDsl());
|
1565
1566
|
}
|
1566
1567
|
getHistoryItem(e, t) {
|
1567
|
-
const s =
|
1568
|
+
const s = v.get(`history_${e}_${t}`);
|
1568
1569
|
return Promise.resolve(s);
|
1569
1570
|
}
|
1570
1571
|
saveHistoryItem(e, t) {
|
1571
|
-
return
|
1572
|
+
return v.save(`history_${e}_${t.id}`, t), Promise.resolve(!0);
|
1572
1573
|
}
|
1573
1574
|
removeHistoryItem(e, t) {
|
1574
1575
|
return t.forEach((s) => {
|
1575
|
-
|
1576
|
+
v.remove(`history_${e}_${s}`);
|
1576
1577
|
}), Promise.resolve(!0);
|
1577
1578
|
}
|
1578
1579
|
}
|
@@ -1721,7 +1722,7 @@ function Os(n) {
|
|
1721
1722
|
menuPathPrefix: e = "",
|
1722
1723
|
pageRouteName: t = "page",
|
1723
1724
|
disableMenusFilter: s = !1
|
1724
|
-
} = n || {}, r =
|
1725
|
+
} = n || {}, r = ke(), o = ye(), a = vt(), i = F(!1), c = F(!1), l = r.project;
|
1725
1726
|
et(() => {
|
1726
1727
|
const { name: p, params: h, meta: m } = o;
|
1727
1728
|
if (p === C) {
|
@@ -1760,10 +1761,10 @@ export {
|
|
1760
1761
|
D as HOMEPAGE_ROUTE_NAME,
|
1761
1762
|
nt as HTML_TAGS,
|
1762
1763
|
Cs as JSCodeToString,
|
1763
|
-
|
1764
|
+
ks as LIFE_CYCLES_LIST,
|
1764
1765
|
Hs as LocalService,
|
1765
1766
|
Ss as MemoryService,
|
1766
|
-
|
1767
|
+
vs as NodeEnv,
|
1767
1768
|
C as PAGE_ROUTE_NAME,
|
1768
1769
|
ys as Provider,
|
1769
1770
|
ms as Startup,
|
@@ -1807,10 +1808,10 @@ export {
|
|
1807
1808
|
at as parseDeps,
|
1808
1809
|
T as parseExpression,
|
1809
1810
|
W as parseFunction,
|
1810
|
-
|
1811
|
+
Re as providerKey,
|
1811
1812
|
it as removeProdFlag,
|
1812
1813
|
_e as toString,
|
1813
|
-
|
1814
|
+
vt as useAccess,
|
1814
1815
|
Os as useMask,
|
1815
|
-
|
1816
|
+
ke as useProvider
|
1816
1817
|
};
|
package/package.json
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vtj/renderer",
|
3
3
|
"private": false,
|
4
|
-
"version": "0.9.
|
4
|
+
"version": "0.9.14",
|
5
5
|
"type": "module",
|
6
6
|
"dependencies": {
|
7
7
|
"mockjs": "~1.1.0",
|
8
|
-
"@vtj/
|
9
|
-
"@vtj/
|
8
|
+
"@vtj/core": "~0.9.14",
|
9
|
+
"@vtj/utils": "~0.9.14"
|
10
10
|
},
|
11
11
|
"devDependencies": {
|
12
12
|
"vue": "~3.5.5",
|
13
13
|
"vue-router": "~4.5.0",
|
14
|
-
"@vtj/
|
15
|
-
"@vtj/
|
16
|
-
"@vtj/
|
14
|
+
"@vtj/cli": "~0.9.6",
|
15
|
+
"@vtj/icons": "~0.9.14",
|
16
|
+
"@vtj/ui": "~0.9.14"
|
17
17
|
},
|
18
18
|
"exports": {
|
19
19
|
".": {
|
@@ -40,8 +40,10 @@ export declare class Context {
|
|
40
40
|
setup(attrs: Record<string, any>, Vue?: any): void;
|
41
41
|
private __proxy;
|
42
42
|
private __cleanup;
|
43
|
+
private __reset;
|
43
44
|
__parseFunction(code?: JSFunction): Function | undefined;
|
44
45
|
__parseExpression(code?: JSExpression | JSFunction): any;
|
45
46
|
__ref(id?: string | null, ref?: string | Function): ((el: any) => Promise<any>) | undefined;
|
47
|
+
__getRefEl(refs: Record<string, any>, key: string, el: any): any;
|
46
48
|
__clone(context?: Record<string, any>): Context;
|
47
49
|
}
|
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.9.
|
5
|
+
* @version 0.9.13
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
7
|
*/
|
8
|
-
export declare const version = "0.9.
|
8
|
+
export declare const version = "0.9.13";
|