@joker.front/core 1.3.71 → 1.3.74
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/bundle.es.js +1 -1
- package/dist/bundle.js +1 -1
- package/package.json +1 -1
package/dist/bundle.es.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{EXPRESSHANDLERTAG as e,createFuntionBody as t,AST as i,RENDER_HANDLER as s,createComponent as n,createCommand as r}from"@joker.front/ast";export{AST,EXPRESSHANDLERTAG,RENDER_HANDLER,createCodeFunction,createCommand,createComment,createComponent,createElement,createFuntionBody,createText}from"@joker.front/ast";const o=new Map,a=new Map,h=new Map;let d={recordRender:(e,t)=>{a.set(e,t)},recordComponent:(e,t)=>{h.set(e,t)},record:(e,t)=>{void 0===o.get(e)&&o.set(e,new Set),o.get(e).add(t),t.$on("destroy",(()=>{o.get(e)?.delete(t)}))},reload:(e,t)=>{let i=h.get(e);if(!i)return;i.component=t;let s=o.get(e);if(!s)return;let n=Array.from(s);s.clear(),n.forEach((e=>{if(e.$root){if(!e.$rootVNode?.parent)return window.onbeforeunload=null,void location.reload();{let t=e.$rootVNode.parent;if(!(t instanceof z.Component&&t[z.PARSERKEY]&&t[z.PARSERKEY].canReload))return window.onbeforeunload=null,void location.reload();t[z.PARSERKEY].reload()}}}))},rerender:(e,t)=>{let i=a.get(e);i&&(i.render=t),o.get(e)?.forEach((e=>{e.$render(t)}))}};function l(e){return null!==e&&"object"==typeof e}function c(e,t){Object.getOwnPropertyNames(e).forEach((i=>{t(i,e[i])}))}function u(e){return"[object Object]"===Object.prototype.toString.call(e)}function f(e){if(null===e)return e;if("object"!=typeof e)return e;let t;t=Array.isArray(e)?[]:{};let i=Object.keys(e);for(let s of i){let i=e[s];t[s]="object"==typeof i?f(i):i}return t}function p(e,t,i){return Array.isArray(e)&&Array.isArray(t)?function(e,t,i){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if(i){if(e[s]!==t[s])return!1}else if(!1===m(e[s],t[s],i))return!1;return!0}(e,t,i):m(e,t,i)}function m(e,t,i){if(e===t)return!0;let s=l(e),n=l(t);if(s&&n){if(u(e)&&u(t)){let s=Object.keys(e);if(s.length!==Object.keys(t).length)return!1;if(i){for(let i of s)if(e[i]!==t[i])return!1;return!0}return JSON.stringify(e)===JSON.stringify(t)}return e===t}return!s&&!n&&String(e)===String(t)}function y(e,t){let i=e.indexOf(t);return i>-1&&e.splice(i,1),e}function E(e,t){let i=e.findIndex((e=>t(e)));return i>-1&&e.splice(i,1),e}function v(e){return!e||""===e.trim()}function g(e,t="-"){return(e=e||"").split(/(?=[A-Z])/).map((e=>e.toLowerCase())).join(t)}let b=(...e)=>{},w="warn";const N=["silent","error","warn","info"];function R(){let e=new Date;function t(e,t=2){return e.toString().padStart(t,"0")}return t(e.getHours())+":"+t(e.getMinutes())+":"+t(e.getSeconds())+":"+t(e.getMilliseconds(),3)}function $(e,t,i,s){N.indexOf(e)<=N.indexOf(w)&&(void 0===s?console[e](`${R()} [${t}]:`,i):console[e](`${R()} [${t}]:`,i,s))}let C={info:function(e,t,i){$("info",e,t,i)},warn:function(e,t,i){$("warn",e,t,i)},error:function(e,t,i){$("error",e,t,i)},setLoggerLeve:function(e){w=e}};const A={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"',"#39":"'"};function x(e){return e.replace(/&(lt|gt|nbsp|amp|quot|#39);/gi,((e,t)=>A[t]||""))}class O{static target;watchers=new Map;depend(e){O.target?.addDep(this,e)}addWatcher(e,t){let i=this.watchers.get(e)||[];i.push(t),this.watchers.set(e,i)}removeWatcher(e,t){let i=this.watchers.get(e);i&&y(i,t)}notify(e){let t=this.watchers.get(e);if(t){E(t,(e=>e.isDestroy)),[...t].forEach((e=>{!1===e.isDestroy&&e.update()}))}}}const S=Symbol.for("__JOKER_OBJECT_PROXY_DEP_ID__"),P=Symbol.for("__JOKER_OBJECT_PROXY_DATA_KEY__"),D=Symbol.for("__JOKER_OBJECTPROXY_DEPLEVE_ID__");function T(e){return l(e)&&e instanceof Window==!1&&e instanceof F==!1&&e!==window.parent&&(Array.isArray(e)||u(e)||e instanceof Set||e instanceof Map)&&!Object.isFrozen(e)&&!(e instanceof Element)&&!(q in e)&&!(I in e)&&!(Fe in e)}function k(e){if(K(e))return e;if(e&&e.hasOwnProperty(P)){let t=Reflect.get(e,P);if(t)return t}let t=new O,i=!0,s=new Proxy(e,{get(e,i,s){if(e instanceof Set||e instanceof Map){if("add"===i){let s=Reflect.get(e,i);return i=>{T(i)&&(i=_(i));let n=s.call(e,i);return j(t,"size"),j(t,D),n}}if("set"===i){let s=Reflect.get(e,i);return(i,n)=>{T(n)&&(n=_(n));let r=s.call(e,i,n);return j(t,"size"),j(t,D),r}}if("delete"===i||"clear"===i){let s=Reflect.get(e,i);return n=>{let r=s.call(e,n);return("clear"===i||r)&&(j(t,"size"),j(t,D)),r}}let s=Reflect.get(e,i);if("function"==typeof s)return s.bind(e)}if(i===P)return;if(i===S)return t;if(i===D)return;let n=Reflect.get(e,i);return i===Symbol.toStringTag||!1===function(e,t){return t in e}(e,i)&&"length"!==i&&"size"!==i||(t.depend(i),T(n)&&K(n)?.depend(D)),n},set(e,s,n){if(i)return Reflect.set(e,s,n),!0;T(n)&&(n=_(n));let r=!1===function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,s),o=Reflect.get(e,s)!==n;return Reflect.set(e,s,n),(o||"length"===s&&Array.isArray(e))&&j(t,s),Array.isArray(e)?"length"===s&&j(t,D):r&&j(t,D),!0},deleteProperty:(e,i)=>(Reflect.deleteProperty(e,i),!1===Array.isArray(e)&&j(t,D),!0)});var n,r,o,a;n=e,r=P,o=s,a=!1,Object.defineProperty(n,r,{value:o,enumerable:a,writable:!0,configurable:!0});for(let t in e){let i=e[t];T(i)&&!K(i)&&(s[t]=k(e[t]))}return i=!1,s}function K(e){if(l(e))return Reflect.get(e,S)}function _(e,t=!1){if(!1===T(e))throw new Error("当前传入的数据不是正确的数据类型,必须是数组或者对象");return k(t?f(e):e)}function W(e,t,i){let s=i;T(i)&&(s=_(i));let n=new O;Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:()=>(n.depend(t),K(s)?.depend(D),s),set:e=>{e!==s&&(T(e)&&(e=_(e)),s=e,j(n,t))}})}const I=Symbol.for("JOKER_SHALLOW_OBSERVER");class L{data;[I]=!0;dep=new O;constructor(e){this.data=e}isChanged=!1;get value(){return this.dep.depend(D),this.data}set value(e){!1===Object.is(e,this.data)&&(this.isChanged=!0,this.data=e,j(this.dep,D))}}let V=!1,M=new Map;function j(e,t){if(!1===V)e.notify(t);else{let i=M.get(e);void 0===i&&(i=[],M.set(e,i)),!1===i.includes(t)&&i.push(t)}}function Y(e){V=!0;try{e()}catch(e){return V=!1,M.clear(),void C.error("数据劫持","数据劫持组合回复在做变更采集时,遇到了阻塞错误,不做响应,请检查",e)}V=!1,function(e){let t=[],i=[];e.forEach(((e,i)=>{e.forEach((e=>{t.push(...i.watchers.get(e)||[])}))})),t.forEach((e=>{i.includes(e)||(!1===e.isDestroy&&e.update(),i.push(e))}))}(M),M.clear()}function B(e){return void 0!==K(e)}const H="数据观察",J=Symbol.for("JOKER_BREAK_WATCH_UPDATE");class F{ob;updateCallBack;forceCallBack;getter;value;isDestroy=!1;updating=!1;runRelations=new Map;relations=new Map;constructor(e,t,i,s){if(this.ob=e,this.updateCallBack=t,this.forceCallBack=s,void 0===e)throw new Error("无法对underfind进行变更观察");if(void 0===i)this.getter=e=>e;else if("function"==typeof i)this.getter=i;else{let e=function(e){if(/[^\w.$]/.test(e))return;let t=e.split(".");return function(e){let i=e;return t.forEach((e=>{i&&(i=i[e])})),i}}(i);if(void 0===e)throw new Error(i+"解析失败,无法明确读取表达式,请检查expOrFn参数,或采用function模式");this.getter=e}void 0===this.getter&&C.error(H,"getter创建失败",arguments),this.value=this.getValue()}getValue(){if(void 0===this.getter)return;O.target=this;let e,t="function"==typeof this.ob?this.ob():this.ob;try{e=this.getter.call(t,t)}catch(e){throw C.error(H,`获取值失败,执行方法:${this.getter.toString()}`),e}return O.target=void 0,this.clearnDeps(),e}addDep(e,t){let i=this.runRelations.get(e);if(void 0===i||!1===i.includes(t)){i=i||[],i.push(t),this.runRelations.set(e,i);let s=this.relations.get(e);void 0!==s&&!1!==s.includes(t)||e.addWatcher(t,this)}}update(){if(this.updating)return;let e=this.getValue();if(e===J)return;let t=this.value;if(this.forceCallBack||e!==t||l(e)){this.value=e;let i=e!==t&&p(e,t,!0);if(i&&!this.forceCallBack)return;this.updating=!0;try{this.updateCallBack(e,t,i,this)}catch(e){throw e}finally{this.updating=!1}}}destroy(){this.relations.forEach(((e,t)=>{for(let i of e)t.removeWatcher(i,this)})),this.isDestroy=!0,this.relations.clear(),this.runRelations.clear(),this.ob=void 0,this.value=void 0,this.getter=void 0}clearnDeps(){this.relations.forEach(((e,t)=>{let i=this.runRelations.get(t);for(let s of e)i?!1===i.includes(s)&&t.removeWatcher(s,this):t.removeWatcher(s,this)})),this.relations.clear(),this.relations=this.runRelations,this.runRelations=new Map}}var G;!function(e){let t=new Map;e.bind=function(e){return{to:i=>{if(t.has(e))throw new Error(`TagId:${e.toString()}已注入实现类,请勿重复注入。`);t.set(e,i)}}},e.get=function(e,...i){let s=t.get(e);if(s)return new s(...i)}}(G||(G={}));const q=Symbol.for("JOKER_VNODE_TAG");var z;!function(e){e.PARSERKEY=Symbol.for("JOKER_PARSER_KEY");class t{parent;[q]=!0;static;output;[e.PARSERKEY];childrens;ref;sleep=!1;constructor(e){this.parent=e}get prev(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)-1]}get next(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)+1]}closest(e,t){if(!0===e(this))return this;let i=this.parent;for(;i;){if(!0===e(i))return i;if(!0===t?.(i))break;i=i.parent}}find(e,t,i,s,n){let r=n??[];if(s??=this.childrens,s)for(let n of s){(!0!==e(n)||(r.push(n),i))&&(!0!==t?.(n)&&n.childrens&&this.find(e,t,i,n.childrens,r))}return r}contains(e,t){if(t??=this.childrens,t)for(let i of t){if(!0===e(i))return!0;if(i.childrens&&i.childrens.length&&this.contains(e,i.childrens))return!0}return!1}first(e,t){if(t??=this.childrens,t)for(let i of t){if(!0===e(i))return i;if(i.childrens&&i.childrens.length){let t=this.first(e,i.childrens);if(t)return t}}}}e.Node=t;e.Root=class extends t{childrens=[];component;constructor(){super()}};e.Text=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Html=class extends t{html;notShadow;static=!0;constructor(e,t,i){super(t),this.html=e,this.notShadow=i}};e.Comment=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Element=class extends t{tagName;static=!0;attributes={};childrens=[];events=[];_assistEventCache;constructor(e,t){super(t),this.tagName=e}};e.Component=class extends t{name;component;events=[];propValues={};keepalive;get firstElement(){if(this.childrens){let t=i=>{for(let s of i){if(s instanceof e.Element)return s;if(s.childrens){let e=t(s.childrens);if(e)return e}}};return t(this.childrens)}}get rootElements(){if(this.childrens){let t=[],i=s=>{for(let n of s)n instanceof e.Element||n instanceof e.Html?t.push(n):n.childrens&&i(n.childrens)};return i(this.childrens),t}return[]}};e.Condition=class extends t{cmdName;result=!1;childrens=[];isShow=!1;constructor(e,t){super(t),this.cmdName=e}};e.List=class extends t{childrens=[]};e.ListItem=class extends t{ob;childrens=[];constructor(e,t){super(t),this.ob=e}};e.RenderSection=class extends t{id="unknown";params=[];section;childrens=[];ob;constructor(e,t){super(t),"string"==typeof e?this.id=e:this.section=e}}}(z||(z={}));const Q="DOM渲染",X=["script","style","textarea","pre"];let U=0;const Z=["svg","defs","use","rect","circle","ellipse","line","polyline","polygon","path","text","g"];var ee;function te(e,t,i){return`${e}-${t}-${i}`}function ie(e,t,i,s){e._assistEventCache??=[],e._assistEventCache.push([t,i]),document.body.addEventListener(t,i,s)}function se(e,t,i){e._assistEventCache&&t&&i?(E(e._assistEventCache,(e=>e[0]===t&&e[1]===i)),document.body.removeEventListener(t,i)):(e._assistEventCache?.forEach((e=>{document.body.removeEventListener(e[0],e[1])})),e._assistEventCache&&(e._assistEventCache.length=0),e._assistEventCache=void 0)}!function(e){e.IRENDERIOCTAGID=Symbol.for("JOKER_IRENDERIOC_TAGID"),e.ROOT_CONTAINER="";e.DomRender=class{elements;constructor(){this.elements=document.createDocumentFragment()}mount(e){if(e instanceof Element)e.appendChild(this.elements);else if(e instanceof z.Component)if(e.parent)if(e.output){let t=e.output,i=he(e)||t.parentNode;i&&i.insertBefore(this.elements,t)}else C.error(Q,"组件挂载渲染时发现该节点未定义DOM定位节点",e);else C.error(Q,"mount子组件时,发现该组件无父级",e);else C.error(Q,"mount只支持挂载到Element或VNode.Node类型数据中",e)}appendNode(e,t){if(this.renderNode(e),e.output){let i=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];for(let s of i)this.appendNodeChildren(e,s,e.parent,t)}else C.error(Q,"未找自身节点的el属性,无法进行dom挂载",e)}updateNode(e,t){if(e instanceof z.Element)for(let t in e.attributes){let i=e.attributes[t];this.setAttribute(e.output,t,i)}else e instanceof z.Text?e.parent&&e.parent instanceof z.Element&&X.includes(e.parent.tagName)?(this.removeNode(e),this.appendNode(e)):e.output.textContent=x(e.text||""):e instanceof z.Html?e.notShadow?e.output.innerHTML=e.html:e.output.root.innerHTML=e.html:C.error(Q,`该节点不支持${t}的更新`,e)}removeNode(e,t){let i=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];i?.forEach((e=>{e?.remove()})),t||(e instanceof z.Element&&se(e),e.output=void 0)}destroy(){this.elements=void 0}elementToEnter(e,t,i,s){e.output&&this.transitionFrame(e,t,"enter",i,s)}elementToLeave(e,t,i,s){e.output&&this.transitionFrame(e,t,"leave",i,s)}triggerEvent(e,t,i){let s=[];for(let n of e.events){let[r,o]=n;if(r===t){let t=o.modifiers?.includes("self"),a=o.modifiers?.includes("outside");if(t||a){C.warn(Q,"事件修饰符:self、outside在组件事件中无法使用,组件无法确认元素",e);continue}let h=i.event;if((h instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(r)||h instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(r))&&!1===re(h,o.modifiers))continue;if(o.callBack(i),o.modifiers?.includes("prevent")&&i.preventDefault(),o.modifiers?.includes("once")&&s.push(n),o.modifiers?.includes("stop"))return i.stopPropagation(),!1}}s.length&&s.forEach((t=>{y(e.events,t)}))}transitionFrame(e,t,i,s,n){oe(e,te(t,i,"from")),s||="transition";let r=e.output.__TRANSITION_EVNETID__=U++;requestAnimationFrame((()=>{requestAnimationFrame((()=>{if(!e.output)return;oe(e,te(t,i,"active")),ae(e,te(t,i,"from")),oe(e,te(t,i,"to"));let o=function(e,t){let i=window.getComputedStyle(e),s=e=>(i[e]||"").split(", ");if("transition"===t){let e=s("transitionDelay"),t=s("transitionDuration"),i=de(e,t);if(i>0)return{timeout:i,count:t.length}}else if("animation"===t){let e=s("animationDelay"),t=s("animationDuration"),i=de(e,t);if(i>0)return{timeout:i,count:t.length}}}(e.output,s);if(!o)return void n?.();let a=0,h=()=>{ae(e,te(t,i,"to")),ae(e,te(t,i,"active")),e.output&&(e.output.removeEventListener(`${s}end`,d),r===e.output.__TRANSITION_EVNETID__&&n?.())},d=t=>{t.target===e.output&&++a>=o.count&&h()};setTimeout((()=>{a<o.count&&h()}),o.timeout+1),e.output?.addEventListener(`${s}end`,d)}))}))}renderNode(e){if(!e.output)if(e instanceof z.Text)e.parent&&e.parent instanceof z.Element&&X.includes(e.parent.tagName)?e.output=this.parserHtml(e.text):e.output=document.createTextNode(x(e.text||""));else if(e instanceof z.Html)if(e.notShadow){let t=document.createElement("joker-html-container");t.JOKER_NODE=e,t.innerHTML=e.html,e.output=t}else{let t=document.createElement("joker-html-shadow");t.JOKER_NODE=e,t.style.lineHeight="1",t.root.innerHTML=e.html,e.output=t}else if(e instanceof z.Element){let t,i=e.tagName.toLowerCase();"svg"===i||Z.includes(i)||e.parent?.inSvg?(e.inSvg=!0,t=document.createElementNS("http://www.w3.org/2000/svg",e.tagName)):t=document.createElement(e.tagName);for(let i in e.attributes)this.setAttribute(t,i,e.attributes[i]);t.JOKER_NODE=e,e.output=t,e.events.some((e=>"click"===e[0]&&e[1].modifiers?.includes("outside")))?setTimeout((()=>{this.initElementEvents(t,e)})):this.initElementEvents(t,e)}else e instanceof z.Comment?e.output=document.createComment(e.text):e.output=document.createTextNode("")}initElementEvents(e,t){for(let[i,s]of t.events){let n=s.modifiers?.includes("self"),r=s.modifiers?.includes("outside");n&&r&&(C.warn(Q,"事件修饰符:self、outside不可以同时存在,将按照self处理",t),r=!1);let o,a=function(o){if(!(t.sleep||n&&o.target!==e)){if(r){if(o.target===e||e.contains(o.target))return;if(!1===document.contains(o.target))return;if(t.contains((e=>(e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output]).includes(o.target))))return!0}(o instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(i)||o instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(i))&&!1===re(o,s.modifiers)||(s.callBack({eventName:i,event:o,target:t,preventDefault:()=>o.preventDefault(),stopPropagation:()=>o.stopPropagation(),data:void 0}),s.modifiers?.includes("prevent")&&o.preventDefault(),s.modifiers?.includes("stop")&&o.stopPropagation(),s.modifiers?.includes("once")&&(r?se(t,i,a):e.removeEventListener(i,a)))}};s.modifiers?.includes("passive")&&(o={passive:!0}),r?ie(t,i,a,o):e.addEventListener(i,a,o)}}parserHtml(e){var t=document.createElement("div");return t.innerHTML=e,t.childNodes}isCommandGroup(e){return e instanceof z.Component||e instanceof z.Condition||e instanceof z.List||e instanceof z.ListItem||e instanceof z.RenderSection}appendNodeChildren(e,t,i,s){let n=he(e);if(n)n.appendChild(t);else if(void 0===i)this.elements?.appendChild(t);else if(i)if(i instanceof z.Root){let e=i.parent;if(e&&e instanceof z.Component&&e.output){let i=e.output,s=i?.parentNode;if(s)return void s.insertBefore(t,i)}this.elements?.appendChild(t)}else if(i instanceof z.Element){let e=i.output;if(void 0===e)return;e.appendChild(t)}else if(this.isCommandGroup(i)){let n=i.output?.parentNode;if(void 0!==s&&i.childrens?.length&&n){let r=s-1;if(r<0){let i=ce(e);return void(i&&n.contains(i.output)?i.output.after(t):n.insertBefore(t,n.firstChild))}{let e=i.childrens[r];if(e){let i=e.output;if(i)return void i.after(t)}}}n&&n.insertBefore(t,i.output)}else C.error(Q,"该节点不支持嵌套子集,请检查。",{node:e,parent:i})}setAttribute(e,t,i){if(e)if("boolean"!=typeof i){if("class"===t){if(Array.isArray(i)){let e=[];for(let t of i)if(l(t))for(let i in t)t[i]&&e.push(i);else t&&e.push(t);i=e.join(" ")}else if(l(i)){for(let t in i)i[t]?e.classList.add(t):e.classList.remove(t);return}}else if("style"===t&&l(i)){e.removeAttribute("style");for(let t in i){let s=!1;void 0!==i[t]&&!1!==i[t]||(s=!0);let n=String(i[t]);v(n)&&(s=!0),s||(e.style[t]=n)}return}i=(i??"").toString().trim(),"class"===t&&(i=i.split(/\s/).filter((e=>e.trim())).join(" ")),"value"===t&&"value"in e?e.value=i:"xlink:href"===t?e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",i):e.setAttribute(t,i)}else i?e.setAttribute(t,""):e.removeAttribute(t)}}}(ee||(ee={}));const ne={enter:"enter",backspace:"delete",tab:"tab",arrowup:"up",arrowdown:"down",arrowleft:"left",arrowright:"right",escape:"esc"," ":"space"};function re(e,t){if(e instanceof KeyboardEvent){if(void 0===e.key)return!1;for(let i in ne)if(t?.includes(ne[i])&&e.key.toLowerCase()!==i)return!1}else{if(t?.includes("left")&&0!==e.button)return!1;if(t?.includes("right")&&2!==e.button)return!1;if(t?.includes("middle")&&1!==e.button)return!1}return(!t?.includes("ctrl")||!1!==e.ctrlKey)&&((!t?.includes("alt")||!1!==e.altKey)&&(!t?.includes("shift")||!1!==e.shiftKey))}function oe(e,t){e.output&&e.output.classList.add(t)}function ae(e,t){e.output&&e.output.classList.remove(t)}function he(e){if(e instanceof z.Element||e instanceof z.Component){let t=e instanceof z.Component?e.propValues["append-to"]:e.attributes["append-to"];if(t){if(t instanceof z.Element)return t.output;if("string"==typeof t){ee.ROOT_CONTAINER&&(t="body"===t?ee.ROOT_CONTAINER:`${ee.ROOT_CONTAINER} ${t}`);let e=document.querySelector(t);if(e)return e}C.warn(Q,"appendTo类型不支持",{appendTo:t,node:e})}}}function de(e,t){for(;e.length<t.length;)e.concat(e);return Math.max(...t.map(((t,i)=>le(t)+le(e[i]))))}function le(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function ce(e){let t=e.prev;for(;t;){if(t instanceof z.Element||t instanceof z.Comment||t instanceof z.Text||t instanceof z.Component||t instanceof z.Element)return t;t=t.prev}let i=e.parent;for(;i;){if(i instanceof z.Element)return;let e=ce(i);if(e)return e;i=i.parent}}class ue extends HTMLElement{root;constructor(){super(),this.root=this.attachShadow({mode:"open"})}}!customElements.get("joker-html-shadow")&&customElements.define("joker-html-shadow",ue);const fe={};function pe(e){for(let t in e)fe[t]=e[t]}const me="Global",ye="渲染核心";function Ee(t){try{return new Function(e,me,`return ${t};`)}catch{throw new Error("创建表达式运行方法时出现未知错误,表达式为"+t)}}class ve{ast;ob;parent;ext;ref="";watchers=[];node;isDestroy=!1;constructor(e,t,i,s){this.ast=e,this.ob=t,this.parent=i,this.ext=s}init(e){this.parser(e),this.afterParser()}beforeDestroy(e){}destroy(e){if(this.isDestroy=!0,this.clearWatchers(),this.parent.childrens&&this.node){(this.node instanceof z.Element||this.node instanceof z.Component)&&this.ext.removeRef(this.node);let t=()=>{this.parent&&this.node&&(this.beforeDestroy(e),this.destroyChildrens(e),this.node&&(this.ext.render?.removeNode(this.node),this.parent.childrens&&y(this.parent.childrens,this.node),this.notifyNodeWatcher("remove"),this.destroyOtherData()))};if(this.ext.nodeTransition(this.node,"leave",void 0,(()=>{t()})))return y(this.parent.childrens,this.node),void this.destroyChildrensWatcher(this.node);t()}else this.destroyOtherData()}destroyWathcers(){this.isDestroy=!0,this.clearWatchers(),this.destroyChildrensWatcher(this.node)}destroyOtherData(){this.node&&(this.node[z.PARSERKEY]=void 0),this.node=void 0,this.parent=void 0}destroyChildrens(e){for(;this.node?.childrens?.length;){let t=this.node.childrens[0];t[z.PARSERKEY]?t[z.PARSERKEY].destroy(e):y(this.node.childrens,t)}}destroyChildrensWatcher(e){if(e?.childrens?.length)for(let t of e?.childrens)t[z.PARSERKEY]&&(t[z.PARSERKEY].clearWatchers(),this.destroyChildrensWatcher(t))}appendNode(e){this.parent?.childrens&&this.node&&!this.isDestroy&&(this.node[z.PARSERKEY]=this,this.node instanceof z.Element&&this.ob[Je]&&(this.node.attributes["data-scoped-"+this.ob[Je]]=void 0),this.ext.render?.appendNode(this.node,e),void 0===e?this.parent.childrens.push(this.node):this.parent.childrens.splice(e,0,this.node),this.notifyNodeWatcher("append"))}afterParser(){this.ext.nodeTransition(this.node,"enter")}notifyNodeWatcher(e,t){this.ext.notifyNodeWatcher(this.ref,this.node,e,t)}runExpress(e,t){try{return Ee(e).call(t,t,fe)}catch(i){C.error(ye,"运行表达式出现错误:"+e,{ob:t}),console.error(i)}}runExpressWithWatcher(e,t,i,s){if(this.isDestroy)return;let n="string"==typeof e?Ee(e):e,r=new F((()=>{if(this.isDestroy||t[Be])return J;try{return n.call(t,t,fe)}catch(i){return C.error(ye,"运行表达式出现错误",{ob:t,express:e,node:this.node}),console.error(i),J}}),i,void 0,s);return this.addWatch(r),r.value===J?void 0:r.value}addWatch(e){!1===this.watchers.includes(e)&&this.watchers.push(e)}clearWatchers(){this.watchers.forEach((e=>{e.destroy()})),this.watchers.length=0}}class ge extends ve{parser(){this.node=new z.Text(this.ast.text,this.parent),this.appendNode()}}class be extends ve{parser(){this.node=new z.Comment(this.ast.text,this.parent),this.appendNode()}}class we extends ve{parser(){if(this.node=new z.Condition(this.ast.kind,this.parent),"else"!==this.ast.kind){v(this.ast.condition)&&C.error("条件命令",`当前条件命令${this.ast.kind}没有判断条件,请检查`);let e=this.runExpressWithWatcher(this.ast.condition,this.ob,(e=>{let t=!!e;if(this.node?.result!==t){if(this.node.result=t,!1===t&&this.node?.isShow)this.destroyChildrens(!0);else if(t&&!this.node?.isShow){let e=this.getElseNode();if(e&&e.isShow&&e.childrens?.length){let t=e[z.PARSERKEY];t&&t instanceof we&&t.renderConditionChildren()}}this.reloadAllCondition()}}));this.node.result=!!e}this.appendNode(),this.renderConditionChildren()}renderId;getElseNode(){let e=this.node?.next;for(;e&&e instanceof z.Condition&&"if"!==e.cmdName;){if("else"===e.cmdName)return e;e=e.next}}renderConditionChildren(){let e=!1;return this.getPrevIfResult()?e=!1:"else"===this.ast.kind?e=!0:(this.node.result=!!this.runExpress(this.ast.condition,this.ob),this.node.result&&(e=!0)),e!==this.node.isShow&&(this.node.isShow=e,this.destroyChildrens(!0),e&&this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob),!0)}getPrevIfResult(){if("if"===this.ast.kind)return!1;let e=this.node?.prev;for(;e&&e instanceof z.Condition;){if(e.result)return!0;if("if"===e.cmdName)break;e=e.prev}return!1}reloadAllCondition(){if(this.renderConditionChildren()){let e=this.node?.next;for(;e&&e instanceof z.Condition&&"if"!==e.cmdName;){let t=e[z.PARSERKEY];t&&t instanceof we&&t.renderConditionChildren(),e=e.next}}let e=this.node?.next;for(this.node?.result||this.destroyChildrens(!0);e&&e instanceof z.Condition&&"if"!==e.cmdName;){let t=e[z.PARSERKEY];t&&t instanceof we&&t.renderConditionChildren(),e=e.next}}}class Ne extends ve{parser(){this.node=new z.List(this.parent),this.appendNode(),this.renderChildrens()}renderChildrens(){switch(this.ast.keyType){case"condition":this.renderConditionChildrens();break;case"in":case"of":this.renderInOrOfChildrens()}}renderConditionChildrens(){let t=this.ast.param,i=Object.create(this.ob),s=!!this.runExpressWithWatcher(function(t,i,s){try{return new Function(e,`${e}.${t}=${i}; return ${s};`)}catch{throw new Error(`For循环命令,表达式运行依赖采集出现未知错误,其中letKey:${t},keyVal:${i},condition:${s}`)}}(t.letKey,t.defaultKeyVal,t.condition),i,(()=>{this.clearWatchers(),this.renderChildrens()}),!0),n=0;for(;s;){let e=Object.create(this.ob);W(e,t.letKey,i[t.letKey]);let r=n++;this.renderItem(e,r),this.runExpressWithWatcher((()=>i[t.letKey]),i,(async(i,s,n,o)=>{await Promise.resolve(),o.isDestroy||(e[t.letKey]=i,n||this.updateListItemOb(e,r))}),!0),this.runExpress(t.step,i),s=!!this.runExpress(t.condition,i)}this.destroyOldChildrens(n)}renderInOrOfChildrens(){let e=this.ast.param,t=this.runExpressWithWatcher(e.dataKey,this.ob,(()=>{this.clearWatchers(),this.renderChildrens()})),i=0;if(t&&(Array.isArray(t)||u(t)))for(let s in t){let n=Object.create(this.ob),r=Array.isArray(t)?Number(s):s;e.indexKey&&W(n,e.indexKey,r),e.itemKey&&W(n,e.itemKey,t[s]);let o=i++;this.renderItem(n,o,e.indexKey),e.itemKey&&this.runExpressWithWatcher((()=>t[r]),t,(async(i,s,a,h)=>{await Promise.resolve(),h.isDestroy||r in t&&(n[e.itemKey]=i,a||this.updateListItemOb(n,o))}),!0)}this.destroyOldChildrens(i)}findIndexByIndex(e,t,i){let s=-1;if(this.node)for(let n=t;n<this.node.childrens.length;n++)if(this.checkObEqual(e,this.node.childrens[n]?.ob,i?[i]:void 0)){s=n;break}return s}renderItem(e,t,i){if(!this.ast.childrens?.length||!this.node)return;let s=this.node.childrens?.[t];if(s){if(this.checkObEqual(e,s.ob,i?[i]:void 0))return void(i&&s.ob[i]!==e[i]&&(s.ob[i]=e[i]));let n=this.findIndexByIndex(e,t+1,i);if(n>-1){if(t+1===n)this.node.childrens?.[t]?.[z.PARSERKEY]?.destroy();else for(let e=0;e<n-t-1;e++)this.node.childrens?.[t]?.[z.PARSERKEY]?.destroy();return this.renderItem(e,t,i)}return new Re(this.ast,e,this.node,this.ext).init(t)}return new Re(this.ast,e,this.node,this.ext).init()}updateListItemOb(e,t){if(!this.ast.childrens?.length||!this.node)return;let i=this.node.childrens?.[t];c(e,((e,t)=>{i.ob[e]!==t&&(i.ob[e]=t)}))}destroyOldChildrens(e){if(this.node)for(;this.node.childrens.length>e;){let e=this.node.childrens.pop();if(!e)break;e[z.PARSERKEY]?.destroy(!1)}}checkObEqual(e,t,i){let s=!0;return void 0!==t&&(c(e,((e,n)=>{i?.includes(e)||t?.[e]===n||(s=!1)})),s)}}class Re extends ve{parser(e){this.node=new z.ListItem(this.ob,this.parent),this.appendNode(e),this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}}class $e extends ve{parser(){if(v(this.ast.cmdName))throw C.error("模板指令","解析AST转换VNode时发生错误,未找到指令名称",this.ast),new Error("解析AST转换VNode时发生错误,未找到指令名称");let e;if("Html"===this.ast.cmdName||"Text"===this.ast.cmdName?e=this.ast.param:this.ast.cmdName.startsWith(me+".")?e=`${this.ast.cmdName}(${this.ast.param})`:this.ast.cmdName in this.ob&&"function"==typeof this.ob[this.ast.cmdName]&&(e=`${t(this.ast.cmdName)}(${this.ast.param})`),e){let t=this.runExpressWithWatcher(`[${e}]`,this.ob,(e=>{this.changeValue(e?.[0])}));return t||=[],"Html"===this.ast.cmdName?this.node=new z.Html(Ce(t[0]),this.parent,t[1]):this.node=new z.Text(Ce(t[0]),this.parent),void this.appendNode()}throw new Error(`未找到命令:${this.ast.cmdName}`)}changeValue(e){this.node&&(this.node instanceof z.Html?this.node.html=Ce(e):this.node.text=Ce(e),this.ext.render?.updateNode(this.node))}}function Ce(e){return null==e||"function"==typeof e?"":e.toString()}const Ae="default";class xe extends ve{parser(){let e=this.transformParam();this.node=new z.RenderSection(e.id,this.parent),this.node.params=e.params,this.node.section??=this.ob.$sections?.[e.id],this.appendNode(),this.node.section&&(this.node.section.params?(this.node.ob=Object.create(this.node.section.ob||this.ob),this.node.section.params?.forEach(((e,t)=>{W(this.node.ob,e,this.node.params[t])}))):this.node.ob=this.node.section.ob||this.ob,(this.node.section.parser||this.ext).parserNodes(this.node.section.asts,this.node,this.node.ob))}transformParam(){if(this.ast.param){let e=this.runExpressWithWatcher(`[${this.ast.param}]`,this.ob,(e=>{let t=e?.[0]||Ae;if("string"==typeof t&&t!==this.node.id)throw new Error("section id 不可动态变更");this.node.params=e.slice(1),this.node?.ob&&this.node.section&&this.node.section.params?.forEach(((e,t)=>{this.node?.ob&&this.node.ob[e]!==this.node.params[t]&&(this.node.ob[e]=this.node.params[t])}))}),!0);return{id:e?.[0]||Ae,params:e?.slice(1)||[]}}return{id:Ae,params:[]}}}const Oe="组件解析";function Se(e,t){return!!t.components[e]||!!Ue(e)}class Pe extends ve{loadPromise;parser(){if(this.ast.node)return this.node=this.ast.node,this.node.parent=this.parent,this.initPropData(),void(this.node&&(this.appendNode(),this.node.component?.$mount(this.node)));this.node=new z.Component(this.parent),this.initPropData(),this.appendNode(),this.initEvent(),this.loadPromise=this.renderChildren(),this.ext.promiseQueue.add(this.loadPromise),this.loadPromise.finally((()=>{this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0)}))}get canReload(){return"tagName"in this.ast||"function"==typeof this.ast.component}reload(){this.canReload?(this.beforeDestroy(),this.renderChildren()):C.warn(Oe,"当前组件无法实现reload",this.node)}initPropData(){for(let e of this.ast.attributes)if("ref"!==e.name)if("keep-alive"===e.name&&"false"!==e.value&&(this.node.keepalive=!0),e.express){let t=this.runExpressWithWatcher(e.express,this.ob,(t=>{this.node.propValues[e.name]=t,this.notifyNodeWatcher("update",e.name)}),!0);this.node.propValues[e.name]=t}else this.node.propValues[e.name]=e.value;else{if(v(e.value)){C.warn(Oe,"元素的ref值不可以为空");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}this.node.propValues=_(this.node.propValues)}initEvent(){this.ast.events.forEach((e=>{let t=e.functionName?this.ob[e.functionName]:void 0;void 0===e.functionName?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:b}]):t&&"function"==typeof t?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:i=>{let s=[];e.functionParam&&(s=this.runExpress(`[${e.functionParam}]`,this.ob)),t.call(this.ext.ob,i,...s)}}]):C.error(Oe,`${"tagName"in this.ast?this.ast.tagName:""}元素中${e.name}事件所指定的回调(${e.functionName})方法未找到,请检查`)}))}async renderChildren(){return new Promise((async(e,t)=>{if("tagName"in this.ast){let e=this.ob.components[this.ast.tagName]||Ue(this.ast.tagName);if(void 0===e)return void C.error(Oe,`渲染组件失败,未找到名称为'${this.ast.tagName}'的私有组件/全局组件`);if(Fe in e||(e=(await e()).default),!this.node)return;{let t=this.getSections();this.node.name=this.ast.tagName,this.node.component=new e(this.node?.propValues,t,this.node?.keepalive)}}else if("function"==typeof this.ast.component){let e=this.getSections();this.node.component=new this.ast.component(this.node?.propValues,e,this.node?.keepalive)}else this.node.component=this.ast.component;if(!this.node)return;!this.node.name&&"name"in this.node.component&&this.node.component.name&&"string"==typeof this.node.component.name&&(this.node.name=this.node.component.name);let i=this,s=function(){i.loadPromise&&e(void 0)};if(this.node.component.$on("mounted",(()=>{this.node?.component.$off("beforeDestroy",s),e(void 0)})),this.node.component.$on("beforeDestroy",s),this.node.component.$mount(this.node),!this.node)return;let n=this.node?.component;n.isKeepAlive&&(this.ast.node=this.node)}))}getSections(){let t={},s=[];return this.ast.childrens.forEach((t=>{if(t.type===i.NodeType.COMMAND&&"if"===t.cmdName&&t.childrens){let n=t,r=t.childrens.some((e=>e.type===i.NodeType.COMMAND&&"section"===e.cmdName)),o=n.condition.startsWith(e+".$sections");if(o){return this.runExpress(n.condition,this.ob)?void s.push(...t.childrens):void 0}if(r&&"if"===n.kind&&!o)return void C.warn(Oe,"在解析section时,发现该section包裹在一个条件语句中,该条件语句仅支持以$sections进行if判断,已作排出")}s.push(t)})),s.forEach((e=>{if(e.type===i.NodeType.COMMAND&&"section"===e.cmdName){let i=e,s=i.id||Ae;/^(\'|\")(.*?)((\'|\"))$/.test(s)&&(s=s.slice(1,-1)),t[s]=t[s]||{asts:[],ob:this.ob,params:i.paramKeys,parser:this.ext},t[s].asts.push(...e.childrens||[])}else t[Ae]=t[Ae]||{asts:[],ob:this.ob,parser:this.ext},t[Ae].asts.push(e)})),t}beforeDestroy(e){this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0),!0===e&&this.node?.component?.isKeepAlive?this.node?.component?.$destroy():(this.node?.component?.$destroy(!0),this.ast.node=void 0)}}class De extends ve{parser(){this.node=new z.Element(this.ast.tagName,this.parent),this.initAttributes(),this.initEvents(),this.appendNode(),this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}initAttributes(){for(let e of this.ast.attributes)if("ref"!==e.name)if(e.express){let t=t=>{this.node&&(this.node.attributes[e.name]=this.transformAttrVal(t),this.ext.render?.updateNode(this.node,e.name),this.notifyNodeWatcher("update",e.name))},i=this.runExpressWithWatcher(e.express,this.ob,(e=>{t(e)}));this.node.attributes[e.name]=this.transformAttrVal(i)}else this.node.attributes[e.name]=e.value;else{if(v(e.value)){C.warn("Element解析","元素的ref值不可以为空");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}}initEvents(){for(let e of this.ast.events){let t=e.functionName?this.ob[e.functionName]:void 0;if(!(void 0===e.functionName||t&&"function"==typeof t))throw new Error(`${this.ast.tagName}元素中${e.name}事件所指定的回调(${e.functionName})方法未找到,请检查`);this.node?.events.push([e.name,{modifiers:e.modifiers,callBack:i=>{if(void 0===t)return;let s=[];e.functionParam&&(s=this.runExpress(`[${e.functionParam}]`,this.ob)),t&&t.call(this.ext.ob,i,...s)}}])}}transformAttrVal(e){return void 0!==e&&("string"==typeof e||"boolean"==typeof e||"function"!=typeof e&&Object.prototype.toString()?e:void 0)}}class Te{asts;ob;root=new z.Root;refs={};sleeped=!1;promiseQueue=new Set;nodeWatcherEvents={};render;constructor(e,t,i){this.asts=e,this.ob=t,this.root.component=t,this.render=G.get(ee.IRENDERIOCTAGID)??new ee.DomRender,i&&i instanceof z.Node&&(this.root.parent=i,i.childrens??=[],i.childrens.push(this.root))}parser(){this.parserNodes(this.asts,this.root)}mount(e){this.sleeped&&this.weakup(),this.render?.mount(e)}parserNodes(e,t,s){if(0!==this.asts.length)for(let n of e)if(n.type===i.NodeType.TEXT)new ge(n,s??this.ob,t,this).init();else if(n.type===i.NodeType.COMMENT)new be(n,s??this.ob,t,this).init();else if(n.type===i.NodeType.COMPONENT)new Pe(n,s??this.ob,t,this).init();else if(n.type===i.NodeType.ELEMENT){let e=n;Se(e.tagName,s??this.ob)?new Pe(e,s??this.ob,t,this).init():new De(e,s??this.ob,t,this).init()}else if(n.type===i.NodeType.COMMAND){let e=n;switch(e.cmdName){case"if":case"elseif":case"else":new we(e,s??this.ob,t,this).init();break;case"for":new Ne(e,s??this.ob,t,this).init();break;case"RenderSection":new xe(e,s??this.ob,t,this).init();break;case"section":break;default:new $e(e,s??this.ob,t,this).init()}}}addRef(e,t){this.refs[e]=this.refs[e]||[],this.refs[e].push(t),t.ref=e}removeRef(e){for(let t in this.refs)this.refs[t].includes(e)&&y(this.refs[t],e)}addNodeWatcher(e,t){this.nodeWatcherEvents[e]=this.nodeWatcherEvents[e]||[],this.nodeWatcherEvents[e].push(t)}removeNodeWatcher(e,t){y(this.nodeWatcherEvents[e]||[],t)}notifyNodeWatcher(e,t,i,s){this.nodeWatcherEvents[e]?.forEach((e=>{e(t,i,s)}))}sleep(e){let t=e||this.root;t.childrens?.forEach((e=>{let t=()=>{e.childrens&&this.sleep(e),e.sleep=!0,this.render?.removeNode(e,!0)};this.nodeTransition(e,"leave",void 0,(()=>{t()}))||t()})),void 0===e&&(this.sleeped=!0)}weakup(e){let t=e||this.root;t.childrens?.forEach((e=>{e.sleep=!1,this.render?.appendNode(e),e.childrens&&this.weakup(e),this.nodeTransition(e,"enter")})),void 0===e&&(this.sleeped=!1)}destroy(e){for(;this.root.childrens.length;){let t=this.root.childrens[0];t[z.PARSERKEY]?t[z.PARSERKEY].destroy(e):y(this.root.childrens,t)}this.render.destroy(),this.refs={},this.root.childrens.length=0,this.nodeWatcherEvents={},this.asts.length=0}destroyWathcers(){for(let e of this.root.childrens)e[z.PARSERKEY]&&e[z.PARSERKEY].destroyWathcers()}reSetAsts(e,t){this.destroy(t),this.render=G.get(ee.IRENDERIOCTAGID)??new ee.DomRender,this.asts=e}nodeTransition(e,t,i,s,n){if(e&&e.parent?.childrens&&(e instanceof z.Element||e instanceof z.Component)){let r=function(e){if(e instanceof z.Element||e instanceof z.Component){let t=e instanceof z.Element?e.attributes:e.propValues;return{name:t["transition-name"],type:t["transition-type"]}}}(e);if(i??=r?.name,n??=r?.type,!i)return!1;let o=ke(e);if(o)return"enter"===t?this.render.elementToEnter(o,i,n,(()=>{let t=e[z.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-enter"),s?.()})):this.render.elementToLeave(o,i,n,(()=>{let t=e[z.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-leave"),s?.()})),!0;C.warn("渲染核心","在执行node动画时,发现数据不完备,请检查")}return!1}}function ke(e){if(e instanceof z.Element)return e;if(e.childrens&&e.childrens.length)for(let t of e.childrens)return t instanceof z.Element?t:ke(t)}function Ke(e,t,i){if(void 0===t)return;let s=Array.isArray(i)?i:[i];for(let e of s){if(e===Array&&t instanceof Array)return t;if(typeof t===e.name.toLocaleLowerCase())return t}switch(s[0]){case Number:let e=Number(t);if(!1===isNaN(e))return e;break;case String:return String(t)}throw new Error(`props中${e.toString()}的类型不符合约束类型`)}function _e(e,t,i){let s,n,r;if("symbol"!=typeof t&&(s=g(t)),t in e?n=e[t]:s&&(n=e[s]),i&&(t in i?r=i[t]:s&&s in i&&(r=i[s])),void 0!==r){if(u(r)&&("type"in r||"required"in r||"default"in r||"validate"in r)){let e=r;if(e.required&&void 0===n)throw new Error(`props中key:${t.toString()}是必须项,请检查`);if(e.type&&(n=Ke(t,n,e.type)),e.validate&&!1===e.validate(n))throw new Error(`props中key${t.toString()}的值校验错误`);n=n??e.default}else n=We(r)?Ke(t,n,r):n??r;return n}return n}function We(e){return!![String,Array,Number,Object,Function,Boolean].includes(e)||e instanceof Array&&We(e[0])}function Ie(e,t){if(!e.constructor)return!1;let i=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);return i&&i.get}const Le="组件",Ve=Symbol.for("JOKER_PROPS_DATA_KEY"),Me=Symbol.for("JOKER_PROPS_DATA_PROXY"),je=Symbol.for("JOKER_PRIVATE_WATCHERS"),Ye=Symbol.for("JOKER_EVENT_DATA_KEY"),Be=Symbol.for("JOKER_IS_DESTROY"),He=Symbol.for("JOKER_PARSER_TEMPLATE_TARGET"),Je=Symbol.for("JOKER_SCOPE_ID"),Fe=Symbol.for("JOKER_COMPONENT_TAG"),Ge=Symbol();let qe=["constructor","$mount","$nodeTransition","$destroy","$getRef","$getRefs","$syncProp","$watchNode","$watch","$on","$off","$trigger","$render","created","mounted","beforeDestroy","sleeped","wakeup","destroyed"];class ze{$sections;isKeepAlive;static[Fe]=!0;[Je];model={};template;$root;isSleeped=!1;components={};propsOption;[Ve]={};[He];[Me];[je]=[];[Ye]=new Map;[Be]=!1;[Ge]=!1;constructor(e,t={},i){this.$sections=t,this.isKeepAlive=i,this[Ve]=e||{}}get props(){if(void 0===this[Me]){let e=this;this[Me]=new Proxy(e[Ve],{get:(t,i)=>_e(e[Ve],i,e.propsOption),set(){throw new Error("props 参数不允许变更,只允许单向数据传递")}})}return this[Me]}$mount(e){if(!1===this[Ge]){let e=()=>{let e=[],t=Object.getPrototypeOf(this);for(;null!==t&&t!==Object.prototype;)Object.getOwnPropertyNames(t).forEach((i=>{!1!==qe.includes(i)||Ie(t,i)||"function"!=typeof t[i]||t[i].prototype?.hasOwnProperty("constructor")||e.push(i)})),t=Object.getPrototypeOf(t);return e};for(let t of e())this[t]=this[t].bind(this);this[Ge]=!0}if(this.$root=e,this.isKeepAlive&&this.isSleeped)return this.isSleeped=!1,this[He]&&this.$root?(this[He].mount(this.$root),this.wakeup(),this.$trigger("wakeup"),this.$rootVNode&&et(this.$rootVNode),this):(C.error(Le,"当前组件在唤醒时,发现渲染处理程序已被销毁,无法进行唤醒操作",[this,this.$root]),this);this.isSleeped=!1,this.model=_(this.model);let t=this.created(),i=async()=>{this.$trigger("created"),this.template&&this.$render(),await this.$nextUpdatedRender(),this[Be]||(await this.mounted(),this[Be]||this.$trigger("mounted"))};return t&&t instanceof Promise?t.then((()=>{this[Be]||i()})):i(),this}$nextUpdatedRender(e){if(this[Be])return;let t=[...this[He]?.promiseQueue||[]],i=this.$rootVNode?.find((e=>e instanceof z.Component));if(i?.forEach((e=>{e?.component&&t.push(...e.component[He]?.promiseQueue||[])})),t.length)return Promise.all(t).finally((()=>{this[Be]||e?.()}));this[Be]||e?.()}$nodeTransition(e,t,i,s,n){if("string"==typeof e){let t=this.$getRef(e);if(!t)return void C.error(Le,`执行节点动画是找不到ref=${e}的节点`);e=t}this[He]?.nodeTransition(e,t,i,s,n)}$destroy(e){if(!e&&this.isKeepAlive)return this[He]?.sleep(),this.isSleeped=!0,this.sleeped(),this.$trigger("sleeped"),void(this.$rootVNode&&Ze(this.$rootVNode));this[Be]=!0;for(let e of this[je])e.destroy();this[je].length=0,this[He]?.destroyWathcers(),this.beforeDestroy(),this.$trigger("beforeDestroy"),this[He]?.destroy(),this[He]=void 0,this.template&&Array.isArray(this.template)&&(this.template.length=0),this.$trigger("destroy"),this[Ye].clear(),this.$root=void 0,this.isSleeped=!1,this.$sections={},this[Me]=void 0,this[Ve]={},this.destroyed()}get $refs(){return this[He]?.refs||{}}$getRef(e){return this.$refs[e]?.[0]}$getRefs(e){return this.$refs[e]}$syncProp(e,t,i){"function"==typeof t&&(i=t,t=void 0),t??=e,i??=e=>e,this.model[t]=i(this.props[e]),this.$watch((()=>this.props[e]),(()=>{this.model[t]=i?.(this.props[e])}))}get $rootVNode(){return this[He]?.root}$watchNode(e,t){if(this[He])return this[He]?.addNodeWatcher(e,t),()=>{this[He]?.removeNodeWatcher(e,t)};C.warn(Le,"该组件还未挂载,不可以进行节点观察监听")}$watch(e,t,i){let s=new F((()=>{if(this[Be]){for(let e of this[je])e.destroy();return J}return e()}),((e,i)=>{this[Be]||t(e,i)}),void 0,i);return this[je].push(s),[s.value,()=>{s.destroy(),y(this[je],s)}]}$on(e,t){let i=this[Ye].get(e);void 0===i&&(i=new Set,this[Ye].set(e,i)),!1===i?.has(t)&&i.add(t)}$off(e,t){let i=this[Ye].get(e);i&&(t?i.delete(t):i.clear())}$trigger(e,t,i){if(!this.$root)return;let s={eventName:e,stopPropagation:i?.stopPropagation??(()=>{}),preventDefault:i?.preventDefault??(()=>{}),data:t,target:i?.target??this.$rootVNode,event:i?.event};if(this.$rootVNode&&this.$rootVNode.parent&&this.$rootVNode.parent instanceof z.Component&&!1===this[He]?.render.triggerEvent(this.$rootVNode.parent,e,s))return;let n=this[Ye].get(e);n?.size&&[...n].forEach((e=>{e(s)}));let r=this[Ye].get("*");r?.size&&[...r].forEach((e=>{e(s)}))}$render(e,t){e??=this.template,this.template="function"==typeof e?e(s):e,this.$root&&(this.template??=[],this[He]?.reSetAsts(this.template,t),this[He]??=new Te(this.template,this,this.$root),this[He].parser(),this.$root&&this[He].mount(this.$root))}created(){}mounted(){}beforeDestroy(){}sleeped(){}wakeup(){}destroyed(){}}const Qe={};function Xe(e,t){if("string"==typeof e)t&&(Qe[e]=t);else for(let t in e)Qe[t]=e[t]}function Ue(e){return Qe[e]}function Ze(e){e.childrens?.forEach((e=>{e instanceof z.Component&&e.component?.sleeped(),Ze(e)}))}function et(e){e.childrens?.forEach((e=>{e instanceof z.Component&&e.component?.wakeup(),et(e)}))}class tt extends ze{template=[];cache=new Map;async mounted(){this.$watch((()=>this.props.name),(async e=>{this.$render([],!0),await Promise.resolve(),this.$root&&this.loadComponent(e)})),await this.loadComponent(this.props.name)}propsVaule;created(){this.initProps()}initProps(){let e={};this.props.props||(Object.keys(this.props).forEach((t=>{!1!==this.filterProps(t)&&(e[t]=this.props[t],this.$watch((()=>this.props[t]),(()=>{this.propsVaule[t]=this.props[t]})))})),this.propsVaule=_(e))}filterProps(e){if("string"!=typeof e)return!1;let t=g(e);return"transition-name"!==t&&"name"!==t&&"keep-alive"!==t&&"ref"!==t&&void 0}async loadComponent(e){if(!e)return void this.$render([],this.isKeepAlive);let t;if(this.isKeepAlive){let t=this.cache.get(e);if(t)return void this.$render([n(t,{"transition-name":this.props["transition-name"]})],!0)}let i=this.$rootVNode?.parent?.[z.PARSERKEY]?.ob.components,s=i?.[e];void 0===s&&(s=Ue(e)),s?(Fe in s||(s=(await s()).default),t=new s(this.props.props||this.propsVaule,this.$sections,this.isKeepAlive),t.$on("*",(e=>{this.$trigger(e.eventName,e.data,e)})),this.isKeepAlive&&this.cache.set(e,t),this.$render([n(t,{"transition-name":this.props["transition-name"]})],this.isKeepAlive)):C.warn("component",`未找到${e}的组件`)}beforeDestroy(){this.removeCache()}removeCache(e){if(e){let t=this.cache.get(e);this.cache.delete(e),t&&t.$destroy(!0)}else this.cache.forEach((e=>{e.$destroy(!0)})),this.cache.clear()}}class it extends ze{template=function(){return[r("RenderSection")]};async mounted(){await this.$nextUpdatedRender()}}Xe({template:it,component:tt});class st{eventDatas=new Map;on(e,t){let i=this.eventDatas.get(e);void 0===i&&(i=[],this.eventDatas.set(e,i));let s={callBack:t};return i.push(s),()=>{i&&y(i,s)}}once(e,t){let i=this.eventDatas.get(e);void 0===i&&(i=[],this.eventDatas.set(e,i));let s={callBack:t,once:!0};return i.push(s),()=>{i&&y(i,s)}}off(e,t){if(void 0!==e)if(t){let i=this.eventDatas.get(e),s=i?.find((e=>e.callBack===t));s&&y(i,s)}else this.eventDatas.delete(e);else this.eventDatas.clear()}async trigger(e,t){let i=[...this.eventDatas.get(e)||[]];if(i.push(...this.eventDatas.get("*")||[]),i&&i.length){let s=0,n=0,r=!1;for(;i[s];){let o=i[s],a=await o.callBack({stopPropagation:()=>r=!0,callTimes:n,eventName:e},t);if(o.once?y(i,o):s++,!1===a||r)return!1}}}}export{J as BREAK_WATCH_UPDATE,ze as Component,tt as ComponentContainer,O as Dep,st as EventBus,G as IContainer,Be as IS_DESTROY,Fe as JOKER_COMPONENT_TAG,q as JOKER_VNODE_TAG,S as OBJECTPROXY_DEPID,He as PARSER_TEMPLATE_TARGET,Te as ParserTemplate,ee as Render,Je as SCOPE_ID,L as ShallowObserver,it as Template,z as VNode,F as Watcher,fe as __GLONAL_FUNTIONS__,d as __JOKER_HMR_RUNTIME,Y as combinedReply,W as defineObserverProperty,Ue as getGlobalComponent,B as isObserverData,_ as observer,Xe as registerGlobalComponent,pe as registerGlobalFunction};
|
|
1
|
+
import{EXPRESSHANDLERTAG as e,createFuntionBody as t,AST as i,RENDER_HANDLER as n,createComponent as s,createCommand as r}from"@joker.front/ast";export{AST,EXPRESSHANDLERTAG,RENDER_HANDLER,createCodeFunction,createCommand,createComment,createComponent,createElement,createFuntionBody,createText}from"@joker.front/ast";const o=new Map,a=new Map,h=new Map;let d={recordRender:(e,t)=>{a.set(e,t)},recordComponent:(e,t)=>{h.set(e,t)},record:(e,t)=>{void 0===o.get(e)&&o.set(e,new Set),o.get(e).add(t),t.$on("destroy",(()=>{o.get(e)?.delete(t)}))},reload:(e,t)=>{let i=h.get(e);if(!i)return;i.component=t;let n=o.get(e);if(!n)return;let s=Array.from(n);n.clear(),s.forEach((e=>{if(e.$root){if(!e.$rootVNode?.parent)return window.onbeforeunload=null,void location.reload();{let t=e.$rootVNode.parent;if(!(t instanceof z.Component&&t[z.PARSERKEY]&&t[z.PARSERKEY].canReload))return window.onbeforeunload=null,void location.reload();t[z.PARSERKEY].reload()}}}))},rerender:(e,t)=>{let i=a.get(e);i&&(i.render=t),o.get(e)?.forEach((e=>{e.$render(t)}))}};function l(e){return null!==e&&"object"==typeof e}function c(e,t){Object.getOwnPropertyNames(e).forEach((i=>{t(i,e[i])}))}function u(e){return"[object Object]"===Object.prototype.toString.call(e)}function f(e){if(null===e)return e;if("object"!=typeof e)return e;let t;t=Array.isArray(e)?[]:{};let i=Object.keys(e);for(let n of i){let i=e[n];t[n]="object"==typeof i?f(i):i}return t}function p(e,t,i){return Array.isArray(e)&&Array.isArray(t)?function(e,t,i){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(i){if(e[n]!==t[n])return!1}else if(!1===m(e[n],t[n],i))return!1;return!0}(e,t,i):m(e,t,i)}function m(e,t,i){if(e===t)return!0;let n=l(e),s=l(t);if(n&&s){if(u(e)&&u(t)){let n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;if(i){for(let i of n)if(e[i]!==t[i])return!1;return!0}return JSON.stringify(e)===JSON.stringify(t)}return e===t}return!n&&!s&&String(e)===String(t)}function y(e,t){let i=e.indexOf(t);return i>-1&&e.splice(i,1),e}function E(e,t){let i=e.findIndex((e=>t(e)));return i>-1&&e.splice(i,1),e}function v(e){return!e||""===e.trim()}function g(e,t="-"){return(e=e||"").split(/(?=[A-Z])/).map((e=>e.toLowerCase())).join(t)}let b=(...e)=>{},w="warn";const N=["silent","error","warn","info"];function R(){let e=new Date;function t(e,t=2){return e.toString().padStart(t,"0")}return t(e.getHours())+":"+t(e.getMinutes())+":"+t(e.getSeconds())+":"+t(e.getMilliseconds(),3)}function $(e,t,i,n){N.indexOf(e)<=N.indexOf(w)&&(void 0===n?console[e](`${R()} [${t}]:`,i):console[e](`${R()} [${t}]:`,i,n))}let C={info:function(e,t,i){$("info",e,t,i)},warn:function(e,t,i){$("warn",e,t,i)},error:function(e,t,i){$("error",e,t,i)},setLoggerLeve:function(e){w=e}};const A={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"',"#39":"'"};function x(e){return e.replace(/&(lt|gt|nbsp|amp|quot|#39);/gi,((e,t)=>A[t]||""))}class O{static target;watchers=new Map;depend(e){O.target?.addDep(this,e)}addWatcher(e,t){let i=this.watchers.get(e)||[];i.push(t),this.watchers.set(e,i)}removeWatcher(e,t){let i=this.watchers.get(e);i&&y(i,t)}notify(e){let t=this.watchers.get(e);if(t){E(t,(e=>e.isDestroy)),[...t].forEach((e=>{!1===e.isDestroy&&e.update()}))}}}const S=Symbol.for("__JOKER_OBJECT_PROXY_DEP_ID__"),P=Symbol.for("__JOKER_OBJECT_PROXY_DATA_KEY__"),D=Symbol.for("__JOKER_OBJECTPROXY_DEPLEVE_ID__");function T(e){try{return null!=e&&l(e)&&e!==window.parent&&e instanceof Window==!1&&e instanceof F==!1&&e instanceof ze==!1&&e instanceof Te==!1&&(Array.isArray(e)||u(e)||e instanceof Set||e instanceof Map)&&!Object.isFrozen(e)&&!(e instanceof Element)&&!(q in e)&&!(I in e)&&!(Fe in e)}catch{return!1}}function k(e){if(K(e))return e;if(e&&e.hasOwnProperty(P)){let t=Reflect.get(e,P);if(t)return t}let t=new O,i=!0,n=new Proxy(e,{get(e,i,n){if(e instanceof Set||e instanceof Map){if("add"===i){let n=Reflect.get(e,i);return i=>{T(i)&&(i=_(i));let s=n.call(e,i);return j(t,"size"),j(t,D),s}}if("set"===i){let n=Reflect.get(e,i);return(i,s)=>{T(s)&&(s=_(s));let r=n.call(e,i,s);return j(t,"size"),j(t,D),r}}if("delete"===i||"clear"===i){let n=Reflect.get(e,i);return s=>{let r=n.call(e,s);return("clear"===i||r)&&(j(t,"size"),j(t,D)),r}}let n=Reflect.get(e,i);if("function"==typeof n)return n.bind(e)}if(i===P)return;if(i===S)return t;if(i===D)return;let s=Reflect.get(e,i);return i===Symbol.toStringTag||!1===function(e,t){return t in e}(e,i)&&"length"!==i&&"size"!==i||(t.depend(i),T(s)&&K(s)?.depend(D)),s},set(e,n,s){if(i)return Reflect.set(e,n,s),!0;T(s)&&(s=_(s));let r=!1===function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,n),o=Reflect.get(e,n)!==s;return Reflect.set(e,n,s),(o||"length"===n&&Array.isArray(e))&&j(t,n),Array.isArray(e)?"length"===n&&j(t,D):r&&j(t,D),!0},deleteProperty:(e,i)=>(Reflect.deleteProperty(e,i),!1===Array.isArray(e)&&j(t,D),!0)});var s,r,o,a;s=e,r=P,o=n,a=!1,Object.defineProperty(s,r,{value:o,enumerable:a,writable:!0,configurable:!0});for(let t in e){let i=e[t];T(i)&&!K(i)&&(n[t]=k(e[t]))}return i=!1,n}function K(e){if(l(e))return Reflect.get(e,S)}function _(e,t=!1){if(!1===T(e))throw new Error("当前传入的数据不是正确的数据类型,必须是数组或者对象");return k(t?f(e):e)}function W(e,t,i){let n=i;T(i)&&(n=_(i));let s=new O;Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:()=>(s.depend(t),K(n)?.depend(D),n),set:e=>{e!==n&&(T(e)&&(e=_(e)),n=e,j(s,t))}})}const I=Symbol.for("JOKER_SHALLOW_OBSERVER");class L{data;[I]=!0;dep=new O;constructor(e){this.data=e}isChanged=!1;get value(){return this.dep.depend(D),this.data}set value(e){!1===Object.is(e,this.data)&&(this.isChanged=!0,this.data=e,j(this.dep,D))}}let V=!1,M=new Map;function j(e,t){if(!1===V)e.notify(t);else{let i=M.get(e);void 0===i&&(i=[],M.set(e,i)),!1===i.includes(t)&&i.push(t)}}function Y(e){V=!0;try{e()}catch(e){return V=!1,M.clear(),void C.error("数据劫持","数据劫持组合回复在做变更采集时,遇到了阻塞错误,不做响应,请检查",e)}V=!1,function(e){let t=[],i=[];e.forEach(((e,i)=>{e.forEach((e=>{t.push(...i.watchers.get(e)||[])}))})),t.forEach((e=>{i.includes(e)||(!1===e.isDestroy&&e.update(),i.push(e))}))}(M),M.clear()}function B(e){return void 0!==K(e)}const H="数据观察",J=Symbol.for("JOKER_BREAK_WATCH_UPDATE");class F{ob;updateCallBack;forceCallBack;getter;value;isDestroy=!1;updating=!1;runRelations=new Map;relations=new Map;constructor(e,t,i,n){if(this.ob=e,this.updateCallBack=t,this.forceCallBack=n,void 0===e)throw new Error("无法对underfind进行变更观察");if(void 0===i)this.getter=e=>e;else if("function"==typeof i)this.getter=i;else{let e=function(e){if(/[^\w.$]/.test(e))return;let t=e.split(".");return function(e){let i=e;return t.forEach((e=>{i&&(i=i[e])})),i}}(i);if(void 0===e)throw new Error(i+"解析失败,无法明确读取表达式,请检查expOrFn参数,或采用function模式");this.getter=e}void 0===this.getter&&C.error(H,"getter创建失败",arguments),this.value=this.getValue()}getValue(){if(void 0===this.getter)return;O.target=this;let e,t="function"==typeof this.ob?this.ob():this.ob;try{e=this.getter.call(t,t)}catch(e){throw C.error(H,`获取值失败,执行方法:${this.getter.toString()}`),e}return O.target=void 0,this.clearnDeps(),e}addDep(e,t){let i=this.runRelations.get(e);if(void 0===i||!1===i.includes(t)){i=i||[],i.push(t),this.runRelations.set(e,i);let n=this.relations.get(e);void 0!==n&&!1!==n.includes(t)||e.addWatcher(t,this)}}update(){if(this.updating)return;let e=this.getValue();if(e===J)return;let t=this.value;if(this.forceCallBack||e!==t||l(e)){this.value=e;let i=e!==t&&p(e,t,!0);if(i&&!this.forceCallBack)return;this.updating=!0;try{this.updateCallBack(e,t,i,this)}catch(e){throw e}finally{this.updating=!1}}}destroy(){this.relations.forEach(((e,t)=>{for(let i of e)t.removeWatcher(i,this)})),this.isDestroy=!0,this.relations.clear(),this.runRelations.clear(),this.ob=void 0,this.value=void 0,this.getter=void 0}clearnDeps(){this.relations.forEach(((e,t)=>{let i=this.runRelations.get(t);for(let n of e)i?!1===i.includes(n)&&t.removeWatcher(n,this):t.removeWatcher(n,this)})),this.relations.clear(),this.relations=this.runRelations,this.runRelations=new Map}}var G;!function(e){let t=new Map;e.bind=function(e){return{to:i=>{if(t.has(e))throw new Error(`TagId:${e.toString()}已注入实现类,请勿重复注入。`);t.set(e,i)}}},e.get=function(e,...i){let n=t.get(e);if(n)return new n(...i)}}(G||(G={}));const q=Symbol.for("JOKER_VNODE_TAG");var z;!function(e){e.PARSERKEY=Symbol.for("JOKER_PARSER_KEY");class t{parent;[q]=!0;static;output;[e.PARSERKEY];childrens;ref;sleep=!1;constructor(e){this.parent=e}get prev(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)-1]}get next(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)+1]}closest(e,t){if(!0===e(this))return this;let i=this.parent;for(;i;){if(!0===e(i))return i;if(!0===t?.(i))break;i=i.parent}}find(e,t,i,n,s){let r=s??[];if(n??=this.childrens,n)for(let s of n){(!0!==e(s)||(r.push(s),i))&&(!0!==t?.(s)&&s.childrens&&this.find(e,t,i,s.childrens,r))}return r}contains(e,t){if(t??=this.childrens,t)for(let i of t){if(!0===e(i))return!0;if(i.childrens&&i.childrens.length&&this.contains(e,i.childrens))return!0}return!1}first(e,t){if(t??=this.childrens,t)for(let i of t){if(!0===e(i))return i;if(i.childrens&&i.childrens.length){let t=this.first(e,i.childrens);if(t)return t}}}}e.Node=t;e.Root=class extends t{childrens=[];component;constructor(){super()}};e.Text=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Html=class extends t{html;notShadow;static=!0;constructor(e,t,i){super(t),this.html=e,this.notShadow=i}};e.Comment=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Element=class extends t{tagName;static=!0;attributes={};childrens=[];events=[];_assistEventCache;constructor(e,t){super(t),this.tagName=e}};e.Component=class extends t{name;component;events=[];propValues={};keepalive;get firstElement(){if(this.childrens){let t=i=>{for(let n of i){if(n instanceof e.Element)return n;if(n.childrens){let e=t(n.childrens);if(e)return e}}};return t(this.childrens)}}get rootElements(){if(this.childrens){let t=[],i=n=>{for(let s of n)s instanceof e.Element||s instanceof e.Html?t.push(s):s.childrens&&i(s.childrens)};return i(this.childrens),t}return[]}};e.Condition=class extends t{cmdName;result=!1;childrens=[];isShow=!1;constructor(e,t){super(t),this.cmdName=e}};e.List=class extends t{childrens=[]};e.ListItem=class extends t{ob;childrens=[];constructor(e,t){super(t),this.ob=e}};e.RenderSection=class extends t{id="unknown";params=[];section;childrens=[];ob;constructor(e,t){super(t),"string"==typeof e?this.id=e:this.section=e}}}(z||(z={}));const Q="DOM渲染",X=["script","style","textarea","pre"];let U=0;const Z=["svg","defs","use","rect","circle","ellipse","line","polyline","polygon","path","text","g"];var ee;function te(e,t,i){return`${e}-${t}-${i}`}function ie(e,t,i,n){e._assistEventCache??=[],e._assistEventCache.push([t,i]),document.body.addEventListener(t,i,n)}function ne(e,t,i){e._assistEventCache&&t&&i?(E(e._assistEventCache,(e=>e[0]===t&&e[1]===i)),document.body.removeEventListener(t,i)):(e._assistEventCache?.forEach((e=>{document.body.removeEventListener(e[0],e[1])})),e._assistEventCache&&(e._assistEventCache.length=0),e._assistEventCache=void 0)}!function(e){e.IRENDERIOCTAGID=Symbol.for("JOKER_IRENDERIOC_TAGID"),e.ROOT_CONTAINER="";e.DomRender=class{elements;constructor(){this.elements=document.createDocumentFragment()}mount(e){if(e instanceof Element)e.appendChild(this.elements);else if(e instanceof z.Component)if(e.parent)if(e.output){let t=e.output,i=he(e)||t.parentNode;i&&i.insertBefore(this.elements,t)}else C.error(Q,"组件挂载渲染时发现该节点未定义DOM定位节点",e);else C.error(Q,"mount子组件时,发现该组件无父级",e);else C.error(Q,"mount只支持挂载到Element或VNode.Node类型数据中",e)}appendNode(e,t){if(this.renderNode(e),e.output){let i=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];for(let n of i)this.appendNodeChildren(e,n,e.parent,t)}else C.error(Q,"未找自身节点的el属性,无法进行dom挂载",e)}updateNode(e,t){if(e instanceof z.Element)for(let t in e.attributes){let i=e.attributes[t];this.setAttribute(e.output,t,i)}else e instanceof z.Text?e.parent&&e.parent instanceof z.Element&&X.includes(e.parent.tagName)?(this.removeNode(e),this.appendNode(e)):e.output.textContent=x(e.text||""):e instanceof z.Html?e.notShadow?e.output.innerHTML=e.html:e.output.root.innerHTML=e.html:C.error(Q,`该节点不支持${t}的更新`,e)}removeNode(e,t){let i=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];i?.forEach((e=>{e?.remove()})),t||(e instanceof z.Element&&ne(e),e.output=void 0)}destroy(){this.elements=void 0}elementToEnter(e,t,i,n){e.output&&this.transitionFrame(e,t,"enter",i,n)}elementToLeave(e,t,i,n){e.output&&this.transitionFrame(e,t,"leave",i,n)}triggerEvent(e,t,i){let n=[];for(let s of e.events){let[r,o]=s;if(r===t){let t=o.modifiers?.includes("self"),a=o.modifiers?.includes("outside");if(t||a){C.warn(Q,"事件修饰符:self、outside在组件事件中无法使用,组件无法确认元素",e);continue}let h=i.event;if((h instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(r)||h instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(r))&&!1===re(h,o.modifiers))continue;if(o.callBack(i),o.modifiers?.includes("prevent")&&i.preventDefault(),o.modifiers?.includes("once")&&n.push(s),o.modifiers?.includes("stop"))return i.stopPropagation(),!1}}n.length&&n.forEach((t=>{y(e.events,t)}))}transitionFrame(e,t,i,n,s){oe(e,te(t,i,"from")),n||="transition";let r=e.output.__TRANSITION_EVNETID__=U++;requestAnimationFrame((()=>{requestAnimationFrame((()=>{if(!e.output)return;oe(e,te(t,i,"active")),ae(e,te(t,i,"from")),oe(e,te(t,i,"to"));let o=function(e,t){let i=window.getComputedStyle(e),n=e=>(i[e]||"").split(", ");if("transition"===t){let e=n("transitionDelay"),t=n("transitionDuration"),i=de(e,t);if(i>0)return{timeout:i,count:t.length}}else if("animation"===t){let e=n("animationDelay"),t=n("animationDuration"),i=de(e,t);if(i>0)return{timeout:i,count:t.length}}}(e.output,n);if(!o)return void s?.();let a=0,h=()=>{ae(e,te(t,i,"to")),ae(e,te(t,i,"active")),e.output&&(e.output.removeEventListener(`${n}end`,d),r===e.output.__TRANSITION_EVNETID__&&s?.())},d=t=>{t.target===e.output&&++a>=o.count&&h()};setTimeout((()=>{a<o.count&&h()}),o.timeout+1),e.output?.addEventListener(`${n}end`,d)}))}))}renderNode(e){if(!e.output)if(e instanceof z.Text)e.parent&&e.parent instanceof z.Element&&X.includes(e.parent.tagName)?e.output=this.parserHtml(e.text):e.output=document.createTextNode(x(e.text||""));else if(e instanceof z.Html)if(e.notShadow){let t=document.createElement("joker-html-container");t.JOKER_NODE=e,t.innerHTML=e.html,e.output=t}else{let t=document.createElement("joker-html-shadow");t.JOKER_NODE=e,t.style.lineHeight="1",t.root.innerHTML=e.html,e.output=t}else if(e instanceof z.Element){let t,i=e.tagName.toLowerCase();"svg"===i||Z.includes(i)||e.parent?.inSvg?(e.inSvg=!0,t=document.createElementNS("http://www.w3.org/2000/svg",e.tagName)):t=document.createElement(e.tagName);for(let i in e.attributes)this.setAttribute(t,i,e.attributes[i]);t.JOKER_NODE=e,e.output=t,e.events.some((e=>"click"===e[0]&&e[1].modifiers?.includes("outside")))?setTimeout((()=>{this.initElementEvents(t,e)})):this.initElementEvents(t,e)}else e instanceof z.Comment?e.output=document.createComment(e.text):e.output=document.createTextNode("")}initElementEvents(e,t){for(let[i,n]of t.events){let s=n.modifiers?.includes("self"),r=n.modifiers?.includes("outside");s&&r&&(C.warn(Q,"事件修饰符:self、outside不可以同时存在,将按照self处理",t),r=!1);let o,a=function(o){if(!(t.sleep||s&&o.target!==e)){if(r){if(o.target===e||e.contains(o.target))return;if(!1===document.contains(o.target))return;if(t.contains((e=>(e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output]).includes(o.target))))return!0}(o instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(i)||o instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(i))&&!1===re(o,n.modifiers)||(n.callBack({eventName:i,event:o,target:t,preventDefault:()=>o.preventDefault(),stopPropagation:()=>o.stopPropagation(),data:void 0}),n.modifiers?.includes("prevent")&&o.preventDefault(),n.modifiers?.includes("stop")&&o.stopPropagation(),n.modifiers?.includes("once")&&(r?ne(t,i,a):e.removeEventListener(i,a)))}};n.modifiers?.includes("passive")&&(o={passive:!0}),r?ie(t,i,a,o):e.addEventListener(i,a,o)}}parserHtml(e){var t=document.createElement("div");return t.innerHTML=e,t.childNodes}isCommandGroup(e){return e instanceof z.Component||e instanceof z.Condition||e instanceof z.List||e instanceof z.ListItem||e instanceof z.RenderSection}appendNodeChildren(e,t,i,n){let s=he(e);if(s)s.appendChild(t);else if(void 0===i)this.elements?.appendChild(t);else if(i)if(i instanceof z.Root){let e=i.parent;if(e&&e instanceof z.Component&&e.output){let i=e.output,n=i?.parentNode;if(n)return void n.insertBefore(t,i)}this.elements?.appendChild(t)}else if(i instanceof z.Element){let e=i.output;if(void 0===e)return;e.appendChild(t)}else if(this.isCommandGroup(i)){let s=i.output?.parentNode;if(void 0!==n&&i.childrens?.length&&s){let r=n-1;if(r<0){let i=ce(e);return void(i&&s.contains(i.output)?i.output.after(t):s.insertBefore(t,s.firstChild))}{let e=i.childrens[r];if(e){let i=e.output;if(i)return void i.after(t)}}}s&&s.insertBefore(t,i.output)}else C.error(Q,"该节点不支持嵌套子集,请检查。",{node:e,parent:i})}setAttribute(e,t,i){if(e)if("boolean"!=typeof i){if("class"===t){if(Array.isArray(i)){let e=[];for(let t of i)if(l(t))for(let i in t)t[i]&&e.push(i);else t&&e.push(t);i=e.join(" ")}else if(l(i)){for(let t in i)t=t.trim(),t&&(i[t]?e.classList.add(t):e.classList.remove(t));return}}else if("style"===t&&l(i)){e.removeAttribute("style");for(let t in i){let n=!1;void 0!==i[t]&&!1!==i[t]||(n=!0);let s=String(i[t]);v(s)&&(n=!0),n||(e.style[t]=s)}return}i=(i??"").toString().trim(),"class"===t&&(i=i.split(/\s/).filter((e=>e.trim())).join(" ")),"value"===t&&"value"in e?e.value=i:"xlink:href"===t?e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",i):e.setAttribute(t,i)}else i?e.setAttribute(t,""):e.removeAttribute(t)}}}(ee||(ee={}));const se={enter:"enter",backspace:"delete",tab:"tab",arrowup:"up",arrowdown:"down",arrowleft:"left",arrowright:"right",escape:"esc"," ":"space"};function re(e,t){if(e instanceof KeyboardEvent){if(void 0===e.key)return!1;for(let i in se)if(t?.includes(se[i])&&e.key.toLowerCase()!==i)return!1}else{if(t?.includes("left")&&0!==e.button)return!1;if(t?.includes("right")&&2!==e.button)return!1;if(t?.includes("middle")&&1!==e.button)return!1}return(!t?.includes("ctrl")||!1!==e.ctrlKey)&&((!t?.includes("alt")||!1!==e.altKey)&&(!t?.includes("shift")||!1!==e.shiftKey))}function oe(e,t){e.output&&e.output.classList.add(t)}function ae(e,t){e.output&&e.output.classList.remove(t)}function he(e){if(e instanceof z.Element||e instanceof z.Component){let t=e instanceof z.Component?e.propValues["append-to"]:e.attributes["append-to"];if(t){if(t instanceof z.Element)return t.output;if("string"==typeof t){ee.ROOT_CONTAINER&&(t="body"===t?ee.ROOT_CONTAINER:`${ee.ROOT_CONTAINER} ${t}`);let e=document.querySelector(t);if(e)return e}C.warn(Q,"appendTo类型不支持",{appendTo:t,node:e})}}}function de(e,t){for(;e.length<t.length;)e.concat(e);return Math.max(...t.map(((t,i)=>le(t)+le(e[i]))))}function le(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function ce(e){let t=e.prev;for(;t;){if(t instanceof z.Element||t instanceof z.Comment||t instanceof z.Text||t instanceof z.Component||t instanceof z.Element)return t;t=t.prev}let i=e.parent;for(;i;){if(i instanceof z.Element)return;let e=ce(i);if(e)return e;i=i.parent}}class ue extends HTMLElement{root;constructor(){super(),this.root=this.attachShadow({mode:"open"})}}!customElements.get("joker-html-shadow")&&customElements.define("joker-html-shadow",ue);const fe={};function pe(e){for(let t in e)fe[t]=e[t]}const me="Global",ye="渲染核心";function Ee(t){try{return new Function(e,me,`return ${t};`)}catch{throw new Error("创建表达式运行方法时出现未知错误,表达式为"+t)}}class ve{ast;ob;parent;ext;ref="";watchers=[];node;isDestroy=!1;constructor(e,t,i,n){this.ast=e,this.ob=t,this.parent=i,this.ext=n}init(e){this.parser(e),this.afterParser()}beforeDestroy(e){}destroy(e){if(this.isDestroy=!0,this.clearWatchers(),this.parent.childrens&&this.node){(this.node instanceof z.Element||this.node instanceof z.Component)&&this.ext.removeRef(this.node);let t=()=>{this.parent&&this.node&&(this.beforeDestroy(e),this.destroyChildrens(e),this.node&&(this.ext.render?.removeNode(this.node),this.parent.childrens&&y(this.parent.childrens,this.node),this.notifyNodeWatcher("remove"),this.destroyOtherData()))};if(this.ext.nodeTransition(this.node,"leave",void 0,(()=>{t()})))return y(this.parent.childrens,this.node),void this.destroyChildrensWatcher(this.node);t()}else this.destroyOtherData()}destroyWathcers(){this.isDestroy=!0,this.clearWatchers(),this.destroyChildrensWatcher(this.node)}destroyOtherData(){this.node&&(this.node[z.PARSERKEY]=void 0),this.node=void 0,this.parent=void 0}destroyChildrens(e){for(;this.node?.childrens?.length;){let t=this.node.childrens[0];t[z.PARSERKEY]?t[z.PARSERKEY].destroy(e):y(this.node.childrens,t)}}destroyChildrensWatcher(e){if(e?.childrens?.length)for(let t of e?.childrens)t[z.PARSERKEY]&&(t[z.PARSERKEY].clearWatchers(),this.destroyChildrensWatcher(t))}appendNode(e){this.parent?.childrens&&this.node&&!this.isDestroy&&(this.node[z.PARSERKEY]=this,this.node instanceof z.Element&&this.ob[Je]&&(this.node.attributes["data-scoped-"+this.ob[Je]]=void 0),this.ext.render?.appendNode(this.node,e),void 0===e?this.parent.childrens.push(this.node):this.parent.childrens.splice(e,0,this.node),this.notifyNodeWatcher("append"))}afterParser(){this.ext.nodeTransition(this.node,"enter")}notifyNodeWatcher(e,t){this.ext.notifyNodeWatcher(this.ref,this.node,e,t)}runExpress(e,t){try{return Ee(e).call(t,t,fe)}catch(i){C.error(ye,"运行表达式出现错误:"+e,{ob:t}),console.error(i)}}runExpressWithWatcher(e,t,i,n){if(this.isDestroy)return;let s="string"==typeof e?Ee(e):e,r=new F((()=>{if(this.isDestroy||t[Be])return J;try{return s.call(t,t,fe)}catch(i){return C.error(ye,"运行表达式出现错误",{ob:t,express:e,node:this.node}),console.error(i),J}}),i,void 0,n);return this.addWatch(r),r.value===J?void 0:r.value}addWatch(e){!1===this.watchers.includes(e)&&this.watchers.push(e)}clearWatchers(){this.watchers.forEach((e=>{e.destroy()})),this.watchers.length=0}}class ge extends ve{parser(){this.node=new z.Text(this.ast.text,this.parent),this.appendNode()}}class be extends ve{parser(){this.node=new z.Comment(this.ast.text,this.parent),this.appendNode()}}class we extends ve{parser(){if(this.node=new z.Condition(this.ast.kind,this.parent),"else"!==this.ast.kind){v(this.ast.condition)&&C.error("条件命令",`当前条件命令${this.ast.kind}没有判断条件,请检查`);let e=this.runExpressWithWatcher(this.ast.condition,this.ob,(e=>{let t=!!e;if(this.node?.result!==t){if(this.node.result=t,!1===t&&this.node?.isShow)this.destroyChildrens(!0);else if(t&&!this.node?.isShow){let e=this.getElseNode();if(e&&e.isShow&&e.childrens?.length){let t=e[z.PARSERKEY];t&&t instanceof we&&t.renderConditionChildren()}}this.reloadAllCondition()}}));this.node.result=!!e}this.appendNode(),this.renderConditionChildren()}renderId;getElseNode(){let e=this.node?.next;for(;e&&e instanceof z.Condition&&"if"!==e.cmdName;){if("else"===e.cmdName)return e;e=e.next}}renderConditionChildren(){let e=!1;return this.getPrevIfResult()?e=!1:"else"===this.ast.kind?e=!0:(this.node.result=!!this.runExpress(this.ast.condition,this.ob),this.node.result&&(e=!0)),e!==this.node.isShow&&(this.node.isShow=e,this.destroyChildrens(!0),e&&this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob),!0)}getPrevIfResult(){if("if"===this.ast.kind)return!1;let e=this.node?.prev;for(;e&&e instanceof z.Condition;){if(e.result)return!0;if("if"===e.cmdName)break;e=e.prev}return!1}reloadAllCondition(){if(this.renderConditionChildren()){let e=this.node?.next;for(;e&&e instanceof z.Condition&&"if"!==e.cmdName;){let t=e[z.PARSERKEY];t&&t instanceof we&&t.renderConditionChildren(),e=e.next}}let e=this.node?.next;for(this.node?.result||this.destroyChildrens(!0);e&&e instanceof z.Condition&&"if"!==e.cmdName;){let t=e[z.PARSERKEY];t&&t instanceof we&&t.renderConditionChildren(),e=e.next}}}class Ne extends ve{parser(){this.node=new z.List(this.parent),this.appendNode(),this.renderChildrens()}renderChildrens(){switch(this.ast.keyType){case"condition":this.renderConditionChildrens();break;case"in":case"of":this.renderInOrOfChildrens()}}renderConditionChildrens(){let t=this.ast.param,i=Object.create(this.ob),n=!!this.runExpressWithWatcher(function(t,i,n){try{return new Function(e,`${e}.${t}=${i}; return ${n};`)}catch{throw new Error(`For循环命令,表达式运行依赖采集出现未知错误,其中letKey:${t},keyVal:${i},condition:${n}`)}}(t.letKey,t.defaultKeyVal,t.condition),i,(()=>{this.clearWatchers(),this.renderChildrens()}),!0),s=0;for(;n;){let e=Object.create(this.ob);W(e,t.letKey,i[t.letKey]);let r=s++;this.renderItem(e,r),this.runExpressWithWatcher((()=>i[t.letKey]),i,(async(i,n,s,o)=>{await Promise.resolve(),o.isDestroy||(e[t.letKey]=i,s||this.updateListItemOb(e,r))}),!0),this.runExpress(t.step,i),n=!!this.runExpress(t.condition,i)}this.destroyOldChildrens(s)}renderInOrOfChildrens(){let e=this.ast.param,t=this.runExpressWithWatcher(e.dataKey,this.ob,(()=>{this.clearWatchers(),this.renderChildrens()})),i=0;if(t&&(Array.isArray(t)||u(t)))for(let n in t){let s=Object.create(this.ob),r=Array.isArray(t)?Number(n):n;e.indexKey&&W(s,e.indexKey,r),e.itemKey&&W(s,e.itemKey,t[n]);let o=i++;this.renderItem(s,o,e.indexKey),e.itemKey&&this.runExpressWithWatcher((()=>t[r]),t,(async(i,n,a,h)=>{await Promise.resolve(),h.isDestroy||r in t&&(s[e.itemKey]=i,a||this.updateListItemOb(s,o))}),!0)}this.destroyOldChildrens(i)}findIndexByIndex(e,t,i){let n=-1;if(this.node)for(let s=t;s<this.node.childrens.length;s++)if(this.checkObEqual(e,this.node.childrens[s]?.ob,i?[i]:void 0)){n=s;break}return n}renderItem(e,t,i){if(!this.ast.childrens?.length||!this.node)return;let n=this.node.childrens?.[t];if(n){if(this.checkObEqual(e,n.ob,i?[i]:void 0))return void(i&&n.ob[i]!==e[i]&&(n.ob[i]=e[i]));let s=this.findIndexByIndex(e,t+1,i);if(s>-1){if(t+1===s)this.node.childrens?.[t]?.[z.PARSERKEY]?.destroy();else for(let e=0;e<s-t-1;e++)this.node.childrens?.[t]?.[z.PARSERKEY]?.destroy();return this.renderItem(e,t,i)}return new Re(this.ast,e,this.node,this.ext).init(t)}return new Re(this.ast,e,this.node,this.ext).init()}updateListItemOb(e,t){if(!this.ast.childrens?.length||!this.node)return;let i=this.node.childrens?.[t];c(e,((e,t)=>{i.ob[e]!==t&&(i.ob[e]=t)}))}destroyOldChildrens(e){if(this.node)for(;this.node.childrens.length>e;){let e=this.node.childrens.pop();if(!e)break;e[z.PARSERKEY]?.destroy(!1)}}checkObEqual(e,t,i){let n=!0;return void 0!==t&&(c(e,((e,s)=>{i?.includes(e)||t?.[e]===s||(n=!1)})),n)}}class Re extends ve{parser(e){this.node=new z.ListItem(this.ob,this.parent),this.appendNode(e),this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}}class $e extends ve{parser(){if(v(this.ast.cmdName))throw C.error("模板指令","解析AST转换VNode时发生错误,未找到指令名称",this.ast),new Error("解析AST转换VNode时发生错误,未找到指令名称");let e;if("Html"===this.ast.cmdName||"Text"===this.ast.cmdName?e=this.ast.param:this.ast.cmdName.startsWith(me+".")?e=`${this.ast.cmdName}(${this.ast.param})`:this.ast.cmdName in this.ob&&"function"==typeof this.ob[this.ast.cmdName]&&(e=`${t(this.ast.cmdName)}(${this.ast.param})`),e){let t=this.runExpressWithWatcher(`[${e}]`,this.ob,(e=>{this.changeValue(e?.[0])}));return t||=[],"Html"===this.ast.cmdName?this.node=new z.Html(Ce(t[0]),this.parent,t[1]):this.node=new z.Text(Ce(t[0]),this.parent),void this.appendNode()}throw new Error(`未找到命令:${this.ast.cmdName}`)}changeValue(e){this.node&&(this.node instanceof z.Html?this.node.html=Ce(e):this.node.text=Ce(e),this.ext.render?.updateNode(this.node))}}function Ce(e){return null==e||"function"==typeof e?"":e.toString()}const Ae="default";class xe extends ve{parser(){let e=this.transformParam();this.node=new z.RenderSection(e.id,this.parent),this.node.params=e.params,this.node.section??=this.ob.$sections?.[e.id],this.appendNode(),this.node.section&&(this.node.section.params?(this.node.ob=Object.create(this.node.section.ob||this.ob),this.node.section.params?.forEach(((e,t)=>{W(this.node.ob,e,this.node.params[t])}))):this.node.ob=this.node.section.ob||this.ob,(this.node.section.parser||this.ext).parserNodes(this.node.section.asts,this.node,this.node.ob))}transformParam(){if(this.ast.param){let e=this.runExpressWithWatcher(`[${this.ast.param}]`,this.ob,(e=>{let t=e?.[0]||Ae;if("string"==typeof t&&t!==this.node.id)throw new Error("section id 不可动态变更");this.node.params=e.slice(1),this.node?.ob&&this.node.section&&this.node.section.params?.forEach(((e,t)=>{this.node?.ob&&this.node.ob[e]!==this.node.params[t]&&(this.node.ob[e]=this.node.params[t])}))}),!0);return{id:e?.[0]||Ae,params:e?.slice(1)||[]}}return{id:Ae,params:[]}}}const Oe="组件解析";function Se(e,t){return!!t.components[e]||!!Ue(e)}class Pe extends ve{loadPromise;parser(){if(this.ast.node)return this.node=this.ast.node,this.node.parent=this.parent,this.initPropData(),void(this.node&&(this.appendNode(),this.node.component?.$mount(this.node)));this.node=new z.Component(this.parent),this.initPropData(),this.appendNode(),this.initEvent(),this.loadPromise=this.renderChildren(),this.ext.promiseQueue.add(this.loadPromise),this.loadPromise.finally((()=>{this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0)}))}get canReload(){return"tagName"in this.ast||"function"==typeof this.ast.component}reload(){this.canReload?(this.beforeDestroy(),this.renderChildren()):C.warn(Oe,"当前组件无法实现reload",this.node)}initPropData(){for(let e of this.ast.attributes)if("ref"!==e.name)if("keep-alive"===e.name&&"false"!==e.value&&(this.node.keepalive=!0),e.express){let t=this.runExpressWithWatcher(e.express,this.ob,(t=>{this.node.propValues[e.name]=t,this.notifyNodeWatcher("update",e.name)}),!0);this.node.propValues[e.name]=t}else this.node.propValues[e.name]=e.value;else{if(v(e.value)){C.warn(Oe,"元素的ref值不可以为空");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}this.node.propValues=_(this.node.propValues)}initEvent(){this.ast.events.forEach((e=>{let t=e.functionName?this.ob[e.functionName]:void 0;void 0===e.functionName?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:b}]):t&&"function"==typeof t?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:i=>{let n=[];e.functionParam&&(n=this.runExpress(`[${e.functionParam}]`,this.ob)),t.call(this.ext.ob,i,...n)}}]):C.error(Oe,`${"tagName"in this.ast?this.ast.tagName:""}元素中${e.name}事件所指定的回调(${e.functionName})方法未找到,请检查`)}))}async renderChildren(){return new Promise((async(e,t)=>{if("tagName"in this.ast){let e=this.ob.components[this.ast.tagName]||Ue(this.ast.tagName);if(void 0===e)return void C.error(Oe,`渲染组件失败,未找到名称为'${this.ast.tagName}'的私有组件/全局组件`);if(Fe in e||(e=(await e()).default),!this.node)return;{let t=this.getSections();this.node.name=this.ast.tagName,this.node.component=new e(this.node?.propValues,t,this.node?.keepalive)}}else if("function"==typeof this.ast.component){let e=this.getSections();this.node.component=new this.ast.component(this.node?.propValues,e,this.node?.keepalive)}else this.node.component=this.ast.component;if(!this.node)return;!this.node.name&&"name"in this.node.component&&this.node.component.name&&"string"==typeof this.node.component.name&&(this.node.name=this.node.component.name);let i=this,n=function(){i.loadPromise&&e(void 0)};if(this.node.component.$on("mounted",(()=>{this.node?.component.$off("beforeDestroy",n),e(void 0)})),this.node.component.$on("beforeDestroy",n),this.node.component.$mount(this.node),!this.node)return;let s=this.node?.component;s.isKeepAlive&&(this.ast.node=this.node)}))}getSections(){let t={},n=[];return this.ast.childrens.forEach((t=>{if(t.type===i.NodeType.COMMAND&&"if"===t.cmdName&&t.childrens){let s=t,r=t.childrens.some((e=>e.type===i.NodeType.COMMAND&&"section"===e.cmdName)),o=s.condition.startsWith(e+".$sections");if(o){return this.runExpress(s.condition,this.ob)?void n.push(...t.childrens):void 0}if(r&&"if"===s.kind&&!o)return void C.warn(Oe,"在解析section时,发现该section包裹在一个条件语句中,该条件语句仅支持以$sections进行if判断,已作排出")}n.push(t)})),n.forEach((e=>{if(e.type===i.NodeType.COMMAND&&"section"===e.cmdName){let i=e,n=i.id||Ae;/^(\'|\")(.*?)((\'|\"))$/.test(n)&&(n=n.slice(1,-1)),t[n]=t[n]||{asts:[],ob:this.ob,params:i.paramKeys,parser:this.ext},t[n].asts.push(...e.childrens||[])}else t[Ae]=t[Ae]||{asts:[],ob:this.ob,parser:this.ext},t[Ae].asts.push(e)})),t}beforeDestroy(e){this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0),!0===e&&this.node?.component?.isKeepAlive?this.node?.component?.$destroy():(this.node?.component?.$destroy(!0),this.ast.node=void 0)}}class De extends ve{parser(){this.node=new z.Element(this.ast.tagName,this.parent),this.initAttributes(),this.initEvents(),this.appendNode(),this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}initAttributes(){for(let e of this.ast.attributes)if("ref"!==e.name)if(e.express){let t=t=>{this.node&&(this.node.attributes[e.name]=this.transformAttrVal(t),this.ext.render?.updateNode(this.node,e.name),this.notifyNodeWatcher("update",e.name))},i=this.runExpressWithWatcher(e.express,this.ob,(e=>{t(e)}));this.node.attributes[e.name]=this.transformAttrVal(i)}else this.node.attributes[e.name]=e.value;else{if(v(e.value)){C.warn("Element解析","元素的ref值不可以为空");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}}initEvents(){for(let e of this.ast.events){let t=e.functionName?this.ob[e.functionName]:void 0;if(!(void 0===e.functionName||t&&"function"==typeof t))throw new Error(`${this.ast.tagName}元素中${e.name}事件所指定的回调(${e.functionName})方法未找到,请检查`);this.node?.events.push([e.name,{modifiers:e.modifiers,callBack:i=>{if(void 0===t)return;let n=[];e.functionParam&&(n=this.runExpress(`[${e.functionParam}]`,this.ob)),t&&t.call(this.ext.ob,i,...n)}}])}}transformAttrVal(e){return void 0!==e&&("string"==typeof e||"boolean"==typeof e||"function"!=typeof e&&Object.prototype.toString()?e:void 0)}}class Te{asts;ob;root=new z.Root;refs={};sleeped=!1;promiseQueue=new Set;nodeWatcherEvents={};render;constructor(e,t,i){this.asts=e,this.ob=t,this.root.component=t,this.render=G.get(ee.IRENDERIOCTAGID)??new ee.DomRender,i&&i instanceof z.Node&&(this.root.parent=i,i.childrens??=[],i.childrens.push(this.root))}parser(){this.parserNodes(this.asts,this.root)}mount(e){this.sleeped&&this.weakup(),this.render?.mount(e)}parserNodes(e,t,n){if(0!==this.asts.length)for(let s of e)if(s.type===i.NodeType.TEXT)new ge(s,n??this.ob,t,this).init();else if(s.type===i.NodeType.COMMENT)new be(s,n??this.ob,t,this).init();else if(s.type===i.NodeType.COMPONENT)new Pe(s,n??this.ob,t,this).init();else if(s.type===i.NodeType.ELEMENT){let e=s;Se(e.tagName,n??this.ob)?new Pe(e,n??this.ob,t,this).init():new De(e,n??this.ob,t,this).init()}else if(s.type===i.NodeType.COMMAND){let e=s;switch(e.cmdName){case"if":case"elseif":case"else":new we(e,n??this.ob,t,this).init();break;case"for":new Ne(e,n??this.ob,t,this).init();break;case"RenderSection":new xe(e,n??this.ob,t,this).init();break;case"section":break;default:new $e(e,n??this.ob,t,this).init()}}}addRef(e,t){this.refs[e]=this.refs[e]||[],this.refs[e].push(t),t.ref=e}removeRef(e){for(let t in this.refs)this.refs[t].includes(e)&&y(this.refs[t],e)}addNodeWatcher(e,t){this.nodeWatcherEvents[e]=this.nodeWatcherEvents[e]||[],this.nodeWatcherEvents[e].push(t)}removeNodeWatcher(e,t){y(this.nodeWatcherEvents[e]||[],t)}notifyNodeWatcher(e,t,i,n){this.nodeWatcherEvents[e]?.forEach((e=>{e(t,i,n)}))}sleep(e){let t=e||this.root;t.childrens?.forEach((e=>{let t=()=>{e.childrens&&this.sleep(e),e.sleep=!0,this.render?.removeNode(e,!0)};this.nodeTransition(e,"leave",void 0,(()=>{t()}))||t()})),void 0===e&&(this.sleeped=!0)}weakup(e){let t=e||this.root;t.childrens?.forEach((e=>{e.sleep=!1,this.render?.appendNode(e),e.childrens&&this.weakup(e),this.nodeTransition(e,"enter")})),void 0===e&&(this.sleeped=!1)}destroy(e){for(;this.root.childrens.length;){let t=this.root.childrens[0];t[z.PARSERKEY]?t[z.PARSERKEY].destroy(e):y(this.root.childrens,t)}this.render.destroy(),this.refs={},this.root.childrens.length=0,this.nodeWatcherEvents={},this.asts.length=0}destroyWathcers(){for(let e of this.root.childrens)e[z.PARSERKEY]&&e[z.PARSERKEY].destroyWathcers()}reSetAsts(e,t){this.destroy(t),this.render=G.get(ee.IRENDERIOCTAGID)??new ee.DomRender,this.asts=e}nodeTransition(e,t,i,n,s){if(e&&e.parent?.childrens&&(e instanceof z.Element||e instanceof z.Component)){let r=function(e){if(e instanceof z.Element||e instanceof z.Component){let t=e instanceof z.Element?e.attributes:e.propValues;return{name:t["transition-name"],type:t["transition-type"]}}}(e);if(i??=r?.name,s??=r?.type,!i)return!1;let o=ke(e);if(o)return"enter"===t?this.render.elementToEnter(o,i,s,(()=>{let t=e[z.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-enter"),n?.()})):this.render.elementToLeave(o,i,s,(()=>{let t=e[z.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-leave"),n?.()})),!0;C.warn("渲染核心","在执行node动画时,发现数据不完备,请检查")}return!1}}function ke(e){if(e instanceof z.Element)return e;if(e.childrens&&e.childrens.length)for(let t of e.childrens)return t instanceof z.Element?t:ke(t)}function Ke(e,t,i){if(void 0===t)return;let n=Array.isArray(i)?i:[i];for(let e of n){if(e===Array&&t instanceof Array)return t;if(typeof t===e.name.toLocaleLowerCase())return t}switch(n[0]){case Number:let e=Number(t);if(!1===isNaN(e))return e;break;case String:return String(t)}throw new Error(`props中${e.toString()}的类型不符合约束类型`)}function _e(e,t,i){let n,s,r;if("symbol"!=typeof t&&(n=g(t)),t in e?s=e[t]:n&&(s=e[n]),i&&(t in i?r=i[t]:n&&n in i&&(r=i[n])),void 0!==r){if(u(r)&&("type"in r||"required"in r||"default"in r||"validate"in r)){let e=r;if(e.required&&void 0===s)throw new Error(`props中key:${t.toString()}是必须项,请检查`);if(e.type&&(s=Ke(t,s,e.type)),e.validate&&!1===e.validate(s))throw new Error(`props中key${t.toString()}的值校验错误`);s=s??e.default}else s=We(r)?Ke(t,s,r):s??r;return s}return s}function We(e){return!![String,Array,Number,Object,Function,Boolean].includes(e)||e instanceof Array&&We(e[0])}function Ie(e,t){if(!e.constructor)return!1;let i=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);return i&&i.get}const Le="组件",Ve=Symbol.for("JOKER_PROPS_DATA_KEY"),Me=Symbol.for("JOKER_PROPS_DATA_PROXY"),je=Symbol.for("JOKER_PRIVATE_WATCHERS"),Ye=Symbol.for("JOKER_EVENT_DATA_KEY"),Be=Symbol.for("JOKER_IS_DESTROY"),He=Symbol.for("JOKER_PARSER_TEMPLATE_TARGET"),Je=Symbol.for("JOKER_SCOPE_ID"),Fe=Symbol.for("JOKER_COMPONENT_TAG"),Ge=Symbol();let qe=["constructor","$mount","$nodeTransition","$destroy","$getRef","$getRefs","$syncProp","$watchNode","$watch","$on","$off","$trigger","$render","created","mounted","beforeDestroy","sleeped","wakeup","destroyed"];class ze{$sections;isKeepAlive;static[Fe]=!0;[Je];model={};template;$root;isSleeped=!1;components={};propsOption;[Ve]={};[He];[Me];[je]=[];[Ye]=new Map;[Be]=!1;[Ge]=!1;constructor(e,t={},i){this.$sections=t,this.isKeepAlive=i,this[Ve]=e||{}}get props(){if(void 0===this[Me]){let e=this;this[Me]=new Proxy(e[Ve],{get:(t,i)=>_e(e[Ve],i,e.propsOption),set(){throw new Error("props 参数不允许变更,只允许单向数据传递")}})}return this[Me]}$mount(e){if(!1===this[Ge]){let e=()=>{let e=[],t=Object.getPrototypeOf(this);for(;null!==t&&t!==Object.prototype;)Object.getOwnPropertyNames(t).forEach((i=>{!1!==qe.includes(i)||Ie(t,i)||"function"!=typeof t[i]||t[i].prototype?.hasOwnProperty("constructor")||e.push(i)})),t=Object.getPrototypeOf(t);return e};for(let t of e())this[t]=this[t].bind(this);this[Ge]=!0}if(this.$root=e,this.isKeepAlive&&this.isSleeped)return this.isSleeped=!1,this[He]&&this.$root?(this[He].mount(this.$root),this.wakeup(),this.$trigger("wakeup"),this.$rootVNode&&et(this.$rootVNode),this):(C.error(Le,"当前组件在唤醒时,发现渲染处理程序已被销毁,无法进行唤醒操作",[this,this.$root]),this);this.isSleeped=!1,this.model=_(this.model);let t=this.created(),i=async()=>{this.$trigger("created"),this.template&&this.$render(),await this.$nextUpdatedRender(),this[Be]||(await this.mounted(),this[Be]||this.$trigger("mounted"))};return t&&t instanceof Promise?t.then((()=>{this[Be]||i()})):i(),this}$nextUpdatedRender(e){if(this[Be])return;let t=[...this[He]?.promiseQueue||[]],i=this.$rootVNode?.find((e=>e instanceof z.Component));if(i?.forEach((e=>{e?.component&&t.push(...e.component[He]?.promiseQueue||[])})),t.length)return Promise.all(t).finally((()=>{this[Be]||e?.()}));this[Be]||e?.()}$nodeTransition(e,t,i,n,s){if("string"==typeof e){let t=this.$getRef(e);if(!t)return void C.error(Le,`执行节点动画是找不到ref=${e}的节点`);e=t}this[He]?.nodeTransition(e,t,i,n,s)}$destroy(e){if(!e&&this.isKeepAlive)return this[He]?.sleep(),this.isSleeped=!0,this.sleeped(),this.$trigger("sleeped"),void(this.$rootVNode&&Ze(this.$rootVNode));this[Be]=!0;for(let e of this[je])e.destroy();this[je].length=0,this[He]?.destroyWathcers(),this.beforeDestroy(),this.$trigger("beforeDestroy"),this[He]?.destroy(),this[He]=void 0,this.template&&Array.isArray(this.template)&&(this.template.length=0),this.$trigger("destroy"),this[Ye].clear(),this.$root=void 0,this.isSleeped=!1,this.$sections={},this[Me]=void 0,this[Ve]={},this.destroyed()}get $refs(){return this[He]?.refs||{}}$getRef(e){return this.$refs[e]?.[0]}$getRefs(e){return this.$refs[e]}$syncProp(e,t,i){"function"==typeof t&&(i=t,t=void 0),t??=e,i??=e=>e,this.model[t]=i(this.props[e]),this.$watch((()=>this.props[e]),(()=>{this.model[t]=i?.(this.props[e])}))}get $rootVNode(){return this[He]?.root}$watchNode(e,t){if(this[He])return this[He]?.addNodeWatcher(e,t),()=>{this[He]?.removeNodeWatcher(e,t)};C.warn(Le,"该组件还未挂载,不可以进行节点观察监听")}$watch(e,t,i){let n=new F((()=>{if(this[Be]){for(let e of this[je])e.destroy();return J}return e()}),((e,i)=>{this[Be]||t(e,i)}),void 0,i);return this[je].push(n),[n.value,()=>{n.destroy(),y(this[je],n)}]}$on(e,t){let i=this[Ye].get(e);void 0===i&&(i=new Set,this[Ye].set(e,i)),!1===i?.has(t)&&i.add(t)}$off(e,t){let i=this[Ye].get(e);i&&(t?i.delete(t):i.clear())}$trigger(e,t,i){if(!this.$root)return;let n={eventName:e,stopPropagation:i?.stopPropagation??(()=>{}),preventDefault:i?.preventDefault??(()=>{}),data:t,target:i?.target??this.$rootVNode,event:i?.event};if(this.$rootVNode&&this.$rootVNode.parent&&this.$rootVNode.parent instanceof z.Component&&!1===this[He]?.render.triggerEvent(this.$rootVNode.parent,e,n))return;let s=this[Ye].get(e);s?.size&&[...s].forEach((e=>{e(n)}));let r=this[Ye].get("*");r?.size&&[...r].forEach((e=>{e(n)}))}$render(e,t){e??=this.template,this.template="function"==typeof e?e(n):e,this.$root&&(this.template??=[],this[He]?.reSetAsts(this.template,t),this[He]??=new Te(this.template,this,this.$root),this[He].parser(),this.$root&&this[He].mount(this.$root))}created(){}mounted(){}beforeDestroy(){}sleeped(){}wakeup(){}destroyed(){}}const Qe={};function Xe(e,t){if("string"==typeof e)t&&(Qe[e]=t);else for(let t in e)Qe[t]=e[t]}function Ue(e){return Qe[e]}function Ze(e){e.childrens?.forEach((e=>{e instanceof z.Component&&e.component?.sleeped(),Ze(e)}))}function et(e){e.childrens?.forEach((e=>{e instanceof z.Component&&e.component?.wakeup(),et(e)}))}class tt extends ze{template=[];cache=new Map;async mounted(){this.$watch((()=>this.props.name),(async e=>{this.$render([],!0),await Promise.resolve(),this.$root&&this.loadComponent(e)})),await this.loadComponent(this.props.name)}propsVaule;created(){this.initProps()}initProps(){let e={};this.props.props||(Object.keys(this.props).forEach((t=>{!1!==this.filterProps(t)&&(e[t]=this.props[t],this.$watch((()=>this.props[t]),(()=>{this.propsVaule[t]=this.props[t]})))})),this.propsVaule=_(e))}filterProps(e){if("string"!=typeof e)return!1;let t=g(e);return"transition-name"!==t&&"name"!==t&&"keep-alive"!==t&&"ref"!==t&&void 0}async loadComponent(e){if(!e)return void this.$render([],this.isKeepAlive);let t;if(this.isKeepAlive){let t=this.cache.get(e);if(t)return void this.$render([s(t,{"transition-name":this.props["transition-name"]})],!0)}let i=this.$rootVNode?.parent?.[z.PARSERKEY]?.ob.components,n=i?.[e];void 0===n&&(n=Ue(e)),n?(Fe in n||(n=(await n()).default),t=new n(this.props.props||this.propsVaule,this.$sections,this.isKeepAlive),t.$on("*",(e=>{this.$trigger(e.eventName,e.data,e)})),this.isKeepAlive&&this.cache.set(e,t),this.$render([s(t,{"transition-name":this.props["transition-name"]})],this.isKeepAlive)):C.warn("component",`未找到${e}的组件`)}beforeDestroy(){this.removeCache()}removeCache(e){if(e){let t=this.cache.get(e);this.cache.delete(e),t&&t.$destroy(!0)}else this.cache.forEach((e=>{e.$destroy(!0)})),this.cache.clear()}}class it extends ze{template=function(){return[r("RenderSection")]};async mounted(){await this.$nextUpdatedRender()}}Xe({template:it,component:tt});class nt{eventDatas=new Map;on(e,t){let i=this.eventDatas.get(e);void 0===i&&(i=[],this.eventDatas.set(e,i));let n={callBack:t};return i.push(n),()=>{i&&y(i,n)}}once(e,t){let i=this.eventDatas.get(e);void 0===i&&(i=[],this.eventDatas.set(e,i));let n={callBack:t,once:!0};return i.push(n),()=>{i&&y(i,n)}}off(e,t){if(void 0!==e)if(t){let i=this.eventDatas.get(e),n=i?.find((e=>e.callBack===t));n&&y(i,n)}else this.eventDatas.delete(e);else this.eventDatas.clear()}async trigger(e,t){let i=[...this.eventDatas.get(e)||[]];if(i.push(...this.eventDatas.get("*")||[]),i&&i.length){let n=0,s=0,r=!1;for(;i[n];){let o=i[n],a=await o.callBack({stopPropagation:()=>r=!0,callTimes:s,eventName:e},t);if(o.once?y(i,o):n++,!1===a||r)return!1}}}}export{J as BREAK_WATCH_UPDATE,ze as Component,tt as ComponentContainer,O as Dep,nt as EventBus,G as IContainer,Be as IS_DESTROY,Fe as JOKER_COMPONENT_TAG,q as JOKER_VNODE_TAG,S as OBJECTPROXY_DEPID,He as PARSER_TEMPLATE_TARGET,Te as ParserTemplate,ee as Render,Je as SCOPE_ID,L as ShallowObserver,it as Template,z as VNode,F as Watcher,fe as __GLONAL_FUNTIONS__,d as __JOKER_HMR_RUNTIME,Y as combinedReply,W as defineObserverProperty,Ue as getGlobalComponent,B as isObserverData,_ as observer,Xe as registerGlobalComponent,pe as registerGlobalFunction};
|
package/dist/bundle.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("@joker.front/ast");const t=new Map,s=new Map,r=new Map;let n={recordRender:(e,t)=>{s.set(e,t)},recordComponent:(e,t)=>{r.set(e,t)},record:(e,s)=>{void 0===t.get(e)&&t.set(e,new Set),t.get(e).add(s),s.$on("destroy",(()=>{t.get(e)?.delete(s)}))},reload:(e,s)=>{let n=r.get(e);if(!n)return;n.component=s;let i=t.get(e);if(!i)return;let o=Array.from(i);i.clear(),o.forEach((e=>{if(e.$root){if(!e.$rootVNode?.parent)return window.onbeforeunload=null,void location.reload();{let t=e.$rootVNode.parent;if(!(t instanceof exports.VNode.Component&&t[exports.VNode.PARSERKEY]&&t[exports.VNode.PARSERKEY].canReload))return window.onbeforeunload=null,void location.reload();t[exports.VNode.PARSERKEY].reload()}}}))},rerender:(e,r)=>{let n=s.get(e);n&&(n.render=r),t.get(e)?.forEach((e=>{e.$render(r)}))}};function i(e){return null!==e&&"object"==typeof e}function o(e,t){Object.getOwnPropertyNames(e).forEach((s=>{t(s,e[s])}))}function a(e){return"[object Object]"===Object.prototype.toString.call(e)}function h(e){if(null===e)return e;if("object"!=typeof e)return e;let t;t=Array.isArray(e)?[]:{};let s=Object.keys(e);for(let r of s){let s=e[r];t[r]="object"==typeof s?h(s):s}return t}function d(e,t,s){return Array.isArray(e)&&Array.isArray(t)?function(e,t,s){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(s){if(e[r]!==t[r])return!1}else if(!1===l(e[r],t[r],s))return!1;return!0}(e,t,s):l(e,t,s)}function l(e,t,s){if(e===t)return!0;let r=i(e),n=i(t);if(r&&n){if(a(e)&&a(t)){let r=Object.keys(e);if(r.length!==Object.keys(t).length)return!1;if(s){for(let s of r)if(e[s]!==t[s])return!1;return!0}return JSON.stringify(e)===JSON.stringify(t)}return e===t}return!r&&!n&&String(e)===String(t)}function c(e,t){let s=e.indexOf(t);return s>-1&&e.splice(s,1),e}function p(e,t){let s=e.findIndex((e=>t(e)));return s>-1&&e.splice(s,1),e}function u(e){return!e||""===e.trim()}function f(e,t="-"){return(e=e||"").split(/(?=[A-Z])/).map((e=>e.toLowerCase())).join(t)}let m=(...e)=>{},E="warn";const y=["silent","error","warn","info"];function N(){let e=new Date;function t(e,t=2){return e.toString().padStart(t,"0")}return t(e.getHours())+":"+t(e.getMinutes())+":"+t(e.getSeconds())+":"+t(e.getMilliseconds(),3)}function v(e,t,s,r){y.indexOf(e)<=y.indexOf(E)&&(void 0===r?console[e](`${N()} [${t}]:`,s):console[e](`${N()} [${t}]:`,s,r))}let x={info:function(e,t,s){v("info",e,t,s)},warn:function(e,t,s){v("warn",e,t,s)},error:function(e,t,s){v("error",e,t,s)},setLoggerLeve:function(e){E=e}};const g={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"',"#39":"'"};function b(e){return e.replace(/&(lt|gt|nbsp|amp|quot|#39);/gi,((e,t)=>g[t]||""))}class w{static target;watchers=new Map;depend(e){w.target?.addDep(this,e)}addWatcher(e,t){let s=this.watchers.get(e)||[];s.push(t),this.watchers.set(e,s)}removeWatcher(e,t){let s=this.watchers.get(e);s&&c(s,t)}notify(e){let t=this.watchers.get(e);if(t){p(t,(e=>e.isDestroy)),[...t].forEach((e=>{!1===e.isDestroy&&e.update()}))}}}const R=Symbol.for("__JOKER_OBJECT_PROXY_DEP_ID__"),A=Symbol.for("__JOKER_OBJECT_PROXY_DATA_KEY__"),C=Symbol.for("__JOKER_OBJECTPROXY_DEPLEVE_ID__");function O(e){return i(e)&&e instanceof Window==!1&&e instanceof I==!1&&e!==window.parent&&(Array.isArray(e)||a(e)||e instanceof Set||e instanceof Map)&&!Object.isFrozen(e)&&!(e instanceof Element)&&!(L in e)&&!(T in e)&&!(_e in e)}function S(e){if($(e))return e;if(e&&e.hasOwnProperty(A)){let t=Reflect.get(e,A);if(t)return t}let t=new w,s=!0,r=new Proxy(e,{get(e,s,r){if(e instanceof Set||e instanceof Map){if("add"===s){let r=Reflect.get(e,s);return s=>{O(s)&&(s=V(s));let n=r.call(e,s);return K(t,"size"),K(t,C),n}}if("set"===s){let r=Reflect.get(e,s);return(s,n)=>{O(n)&&(n=V(n));let i=r.call(e,s,n);return K(t,"size"),K(t,C),i}}if("delete"===s||"clear"===s){let r=Reflect.get(e,s);return n=>{let i=r.call(e,n);return("clear"===s||i)&&(K(t,"size"),K(t,C)),i}}let r=Reflect.get(e,s);if("function"==typeof r)return r.bind(e)}if(s===A)return;if(s===R)return t;if(s===C)return;let n=Reflect.get(e,s);return s===Symbol.toStringTag||!1===function(e,t){return t in e}(e,s)&&"length"!==s&&"size"!==s||(t.depend(s),O(n)&&$(n)?.depend(C)),n},set(e,r,n){if(s)return Reflect.set(e,r,n),!0;O(n)&&(n=V(n));let i=!1===function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,r),o=Reflect.get(e,r)!==n;return Reflect.set(e,r,n),(o||"length"===r&&Array.isArray(e))&&K(t,r),Array.isArray(e)?"length"===r&&K(t,C):i&&K(t,C),!0},deleteProperty:(e,s)=>(Reflect.deleteProperty(e,s),!1===Array.isArray(e)&&K(t,C),!0)});var n,i,o,a;n=e,i=A,o=r,a=!1,Object.defineProperty(n,i,{value:o,enumerable:a,writable:!0,configurable:!0});for(let t in e){let s=e[t];O(s)&&!$(s)&&(r[t]=S(e[t]))}return s=!1,r}function $(e){if(i(e))return Reflect.get(e,R)}function V(e,t=!1){if(!1===O(e))throw new Error("当前传入的数据不是正确的数据类型,必须是数组或者对象");return S(t?h(e):e)}function P(e,t,s){let r=s;O(s)&&(r=V(s));let n=new w;Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:()=>(n.depend(t),$(r)?.depend(C),r),set:e=>{e!==r&&(O(e)&&(e=V(e)),r=e,K(n,t))}})}const T=Symbol.for("JOKER_SHALLOW_OBSERVER");let D=!1,_=new Map;function K(e,t){if(!1===D)e.notify(t);else{let s=_.get(e);void 0===s&&(s=[],_.set(e,s)),!1===s.includes(t)&&s.push(t)}}const k="数据观察",W=Symbol.for("JOKER_BREAK_WATCH_UPDATE");class I{ob;updateCallBack;forceCallBack;getter;value;isDestroy=!1;updating=!1;runRelations=new Map;relations=new Map;constructor(e,t,s,r){if(this.ob=e,this.updateCallBack=t,this.forceCallBack=r,void 0===e)throw new Error("无法对underfind进行变更观察");if(void 0===s)this.getter=e=>e;else if("function"==typeof s)this.getter=s;else{let e=function(e){if(/[^\w.$]/.test(e))return;let t=e.split(".");return function(e){let s=e;return t.forEach((e=>{s&&(s=s[e])})),s}}(s);if(void 0===e)throw new Error(s+"解析失败,无法明确读取表达式,请检查expOrFn参数,或采用function模式");this.getter=e}void 0===this.getter&&x.error(k,"getter创建失败",arguments),this.value=this.getValue()}getValue(){if(void 0===this.getter)return;w.target=this;let e,t="function"==typeof this.ob?this.ob():this.ob;try{e=this.getter.call(t,t)}catch(e){throw x.error(k,`获取值失败,执行方法:${this.getter.toString()}`),e}return w.target=void 0,this.clearnDeps(),e}addDep(e,t){let s=this.runRelations.get(e);if(void 0===s||!1===s.includes(t)){s=s||[],s.push(t),this.runRelations.set(e,s);let r=this.relations.get(e);void 0!==r&&!1!==r.includes(t)||e.addWatcher(t,this)}}update(){if(this.updating)return;let e=this.getValue();if(e===W)return;let t=this.value;if(this.forceCallBack||e!==t||i(e)){this.value=e;let s=e!==t&&d(e,t,!0);if(s&&!this.forceCallBack)return;this.updating=!0;try{this.updateCallBack(e,t,s,this)}catch(e){throw e}finally{this.updating=!1}}}destroy(){this.relations.forEach(((e,t)=>{for(let s of e)t.removeWatcher(s,this)})),this.isDestroy=!0,this.relations.clear(),this.runRelations.clear(),this.ob=void 0,this.value=void 0,this.getter=void 0}clearnDeps(){this.relations.forEach(((e,t)=>{let s=this.runRelations.get(t);for(let r of e)s?!1===s.includes(r)&&t.removeWatcher(r,this):t.removeWatcher(r,this)})),this.relations.clear(),this.relations=this.runRelations,this.runRelations=new Map}}exports.IContainer=void 0,function(e){let t=new Map;e.bind=function(e){return{to:s=>{if(t.has(e))throw new Error(`TagId:${e.toString()}已注入实现类,请勿重复注入。`);t.set(e,s)}}},e.get=function(e,...s){let r=t.get(e);if(r)return new r(...s)}}(exports.IContainer||(exports.IContainer={}));const L=Symbol.for("JOKER_VNODE_TAG");exports.VNode=void 0,function(e){e.PARSERKEY=Symbol.for("JOKER_PARSER_KEY");class t{parent;[L]=!0;static;output;[e.PARSERKEY];childrens;ref;sleep=!1;constructor(e){this.parent=e}get prev(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)-1]}get next(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)+1]}closest(e,t){if(!0===e(this))return this;let s=this.parent;for(;s;){if(!0===e(s))return s;if(!0===t?.(s))break;s=s.parent}}find(e,t,s,r,n){let i=n??[];if(r??=this.childrens,r)for(let n of r){(!0!==e(n)||(i.push(n),s))&&(!0!==t?.(n)&&n.childrens&&this.find(e,t,s,n.childrens,i))}return i}contains(e,t){if(t??=this.childrens,t)for(let s of t){if(!0===e(s))return!0;if(s.childrens&&s.childrens.length&&this.contains(e,s.childrens))return!0}return!1}first(e,t){if(t??=this.childrens,t)for(let s of t){if(!0===e(s))return s;if(s.childrens&&s.childrens.length){let t=this.first(e,s.childrens);if(t)return t}}}}e.Node=t;e.Root=class extends t{childrens=[];component;constructor(){super()}};e.Text=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Html=class extends t{html;notShadow;static=!0;constructor(e,t,s){super(t),this.html=e,this.notShadow=s}};e.Comment=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Element=class extends t{tagName;static=!0;attributes={};childrens=[];events=[];_assistEventCache;constructor(e,t){super(t),this.tagName=e}};e.Component=class extends t{name;component;events=[];propValues={};keepalive;get firstElement(){if(this.childrens){let t=s=>{for(let r of s){if(r instanceof e.Element)return r;if(r.childrens){let e=t(r.childrens);if(e)return e}}};return t(this.childrens)}}get rootElements(){if(this.childrens){let t=[],s=r=>{for(let n of r)n instanceof e.Element||n instanceof e.Html?t.push(n):n.childrens&&s(n.childrens)};return s(this.childrens),t}return[]}};e.Condition=class extends t{cmdName;result=!1;childrens=[];isShow=!1;constructor(e,t){super(t),this.cmdName=e}};e.List=class extends t{childrens=[]};e.ListItem=class extends t{ob;childrens=[];constructor(e,t){super(t),this.ob=e}};e.RenderSection=class extends t{id="unknown";params=[];section;childrens=[];ob;constructor(e,t){super(t),"string"==typeof e?this.id=e:this.section=e}}}(exports.VNode||(exports.VNode={}));const M="DOM渲染",j=["script","style","textarea","pre"];let H=0;const Y=["svg","defs","use","rect","circle","ellipse","line","polyline","polygon","path","text","g"];function B(e,t,s){return`${e}-${t}-${s}`}function J(e,t,s,r){e._assistEventCache??=[],e._assistEventCache.push([t,s]),document.body.addEventListener(t,s,r)}function G(e,t,s){e._assistEventCache&&t&&s?(p(e._assistEventCache,(e=>e[0]===t&&e[1]===s)),document.body.removeEventListener(t,s)):(e._assistEventCache?.forEach((e=>{document.body.removeEventListener(e[0],e[1])})),e._assistEventCache&&(e._assistEventCache.length=0),e._assistEventCache=void 0)}exports.Render=void 0,function(e){e.IRENDERIOCTAGID=Symbol.for("JOKER_IRENDERIOC_TAGID"),e.ROOT_CONTAINER="";e.DomRender=class{elements;constructor(){this.elements=document.createDocumentFragment()}mount(e){if(e instanceof Element)e.appendChild(this.elements);else if(e instanceof exports.VNode.Component)if(e.parent)if(e.output){let t=e.output,s=U(e)||t.parentNode;s&&s.insertBefore(this.elements,t)}else x.error(M,"组件挂载渲染时发现该节点未定义DOM定位节点",e);else x.error(M,"mount子组件时,发现该组件无父级",e);else x.error(M,"mount只支持挂载到Element或VNode.Node类型数据中",e)}appendNode(e,t){if(this.renderNode(e),e.output){let s=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];for(let r of s)this.appendNodeChildren(e,r,e.parent,t)}else x.error(M,"未找自身节点的el属性,无法进行dom挂载",e)}updateNode(e,t){if(e instanceof exports.VNode.Element)for(let t in e.attributes){let s=e.attributes[t];this.setAttribute(e.output,t,s)}else e instanceof exports.VNode.Text?e.parent&&e.parent instanceof exports.VNode.Element&&j.includes(e.parent.tagName)?(this.removeNode(e),this.appendNode(e)):e.output.textContent=b(e.text||""):e instanceof exports.VNode.Html?e.notShadow?e.output.innerHTML=e.html:e.output.root.innerHTML=e.html:x.error(M,`该节点不支持${t}的更新`,e)}removeNode(e,t){let s=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];s?.forEach((e=>{e?.remove()})),t||(e instanceof exports.VNode.Element&&G(e),e.output=void 0)}destroy(){this.elements=void 0}elementToEnter(e,t,s,r){e.output&&this.transitionFrame(e,t,"enter",s,r)}elementToLeave(e,t,s,r){e.output&&this.transitionFrame(e,t,"leave",s,r)}triggerEvent(e,t,s){let r=[];for(let n of e.events){let[i,o]=n;if(i===t){let t=o.modifiers?.includes("self"),a=o.modifiers?.includes("outside");if(t||a){x.warn(M,"事件修饰符:self、outside在组件事件中无法使用,组件无法确认元素",e);continue}let h=s.event;if((h instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(i)||h instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(i))&&!1===X(h,o.modifiers))continue;if(o.callBack(s),o.modifiers?.includes("prevent")&&s.preventDefault(),o.modifiers?.includes("once")&&r.push(n),o.modifiers?.includes("stop"))return s.stopPropagation(),!1}}r.length&&r.forEach((t=>{c(e.events,t)}))}transitionFrame(e,t,s,r,n){q(e,B(t,s,"from")),r||="transition";let i=e.output.__TRANSITION_EVNETID__=H++;requestAnimationFrame((()=>{requestAnimationFrame((()=>{if(!e.output)return;q(e,B(t,s,"active")),z(e,B(t,s,"from")),q(e,B(t,s,"to"));let o=function(e,t){let s=window.getComputedStyle(e),r=e=>(s[e]||"").split(", ");if("transition"===t){let e=r("transitionDelay"),t=r("transitionDuration"),s=Q(e,t);if(s>0)return{timeout:s,count:t.length}}else if("animation"===t){let e=r("animationDelay"),t=r("animationDuration"),s=Q(e,t);if(s>0)return{timeout:s,count:t.length}}}(e.output,r);if(!o)return void n?.();let a=0,h=()=>{z(e,B(t,s,"to")),z(e,B(t,s,"active")),e.output&&(e.output.removeEventListener(`${r}end`,d),i===e.output.__TRANSITION_EVNETID__&&n?.())},d=t=>{t.target===e.output&&++a>=o.count&&h()};setTimeout((()=>{a<o.count&&h()}),o.timeout+1),e.output?.addEventListener(`${r}end`,d)}))}))}renderNode(e){if(!e.output)if(e instanceof exports.VNode.Text)e.parent&&e.parent instanceof exports.VNode.Element&&j.includes(e.parent.tagName)?e.output=this.parserHtml(e.text):e.output=document.createTextNode(b(e.text||""));else if(e instanceof exports.VNode.Html)if(e.notShadow){let t=document.createElement("joker-html-container");t.JOKER_NODE=e,t.innerHTML=e.html,e.output=t}else{let t=document.createElement("joker-html-shadow");t.JOKER_NODE=e,t.style.lineHeight="1",t.root.innerHTML=e.html,e.output=t}else if(e instanceof exports.VNode.Element){let t,s=e.tagName.toLowerCase();"svg"===s||Y.includes(s)||e.parent?.inSvg?(e.inSvg=!0,t=document.createElementNS("http://www.w3.org/2000/svg",e.tagName)):t=document.createElement(e.tagName);for(let s in e.attributes)this.setAttribute(t,s,e.attributes[s]);t.JOKER_NODE=e,e.output=t,e.events.some((e=>"click"===e[0]&&e[1].modifiers?.includes("outside")))?setTimeout((()=>{this.initElementEvents(t,e)})):this.initElementEvents(t,e)}else e instanceof exports.VNode.Comment?e.output=document.createComment(e.text):e.output=document.createTextNode("")}initElementEvents(e,t){for(let[s,r]of t.events){let n=r.modifiers?.includes("self"),i=r.modifiers?.includes("outside");n&&i&&(x.warn(M,"事件修饰符:self、outside不可以同时存在,将按照self处理",t),i=!1);let o,a=function(o){if(!(t.sleep||n&&o.target!==e)){if(i){if(o.target===e||e.contains(o.target))return;if(!1===document.contains(o.target))return;if(t.contains((e=>(e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output]).includes(o.target))))return!0}(o instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(s)||o instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(s))&&!1===X(o,r.modifiers)||(r.callBack({eventName:s,event:o,target:t,preventDefault:()=>o.preventDefault(),stopPropagation:()=>o.stopPropagation(),data:void 0}),r.modifiers?.includes("prevent")&&o.preventDefault(),r.modifiers?.includes("stop")&&o.stopPropagation(),r.modifiers?.includes("once")&&(i?G(t,s,a):e.removeEventListener(s,a)))}};r.modifiers?.includes("passive")&&(o={passive:!0}),i?J(t,s,a,o):e.addEventListener(s,a,o)}}parserHtml(e){var t=document.createElement("div");return t.innerHTML=e,t.childNodes}isCommandGroup(e){return e instanceof exports.VNode.Component||e instanceof exports.VNode.Condition||e instanceof exports.VNode.List||e instanceof exports.VNode.ListItem||e instanceof exports.VNode.RenderSection}appendNodeChildren(e,t,s,r){let n=U(e);if(n)n.appendChild(t);else if(void 0===s)this.elements?.appendChild(t);else if(s)if(s instanceof exports.VNode.Root){let e=s.parent;if(e&&e instanceof exports.VNode.Component&&e.output){let s=e.output,r=s?.parentNode;if(r)return void r.insertBefore(t,s)}this.elements?.appendChild(t)}else if(s instanceof exports.VNode.Element){let e=s.output;if(void 0===e)return;e.appendChild(t)}else if(this.isCommandGroup(s)){let n=s.output?.parentNode;if(void 0!==r&&s.childrens?.length&&n){let i=r-1;if(i<0){let s=ee(e);return void(s&&n.contains(s.output)?s.output.after(t):n.insertBefore(t,n.firstChild))}{let e=s.childrens[i];if(e){let s=e.output;if(s)return void s.after(t)}}}n&&n.insertBefore(t,s.output)}else x.error(M,"该节点不支持嵌套子集,请检查。",{node:e,parent:s})}setAttribute(e,t,s){if(e)if("boolean"!=typeof s){if("class"===t){if(Array.isArray(s)){let e=[];for(let t of s)if(i(t))for(let s in t)t[s]&&e.push(s);else t&&e.push(t);s=e.join(" ")}else if(i(s)){for(let t in s)s[t]?e.classList.add(t):e.classList.remove(t);return}}else if("style"===t&&i(s)){e.removeAttribute("style");for(let t in s){let r=!1;void 0!==s[t]&&!1!==s[t]||(r=!0);let n=String(s[t]);u(n)&&(r=!0),r||(e.style[t]=n)}return}s=(s??"").toString().trim(),"class"===t&&(s=s.split(/\s/).filter((e=>e.trim())).join(" ")),"value"===t&&"value"in e?e.value=s:"xlink:href"===t?e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s):e.setAttribute(t,s)}else s?e.setAttribute(t,""):e.removeAttribute(t)}}}(exports.Render||(exports.Render={}));const F={enter:"enter",backspace:"delete",tab:"tab",arrowup:"up",arrowdown:"down",arrowleft:"left",arrowright:"right",escape:"esc"," ":"space"};function X(e,t){if(e instanceof KeyboardEvent){if(void 0===e.key)return!1;for(let s in F)if(t?.includes(F[s])&&e.key.toLowerCase()!==s)return!1}else{if(t?.includes("left")&&0!==e.button)return!1;if(t?.includes("right")&&2!==e.button)return!1;if(t?.includes("middle")&&1!==e.button)return!1}return(!t?.includes("ctrl")||!1!==e.ctrlKey)&&((!t?.includes("alt")||!1!==e.altKey)&&(!t?.includes("shift")||!1!==e.shiftKey))}function q(e,t){e.output&&e.output.classList.add(t)}function z(e,t){e.output&&e.output.classList.remove(t)}function U(e){if(e instanceof exports.VNode.Element||e instanceof exports.VNode.Component){let t=e instanceof exports.VNode.Component?e.propValues["append-to"]:e.attributes["append-to"];if(t){if(t instanceof exports.VNode.Element)return t.output;if("string"==typeof t){exports.Render.ROOT_CONTAINER&&(t="body"===t?exports.Render.ROOT_CONTAINER:`${exports.Render.ROOT_CONTAINER} ${t}`);let e=document.querySelector(t);if(e)return e}x.warn(M,"appendTo类型不支持",{appendTo:t,node:e})}}}function Q(e,t){for(;e.length<t.length;)e.concat(e);return Math.max(...t.map(((t,s)=>Z(t)+Z(e[s]))))}function Z(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function ee(e){let t=e.prev;for(;t;){if(t instanceof exports.VNode.Element||t instanceof exports.VNode.Comment||t instanceof exports.VNode.Text||t instanceof exports.VNode.Component||t instanceof exports.VNode.Element)return t;t=t.prev}let s=e.parent;for(;s;){if(s instanceof exports.VNode.Element)return;let e=ee(s);if(e)return e;s=s.parent}}class te extends HTMLElement{root;constructor(){super(),this.root=this.attachShadow({mode:"open"})}}!customElements.get("joker-html-shadow")&&customElements.define("joker-html-shadow",te);const se={};const re="Global",ne="渲染核心";function ie(t){try{return new Function(e.EXPRESSHANDLERTAG,re,`return ${t};`)}catch{throw new Error("创建表达式运行方法时出现未知错误,表达式为"+t)}}class oe{ast;ob;parent;ext;ref="";watchers=[];node;isDestroy=!1;constructor(e,t,s,r){this.ast=e,this.ob=t,this.parent=s,this.ext=r}init(e){this.parser(e),this.afterParser()}beforeDestroy(e){}destroy(e){if(this.isDestroy=!0,this.clearWatchers(),this.parent.childrens&&this.node){(this.node instanceof exports.VNode.Element||this.node instanceof exports.VNode.Component)&&this.ext.removeRef(this.node);let t=()=>{this.parent&&this.node&&(this.beforeDestroy(e),this.destroyChildrens(e),this.node&&(this.ext.render?.removeNode(this.node),this.parent.childrens&&c(this.parent.childrens,this.node),this.notifyNodeWatcher("remove"),this.destroyOtherData()))};if(this.ext.nodeTransition(this.node,"leave",void 0,(()=>{t()})))return c(this.parent.childrens,this.node),void this.destroyChildrensWatcher(this.node);t()}else this.destroyOtherData()}destroyWathcers(){this.isDestroy=!0,this.clearWatchers(),this.destroyChildrensWatcher(this.node)}destroyOtherData(){this.node&&(this.node[exports.VNode.PARSERKEY]=void 0),this.node=void 0,this.parent=void 0}destroyChildrens(e){for(;this.node?.childrens?.length;){let t=this.node.childrens[0];t[exports.VNode.PARSERKEY]?t[exports.VNode.PARSERKEY].destroy(e):c(this.node.childrens,t)}}destroyChildrensWatcher(e){if(e?.childrens?.length)for(let t of e?.childrens)t[exports.VNode.PARSERKEY]&&(t[exports.VNode.PARSERKEY].clearWatchers(),this.destroyChildrensWatcher(t))}appendNode(e){this.parent?.childrens&&this.node&&!this.isDestroy&&(this.node[exports.VNode.PARSERKEY]=this,this.node instanceof exports.VNode.Element&&this.ob[De]&&(this.node.attributes["data-scoped-"+this.ob[De]]=void 0),this.ext.render?.appendNode(this.node,e),void 0===e?this.parent.childrens.push(this.node):this.parent.childrens.splice(e,0,this.node),this.notifyNodeWatcher("append"))}afterParser(){this.ext.nodeTransition(this.node,"enter")}notifyNodeWatcher(e,t){this.ext.notifyNodeWatcher(this.ref,this.node,e,t)}runExpress(e,t){try{return ie(e).call(t,t,se)}catch(s){x.error(ne,"运行表达式出现错误:"+e,{ob:t}),console.error(s)}}runExpressWithWatcher(e,t,s,r){if(this.isDestroy)return;let n="string"==typeof e?ie(e):e,i=new I((()=>{if(this.isDestroy||t[Pe])return W;try{return n.call(t,t,se)}catch(s){return x.error(ne,"运行表达式出现错误",{ob:t,express:e,node:this.node}),console.error(s),W}}),s,void 0,r);return this.addWatch(i),i.value===W?void 0:i.value}addWatch(e){!1===this.watchers.includes(e)&&this.watchers.push(e)}clearWatchers(){this.watchers.forEach((e=>{e.destroy()})),this.watchers.length=0}}class ae extends oe{parser(){this.node=new exports.VNode.Text(this.ast.text,this.parent),this.appendNode()}}class he extends oe{parser(){this.node=new exports.VNode.Comment(this.ast.text,this.parent),this.appendNode()}}class de extends oe{parser(){if(this.node=new exports.VNode.Condition(this.ast.kind,this.parent),"else"!==this.ast.kind){u(this.ast.condition)&&x.error("条件命令",`当前条件命令${this.ast.kind}没有判断条件,请检查`);let e=this.runExpressWithWatcher(this.ast.condition,this.ob,(e=>{let t=!!e;if(this.node?.result!==t){if(this.node.result=t,!1===t&&this.node?.isShow)this.destroyChildrens(!0);else if(t&&!this.node?.isShow){let e=this.getElseNode();if(e&&e.isShow&&e.childrens?.length){let t=e[exports.VNode.PARSERKEY];t&&t instanceof de&&t.renderConditionChildren()}}this.reloadAllCondition()}}));this.node.result=!!e}this.appendNode(),this.renderConditionChildren()}renderId;getElseNode(){let e=this.node?.next;for(;e&&e instanceof exports.VNode.Condition&&"if"!==e.cmdName;){if("else"===e.cmdName)return e;e=e.next}}renderConditionChildren(){let e=!1;return this.getPrevIfResult()?e=!1:"else"===this.ast.kind?e=!0:(this.node.result=!!this.runExpress(this.ast.condition,this.ob),this.node.result&&(e=!0)),e!==this.node.isShow&&(this.node.isShow=e,this.destroyChildrens(!0),e&&this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob),!0)}getPrevIfResult(){if("if"===this.ast.kind)return!1;let e=this.node?.prev;for(;e&&e instanceof exports.VNode.Condition;){if(e.result)return!0;if("if"===e.cmdName)break;e=e.prev}return!1}reloadAllCondition(){if(this.renderConditionChildren()){let e=this.node?.next;for(;e&&e instanceof exports.VNode.Condition&&"if"!==e.cmdName;){let t=e[exports.VNode.PARSERKEY];t&&t instanceof de&&t.renderConditionChildren(),e=e.next}}let e=this.node?.next;for(this.node?.result||this.destroyChildrens(!0);e&&e instanceof exports.VNode.Condition&&"if"!==e.cmdName;){let t=e[exports.VNode.PARSERKEY];t&&t instanceof de&&t.renderConditionChildren(),e=e.next}}}class le extends oe{parser(){this.node=new exports.VNode.List(this.parent),this.appendNode(),this.renderChildrens()}renderChildrens(){switch(this.ast.keyType){case"condition":this.renderConditionChildrens();break;case"in":case"of":this.renderInOrOfChildrens()}}renderConditionChildrens(){let t=this.ast.param,s=Object.create(this.ob),r=!!this.runExpressWithWatcher(function(t,s,r){try{return new Function(e.EXPRESSHANDLERTAG,`${e.EXPRESSHANDLERTAG}.${t}=${s}; return ${r};`)}catch{throw new Error(`For循环命令,表达式运行依赖采集出现未知错误,其中letKey:${t},keyVal:${s},condition:${r}`)}}(t.letKey,t.defaultKeyVal,t.condition),s,(()=>{this.clearWatchers(),this.renderChildrens()}),!0),n=0;for(;r;){let e=Object.create(this.ob);P(e,t.letKey,s[t.letKey]);let i=n++;this.renderItem(e,i),this.runExpressWithWatcher((()=>s[t.letKey]),s,(async(s,r,n,o)=>{await Promise.resolve(),o.isDestroy||(e[t.letKey]=s,n||this.updateListItemOb(e,i))}),!0),this.runExpress(t.step,s),r=!!this.runExpress(t.condition,s)}this.destroyOldChildrens(n)}renderInOrOfChildrens(){let e=this.ast.param,t=this.runExpressWithWatcher(e.dataKey,this.ob,(()=>{this.clearWatchers(),this.renderChildrens()})),s=0;if(t&&(Array.isArray(t)||a(t)))for(let r in t){let n=Object.create(this.ob),i=Array.isArray(t)?Number(r):r;e.indexKey&&P(n,e.indexKey,i),e.itemKey&&P(n,e.itemKey,t[r]);let o=s++;this.renderItem(n,o,e.indexKey),e.itemKey&&this.runExpressWithWatcher((()=>t[i]),t,(async(s,r,a,h)=>{await Promise.resolve(),h.isDestroy||i in t&&(n[e.itemKey]=s,a||this.updateListItemOb(n,o))}),!0)}this.destroyOldChildrens(s)}findIndexByIndex(e,t,s){let r=-1;if(this.node)for(let n=t;n<this.node.childrens.length;n++)if(this.checkObEqual(e,this.node.childrens[n]?.ob,s?[s]:void 0)){r=n;break}return r}renderItem(e,t,s){if(!this.ast.childrens?.length||!this.node)return;let r=this.node.childrens?.[t];if(r){if(this.checkObEqual(e,r.ob,s?[s]:void 0))return void(s&&r.ob[s]!==e[s]&&(r.ob[s]=e[s]));let n=this.findIndexByIndex(e,t+1,s);if(n>-1){if(t+1===n)this.node.childrens?.[t]?.[exports.VNode.PARSERKEY]?.destroy();else for(let e=0;e<n-t-1;e++)this.node.childrens?.[t]?.[exports.VNode.PARSERKEY]?.destroy();return this.renderItem(e,t,s)}return new ce(this.ast,e,this.node,this.ext).init(t)}return new ce(this.ast,e,this.node,this.ext).init()}updateListItemOb(e,t){if(!this.ast.childrens?.length||!this.node)return;let s=this.node.childrens?.[t];o(e,((e,t)=>{s.ob[e]!==t&&(s.ob[e]=t)}))}destroyOldChildrens(e){if(this.node)for(;this.node.childrens.length>e;){let e=this.node.childrens.pop();if(!e)break;e[exports.VNode.PARSERKEY]?.destroy(!1)}}checkObEqual(e,t,s){let r=!0;return void 0!==t&&(o(e,((e,n)=>{s?.includes(e)||t?.[e]===n||(r=!1)})),r)}}class ce extends oe{parser(e){this.node=new exports.VNode.ListItem(this.ob,this.parent),this.appendNode(e),this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}}class pe extends oe{parser(){if(u(this.ast.cmdName))throw x.error("模板指令","解析AST转换VNode时发生错误,未找到指令名称",this.ast),new Error("解析AST转换VNode时发生错误,未找到指令名称");let t;if("Html"===this.ast.cmdName||"Text"===this.ast.cmdName?t=this.ast.param:this.ast.cmdName.startsWith(re+".")?t=`${this.ast.cmdName}(${this.ast.param})`:this.ast.cmdName in this.ob&&"function"==typeof this.ob[this.ast.cmdName]&&(t=`${e.createFuntionBody(this.ast.cmdName)}(${this.ast.param})`),t){let e=this.runExpressWithWatcher(`[${t}]`,this.ob,(e=>{this.changeValue(e?.[0])}));return e||=[],"Html"===this.ast.cmdName?this.node=new exports.VNode.Html(ue(e[0]),this.parent,e[1]):this.node=new exports.VNode.Text(ue(e[0]),this.parent),void this.appendNode()}throw new Error(`未找到命令:${this.ast.cmdName}`)}changeValue(e){this.node&&(this.node instanceof exports.VNode.Html?this.node.html=ue(e):this.node.text=ue(e),this.ext.render?.updateNode(this.node))}}function ue(e){return null==e||"function"==typeof e?"":e.toString()}const fe="default";class me extends oe{parser(){let e=this.transformParam();this.node=new exports.VNode.RenderSection(e.id,this.parent),this.node.params=e.params,this.node.section??=this.ob.$sections?.[e.id],this.appendNode(),this.node.section&&(this.node.section.params?(this.node.ob=Object.create(this.node.section.ob||this.ob),this.node.section.params?.forEach(((e,t)=>{P(this.node.ob,e,this.node.params[t])}))):this.node.ob=this.node.section.ob||this.ob,(this.node.section.parser||this.ext).parserNodes(this.node.section.asts,this.node,this.node.ob))}transformParam(){if(this.ast.param){let e=this.runExpressWithWatcher(`[${this.ast.param}]`,this.ob,(e=>{let t=e?.[0]||fe;if("string"==typeof t&&t!==this.node.id)throw new Error("section id 不可动态变更");this.node.params=e.slice(1),this.node?.ob&&this.node.section&&this.node.section.params?.forEach(((e,t)=>{this.node?.ob&&this.node.ob[e]!==this.node.params[t]&&(this.node.ob[e]=this.node.params[t])}))}),!0);return{id:e?.[0]||fe,params:e?.slice(1)||[]}}return{id:fe,params:[]}}}const Ee="组件解析";function ye(e,t){return!!t.components[e]||!!Me(e)}class Ne extends oe{loadPromise;parser(){if(this.ast.node)return this.node=this.ast.node,this.node.parent=this.parent,this.initPropData(),void(this.node&&(this.appendNode(),this.node.component?.$mount(this.node)));this.node=new exports.VNode.Component(this.parent),this.initPropData(),this.appendNode(),this.initEvent(),this.loadPromise=this.renderChildren(),this.ext.promiseQueue.add(this.loadPromise),this.loadPromise.finally((()=>{this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0)}))}get canReload(){return"tagName"in this.ast||"function"==typeof this.ast.component}reload(){this.canReload?(this.beforeDestroy(),this.renderChildren()):x.warn(Ee,"当前组件无法实现reload",this.node)}initPropData(){for(let e of this.ast.attributes)if("ref"!==e.name)if("keep-alive"===e.name&&"false"!==e.value&&(this.node.keepalive=!0),e.express){let t=this.runExpressWithWatcher(e.express,this.ob,(t=>{this.node.propValues[e.name]=t,this.notifyNodeWatcher("update",e.name)}),!0);this.node.propValues[e.name]=t}else this.node.propValues[e.name]=e.value;else{if(u(e.value)){x.warn(Ee,"元素的ref值不可以为空");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}this.node.propValues=V(this.node.propValues)}initEvent(){this.ast.events.forEach((e=>{let t=e.functionName?this.ob[e.functionName]:void 0;void 0===e.functionName?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:m}]):t&&"function"==typeof t?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:s=>{let r=[];e.functionParam&&(r=this.runExpress(`[${e.functionParam}]`,this.ob)),t.call(this.ext.ob,s,...r)}}]):x.error(Ee,`${"tagName"in this.ast?this.ast.tagName:""}元素中${e.name}事件所指定的回调(${e.functionName})方法未找到,请检查`)}))}async renderChildren(){return new Promise((async(e,t)=>{if("tagName"in this.ast){let e=this.ob.components[this.ast.tagName]||Me(this.ast.tagName);if(void 0===e)return void x.error(Ee,`渲染组件失败,未找到名称为'${this.ast.tagName}'的私有组件/全局组件`);if(_e in e||(e=(await e()).default),!this.node)return;{let t=this.getSections();this.node.name=this.ast.tagName,this.node.component=new e(this.node?.propValues,t,this.node?.keepalive)}}else if("function"==typeof this.ast.component){let e=this.getSections();this.node.component=new this.ast.component(this.node?.propValues,e,this.node?.keepalive)}else this.node.component=this.ast.component;if(!this.node)return;!this.node.name&&"name"in this.node.component&&this.node.component.name&&"string"==typeof this.node.component.name&&(this.node.name=this.node.component.name);let s=this,r=function(){s.loadPromise&&e(void 0)};if(this.node.component.$on("mounted",(()=>{this.node?.component.$off("beforeDestroy",r),e(void 0)})),this.node.component.$on("beforeDestroy",r),this.node.component.$mount(this.node),!this.node)return;let n=this.node?.component;n.isKeepAlive&&(this.ast.node=this.node)}))}getSections(){let t={},s=[];return this.ast.childrens.forEach((t=>{if(t.type===e.AST.NodeType.COMMAND&&"if"===t.cmdName&&t.childrens){let r=t,n=t.childrens.some((t=>t.type===e.AST.NodeType.COMMAND&&"section"===t.cmdName)),i=r.condition.startsWith(e.EXPRESSHANDLERTAG+".$sections");if(i){return this.runExpress(r.condition,this.ob)?void s.push(...t.childrens):void 0}if(n&&"if"===r.kind&&!i)return void x.warn(Ee,"在解析section时,发现该section包裹在一个条件语句中,该条件语句仅支持以$sections进行if判断,已作排出")}s.push(t)})),s.forEach((s=>{if(s.type===e.AST.NodeType.COMMAND&&"section"===s.cmdName){let e=s,r=e.id||fe;/^(\'|\")(.*?)((\'|\"))$/.test(r)&&(r=r.slice(1,-1)),t[r]=t[r]||{asts:[],ob:this.ob,params:e.paramKeys,parser:this.ext},t[r].asts.push(...s.childrens||[])}else t[fe]=t[fe]||{asts:[],ob:this.ob,parser:this.ext},t[fe].asts.push(s)})),t}beforeDestroy(e){this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0),!0===e&&this.node?.component?.isKeepAlive?this.node?.component?.$destroy():(this.node?.component?.$destroy(!0),this.ast.node=void 0)}}class ve extends oe{parser(){this.node=new exports.VNode.Element(this.ast.tagName,this.parent),this.initAttributes(),this.initEvents(),this.appendNode(),this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}initAttributes(){for(let e of this.ast.attributes)if("ref"!==e.name)if(e.express){let t=t=>{this.node&&(this.node.attributes[e.name]=this.transformAttrVal(t),this.ext.render?.updateNode(this.node,e.name),this.notifyNodeWatcher("update",e.name))},s=this.runExpressWithWatcher(e.express,this.ob,(e=>{t(e)}));this.node.attributes[e.name]=this.transformAttrVal(s)}else this.node.attributes[e.name]=e.value;else{if(u(e.value)){x.warn("Element解析","元素的ref值不可以为空");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}}initEvents(){for(let e of this.ast.events){let t=e.functionName?this.ob[e.functionName]:void 0;if(!(void 0===e.functionName||t&&"function"==typeof t))throw new Error(`${this.ast.tagName}元素中${e.name}事件所指定的回调(${e.functionName})方法未找到,请检查`);this.node?.events.push([e.name,{modifiers:e.modifiers,callBack:s=>{if(void 0===t)return;let r=[];e.functionParam&&(r=this.runExpress(`[${e.functionParam}]`,this.ob)),t&&t.call(this.ext.ob,s,...r)}}])}}transformAttrVal(e){return void 0!==e&&("string"==typeof e||"boolean"==typeof e||"function"!=typeof e&&Object.prototype.toString()?e:void 0)}}class xe{asts;ob;root=new exports.VNode.Root;refs={};sleeped=!1;promiseQueue=new Set;nodeWatcherEvents={};render;constructor(e,t,s){this.asts=e,this.ob=t,this.root.component=t,this.render=exports.IContainer.get(exports.Render.IRENDERIOCTAGID)??new exports.Render.DomRender,s&&s instanceof exports.VNode.Node&&(this.root.parent=s,s.childrens??=[],s.childrens.push(this.root))}parser(){this.parserNodes(this.asts,this.root)}mount(e){this.sleeped&&this.weakup(),this.render?.mount(e)}parserNodes(t,s,r){if(0!==this.asts.length)for(let n of t)if(n.type===e.AST.NodeType.TEXT)new ae(n,r??this.ob,s,this).init();else if(n.type===e.AST.NodeType.COMMENT)new he(n,r??this.ob,s,this).init();else if(n.type===e.AST.NodeType.COMPONENT)new Ne(n,r??this.ob,s,this).init();else if(n.type===e.AST.NodeType.ELEMENT){let e=n;ye(e.tagName,r??this.ob)?new Ne(e,r??this.ob,s,this).init():new ve(e,r??this.ob,s,this).init()}else if(n.type===e.AST.NodeType.COMMAND){let e=n;switch(e.cmdName){case"if":case"elseif":case"else":new de(e,r??this.ob,s,this).init();break;case"for":new le(e,r??this.ob,s,this).init();break;case"RenderSection":new me(e,r??this.ob,s,this).init();break;case"section":break;default:new pe(e,r??this.ob,s,this).init()}}}addRef(e,t){this.refs[e]=this.refs[e]||[],this.refs[e].push(t),t.ref=e}removeRef(e){for(let t in this.refs)this.refs[t].includes(e)&&c(this.refs[t],e)}addNodeWatcher(e,t){this.nodeWatcherEvents[e]=this.nodeWatcherEvents[e]||[],this.nodeWatcherEvents[e].push(t)}removeNodeWatcher(e,t){c(this.nodeWatcherEvents[e]||[],t)}notifyNodeWatcher(e,t,s,r){this.nodeWatcherEvents[e]?.forEach((e=>{e(t,s,r)}))}sleep(e){let t=e||this.root;t.childrens?.forEach((e=>{let t=()=>{e.childrens&&this.sleep(e),e.sleep=!0,this.render?.removeNode(e,!0)};this.nodeTransition(e,"leave",void 0,(()=>{t()}))||t()})),void 0===e&&(this.sleeped=!0)}weakup(e){let t=e||this.root;t.childrens?.forEach((e=>{e.sleep=!1,this.render?.appendNode(e),e.childrens&&this.weakup(e),this.nodeTransition(e,"enter")})),void 0===e&&(this.sleeped=!1)}destroy(e){for(;this.root.childrens.length;){let t=this.root.childrens[0];t[exports.VNode.PARSERKEY]?t[exports.VNode.PARSERKEY].destroy(e):c(this.root.childrens,t)}this.render.destroy(),this.refs={},this.root.childrens.length=0,this.nodeWatcherEvents={},this.asts.length=0}destroyWathcers(){for(let e of this.root.childrens)e[exports.VNode.PARSERKEY]&&e[exports.VNode.PARSERKEY].destroyWathcers()}reSetAsts(e,t){this.destroy(t),this.render=exports.IContainer.get(exports.Render.IRENDERIOCTAGID)??new exports.Render.DomRender,this.asts=e}nodeTransition(e,t,s,r,n){if(e&&e.parent?.childrens&&(e instanceof exports.VNode.Element||e instanceof exports.VNode.Component)){let i=function(e){if(e instanceof exports.VNode.Element||e instanceof exports.VNode.Component){let t=e instanceof exports.VNode.Element?e.attributes:e.propValues;return{name:t["transition-name"],type:t["transition-type"]}}}(e);if(s??=i?.name,n??=i?.type,!s)return!1;let o=ge(e);if(o)return"enter"===t?this.render.elementToEnter(o,s,n,(()=>{let t=e[exports.VNode.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-enter"),r?.()})):this.render.elementToLeave(o,s,n,(()=>{let t=e[exports.VNode.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-leave"),r?.()})),!0;x.warn("渲染核心","在执行node动画时,发现数据不完备,请检查")}return!1}}function ge(e){if(e instanceof exports.VNode.Element)return e;if(e.childrens&&e.childrens.length)for(let t of e.childrens)return t instanceof exports.VNode.Element?t:ge(t)}function be(e,t,s){if(void 0===t)return;let r=Array.isArray(s)?s:[s];for(let e of r){if(e===Array&&t instanceof Array)return t;if(typeof t===e.name.toLocaleLowerCase())return t}switch(r[0]){case Number:let e=Number(t);if(!1===isNaN(e))return e;break;case String:return String(t)}throw new Error(`props中${e.toString()}的类型不符合约束类型`)}function we(e,t,s){let r,n,i;if("symbol"!=typeof t&&(r=f(t)),t in e?n=e[t]:r&&(n=e[r]),s&&(t in s?i=s[t]:r&&r in s&&(i=s[r])),void 0!==i){if(a(i)&&("type"in i||"required"in i||"default"in i||"validate"in i)){let e=i;if(e.required&&void 0===n)throw new Error(`props中key:${t.toString()}是必须项,请检查`);if(e.type&&(n=be(t,n,e.type)),e.validate&&!1===e.validate(n))throw new Error(`props中key${t.toString()}的值校验错误`);n=n??e.default}else n=Re(i)?be(t,n,i):n??i;return n}return n}function Re(e){return!![String,Array,Number,Object,Function,Boolean].includes(e)||e instanceof Array&&Re(e[0])}function Ae(e,t){if(!e.constructor)return!1;let s=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);return s&&s.get}const Ce="组件",Oe=Symbol.for("JOKER_PROPS_DATA_KEY"),Se=Symbol.for("JOKER_PROPS_DATA_PROXY"),$e=Symbol.for("JOKER_PRIVATE_WATCHERS"),Ve=Symbol.for("JOKER_EVENT_DATA_KEY"),Pe=Symbol.for("JOKER_IS_DESTROY"),Te=Symbol.for("JOKER_PARSER_TEMPLATE_TARGET"),De=Symbol.for("JOKER_SCOPE_ID"),_e=Symbol.for("JOKER_COMPONENT_TAG"),Ke=Symbol();let ke=["constructor","$mount","$nodeTransition","$destroy","$getRef","$getRefs","$syncProp","$watchNode","$watch","$on","$off","$trigger","$render","created","mounted","beforeDestroy","sleeped","wakeup","destroyed"];class We{$sections;isKeepAlive;static[_e]=!0;[De];model={};template;$root;isSleeped=!1;components={};propsOption;[Oe]={};[Te];[Se];[$e]=[];[Ve]=new Map;[Pe]=!1;[Ke]=!1;constructor(e,t={},s){this.$sections=t,this.isKeepAlive=s,this[Oe]=e||{}}get props(){if(void 0===this[Se]){let e=this;this[Se]=new Proxy(e[Oe],{get:(t,s)=>we(e[Oe],s,e.propsOption),set(){throw new Error("props 参数不允许变更,只允许单向数据传递")}})}return this[Se]}$mount(e){if(!1===this[Ke]){let e=()=>{let e=[],t=Object.getPrototypeOf(this);for(;null!==t&&t!==Object.prototype;)Object.getOwnPropertyNames(t).forEach((s=>{!1!==ke.includes(s)||Ae(t,s)||"function"!=typeof t[s]||t[s].prototype?.hasOwnProperty("constructor")||e.push(s)})),t=Object.getPrototypeOf(t);return e};for(let t of e())this[t]=this[t].bind(this);this[Ke]=!0}if(this.$root=e,this.isKeepAlive&&this.isSleeped)return this.isSleeped=!1,this[Te]&&this.$root?(this[Te].mount(this.$root),this.wakeup(),this.$trigger("wakeup"),this.$rootVNode&&He(this.$rootVNode),this):(x.error(Ce,"当前组件在唤醒时,发现渲染处理程序已被销毁,无法进行唤醒操作",[this,this.$root]),this);this.isSleeped=!1,this.model=V(this.model);let t=this.created(),s=async()=>{this.$trigger("created"),this.template&&this.$render(),await this.$nextUpdatedRender(),this[Pe]||(await this.mounted(),this[Pe]||this.$trigger("mounted"))};return t&&t instanceof Promise?t.then((()=>{this[Pe]||s()})):s(),this}$nextUpdatedRender(e){if(this[Pe])return;let t=[...this[Te]?.promiseQueue||[]],s=this.$rootVNode?.find((e=>e instanceof exports.VNode.Component));if(s?.forEach((e=>{e?.component&&t.push(...e.component[Te]?.promiseQueue||[])})),t.length)return Promise.all(t).finally((()=>{this[Pe]||e?.()}));this[Pe]||e?.()}$nodeTransition(e,t,s,r,n){if("string"==typeof e){let t=this.$getRef(e);if(!t)return void x.error(Ce,`执行节点动画是找不到ref=${e}的节点`);e=t}this[Te]?.nodeTransition(e,t,s,r,n)}$destroy(e){if(!e&&this.isKeepAlive)return this[Te]?.sleep(),this.isSleeped=!0,this.sleeped(),this.$trigger("sleeped"),void(this.$rootVNode&&je(this.$rootVNode));this[Pe]=!0;for(let e of this[$e])e.destroy();this[$e].length=0,this[Te]?.destroyWathcers(),this.beforeDestroy(),this.$trigger("beforeDestroy"),this[Te]?.destroy(),this[Te]=void 0,this.template&&Array.isArray(this.template)&&(this.template.length=0),this.$trigger("destroy"),this[Ve].clear(),this.$root=void 0,this.isSleeped=!1,this.$sections={},this[Se]=void 0,this[Oe]={},this.destroyed()}get $refs(){return this[Te]?.refs||{}}$getRef(e){return this.$refs[e]?.[0]}$getRefs(e){return this.$refs[e]}$syncProp(e,t,s){"function"==typeof t&&(s=t,t=void 0),t??=e,s??=e=>e,this.model[t]=s(this.props[e]),this.$watch((()=>this.props[e]),(()=>{this.model[t]=s?.(this.props[e])}))}get $rootVNode(){return this[Te]?.root}$watchNode(e,t){if(this[Te])return this[Te]?.addNodeWatcher(e,t),()=>{this[Te]?.removeNodeWatcher(e,t)};x.warn(Ce,"该组件还未挂载,不可以进行节点观察监听")}$watch(e,t,s){let r=new I((()=>{if(this[Pe]){for(let e of this[$e])e.destroy();return W}return e()}),((e,s)=>{this[Pe]||t(e,s)}),void 0,s);return this[$e].push(r),[r.value,()=>{r.destroy(),c(this[$e],r)}]}$on(e,t){let s=this[Ve].get(e);void 0===s&&(s=new Set,this[Ve].set(e,s)),!1===s?.has(t)&&s.add(t)}$off(e,t){let s=this[Ve].get(e);s&&(t?s.delete(t):s.clear())}$trigger(e,t,s){if(!this.$root)return;let r={eventName:e,stopPropagation:s?.stopPropagation??(()=>{}),preventDefault:s?.preventDefault??(()=>{}),data:t,target:s?.target??this.$rootVNode,event:s?.event};if(this.$rootVNode&&this.$rootVNode.parent&&this.$rootVNode.parent instanceof exports.VNode.Component&&!1===this[Te]?.render.triggerEvent(this.$rootVNode.parent,e,r))return;let n=this[Ve].get(e);n?.size&&[...n].forEach((e=>{e(r)}));let i=this[Ve].get("*");i?.size&&[...i].forEach((e=>{e(r)}))}$render(t,s){t??=this.template,this.template="function"==typeof t?t(e.RENDER_HANDLER):t,this.$root&&(this.template??=[],this[Te]?.reSetAsts(this.template,s),this[Te]??=new xe(this.template,this,this.$root),this[Te].parser(),this.$root&&this[Te].mount(this.$root))}created(){}mounted(){}beforeDestroy(){}sleeped(){}wakeup(){}destroyed(){}}const Ie={};function Le(e,t){if("string"==typeof e)t&&(Ie[e]=t);else for(let t in e)Ie[t]=e[t]}function Me(e){return Ie[e]}function je(e){e.childrens?.forEach((e=>{e instanceof exports.VNode.Component&&e.component?.sleeped(),je(e)}))}function He(e){e.childrens?.forEach((e=>{e instanceof exports.VNode.Component&&e.component?.wakeup(),He(e)}))}class Ye extends We{template=[];cache=new Map;async mounted(){this.$watch((()=>this.props.name),(async e=>{this.$render([],!0),await Promise.resolve(),this.$root&&this.loadComponent(e)})),await this.loadComponent(this.props.name)}propsVaule;created(){this.initProps()}initProps(){let e={};this.props.props||(Object.keys(this.props).forEach((t=>{!1!==this.filterProps(t)&&(e[t]=this.props[t],this.$watch((()=>this.props[t]),(()=>{this.propsVaule[t]=this.props[t]})))})),this.propsVaule=V(e))}filterProps(e){if("string"!=typeof e)return!1;let t=f(e);return"transition-name"!==t&&"name"!==t&&"keep-alive"!==t&&"ref"!==t&&void 0}async loadComponent(t){if(!t)return void this.$render([],this.isKeepAlive);let s;if(this.isKeepAlive){let s=this.cache.get(t);if(s)return void this.$render([e.createComponent(s,{"transition-name":this.props["transition-name"]})],!0)}let r=this.$rootVNode?.parent?.[exports.VNode.PARSERKEY]?.ob.components,n=r?.[t];void 0===n&&(n=Me(t)),n?(_e in n||(n=(await n()).default),s=new n(this.props.props||this.propsVaule,this.$sections,this.isKeepAlive),s.$on("*",(e=>{this.$trigger(e.eventName,e.data,e)})),this.isKeepAlive&&this.cache.set(t,s),this.$render([e.createComponent(s,{"transition-name":this.props["transition-name"]})],this.isKeepAlive)):x.warn("component",`未找到${t}的组件`)}beforeDestroy(){this.removeCache()}removeCache(e){if(e){let t=this.cache.get(e);this.cache.delete(e),t&&t.$destroy(!0)}else this.cache.forEach((e=>{e.$destroy(!0)})),this.cache.clear()}}class Be extends We{template=function(){return[e.createCommand("RenderSection")]};async mounted(){await this.$nextUpdatedRender()}}Le({template:Be,component:Ye});Object.defineProperty(exports,"AST",{enumerable:!0,get:function(){return e.AST}}),Object.defineProperty(exports,"EXPRESSHANDLERTAG",{enumerable:!0,get:function(){return e.EXPRESSHANDLERTAG}}),Object.defineProperty(exports,"RENDER_HANDLER",{enumerable:!0,get:function(){return e.RENDER_HANDLER}}),Object.defineProperty(exports,"createCodeFunction",{enumerable:!0,get:function(){return e.createCodeFunction}}),Object.defineProperty(exports,"createCommand",{enumerable:!0,get:function(){return e.createCommand}}),Object.defineProperty(exports,"createComment",{enumerable:!0,get:function(){return e.createComment}}),Object.defineProperty(exports,"createComponent",{enumerable:!0,get:function(){return e.createComponent}}),Object.defineProperty(exports,"createElement",{enumerable:!0,get:function(){return e.createElement}}),Object.defineProperty(exports,"createFuntionBody",{enumerable:!0,get:function(){return e.createFuntionBody}}),Object.defineProperty(exports,"createText",{enumerable:!0,get:function(){return e.createText}}),exports.BREAK_WATCH_UPDATE=W,exports.Component=We,exports.ComponentContainer=Ye,exports.Dep=w,exports.EventBus=class{eventDatas=new Map;on(e,t){let s=this.eventDatas.get(e);void 0===s&&(s=[],this.eventDatas.set(e,s));let r={callBack:t};return s.push(r),()=>{s&&c(s,r)}}once(e,t){let s=this.eventDatas.get(e);void 0===s&&(s=[],this.eventDatas.set(e,s));let r={callBack:t,once:!0};return s.push(r),()=>{s&&c(s,r)}}off(e,t){if(void 0!==e)if(t){let s=this.eventDatas.get(e),r=s?.find((e=>e.callBack===t));r&&c(s,r)}else this.eventDatas.delete(e);else this.eventDatas.clear()}async trigger(e,t){let s=[...this.eventDatas.get(e)||[]];if(s.push(...this.eventDatas.get("*")||[]),s&&s.length){let r=0,n=0,i=!1;for(;s[r];){let o=s[r],a=await o.callBack({stopPropagation:()=>i=!0,callTimes:n,eventName:e},t);if(o.once?c(s,o):r++,!1===a||i)return!1}}}},exports.IS_DESTROY=Pe,exports.JOKER_COMPONENT_TAG=_e,exports.JOKER_VNODE_TAG=L,exports.OBJECTPROXY_DEPID=R,exports.PARSER_TEMPLATE_TARGET=Te,exports.ParserTemplate=xe,exports.SCOPE_ID=De,exports.ShallowObserver=class{data;[T]=!0;dep=new w;constructor(e){this.data=e}isChanged=!1;get value(){return this.dep.depend(C),this.data}set value(e){!1===Object.is(e,this.data)&&(this.isChanged=!0,this.data=e,K(this.dep,C))}},exports.Template=Be,exports.Watcher=I,exports.__GLONAL_FUNTIONS__=se,exports.__JOKER_HMR_RUNTIME=n,exports.combinedReply=function(e){D=!0;try{e()}catch(e){return D=!1,_.clear(),void x.error("数据劫持","数据劫持组合回复在做变更采集时,遇到了阻塞错误,不做响应,请检查",e)}D=!1,function(e){let t=[],s=[];e.forEach(((e,s)=>{e.forEach((e=>{t.push(...s.watchers.get(e)||[])}))})),t.forEach((e=>{s.includes(e)||(!1===e.isDestroy&&e.update(),s.push(e))}))}(_),_.clear()},exports.defineObserverProperty=P,exports.getGlobalComponent=Me,exports.isObserverData=function(e){return void 0!==$(e)},exports.observer=V,exports.registerGlobalComponent=Le,exports.registerGlobalFunction=function(e){for(let t in e)se[t]=e[t]};
|
|
1
|
+
"use strict";var e=require("@joker.front/ast");const t=new Map,s=new Map,r=new Map;let n={recordRender:(e,t)=>{s.set(e,t)},recordComponent:(e,t)=>{r.set(e,t)},record:(e,s)=>{void 0===t.get(e)&&t.set(e,new Set),t.get(e).add(s),s.$on("destroy",(()=>{t.get(e)?.delete(s)}))},reload:(e,s)=>{let n=r.get(e);if(!n)return;n.component=s;let i=t.get(e);if(!i)return;let o=Array.from(i);i.clear(),o.forEach((e=>{if(e.$root){if(!e.$rootVNode?.parent)return window.onbeforeunload=null,void location.reload();{let t=e.$rootVNode.parent;if(!(t instanceof exports.VNode.Component&&t[exports.VNode.PARSERKEY]&&t[exports.VNode.PARSERKEY].canReload))return window.onbeforeunload=null,void location.reload();t[exports.VNode.PARSERKEY].reload()}}}))},rerender:(e,r)=>{let n=s.get(e);n&&(n.render=r),t.get(e)?.forEach((e=>{e.$render(r)}))}};function i(e){return null!==e&&"object"==typeof e}function o(e,t){Object.getOwnPropertyNames(e).forEach((s=>{t(s,e[s])}))}function a(e){return"[object Object]"===Object.prototype.toString.call(e)}function h(e){if(null===e)return e;if("object"!=typeof e)return e;let t;t=Array.isArray(e)?[]:{};let s=Object.keys(e);for(let r of s){let s=e[r];t[r]="object"==typeof s?h(s):s}return t}function d(e,t,s){return Array.isArray(e)&&Array.isArray(t)?function(e,t,s){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(s){if(e[r]!==t[r])return!1}else if(!1===l(e[r],t[r],s))return!1;return!0}(e,t,s):l(e,t,s)}function l(e,t,s){if(e===t)return!0;let r=i(e),n=i(t);if(r&&n){if(a(e)&&a(t)){let r=Object.keys(e);if(r.length!==Object.keys(t).length)return!1;if(s){for(let s of r)if(e[s]!==t[s])return!1;return!0}return JSON.stringify(e)===JSON.stringify(t)}return e===t}return!r&&!n&&String(e)===String(t)}function c(e,t){let s=e.indexOf(t);return s>-1&&e.splice(s,1),e}function p(e,t){let s=e.findIndex((e=>t(e)));return s>-1&&e.splice(s,1),e}function u(e){return!e||""===e.trim()}function f(e,t="-"){return(e=e||"").split(/(?=[A-Z])/).map((e=>e.toLowerCase())).join(t)}let m=(...e)=>{},E="warn";const y=["silent","error","warn","info"];function N(){let e=new Date;function t(e,t=2){return e.toString().padStart(t,"0")}return t(e.getHours())+":"+t(e.getMinutes())+":"+t(e.getSeconds())+":"+t(e.getMilliseconds(),3)}function v(e,t,s,r){y.indexOf(e)<=y.indexOf(E)&&(void 0===r?console[e](`${N()} [${t}]:`,s):console[e](`${N()} [${t}]:`,s,r))}let x={info:function(e,t,s){v("info",e,t,s)},warn:function(e,t,s){v("warn",e,t,s)},error:function(e,t,s){v("error",e,t,s)},setLoggerLeve:function(e){E=e}};const g={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"',"#39":"'"};function b(e){return e.replace(/&(lt|gt|nbsp|amp|quot|#39);/gi,((e,t)=>g[t]||""))}class w{static target;watchers=new Map;depend(e){w.target?.addDep(this,e)}addWatcher(e,t){let s=this.watchers.get(e)||[];s.push(t),this.watchers.set(e,s)}removeWatcher(e,t){let s=this.watchers.get(e);s&&c(s,t)}notify(e){let t=this.watchers.get(e);if(t){p(t,(e=>e.isDestroy)),[...t].forEach((e=>{!1===e.isDestroy&&e.update()}))}}}const R=Symbol.for("__JOKER_OBJECT_PROXY_DEP_ID__"),A=Symbol.for("__JOKER_OBJECT_PROXY_DATA_KEY__"),C=Symbol.for("__JOKER_OBJECTPROXY_DEPLEVE_ID__");function O(e){try{return null!=e&&i(e)&&e!==window.parent&&e instanceof Window==!1&&e instanceof I==!1&&e instanceof We==!1&&e instanceof xe==!1&&(Array.isArray(e)||a(e)||e instanceof Set||e instanceof Map)&&!Object.isFrozen(e)&&!(e instanceof Element)&&!(L in e)&&!(T in e)&&!(_e in e)}catch{return!1}}function S(e){if($(e))return e;if(e&&e.hasOwnProperty(A)){let t=Reflect.get(e,A);if(t)return t}let t=new w,s=!0,r=new Proxy(e,{get(e,s,r){if(e instanceof Set||e instanceof Map){if("add"===s){let r=Reflect.get(e,s);return s=>{O(s)&&(s=V(s));let n=r.call(e,s);return K(t,"size"),K(t,C),n}}if("set"===s){let r=Reflect.get(e,s);return(s,n)=>{O(n)&&(n=V(n));let i=r.call(e,s,n);return K(t,"size"),K(t,C),i}}if("delete"===s||"clear"===s){let r=Reflect.get(e,s);return n=>{let i=r.call(e,n);return("clear"===s||i)&&(K(t,"size"),K(t,C)),i}}let r=Reflect.get(e,s);if("function"==typeof r)return r.bind(e)}if(s===A)return;if(s===R)return t;if(s===C)return;let n=Reflect.get(e,s);return s===Symbol.toStringTag||!1===function(e,t){return t in e}(e,s)&&"length"!==s&&"size"!==s||(t.depend(s),O(n)&&$(n)?.depend(C)),n},set(e,r,n){if(s)return Reflect.set(e,r,n),!0;O(n)&&(n=V(n));let i=!1===function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,r),o=Reflect.get(e,r)!==n;return Reflect.set(e,r,n),(o||"length"===r&&Array.isArray(e))&&K(t,r),Array.isArray(e)?"length"===r&&K(t,C):i&&K(t,C),!0},deleteProperty:(e,s)=>(Reflect.deleteProperty(e,s),!1===Array.isArray(e)&&K(t,C),!0)});var n,i,o,a;n=e,i=A,o=r,a=!1,Object.defineProperty(n,i,{value:o,enumerable:a,writable:!0,configurable:!0});for(let t in e){let s=e[t];O(s)&&!$(s)&&(r[t]=S(e[t]))}return s=!1,r}function $(e){if(i(e))return Reflect.get(e,R)}function V(e,t=!1){if(!1===O(e))throw new Error("当前传入的数据不是正确的数据类型,必须是数组或者对象");return S(t?h(e):e)}function P(e,t,s){let r=s;O(s)&&(r=V(s));let n=new w;Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:()=>(n.depend(t),$(r)?.depend(C),r),set:e=>{e!==r&&(O(e)&&(e=V(e)),r=e,K(n,t))}})}const T=Symbol.for("JOKER_SHALLOW_OBSERVER");let D=!1,_=new Map;function K(e,t){if(!1===D)e.notify(t);else{let s=_.get(e);void 0===s&&(s=[],_.set(e,s)),!1===s.includes(t)&&s.push(t)}}const k="数据观察",W=Symbol.for("JOKER_BREAK_WATCH_UPDATE");class I{ob;updateCallBack;forceCallBack;getter;value;isDestroy=!1;updating=!1;runRelations=new Map;relations=new Map;constructor(e,t,s,r){if(this.ob=e,this.updateCallBack=t,this.forceCallBack=r,void 0===e)throw new Error("无法对underfind进行变更观察");if(void 0===s)this.getter=e=>e;else if("function"==typeof s)this.getter=s;else{let e=function(e){if(/[^\w.$]/.test(e))return;let t=e.split(".");return function(e){let s=e;return t.forEach((e=>{s&&(s=s[e])})),s}}(s);if(void 0===e)throw new Error(s+"解析失败,无法明确读取表达式,请检查expOrFn参数,或采用function模式");this.getter=e}void 0===this.getter&&x.error(k,"getter创建失败",arguments),this.value=this.getValue()}getValue(){if(void 0===this.getter)return;w.target=this;let e,t="function"==typeof this.ob?this.ob():this.ob;try{e=this.getter.call(t,t)}catch(e){throw x.error(k,`获取值失败,执行方法:${this.getter.toString()}`),e}return w.target=void 0,this.clearnDeps(),e}addDep(e,t){let s=this.runRelations.get(e);if(void 0===s||!1===s.includes(t)){s=s||[],s.push(t),this.runRelations.set(e,s);let r=this.relations.get(e);void 0!==r&&!1!==r.includes(t)||e.addWatcher(t,this)}}update(){if(this.updating)return;let e=this.getValue();if(e===W)return;let t=this.value;if(this.forceCallBack||e!==t||i(e)){this.value=e;let s=e!==t&&d(e,t,!0);if(s&&!this.forceCallBack)return;this.updating=!0;try{this.updateCallBack(e,t,s,this)}catch(e){throw e}finally{this.updating=!1}}}destroy(){this.relations.forEach(((e,t)=>{for(let s of e)t.removeWatcher(s,this)})),this.isDestroy=!0,this.relations.clear(),this.runRelations.clear(),this.ob=void 0,this.value=void 0,this.getter=void 0}clearnDeps(){this.relations.forEach(((e,t)=>{let s=this.runRelations.get(t);for(let r of e)s?!1===s.includes(r)&&t.removeWatcher(r,this):t.removeWatcher(r,this)})),this.relations.clear(),this.relations=this.runRelations,this.runRelations=new Map}}exports.IContainer=void 0,function(e){let t=new Map;e.bind=function(e){return{to:s=>{if(t.has(e))throw new Error(`TagId:${e.toString()}已注入实现类,请勿重复注入。`);t.set(e,s)}}},e.get=function(e,...s){let r=t.get(e);if(r)return new r(...s)}}(exports.IContainer||(exports.IContainer={}));const L=Symbol.for("JOKER_VNODE_TAG");exports.VNode=void 0,function(e){e.PARSERKEY=Symbol.for("JOKER_PARSER_KEY");class t{parent;[L]=!0;static;output;[e.PARSERKEY];childrens;ref;sleep=!1;constructor(e){this.parent=e}get prev(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)-1]}get next(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)+1]}closest(e,t){if(!0===e(this))return this;let s=this.parent;for(;s;){if(!0===e(s))return s;if(!0===t?.(s))break;s=s.parent}}find(e,t,s,r,n){let i=n??[];if(r??=this.childrens,r)for(let n of r){(!0!==e(n)||(i.push(n),s))&&(!0!==t?.(n)&&n.childrens&&this.find(e,t,s,n.childrens,i))}return i}contains(e,t){if(t??=this.childrens,t)for(let s of t){if(!0===e(s))return!0;if(s.childrens&&s.childrens.length&&this.contains(e,s.childrens))return!0}return!1}first(e,t){if(t??=this.childrens,t)for(let s of t){if(!0===e(s))return s;if(s.childrens&&s.childrens.length){let t=this.first(e,s.childrens);if(t)return t}}}}e.Node=t;e.Root=class extends t{childrens=[];component;constructor(){super()}};e.Text=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Html=class extends t{html;notShadow;static=!0;constructor(e,t,s){super(t),this.html=e,this.notShadow=s}};e.Comment=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Element=class extends t{tagName;static=!0;attributes={};childrens=[];events=[];_assistEventCache;constructor(e,t){super(t),this.tagName=e}};e.Component=class extends t{name;component;events=[];propValues={};keepalive;get firstElement(){if(this.childrens){let t=s=>{for(let r of s){if(r instanceof e.Element)return r;if(r.childrens){let e=t(r.childrens);if(e)return e}}};return t(this.childrens)}}get rootElements(){if(this.childrens){let t=[],s=r=>{for(let n of r)n instanceof e.Element||n instanceof e.Html?t.push(n):n.childrens&&s(n.childrens)};return s(this.childrens),t}return[]}};e.Condition=class extends t{cmdName;result=!1;childrens=[];isShow=!1;constructor(e,t){super(t),this.cmdName=e}};e.List=class extends t{childrens=[]};e.ListItem=class extends t{ob;childrens=[];constructor(e,t){super(t),this.ob=e}};e.RenderSection=class extends t{id="unknown";params=[];section;childrens=[];ob;constructor(e,t){super(t),"string"==typeof e?this.id=e:this.section=e}}}(exports.VNode||(exports.VNode={}));const M="DOM渲染",j=["script","style","textarea","pre"];let H=0;const Y=["svg","defs","use","rect","circle","ellipse","line","polyline","polygon","path","text","g"];function B(e,t,s){return`${e}-${t}-${s}`}function J(e,t,s,r){e._assistEventCache??=[],e._assistEventCache.push([t,s]),document.body.addEventListener(t,s,r)}function G(e,t,s){e._assistEventCache&&t&&s?(p(e._assistEventCache,(e=>e[0]===t&&e[1]===s)),document.body.removeEventListener(t,s)):(e._assistEventCache?.forEach((e=>{document.body.removeEventListener(e[0],e[1])})),e._assistEventCache&&(e._assistEventCache.length=0),e._assistEventCache=void 0)}exports.Render=void 0,function(e){e.IRENDERIOCTAGID=Symbol.for("JOKER_IRENDERIOC_TAGID"),e.ROOT_CONTAINER="";e.DomRender=class{elements;constructor(){this.elements=document.createDocumentFragment()}mount(e){if(e instanceof Element)e.appendChild(this.elements);else if(e instanceof exports.VNode.Component)if(e.parent)if(e.output){let t=e.output,s=U(e)||t.parentNode;s&&s.insertBefore(this.elements,t)}else x.error(M,"组件挂载渲染时发现该节点未定义DOM定位节点",e);else x.error(M,"mount子组件时,发现该组件无父级",e);else x.error(M,"mount只支持挂载到Element或VNode.Node类型数据中",e)}appendNode(e,t){if(this.renderNode(e),e.output){let s=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];for(let r of s)this.appendNodeChildren(e,r,e.parent,t)}else x.error(M,"未找自身节点的el属性,无法进行dom挂载",e)}updateNode(e,t){if(e instanceof exports.VNode.Element)for(let t in e.attributes){let s=e.attributes[t];this.setAttribute(e.output,t,s)}else e instanceof exports.VNode.Text?e.parent&&e.parent instanceof exports.VNode.Element&&j.includes(e.parent.tagName)?(this.removeNode(e),this.appendNode(e)):e.output.textContent=b(e.text||""):e instanceof exports.VNode.Html?e.notShadow?e.output.innerHTML=e.html:e.output.root.innerHTML=e.html:x.error(M,`该节点不支持${t}的更新`,e)}removeNode(e,t){let s=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];s?.forEach((e=>{e?.remove()})),t||(e instanceof exports.VNode.Element&&G(e),e.output=void 0)}destroy(){this.elements=void 0}elementToEnter(e,t,s,r){e.output&&this.transitionFrame(e,t,"enter",s,r)}elementToLeave(e,t,s,r){e.output&&this.transitionFrame(e,t,"leave",s,r)}triggerEvent(e,t,s){let r=[];for(let n of e.events){let[i,o]=n;if(i===t){let t=o.modifiers?.includes("self"),a=o.modifiers?.includes("outside");if(t||a){x.warn(M,"事件修饰符:self、outside在组件事件中无法使用,组件无法确认元素",e);continue}let h=s.event;if((h instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(i)||h instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(i))&&!1===X(h,o.modifiers))continue;if(o.callBack(s),o.modifiers?.includes("prevent")&&s.preventDefault(),o.modifiers?.includes("once")&&r.push(n),o.modifiers?.includes("stop"))return s.stopPropagation(),!1}}r.length&&r.forEach((t=>{c(e.events,t)}))}transitionFrame(e,t,s,r,n){q(e,B(t,s,"from")),r||="transition";let i=e.output.__TRANSITION_EVNETID__=H++;requestAnimationFrame((()=>{requestAnimationFrame((()=>{if(!e.output)return;q(e,B(t,s,"active")),z(e,B(t,s,"from")),q(e,B(t,s,"to"));let o=function(e,t){let s=window.getComputedStyle(e),r=e=>(s[e]||"").split(", ");if("transition"===t){let e=r("transitionDelay"),t=r("transitionDuration"),s=Q(e,t);if(s>0)return{timeout:s,count:t.length}}else if("animation"===t){let e=r("animationDelay"),t=r("animationDuration"),s=Q(e,t);if(s>0)return{timeout:s,count:t.length}}}(e.output,r);if(!o)return void n?.();let a=0,h=()=>{z(e,B(t,s,"to")),z(e,B(t,s,"active")),e.output&&(e.output.removeEventListener(`${r}end`,d),i===e.output.__TRANSITION_EVNETID__&&n?.())},d=t=>{t.target===e.output&&++a>=o.count&&h()};setTimeout((()=>{a<o.count&&h()}),o.timeout+1),e.output?.addEventListener(`${r}end`,d)}))}))}renderNode(e){if(!e.output)if(e instanceof exports.VNode.Text)e.parent&&e.parent instanceof exports.VNode.Element&&j.includes(e.parent.tagName)?e.output=this.parserHtml(e.text):e.output=document.createTextNode(b(e.text||""));else if(e instanceof exports.VNode.Html)if(e.notShadow){let t=document.createElement("joker-html-container");t.JOKER_NODE=e,t.innerHTML=e.html,e.output=t}else{let t=document.createElement("joker-html-shadow");t.JOKER_NODE=e,t.style.lineHeight="1",t.root.innerHTML=e.html,e.output=t}else if(e instanceof exports.VNode.Element){let t,s=e.tagName.toLowerCase();"svg"===s||Y.includes(s)||e.parent?.inSvg?(e.inSvg=!0,t=document.createElementNS("http://www.w3.org/2000/svg",e.tagName)):t=document.createElement(e.tagName);for(let s in e.attributes)this.setAttribute(t,s,e.attributes[s]);t.JOKER_NODE=e,e.output=t,e.events.some((e=>"click"===e[0]&&e[1].modifiers?.includes("outside")))?setTimeout((()=>{this.initElementEvents(t,e)})):this.initElementEvents(t,e)}else e instanceof exports.VNode.Comment?e.output=document.createComment(e.text):e.output=document.createTextNode("")}initElementEvents(e,t){for(let[s,r]of t.events){let n=r.modifiers?.includes("self"),i=r.modifiers?.includes("outside");n&&i&&(x.warn(M,"事件修饰符:self、outside不可以同时存在,将按照self处理",t),i=!1);let o,a=function(o){if(!(t.sleep||n&&o.target!==e)){if(i){if(o.target===e||e.contains(o.target))return;if(!1===document.contains(o.target))return;if(t.contains((e=>(e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output]).includes(o.target))))return!0}(o instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(s)||o instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(s))&&!1===X(o,r.modifiers)||(r.callBack({eventName:s,event:o,target:t,preventDefault:()=>o.preventDefault(),stopPropagation:()=>o.stopPropagation(),data:void 0}),r.modifiers?.includes("prevent")&&o.preventDefault(),r.modifiers?.includes("stop")&&o.stopPropagation(),r.modifiers?.includes("once")&&(i?G(t,s,a):e.removeEventListener(s,a)))}};r.modifiers?.includes("passive")&&(o={passive:!0}),i?J(t,s,a,o):e.addEventListener(s,a,o)}}parserHtml(e){var t=document.createElement("div");return t.innerHTML=e,t.childNodes}isCommandGroup(e){return e instanceof exports.VNode.Component||e instanceof exports.VNode.Condition||e instanceof exports.VNode.List||e instanceof exports.VNode.ListItem||e instanceof exports.VNode.RenderSection}appendNodeChildren(e,t,s,r){let n=U(e);if(n)n.appendChild(t);else if(void 0===s)this.elements?.appendChild(t);else if(s)if(s instanceof exports.VNode.Root){let e=s.parent;if(e&&e instanceof exports.VNode.Component&&e.output){let s=e.output,r=s?.parentNode;if(r)return void r.insertBefore(t,s)}this.elements?.appendChild(t)}else if(s instanceof exports.VNode.Element){let e=s.output;if(void 0===e)return;e.appendChild(t)}else if(this.isCommandGroup(s)){let n=s.output?.parentNode;if(void 0!==r&&s.childrens?.length&&n){let i=r-1;if(i<0){let s=ee(e);return void(s&&n.contains(s.output)?s.output.after(t):n.insertBefore(t,n.firstChild))}{let e=s.childrens[i];if(e){let s=e.output;if(s)return void s.after(t)}}}n&&n.insertBefore(t,s.output)}else x.error(M,"该节点不支持嵌套子集,请检查。",{node:e,parent:s})}setAttribute(e,t,s){if(e)if("boolean"!=typeof s){if("class"===t){if(Array.isArray(s)){let e=[];for(let t of s)if(i(t))for(let s in t)t[s]&&e.push(s);else t&&e.push(t);s=e.join(" ")}else if(i(s)){for(let t in s)t=t.trim(),t&&(s[t]?e.classList.add(t):e.classList.remove(t));return}}else if("style"===t&&i(s)){e.removeAttribute("style");for(let t in s){let r=!1;void 0!==s[t]&&!1!==s[t]||(r=!0);let n=String(s[t]);u(n)&&(r=!0),r||(e.style[t]=n)}return}s=(s??"").toString().trim(),"class"===t&&(s=s.split(/\s/).filter((e=>e.trim())).join(" ")),"value"===t&&"value"in e?e.value=s:"xlink:href"===t?e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s):e.setAttribute(t,s)}else s?e.setAttribute(t,""):e.removeAttribute(t)}}}(exports.Render||(exports.Render={}));const F={enter:"enter",backspace:"delete",tab:"tab",arrowup:"up",arrowdown:"down",arrowleft:"left",arrowright:"right",escape:"esc"," ":"space"};function X(e,t){if(e instanceof KeyboardEvent){if(void 0===e.key)return!1;for(let s in F)if(t?.includes(F[s])&&e.key.toLowerCase()!==s)return!1}else{if(t?.includes("left")&&0!==e.button)return!1;if(t?.includes("right")&&2!==e.button)return!1;if(t?.includes("middle")&&1!==e.button)return!1}return(!t?.includes("ctrl")||!1!==e.ctrlKey)&&((!t?.includes("alt")||!1!==e.altKey)&&(!t?.includes("shift")||!1!==e.shiftKey))}function q(e,t){e.output&&e.output.classList.add(t)}function z(e,t){e.output&&e.output.classList.remove(t)}function U(e){if(e instanceof exports.VNode.Element||e instanceof exports.VNode.Component){let t=e instanceof exports.VNode.Component?e.propValues["append-to"]:e.attributes["append-to"];if(t){if(t instanceof exports.VNode.Element)return t.output;if("string"==typeof t){exports.Render.ROOT_CONTAINER&&(t="body"===t?exports.Render.ROOT_CONTAINER:`${exports.Render.ROOT_CONTAINER} ${t}`);let e=document.querySelector(t);if(e)return e}x.warn(M,"appendTo类型不支持",{appendTo:t,node:e})}}}function Q(e,t){for(;e.length<t.length;)e.concat(e);return Math.max(...t.map(((t,s)=>Z(t)+Z(e[s]))))}function Z(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function ee(e){let t=e.prev;for(;t;){if(t instanceof exports.VNode.Element||t instanceof exports.VNode.Comment||t instanceof exports.VNode.Text||t instanceof exports.VNode.Component||t instanceof exports.VNode.Element)return t;t=t.prev}let s=e.parent;for(;s;){if(s instanceof exports.VNode.Element)return;let e=ee(s);if(e)return e;s=s.parent}}class te extends HTMLElement{root;constructor(){super(),this.root=this.attachShadow({mode:"open"})}}!customElements.get("joker-html-shadow")&&customElements.define("joker-html-shadow",te);const se={};const re="Global",ne="渲染核心";function ie(t){try{return new Function(e.EXPRESSHANDLERTAG,re,`return ${t};`)}catch{throw new Error("创建表达式运行方法时出现未知错误,表达式为"+t)}}class oe{ast;ob;parent;ext;ref="";watchers=[];node;isDestroy=!1;constructor(e,t,s,r){this.ast=e,this.ob=t,this.parent=s,this.ext=r}init(e){this.parser(e),this.afterParser()}beforeDestroy(e){}destroy(e){if(this.isDestroy=!0,this.clearWatchers(),this.parent.childrens&&this.node){(this.node instanceof exports.VNode.Element||this.node instanceof exports.VNode.Component)&&this.ext.removeRef(this.node);let t=()=>{this.parent&&this.node&&(this.beforeDestroy(e),this.destroyChildrens(e),this.node&&(this.ext.render?.removeNode(this.node),this.parent.childrens&&c(this.parent.childrens,this.node),this.notifyNodeWatcher("remove"),this.destroyOtherData()))};if(this.ext.nodeTransition(this.node,"leave",void 0,(()=>{t()})))return c(this.parent.childrens,this.node),void this.destroyChildrensWatcher(this.node);t()}else this.destroyOtherData()}destroyWathcers(){this.isDestroy=!0,this.clearWatchers(),this.destroyChildrensWatcher(this.node)}destroyOtherData(){this.node&&(this.node[exports.VNode.PARSERKEY]=void 0),this.node=void 0,this.parent=void 0}destroyChildrens(e){for(;this.node?.childrens?.length;){let t=this.node.childrens[0];t[exports.VNode.PARSERKEY]?t[exports.VNode.PARSERKEY].destroy(e):c(this.node.childrens,t)}}destroyChildrensWatcher(e){if(e?.childrens?.length)for(let t of e?.childrens)t[exports.VNode.PARSERKEY]&&(t[exports.VNode.PARSERKEY].clearWatchers(),this.destroyChildrensWatcher(t))}appendNode(e){this.parent?.childrens&&this.node&&!this.isDestroy&&(this.node[exports.VNode.PARSERKEY]=this,this.node instanceof exports.VNode.Element&&this.ob[De]&&(this.node.attributes["data-scoped-"+this.ob[De]]=void 0),this.ext.render?.appendNode(this.node,e),void 0===e?this.parent.childrens.push(this.node):this.parent.childrens.splice(e,0,this.node),this.notifyNodeWatcher("append"))}afterParser(){this.ext.nodeTransition(this.node,"enter")}notifyNodeWatcher(e,t){this.ext.notifyNodeWatcher(this.ref,this.node,e,t)}runExpress(e,t){try{return ie(e).call(t,t,se)}catch(s){x.error(ne,"运行表达式出现错误:"+e,{ob:t}),console.error(s)}}runExpressWithWatcher(e,t,s,r){if(this.isDestroy)return;let n="string"==typeof e?ie(e):e,i=new I((()=>{if(this.isDestroy||t[Pe])return W;try{return n.call(t,t,se)}catch(s){return x.error(ne,"运行表达式出现错误",{ob:t,express:e,node:this.node}),console.error(s),W}}),s,void 0,r);return this.addWatch(i),i.value===W?void 0:i.value}addWatch(e){!1===this.watchers.includes(e)&&this.watchers.push(e)}clearWatchers(){this.watchers.forEach((e=>{e.destroy()})),this.watchers.length=0}}class ae extends oe{parser(){this.node=new exports.VNode.Text(this.ast.text,this.parent),this.appendNode()}}class he extends oe{parser(){this.node=new exports.VNode.Comment(this.ast.text,this.parent),this.appendNode()}}class de extends oe{parser(){if(this.node=new exports.VNode.Condition(this.ast.kind,this.parent),"else"!==this.ast.kind){u(this.ast.condition)&&x.error("条件命令",`当前条件命令${this.ast.kind}没有判断条件,请检查`);let e=this.runExpressWithWatcher(this.ast.condition,this.ob,(e=>{let t=!!e;if(this.node?.result!==t){if(this.node.result=t,!1===t&&this.node?.isShow)this.destroyChildrens(!0);else if(t&&!this.node?.isShow){let e=this.getElseNode();if(e&&e.isShow&&e.childrens?.length){let t=e[exports.VNode.PARSERKEY];t&&t instanceof de&&t.renderConditionChildren()}}this.reloadAllCondition()}}));this.node.result=!!e}this.appendNode(),this.renderConditionChildren()}renderId;getElseNode(){let e=this.node?.next;for(;e&&e instanceof exports.VNode.Condition&&"if"!==e.cmdName;){if("else"===e.cmdName)return e;e=e.next}}renderConditionChildren(){let e=!1;return this.getPrevIfResult()?e=!1:"else"===this.ast.kind?e=!0:(this.node.result=!!this.runExpress(this.ast.condition,this.ob),this.node.result&&(e=!0)),e!==this.node.isShow&&(this.node.isShow=e,this.destroyChildrens(!0),e&&this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob),!0)}getPrevIfResult(){if("if"===this.ast.kind)return!1;let e=this.node?.prev;for(;e&&e instanceof exports.VNode.Condition;){if(e.result)return!0;if("if"===e.cmdName)break;e=e.prev}return!1}reloadAllCondition(){if(this.renderConditionChildren()){let e=this.node?.next;for(;e&&e instanceof exports.VNode.Condition&&"if"!==e.cmdName;){let t=e[exports.VNode.PARSERKEY];t&&t instanceof de&&t.renderConditionChildren(),e=e.next}}let e=this.node?.next;for(this.node?.result||this.destroyChildrens(!0);e&&e instanceof exports.VNode.Condition&&"if"!==e.cmdName;){let t=e[exports.VNode.PARSERKEY];t&&t instanceof de&&t.renderConditionChildren(),e=e.next}}}class le extends oe{parser(){this.node=new exports.VNode.List(this.parent),this.appendNode(),this.renderChildrens()}renderChildrens(){switch(this.ast.keyType){case"condition":this.renderConditionChildrens();break;case"in":case"of":this.renderInOrOfChildrens()}}renderConditionChildrens(){let t=this.ast.param,s=Object.create(this.ob),r=!!this.runExpressWithWatcher(function(t,s,r){try{return new Function(e.EXPRESSHANDLERTAG,`${e.EXPRESSHANDLERTAG}.${t}=${s}; return ${r};`)}catch{throw new Error(`For循环命令,表达式运行依赖采集出现未知错误,其中letKey:${t},keyVal:${s},condition:${r}`)}}(t.letKey,t.defaultKeyVal,t.condition),s,(()=>{this.clearWatchers(),this.renderChildrens()}),!0),n=0;for(;r;){let e=Object.create(this.ob);P(e,t.letKey,s[t.letKey]);let i=n++;this.renderItem(e,i),this.runExpressWithWatcher((()=>s[t.letKey]),s,(async(s,r,n,o)=>{await Promise.resolve(),o.isDestroy||(e[t.letKey]=s,n||this.updateListItemOb(e,i))}),!0),this.runExpress(t.step,s),r=!!this.runExpress(t.condition,s)}this.destroyOldChildrens(n)}renderInOrOfChildrens(){let e=this.ast.param,t=this.runExpressWithWatcher(e.dataKey,this.ob,(()=>{this.clearWatchers(),this.renderChildrens()})),s=0;if(t&&(Array.isArray(t)||a(t)))for(let r in t){let n=Object.create(this.ob),i=Array.isArray(t)?Number(r):r;e.indexKey&&P(n,e.indexKey,i),e.itemKey&&P(n,e.itemKey,t[r]);let o=s++;this.renderItem(n,o,e.indexKey),e.itemKey&&this.runExpressWithWatcher((()=>t[i]),t,(async(s,r,a,h)=>{await Promise.resolve(),h.isDestroy||i in t&&(n[e.itemKey]=s,a||this.updateListItemOb(n,o))}),!0)}this.destroyOldChildrens(s)}findIndexByIndex(e,t,s){let r=-1;if(this.node)for(let n=t;n<this.node.childrens.length;n++)if(this.checkObEqual(e,this.node.childrens[n]?.ob,s?[s]:void 0)){r=n;break}return r}renderItem(e,t,s){if(!this.ast.childrens?.length||!this.node)return;let r=this.node.childrens?.[t];if(r){if(this.checkObEqual(e,r.ob,s?[s]:void 0))return void(s&&r.ob[s]!==e[s]&&(r.ob[s]=e[s]));let n=this.findIndexByIndex(e,t+1,s);if(n>-1){if(t+1===n)this.node.childrens?.[t]?.[exports.VNode.PARSERKEY]?.destroy();else for(let e=0;e<n-t-1;e++)this.node.childrens?.[t]?.[exports.VNode.PARSERKEY]?.destroy();return this.renderItem(e,t,s)}return new ce(this.ast,e,this.node,this.ext).init(t)}return new ce(this.ast,e,this.node,this.ext).init()}updateListItemOb(e,t){if(!this.ast.childrens?.length||!this.node)return;let s=this.node.childrens?.[t];o(e,((e,t)=>{s.ob[e]!==t&&(s.ob[e]=t)}))}destroyOldChildrens(e){if(this.node)for(;this.node.childrens.length>e;){let e=this.node.childrens.pop();if(!e)break;e[exports.VNode.PARSERKEY]?.destroy(!1)}}checkObEqual(e,t,s){let r=!0;return void 0!==t&&(o(e,((e,n)=>{s?.includes(e)||t?.[e]===n||(r=!1)})),r)}}class ce extends oe{parser(e){this.node=new exports.VNode.ListItem(this.ob,this.parent),this.appendNode(e),this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}}class pe extends oe{parser(){if(u(this.ast.cmdName))throw x.error("模板指令","解析AST转换VNode时发生错误,未找到指令名称",this.ast),new Error("解析AST转换VNode时发生错误,未找到指令名称");let t;if("Html"===this.ast.cmdName||"Text"===this.ast.cmdName?t=this.ast.param:this.ast.cmdName.startsWith(re+".")?t=`${this.ast.cmdName}(${this.ast.param})`:this.ast.cmdName in this.ob&&"function"==typeof this.ob[this.ast.cmdName]&&(t=`${e.createFuntionBody(this.ast.cmdName)}(${this.ast.param})`),t){let e=this.runExpressWithWatcher(`[${t}]`,this.ob,(e=>{this.changeValue(e?.[0])}));return e||=[],"Html"===this.ast.cmdName?this.node=new exports.VNode.Html(ue(e[0]),this.parent,e[1]):this.node=new exports.VNode.Text(ue(e[0]),this.parent),void this.appendNode()}throw new Error(`未找到命令:${this.ast.cmdName}`)}changeValue(e){this.node&&(this.node instanceof exports.VNode.Html?this.node.html=ue(e):this.node.text=ue(e),this.ext.render?.updateNode(this.node))}}function ue(e){return null==e||"function"==typeof e?"":e.toString()}const fe="default";class me extends oe{parser(){let e=this.transformParam();this.node=new exports.VNode.RenderSection(e.id,this.parent),this.node.params=e.params,this.node.section??=this.ob.$sections?.[e.id],this.appendNode(),this.node.section&&(this.node.section.params?(this.node.ob=Object.create(this.node.section.ob||this.ob),this.node.section.params?.forEach(((e,t)=>{P(this.node.ob,e,this.node.params[t])}))):this.node.ob=this.node.section.ob||this.ob,(this.node.section.parser||this.ext).parserNodes(this.node.section.asts,this.node,this.node.ob))}transformParam(){if(this.ast.param){let e=this.runExpressWithWatcher(`[${this.ast.param}]`,this.ob,(e=>{let t=e?.[0]||fe;if("string"==typeof t&&t!==this.node.id)throw new Error("section id 不可动态变更");this.node.params=e.slice(1),this.node?.ob&&this.node.section&&this.node.section.params?.forEach(((e,t)=>{this.node?.ob&&this.node.ob[e]!==this.node.params[t]&&(this.node.ob[e]=this.node.params[t])}))}),!0);return{id:e?.[0]||fe,params:e?.slice(1)||[]}}return{id:fe,params:[]}}}const Ee="组件解析";function ye(e,t){return!!t.components[e]||!!Me(e)}class Ne extends oe{loadPromise;parser(){if(this.ast.node)return this.node=this.ast.node,this.node.parent=this.parent,this.initPropData(),void(this.node&&(this.appendNode(),this.node.component?.$mount(this.node)));this.node=new exports.VNode.Component(this.parent),this.initPropData(),this.appendNode(),this.initEvent(),this.loadPromise=this.renderChildren(),this.ext.promiseQueue.add(this.loadPromise),this.loadPromise.finally((()=>{this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0)}))}get canReload(){return"tagName"in this.ast||"function"==typeof this.ast.component}reload(){this.canReload?(this.beforeDestroy(),this.renderChildren()):x.warn(Ee,"当前组件无法实现reload",this.node)}initPropData(){for(let e of this.ast.attributes)if("ref"!==e.name)if("keep-alive"===e.name&&"false"!==e.value&&(this.node.keepalive=!0),e.express){let t=this.runExpressWithWatcher(e.express,this.ob,(t=>{this.node.propValues[e.name]=t,this.notifyNodeWatcher("update",e.name)}),!0);this.node.propValues[e.name]=t}else this.node.propValues[e.name]=e.value;else{if(u(e.value)){x.warn(Ee,"元素的ref值不可以为空");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}this.node.propValues=V(this.node.propValues)}initEvent(){this.ast.events.forEach((e=>{let t=e.functionName?this.ob[e.functionName]:void 0;void 0===e.functionName?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:m}]):t&&"function"==typeof t?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:s=>{let r=[];e.functionParam&&(r=this.runExpress(`[${e.functionParam}]`,this.ob)),t.call(this.ext.ob,s,...r)}}]):x.error(Ee,`${"tagName"in this.ast?this.ast.tagName:""}元素中${e.name}事件所指定的回调(${e.functionName})方法未找到,请检查`)}))}async renderChildren(){return new Promise((async(e,t)=>{if("tagName"in this.ast){let e=this.ob.components[this.ast.tagName]||Me(this.ast.tagName);if(void 0===e)return void x.error(Ee,`渲染组件失败,未找到名称为'${this.ast.tagName}'的私有组件/全局组件`);if(_e in e||(e=(await e()).default),!this.node)return;{let t=this.getSections();this.node.name=this.ast.tagName,this.node.component=new e(this.node?.propValues,t,this.node?.keepalive)}}else if("function"==typeof this.ast.component){let e=this.getSections();this.node.component=new this.ast.component(this.node?.propValues,e,this.node?.keepalive)}else this.node.component=this.ast.component;if(!this.node)return;!this.node.name&&"name"in this.node.component&&this.node.component.name&&"string"==typeof this.node.component.name&&(this.node.name=this.node.component.name);let s=this,r=function(){s.loadPromise&&e(void 0)};if(this.node.component.$on("mounted",(()=>{this.node?.component.$off("beforeDestroy",r),e(void 0)})),this.node.component.$on("beforeDestroy",r),this.node.component.$mount(this.node),!this.node)return;let n=this.node?.component;n.isKeepAlive&&(this.ast.node=this.node)}))}getSections(){let t={},s=[];return this.ast.childrens.forEach((t=>{if(t.type===e.AST.NodeType.COMMAND&&"if"===t.cmdName&&t.childrens){let r=t,n=t.childrens.some((t=>t.type===e.AST.NodeType.COMMAND&&"section"===t.cmdName)),i=r.condition.startsWith(e.EXPRESSHANDLERTAG+".$sections");if(i){return this.runExpress(r.condition,this.ob)?void s.push(...t.childrens):void 0}if(n&&"if"===r.kind&&!i)return void x.warn(Ee,"在解析section时,发现该section包裹在一个条件语句中,该条件语句仅支持以$sections进行if判断,已作排出")}s.push(t)})),s.forEach((s=>{if(s.type===e.AST.NodeType.COMMAND&&"section"===s.cmdName){let e=s,r=e.id||fe;/^(\'|\")(.*?)((\'|\"))$/.test(r)&&(r=r.slice(1,-1)),t[r]=t[r]||{asts:[],ob:this.ob,params:e.paramKeys,parser:this.ext},t[r].asts.push(...s.childrens||[])}else t[fe]=t[fe]||{asts:[],ob:this.ob,parser:this.ext},t[fe].asts.push(s)})),t}beforeDestroy(e){this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0),!0===e&&this.node?.component?.isKeepAlive?this.node?.component?.$destroy():(this.node?.component?.$destroy(!0),this.ast.node=void 0)}}class ve extends oe{parser(){this.node=new exports.VNode.Element(this.ast.tagName,this.parent),this.initAttributes(),this.initEvents(),this.appendNode(),this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}initAttributes(){for(let e of this.ast.attributes)if("ref"!==e.name)if(e.express){let t=t=>{this.node&&(this.node.attributes[e.name]=this.transformAttrVal(t),this.ext.render?.updateNode(this.node,e.name),this.notifyNodeWatcher("update",e.name))},s=this.runExpressWithWatcher(e.express,this.ob,(e=>{t(e)}));this.node.attributes[e.name]=this.transformAttrVal(s)}else this.node.attributes[e.name]=e.value;else{if(u(e.value)){x.warn("Element解析","元素的ref值不可以为空");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}}initEvents(){for(let e of this.ast.events){let t=e.functionName?this.ob[e.functionName]:void 0;if(!(void 0===e.functionName||t&&"function"==typeof t))throw new Error(`${this.ast.tagName}元素中${e.name}事件所指定的回调(${e.functionName})方法未找到,请检查`);this.node?.events.push([e.name,{modifiers:e.modifiers,callBack:s=>{if(void 0===t)return;let r=[];e.functionParam&&(r=this.runExpress(`[${e.functionParam}]`,this.ob)),t&&t.call(this.ext.ob,s,...r)}}])}}transformAttrVal(e){return void 0!==e&&("string"==typeof e||"boolean"==typeof e||"function"!=typeof e&&Object.prototype.toString()?e:void 0)}}class xe{asts;ob;root=new exports.VNode.Root;refs={};sleeped=!1;promiseQueue=new Set;nodeWatcherEvents={};render;constructor(e,t,s){this.asts=e,this.ob=t,this.root.component=t,this.render=exports.IContainer.get(exports.Render.IRENDERIOCTAGID)??new exports.Render.DomRender,s&&s instanceof exports.VNode.Node&&(this.root.parent=s,s.childrens??=[],s.childrens.push(this.root))}parser(){this.parserNodes(this.asts,this.root)}mount(e){this.sleeped&&this.weakup(),this.render?.mount(e)}parserNodes(t,s,r){if(0!==this.asts.length)for(let n of t)if(n.type===e.AST.NodeType.TEXT)new ae(n,r??this.ob,s,this).init();else if(n.type===e.AST.NodeType.COMMENT)new he(n,r??this.ob,s,this).init();else if(n.type===e.AST.NodeType.COMPONENT)new Ne(n,r??this.ob,s,this).init();else if(n.type===e.AST.NodeType.ELEMENT){let e=n;ye(e.tagName,r??this.ob)?new Ne(e,r??this.ob,s,this).init():new ve(e,r??this.ob,s,this).init()}else if(n.type===e.AST.NodeType.COMMAND){let e=n;switch(e.cmdName){case"if":case"elseif":case"else":new de(e,r??this.ob,s,this).init();break;case"for":new le(e,r??this.ob,s,this).init();break;case"RenderSection":new me(e,r??this.ob,s,this).init();break;case"section":break;default:new pe(e,r??this.ob,s,this).init()}}}addRef(e,t){this.refs[e]=this.refs[e]||[],this.refs[e].push(t),t.ref=e}removeRef(e){for(let t in this.refs)this.refs[t].includes(e)&&c(this.refs[t],e)}addNodeWatcher(e,t){this.nodeWatcherEvents[e]=this.nodeWatcherEvents[e]||[],this.nodeWatcherEvents[e].push(t)}removeNodeWatcher(e,t){c(this.nodeWatcherEvents[e]||[],t)}notifyNodeWatcher(e,t,s,r){this.nodeWatcherEvents[e]?.forEach((e=>{e(t,s,r)}))}sleep(e){let t=e||this.root;t.childrens?.forEach((e=>{let t=()=>{e.childrens&&this.sleep(e),e.sleep=!0,this.render?.removeNode(e,!0)};this.nodeTransition(e,"leave",void 0,(()=>{t()}))||t()})),void 0===e&&(this.sleeped=!0)}weakup(e){let t=e||this.root;t.childrens?.forEach((e=>{e.sleep=!1,this.render?.appendNode(e),e.childrens&&this.weakup(e),this.nodeTransition(e,"enter")})),void 0===e&&(this.sleeped=!1)}destroy(e){for(;this.root.childrens.length;){let t=this.root.childrens[0];t[exports.VNode.PARSERKEY]?t[exports.VNode.PARSERKEY].destroy(e):c(this.root.childrens,t)}this.render.destroy(),this.refs={},this.root.childrens.length=0,this.nodeWatcherEvents={},this.asts.length=0}destroyWathcers(){for(let e of this.root.childrens)e[exports.VNode.PARSERKEY]&&e[exports.VNode.PARSERKEY].destroyWathcers()}reSetAsts(e,t){this.destroy(t),this.render=exports.IContainer.get(exports.Render.IRENDERIOCTAGID)??new exports.Render.DomRender,this.asts=e}nodeTransition(e,t,s,r,n){if(e&&e.parent?.childrens&&(e instanceof exports.VNode.Element||e instanceof exports.VNode.Component)){let i=function(e){if(e instanceof exports.VNode.Element||e instanceof exports.VNode.Component){let t=e instanceof exports.VNode.Element?e.attributes:e.propValues;return{name:t["transition-name"],type:t["transition-type"]}}}(e);if(s??=i?.name,n??=i?.type,!s)return!1;let o=ge(e);if(o)return"enter"===t?this.render.elementToEnter(o,s,n,(()=>{let t=e[exports.VNode.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-enter"),r?.()})):this.render.elementToLeave(o,s,n,(()=>{let t=e[exports.VNode.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-leave"),r?.()})),!0;x.warn("渲染核心","在执行node动画时,发现数据不完备,请检查")}return!1}}function ge(e){if(e instanceof exports.VNode.Element)return e;if(e.childrens&&e.childrens.length)for(let t of e.childrens)return t instanceof exports.VNode.Element?t:ge(t)}function be(e,t,s){if(void 0===t)return;let r=Array.isArray(s)?s:[s];for(let e of r){if(e===Array&&t instanceof Array)return t;if(typeof t===e.name.toLocaleLowerCase())return t}switch(r[0]){case Number:let e=Number(t);if(!1===isNaN(e))return e;break;case String:return String(t)}throw new Error(`props中${e.toString()}的类型不符合约束类型`)}function we(e,t,s){let r,n,i;if("symbol"!=typeof t&&(r=f(t)),t in e?n=e[t]:r&&(n=e[r]),s&&(t in s?i=s[t]:r&&r in s&&(i=s[r])),void 0!==i){if(a(i)&&("type"in i||"required"in i||"default"in i||"validate"in i)){let e=i;if(e.required&&void 0===n)throw new Error(`props中key:${t.toString()}是必须项,请检查`);if(e.type&&(n=be(t,n,e.type)),e.validate&&!1===e.validate(n))throw new Error(`props中key${t.toString()}的值校验错误`);n=n??e.default}else n=Re(i)?be(t,n,i):n??i;return n}return n}function Re(e){return!![String,Array,Number,Object,Function,Boolean].includes(e)||e instanceof Array&&Re(e[0])}function Ae(e,t){if(!e.constructor)return!1;let s=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);return s&&s.get}const Ce="组件",Oe=Symbol.for("JOKER_PROPS_DATA_KEY"),Se=Symbol.for("JOKER_PROPS_DATA_PROXY"),$e=Symbol.for("JOKER_PRIVATE_WATCHERS"),Ve=Symbol.for("JOKER_EVENT_DATA_KEY"),Pe=Symbol.for("JOKER_IS_DESTROY"),Te=Symbol.for("JOKER_PARSER_TEMPLATE_TARGET"),De=Symbol.for("JOKER_SCOPE_ID"),_e=Symbol.for("JOKER_COMPONENT_TAG"),Ke=Symbol();let ke=["constructor","$mount","$nodeTransition","$destroy","$getRef","$getRefs","$syncProp","$watchNode","$watch","$on","$off","$trigger","$render","created","mounted","beforeDestroy","sleeped","wakeup","destroyed"];class We{$sections;isKeepAlive;static[_e]=!0;[De];model={};template;$root;isSleeped=!1;components={};propsOption;[Oe]={};[Te];[Se];[$e]=[];[Ve]=new Map;[Pe]=!1;[Ke]=!1;constructor(e,t={},s){this.$sections=t,this.isKeepAlive=s,this[Oe]=e||{}}get props(){if(void 0===this[Se]){let e=this;this[Se]=new Proxy(e[Oe],{get:(t,s)=>we(e[Oe],s,e.propsOption),set(){throw new Error("props 参数不允许变更,只允许单向数据传递")}})}return this[Se]}$mount(e){if(!1===this[Ke]){let e=()=>{let e=[],t=Object.getPrototypeOf(this);for(;null!==t&&t!==Object.prototype;)Object.getOwnPropertyNames(t).forEach((s=>{!1!==ke.includes(s)||Ae(t,s)||"function"!=typeof t[s]||t[s].prototype?.hasOwnProperty("constructor")||e.push(s)})),t=Object.getPrototypeOf(t);return e};for(let t of e())this[t]=this[t].bind(this);this[Ke]=!0}if(this.$root=e,this.isKeepAlive&&this.isSleeped)return this.isSleeped=!1,this[Te]&&this.$root?(this[Te].mount(this.$root),this.wakeup(),this.$trigger("wakeup"),this.$rootVNode&&He(this.$rootVNode),this):(x.error(Ce,"当前组件在唤醒时,发现渲染处理程序已被销毁,无法进行唤醒操作",[this,this.$root]),this);this.isSleeped=!1,this.model=V(this.model);let t=this.created(),s=async()=>{this.$trigger("created"),this.template&&this.$render(),await this.$nextUpdatedRender(),this[Pe]||(await this.mounted(),this[Pe]||this.$trigger("mounted"))};return t&&t instanceof Promise?t.then((()=>{this[Pe]||s()})):s(),this}$nextUpdatedRender(e){if(this[Pe])return;let t=[...this[Te]?.promiseQueue||[]],s=this.$rootVNode?.find((e=>e instanceof exports.VNode.Component));if(s?.forEach((e=>{e?.component&&t.push(...e.component[Te]?.promiseQueue||[])})),t.length)return Promise.all(t).finally((()=>{this[Pe]||e?.()}));this[Pe]||e?.()}$nodeTransition(e,t,s,r,n){if("string"==typeof e){let t=this.$getRef(e);if(!t)return void x.error(Ce,`执行节点动画是找不到ref=${e}的节点`);e=t}this[Te]?.nodeTransition(e,t,s,r,n)}$destroy(e){if(!e&&this.isKeepAlive)return this[Te]?.sleep(),this.isSleeped=!0,this.sleeped(),this.$trigger("sleeped"),void(this.$rootVNode&&je(this.$rootVNode));this[Pe]=!0;for(let e of this[$e])e.destroy();this[$e].length=0,this[Te]?.destroyWathcers(),this.beforeDestroy(),this.$trigger("beforeDestroy"),this[Te]?.destroy(),this[Te]=void 0,this.template&&Array.isArray(this.template)&&(this.template.length=0),this.$trigger("destroy"),this[Ve].clear(),this.$root=void 0,this.isSleeped=!1,this.$sections={},this[Se]=void 0,this[Oe]={},this.destroyed()}get $refs(){return this[Te]?.refs||{}}$getRef(e){return this.$refs[e]?.[0]}$getRefs(e){return this.$refs[e]}$syncProp(e,t,s){"function"==typeof t&&(s=t,t=void 0),t??=e,s??=e=>e,this.model[t]=s(this.props[e]),this.$watch((()=>this.props[e]),(()=>{this.model[t]=s?.(this.props[e])}))}get $rootVNode(){return this[Te]?.root}$watchNode(e,t){if(this[Te])return this[Te]?.addNodeWatcher(e,t),()=>{this[Te]?.removeNodeWatcher(e,t)};x.warn(Ce,"该组件还未挂载,不可以进行节点观察监听")}$watch(e,t,s){let r=new I((()=>{if(this[Pe]){for(let e of this[$e])e.destroy();return W}return e()}),((e,s)=>{this[Pe]||t(e,s)}),void 0,s);return this[$e].push(r),[r.value,()=>{r.destroy(),c(this[$e],r)}]}$on(e,t){let s=this[Ve].get(e);void 0===s&&(s=new Set,this[Ve].set(e,s)),!1===s?.has(t)&&s.add(t)}$off(e,t){let s=this[Ve].get(e);s&&(t?s.delete(t):s.clear())}$trigger(e,t,s){if(!this.$root)return;let r={eventName:e,stopPropagation:s?.stopPropagation??(()=>{}),preventDefault:s?.preventDefault??(()=>{}),data:t,target:s?.target??this.$rootVNode,event:s?.event};if(this.$rootVNode&&this.$rootVNode.parent&&this.$rootVNode.parent instanceof exports.VNode.Component&&!1===this[Te]?.render.triggerEvent(this.$rootVNode.parent,e,r))return;let n=this[Ve].get(e);n?.size&&[...n].forEach((e=>{e(r)}));let i=this[Ve].get("*");i?.size&&[...i].forEach((e=>{e(r)}))}$render(t,s){t??=this.template,this.template="function"==typeof t?t(e.RENDER_HANDLER):t,this.$root&&(this.template??=[],this[Te]?.reSetAsts(this.template,s),this[Te]??=new xe(this.template,this,this.$root),this[Te].parser(),this.$root&&this[Te].mount(this.$root))}created(){}mounted(){}beforeDestroy(){}sleeped(){}wakeup(){}destroyed(){}}const Ie={};function Le(e,t){if("string"==typeof e)t&&(Ie[e]=t);else for(let t in e)Ie[t]=e[t]}function Me(e){return Ie[e]}function je(e){e.childrens?.forEach((e=>{e instanceof exports.VNode.Component&&e.component?.sleeped(),je(e)}))}function He(e){e.childrens?.forEach((e=>{e instanceof exports.VNode.Component&&e.component?.wakeup(),He(e)}))}class Ye extends We{template=[];cache=new Map;async mounted(){this.$watch((()=>this.props.name),(async e=>{this.$render([],!0),await Promise.resolve(),this.$root&&this.loadComponent(e)})),await this.loadComponent(this.props.name)}propsVaule;created(){this.initProps()}initProps(){let e={};this.props.props||(Object.keys(this.props).forEach((t=>{!1!==this.filterProps(t)&&(e[t]=this.props[t],this.$watch((()=>this.props[t]),(()=>{this.propsVaule[t]=this.props[t]})))})),this.propsVaule=V(e))}filterProps(e){if("string"!=typeof e)return!1;let t=f(e);return"transition-name"!==t&&"name"!==t&&"keep-alive"!==t&&"ref"!==t&&void 0}async loadComponent(t){if(!t)return void this.$render([],this.isKeepAlive);let s;if(this.isKeepAlive){let s=this.cache.get(t);if(s)return void this.$render([e.createComponent(s,{"transition-name":this.props["transition-name"]})],!0)}let r=this.$rootVNode?.parent?.[exports.VNode.PARSERKEY]?.ob.components,n=r?.[t];void 0===n&&(n=Me(t)),n?(_e in n||(n=(await n()).default),s=new n(this.props.props||this.propsVaule,this.$sections,this.isKeepAlive),s.$on("*",(e=>{this.$trigger(e.eventName,e.data,e)})),this.isKeepAlive&&this.cache.set(t,s),this.$render([e.createComponent(s,{"transition-name":this.props["transition-name"]})],this.isKeepAlive)):x.warn("component",`未找到${t}的组件`)}beforeDestroy(){this.removeCache()}removeCache(e){if(e){let t=this.cache.get(e);this.cache.delete(e),t&&t.$destroy(!0)}else this.cache.forEach((e=>{e.$destroy(!0)})),this.cache.clear()}}class Be extends We{template=function(){return[e.createCommand("RenderSection")]};async mounted(){await this.$nextUpdatedRender()}}Le({template:Be,component:Ye});Object.defineProperty(exports,"AST",{enumerable:!0,get:function(){return e.AST}}),Object.defineProperty(exports,"EXPRESSHANDLERTAG",{enumerable:!0,get:function(){return e.EXPRESSHANDLERTAG}}),Object.defineProperty(exports,"RENDER_HANDLER",{enumerable:!0,get:function(){return e.RENDER_HANDLER}}),Object.defineProperty(exports,"createCodeFunction",{enumerable:!0,get:function(){return e.createCodeFunction}}),Object.defineProperty(exports,"createCommand",{enumerable:!0,get:function(){return e.createCommand}}),Object.defineProperty(exports,"createComment",{enumerable:!0,get:function(){return e.createComment}}),Object.defineProperty(exports,"createComponent",{enumerable:!0,get:function(){return e.createComponent}}),Object.defineProperty(exports,"createElement",{enumerable:!0,get:function(){return e.createElement}}),Object.defineProperty(exports,"createFuntionBody",{enumerable:!0,get:function(){return e.createFuntionBody}}),Object.defineProperty(exports,"createText",{enumerable:!0,get:function(){return e.createText}}),exports.BREAK_WATCH_UPDATE=W,exports.Component=We,exports.ComponentContainer=Ye,exports.Dep=w,exports.EventBus=class{eventDatas=new Map;on(e,t){let s=this.eventDatas.get(e);void 0===s&&(s=[],this.eventDatas.set(e,s));let r={callBack:t};return s.push(r),()=>{s&&c(s,r)}}once(e,t){let s=this.eventDatas.get(e);void 0===s&&(s=[],this.eventDatas.set(e,s));let r={callBack:t,once:!0};return s.push(r),()=>{s&&c(s,r)}}off(e,t){if(void 0!==e)if(t){let s=this.eventDatas.get(e),r=s?.find((e=>e.callBack===t));r&&c(s,r)}else this.eventDatas.delete(e);else this.eventDatas.clear()}async trigger(e,t){let s=[...this.eventDatas.get(e)||[]];if(s.push(...this.eventDatas.get("*")||[]),s&&s.length){let r=0,n=0,i=!1;for(;s[r];){let o=s[r],a=await o.callBack({stopPropagation:()=>i=!0,callTimes:n,eventName:e},t);if(o.once?c(s,o):r++,!1===a||i)return!1}}}},exports.IS_DESTROY=Pe,exports.JOKER_COMPONENT_TAG=_e,exports.JOKER_VNODE_TAG=L,exports.OBJECTPROXY_DEPID=R,exports.PARSER_TEMPLATE_TARGET=Te,exports.ParserTemplate=xe,exports.SCOPE_ID=De,exports.ShallowObserver=class{data;[T]=!0;dep=new w;constructor(e){this.data=e}isChanged=!1;get value(){return this.dep.depend(C),this.data}set value(e){!1===Object.is(e,this.data)&&(this.isChanged=!0,this.data=e,K(this.dep,C))}},exports.Template=Be,exports.Watcher=I,exports.__GLONAL_FUNTIONS__=se,exports.__JOKER_HMR_RUNTIME=n,exports.combinedReply=function(e){D=!0;try{e()}catch(e){return D=!1,_.clear(),void x.error("数据劫持","数据劫持组合回复在做变更采集时,遇到了阻塞错误,不做响应,请检查",e)}D=!1,function(e){let t=[],s=[];e.forEach(((e,s)=>{e.forEach((e=>{t.push(...s.watchers.get(e)||[])}))})),t.forEach((e=>{s.includes(e)||(!1===e.isDestroy&&e.update(),s.push(e))}))}(_),_.clear()},exports.defineObserverProperty=P,exports.getGlobalComponent=Me,exports.isObserverData=function(e){return void 0!==$(e)},exports.observer=V,exports.registerGlobalComponent=Le,exports.registerGlobalFunction=function(e){for(let t in e)se[t]=e[t]};
|