@joker.front/core 1.3.58 → 1.3.67

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 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 X.Component&&t[X.PARSERKEY]&&t[X.PARSERKEY].canReload))return window.onbeforeunload=null,void location.reload();t[X.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 A(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){A("info",e,t,i)},warn:function(e,t,i){A("warn",e,t,i)},error:function(e,t,i){A("error",e,t,i)},setLoggerLeve:function(e){w=e}};const $={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"',"#39":"'"};function O(e){return e.replace(/&(lt|gt|nbsp|amp|quot|#39);/gi,((e,t)=>$[t]||""))}class x{static target;watchers=new Map;depend(e){x.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__"),T=Symbol.for("__JOKER_OBJECT_PROXY_DATA_KEY__"),D=Symbol.for("__JOKER_OBJECTPROXY_DEPLEVE_ID__");function P(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)&&!(Je in e)}function K(e){if(_(e))return e;if(e&&e.hasOwnProperty(T)){let t=Reflect.get(e,T);if(t)return t}let t=new x,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=>{P(i)&&(i=k(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)=>{P(n)&&(n=k(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===T)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),P(n)&&_(n)?.depend(D)),n},set(e,s,n){if(i)return Reflect.set(e,s,n),!0;P(n)&&(n=k(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=T,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];P(i)&&!_(i)&&(s[t]=K(e[t]))}return i=!1,s}function _(e){if(l(e))return Reflect.get(e,S)}function k(e,t=!1){if(!1===P(e))throw new Error("当前传入的数据不是正确的数据类型,必须是数组或者对象");return K(t?f(e):e)}function W(e,t,i){let s=i;P(i)&&(s=k(i));let n=new x;Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:()=>(n.depend(t),_(s)?.depend(D),s),set:e=>{e!==s&&(P(e)&&(e=k(e)),s=e,j(n,t))}})}const I=Symbol.for("JOKER_SHALLOW_OBSERVER");class L{data;[I]=!0;dep=new x;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!==_(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;x.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 x.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 X;!function(e){e.PARSERKEY=Symbol.for("JOKER_PARSER_KEY");class t{parent;[q]=!0;static;output;[e.PARSERKEY];childrens;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(t,i){if(!0===t(this))return this;let s=this.parent;for(;s;){if(i&&s instanceof e.Root)return;if(!0===t(s))return s;s=s.parent}}find(e,t,i){let s=i??[];if(t??=this.childrens,t)for(let i of t){!0===e(i)&&s.push(i),i.childrens&&this.find(e,i.childrens,s)}return s}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}}}(X||(X={}));const z="DOM渲染",U=["script","style","textarea","pre"];let Z=0;const Q=["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 X.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(z,"组件挂载渲染时发现该节点未定义DOM定位节点",e);else C.error(z,"mount子组件时,发现该组件无父级",e);else C.error(z,"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(z,"未找自身节点的el属性,无法进行dom挂载",e)}updateNode(e,t){if(e instanceof X.Element)for(let t in e.attributes){let i=e.attributes[t];this.setAttribute(e.output,t,i)}else e instanceof X.Text?e.parent&&e.parent instanceof X.Element&&U.includes(e.parent.tagName)?(this.removeNode(e),this.appendNode(e)):e.output.textContent=O(e.text||""):e instanceof X.Html?e.notShadow?e.output.innerHTML=e.html:e.output.root.innerHTML=e.html:C.error(z,`该节点不支持${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 X.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(z,"事件修饰符: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__=Z++;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 X.Text)e.parent&&e.parent instanceof X.Element&&U.includes(e.parent.tagName)?e.output=this.parserHtml(e.text):e.output=document.createTextNode(O(e.text||""));else if(e instanceof X.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 X.Element){let t,i=e.tagName.toLowerCase();"svg"===i||Q.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 X.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(z,"事件修饰符: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 X.Component||e instanceof X.Condition||e instanceof X.List||e instanceof X.ListItem||e instanceof X.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 X.Root){let e=i.parent;if(e&&e instanceof X.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 X.Element){let e=i.output;if(void 0===e)return;e.appendChild(t)}else if(this.isCommandGroup(i)){let e=i.output,n=e?.parentNode;if(void 0!==s&&i.childrens?.length&&n){let e=s-1;if(e<0)return void n.insertBefore(t,n.firstChild);{let s=i.childrens[e];if(s){let e=s.output;if(e)return void e.after(t)}}}n&&n.insertBefore(t,e)}else C.error(z,"该节点不支持嵌套子集,请检查。",{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 X.Element||e instanceof X.Component){let t=e instanceof X.Component?e.propValues["append-to"]:e.attributes["append-to"];if(t){if(t instanceof X.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(z,"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(",","."))}class ce extends HTMLElement{root;constructor(){super(),this.root=this.attachShadow({mode:"open"})}}!customElements.get("joker-html-shadow")&&customElements.define("joker-html-shadow",ce);const ue={};function fe(e){for(let t in e)ue[t]=e[t]}const pe="Global",me="渲染核心";function ye(t){try{return new Function(e,pe,`return ${t};`)}catch{throw new Error("创建表达式运行方法时出现未知错误,表达式为"+t)}}class Ee{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 X.Element||this.node instanceof X.Component)&&this.ext.removeRef(this.node);let t=()=>{this.parent&&this.node&&(this.beforeDestroy(e),this.destroyChildrens(e),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[X.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[X.PARSERKEY]?t[X.PARSERKEY].destroy(e):y(this.node.childrens,t)}}destroyChildrensWatcher(e){if(e?.childrens?.length)for(let t of e?.childrens)t[X.PARSERKEY]&&(t[X.PARSERKEY].clearWatchers(),this.destroyChildrensWatcher(t))}appendNode(e){this.parent?.childrens&&this.node&&!this.isDestroy&&(this.node[X.PARSERKEY]=this,this.node instanceof X.Element&&this.ob[He]&&(this.node.attributes["data-scoped-"+this.ob[He]]=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 ye(e).call(t,t,ue)}catch(i){C.error(me,"运行表达式出现错误:"+e,{ob:t}),console.error(i)}}runExpressWithWatcher(e,t,i,s){if(this.isDestroy)return;let n="string"==typeof e?ye(e):e,r=new F((()=>{if(this.isDestroy||t[Ye])return J;try{return n.call(t,t,ue)}catch(i){return C.error(me,"运行表达式出现错误",{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 ve extends Ee{parser(){this.node=new X.Text(this.ast.text,this.parent),this.appendNode()}}class ge extends Ee{parser(){this.node=new X.Comment(this.ast.text,this.parent),this.appendNode()}}class be extends Ee{parser(){if(this.node=new X.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[X.PARSERKEY];t&&t instanceof be&&t.renderConditionChildren()}}this.reloadAllCondition()}}));this.node.result=!!e}this.appendNode(),this.renderConditionChildren()}renderId;getElseNode(){let e=this.node?.next;for(;e&&e instanceof X.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 X.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 X.Condition&&"if"!==e.cmdName;){let t=e[X.PARSERKEY];t&&t instanceof be&&t.renderConditionChildren(),e=e.next}}let e=this.node?.next;for(this.node?.result||this.destroyChildrens(!0);e&&e instanceof X.Condition&&"if"!==e.cmdName;){let t=e[X.PARSERKEY];t&&t instanceof be&&t.renderConditionChildren(),e=e.next}}}class we extends Ee{parser(){this.node=new X.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]?.[X.PARSERKEY]?.destroy();else for(let e=0;e<n-t-1;e++)this.node.childrens?.[t]?.[X.PARSERKEY]?.destroy();return this.renderItem(e,t,i)}return new Ne(this.ast,e,this.node,this.ext).init(t)}return new Ne(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[X.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 Ne extends Ee{parser(e){this.node=new X.ListItem(this.ob,this.parent),this.appendNode(e),this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}}class Re extends Ee{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(pe+".")?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 X.Html(Ae(t[0]),this.parent,t[1]):this.node=new X.Text(Ae(t[0]),this.parent),void this.appendNode()}throw new Error(`未找到命令:${this.ast.cmdName}`)}changeValue(e){this.node&&(this.node instanceof X.Html?this.node.html=Ae(e):this.node.text=Ae(e),this.ext.render?.updateNode(this.node))}}function Ae(e){return null==e||"function"==typeof e?"":e.toString()}const Ce="default";class $e extends Ee{parser(){let e=this.transformParam();this.node=new X.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]||Ce;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]||Ce,params:e?.slice(1)||[]}}return{id:Ce,params:[]}}}const Oe="组件解析";function xe(e,t){return!!t.components[e]||!!Ue(e)}class Se extends Ee{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 X.Component(this.parent),this.initPropData(),this.appendNode(),this.initEvent(),this.renderChildren()}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=k(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(){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(Je 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;if(!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),this.node.component.$mount(this.node),!this.node)return;let e=this.node?.component;e.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||Ce;/^(\'|\")(.*?)((\'|\"))$/.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[Ce]=t[Ce]||{asts:[],ob:this.ob,parser:this.ext},t[Ce].asts.push(e)})),t}beforeDestroy(e){!0===e&&this.node?.component?.isKeepAlive?this.node?.component?.$destroy():(this.node?.component?.$destroy(!0),this.ast.node=void 0)}}class Te extends Ee{parser(){this.node=new X.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 De{asts;ob;root=new X.Root;refs={};sleeped=!1;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 X.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 ve(n,s??this.ob,t,this).init();else if(n.type===i.NodeType.COMMENT)new ge(n,s??this.ob,t,this).init();else if(n.type===i.NodeType.COMPONENT)new Se(n,s??this.ob,t,this).init();else if(n.type===i.NodeType.ELEMENT){let e=n;xe(e.tagName,s??this.ob)?new Se(e,s??this.ob,t,this).init():new Te(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 be(e,s??this.ob,t,this).init();break;case"for":new we(e,s??this.ob,t,this).init();break;case"RenderSection":new $e(e,s??this.ob,t,this).init();break;case"section":break;default:new Re(e,s??this.ob,t,this).init()}}}addRef(e,t){this.refs[e]=this.refs[e]||[],this.refs[e].push(t)}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[X.PARSERKEY]?t[X.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[X.PARSERKEY]&&e[X.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 X.Element||e instanceof X.Component)){let r=function(e){if(e instanceof X.Element||e instanceof X.Component){let t=e instanceof X.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=Pe(e);if(o)return"enter"===t?this.render.elementToEnter(o,i,n,(()=>{let t=e[X.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-enter"),s?.()})):this.render.elementToLeave(o,i,n,(()=>{let t=e[X.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-leave"),s?.()})),!0;C.warn("渲染核心","在执行node动画时,发现数据不完备,请检查")}return!1}}function Pe(e){if(e instanceof X.Element)return e;if(e.childrens&&e.childrens.length)for(let t of e.childrens)return t instanceof X.Element?t:Pe(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=ke(r)?Ke(t,n,r):n??r;return n}return n}function ke(e){return!![String,Array,Number,Object,Function,Boolean].includes(e)||e instanceof Array&&ke(e[0])}function We(e,t){if(!e.constructor)return!1;let i=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);return i&&i.get}const Ie="组件",Le=Symbol.for("JOKER_PROPS_DATA_KEY"),Ve=Symbol.for("JOKER_PROPS_DATA_PROXY"),Me=Symbol.for("JOKER_PRIVATE_WATCHERS"),je=Symbol.for("JOKER_EVENT_DATA_KEY"),Ye=Symbol.for("JOKER_IS_DESTROY"),Be=Symbol.for("JOKER_PARSER_TEMPLATE_TARGET"),He=Symbol.for("JOKER_SCOPE_ID"),Je=Symbol.for("JOKER_COMPONENT_TAG"),Fe=Symbol();let Ge=["constructor","$mount","$nodeTransition","$destroy","$getRef","$getRefs","$syncProp","$watchNode","$watch","$on","$off","$trigger","$render","created","mounted","beforeDestroy","sleeped","wakeup","destroyed"];class qe{$sections;isKeepAlive;static[Je]=!0;[He];model={};template;$root;isSleeped=!1;components={};propsOption;[Le]={};[Be];[Ve];[Me]=[];[je]=new Map;[Ye]=!1;[Fe]=!1;constructor(e,t={},i){this.$sections=t,this.isKeepAlive=i,this[Le]=e||{}}get props(){if(void 0===this[Ve]){let e=this;this[Ve]=new Proxy(e[Le],{get:(t,i)=>_e(e[Le],i,e.propsOption),set(){throw new Error("props 参数不允许变更,只允许单向数据传递")}})}return this[Ve]}$mount(e){if(!1===this[Fe]){let e=()=>{let e=[],t=Object.getPrototypeOf(this);for(;null!==t&&t!==Object.prototype;)Object.getOwnPropertyNames(t).forEach((i=>{!1!==Ge.includes(i)||We(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[Fe]=!0}if(this.$root=e,this.isKeepAlive&&this.isSleeped)return this.isSleeped=!1,this[Be]&&this.$root?(this[Be].mount(this.$root),this.wakeup(),this.$trigger("wakeup"),this.$rootVNode&&Qe(this.$rootVNode),this):(C.error(Ie,"当前组件在唤醒时,发现渲染处理程序已被销毁,无法进行唤醒操作",[this,this.$root]),this);this.isSleeped=!1,this.model=k(this.model);let t=this.created(),i=async()=>{this.$trigger("created"),this.template&&this.$render(),await Promise.resolve(),this.mounted(),this.$trigger("mounted")};return t&&t instanceof Promise?t.then((()=>{this[Ye]||i()})):i(),this}$nodeTransition(e,t,i,s,n){if("string"==typeof e){let t=this.$getRef(e);if(!t)return void C.error(Ie,`执行节点动画是找不到ref=${e}的节点`);e=t}this[Be]?.nodeTransition(e,t,i,s,n)}$destroy(e){if(!e&&this.isKeepAlive)return this[Be]?.sleep(),this.isSleeped=!0,this.sleeped(),this.$trigger("sleeped"),void(this.$rootVNode&&Ze(this.$rootVNode));this[Ye]=!0;for(let e of this[Me])e.destroy();this[Me].length=0,this[Be]?.destroyWathcers(),this.beforeDestroy(),this.$trigger("beforeDestroy"),this[Be]?.destroy(),this[Be]=void 0,this.template&&Array.isArray(this.template)&&(this.template.length=0),this.$trigger("destroy"),this[je].clear(),this.$root=void 0,this.isSleeped=!1,this.$sections={},this[Ve]=void 0,this[Le]={},this.destroyed()}get $refs(){return this[Be]?.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[Be]?.root}$watchNode(e,t){if(this[Be])return this[Be]?.addNodeWatcher(e,t),()=>{this[Be]?.removeNodeWatcher(e,t)};C.warn(Ie,"该组件还未挂载,不可以进行节点观察监听")}$watch(e,t,i){let s=new F((()=>{if(this[Ye]){for(let e of this[Me])e.destroy();return J}return e()}),((e,i)=>{this[Ye]||t(e,i)}),void 0,i);return this[Me].push(s),[s.value,()=>{s.destroy(),y(this[Me],s)}]}$on(e,t){let i=this[je].get(e);void 0===i&&(i=[],this[je].set(e,i)),!1===i?.includes(t)&&i.push(t)}$off(e,t){let i=this[je].get(e);i&&(t?y(i,t):i.length=0)}$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 X.Component&&!1===this[Be]?.render.triggerEvent(this.$rootVNode.parent,e,s))return;let n=this[je].get(e);n?.length&&[...n].forEach((e=>{e(s)}));let r=this[je].get("*");r?.length&&[...r].forEach((e=>{e(s)}))}$render(e,t){e??=this.template,this.template="function"==typeof e?e(s):e,this.$root&&(this.template??=[],this[Be]?.reSetAsts(this.template,t),this[Be]??=new De(this.template,this,this.$root),this[Be].parser(),this.$root&&this[Be].mount(this.$root))}created(){}mounted(){}beforeDestroy(){}sleeped(){}wakeup(){}destroyed(){}}const Xe={};function ze(e,t){if("string"==typeof e)t&&(Xe[e]=t);else for(let t in e)Xe[t]=e[t]}function Ue(e){return Xe[e]}function Ze(e){e.childrens?.forEach((e=>{e instanceof X.Component&&e.component?.sleeped(),Ze(e)}))}function Qe(e){e.childrens?.forEach((e=>{e instanceof X.Component&&e.component?.wakeup(),Qe(e)}))}class et extends qe{template=[];cache=new Map;mounted(){this.$watch((()=>this.props.name),(async e=>{this.$render([],!0),await Promise.resolve(),this.$root&&this.loadComponent(e)})),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=k(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?.[X.PARSERKEY]?.ob.components,s=i?.[e];void 0===s&&(s=Ue(e)),s?(Je 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 tt extends qe{template=function(){return[r("RenderSection")]}}ze({template:tt,component:et});class it{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,qe as Component,et as ComponentContainer,x as Dep,it as EventBus,G as IContainer,Ye as IS_DESTROY,Je as JOKER_COMPONENT_TAG,q as JOKER_VNODE_TAG,S as OBJECTPROXY_DEPID,Be as PARSER_TEMPLATE_TARGET,De as ParserTemplate,ee as Render,He as SCOPE_ID,L as ShallowObserver,tt as Template,X as VNode,F as Watcher,ue as __GLONAL_FUNTIONS__,d as __JOKER_HMR_RUNTIME,Y as combinedReply,W as defineObserverProperty,Ue as getGlobalComponent,B as isObserverData,k as observer,ze as registerGlobalComponent,fe as registerGlobalFunction};
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 A={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 C={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"',"#39":"'"};function x(e){return e.replace(/&(lt|gt|nbsp|amp|quot|#39);/gi,((e,t)=>C[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)&&!(Je in e)}function K(e){if(_(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=k(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=k(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)&&_(n)?.depend(D)),n},set(e,s,n){if(i)return Reflect.set(e,s,n),!0;T(n)&&(n=k(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)&&!_(i)&&(s[t]=K(e[t]))}return i=!1,s}function _(e){if(l(e))return Reflect.get(e,S)}function k(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=k(i));let n=new O;Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:()=>(n.depend(t),_(s)?.depend(D),s),set:e=>{e!==s&&(T(e)&&(e=k(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 A.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!==_(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&&A.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 A.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;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(t,i){if(!0===t(this))return this;let s=this.parent;for(;s;){if(i&&s instanceof e.Root)return;if(!0===t(s))return s;s=s.parent}}find(e,t,i){let s=i??[];if(t??=this.childrens,t)for(let i of t){!0===e(i)&&s.push(i),i.childrens&&this.find(e,i.childrens,s)}return s}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 A.error(Q,"组件挂载渲染时发现该节点未定义DOM定位节点",e);else A.error(Q,"mount子组件时,发现该组件无父级",e);else A.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 A.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:A.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){A.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&&(A.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 e=i.output,n=e?.parentNode;if(void 0!==s&&i.childrens?.length&&n){let e=s-1;if(e<0)return void n.insertBefore(t,n.firstChild);{let s=i.childrens[e];if(s){let e=s.output;if(e)return void e.after(t)}}}n&&n.insertBefore(t,e)}else A.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}A.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(",","."))}class ce extends HTMLElement{root;constructor(){super(),this.root=this.attachShadow({mode:"open"})}}!customElements.get("joker-html-shadow")&&customElements.define("joker-html-shadow",ce);const ue={};function fe(e){for(let t in e)ue[t]=e[t]}const pe="Global",me="渲染核心";function ye(t){try{return new Function(e,pe,`return ${t};`)}catch{throw new Error("创建表达式运行方法时出现未知错误,表达式为"+t)}}class Ee{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.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[He]&&(this.node.attributes["data-scoped-"+this.ob[He]]=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 ye(e).call(t,t,ue)}catch(i){A.error(me,"运行表达式出现错误:"+e,{ob:t}),console.error(i)}}runExpressWithWatcher(e,t,i,s){if(this.isDestroy)return;let n="string"==typeof e?ye(e):e,r=new F((()=>{if(this.isDestroy||t[Ye])return J;try{return n.call(t,t,ue)}catch(i){return A.error(me,"运行表达式出现错误",{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 ve extends Ee{parser(){this.node=new z.Text(this.ast.text,this.parent),this.appendNode()}}class ge extends Ee{parser(){this.node=new z.Comment(this.ast.text,this.parent),this.appendNode()}}class be extends Ee{parser(){if(this.node=new z.Condition(this.ast.kind,this.parent),"else"!==this.ast.kind){v(this.ast.condition)&&A.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 be&&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 be&&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 be&&t.renderConditionChildren(),e=e.next}}}class we extends Ee{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 Ne(this.ast,e,this.node,this.ext).init(t)}return new Ne(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 Ne extends Ee{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 Re extends Ee{parser(){if(v(this.ast.cmdName))throw A.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(pe+".")?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($e(t[0]),this.parent,t[1]):this.node=new z.Text($e(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=$e(e):this.node.text=$e(e),this.ext.render?.updateNode(this.node))}}function $e(e){return null==e||"function"==typeof e?"":e.toString()}const Ae="default";class Ce extends Ee{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 xe="组件解析";function Oe(e,t){return!!t.components[e]||!!Xe(e)}class Se extends Ee{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()):A.warn(xe,"当前组件无法实现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)){A.warn(xe,"元素的ref值不可以为空");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}this.node.propValues=k(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)}}]):A.error(xe,`${"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]||Xe(this.ast.tagName);if(void 0===e)return void A.error(xe,`渲染组件失败,未找到名称为'${this.ast.tagName}'的私有组件/全局组件`);if(Je 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 A.warn(xe,"在解析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 Pe extends Ee{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)){A.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 De{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 ve(n,s??this.ob,t,this).init();else if(n.type===i.NodeType.COMMENT)new ge(n,s??this.ob,t,this).init();else if(n.type===i.NodeType.COMPONENT)new Se(n,s??this.ob,t,this).init();else if(n.type===i.NodeType.ELEMENT){let e=n;Oe(e.tagName,s??this.ob)?new Se(e,s??this.ob,t,this).init():new Pe(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 be(e,s??this.ob,t,this).init();break;case"for":new we(e,s??this.ob,t,this).init();break;case"RenderSection":new Ce(e,s??this.ob,t,this).init();break;case"section":break;default:new Re(e,s??this.ob,t,this).init()}}}addRef(e,t){this.refs[e]=this.refs[e]||[],this.refs[e].push(t)}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=Te(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;A.warn("渲染核心","在执行node动画时,发现数据不完备,请检查")}return!1}}function Te(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:Te(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=ke(r)?Ke(t,n,r):n??r;return n}return n}function ke(e){return!![String,Array,Number,Object,Function,Boolean].includes(e)||e instanceof Array&&ke(e[0])}function We(e,t){if(!e.constructor)return!1;let i=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);return i&&i.get}const Ie="组件",Le=Symbol.for("JOKER_PROPS_DATA_KEY"),Ve=Symbol.for("JOKER_PROPS_DATA_PROXY"),Me=Symbol.for("JOKER_PRIVATE_WATCHERS"),je=Symbol.for("JOKER_EVENT_DATA_KEY"),Ye=Symbol.for("JOKER_IS_DESTROY"),Be=Symbol.for("JOKER_PARSER_TEMPLATE_TARGET"),He=Symbol.for("JOKER_SCOPE_ID"),Je=Symbol.for("JOKER_COMPONENT_TAG"),Fe=Symbol();let Ge=["constructor","$mount","$nodeTransition","$destroy","$getRef","$getRefs","$syncProp","$watchNode","$watch","$on","$off","$trigger","$render","created","mounted","beforeDestroy","sleeped","wakeup","destroyed"];class qe{$sections;isKeepAlive;static[Je]=!0;[He];model={};template;$root;isSleeped=!1;components={};propsOption;[Le]={};[Be];[Ve];[Me]=[];[je]=new Map;[Ye]=!1;[Fe]=!1;constructor(e,t={},i){this.$sections=t,this.isKeepAlive=i,this[Le]=e||{}}get props(){if(void 0===this[Ve]){let e=this;this[Ve]=new Proxy(e[Le],{get:(t,i)=>_e(e[Le],i,e.propsOption),set(){throw new Error("props 参数不允许变更,只允许单向数据传递")}})}return this[Ve]}$mount(e){if(!1===this[Fe]){let e=()=>{let e=[],t=Object.getPrototypeOf(this);for(;null!==t&&t!==Object.prototype;)Object.getOwnPropertyNames(t).forEach((i=>{!1!==Ge.includes(i)||We(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[Fe]=!0}if(this.$root=e,this.isKeepAlive&&this.isSleeped)return this.isSleeped=!1,this[Be]&&this.$root?(this[Be].mount(this.$root),this.wakeup(),this.$trigger("wakeup"),this.$rootVNode&&Ze(this.$rootVNode),this):(A.error(Ie,"当前组件在唤醒时,发现渲染处理程序已被销毁,无法进行唤醒操作",[this,this.$root]),this);this.isSleeped=!1,this.model=k(this.model);let t=this.created(),i=async()=>{this.$trigger("created"),this.template&&this.$render(),await this.$nextUpdatedRender(),this[Ye]||(await this.mounted(),this[Ye]||this.$trigger("mounted"))};return t&&t instanceof Promise?t.then((()=>{this[Ye]||i()})):i(),this}$nextUpdatedRender(e){if(this[Ye])return;let t=[...this[Be]?.promiseQueue||[]],i=this.$rootVNode?.find((e=>e instanceof z.Component));if(i?.forEach((e=>{e?.component&&t.push(...e.component[Be]?.promiseQueue||[])})),t.length)return Promise.all(t).finally((()=>{this[Ye]||e?.()}));this[Ye]||e?.()}$nodeTransition(e,t,i,s,n){if("string"==typeof e){let t=this.$getRef(e);if(!t)return void A.error(Ie,`执行节点动画是找不到ref=${e}的节点`);e=t}this[Be]?.nodeTransition(e,t,i,s,n)}$destroy(e){if(!e&&this.isKeepAlive)return this[Be]?.sleep(),this.isSleeped=!0,this.sleeped(),this.$trigger("sleeped"),void(this.$rootVNode&&Ue(this.$rootVNode));this[Ye]=!0;for(let e of this[Me])e.destroy();this[Me].length=0,this[Be]?.destroyWathcers(),this.beforeDestroy(),this.$trigger("beforeDestroy"),this[Be]?.destroy(),this[Be]=void 0,this.template&&Array.isArray(this.template)&&(this.template.length=0),this.$trigger("destroy"),this[je].clear(),this.$root=void 0,this.isSleeped=!1,this.$sections={},this[Ve]=void 0,this[Le]={},this.destroyed()}get $refs(){return this[Be]?.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[Be]?.root}$watchNode(e,t){if(this[Be])return this[Be]?.addNodeWatcher(e,t),()=>{this[Be]?.removeNodeWatcher(e,t)};A.warn(Ie,"该组件还未挂载,不可以进行节点观察监听")}$watch(e,t,i){let s=new F((()=>{if(this[Ye]){for(let e of this[Me])e.destroy();return J}return e()}),((e,i)=>{this[Ye]||t(e,i)}),void 0,i);return this[Me].push(s),[s.value,()=>{s.destroy(),y(this[Me],s)}]}$on(e,t){let i=this[je].get(e);void 0===i&&(i=new Set,this[je].set(e,i)),!1===i?.has(t)&&i.add(t)}$off(e,t){let i=this[je].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[Be]?.render.triggerEvent(this.$rootVNode.parent,e,s))return;let n=this[je].get(e);n?.size&&[...n].forEach((e=>{e(s)}));let r=this[je].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[Be]?.reSetAsts(this.template,t),this[Be]??=new De(this.template,this,this.$root),this[Be].parser(),this.$root&&this[Be].mount(this.$root))}created(){}mounted(){}beforeDestroy(){}sleeped(){}wakeup(){}destroyed(){}}const ze={};function Qe(e,t){if("string"==typeof e)t&&(ze[e]=t);else for(let t in e)ze[t]=e[t]}function Xe(e){return ze[e]}function Ue(e){e.childrens?.forEach((e=>{e instanceof z.Component&&e.component?.sleeped(),Ue(e)}))}function Ze(e){e.childrens?.forEach((e=>{e instanceof z.Component&&e.component?.wakeup(),Ze(e)}))}class et extends qe{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=k(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=Xe(e)),s?(Je 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)):A.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 tt extends qe{template=function(){return[r("RenderSection")]};async mounted(){await this.$nextUpdatedRender()}}Qe({template:tt,component:et});class it{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,qe as Component,et as ComponentContainer,O as Dep,it as EventBus,G as IContainer,Ye as IS_DESTROY,Je as JOKER_COMPONENT_TAG,q as JOKER_VNODE_TAG,S as OBJECTPROXY_DEPID,Be as PARSER_TEMPLATE_TARGET,De as ParserTemplate,ee as Render,He as SCOPE_ID,L as ShallowObserver,tt as Template,z as VNode,F as Watcher,ue as __GLONAL_FUNTIONS__,d as __JOKER_HMR_RUNTIME,Y as combinedReply,W as defineObserverProperty,Xe as getGlobalComponent,B as isObserverData,k as observer,Qe as registerGlobalComponent,fe 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 g={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 x={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"',"#39":"'"};function b(e){return e.replace(/&(lt|gt|nbsp|amp|quot|#39);/gi,((e,t)=>x[t]||""))}class R{static target;watchers=new Map;depend(e){R.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 w=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)&&!(P in e)&&!(De 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 R,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===w)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,w)}function V(e,t=!1){if(!1===O(e))throw new Error("当前传入的数据不是正确的数据类型,必须是数组或者对象");return S(t?h(e):e)}function T(e,t,s){let r=s;O(s)&&(r=V(s));let n=new R;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 P=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&&g.error(k,"getter创建失败",arguments),this.value=this.getValue()}getValue(){if(void 0===this.getter)return;R.target=this;let e,t="function"==typeof this.ob?this.ob():this.ob;try{e=this.getter.call(t,t)}catch(e){throw g.error(k,`获取值失败,执行方法:${this.getter.toString()}`),e}return R.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;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(t,s){if(!0===t(this))return this;let r=this.parent;for(;r;){if(s&&r instanceof e.Root)return;if(!0===t(r))return r;r=r.parent}}find(e,t,s){let r=s??[];if(t??=this.childrens,t)for(let s of t){!0===e(s)&&r.push(s),s.childrens&&this.find(e,s.childrens,r)}return r}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 g.error(M,"组件挂载渲染时发现该节点未定义DOM定位节点",e);else g.error(M,"mount子组件时,发现该组件无父级",e);else g.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 g.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:g.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){g.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=Z(e,t);if(s>0)return{timeout:s,count:t.length}}else if("animation"===t){let e=r("animationDelay"),t=r("animationDuration"),s=Z(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&&(g.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 e=s.output,n=e?.parentNode;if(void 0!==r&&s.childrens?.length&&n){let e=r-1;if(e<0)return void n.insertBefore(t,n.firstChild);{let r=s.childrens[e];if(r){let e=r.output;if(e)return void e.after(t)}}}n&&n.insertBefore(t,e)}else g.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}g.warn(M,"appendTo类型不支持",{appendTo:t,node:e})}}}function Z(e,t){for(;e.length<t.length;)e.concat(e);return Math.max(...t.map(((t,s)=>Q(t)+Q(e[s]))))}function Q(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}class ee extends HTMLElement{root;constructor(){super(),this.root=this.attachShadow({mode:"open"})}}!customElements.get("joker-html-shadow")&&customElements.define("joker-html-shadow",ee);const te={};const se="Global",re="渲染核心";function ne(t){try{return new Function(e.EXPRESSHANDLERTAG,se,`return ${t};`)}catch{throw new Error("创建表达式运行方法时出现未知错误,表达式为"+t)}}class ie{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.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[Pe]&&(this.node.attributes["data-scoped-"+this.ob[Pe]]=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 ne(e).call(t,t,te)}catch(s){g.error(re,"运行表达式出现错误:"+e,{ob:t}),console.error(s)}}runExpressWithWatcher(e,t,s,r){if(this.isDestroy)return;let n="string"==typeof e?ne(e):e,i=new I((()=>{if(this.isDestroy||t[Ve])return W;try{return n.call(t,t,te)}catch(s){return g.error(re,"运行表达式出现错误",{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 oe extends ie{parser(){this.node=new exports.VNode.Text(this.ast.text,this.parent),this.appendNode()}}class ae extends ie{parser(){this.node=new exports.VNode.Comment(this.ast.text,this.parent),this.appendNode()}}class he extends ie{parser(){if(this.node=new exports.VNode.Condition(this.ast.kind,this.parent),"else"!==this.ast.kind){u(this.ast.condition)&&g.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 he&&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 he&&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 he&&t.renderConditionChildren(),e=e.next}}}class de extends ie{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);T(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&&T(n,e.indexKey,i),e.itemKey&&T(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 le(this.ast,e,this.node,this.ext).init(t)}return new le(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 le extends ie{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 ce extends ie{parser(){if(u(this.ast.cmdName))throw g.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(se+".")?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(pe(e[0]),this.parent,e[1]):this.node=new exports.VNode.Text(pe(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=pe(e):this.node.text=pe(e),this.ext.render?.updateNode(this.node))}}function pe(e){return null==e||"function"==typeof e?"":e.toString()}const ue="default";class fe extends ie{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)=>{T(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]||ue;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]||ue,params:e?.slice(1)||[]}}return{id:ue,params:[]}}}const me="组件解析";function Ee(e,t){return!!t.components[e]||!!Le(e)}class ye extends ie{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.renderChildren()}get canReload(){return"tagName"in this.ast||"function"==typeof this.ast.component}reload(){this.canReload?(this.beforeDestroy(),this.renderChildren()):g.warn(me,"当前组件无法实现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)){g.warn(me,"元素的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)}}]):g.error(me,`${"tagName"in this.ast?this.ast.tagName:""}元素中${e.name}事件所指定的回调(${e.functionName})方法未找到,请检查`)}))}async renderChildren(){if("tagName"in this.ast){let e=this.ob.components[this.ast.tagName]||Le(this.ast.tagName);if(void 0===e)return void g.error(me,`渲染组件失败,未找到名称为'${this.ast.tagName}'的私有组件/全局组件`);if(De 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;if(!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),this.node.component.$mount(this.node),!this.node)return;let e=this.node?.component;e.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 g.warn(me,"在解析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||ue;/^(\'|\")(.*?)((\'|\"))$/.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[ue]=t[ue]||{asts:[],ob:this.ob,parser:this.ext},t[ue].asts.push(s)})),t}beforeDestroy(e){!0===e&&this.node?.component?.isKeepAlive?this.node?.component?.$destroy():(this.node?.component?.$destroy(!0),this.ast.node=void 0)}}class Ne extends ie{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)){g.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 ve{asts;ob;root=new exports.VNode.Root;refs={};sleeped=!1;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 oe(n,r??this.ob,s,this).init();else if(n.type===e.AST.NodeType.COMMENT)new ae(n,r??this.ob,s,this).init();else if(n.type===e.AST.NodeType.COMPONENT)new ye(n,r??this.ob,s,this).init();else if(n.type===e.AST.NodeType.ELEMENT){let e=n;Ee(e.tagName,r??this.ob)?new ye(e,r??this.ob,s,this).init():new Ne(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 he(e,r??this.ob,s,this).init();break;case"for":new de(e,r??this.ob,s,this).init();break;case"RenderSection":new fe(e,r??this.ob,s,this).init();break;case"section":break;default:new ce(e,r??this.ob,s,this).init()}}}addRef(e,t){this.refs[e]=this.refs[e]||[],this.refs[e].push(t)}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;g.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 xe(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 be(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=xe(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)?xe(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 we(e,t){if(!e.constructor)return!1;let s=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);return s&&s.get}const Ae="组件",Ce=Symbol.for("JOKER_PROPS_DATA_KEY"),Oe=Symbol.for("JOKER_PROPS_DATA_PROXY"),Se=Symbol.for("JOKER_PRIVATE_WATCHERS"),$e=Symbol.for("JOKER_EVENT_DATA_KEY"),Ve=Symbol.for("JOKER_IS_DESTROY"),Te=Symbol.for("JOKER_PARSER_TEMPLATE_TARGET"),Pe=Symbol.for("JOKER_SCOPE_ID"),De=Symbol.for("JOKER_COMPONENT_TAG"),_e=Symbol();let Ke=["constructor","$mount","$nodeTransition","$destroy","$getRef","$getRefs","$syncProp","$watchNode","$watch","$on","$off","$trigger","$render","created","mounted","beforeDestroy","sleeped","wakeup","destroyed"];class ke{$sections;isKeepAlive;static[De]=!0;[Pe];model={};template;$root;isSleeped=!1;components={};propsOption;[Ce]={};[Te];[Oe];[Se]=[];[$e]=new Map;[Ve]=!1;[_e]=!1;constructor(e,t={},s){this.$sections=t,this.isKeepAlive=s,this[Ce]=e||{}}get props(){if(void 0===this[Oe]){let e=this;this[Oe]=new Proxy(e[Ce],{get:(t,s)=>be(e[Ce],s,e.propsOption),set(){throw new Error("props 参数不允许变更,只允许单向数据传递")}})}return this[Oe]}$mount(e){if(!1===this[_e]){let e=()=>{let e=[],t=Object.getPrototypeOf(this);for(;null!==t&&t!==Object.prototype;)Object.getOwnPropertyNames(t).forEach((s=>{!1!==Ke.includes(s)||we(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[_e]=!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&&je(this.$rootVNode),this):(g.error(Ae,"当前组件在唤醒时,发现渲染处理程序已被销毁,无法进行唤醒操作",[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 Promise.resolve(),this.mounted(),this.$trigger("mounted")};return t&&t instanceof Promise?t.then((()=>{this[Ve]||s()})):s(),this}$nodeTransition(e,t,s,r,n){if("string"==typeof e){let t=this.$getRef(e);if(!t)return void g.error(Ae,`执行节点动画是找不到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&&Me(this.$rootVNode));this[Ve]=!0;for(let e of this[Se])e.destroy();this[Se].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[$e].clear(),this.$root=void 0,this.isSleeped=!1,this.$sections={},this[Oe]=void 0,this[Ce]={},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)};g.warn(Ae,"该组件还未挂载,不可以进行节点观察监听")}$watch(e,t,s){let r=new I((()=>{if(this[Ve]){for(let e of this[Se])e.destroy();return W}return e()}),((e,s)=>{this[Ve]||t(e,s)}),void 0,s);return this[Se].push(r),[r.value,()=>{r.destroy(),c(this[Se],r)}]}$on(e,t){let s=this[$e].get(e);void 0===s&&(s=[],this[$e].set(e,s)),!1===s?.includes(t)&&s.push(t)}$off(e,t){let s=this[$e].get(e);s&&(t?c(s,t):s.length=0)}$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[$e].get(e);n?.length&&[...n].forEach((e=>{e(r)}));let i=this[$e].get("*");i?.length&&[...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 ve(this.template,this,this.$root),this[Te].parser(),this.$root&&this[Te].mount(this.$root))}created(){}mounted(){}beforeDestroy(){}sleeped(){}wakeup(){}destroyed(){}}const We={};function Ie(e,t){if("string"==typeof e)t&&(We[e]=t);else for(let t in e)We[t]=e[t]}function Le(e){return We[e]}function Me(e){e.childrens?.forEach((e=>{e instanceof exports.VNode.Component&&e.component?.sleeped(),Me(e)}))}function je(e){e.childrens?.forEach((e=>{e instanceof exports.VNode.Component&&e.component?.wakeup(),je(e)}))}class He extends ke{template=[];cache=new Map;mounted(){this.$watch((()=>this.props.name),(async e=>{this.$render([],!0),await Promise.resolve(),this.$root&&this.loadComponent(e)})),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=Le(t)),n?(De 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)):g.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 Ye extends ke{template=function(){return[e.createCommand("RenderSection")]}}Ie({template:Ye,component:He});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=ke,exports.ComponentContainer=He,exports.Dep=R,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=Ve,exports.JOKER_COMPONENT_TAG=De,exports.JOKER_VNODE_TAG=L,exports.OBJECTPROXY_DEPID=w,exports.PARSER_TEMPLATE_TARGET=Te,exports.ParserTemplate=ve,exports.SCOPE_ID=Pe,exports.ShallowObserver=class{data;[P]=!0;dep=new R;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=Ye,exports.Watcher=I,exports.__GLONAL_FUNTIONS__=te,exports.__JOKER_HMR_RUNTIME=n,exports.combinedReply=function(e){D=!0;try{e()}catch(e){return D=!1,_.clear(),void g.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=T,exports.getGlobalComponent=Le,exports.isObserverData=function(e){return void 0!==$(e)},exports.observer=V,exports.registerGlobalComponent=Ie,exports.registerGlobalFunction=function(e){for(let t in e)te[t]=e[t]};
1
+ "use strict";var e=require("@joker.front/ast");const t=new Map,s=new Map,r=new Map;let i={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 i=r.get(e);if(!i)return;i.component=s;let n=t.get(e);if(!n)return;let o=Array.from(n);n.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 i=s.get(e);i&&(i.render=r),t.get(e)?.forEach((e=>{e.$render(r)}))}};function n(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=n(e),i=n(t);if(r&&i){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&&!i&&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 g={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 x={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"',"#39":"'"};function b(e){return e.replace(/&(lt|gt|nbsp|amp|quot|#39);/gi,((e,t)=>x[t]||""))}class R{static target;watchers=new Map;depend(e){R.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 w=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 n(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)&&!(De 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 R,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 i=r.call(e,s);return K(t,"size"),K(t,C),i}}if("set"===s){let r=Reflect.get(e,s);return(s,i)=>{O(i)&&(i=V(i));let n=r.call(e,s,i);return K(t,"size"),K(t,C),n}}if("delete"===s||"clear"===s){let r=Reflect.get(e,s);return i=>{let n=r.call(e,i);return("clear"===s||n)&&(K(t,"size"),K(t,C)),n}}let r=Reflect.get(e,s);if("function"==typeof r)return r.bind(e)}if(s===A)return;if(s===w)return t;if(s===C)return;let i=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(i)&&$(i)?.depend(C)),i},set(e,r,i){if(s)return Reflect.set(e,r,i),!0;O(i)&&(i=V(i));let n=!1===function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,r),o=Reflect.get(e,r)!==i;return Reflect.set(e,r,i),(o||"length"===r&&Array.isArray(e))&&K(t,r),Array.isArray(e)?"length"===r&&K(t,C):n&&K(t,C),!0},deleteProperty:(e,s)=>(Reflect.deleteProperty(e,s),!1===Array.isArray(e)&&K(t,C),!0)});var i,n,o,a;i=e,n=A,o=r,a=!1,Object.defineProperty(i,n,{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(n(e))return Reflect.get(e,w)}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 i=new R;Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:()=>(i.depend(t),$(r)?.depend(C),r),set:e=>{e!==r&&(O(e)&&(e=V(e)),r=e,K(i,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&&g.error(k,"getter创建失败",arguments),this.value=this.getValue()}getValue(){if(void 0===this.getter)return;R.target=this;let e,t="function"==typeof this.ob?this.ob():this.ob;try{e=this.getter.call(t,t)}catch(e){throw g.error(k,`获取值失败,执行方法:${this.getter.toString()}`),e}return R.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||n(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;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(t,s){if(!0===t(this))return this;let r=this.parent;for(;r;){if(s&&r instanceof e.Root)return;if(!0===t(r))return r;r=r.parent}}find(e,t,s){let r=s??[];if(t??=this.childrens,t)for(let s of t){!0===e(s)&&r.push(s),s.childrens&&this.find(e,s.childrens,r)}return r}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 i of r)i instanceof e.Element||i instanceof e.Html?t.push(i):i.childrens&&s(i.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 g.error(M,"组件挂载渲染时发现该节点未定义DOM定位节点",e);else g.error(M,"mount子组件时,发现该组件无父级",e);else g.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 g.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:g.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 i of e.events){let[n,o]=i;if(n===t){let t=o.modifiers?.includes("self"),a=o.modifiers?.includes("outside");if(t||a){g.warn(M,"事件修饰符:self、outside在组件事件中无法使用,组件无法确认元素",e);continue}let h=s.event;if((h instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(n)||h instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(n))&&!1===X(h,o.modifiers))continue;if(o.callBack(s),o.modifiers?.includes("prevent")&&s.preventDefault(),o.modifiers?.includes("once")&&r.push(i),o.modifiers?.includes("stop"))return s.stopPropagation(),!1}}r.length&&r.forEach((t=>{c(e.events,t)}))}transitionFrame(e,t,s,r,i){q(e,B(t,s,"from")),r||="transition";let n=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 i?.();let a=0,h=()=>{z(e,B(t,s,"to")),z(e,B(t,s,"active")),e.output&&(e.output.removeEventListener(`${r}end`,d),n===e.output.__TRANSITION_EVNETID__&&i?.())},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 i=r.modifiers?.includes("self"),n=r.modifiers?.includes("outside");i&&n&&(g.warn(M,"事件修饰符:self、outside不可以同时存在,将按照self处理",t),n=!1);let o,a=function(o){if(!(t.sleep||i&&o.target!==e)){if(n){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")&&(n?G(t,s,a):e.removeEventListener(s,a)))}};r.modifiers?.includes("passive")&&(o={passive:!0}),n?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 i=U(e);if(i)i.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 e=s.output,i=e?.parentNode;if(void 0!==r&&s.childrens?.length&&i){let e=r-1;if(e<0)return void i.insertBefore(t,i.firstChild);{let r=s.childrens[e];if(r){let e=r.output;if(e)return void e.after(t)}}}i&&i.insertBefore(t,e)}else g.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(n(t))for(let s in t)t[s]&&e.push(s);else t&&e.push(t);s=e.join(" ")}else if(n(s)){for(let t in s)s[t]?e.classList.add(t):e.classList.remove(t);return}}else if("style"===t&&n(s)){e.removeAttribute("style");for(let t in s){let r=!1;void 0!==s[t]&&!1!==s[t]||(r=!0);let i=String(s[t]);u(i)&&(r=!0),r||(e.style[t]=i)}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}g.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(",","."))}class ee extends HTMLElement{root;constructor(){super(),this.root=this.attachShadow({mode:"open"})}}!customElements.get("joker-html-shadow")&&customElements.define("joker-html-shadow",ee);const te={};const se="Global",re="渲染核心";function ie(t){try{return new Function(e.EXPRESSHANDLERTAG,se,`return ${t};`)}catch{throw new Error("创建表达式运行方法时出现未知错误,表达式为"+t)}}class ne{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.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[Te]&&(this.node.attributes["data-scoped-"+this.ob[Te]]=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,te)}catch(s){g.error(re,"运行表达式出现错误:"+e,{ob:t}),console.error(s)}}runExpressWithWatcher(e,t,s,r){if(this.isDestroy)return;let i="string"==typeof e?ie(e):e,n=new I((()=>{if(this.isDestroy||t[Ve])return W;try{return i.call(t,t,te)}catch(s){return g.error(re,"运行表达式出现错误",{ob:t,express:e,node:this.node}),console.error(s),W}}),s,void 0,r);return this.addWatch(n),n.value===W?void 0:n.value}addWatch(e){!1===this.watchers.includes(e)&&this.watchers.push(e)}clearWatchers(){this.watchers.forEach((e=>{e.destroy()})),this.watchers.length=0}}class oe extends ne{parser(){this.node=new exports.VNode.Text(this.ast.text,this.parent),this.appendNode()}}class ae extends ne{parser(){this.node=new exports.VNode.Comment(this.ast.text,this.parent),this.appendNode()}}class he extends ne{parser(){if(this.node=new exports.VNode.Condition(this.ast.kind,this.parent),"else"!==this.ast.kind){u(this.ast.condition)&&g.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 he&&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 he&&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 he&&t.renderConditionChildren(),e=e.next}}}class de extends ne{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),i=0;for(;r;){let e=Object.create(this.ob);P(e,t.letKey,s[t.letKey]);let n=i++;this.renderItem(e,n),this.runExpressWithWatcher((()=>s[t.letKey]),s,(async(s,r,i,o)=>{await Promise.resolve(),o.isDestroy||(e[t.letKey]=s,i||this.updateListItemOb(e,n))}),!0),this.runExpress(t.step,s),r=!!this.runExpress(t.condition,s)}this.destroyOldChildrens(i)}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 i=Object.create(this.ob),n=Array.isArray(t)?Number(r):r;e.indexKey&&P(i,e.indexKey,n),e.itemKey&&P(i,e.itemKey,t[r]);let o=s++;this.renderItem(i,o,e.indexKey),e.itemKey&&this.runExpressWithWatcher((()=>t[n]),t,(async(s,r,a,h)=>{await Promise.resolve(),h.isDestroy||n in t&&(i[e.itemKey]=s,a||this.updateListItemOb(i,o))}),!0)}this.destroyOldChildrens(s)}findIndexByIndex(e,t,s){let r=-1;if(this.node)for(let i=t;i<this.node.childrens.length;i++)if(this.checkObEqual(e,this.node.childrens[i]?.ob,s?[s]:void 0)){r=i;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 i=this.findIndexByIndex(e,t+1,s);if(i>-1){if(t+1===i)this.node.childrens?.[t]?.[exports.VNode.PARSERKEY]?.destroy();else for(let e=0;e<i-t-1;e++)this.node.childrens?.[t]?.[exports.VNode.PARSERKEY]?.destroy();return this.renderItem(e,t,s)}return new le(this.ast,e,this.node,this.ext).init(t)}return new le(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,i)=>{s?.includes(e)||t?.[e]===i||(r=!1)})),r)}}class le extends ne{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 ce extends ne{parser(){if(u(this.ast.cmdName))throw g.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(se+".")?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(pe(e[0]),this.parent,e[1]):this.node=new exports.VNode.Text(pe(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=pe(e):this.node.text=pe(e),this.ext.render?.updateNode(this.node))}}function pe(e){return null==e||"function"==typeof e?"":e.toString()}const ue="default";class fe extends ne{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]||ue;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]||ue,params:e?.slice(1)||[]}}return{id:ue,params:[]}}}const me="组件解析";function Ee(e,t){return!!t.components[e]||!!Le(e)}class ye extends ne{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()):g.warn(me,"当前组件无法实现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)){g.warn(me,"元素的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)}}]):g.error(me,`${"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]||Le(this.ast.tagName);if(void 0===e)return void g.error(me,`渲染组件失败,未找到名称为'${this.ast.tagName}'的私有组件/全局组件`);if(De 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 i=this.node?.component;i.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,i=t.childrens.some((t=>t.type===e.AST.NodeType.COMMAND&&"section"===t.cmdName)),n=r.condition.startsWith(e.EXPRESSHANDLERTAG+".$sections");if(n){return this.runExpress(r.condition,this.ob)?void s.push(...t.childrens):void 0}if(i&&"if"===r.kind&&!n)return void g.warn(me,"在解析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||ue;/^(\'|\")(.*?)((\'|\"))$/.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[ue]=t[ue]||{asts:[],ob:this.ob,parser:this.ext},t[ue].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 Ne extends ne{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)){g.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 ve{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 i of t)if(i.type===e.AST.NodeType.TEXT)new oe(i,r??this.ob,s,this).init();else if(i.type===e.AST.NodeType.COMMENT)new ae(i,r??this.ob,s,this).init();else if(i.type===e.AST.NodeType.COMPONENT)new ye(i,r??this.ob,s,this).init();else if(i.type===e.AST.NodeType.ELEMENT){let e=i;Ee(e.tagName,r??this.ob)?new ye(e,r??this.ob,s,this).init():new Ne(e,r??this.ob,s,this).init()}else if(i.type===e.AST.NodeType.COMMAND){let e=i;switch(e.cmdName){case"if":case"elseif":case"else":new he(e,r??this.ob,s,this).init();break;case"for":new de(e,r??this.ob,s,this).init();break;case"RenderSection":new fe(e,r??this.ob,s,this).init();break;case"section":break;default:new ce(e,r??this.ob,s,this).init()}}}addRef(e,t){this.refs[e]=this.refs[e]||[],this.refs[e].push(t)}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,i){if(e&&e.parent?.childrens&&(e instanceof exports.VNode.Element||e instanceof exports.VNode.Component)){let n=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??=n?.name,i??=n?.type,!s)return!1;let o=ge(e);if(o)return"enter"===t?this.render.elementToEnter(o,s,i,(()=>{let t=e[exports.VNode.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-enter"),r?.()})):this.render.elementToLeave(o,s,i,(()=>{let t=e[exports.VNode.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-leave"),r?.()})),!0;g.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 xe(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 be(e,t,s){let r,i,n;if("symbol"!=typeof t&&(r=f(t)),t in e?i=e[t]:r&&(i=e[r]),s&&(t in s?n=s[t]:r&&r in s&&(n=s[r])),void 0!==n){if(a(n)&&("type"in n||"required"in n||"default"in n||"validate"in n)){let e=n;if(e.required&&void 0===i)throw new Error(`props中key:${t.toString()}是必须项,请检查`);if(e.type&&(i=xe(t,i,e.type)),e.validate&&!1===e.validate(i))throw new Error(`props中key${t.toString()}的值校验错误`);i=i??e.default}else i=Re(n)?xe(t,i,n):i??n;return i}return i}function Re(e){return!![String,Array,Number,Object,Function,Boolean].includes(e)||e instanceof Array&&Re(e[0])}function we(e,t){if(!e.constructor)return!1;let s=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);return s&&s.get}const Ae="组件",Ce=Symbol.for("JOKER_PROPS_DATA_KEY"),Oe=Symbol.for("JOKER_PROPS_DATA_PROXY"),Se=Symbol.for("JOKER_PRIVATE_WATCHERS"),$e=Symbol.for("JOKER_EVENT_DATA_KEY"),Ve=Symbol.for("JOKER_IS_DESTROY"),Pe=Symbol.for("JOKER_PARSER_TEMPLATE_TARGET"),Te=Symbol.for("JOKER_SCOPE_ID"),De=Symbol.for("JOKER_COMPONENT_TAG"),_e=Symbol();let Ke=["constructor","$mount","$nodeTransition","$destroy","$getRef","$getRefs","$syncProp","$watchNode","$watch","$on","$off","$trigger","$render","created","mounted","beforeDestroy","sleeped","wakeup","destroyed"];class ke{$sections;isKeepAlive;static[De]=!0;[Te];model={};template;$root;isSleeped=!1;components={};propsOption;[Ce]={};[Pe];[Oe];[Se]=[];[$e]=new Map;[Ve]=!1;[_e]=!1;constructor(e,t={},s){this.$sections=t,this.isKeepAlive=s,this[Ce]=e||{}}get props(){if(void 0===this[Oe]){let e=this;this[Oe]=new Proxy(e[Ce],{get:(t,s)=>be(e[Ce],s,e.propsOption),set(){throw new Error("props 参数不允许变更,只允许单向数据传递")}})}return this[Oe]}$mount(e){if(!1===this[_e]){let e=()=>{let e=[],t=Object.getPrototypeOf(this);for(;null!==t&&t!==Object.prototype;)Object.getOwnPropertyNames(t).forEach((s=>{!1!==Ke.includes(s)||we(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[_e]=!0}if(this.$root=e,this.isKeepAlive&&this.isSleeped)return this.isSleeped=!1,this[Pe]&&this.$root?(this[Pe].mount(this.$root),this.wakeup(),this.$trigger("wakeup"),this.$rootVNode&&je(this.$rootVNode),this):(g.error(Ae,"当前组件在唤醒时,发现渲染处理程序已被销毁,无法进行唤醒操作",[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[Ve]||(await this.mounted(),this[Ve]||this.$trigger("mounted"))};return t&&t instanceof Promise?t.then((()=>{this[Ve]||s()})):s(),this}$nextUpdatedRender(e){if(this[Ve])return;let t=[...this[Pe]?.promiseQueue||[]],s=this.$rootVNode?.find((e=>e instanceof exports.VNode.Component));if(s?.forEach((e=>{e?.component&&t.push(...e.component[Pe]?.promiseQueue||[])})),t.length)return Promise.all(t).finally((()=>{this[Ve]||e?.()}));this[Ve]||e?.()}$nodeTransition(e,t,s,r,i){if("string"==typeof e){let t=this.$getRef(e);if(!t)return void g.error(Ae,`执行节点动画是找不到ref=${e}的节点`);e=t}this[Pe]?.nodeTransition(e,t,s,r,i)}$destroy(e){if(!e&&this.isKeepAlive)return this[Pe]?.sleep(),this.isSleeped=!0,this.sleeped(),this.$trigger("sleeped"),void(this.$rootVNode&&Me(this.$rootVNode));this[Ve]=!0;for(let e of this[Se])e.destroy();this[Se].length=0,this[Pe]?.destroyWathcers(),this.beforeDestroy(),this.$trigger("beforeDestroy"),this[Pe]?.destroy(),this[Pe]=void 0,this.template&&Array.isArray(this.template)&&(this.template.length=0),this.$trigger("destroy"),this[$e].clear(),this.$root=void 0,this.isSleeped=!1,this.$sections={},this[Oe]=void 0,this[Ce]={},this.destroyed()}get $refs(){return this[Pe]?.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[Pe]?.root}$watchNode(e,t){if(this[Pe])return this[Pe]?.addNodeWatcher(e,t),()=>{this[Pe]?.removeNodeWatcher(e,t)};g.warn(Ae,"该组件还未挂载,不可以进行节点观察监听")}$watch(e,t,s){let r=new I((()=>{if(this[Ve]){for(let e of this[Se])e.destroy();return W}return e()}),((e,s)=>{this[Ve]||t(e,s)}),void 0,s);return this[Se].push(r),[r.value,()=>{r.destroy(),c(this[Se],r)}]}$on(e,t){let s=this[$e].get(e);void 0===s&&(s=new Set,this[$e].set(e,s)),!1===s?.has(t)&&s.add(t)}$off(e,t){let s=this[$e].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[Pe]?.render.triggerEvent(this.$rootVNode.parent,e,r))return;let i=this[$e].get(e);i?.size&&[...i].forEach((e=>{e(r)}));let n=this[$e].get("*");n?.size&&[...n].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[Pe]?.reSetAsts(this.template,s),this[Pe]??=new ve(this.template,this,this.$root),this[Pe].parser(),this.$root&&this[Pe].mount(this.$root))}created(){}mounted(){}beforeDestroy(){}sleeped(){}wakeup(){}destroyed(){}}const We={};function Ie(e,t){if("string"==typeof e)t&&(We[e]=t);else for(let t in e)We[t]=e[t]}function Le(e){return We[e]}function Me(e){e.childrens?.forEach((e=>{e instanceof exports.VNode.Component&&e.component?.sleeped(),Me(e)}))}function je(e){e.childrens?.forEach((e=>{e instanceof exports.VNode.Component&&e.component?.wakeup(),je(e)}))}class He extends ke{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,i=r?.[t];void 0===i&&(i=Le(t)),i?(De in i||(i=(await i()).default),s=new i(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)):g.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 Ye extends ke{template=function(){return[e.createCommand("RenderSection")]};async mounted(){await this.$nextUpdatedRender()}}Ie({template:Ye,component:He});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=ke,exports.ComponentContainer=He,exports.Dep=R,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,i=0,n=!1;for(;s[r];){let o=s[r],a=await o.callBack({stopPropagation:()=>n=!0,callTimes:i,eventName:e},t);if(o.once?c(s,o):r++,!1===a||n)return!1}}}},exports.IS_DESTROY=Ve,exports.JOKER_COMPONENT_TAG=De,exports.JOKER_VNODE_TAG=L,exports.OBJECTPROXY_DEPID=w,exports.PARSER_TEMPLATE_TARGET=Pe,exports.ParserTemplate=ve,exports.SCOPE_ID=Te,exports.ShallowObserver=class{data;[T]=!0;dep=new R;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=Ye,exports.Watcher=I,exports.__GLONAL_FUNTIONS__=te,exports.__JOKER_HMR_RUNTIME=i,exports.combinedReply=function(e){D=!0;try{e()}catch(e){return D=!1,_.clear(),void g.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=Le,exports.isObserverData=function(e){return void 0!==$(e)},exports.observer=V,exports.registerGlobalComponent=Ie,exports.registerGlobalFunction=function(e){for(let t in e)te[t]=e[t]};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joker.front/core",
3
- "version": "1.3.58",
3
+ "version": "1.3.67",
4
4
  "description": "",
5
5
  "main": "./dist/bundle.js",
6
6
  "module": "./dist/bundle.es.js",
@@ -18,18 +18,18 @@
18
18
  "types/*",
19
19
  "README.md"
20
20
  ],
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/jokers-pub/front-core.git"
24
+ },
21
25
  "scripts": {
22
26
  "test": "jest",
23
- "test:temp": "jest test/other/for-update.spec.ts",
27
+ "test:temp": "jest test/other/event.spec.ts",
24
28
  "build": "joker_build_library --sourcemap=false",
25
29
  "build:prod": "joker_build_library --sourcemap=false --terser",
26
30
  "release": "npm run test && npm run build && joker_release_library",
27
31
  "release:prod": "npm run test && npm run build:prod && npm publish --access public --registry https://registry.npmjs.org/"
28
32
  },
29
- "repository": {
30
- "type": "git",
31
- "url": "git+https://github.com/jokers-pub/front-core.git"
32
- },
33
33
  "author": "Zohar",
34
34
  "license": "MIT",
35
35
  "homepage": "https://front.jokers.pub",
@@ -83,6 +83,7 @@ export declare class Component<T extends DefaultKeyVal = {}> implements ICompone
83
83
  * @param root
84
84
  */
85
85
  $mount(root: any | VNode.Component): this;
86
+ $nextUpdatedRender(callBack?: Function): Promise<any[]> | undefined;
86
87
  /**
87
88
  * 节点动画,仅支持 element及组件节点
88
89
  */
@@ -206,7 +207,7 @@ export declare class ComponentContainer extends Component<{
206
207
  }> {
207
208
  template: never[];
208
209
  private cache;
209
- mounted(): void;
210
+ mounted(): Promise<void>;
210
211
  private propsVaule;
211
212
  created(): void;
212
213
  initProps(): void;
@@ -220,5 +221,6 @@ export declare class ComponentContainer extends Component<{
220
221
  */
221
222
  export declare class Template extends Component {
222
223
  template: () => AST.Command[];
224
+ mounted(): Promise<void>;
223
225
  }
224
226
  export {};
@@ -6,6 +6,7 @@ export declare function checkIsComponent(tagName: string, ob: Component): boolea
6
6
  export declare class ParserComponent extends IParser<(AST.Element | AST.Component) & {
7
7
  node?: VNode.Component;
8
8
  }, VNode.Component> {
9
+ loadPromise?: Promise<any>;
9
10
  parser(): void;
10
11
  /**
11
12
  * 是否允许重载
@@ -12,6 +12,7 @@ export declare class ParserTemplate {
12
12
  /** VNode ref索引集 */
13
13
  refs: Record<string, Array<VNode.Node>>;
14
14
  sleeped: boolean;
15
+ promiseQueue: Set<Promise<any>>;
15
16
  /**
16
17
  * node变更观察者
17
18
  */