@joker.front/core 1.3.72 → 1.3.75
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/README.md +38 -18
- package/dist/bundle.es.js +1 -1
- package/dist/bundle.js +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,38 +1,48 @@
|
|
|
1
1
|
# Joker 
|
|
2
2
|
|
|
3
|
-
Joker is a framework platform designed to support all development scenarios. Among them, Joker.front is a front-end development framework under the Joker platform. It provides standardized front-end development standards
|
|
3
|
+
Joker is a framework platform designed to provide support for all development scenarios. Among them, Joker.front is a front-end development framework under the Joker platform. It provides standardized front-end development standards, adopts an object-oriented and component-based programming model to help you develop user interfaces efficiently. Whether it's a simple or complex interface, Joker.front can handle it with ease.
|
|
4
4
|
|
|
5
5
|
## What is Joker?
|
|
6
6
|
|
|
7
|
-
Joker is a framework platform
|
|
7
|
+
Joker is a framework platform committed to providing support for all development scenarios. Joker.front, as a part of the Joker platform, is a front-end development framework. It provides standardized front-end development specifications and uses object-oriented and component-based programming methods to assist in efficiently building user interfaces. Whether the interface is simple or complex, Joker.front can handle it smoothly.
|
|
8
8
|
|
|
9
|
-
Joker is an all-
|
|
9
|
+
Joker is an all-purpose development platform built on TypeScript. Whether dealing with simple interface development requirements or handling complex user interface tasks, it demonstrates excellent performance and stability. It has the following important features:
|
|
10
10
|
|
|
11
|
-
- **Powerful
|
|
11
|
+
- **Powerful Scalability**: Joker provides a component-based framework. It has considered scalability from the beginning of its design, so it can be easily integrated into existing projects or systems, support the construction of scalable web applications, and can be customized according to project requirements.
|
|
12
12
|
- **Rich Component Library**: Joker.front provides a complete set of front-end component libraries, including carefully designed and optimized functional and UI components such as routing and scaffolding, which can help developers quickly build beautiful and high-performance user interfaces.
|
|
13
|
-
- **Complete Development Tools**: To further improve development efficiency, Joker also provides a series of supporting development tools, including debugging tools, building tools, etc. These carefully designed tools are aimed at making the development process smoother and helping developers develop, build, test and update code accurately and quickly.
|
|
13
|
+
- **Complete Development Tools**: To further improve development efficiency, Joker also provides a series of supporting development tools, including debugging tools, building tools, etc. These carefully designed tools are aimed at making the development process smoother and helping developers develop, build, test, and update code accurately and quickly.
|
|
14
14
|
- **Class API**: Joker uses TypeScript as the script development standard and adopts the standard Class API as the development specification, which is more in line with the requirements of object-oriented development.
|
|
15
|
-
- **Responsiveness**: Joker will automatically track the
|
|
15
|
+
- **Responsiveness**: Joker will automatically track the JavaScript state, and can update the DOM in a responsive manner immediately when the state changes, and there is no difference comparison of the virtual DOM.
|
|
16
|
+
|
|
17
|
+
## Performance
|
|
18
|
+
|
|
19
|
+
Joker uses a special rendering logic to achieve the collection of the association relationship between responsive data and the DOM, and allows for point-to-point node changes when the data changes, avoiding the redrawing of the entire virtual node and the comparison process of the binary tree, greatly improving the rendering performance.
|
|
20
|
+
|
|
21
|
+

|
|
22
|
+
|
|
23
|
+

|
|
24
|
+
|
|
25
|
+
[Detailed Explanation](https://front.jokers.pub/base/render)
|
|
16
26
|
|
|
17
27
|
## How to Use
|
|
18
28
|
|
|
19
|
-
You can use the Joker CLI to create projects, generate application and library code, and perform various continuous development tasks
|
|
29
|
+
You can use the Joker CLI to create projects, generate application and library code, and perform various continuous development tasks such as testing, packaging, and deployment.
|
|
20
30
|
|
|
21
31
|
[Help Documentation](https://front.jokers.pub)
|
|
22
32
|
|
|
23
|
-
To install the Joker CLI,
|
|
33
|
+
To install the Joker CLI, open the terminal/console window and run the following command:
|
|
24
34
|
|
|
25
35
|
```
|
|
26
36
|
pnpm i -g @joker.front/cli
|
|
27
37
|
```
|
|
28
38
|
|
|
29
|
-
1. Run the CLI command **joker create** and provide the name my-app as a parameter, as
|
|
39
|
+
1. Run the CLI command **joker create** and provide the name my-app as a parameter, as follows:
|
|
30
40
|
|
|
31
41
|
```
|
|
32
42
|
joker create my-app
|
|
33
43
|
```
|
|
34
44
|
|
|
35
|
-
2.
|
|
45
|
+
2. In the my-app working directory, install the dependencies.
|
|
36
46
|
|
|
37
47
|
```
|
|
38
48
|
cd my-app
|
|
@@ -44,9 +54,9 @@ The CLI will create a new workspace and a simple welcome application, which you
|
|
|
44
54
|
|
|
45
55
|
## Running the Application
|
|
46
56
|
|
|
47
|
-
The Joker CLI includes a server command and a build command. The server command
|
|
57
|
+
The Joker CLI includes a server command and a build command. The server command is convenient for you to build and provide application services locally.
|
|
48
58
|
|
|
49
|
-
We provide two commands
|
|
59
|
+
We provide two default commands, `dev` and `build`, representing the development environment and code building respectively.
|
|
50
60
|
|
|
51
61
|
1. Navigate to the workspace folder, such as my-app.
|
|
52
62
|
|
|
@@ -60,16 +70,16 @@ cd my-app
|
|
|
60
70
|
npm run dev
|
|
61
71
|
```
|
|
62
72
|
|
|
63
|
-
After
|
|
73
|
+
After running successfully, a simple sample page will be displayed.
|
|
64
74
|
|
|
65
75
|
## Visual Development Tools
|
|
66
76
|
|
|
67
|
-
A front-end framework with
|
|
77
|
+
A front-end framework with built-in visual tools: [Low-code Platform](https://lowcode.jokers.pub)
|
|
68
78
|
|
|
69
|
-

|
|
80
|
+

|
|
81
|
+

|
|
82
|
+

|
|
73
83
|
|
|
74
84
|
## Documentation
|
|
75
85
|
|
|
@@ -101,6 +111,16 @@ Joker 是一个基于 TypeScript 构建的全能开发平台。无论是应对
|
|
|
101
111
|
- **Class API**:Joker 以 TypeScript 作为脚本开发标准,并采用标准的 Class API 作为开发规范,更契合面向对象开发的要求。
|
|
102
112
|
- **响应性**:Joker 会自动追踪 JavaScript 状态,当其发生变化时能即时响应式地更新 DOM,且不存在虚拟 DOM 的差异对比。
|
|
103
113
|
|
|
114
|
+
## 性能
|
|
115
|
+
|
|
116
|
+
Joker 采用的特殊的渲染逻辑,实现了响应式数据于 DOM 的关联关系收集,并允许在数据变更时实现点对点的节点变更,而避免了对整个虚拟节点的重绘和二叉树的对比过程,极大的实现了渲染性能。
|
|
117
|
+
|
|
118
|
+

|
|
119
|
+
|
|
120
|
+

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