essor 0.0.6-beta.5 → 0.0.6-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/essor.cjs.js CHANGED
@@ -1,35 +1,35 @@
1
1
  'use strict';
2
2
 
3
- var fe=Object.defineProperty;var ee=Object.getOwnPropertySymbols;var de=Object.prototype.hasOwnProperty,me=Object.prototype.propertyIsEnumerable;var te=(t,e,n)=>e in t?fe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,ne=(t,e)=>{for(var n in e||(e={}))de.call(e,n)&&te(t,n,e[n]);if(ee)for(var n of ee(e))me.call(e,n)&&te(t,n,e[n]);return t};var $=t=>typeof t=="function";var C=null,w=null,F=new Set,H=new WeakMap,K=new Set;function k(t,e){let n=H.get(t);n||(n=new Map,H.set(t,n));let o=n.get(e);o||(o=new Set,n.set(e,o)),C&&o.add(C),w&&F.add(w);}function J(t,e){F.size>0&&F.forEach(r=>r.run());let n=H.get(t);if(!n)return;let o=n.get(e);o&&o.forEach(r=>K.has(r)&&r());}var j=class{constructor(e){this._value=e;}valueOf(){return k(this,"value"),this._value}toString(){return k(this,"value"),String(this._value)}toJSON(){return this._value}get value(){return k(this,"value"),this._value}set value(e){this._value!==e&&(this._value=e,J(this,"value"));}peek(){return this._value}update(){J(this,"value");}};function x(t){return m(t)?t:new j(t)}function m(t){return t instanceof j}var O=class{constructor(e){this.fn=e;let n=w;w=this,k(this,"_value"),this._value=this.fn(),w=n;}peek(){return this._value}run(){let e=this.fn();e!==this._value&&(this._value=e);}get value(){return k(this,"_value"),this._value}};function G(t){return new O(t)}function ge(t){return t instanceof O}function E(t){function e(){let n=C;C=e,t(),C=n;}return K.add(e),e(),()=>{K.delete(e),C=null;}}function oe(t,e){return Array.isArray(e)?e.includes(t):$(e)?e(t):!1}function L(t,e){return Object.entries(t).reduce((o,[r,i])=>(o[r]=oe(r,e)||m(i)?i:x(i),o),{})}function ye(t,e){return t?m(t)?t.peek():Object.entries(t).reduce((n,[o,r])=>(oe(o,e)?n[o]=r:n[o]=m(r)?r.peek():r,n),{}):{}}var I=Symbol("reactive");function X(t){return t&&t[I]===!0}function ve(t){if(!X(t))return t;let e=Object.assign({},t);return delete e[I],e}function V(t){if(X(t))return t;let e=L(t),n={get(r,i,s){k(r,i);let a=Reflect.get(r,i,s);return m(a)?a.value:a},set(r,i,s,a){return Reflect.get(r,i,a)!==s&&(Reflect.set(r,i,x(s),a),J(r,i)),!0}},o=new Proxy(e,n);return o[I]=!0,o}var P=0,D=new Map;function Ne(t){let{state:e,getters:n,actions:o}=t,r=ne({},e!=null?e:{}),i=V(e!=null?e:{}),s=[],a=[],f={patch$(u){Object.assign(i,u),s.forEach(p=>p(i)),a.forEach(p=>p(i));},subscribe$(u){s.push(u);},unsubscribe$(u){let p=s.indexOf(u);p!==-1&&s.splice(p,1);},onAction$(u){a.push(u);},reset$(){Object.assign(i,r);}},c={},l={};for(let u in n){let p=n[u];p&&(c[u]=G(()=>p.call(i,i)));}for(let u in o){let p=o[u];p&&(l[u]=p.bind(i));}return D.set(P,i),++P,new Proxy({},{get(u,p){return p==="state"?i:p in c?c[p].value:p in l?l[p]:p in f?f[p]:i[p]}})}function be(t){return function(){return D.has(P)?D.get(P):Ne(t)}}function W(t){return Array.isArray(t)?t.flat():[t]}function N(t,e){return t.indexOf(e)===0}var re=t=>t!==null&&typeof t=="object";var z=Array.isArray;function ie(t){return t==null}var h=t=>typeof t=="function";function B(t){return t===!1||t===null||t===void 0||t===""}var se=t=>t.replaceAll(/[A-Z]+/g,(e,n)=>`${n>0?"-":""}${e.toLocaleLowerCase()}`);var T=class T{constructor(e,n,o){this.template=e;this.props=n;this.key=o;this.proxyProps={};this.context={};this.emitter=new Set;this.mounted=!1;this.rootNode=null;this.hooks={mounted:new Set,destroy:new Set};this.trackMap=new Map;this.proxyProps=L(n,r=>N(r,"on")||N(r,"update:"));}addEventListener(){}removeEventListener(){}get firstChild(){var e,n;return (n=(e=this.rootNode)==null?void 0:e.firstChild)!=null?n:null}get isConnected(){var e,n;return (n=(e=this.rootNode)==null?void 0:e.isConnected)!=null?n:!1}addHook(e,n){var o;(o=this.hooks[e])==null||o.add(n);}getContext(e){return T.context[e]}setContext(e,n){T.context[e]=n;}inheritNode(e){this.context=e.context,this.hooks=e.hooks,Object.assign(this.proxyProps,e.proxyProps),this.rootNode=e.rootNode,this.trackMap=e.trackMap;let n=this.props;this.props=e.props,this.patchProps(n);}unmount(){var e;this.hooks.destroy.forEach(n=>n()),Object.values(this.hooks).forEach(n=>n.clear()),(e=this.rootNode)==null||e.unmount(),this.rootNode=null,this.proxyProps={},this.mounted=!1,this.emitter.forEach(n=>n()),T.context={};}mount(e,n){var r,i,s,a;if(!h(this.template))throw new Error("Template must be a function");if(this.isConnected)return (i=(r=this.rootNode)==null?void 0:r.mount(e,n))!=null?i:[];T.ref=this,this.rootNode=this.template(this.proxyProps),T.ref=null,this.mounted=!0;let o=(a=(s=this.rootNode)==null?void 0:s.mount(e,n))!=null?a:[];return this.hooks.mounted.forEach(f=>f()),this.patchProps(this.props),o}getNodeTrack(e,n){let o=this.trackMap.get(e);return o||(o={cleanup:()=>{}},this.trackMap.set(e,o)),n||o.cleanup(),o}patchProps(e){var n,o,r,i,s;for(let[a,f]of Object.entries(e))if(N(a,"on")&&((n=this.rootNode)!=null&&n.nodes)){let c=a.slice(2).toLowerCase(),l=f,u=y(this.rootNode.nodes[0],c,l);this.emitter.add(u);}else if(a==="ref")m(f)?e[a].value=(o=this.rootNode)==null?void 0:o.nodes[0]:h(f)&&e[a]((r=this.rootNode)==null?void 0:r.nodes[0]);else if(N(a,"update:"))e[a]=m(f)?f.value:f;else {let c=(s=(i=this.proxyProps)[a])!=null?s:i[a]=x(f),l=this.getNodeTrack(a);l.cleanup=E(()=>{c.value=f;});}this.props=e;}};T.ref=null,T.context={};var g=T;function Te(t,e,n){return h(t)?new g(t,e,n):new M(t,e,n)}function v(t){return t instanceof g||t instanceof M}function xe(t){let e=document.createElement("template");return e.innerHTML=t,e}function Ee(t){return t.children}function U(t){if(v(t)||t instanceof Node)return t;let e=B(t)?"":String(t);return document.createTextNode(e)}function b(t,e,n=null){let o=v(n)?n.firstChild:n;v(e)?e.mount(t,o):o?o.before(e):t.append(e);}function S(t){v(t)?t.unmount():t.parentNode&&t.remove();}function Z(t,e,n){b(t,e,n),S(n);}function q(t,e,n){if(e==="class"){typeof n=="string"?t.className=n:Array.isArray(n)?t.className=n.join(" "):n&&typeof n=="object"&&(t.className=Object.entries(n).reduce((o,[r,i])=>o+(i?` ${r}`:""),"").trim());return}if(e==="style"){if(typeof n=="string")t.style.cssText=n;else if(n&&typeof n=="object"){let o=n;Object.keys(o).forEach(r=>{t.style.setProperty(se(r),String(o[r]));});}return}B(n)?t.removeAttribute(e):n===!0?t.setAttribute(e,""):t.setAttribute(e,String(n));}function ce(t,e){if(t instanceof HTMLInputElement){if(t.type==="checkbox")return y(t,"change",()=>{e(!!t.checked);});if(t.type==="date")return y(t,"change",()=>{e(t.value?t.value:"");});if(t.type==="file")return y(t,"change",()=>{t.files&&e(t.files);});if(t.type==="number")return y(t,"input",()=>{let n=Number.parseFloat(t.value);e(Number.isNaN(n)?"":String(n));});if(t.type==="radio")return y(t,"change",()=>{e(t.checked?t.value:"");});if(t.type==="text")return y(t,"input",()=>{e(t.value);})}if(t instanceof HTMLSelectElement)return y(t,"change",()=>{e(t.value);});if(t instanceof HTMLTextAreaElement)return y(t,"input",()=>{e(t.value);})}var ae=Promise.resolve();function Se(t){return t?ae.then(t):ae}function y(t,e,n){return t.addEventListener(e,n),()=>t.removeEventListener(e,n)}function ue(t,e,n,o){let r=new Map,i=e.values(),s=t.childNodes.length;if(e.size>0&&n.length===0){if(s===e.size+(o?1:0)){let c=t;c.innerHTML="",o&&b(t,o);}else {let c=document.createRange(),l=i.next().value,u=v(l)?l.firstChild:l;c.setStartBefore(u),o?c.setEndBefore(o):c.setEndAfter(t),c.deleteContents();}return e.forEach(c=>{v(c)&&c.unmount();}),r}let a=[],f=ke(n);for(let[c,l]of n.entries()){let u=i.next().value,p=R(u,c);for(;u&&!f.has(p);)S(u),e.delete(p),u=i.next().value,p=R(u,c);let A=R(l,c),Q=e.get(A);if(Q&&(l=Ce(t,Q,l)),u)if(u){let Y=document.createComment("");b(t,Y,u),a.push([Y,l]);}else b(t,l,o);else b(t,l,o);r.set(A,l);}return a.forEach(([c,l])=>Z(t,l,c)),e.forEach((c,l)=>{c.isConnected&&!r.has(l)&&S(c);}),r}function Ce(t,e,n){return e===n?e:v(e)&&v(n)&&e.template===n.template?(n.inheritNode(e),n):e instanceof Text&&n instanceof Text?(e.textContent!==n.textContent&&(e.textContent=n.textContent),e):(Z(t,n,e),n)}function ke(t){let e=new Map;for(let[n,o]of t.entries()){let r=R(o,n);e.set(r,o);}return e}function R(t,e){let n=t instanceof Element?t.id:void 0,o=n===""?void 0:n;return o!=null?o:`_$${e}$`}var M=class t{constructor(e,n,o){this.template=e;this.props=n;this.key=o;this.treeMap=new Map;this.mounted=!1;this.nodes=[];this.provides={};this.trackMap=new Map;this.parent=null;}get firstChild(){var e;return (e=this.nodes[0])!=null?e:null}get isConnected(){return this.mounted}addEventListener(){}removeEventListener(){}unmount(){this.trackMap.forEach(e=>{var n,o;(n=e.cleanup)==null||n.call(e),(o=e.lastNodes)==null||o.forEach(r=>{e.isRoot?S(r):r instanceof t&&r.unmount();});}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(e=>S(e)),this.nodes=[],this.mounted=!1;}mount(e,n){var i;if(this.parent=e,this.isConnected)return this.nodes.forEach(s=>b(e,s,n)),this.nodes;let o=this.template.content.cloneNode(!0),r=o.firstChild;return (i=r==null?void 0:r.hasAttribute)!=null&&i.call(r,"_svg_")&&(r.remove(),r==null||r.childNodes.forEach(s=>{o.append(s);})),this.nodes=Array.from(o.childNodes),this.mapNodeTree(e,o),b(e,o,n),this.patchNodes(this.props),this.mounted=!0,this.nodes}mapNodeTree(e,n){let o=1;this.treeMap.set(0,e);let r=i=>{i.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&this.treeMap.set(o++,i);let s=i.firstChild;for(;s;)r(s),s=s.nextSibling;};r(n);}patchNodes(e){for(let n in e){let o=Number(n),r=this.treeMap.get(o);if(r){let i=this.props[n];this.patchNode(n,r,i,o===0);}}this.props=e;}getNodeTrack(e,n,o){var i;let r=this.trackMap.get(e);return r||(r={cleanup:()=>{}},n&&(r.lastNodes=new Map),o&&(r.isRoot=!0),this.trackMap.set(e,r)),(i=r.cleanup)==null||i.call(r),r}inheritNode(e){this.mounted=e.mounted,this.nodes=e.nodes,this.trackMap=e.trackMap,this.treeMap=e.treeMap;let n=this.props;this.props=e.props,this.patchNodes(n);}patchNode(e,n,o,r){for(let i in o)if(i==="children"&&o.children)if(z(o.children))o.children.forEach((s,a)=>{var A;if(!s)return;let[f,c]=z(s)?s:[s,null],l=ie(c)?null:(A=this.treeMap.get(c))!=null?A:null,u=`${e}:${i}:${a}`,p=this.getNodeTrack(u,!0,r);le(p,n,f,l);});else {let s=`${e}:${i}:0`,a=this.getNodeTrack(s,!0,r);le(a,n,o.children,null);}else if(i==="ref")m(o[i])?o[i].value=n:h(o[i])&&o[i](n);else if(N(i,"on")){let s=i.slice(2).toLocaleLowerCase(),a=this.getNodeTrack(`${e}:${i}`),f=o[i];a.cleanup=y(n,s,f);}else if(!N(i,"update:")){let s=this.getNodeTrack(`${e}:${i}`),a=o[i],f=m(a)?a:x(a),c=E(()=>{f.value=m(a)?a.value:a,Me(s,n,i,f.value);}),l,u=`update:${i}`;o[u]&&(l=ce(n,p=>{o[u](p);})),s.cleanup=()=>{c&&c(),l&&l();};}}};function Me(t,e,n,o){let r=e;r.setAttribute&&(h(o)?t.cleanup=E(()=>{q(r,n,o());}):q(r,n,o));}function le(t,e,n,o){h(n)?t.cleanup=E(()=>{let r=W(n()).map(U);t.lastNodes=ue(e,t.lastNodes,r,o);}):W(n).forEach((r,i)=>{let s=U(r);t.lastNodes.set(String(i),s),b(e,s,o);});}function Ae(t){var e;_("onMounted"),(e=g.ref)==null||e.addHook("mounted",t);}function we(t){var e;_("onDestroy"),(e=g.ref)==null||e.addHook("destroy",t);}function _(t){if(!g.ref)throw new Error(`"${t}" can only be called within the component function body
4
- and cannot be used in asynchronous or deferred calls.`)}function je(t,e){var n;_("useProvide"),(n=g.ref)==null||n.setContext(t,e);}function Oe(t,e){var n;return _("useInject"),((n=g.ref)==null?void 0:n.getContext(t))||e}function Le(){let t=null;return new Proxy({},{get(e,n){return n==="__is_ref"?!0:t},set(e,n,o){return t=o,!0}})}var zt="0.0.6-beta.4";function qt(t=[]){return t.reduce((e,n,o)=>(e[o+1]={template:n},e),{})}function Pe(t){return Object.entries(t).map(([e,n])=>`${e}=${JSON.stringify(n)}`).join(" ")}function pe(t,e){if(h(t))return t(e);let n={},o={};return re(t)&&Object.entries(t).forEach(([r,i])=>{let s=e[r];s&&(Object.keys(s).forEach(a=>{N(a,"on")&&h(s[a])&&delete s[a];}),s.children&&(s.children.forEach(([a,f])=>{n[f]=[...n[f]||[],a];}),delete s.children)),o[r]={template:i.template,prop:s};}),Object.entries(o).map(([r,{template:i,prop:s}])=>{let a=i;return s&&(a+=` ${Pe(s)}`),n[r]&&(a+=n[r].map(f=>pe(f,s)).join("")),a}).join("")}function Qt(t,e){return pe(t,e)}function Yt(t,e){e.innerHTML="",t.mount(e);}
3
+ var fe=Object.defineProperty;var ee=Object.getOwnPropertySymbols;var de=Object.prototype.hasOwnProperty,me=Object.prototype.propertyIsEnumerable;var te=(t,e,n)=>e in t?fe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,F=(t,e)=>{for(var n in e||(e={}))de.call(e,n)&&te(t,n,e[n]);if(ee)for(var n of ee(e))me.call(e,n)&&te(t,n,e[n]);return t};var $=t=>typeof t=="function";var T=null,A=null,H=new Set,K=new WeakMap,J=new Set;function w(t,e){let n=K.get(t);n||(n=new Map,K.set(t,n));let o=n.get(e);o||(o=new Set,n.set(e,o)),T&&o.add(T),A&&H.add(A);}function G(t,e){H.size>0&&H.forEach(r=>r.run());let n=K.get(t);if(!n)return;let o=n.get(e);o&&o.forEach(r=>J.has(r)&&r());}var j=class{constructor(e){this._value=e;}valueOf(){return w(this,"value"),this._value}toString(){return w(this,"value"),String(this._value)}toJSON(){return this._value}get value(){return w(this,"value"),this._value}set value(e){this._value!==e&&(this._value=e,G(this,"value"));}peek(){return this._value}update(){G(this,"value");}};function E(t){return d(t)?t:new j(t)}function d(t){return t instanceof j}var O=class{constructor(e){this.fn=e;this._deps=new Set;let n=A;A=this,this._value=this.fn(),A=n;}peek(){return this._value}run(){let e=this.fn();e!==this._value&&(this._value=e,this._deps.forEach(n=>n()));}get value(){return T&&this._deps.add(T),w(this,"_value"),this._value}};function I(t){return new O(t)}function ge(t){return t instanceof O}function S(t){function e(){let n=T;T=e,t(),T=n;}return J.add(e),e(),()=>{J.delete(e),T=null;}}function ne(t,e){return Array.isArray(e)?e.includes(t):$(e)?e(t):!1}function L(t,e){return Object.entries(t).reduce((o,[r,i])=>(o[r]=ne(r,e)||d(i)?i:E(i),o),{})}function ye(t,e){return t?d(t)?t.peek():Object.entries(t).reduce((n,[o,r])=>(ne(o,e)?n[o]=r:n[o]=d(r)?r.peek():r,n),{}):{}}var oe=Symbol("reactive");function X(t){return t&&t[oe]===!0}function ve(t){return X(t)?Object.assign({},t):t}function V(t){if(X(t))return t;let e=L(t),n={get(o,r,i){if(r===oe)return !0;w(o,r);let s=Reflect.get(o,r,i);return d(s)?s.value:s},set(o,r,i,s){let a=Reflect.get(o,r,s);return d(a)&&(a=a.value),d(i)&&(i=i.value),a!==i&&(Reflect.set(o,r,E(i),s),G(o,r)),!0}};return new Proxy(e,n)}var P=0,D=new Map;function Ne(t){let{state:e,getters:n,actions:o}=t,r=F({},e!=null?e:{}),i=V(e!=null?e:{}),s=[],a=[],u=F({state:i},{patch$(c){Object.assign(i,c),s.forEach(l=>l(i)),a.forEach(l=>l(i));},subscribe$(c){s.push(c);},unsubscribe$(c){let l=s.indexOf(c);l!==-1&&s.splice(l,1);},onAction$(c){a.push(c);},reset$(){Object.assign(i,r);}});for(let c in n){let l=n[c];l&&(u[c]=I(l.bind(i,i)));}for(let c in o){let l=o[c];l&&(u[c]=l.bind(i));}return D.set(P,u),++P,u}function be(t){return function(){return D.has(P)?D.get(P):Ne(t)}}function W(t){return Array.isArray(t)?t.flat():[t]}function v(t,e){return t.indexOf(e)===0}var re=t=>t!==null&&typeof t=="object";var z=Array.isArray;function ie(t){return t==null}var m=t=>typeof t=="function";function B(t){return t===!1||t===null||t===void 0||t===""}var se=t=>t.replaceAll(/[A-Z]+/g,(e,n)=>`${n>0?"-":""}${e.toLocaleLowerCase()}`);var b=class b{constructor(e,n,o){this.template=e;this.props=n;this.key=o;this.proxyProps={};this.context={};this.emitter=new Set;this.mounted=!1;this.rootNode=null;this.hooks={mounted:new Set,destroy:new Set};this.trackMap=new Map;this.proxyProps=L(n,r=>v(r,"on")||v(r,"update:"));}addEventListener(){}removeEventListener(){}get firstChild(){var e,n;return (n=(e=this.rootNode)==null?void 0:e.firstChild)!=null?n:null}get isConnected(){var e,n;return (n=(e=this.rootNode)==null?void 0:e.isConnected)!=null?n:!1}addHook(e,n){var o;(o=this.hooks[e])==null||o.add(n);}getContext(e){return b.context[e]}setContext(e,n){b.context[e]=n;}inheritNode(e){this.context=e.context,this.hooks=e.hooks,Object.assign(this.proxyProps,e.proxyProps),this.rootNode=e.rootNode,this.trackMap=e.trackMap;let n=this.props;this.props=e.props,this.patchProps(n);}unmount(){var e;this.hooks.destroy.forEach(n=>n()),Object.values(this.hooks).forEach(n=>n.clear()),(e=this.rootNode)==null||e.unmount(),this.rootNode=null,this.proxyProps={},this.mounted=!1,this.emitter.forEach(n=>n()),b.context={};}mount(e,n){var r,i,s,a;if(!m(this.template))throw new Error("Template must be a function");if(this.isConnected)return (i=(r=this.rootNode)==null?void 0:r.mount(e,n))!=null?i:[];b.ref=this,this.rootNode=this.template(this.proxyProps),b.ref=null,this.mounted=!0;let o=(a=(s=this.rootNode)==null?void 0:s.mount(e,n))!=null?a:[];return this.hooks.mounted.forEach(p=>p()),this.patchProps(this.props),o}getNodeTrack(e,n){let o=this.trackMap.get(e);return o||(o={cleanup:()=>{}},this.trackMap.set(e,o)),n||o.cleanup(),o}patchProps(e){var n,o,r,i,s;for(let[a,p]of Object.entries(e))if(v(a,"on")&&((n=this.rootNode)!=null&&n.nodes)){let u=a.slice(2).toLowerCase(),c=p,l=g(this.rootNode.nodes[0],u,c);this.emitter.add(l);}else if(a==="ref")d(p)?e[a].value=(o=this.rootNode)==null?void 0:o.nodes[0]:m(p)&&e[a]((r=this.rootNode)==null?void 0:r.nodes[0]);else if(v(a,"update:"))e[a]=d(p)?p.value:p;else {let u=(s=(i=this.proxyProps)[a])!=null?s:i[a]=E(p),c=this.getNodeTrack(a);c.cleanup=S(()=>{u.value=p;});}this.props=e;}};b.ref=null,b.context={};var h=b;function Te(t,e,n){return m(t)?new h(t,e,n):new k(t,e,n)}function y(t){return t instanceof h||t instanceof k}function xe(t){let e=document.createElement("template");return e.innerHTML=t,e}function Ee(t){return t.children}function U(t){if(y(t)||t instanceof Node)return t;let e=B(t)?"":String(t);return document.createTextNode(e)}function N(t,e,n=null){let o=y(n)?n.firstChild:n;y(e)?e.mount(t,o):o?o.before(e):t.append(e);}function C(t){y(t)?t.unmount():t.parentNode&&t.remove();}function Z(t,e,n){N(t,e,n),C(n);}function q(t,e,n){if(e==="class"){typeof n=="string"?t.className=n:Array.isArray(n)?t.className=n.join(" "):n&&typeof n=="object"&&(t.className=Object.entries(n).reduce((o,[r,i])=>o+(i?` ${r}`:""),"").trim());return}if(e==="style"){if(typeof n=="string")t.style.cssText=n;else if(n&&typeof n=="object"){let o=n;Object.keys(o).forEach(r=>{t.style.setProperty(se(r),String(o[r]));});}return}B(n)?t.removeAttribute(e):n===!0?t.setAttribute(e,""):t.setAttribute(e,String(n));}function ce(t,e){if(t instanceof HTMLInputElement){if(t.type==="checkbox")return g(t,"change",()=>{e(!!t.checked);});if(t.type==="date")return g(t,"change",()=>{e(t.value?t.value:"");});if(t.type==="file")return g(t,"change",()=>{t.files&&e(t.files);});if(t.type==="number")return g(t,"input",()=>{let n=Number.parseFloat(t.value);e(Number.isNaN(n)?"":String(n));});if(t.type==="radio")return g(t,"change",()=>{e(t.checked?t.value:"");});if(t.type==="text")return g(t,"input",()=>{e(t.value);})}if(t instanceof HTMLSelectElement)return g(t,"change",()=>{e(t.value);});if(t instanceof HTMLTextAreaElement)return g(t,"input",()=>{e(t.value);})}var ae=Promise.resolve();function Se(t){return t?ae.then(t):ae}function g(t,e,n){return t.addEventListener(e,n),()=>t.removeEventListener(e,n)}function ue(t,e,n,o){let r=new Map,i=e.values(),s=t.childNodes.length;if(e.size>0&&n.length===0){if(s===e.size+(o?1:0)){let u=t;u.innerHTML="",o&&N(t,o);}else {let u=document.createRange(),c=i.next().value,l=y(c)?c.firstChild:c;u.setStartBefore(l),o?u.setEndBefore(o):u.setEndAfter(t),u.deleteContents();}return e.forEach(u=>{y(u)&&u.unmount();}),r}let a=[],p=ke(n);for(let[u,c]of n.entries()){let l=i.next().value,x=R(l,u);for(;l&&!p.has(x);)C(l),e.delete(x),l=i.next().value,x=R(l,u);let M=R(c,u),Q=e.get(M);if(Q&&(c=Ce(t,Q,c)),l)if(l){let Y=document.createComment("");N(t,Y,l),a.push([Y,c]);}else N(t,c,o);else N(t,c,o);r.set(M,c);}return a.forEach(([u,c])=>Z(t,c,u)),e.forEach((u,c)=>{u.isConnected&&!r.has(c)&&C(u);}),r}function Ce(t,e,n){return e===n?e:y(e)&&y(n)&&e.template===n.template?(n.inheritNode(e),n):e instanceof Text&&n instanceof Text?(e.textContent!==n.textContent&&(e.textContent=n.textContent),e):(Z(t,n,e),n)}function ke(t){let e=new Map;for(let[n,o]of t.entries()){let r=R(o,n);e.set(r,o);}return e}function R(t,e){let n=t instanceof Element?t.id:void 0,o=n===""?void 0:n;return o!=null?o:`_$${e}$`}var k=class t{constructor(e,n,o){this.template=e;this.props=n;this.key=o;this.treeMap=new Map;this.mounted=!1;this.nodes=[];this.provides={};this.trackMap=new Map;this.parent=null;}get firstChild(){var e;return (e=this.nodes[0])!=null?e:null}get isConnected(){return this.mounted}addEventListener(){}removeEventListener(){}unmount(){this.trackMap.forEach(e=>{var n,o;(n=e.cleanup)==null||n.call(e),(o=e.lastNodes)==null||o.forEach(r=>{e.isRoot?C(r):r instanceof t&&r.unmount();});}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(e=>C(e)),this.nodes=[],this.mounted=!1;}mount(e,n){var i;if(this.parent=e,this.isConnected)return this.nodes.forEach(s=>N(e,s,n)),this.nodes;let o=this.template.content.cloneNode(!0),r=o.firstChild;return (i=r==null?void 0:r.hasAttribute)!=null&&i.call(r,"_svg_")&&(r.remove(),r==null||r.childNodes.forEach(s=>{o.append(s);})),this.nodes=Array.from(o.childNodes),this.mapNodeTree(e,o),N(e,o,n),this.patchNodes(this.props),this.mounted=!0,this.nodes}mapNodeTree(e,n){let o=1;this.treeMap.set(0,e);let r=i=>{i.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&this.treeMap.set(o++,i);let s=i.firstChild;for(;s;)r(s),s=s.nextSibling;};r(n);}patchNodes(e){for(let n in e){let o=Number(n),r=this.treeMap.get(o);if(r){let i=this.props[n];this.patchNode(n,r,i,o===0);}}this.props=e;}getNodeTrack(e,n,o){var i;let r=this.trackMap.get(e);return r||(r={cleanup:()=>{}},n&&(r.lastNodes=new Map),o&&(r.isRoot=!0),this.trackMap.set(e,r)),(i=r.cleanup)==null||i.call(r),r}inheritNode(e){this.mounted=e.mounted,this.nodes=e.nodes,this.trackMap=e.trackMap,this.treeMap=e.treeMap;let n=this.props;this.props=e.props,this.patchNodes(n);}patchNode(e,n,o,r){for(let i in o)if(i==="children"&&o.children)if(z(o.children))o.children.forEach((s,a)=>{var M;if(!s)return;let[p,u]=z(s)?s:[s,null],c=ie(u)?null:(M=this.treeMap.get(u))!=null?M:null,l=`${e}:${i}:${a}`,x=this.getNodeTrack(l,!0,r);le(x,n,p,c);});else {let s=`${e}:${i}:0`,a=this.getNodeTrack(s,!0,r);le(a,n,o.children,null);}else if(i==="ref")d(o[i])?o[i].value=n:m(o[i])&&o[i](n);else if(v(i,"on")){let s=i.slice(2).toLocaleLowerCase(),a=this.getNodeTrack(`${e}:${i}`),p=o[i];a.cleanup=g(n,s,p);}else if(!v(i,"update:")){let s=this.getNodeTrack(`${e}:${i}`),a=o[i],p=d(a)?a:E(a),u=S(()=>{p.value=d(a)?a.value:a,Me(s,n,i,p.value);}),c,l=`update:${i}`;o[l]&&(c=ce(n,x=>{o[l](x);})),s.cleanup=()=>{u&&u(),c&&c();};}}};function Me(t,e,n,o){let r=e;r.setAttribute&&(m(o)?t.cleanup=S(()=>{q(r,n,o());}):q(r,n,o));}function le(t,e,n,o){m(n)?t.cleanup=S(()=>{let r=W(n()).map(U);t.lastNodes=ue(e,t.lastNodes,r,o);}):W(n).forEach((r,i)=>{let s=U(r);t.lastNodes.set(String(i),s),N(e,s,o);});}function Ae(t){var e;_("onMounted"),(e=h.ref)==null||e.addHook("mounted",t);}function we(t){var e;_("onDestroy"),(e=h.ref)==null||e.addHook("destroy",t);}function _(t){if(!h.ref)throw new Error(`"${t}" can only be called within the component function body
4
+ and cannot be used in asynchronous or deferred calls.`)}function je(t,e){var n;_("useProvide"),(n=h.ref)==null||n.setContext(t,e);}function Oe(t,e){var n;return _("useInject"),((n=h.ref)==null?void 0:n.getContext(t))||e}function Le(){let t=null;return new Proxy({},{get(e,n){return n==="__is_ref"?!0:t},set(e,n,o){return t=o,!0}})}var zt="0.0.6-beta.6";function qt(t=[]){return t.reduce((e,n,o)=>(e[o+1]={template:n},e),{})}function Pe(t){return Object.entries(t).map(([e,n])=>`${e}=${JSON.stringify(n)}`).join(" ")}function pe(t,e){if(m(t))return t(e);let n={},o={};return re(t)&&Object.entries(t).forEach(([r,i])=>{let s=e[r];s&&(Object.keys(s).forEach(a=>{v(a,"on")&&m(s[a])&&delete s[a];}),s.children&&(s.children.forEach(([a,p])=>{n[p]=[...n[p]||[],a];}),delete s.children)),o[r]={template:i.template,prop:s};}),Object.entries(o).map(([r,{template:i,prop:s}])=>{let a=i;return s&&(a+=` ${Pe(s)}`),n[r]&&(a+=n[r].map(p=>pe(p,s)).join("")),a}).join("")}function Qt(t,e){return pe(t,e)}function Yt(t,e){e.innerHTML="",t.mount(e);}
5
5
 
6
- exports.ComponentNode = g;
6
+ exports.ComponentNode = h;
7
7
  exports.Fragment = Ee;
8
- exports.TemplateNode = M;
8
+ exports.TemplateNode = k;
9
9
  exports.__essor_version = zt;
10
10
  exports.createStore = be;
11
11
  exports.h = Te;
12
- exports.hydrate = Yt;
13
12
  exports.isComputed = ge;
14
- exports.isJsxElement = v;
13
+ exports.isJsxElement = y;
15
14
  exports.isReactive = X;
16
- exports.isSignal = m;
15
+ exports.isSignal = d;
17
16
  exports.nextTick = Se;
18
17
  exports.onDestroy = we;
19
18
  exports.onMount = Ae;
20
19
  exports.reactive = V;
21
20
  exports.renderToString = Qt;
22
21
  exports.signalObject = L;
22
+ exports.ssgRender = Yt;
23
23
  exports.ssr = pe;
24
24
  exports.ssrtmpl = qt;
25
25
  exports.template = xe;
26
26
  exports.unReactive = ve;
27
27
  exports.unSignal = ye;
28
- exports.useComputed = G;
29
- exports.useEffect = E;
28
+ exports.useComputed = I;
29
+ exports.useEffect = S;
30
30
  exports.useInject = Oe;
31
31
  exports.useProvide = je;
32
32
  exports.useRef = Le;
33
- exports.useSignal = x;
33
+ exports.useSignal = E;
34
34
  //# sourceMappingURL=out.js.map
35
35
  //# sourceMappingURL=essor.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../shared/src/is.ts","../src/signal/signal.ts","../src/signal/store.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/template/component-node.ts","../src/template/template.ts","../src/template/utils.ts","../src/template/patch.ts","../src/template/template-node.ts","../src/template/hooks.ts","../src/version.ts","../src/server/index.ts"],"names":["isArray","isFunction","val","activeEffect","activeComputed","computedSet","targetMap","EffectDeps","track","target","key","depsMap","dep","trigger","computedSignal","effect","Signal","value","newValue","useSignal","isSignal","Computed","fn","prev","useComputed","isComputed","useEffect","effectFn","shouldExclude","exclude","signalObject","initialValues","acc","unSignal","signal","REACTIVE_MARKER","isReactive","obj","unReactive","copy","reactive","initialValue","signalObj","handler","receiver","reactiveProxy","_id","StoreMap","createOptionsStore","options","state","getters","actions","initState","__spreadValues","reactiveState","subscriptions","actionCallbacks","default_actions","payload","callback","index","gettersStates","actionStates","getter","action","_","createStore","coerceArray","data","noop","startsWith","str","searchString","isObject","isNil","x","isFalsy","kebabCase","string","match","offset","_ComponentNode","template","props","_a","_b","hook","cb","context","node","set","emitter","parent","before","_c","_d","mountedNode","trackKey","suppressCleanupCall","_e","prop","event","listener","cleanup","addEventListener","ComponentNode","h","TemplateNode","isJsxElement","html","Fragment","coerceNode","text","insertChild","child","beforeNode","removeChild","replaceChild","setAttribute","element","attr","binNode","setter","p","nextTick","eventName","patchChildren","childrenMap","nextChildren","result","children","parentChildNodesLength","parentElement","range","start","replaces","nextChildrenMap","mapKeys","i","currChild","currKey","getKey","origChild","patch","placeholder","next","id","_TemplateNode","cloneNode","firstChild","tree","walk","trackLastNodes","isRoot","item","path","patchChild","triggerValue","patchAttribute","cleanupBind","updateKey","nextNodes","newNode","onMount","throwIfOutsideComponent","onDestroy","useProvide","useInject","defaultValue","useRef","refValue","__essor_version","ssrtmpl","templates","jsonToAttrs","json","ssr","newTemplate","tmpl","propKey","idx","renderToString","component","hydrate","root"],"mappings":"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","sourcesContent":["import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\n\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\nexport function isPrimitive(s: any): s is string | number {\n return (\n typeof s === 'string' || typeof s === 'number' || s instanceof String || s instanceof Number\n );\n}\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n","import { isFunction } from '../../../shared/src';\n\ntype EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function useSignal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n track(this, '_value');\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n }\n }\n\n get value(): T {\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function useComputed<T>(fn: () => T) {\n return new Computed(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function useEffect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n effectFn();\n\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null;\n };\n}\n\nfunction shouldExclude(key: string, exclude?: ((key: string) => boolean) | string[]): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]> | T[K];\n};\n/**\n * Creates a SignalObject from the given initialValues, excluding specified keys.\n *\n * @param {T extends Object} initialValues - The initial values for the SignalObject.\n * @param {(key: string) => boolean | string[]} exclude - A function that determines which keys to exclude from the SignalObject.\n * @return {SignalObject<T>} The created SignalObject.\n */\nexport function signalObject<T extends object>(\n initialValues: T,\n exclude?: ((key: string) => boolean) | string[],\n): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = shouldExclude(key, exclude) || isSignal(value) ? value : useSignal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\n/**\n * Returns the current value of a signal, signal object, or plain object, excluding specified keys.\n *\n * @param {SignalObject<T> | T | Signal<T>} signal - The signal, signal object, or plain object to unwrap.\n * @param {(key: string) => boolean | string[]} [exclude] - A function that determines which keys to exclude from the unwrapped object.\n * @return {T} The unwrapped value of the signal, signal object, or plain object.\n */\nexport function unSignal<T>(\n signal: SignalObject<T> | T | Signal<T>,\n exclude?: ((key: string) => boolean) | string[],\n): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n if (shouldExclude(key, exclude)) {\n acc[key] = value;\n } else {\n acc[key] = isSignal(value) ? value.peek() : value;\n }\n return acc;\n }, {} as T);\n}\n\nconst REACTIVE_MARKER = Symbol('reactive');\n\nexport function isReactive(obj) {\n return obj && obj[REACTIVE_MARKER] === true;\n}\n\nexport function unReactive(obj) {\n if (!isReactive(obj)) {\n return obj;\n }\n\n const copy = Object.assign({}, obj);\n delete copy[REACTIVE_MARKER];\n return copy;\n}\nexport function reactive(initialValue) {\n if (isReactive(initialValue)) {\n return initialValue;\n }\n const signalObj = signalObject(initialValue);\n\n const handler = {\n get(target, key, receiver) {\n track(target, key);\n const value = Reflect.get(target, key, receiver);\n return isSignal(value) ? value.value : value;\n },\n set(target, key, value, receiver) {\n const oldValue = Reflect.get(target, key, receiver);\n if (oldValue !== value) {\n Reflect.set(target, key, useSignal(value), receiver);\n trigger(target, key);\n }\n return true;\n },\n };\n\n const reactiveProxy = new Proxy(signalObj, handler);\n reactiveProxy[REACTIVE_MARKER] = true;\n\n return reactiveProxy;\n}\n","import { reactive, useComputed } from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\nexport interface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<\n Record<string, any>,\n Record<string, any>,\n Record<string, any>\n >;\n\n const initState = { ...(state ?? {}) };\n const reactiveState = reactive(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(reactiveState, payload);\n subscriptions.forEach(callback => callback(reactiveState));\n actionCallbacks.forEach(callback => callback(reactiveState));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n Object.assign(reactiveState, initState);\n },\n };\n const gettersStates: Record<string | symbol, any> = {};\n const actionStates: Record<string | symbol, any> = {};\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n gettersStates[key] = useComputed(() => {\n return getter.call(reactiveState, reactiveState);\n });\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n actionStates[key] = action.bind(reactiveState);\n }\n }\n\n StoreMap.set(_id, reactiveState);\n ++_id;\n\n return new Proxy(\n {},\n {\n get(_, key) {\n if (key === 'state') {\n return reactiveState;\n }\n if (key in gettersStates) {\n return gettersStates[key].value;\n }\n if (key in actionStates) {\n return actionStates[key];\n }\n if (key in default_actions) {\n return default_actions[key];\n }\n return reactiveState[key];\n },\n },\n );\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? ReturnType<S[K]> : S[K];\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<S & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions & { state: S } {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","export const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport function hasChanged(value, oldValue) {\n return !Object.is(value, oldValue);\n}\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n return str.indexOf(searchString) === 0;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { isFunction, startsWith } from 'essor-shared';\nimport { signalObject } from '../signal';\nimport { type Signal, useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, any>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(\n props,\n key => startsWith(key, 'on') || startsWith(key, 'update:'),\n );\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: Record<string, Signal<any>> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n // patch props\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(this.proxyProps);\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, any>) {\n for (const [key, prop] of Object.entries(props)) {\n if (startsWith(key, 'on') && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key === 'ref') {\n if (isSignal(prop)) {\n (props[key] as any).value = this.rootNode?.nodes[0];\n } else if (isFunction(prop)) {\n (props[key] as Function)(this.rootNode?.nodes[0]);\n }\n } else if (startsWith(key, 'update:')) {\n props[key] = isSignal(prop) ? prop.value : prop;\n } else {\n const newValue = (this.proxyProps[key] ??= useSignal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = useEffect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFunction } from 'essor-shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, any>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFalsy, kebabCase } from 'essor-shared';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { coerceArray, isArray, isFunction, isNil, startsWith } from 'essor-shared';\nimport { useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach((item, index) => {\n if (!item) {\n return;\n }\n const [child, path] = isArray(item) ? item : [item, null];\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isSignal(props[attr])) {\n props[attr].value = node;\n } else if (isFunction(props[attr])) {\n (props[attr] as Function)(node);\n }\n }\n // handle events\n else if (startsWith(attr, 'on')) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (!startsWith(attr, 'update:')) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : useSignal(val);\n\n const cleanup = useEffect(() => {\n triggerValue.value = isSignal(val) ? val.value : val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n let cleanupBind;\n const updateKey = `update:${attr}`;\n if (props[updateKey]) {\n cleanupBind = binNode(node, value => {\n props[updateKey](value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = useEffect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = useEffect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n\n/**\n * Initializes a reference with a null value of type T or null.\n *\n * @template T - The type of the reference.\n * @return {T & { __is_ref: boolean; current: T | null }} A proxy object allowing custom get and set behavior.\n */\nexport function useRef<T>(): {\n __is_ref: boolean;\n current: T | null;\n} {\n // 初始化 ref 为 null,类型为 T 或 null\n let refValue: T | null = null;\n\n // 使用 Proxy 创建一个代理对象,以便我们可以自定义 get 和 set 行为\n return new Proxy({} as any, {\n get(target, key: string | symbol) {\n // 特殊属性 __is_ref 始终返回 true\n if (key === '__is_ref') {\n return true;\n }\n // 直接返回 refValue\n return refValue;\n },\n set(target, prop: string | symbol, value: any) {\n if (prop === 'current') {\n refValue = value;\n return true;\n }\n refValue = value;\n return true;\n },\n });\n}\n","export const __essor_version = '0.0.6-beta.4';\n","import { isFunction, isObject, startsWith } from 'essor-shared';\nimport type { EssorNode } from '../../types';\n\ninterface TemplateMap {\n [key: number]: {\n template: string;\n prop?: Record<string, any>;\n };\n}\n\ntype Props = Record<string, any>;\n\nexport function ssrtmpl(templates: string[] = []): TemplateMap {\n return templates.reduce((acc, template, index) => {\n acc[index + 1] = { template };\n return acc;\n }, {} as TemplateMap);\n}\n\nfunction jsonToAttrs(json: Record<string, any>): string {\n return Object.entries(json)\n .map(([key, value]) => `${key}=${JSON.stringify(value)}`)\n .join(' ');\n}\n\nexport function ssr(\n template: TemplateMap | EssorNode | ((props: Props) => string),\n props: Props,\n): string {\n if (isFunction(template)) {\n return template(props);\n }\n\n const childrenMap: Record<string, EssorNode[]> = {};\n const newTemplate: TemplateMap = {};\n if (isObject(template)) {\n Object.entries(template).forEach(([key, tmpl]) => {\n const prop = props[key];\n if (prop) {\n Object.keys(prop).forEach(propKey => {\n if (startsWith(propKey, 'on') && isFunction(prop[propKey])) {\n delete prop[propKey];\n }\n });\n\n if (prop.children) {\n prop.children.forEach(([child, idx]: [any, number]) => {\n childrenMap[idx] = [...(childrenMap[idx] || []), child];\n });\n delete prop.children;\n }\n }\n\n newTemplate[key] = { template: tmpl.template, prop };\n });\n }\n\n return Object.entries(newTemplate)\n .map(([key, { template: tmpl, prop }]) => {\n let str = tmpl;\n if (prop) {\n str += ` ${jsonToAttrs(prop)}`;\n }\n if (childrenMap[key]) {\n str += childrenMap[key].map(child => ssr(child, prop)).join('');\n }\n\n return str;\n })\n .join('');\n}\n\nexport function renderToString(component: (...args: any[]) => string, props: Props): string {\n return ssr(component, props);\n}\n\nexport function hydrate(\n component: { mount: (root: HTMLElement) => void },\n root: HTMLElement,\n): void {\n root.innerHTML = '';\n component.mount(root);\n}\n"]}
1
+ {"version":3,"sources":["../../shared/src/is.ts","../src/signal/signal.ts","../src/signal/store.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/template/component-node.ts","../src/template/template.ts","../src/template/utils.ts","../src/template/patch.ts","../src/template/template-node.ts","../src/template/hooks.ts","../src/version.ts","../src/server/index.ts"],"names":["isArray","isFunction","val","activeEffect","activeComputed","computedSet","targetMap","EffectDeps","track","target","key","depsMap","dep","trigger","computedSignal","effect","Signal","value","newValue","useSignal","isSignal","Computed","fn","prev","useComputed","isComputed","useEffect","effectFn","shouldExclude","exclude","signalObject","initialValues","acc","unSignal","signal","REACTIVE_MARKER","isReactive","obj","unReactive","reactive","initialValue","signalObj","handler","receiver","oldValue","_id","StoreMap","createOptionsStore","options","state","getters","actions","initState","__spreadValues","reactiveState","subscriptions","actionCallbacks","store","payload","callback","index","getter","action","createStore","coerceArray","data","noop","startsWith","str","searchString","isObject","isNil","x","isFalsy","kebabCase","string","match","offset","_ComponentNode","template","props","_a","_b","hook","cb","context","node","set","emitter","parent","before","_c","_d","mountedNode","trackKey","suppressCleanupCall","_e","prop","event","listener","cleanup","addEventListener","ComponentNode","h","TemplateNode","isJsxElement","html","Fragment","coerceNode","text","insertChild","child","beforeNode","removeChild","replaceChild","setAttribute","element","attr","binNode","setter","p","nextTick","eventName","patchChildren","childrenMap","nextChildren","result","children","parentChildNodesLength","parentElement","range","start","replaces","nextChildrenMap","mapKeys","i","currChild","currKey","getKey","origChild","patch","placeholder","next","id","_TemplateNode","cloneNode","firstChild","tree","walk","trackLastNodes","isRoot","item","path","patchChild","triggerValue","patchAttribute","cleanupBind","updateKey","nextNodes","newNode","onMount","throwIfOutsideComponent","onDestroy","useProvide","useInject","defaultValue","useRef","refValue","__essor_version","ssrtmpl","templates","jsonToAttrs","json","ssr","newTemplate","tmpl","propKey","idx","renderToString","component","ssgRender","root"],"mappings":"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","sourcesContent":["import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\n\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\nexport function isPrimitive(s: any): s is string | number {\n return (\n typeof s === 'string' || typeof s === 'number' || s instanceof String || s instanceof Number\n );\n}\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n","import { isFunction } from '../../../shared/src';\n\ntype EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function useSignal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n private _deps: Set<EffectFn> = new Set();\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n this._deps.forEach(effect => effect());\n }\n }\n\n get value(): T {\n if (activeEffect) {\n this._deps.add(activeEffect);\n }\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function useComputed<T>(fn: () => T): Computed<T> {\n return new Computed<T>(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function useEffect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n effectFn();\n\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null;\n };\n}\n\nfunction shouldExclude(key: string, exclude?: ((key: string) => boolean) | string[]): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]> | T[K];\n};\n/**\n * Creates a SignalObject from the given initialValues, excluding specified keys.\n *\n * @param {T extends Object} initialValues - The initial values for the SignalObject.\n * @param {(key: string) => boolean | string[]} exclude - A function that determines which keys to exclude from the SignalObject.\n * @return {SignalObject<T>} The created SignalObject.\n */\nexport function signalObject<T extends object>(\n initialValues: T,\n exclude?: ((key: string) => boolean) | string[],\n): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = shouldExclude(key, exclude) || isSignal(value) ? value : useSignal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\n/**\n * Returns the current value of a signal, signal object, or plain object, excluding specified keys.\n *\n * @param {SignalObject<T> | T | Signal<T>} signal - The signal, signal object, or plain object to unwrap.\n * @param {(key: string) => boolean | string[]} [exclude] - A function that determines which keys to exclude from the unwrapped object.\n * @return {T} The unwrapped value of the signal, signal object, or plain object.\n */\nexport function unSignal<T>(\n signal: SignalObject<T> | T | Signal<T>,\n exclude?: ((key: string) => boolean) | string[],\n): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n if (shouldExclude(key, exclude)) {\n acc[key] = value;\n } else {\n acc[key] = isSignal(value) ? value.peek() : value;\n }\n return acc;\n }, {} as T);\n}\n\nconst REACTIVE_MARKER = Symbol('reactive');\n\nexport function isReactive(obj) {\n return obj && obj[REACTIVE_MARKER] === true;\n}\n\nexport function unReactive(obj) {\n if (!isReactive(obj)) {\n return obj;\n }\n return Object.assign({}, obj);\n}\nexport function reactive<T extends object>(initialValue: T): T {\n if (isReactive(initialValue)) {\n return initialValue;\n }\n\n const signalObj = signalObject(initialValue);\n\n const handler: ProxyHandler<SignalObject<T>> = {\n get(target, key, receiver) {\n if (key === REACTIVE_MARKER) return true;\n track(target, key);\n const value = Reflect.get(target, key, receiver);\n return isSignal(value) ? value.value : value;\n },\n set(target, key, value, receiver) {\n let oldValue: Signal<any> | any = Reflect.get(target, key, receiver);\n\n if (isSignal(oldValue)) {\n oldValue = oldValue.value;\n }\n if (isSignal(value)) {\n value = value.value;\n }\n if (oldValue !== value) {\n Reflect.set(target, key, useSignal(value), receiver);\n trigger(target, key);\n return true;\n }\n return true;\n },\n };\n\n return new Proxy(signalObj, handler) as T;\n}\n","import { reactive, useComputed } from './signal';\nimport type { Computed } from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\nexport interface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<\n Record<string | symbol, any>,\n Record<string, any>,\n Record<string, any>\n >;\n\n const initState = { ...(state ?? {}) };\n const reactiveState = reactive(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(reactiveState, payload);\n subscriptions.forEach(callback => callback(reactiveState));\n actionCallbacks.forEach(callback => callback(reactiveState));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n Object.assign(reactiveState, initState);\n },\n };\n\n const store = {\n state: reactiveState,\n ...default_actions,\n };\n\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n store[key] = useComputed(getter.bind(reactiveState, reactiveState));\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n store[key] = action.bind(reactiveState);\n }\n }\n\n StoreMap.set(_id, store);\n ++_id;\n\n return store;\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Computed<ReturnType<S[K]>> : S[K];\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<S & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions & { state: S } {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","export const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport function hasChanged(value, oldValue) {\n return !Object.is(value, oldValue);\n}\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n return str.indexOf(searchString) === 0;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { isFunction, startsWith } from 'essor-shared';\nimport { signalObject } from '../signal';\nimport { type Signal, useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, any>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(\n props,\n key => startsWith(key, 'on') || startsWith(key, 'update:'),\n );\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: Record<string, Signal<any>> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n // patch props\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(this.proxyProps);\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, any>) {\n for (const [key, prop] of Object.entries(props)) {\n if (startsWith(key, 'on') && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key === 'ref') {\n if (isSignal(prop)) {\n (props[key] as any).value = this.rootNode?.nodes[0];\n } else if (isFunction(prop)) {\n (props[key] as Function)(this.rootNode?.nodes[0]);\n }\n } else if (startsWith(key, 'update:')) {\n props[key] = isSignal(prop) ? prop.value : prop;\n } else {\n const newValue = (this.proxyProps[key] ??= useSignal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = useEffect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFunction } from 'essor-shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, any>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFalsy, kebabCase } from 'essor-shared';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { coerceArray, isArray, isFunction, isNil, startsWith } from 'essor-shared';\nimport { useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach((item, index) => {\n if (!item) {\n return;\n }\n const [child, path] = isArray(item) ? item : [item, null];\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isSignal(props[attr])) {\n props[attr].value = node;\n } else if (isFunction(props[attr])) {\n (props[attr] as Function)(node);\n }\n }\n // handle events\n else if (startsWith(attr, 'on')) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (!startsWith(attr, 'update:')) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : useSignal(val);\n\n const cleanup = useEffect(() => {\n triggerValue.value = isSignal(val) ? val.value : val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n let cleanupBind;\n const updateKey = `update:${attr}`;\n if (props[updateKey]) {\n cleanupBind = binNode(node, value => {\n props[updateKey](value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = useEffect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = useEffect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n\n/**\n * Initializes a reference with a null value of type T or null.\n *\n * @template T - The type of the reference.\n * @return {T & { __is_ref: boolean; current: T | null }} A proxy object allowing custom get and set behavior.\n */\nexport function useRef<T>(): {\n __is_ref: boolean;\n current: T | null;\n} {\n // 初始化 ref 为 null,类型为 T 或 null\n let refValue: T | null = null;\n\n // 使用 Proxy 创建一个代理对象,以便我们可以自定义 get 和 set 行为\n return new Proxy({} as any, {\n get(target, key: string | symbol) {\n // 特殊属性 __is_ref 始终返回 true\n if (key === '__is_ref') {\n return true;\n }\n // 直接返回 refValue\n return refValue;\n },\n set(target, prop: string | symbol, value: any) {\n if (prop === 'current') {\n refValue = value;\n return true;\n }\n refValue = value;\n return true;\n },\n });\n}\n","export const __essor_version = '0.0.6-beta.6';\n","import { isFunction, isObject, startsWith } from 'essor-shared';\nimport type { EssorNode } from '../../types';\n\ninterface TemplateMap {\n [key: number]: {\n template: string;\n prop?: Record<string, any>;\n };\n}\n\ntype Props = Record<string, any>;\n\nexport function ssrtmpl(templates: string[] = []): TemplateMap {\n return templates.reduce((acc, template, index) => {\n acc[index + 1] = { template };\n return acc;\n }, {} as TemplateMap);\n}\n\nfunction jsonToAttrs(json: Record<string, any>): string {\n return Object.entries(json)\n .map(([key, value]) => `${key}=${JSON.stringify(value)}`)\n .join(' ');\n}\n\nexport function ssr(\n template: TemplateMap | EssorNode | ((props: Props) => string),\n props: Props,\n): string {\n if (isFunction(template)) {\n return template(props);\n }\n\n const childrenMap: Record<string, EssorNode[]> = {};\n const newTemplate: TemplateMap = {};\n if (isObject(template)) {\n Object.entries(template).forEach(([key, tmpl]) => {\n const prop = props[key];\n if (prop) {\n Object.keys(prop).forEach(propKey => {\n if (startsWith(propKey, 'on') && isFunction(prop[propKey])) {\n delete prop[propKey];\n }\n });\n\n if (prop.children) {\n prop.children.forEach(([child, idx]: [any, number]) => {\n childrenMap[idx] = [...(childrenMap[idx] || []), child];\n });\n delete prop.children;\n }\n }\n\n newTemplate[key] = { template: tmpl.template, prop };\n });\n }\n\n return Object.entries(newTemplate)\n .map(([key, { template: tmpl, prop }]) => {\n let str = tmpl;\n if (prop) {\n str += ` ${jsonToAttrs(prop)}`;\n }\n if (childrenMap[key]) {\n str += childrenMap[key].map(child => ssr(child, prop)).join('');\n }\n\n return str;\n })\n .join('');\n}\n\nexport function renderToString(component: (...args: any[]) => string, props: Props): string {\n return ssr(component, props);\n}\n\nexport function ssgRender(\n component: { mount: (root: HTMLElement) => void },\n root: HTMLElement,\n): void {\n root.innerHTML = '';\n component.mount(root);\n}\n"]}
package/dist/essor.d.cts CHANGED
@@ -17,6 +17,7 @@ declare function isSignal<T>(value: any): value is Signal$1<T>;
17
17
  declare class Computed<T> {
18
18
  private readonly fn;
19
19
  private _value;
20
+ private _deps;
20
21
  constructor(fn: () => T);
21
22
  peek(): T;
22
23
  run(): void;
@@ -46,7 +47,7 @@ declare function signalObject<T extends object>(initialValues: T, exclude?: ((ke
46
47
  declare function unSignal<T>(signal: SignalObject<T> | T | Signal$1<T>, exclude?: ((key: string) => boolean) | string[]): T;
47
48
  declare function isReactive(obj: any): any;
48
49
  declare function unReactive(obj: any): any;
49
- declare function reactive(initialValue: any): any;
50
+ declare function reactive<T extends object>(initialValue: T): T;
50
51
 
51
52
  type PatchPayload = Record<string, any>;
52
53
  type Callback = (value: any) => void;
@@ -58,7 +59,7 @@ interface StoreActions {
58
59
  reset$: () => void;
59
60
  }
60
61
  type Getters<S> = {
61
- [K in keyof S]: S[K] extends (...args: any[]) => any ? ReturnType<S[K]> : S[K];
62
+ [K in keyof S]: S[K] extends (...args: any[]) => any ? Computed<ReturnType<S[K]>> : S[K];
62
63
  };
63
64
  declare function createStore<S, G, A>(options: {
64
65
  state: S;
@@ -2358,7 +2359,7 @@ declare function useRef<T>(): {
2358
2359
  current: T | null;
2359
2360
  };
2360
2361
 
2361
- declare const __essor_version = "0.0.6-beta.4";
2362
+ declare const __essor_version = "0.0.6-beta.6";
2362
2363
 
2363
2364
  interface TemplateMap {
2364
2365
  [key: number]: {
@@ -2370,8 +2371,8 @@ type Props = Record<string, any>;
2370
2371
  declare function ssrtmpl(templates?: string[]): TemplateMap;
2371
2372
  declare function ssr(template: TemplateMap | EssorNode | ((props: Props) => string), props: Props): string;
2372
2373
  declare function renderToString(component: (...args: any[]) => string, props: Props): string;
2373
- declare function hydrate(component: {
2374
+ declare function ssgRender(component: {
2374
2375
  mount: (root: HTMLElement) => void;
2375
2376
  }, root: HTMLElement): void;
2376
2377
 
2377
- export { ComponentNode$1 as ComponentNode, Computed, type EssorComponent, type EssorNode, Fragment, type Hook$1 as Hook, type InjectionKey, type NodeTrack, type Output, Signal$1 as Signal, type StoreActions, TemplateNode, __essor_version, createStore, h, hydrate, isComputed, isJsxElement, isReactive, isSignal, nextTick, onDestroy, onMount, reactive, renderToString, signalObject, ssr, ssrtmpl, template, unReactive, unSignal, useComputed, useEffect, useInject, useProvide, useRef, useSignal };
2378
+ export { ComponentNode$1 as ComponentNode, Computed, type EssorComponent, type EssorNode, Fragment, type Hook$1 as Hook, type InjectionKey, type NodeTrack, type Output, Signal$1 as Signal, type StoreActions, TemplateNode, __essor_version, createStore, h, isComputed, isJsxElement, isReactive, isSignal, nextTick, onDestroy, onMount, reactive, renderToString, signalObject, ssgRender, ssr, ssrtmpl, template, unReactive, unSignal, useComputed, useEffect, useInject, useProvide, useRef, useSignal };
package/dist/essor.d.ts CHANGED
@@ -17,6 +17,7 @@ declare function isSignal<T>(value: any): value is Signal$1<T>;
17
17
  declare class Computed<T> {
18
18
  private readonly fn;
19
19
  private _value;
20
+ private _deps;
20
21
  constructor(fn: () => T);
21
22
  peek(): T;
22
23
  run(): void;
@@ -46,7 +47,7 @@ declare function signalObject<T extends object>(initialValues: T, exclude?: ((ke
46
47
  declare function unSignal<T>(signal: SignalObject<T> | T | Signal$1<T>, exclude?: ((key: string) => boolean) | string[]): T;
47
48
  declare function isReactive(obj: any): any;
48
49
  declare function unReactive(obj: any): any;
49
- declare function reactive(initialValue: any): any;
50
+ declare function reactive<T extends object>(initialValue: T): T;
50
51
 
51
52
  type PatchPayload = Record<string, any>;
52
53
  type Callback = (value: any) => void;
@@ -58,7 +59,7 @@ interface StoreActions {
58
59
  reset$: () => void;
59
60
  }
60
61
  type Getters<S> = {
61
- [K in keyof S]: S[K] extends (...args: any[]) => any ? ReturnType<S[K]> : S[K];
62
+ [K in keyof S]: S[K] extends (...args: any[]) => any ? Computed<ReturnType<S[K]>> : S[K];
62
63
  };
63
64
  declare function createStore<S, G, A>(options: {
64
65
  state: S;
@@ -2358,7 +2359,7 @@ declare function useRef<T>(): {
2358
2359
  current: T | null;
2359
2360
  };
2360
2361
 
2361
- declare const __essor_version = "0.0.6-beta.4";
2362
+ declare const __essor_version = "0.0.6-beta.6";
2362
2363
 
2363
2364
  interface TemplateMap {
2364
2365
  [key: number]: {
@@ -2370,8 +2371,8 @@ type Props = Record<string, any>;
2370
2371
  declare function ssrtmpl(templates?: string[]): TemplateMap;
2371
2372
  declare function ssr(template: TemplateMap | EssorNode | ((props: Props) => string), props: Props): string;
2372
2373
  declare function renderToString(component: (...args: any[]) => string, props: Props): string;
2373
- declare function hydrate(component: {
2374
+ declare function ssgRender(component: {
2374
2375
  mount: (root: HTMLElement) => void;
2375
2376
  }, root: HTMLElement): void;
2376
2377
 
2377
- export { ComponentNode$1 as ComponentNode, Computed, type EssorComponent, type EssorNode, Fragment, type Hook$1 as Hook, type InjectionKey, type NodeTrack, type Output, Signal$1 as Signal, type StoreActions, TemplateNode, __essor_version, createStore, h, hydrate, isComputed, isJsxElement, isReactive, isSignal, nextTick, onDestroy, onMount, reactive, renderToString, signalObject, ssr, ssrtmpl, template, unReactive, unSignal, useComputed, useEffect, useInject, useProvide, useRef, useSignal };
2378
+ export { ComponentNode$1 as ComponentNode, Computed, type EssorComponent, type EssorNode, Fragment, type Hook$1 as Hook, type InjectionKey, type NodeTrack, type Output, Signal$1 as Signal, type StoreActions, TemplateNode, __essor_version, createStore, h, isComputed, isJsxElement, isReactive, isSignal, nextTick, onDestroy, onMount, reactive, renderToString, signalObject, ssgRender, ssr, ssrtmpl, template, unReactive, unSignal, useComputed, useEffect, useInject, useProvide, useRef, useSignal };
@@ -98,9 +98,9 @@ function isSignal(value) {
98
98
  var Computed = class {
99
99
  constructor(fn) {
100
100
  this.fn = fn;
101
+ this._deps = /* @__PURE__ */ new Set();
101
102
  const prev = activeComputed;
102
103
  activeComputed = this;
103
- track(this, "_value");
104
104
  this._value = this.fn();
105
105
  activeComputed = prev;
106
106
  }
@@ -111,9 +111,13 @@ var Computed = class {
111
111
  const newValue = this.fn();
112
112
  if (newValue !== this._value) {
113
113
  this._value = newValue;
114
+ this._deps.forEach((effect) => effect());
114
115
  }
115
116
  }
116
117
  get value() {
118
+ if (activeEffect) {
119
+ this._deps.add(activeEffect);
120
+ }
117
121
  track(this, "_value");
118
122
  return this._value;
119
123
  }
@@ -171,9 +175,7 @@ function unReactive(obj) {
171
175
  if (!isReactive(obj)) {
172
176
  return obj;
173
177
  }
174
- const copy = Object.assign({}, obj);
175
- delete copy[REACTIVE_MARKER];
176
- return copy;
178
+ return Object.assign({}, obj);
177
179
  }
178
180
  function reactive(initialValue) {
179
181
  if (isReactive(initialValue)) {
@@ -182,22 +184,29 @@ function reactive(initialValue) {
182
184
  const signalObj = signalObject(initialValue);
183
185
  const handler = {
184
186
  get(target, key, receiver) {
187
+ if (key === REACTIVE_MARKER)
188
+ return true;
185
189
  track(target, key);
186
190
  const value = Reflect.get(target, key, receiver);
187
191
  return isSignal(value) ? value.value : value;
188
192
  },
189
193
  set(target, key, value, receiver) {
190
- const oldValue = Reflect.get(target, key, receiver);
194
+ let oldValue = Reflect.get(target, key, receiver);
195
+ if (isSignal(oldValue)) {
196
+ oldValue = oldValue.value;
197
+ }
198
+ if (isSignal(value)) {
199
+ value = value.value;
200
+ }
191
201
  if (oldValue !== value) {
192
202
  Reflect.set(target, key, useSignal(value), receiver);
193
203
  trigger(target, key);
204
+ return true;
194
205
  }
195
206
  return true;
196
207
  }
197
208
  };
198
- const reactiveProxy = new Proxy(signalObj, handler);
199
- reactiveProxy[REACTIVE_MARKER] = true;
200
- return reactiveProxy;
209
+ return new Proxy(signalObj, handler);
201
210
  }
202
211
 
203
212
  // src/signal/store.ts
@@ -231,44 +240,24 @@ function createOptionsStore(options) {
231
240
  Object.assign(reactiveState, initState);
232
241
  }
233
242
  };
234
- const gettersStates = {};
235
- const actionStates = {};
243
+ const store = __spreadValues({
244
+ state: reactiveState
245
+ }, default_actions);
236
246
  for (const key in getters) {
237
247
  const getter = getters[key];
238
248
  if (getter) {
239
- gettersStates[key] = useComputed(() => {
240
- return getter.call(reactiveState, reactiveState);
241
- });
249
+ store[key] = useComputed(getter.bind(reactiveState, reactiveState));
242
250
  }
243
251
  }
244
252
  for (const key in actions) {
245
253
  const action = actions[key];
246
254
  if (action) {
247
- actionStates[key] = action.bind(reactiveState);
255
+ store[key] = action.bind(reactiveState);
248
256
  }
249
257
  }
250
- StoreMap.set(_id, reactiveState);
258
+ StoreMap.set(_id, store);
251
259
  ++_id;
252
- return new Proxy(
253
- {},
254
- {
255
- get(_, key) {
256
- if (key === "state") {
257
- return reactiveState;
258
- }
259
- if (key in gettersStates) {
260
- return gettersStates[key].value;
261
- }
262
- if (key in actionStates) {
263
- return actionStates[key];
264
- }
265
- if (key in default_actions) {
266
- return default_actions[key];
267
- }
268
- return reactiveState[key];
269
- }
270
- }
271
- );
260
+ return store;
272
261
  }
273
262
  function createStore(options) {
274
263
  return function() {
@@ -906,7 +895,7 @@ function useRef() {
906
895
  }
907
896
 
908
897
  // src/version.ts
909
- var __essor_version = "0.0.6-beta.4";
898
+ var __essor_version = "0.0.6-beta.6";
910
899
 
911
900
  // src/server/index.ts
912
901
  function ssrtmpl(templates = []) {
@@ -957,7 +946,7 @@ function ssr(template2, props) {
957
946
  function renderToString(component, props) {
958
947
  return ssr(component, props);
959
948
  }
960
- function hydrate(component, root) {
949
+ function ssgRender(component, root) {
961
950
  root.innerHTML = "";
962
951
  component.mount(root);
963
952
  }
@@ -968,7 +957,6 @@ exports.TemplateNode = TemplateNode;
968
957
  exports.__essor_version = __essor_version;
969
958
  exports.createStore = createStore;
970
959
  exports.h = h;
971
- exports.hydrate = hydrate;
972
960
  exports.isComputed = isComputed;
973
961
  exports.isJsxElement = isJsxElement;
974
962
  exports.isReactive = isReactive;
@@ -979,6 +967,7 @@ exports.onMount = onMount;
979
967
  exports.reactive = reactive;
980
968
  exports.renderToString = renderToString;
981
969
  exports.signalObject = signalObject;
970
+ exports.ssgRender = ssgRender;
982
971
  exports.ssr = ssr;
983
972
  exports.ssrtmpl = ssrtmpl;
984
973
  exports.template = template;
@@ -96,9 +96,9 @@ function isSignal(value) {
96
96
  var Computed = class {
97
97
  constructor(fn) {
98
98
  this.fn = fn;
99
+ this._deps = /* @__PURE__ */ new Set();
99
100
  const prev = activeComputed;
100
101
  activeComputed = this;
101
- track(this, "_value");
102
102
  this._value = this.fn();
103
103
  activeComputed = prev;
104
104
  }
@@ -109,9 +109,13 @@ var Computed = class {
109
109
  const newValue = this.fn();
110
110
  if (newValue !== this._value) {
111
111
  this._value = newValue;
112
+ this._deps.forEach((effect) => effect());
112
113
  }
113
114
  }
114
115
  get value() {
116
+ if (activeEffect) {
117
+ this._deps.add(activeEffect);
118
+ }
115
119
  track(this, "_value");
116
120
  return this._value;
117
121
  }
@@ -169,9 +173,7 @@ function unReactive(obj) {
169
173
  if (!isReactive(obj)) {
170
174
  return obj;
171
175
  }
172
- const copy = Object.assign({}, obj);
173
- delete copy[REACTIVE_MARKER];
174
- return copy;
176
+ return Object.assign({}, obj);
175
177
  }
176
178
  function reactive(initialValue) {
177
179
  if (isReactive(initialValue)) {
@@ -180,22 +182,29 @@ function reactive(initialValue) {
180
182
  const signalObj = signalObject(initialValue);
181
183
  const handler = {
182
184
  get(target, key, receiver) {
185
+ if (key === REACTIVE_MARKER)
186
+ return true;
183
187
  track(target, key);
184
188
  const value = Reflect.get(target, key, receiver);
185
189
  return isSignal(value) ? value.value : value;
186
190
  },
187
191
  set(target, key, value, receiver) {
188
- const oldValue = Reflect.get(target, key, receiver);
192
+ let oldValue = Reflect.get(target, key, receiver);
193
+ if (isSignal(oldValue)) {
194
+ oldValue = oldValue.value;
195
+ }
196
+ if (isSignal(value)) {
197
+ value = value.value;
198
+ }
189
199
  if (oldValue !== value) {
190
200
  Reflect.set(target, key, useSignal(value), receiver);
191
201
  trigger(target, key);
202
+ return true;
192
203
  }
193
204
  return true;
194
205
  }
195
206
  };
196
- const reactiveProxy = new Proxy(signalObj, handler);
197
- reactiveProxy[REACTIVE_MARKER] = true;
198
- return reactiveProxy;
207
+ return new Proxy(signalObj, handler);
199
208
  }
200
209
 
201
210
  // src/signal/store.ts
@@ -229,44 +238,24 @@ function createOptionsStore(options) {
229
238
  Object.assign(reactiveState, initState);
230
239
  }
231
240
  };
232
- const gettersStates = {};
233
- const actionStates = {};
241
+ const store = __spreadValues({
242
+ state: reactiveState
243
+ }, default_actions);
234
244
  for (const key in getters) {
235
245
  const getter = getters[key];
236
246
  if (getter) {
237
- gettersStates[key] = useComputed(() => {
238
- return getter.call(reactiveState, reactiveState);
239
- });
247
+ store[key] = useComputed(getter.bind(reactiveState, reactiveState));
240
248
  }
241
249
  }
242
250
  for (const key in actions) {
243
251
  const action = actions[key];
244
252
  if (action) {
245
- actionStates[key] = action.bind(reactiveState);
253
+ store[key] = action.bind(reactiveState);
246
254
  }
247
255
  }
248
- StoreMap.set(_id, reactiveState);
256
+ StoreMap.set(_id, store);
249
257
  ++_id;
250
- return new Proxy(
251
- {},
252
- {
253
- get(_, key) {
254
- if (key === "state") {
255
- return reactiveState;
256
- }
257
- if (key in gettersStates) {
258
- return gettersStates[key].value;
259
- }
260
- if (key in actionStates) {
261
- return actionStates[key];
262
- }
263
- if (key in default_actions) {
264
- return default_actions[key];
265
- }
266
- return reactiveState[key];
267
- }
268
- }
269
- );
258
+ return store;
270
259
  }
271
260
  function createStore(options) {
272
261
  return function() {
@@ -904,7 +893,7 @@ function useRef() {
904
893
  }
905
894
 
906
895
  // src/version.ts
907
- var __essor_version = "0.0.6-beta.4";
896
+ var __essor_version = "0.0.6-beta.6";
908
897
 
909
898
  // src/server/index.ts
910
899
  function ssrtmpl(templates = []) {
@@ -955,9 +944,9 @@ function ssr(template2, props) {
955
944
  function renderToString(component, props) {
956
945
  return ssr(component, props);
957
946
  }
958
- function hydrate(component, root) {
947
+ function ssgRender(component, root) {
959
948
  root.innerHTML = "";
960
949
  component.mount(root);
961
950
  }
962
951
 
963
- export { ComponentNode, Fragment, TemplateNode, __essor_version, createStore, h, hydrate, isComputed, isJsxElement, isReactive, isSignal, nextTick, onDestroy, onMount, reactive, renderToString, signalObject, ssr, ssrtmpl, template, unReactive, unSignal, useComputed, useEffect, useInject, useProvide, useRef, useSignal };
952
+ export { ComponentNode, Fragment, TemplateNode, __essor_version, createStore, h, isComputed, isJsxElement, isReactive, isSignal, nextTick, onDestroy, onMount, reactive, renderToString, signalObject, ssgRender, ssr, ssrtmpl, template, unReactive, unSignal, useComputed, useEffect, useInject, useProvide, useRef, useSignal };
package/dist/essor.esm.js CHANGED
@@ -1,6 +1,6 @@
1
- var de=Object.defineProperty;var te=Object.getOwnPropertySymbols;var me=Object.prototype.hasOwnProperty,he=Object.prototype.propertyIsEnumerable;var ne=(t,e,n)=>e in t?de(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,oe=(t,e)=>{for(var n in e||(e={}))me.call(e,n)&&ne(t,n,e[n]);if(te)for(var n of te(e))he.call(e,n)&&ne(t,n,e[n]);return t};var F=t=>typeof t=="function";var k=null,j=null,H=new Set,K=new WeakMap,J=new Set;function M(t,e){let n=K.get(t);n||(n=new Map,K.set(t,n));let o=n.get(e);o||(o=new Set,n.set(e,o)),k&&o.add(k),j&&H.add(j);}function G(t,e){H.size>0&&H.forEach(r=>r.run());let n=K.get(t);if(!n)return;let o=n.get(e);o&&o.forEach(r=>J.has(r)&&r());}var O=class{constructor(e){this._value=e;}valueOf(){return M(this,"value"),this._value}toString(){return M(this,"value"),String(this._value)}toJSON(){return this._value}get value(){return M(this,"value"),this._value}set value(e){this._value!==e&&(this._value=e,G(this,"value"));}peek(){return this._value}update(){G(this,"value");}};function E(t){return h(t)?t:new O(t)}function h(t){return t instanceof O}var L=class{constructor(e){this.fn=e;let n=j;j=this,M(this,"_value"),this._value=this.fn(),j=n;}peek(){return this._value}run(){let e=this.fn();e!==this._value&&(this._value=e);}get value(){return M(this,"_value"),this._value}};function I(t){return new L(t)}function ye(t){return t instanceof L}function S(t){function e(){let n=k;k=e,t(),k=n;}return J.add(e),e(),()=>{J.delete(e),k=null;}}function re(t,e){return Array.isArray(e)?e.includes(t):F(e)?e(t):!1}function P(t,e){return Object.entries(t).reduce((o,[r,i])=>(o[r]=re(r,e)||h(i)?i:E(i),o),{})}function ve(t,e){return t?h(t)?t.peek():Object.entries(t).reduce((n,[o,r])=>(re(o,e)?n[o]=r:n[o]=h(r)?r.peek():r,n),{}):{}}var X=Symbol("reactive");function V(t){return t&&t[X]===!0}function Ne(t){if(!V(t))return t;let e=Object.assign({},t);return delete e[X],e}function D(t){if(V(t))return t;let e=P(t),n={get(r,i,s){M(r,i);let a=Reflect.get(r,i,s);return h(a)?a.value:a},set(r,i,s,a){return Reflect.get(r,i,a)!==s&&(Reflect.set(r,i,E(s),a),G(r,i)),!0}},o=new Proxy(e,n);return o[X]=!0,o}var R=0,W=new Map;function be(t){let{state:e,getters:n,actions:o}=t,r=oe({},e!=null?e:{}),i=D(e!=null?e:{}),s=[],a=[],f={patch$(u){Object.assign(i,u),s.forEach(p=>p(i)),a.forEach(p=>p(i));},subscribe$(u){s.push(u);},unsubscribe$(u){let p=s.indexOf(u);p!==-1&&s.splice(p,1);},onAction$(u){a.push(u);},reset$(){Object.assign(i,r);}},c={},l={};for(let u in n){let p=n[u];p&&(c[u]=I(()=>p.call(i,i)));}for(let u in o){let p=o[u];p&&(l[u]=p.bind(i));}return W.set(R,i),++R,new Proxy({},{get(u,p){return p==="state"?i:p in c?c[p].value:p in l?l[p]:p in f?f[p]:i[p]}})}function Te(t){return function(){return W.has(R)?W.get(R):be(t)}}function z(t){return Array.isArray(t)?t.flat():[t]}function b(t,e){return t.indexOf(e)===0}var ie=t=>t!==null&&typeof t=="object";var B=Array.isArray;function se(t){return t==null}var g=t=>typeof t=="function";function U(t){return t===!1||t===null||t===void 0||t===""}var ae=t=>t.replaceAll(/[A-Z]+/g,(e,n)=>`${n>0?"-":""}${e.toLocaleLowerCase()}`);var x=class x{constructor(e,n,o){this.template=e;this.props=n;this.key=o;this.proxyProps={};this.context={};this.emitter=new Set;this.mounted=!1;this.rootNode=null;this.hooks={mounted:new Set,destroy:new Set};this.trackMap=new Map;this.proxyProps=P(n,r=>b(r,"on")||b(r,"update:"));}addEventListener(){}removeEventListener(){}get firstChild(){var e,n;return (n=(e=this.rootNode)==null?void 0:e.firstChild)!=null?n:null}get isConnected(){var e,n;return (n=(e=this.rootNode)==null?void 0:e.isConnected)!=null?n:!1}addHook(e,n){var o;(o=this.hooks[e])==null||o.add(n);}getContext(e){return x.context[e]}setContext(e,n){x.context[e]=n;}inheritNode(e){this.context=e.context,this.hooks=e.hooks,Object.assign(this.proxyProps,e.proxyProps),this.rootNode=e.rootNode,this.trackMap=e.trackMap;let n=this.props;this.props=e.props,this.patchProps(n);}unmount(){var e;this.hooks.destroy.forEach(n=>n()),Object.values(this.hooks).forEach(n=>n.clear()),(e=this.rootNode)==null||e.unmount(),this.rootNode=null,this.proxyProps={},this.mounted=!1,this.emitter.forEach(n=>n()),x.context={};}mount(e,n){var r,i,s,a;if(!g(this.template))throw new Error("Template must be a function");if(this.isConnected)return (i=(r=this.rootNode)==null?void 0:r.mount(e,n))!=null?i:[];x.ref=this,this.rootNode=this.template(this.proxyProps),x.ref=null,this.mounted=!0;let o=(a=(s=this.rootNode)==null?void 0:s.mount(e,n))!=null?a:[];return this.hooks.mounted.forEach(f=>f()),this.patchProps(this.props),o}getNodeTrack(e,n){let o=this.trackMap.get(e);return o||(o={cleanup:()=>{}},this.trackMap.set(e,o)),n||o.cleanup(),o}patchProps(e){var n,o,r,i,s;for(let[a,f]of Object.entries(e))if(b(a,"on")&&((n=this.rootNode)!=null&&n.nodes)){let c=a.slice(2).toLowerCase(),l=f,u=v(this.rootNode.nodes[0],c,l);this.emitter.add(u);}else if(a==="ref")h(f)?e[a].value=(o=this.rootNode)==null?void 0:o.nodes[0]:g(f)&&e[a]((r=this.rootNode)==null?void 0:r.nodes[0]);else if(b(a,"update:"))e[a]=h(f)?f.value:f;else {let c=(s=(i=this.proxyProps)[a])!=null?s:i[a]=E(f),l=this.getNodeTrack(a);l.cleanup=S(()=>{c.value=f;});}this.props=e;}};x.ref=null,x.context={};var y=x;function xe(t,e,n){return g(t)?new y(t,e,n):new A(t,e,n)}function N(t){return t instanceof y||t instanceof A}function Ee(t){let e=document.createElement("template");return e.innerHTML=t,e}function Se(t){return t.children}function Z(t){if(N(t)||t instanceof Node)return t;let e=U(t)?"":String(t);return document.createTextNode(e)}function T(t,e,n=null){let o=N(n)?n.firstChild:n;N(e)?e.mount(t,o):o?o.before(e):t.append(e);}function C(t){N(t)?t.unmount():t.parentNode&&t.remove();}function q(t,e,n){T(t,e,n),C(n);}function Q(t,e,n){if(e==="class"){typeof n=="string"?t.className=n:Array.isArray(n)?t.className=n.join(" "):n&&typeof n=="object"&&(t.className=Object.entries(n).reduce((o,[r,i])=>o+(i?` ${r}`:""),"").trim());return}if(e==="style"){if(typeof n=="string")t.style.cssText=n;else if(n&&typeof n=="object"){let o=n;Object.keys(o).forEach(r=>{t.style.setProperty(ae(r),String(o[r]));});}return}U(n)?t.removeAttribute(e):n===!0?t.setAttribute(e,""):t.setAttribute(e,String(n));}function ue(t,e){if(t instanceof HTMLInputElement){if(t.type==="checkbox")return v(t,"change",()=>{e(!!t.checked);});if(t.type==="date")return v(t,"change",()=>{e(t.value?t.value:"");});if(t.type==="file")return v(t,"change",()=>{t.files&&e(t.files);});if(t.type==="number")return v(t,"input",()=>{let n=Number.parseFloat(t.value);e(Number.isNaN(n)?"":String(n));});if(t.type==="radio")return v(t,"change",()=>{e(t.checked?t.value:"");});if(t.type==="text")return v(t,"input",()=>{e(t.value);})}if(t instanceof HTMLSelectElement)return v(t,"change",()=>{e(t.value);});if(t instanceof HTMLTextAreaElement)return v(t,"input",()=>{e(t.value);})}var ce=Promise.resolve();function Ce(t){return t?ce.then(t):ce}function v(t,e,n){return t.addEventListener(e,n),()=>t.removeEventListener(e,n)}function le(t,e,n,o){let r=new Map,i=e.values(),s=t.childNodes.length;if(e.size>0&&n.length===0){if(s===e.size+(o?1:0)){let c=t;c.innerHTML="",o&&T(t,o);}else {let c=document.createRange(),l=i.next().value,u=N(l)?l.firstChild:l;c.setStartBefore(u),o?c.setEndBefore(o):c.setEndAfter(t),c.deleteContents();}return e.forEach(c=>{N(c)&&c.unmount();}),r}let a=[],f=Me(n);for(let[c,l]of n.entries()){let u=i.next().value,p=_(u,c);for(;u&&!f.has(p);)C(u),e.delete(p),u=i.next().value,p=_(u,c);let w=_(l,c),Y=e.get(w);if(Y&&(l=ke(t,Y,l)),u)if(u){let ee=document.createComment("");T(t,ee,u),a.push([ee,l]);}else T(t,l,o);else T(t,l,o);r.set(w,l);}return a.forEach(([c,l])=>q(t,l,c)),e.forEach((c,l)=>{c.isConnected&&!r.has(l)&&C(c);}),r}function ke(t,e,n){return e===n?e:N(e)&&N(n)&&e.template===n.template?(n.inheritNode(e),n):e instanceof Text&&n instanceof Text?(e.textContent!==n.textContent&&(e.textContent=n.textContent),e):(q(t,n,e),n)}function Me(t){let e=new Map;for(let[n,o]of t.entries()){let r=_(o,n);e.set(r,o);}return e}function _(t,e){let n=t instanceof Element?t.id:void 0,o=n===""?void 0:n;return o!=null?o:`_$${e}$`}var A=class t{constructor(e,n,o){this.template=e;this.props=n;this.key=o;this.treeMap=new Map;this.mounted=!1;this.nodes=[];this.provides={};this.trackMap=new Map;this.parent=null;}get firstChild(){var e;return (e=this.nodes[0])!=null?e:null}get isConnected(){return this.mounted}addEventListener(){}removeEventListener(){}unmount(){this.trackMap.forEach(e=>{var n,o;(n=e.cleanup)==null||n.call(e),(o=e.lastNodes)==null||o.forEach(r=>{e.isRoot?C(r):r instanceof t&&r.unmount();});}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(e=>C(e)),this.nodes=[],this.mounted=!1;}mount(e,n){var i;if(this.parent=e,this.isConnected)return this.nodes.forEach(s=>T(e,s,n)),this.nodes;let o=this.template.content.cloneNode(!0),r=o.firstChild;return (i=r==null?void 0:r.hasAttribute)!=null&&i.call(r,"_svg_")&&(r.remove(),r==null||r.childNodes.forEach(s=>{o.append(s);})),this.nodes=Array.from(o.childNodes),this.mapNodeTree(e,o),T(e,o,n),this.patchNodes(this.props),this.mounted=!0,this.nodes}mapNodeTree(e,n){let o=1;this.treeMap.set(0,e);let r=i=>{i.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&this.treeMap.set(o++,i);let s=i.firstChild;for(;s;)r(s),s=s.nextSibling;};r(n);}patchNodes(e){for(let n in e){let o=Number(n),r=this.treeMap.get(o);if(r){let i=this.props[n];this.patchNode(n,r,i,o===0);}}this.props=e;}getNodeTrack(e,n,o){var i;let r=this.trackMap.get(e);return r||(r={cleanup:()=>{}},n&&(r.lastNodes=new Map),o&&(r.isRoot=!0),this.trackMap.set(e,r)),(i=r.cleanup)==null||i.call(r),r}inheritNode(e){this.mounted=e.mounted,this.nodes=e.nodes,this.trackMap=e.trackMap,this.treeMap=e.treeMap;let n=this.props;this.props=e.props,this.patchNodes(n);}patchNode(e,n,o,r){for(let i in o)if(i==="children"&&o.children)if(B(o.children))o.children.forEach((s,a)=>{var w;if(!s)return;let[f,c]=B(s)?s:[s,null],l=se(c)?null:(w=this.treeMap.get(c))!=null?w:null,u=`${e}:${i}:${a}`,p=this.getNodeTrack(u,!0,r);pe(p,n,f,l);});else {let s=`${e}:${i}:0`,a=this.getNodeTrack(s,!0,r);pe(a,n,o.children,null);}else if(i==="ref")h(o[i])?o[i].value=n:g(o[i])&&o[i](n);else if(b(i,"on")){let s=i.slice(2).toLocaleLowerCase(),a=this.getNodeTrack(`${e}:${i}`),f=o[i];a.cleanup=v(n,s,f);}else if(!b(i,"update:")){let s=this.getNodeTrack(`${e}:${i}`),a=o[i],f=h(a)?a:E(a),c=S(()=>{f.value=h(a)?a.value:a,Ae(s,n,i,f.value);}),l,u=`update:${i}`;o[u]&&(l=ue(n,p=>{o[u](p);})),s.cleanup=()=>{c&&c(),l&&l();};}}};function Ae(t,e,n,o){let r=e;r.setAttribute&&(g(o)?t.cleanup=S(()=>{Q(r,n,o());}):Q(r,n,o));}function pe(t,e,n,o){g(n)?t.cleanup=S(()=>{let r=z(n()).map(Z);t.lastNodes=le(e,t.lastNodes,r,o);}):z(n).forEach((r,i)=>{let s=Z(r);t.lastNodes.set(String(i),s),T(e,s,o);});}function we(t){var e;$("onMounted"),(e=y.ref)==null||e.addHook("mounted",t);}function je(t){var e;$("onDestroy"),(e=y.ref)==null||e.addHook("destroy",t);}function $(t){if(!y.ref)throw new Error(`"${t}" can only be called within the component function body
2
- and cannot be used in asynchronous or deferred calls.`)}function Oe(t,e){var n;$("useProvide"),(n=y.ref)==null||n.setContext(t,e);}function Le(t,e){var n;return $("useInject"),((n=y.ref)==null?void 0:n.getContext(t))||e}function Pe(){let t=null;return new Proxy({},{get(e,n){return n==="__is_ref"?!0:t},set(e,n,o){return t=o,!0}})}var Bt="0.0.6-beta.4";function Qt(t=[]){return t.reduce((e,n,o)=>(e[o+1]={template:n},e),{})}function Re(t){return Object.entries(t).map(([e,n])=>`${e}=${JSON.stringify(n)}`).join(" ")}function fe(t,e){if(g(t))return t(e);let n={},o={};return ie(t)&&Object.entries(t).forEach(([r,i])=>{let s=e[r];s&&(Object.keys(s).forEach(a=>{b(a,"on")&&g(s[a])&&delete s[a];}),s.children&&(s.children.forEach(([a,f])=>{n[f]=[...n[f]||[],a];}),delete s.children)),o[r]={template:i.template,prop:s};}),Object.entries(o).map(([r,{template:i,prop:s}])=>{let a=i;return s&&(a+=` ${Re(s)}`),n[r]&&(a+=n[r].map(f=>fe(f,s)).join("")),a}).join("")}function Yt(t,e){return fe(t,e)}function en(t,e){e.innerHTML="",t.mount(e);}
1
+ var de=Object.defineProperty;var te=Object.getOwnPropertySymbols;var me=Object.prototype.hasOwnProperty,he=Object.prototype.propertyIsEnumerable;var ne=(t,e,n)=>e in t?de(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,$=(t,e)=>{for(var n in e||(e={}))me.call(e,n)&&ne(t,n,e[n]);if(te)for(var n of te(e))he.call(e,n)&&ne(t,n,e[n]);return t};var H=t=>typeof t=="function";var x=null,w=null,K=new Set,J=new WeakMap,G=new Set;function j(t,e){let n=J.get(t);n||(n=new Map,J.set(t,n));let o=n.get(e);o||(o=new Set,n.set(e,o)),x&&o.add(x),w&&K.add(w);}function I(t,e){K.size>0&&K.forEach(r=>r.run());let n=J.get(t);if(!n)return;let o=n.get(e);o&&o.forEach(r=>G.has(r)&&r());}var O=class{constructor(e){this._value=e;}valueOf(){return j(this,"value"),this._value}toString(){return j(this,"value"),String(this._value)}toJSON(){return this._value}get value(){return j(this,"value"),this._value}set value(e){this._value!==e&&(this._value=e,I(this,"value"));}peek(){return this._value}update(){I(this,"value");}};function S(t){return m(t)?t:new O(t)}function m(t){return t instanceof O}var L=class{constructor(e){this.fn=e;this._deps=new Set;let n=w;w=this,this._value=this.fn(),w=n;}peek(){return this._value}run(){let e=this.fn();e!==this._value&&(this._value=e,this._deps.forEach(n=>n()));}get value(){return x&&this._deps.add(x),j(this,"_value"),this._value}};function X(t){return new L(t)}function ye(t){return t instanceof L}function C(t){function e(){let n=x;x=e,t(),x=n;}return G.add(e),e(),()=>{G.delete(e),x=null;}}function oe(t,e){return Array.isArray(e)?e.includes(t):H(e)?e(t):!1}function P(t,e){return Object.entries(t).reduce((o,[r,i])=>(o[r]=oe(r,e)||m(i)?i:S(i),o),{})}function ve(t,e){return t?m(t)?t.peek():Object.entries(t).reduce((n,[o,r])=>(oe(o,e)?n[o]=r:n[o]=m(r)?r.peek():r,n),{}):{}}var re=Symbol("reactive");function V(t){return t&&t[re]===!0}function Ne(t){return V(t)?Object.assign({},t):t}function D(t){if(V(t))return t;let e=P(t),n={get(o,r,i){if(r===re)return !0;j(o,r);let s=Reflect.get(o,r,i);return m(s)?s.value:s},set(o,r,i,s){let a=Reflect.get(o,r,s);return m(a)&&(a=a.value),m(i)&&(i=i.value),a!==i&&(Reflect.set(o,r,S(i),s),I(o,r)),!0}};return new Proxy(e,n)}var R=0,W=new Map;function be(t){let{state:e,getters:n,actions:o}=t,r=$({},e!=null?e:{}),i=D(e!=null?e:{}),s=[],a=[],u=$({state:i},{patch$(c){Object.assign(i,c),s.forEach(l=>l(i)),a.forEach(l=>l(i));},subscribe$(c){s.push(c);},unsubscribe$(c){let l=s.indexOf(c);l!==-1&&s.splice(l,1);},onAction$(c){a.push(c);},reset$(){Object.assign(i,r);}});for(let c in n){let l=n[c];l&&(u[c]=X(l.bind(i,i)));}for(let c in o){let l=o[c];l&&(u[c]=l.bind(i));}return W.set(R,u),++R,u}function Te(t){return function(){return W.has(R)?W.get(R):be(t)}}function z(t){return Array.isArray(t)?t.flat():[t]}function N(t,e){return t.indexOf(e)===0}var ie=t=>t!==null&&typeof t=="object";var B=Array.isArray;function se(t){return t==null}var h=t=>typeof t=="function";function U(t){return t===!1||t===null||t===void 0||t===""}var ae=t=>t.replaceAll(/[A-Z]+/g,(e,n)=>`${n>0?"-":""}${e.toLocaleLowerCase()}`);var T=class T{constructor(e,n,o){this.template=e;this.props=n;this.key=o;this.proxyProps={};this.context={};this.emitter=new Set;this.mounted=!1;this.rootNode=null;this.hooks={mounted:new Set,destroy:new Set};this.trackMap=new Map;this.proxyProps=P(n,r=>N(r,"on")||N(r,"update:"));}addEventListener(){}removeEventListener(){}get firstChild(){var e,n;return (n=(e=this.rootNode)==null?void 0:e.firstChild)!=null?n:null}get isConnected(){var e,n;return (n=(e=this.rootNode)==null?void 0:e.isConnected)!=null?n:!1}addHook(e,n){var o;(o=this.hooks[e])==null||o.add(n);}getContext(e){return T.context[e]}setContext(e,n){T.context[e]=n;}inheritNode(e){this.context=e.context,this.hooks=e.hooks,Object.assign(this.proxyProps,e.proxyProps),this.rootNode=e.rootNode,this.trackMap=e.trackMap;let n=this.props;this.props=e.props,this.patchProps(n);}unmount(){var e;this.hooks.destroy.forEach(n=>n()),Object.values(this.hooks).forEach(n=>n.clear()),(e=this.rootNode)==null||e.unmount(),this.rootNode=null,this.proxyProps={},this.mounted=!1,this.emitter.forEach(n=>n()),T.context={};}mount(e,n){var r,i,s,a;if(!h(this.template))throw new Error("Template must be a function");if(this.isConnected)return (i=(r=this.rootNode)==null?void 0:r.mount(e,n))!=null?i:[];T.ref=this,this.rootNode=this.template(this.proxyProps),T.ref=null,this.mounted=!0;let o=(a=(s=this.rootNode)==null?void 0:s.mount(e,n))!=null?a:[];return this.hooks.mounted.forEach(p=>p()),this.patchProps(this.props),o}getNodeTrack(e,n){let o=this.trackMap.get(e);return o||(o={cleanup:()=>{}},this.trackMap.set(e,o)),n||o.cleanup(),o}patchProps(e){var n,o,r,i,s;for(let[a,p]of Object.entries(e))if(N(a,"on")&&((n=this.rootNode)!=null&&n.nodes)){let u=a.slice(2).toLowerCase(),c=p,l=y(this.rootNode.nodes[0],u,c);this.emitter.add(l);}else if(a==="ref")m(p)?e[a].value=(o=this.rootNode)==null?void 0:o.nodes[0]:h(p)&&e[a]((r=this.rootNode)==null?void 0:r.nodes[0]);else if(N(a,"update:"))e[a]=m(p)?p.value:p;else {let u=(s=(i=this.proxyProps)[a])!=null?s:i[a]=S(p),c=this.getNodeTrack(a);c.cleanup=C(()=>{u.value=p;});}this.props=e;}};T.ref=null,T.context={};var g=T;function xe(t,e,n){return h(t)?new g(t,e,n):new M(t,e,n)}function v(t){return t instanceof g||t instanceof M}function Ee(t){let e=document.createElement("template");return e.innerHTML=t,e}function Se(t){return t.children}function Z(t){if(v(t)||t instanceof Node)return t;let e=U(t)?"":String(t);return document.createTextNode(e)}function b(t,e,n=null){let o=v(n)?n.firstChild:n;v(e)?e.mount(t,o):o?o.before(e):t.append(e);}function k(t){v(t)?t.unmount():t.parentNode&&t.remove();}function q(t,e,n){b(t,e,n),k(n);}function Q(t,e,n){if(e==="class"){typeof n=="string"?t.className=n:Array.isArray(n)?t.className=n.join(" "):n&&typeof n=="object"&&(t.className=Object.entries(n).reduce((o,[r,i])=>o+(i?` ${r}`:""),"").trim());return}if(e==="style"){if(typeof n=="string")t.style.cssText=n;else if(n&&typeof n=="object"){let o=n;Object.keys(o).forEach(r=>{t.style.setProperty(ae(r),String(o[r]));});}return}U(n)?t.removeAttribute(e):n===!0?t.setAttribute(e,""):t.setAttribute(e,String(n));}function ue(t,e){if(t instanceof HTMLInputElement){if(t.type==="checkbox")return y(t,"change",()=>{e(!!t.checked);});if(t.type==="date")return y(t,"change",()=>{e(t.value?t.value:"");});if(t.type==="file")return y(t,"change",()=>{t.files&&e(t.files);});if(t.type==="number")return y(t,"input",()=>{let n=Number.parseFloat(t.value);e(Number.isNaN(n)?"":String(n));});if(t.type==="radio")return y(t,"change",()=>{e(t.checked?t.value:"");});if(t.type==="text")return y(t,"input",()=>{e(t.value);})}if(t instanceof HTMLSelectElement)return y(t,"change",()=>{e(t.value);});if(t instanceof HTMLTextAreaElement)return y(t,"input",()=>{e(t.value);})}var ce=Promise.resolve();function Ce(t){return t?ce.then(t):ce}function y(t,e,n){return t.addEventListener(e,n),()=>t.removeEventListener(e,n)}function le(t,e,n,o){let r=new Map,i=e.values(),s=t.childNodes.length;if(e.size>0&&n.length===0){if(s===e.size+(o?1:0)){let u=t;u.innerHTML="",o&&b(t,o);}else {let u=document.createRange(),c=i.next().value,l=v(c)?c.firstChild:c;u.setStartBefore(l),o?u.setEndBefore(o):u.setEndAfter(t),u.deleteContents();}return e.forEach(u=>{v(u)&&u.unmount();}),r}let a=[],p=Me(n);for(let[u,c]of n.entries()){let l=i.next().value,E=_(l,u);for(;l&&!p.has(E);)k(l),e.delete(E),l=i.next().value,E=_(l,u);let A=_(c,u),Y=e.get(A);if(Y&&(c=ke(t,Y,c)),l)if(l){let ee=document.createComment("");b(t,ee,l),a.push([ee,c]);}else b(t,c,o);else b(t,c,o);r.set(A,c);}return a.forEach(([u,c])=>q(t,c,u)),e.forEach((u,c)=>{u.isConnected&&!r.has(c)&&k(u);}),r}function ke(t,e,n){return e===n?e:v(e)&&v(n)&&e.template===n.template?(n.inheritNode(e),n):e instanceof Text&&n instanceof Text?(e.textContent!==n.textContent&&(e.textContent=n.textContent),e):(q(t,n,e),n)}function Me(t){let e=new Map;for(let[n,o]of t.entries()){let r=_(o,n);e.set(r,o);}return e}function _(t,e){let n=t instanceof Element?t.id:void 0,o=n===""?void 0:n;return o!=null?o:`_$${e}$`}var M=class t{constructor(e,n,o){this.template=e;this.props=n;this.key=o;this.treeMap=new Map;this.mounted=!1;this.nodes=[];this.provides={};this.trackMap=new Map;this.parent=null;}get firstChild(){var e;return (e=this.nodes[0])!=null?e:null}get isConnected(){return this.mounted}addEventListener(){}removeEventListener(){}unmount(){this.trackMap.forEach(e=>{var n,o;(n=e.cleanup)==null||n.call(e),(o=e.lastNodes)==null||o.forEach(r=>{e.isRoot?k(r):r instanceof t&&r.unmount();});}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(e=>k(e)),this.nodes=[],this.mounted=!1;}mount(e,n){var i;if(this.parent=e,this.isConnected)return this.nodes.forEach(s=>b(e,s,n)),this.nodes;let o=this.template.content.cloneNode(!0),r=o.firstChild;return (i=r==null?void 0:r.hasAttribute)!=null&&i.call(r,"_svg_")&&(r.remove(),r==null||r.childNodes.forEach(s=>{o.append(s);})),this.nodes=Array.from(o.childNodes),this.mapNodeTree(e,o),b(e,o,n),this.patchNodes(this.props),this.mounted=!0,this.nodes}mapNodeTree(e,n){let o=1;this.treeMap.set(0,e);let r=i=>{i.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&this.treeMap.set(o++,i);let s=i.firstChild;for(;s;)r(s),s=s.nextSibling;};r(n);}patchNodes(e){for(let n in e){let o=Number(n),r=this.treeMap.get(o);if(r){let i=this.props[n];this.patchNode(n,r,i,o===0);}}this.props=e;}getNodeTrack(e,n,o){var i;let r=this.trackMap.get(e);return r||(r={cleanup:()=>{}},n&&(r.lastNodes=new Map),o&&(r.isRoot=!0),this.trackMap.set(e,r)),(i=r.cleanup)==null||i.call(r),r}inheritNode(e){this.mounted=e.mounted,this.nodes=e.nodes,this.trackMap=e.trackMap,this.treeMap=e.treeMap;let n=this.props;this.props=e.props,this.patchNodes(n);}patchNode(e,n,o,r){for(let i in o)if(i==="children"&&o.children)if(B(o.children))o.children.forEach((s,a)=>{var A;if(!s)return;let[p,u]=B(s)?s:[s,null],c=se(u)?null:(A=this.treeMap.get(u))!=null?A:null,l=`${e}:${i}:${a}`,E=this.getNodeTrack(l,!0,r);pe(E,n,p,c);});else {let s=`${e}:${i}:0`,a=this.getNodeTrack(s,!0,r);pe(a,n,o.children,null);}else if(i==="ref")m(o[i])?o[i].value=n:h(o[i])&&o[i](n);else if(N(i,"on")){let s=i.slice(2).toLocaleLowerCase(),a=this.getNodeTrack(`${e}:${i}`),p=o[i];a.cleanup=y(n,s,p);}else if(!N(i,"update:")){let s=this.getNodeTrack(`${e}:${i}`),a=o[i],p=m(a)?a:S(a),u=C(()=>{p.value=m(a)?a.value:a,Ae(s,n,i,p.value);}),c,l=`update:${i}`;o[l]&&(c=ue(n,E=>{o[l](E);})),s.cleanup=()=>{u&&u(),c&&c();};}}};function Ae(t,e,n,o){let r=e;r.setAttribute&&(h(o)?t.cleanup=C(()=>{Q(r,n,o());}):Q(r,n,o));}function pe(t,e,n,o){h(n)?t.cleanup=C(()=>{let r=z(n()).map(Z);t.lastNodes=le(e,t.lastNodes,r,o);}):z(n).forEach((r,i)=>{let s=Z(r);t.lastNodes.set(String(i),s),b(e,s,o);});}function we(t){var e;F("onMounted"),(e=g.ref)==null||e.addHook("mounted",t);}function je(t){var e;F("onDestroy"),(e=g.ref)==null||e.addHook("destroy",t);}function F(t){if(!g.ref)throw new Error(`"${t}" can only be called within the component function body
2
+ and cannot be used in asynchronous or deferred calls.`)}function Oe(t,e){var n;F("useProvide"),(n=g.ref)==null||n.setContext(t,e);}function Le(t,e){var n;return F("useInject"),((n=g.ref)==null?void 0:n.getContext(t))||e}function Pe(){let t=null;return new Proxy({},{get(e,n){return n==="__is_ref"?!0:t},set(e,n,o){return t=o,!0}})}var Bt="0.0.6-beta.6";function Qt(t=[]){return t.reduce((e,n,o)=>(e[o+1]={template:n},e),{})}function Re(t){return Object.entries(t).map(([e,n])=>`${e}=${JSON.stringify(n)}`).join(" ")}function fe(t,e){if(h(t))return t(e);let n={},o={};return ie(t)&&Object.entries(t).forEach(([r,i])=>{let s=e[r];s&&(Object.keys(s).forEach(a=>{N(a,"on")&&h(s[a])&&delete s[a];}),s.children&&(s.children.forEach(([a,p])=>{n[p]=[...n[p]||[],a];}),delete s.children)),o[r]={template:i.template,prop:s};}),Object.entries(o).map(([r,{template:i,prop:s}])=>{let a=i;return s&&(a+=` ${Re(s)}`),n[r]&&(a+=n[r].map(p=>fe(p,s)).join("")),a}).join("")}function Yt(t,e){return fe(t,e)}function en(t,e){e.innerHTML="",t.mount(e);}
3
3
 
4
- export { y as ComponentNode, Se as Fragment, A as TemplateNode, Bt as __essor_version, Te as createStore, xe as h, en as hydrate, ye as isComputed, N as isJsxElement, V as isReactive, h as isSignal, Ce as nextTick, je as onDestroy, we as onMount, D as reactive, Yt as renderToString, P as signalObject, fe as ssr, Qt as ssrtmpl, Ee as template, Ne as unReactive, ve as unSignal, I as useComputed, S as useEffect, Le as useInject, Oe as useProvide, Pe as useRef, E as useSignal };
4
+ export { g as ComponentNode, Se as Fragment, M as TemplateNode, Bt as __essor_version, Te as createStore, xe as h, ye as isComputed, v as isJsxElement, V as isReactive, m as isSignal, Ce as nextTick, je as onDestroy, we as onMount, D as reactive, Yt as renderToString, P as signalObject, en as ssgRender, fe as ssr, Qt as ssrtmpl, Ee as template, Ne as unReactive, ve as unSignal, X as useComputed, C as useEffect, Le as useInject, Oe as useProvide, Pe as useRef, S as useSignal };
5
5
  //# sourceMappingURL=out.js.map
6
6
  //# sourceMappingURL=essor.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../shared/src/is.ts","../src/signal/signal.ts","../src/signal/store.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/template/component-node.ts","../src/template/template.ts","../src/template/utils.ts","../src/template/patch.ts","../src/template/template-node.ts","../src/template/hooks.ts","../src/version.ts","../src/server/index.ts"],"names":["isArray","isFunction","val","activeEffect","activeComputed","computedSet","targetMap","EffectDeps","track","target","key","depsMap","dep","trigger","computedSignal","effect","Signal","value","newValue","useSignal","isSignal","Computed","fn","prev","useComputed","isComputed","useEffect","effectFn","shouldExclude","exclude","signalObject","initialValues","acc","unSignal","signal","REACTIVE_MARKER","isReactive","obj","unReactive","copy","reactive","initialValue","signalObj","handler","receiver","reactiveProxy","_id","StoreMap","createOptionsStore","options","state","getters","actions","initState","__spreadValues","reactiveState","subscriptions","actionCallbacks","default_actions","payload","callback","index","gettersStates","actionStates","getter","action","_","createStore","coerceArray","data","noop","startsWith","str","searchString","isObject","isNil","x","isFalsy","kebabCase","string","match","offset","_ComponentNode","template","props","_a","_b","hook","cb","context","node","set","emitter","parent","before","_c","_d","mountedNode","trackKey","suppressCleanupCall","_e","prop","event","listener","cleanup","addEventListener","ComponentNode","h","TemplateNode","isJsxElement","html","Fragment","coerceNode","text","insertChild","child","beforeNode","removeChild","replaceChild","setAttribute","element","attr","binNode","setter","p","nextTick","eventName","patchChildren","childrenMap","nextChildren","result","children","parentChildNodesLength","parentElement","range","start","replaces","nextChildrenMap","mapKeys","i","currChild","currKey","getKey","origChild","patch","placeholder","next","id","_TemplateNode","cloneNode","firstChild","tree","walk","trackLastNodes","isRoot","item","path","patchChild","triggerValue","patchAttribute","cleanupBind","updateKey","nextNodes","newNode","onMount","throwIfOutsideComponent","onDestroy","useProvide","useInject","defaultValue","useRef","refValue","__essor_version","ssrtmpl","templates","jsonToAttrs","json","ssr","newTemplate","tmpl","propKey","idx","renderToString","component","hydrate","root"],"mappings":"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","sourcesContent":["import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\n\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\nexport function isPrimitive(s: any): s is string | number {\n return (\n typeof s === 'string' || typeof s === 'number' || s instanceof String || s instanceof Number\n );\n}\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n","import { isFunction } from '../../../shared/src';\n\ntype EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function useSignal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n track(this, '_value');\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n }\n }\n\n get value(): T {\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function useComputed<T>(fn: () => T) {\n return new Computed(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function useEffect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n effectFn();\n\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null;\n };\n}\n\nfunction shouldExclude(key: string, exclude?: ((key: string) => boolean) | string[]): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]> | T[K];\n};\n/**\n * Creates a SignalObject from the given initialValues, excluding specified keys.\n *\n * @param {T extends Object} initialValues - The initial values for the SignalObject.\n * @param {(key: string) => boolean | string[]} exclude - A function that determines which keys to exclude from the SignalObject.\n * @return {SignalObject<T>} The created SignalObject.\n */\nexport function signalObject<T extends object>(\n initialValues: T,\n exclude?: ((key: string) => boolean) | string[],\n): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = shouldExclude(key, exclude) || isSignal(value) ? value : useSignal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\n/**\n * Returns the current value of a signal, signal object, or plain object, excluding specified keys.\n *\n * @param {SignalObject<T> | T | Signal<T>} signal - The signal, signal object, or plain object to unwrap.\n * @param {(key: string) => boolean | string[]} [exclude] - A function that determines which keys to exclude from the unwrapped object.\n * @return {T} The unwrapped value of the signal, signal object, or plain object.\n */\nexport function unSignal<T>(\n signal: SignalObject<T> | T | Signal<T>,\n exclude?: ((key: string) => boolean) | string[],\n): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n if (shouldExclude(key, exclude)) {\n acc[key] = value;\n } else {\n acc[key] = isSignal(value) ? value.peek() : value;\n }\n return acc;\n }, {} as T);\n}\n\nconst REACTIVE_MARKER = Symbol('reactive');\n\nexport function isReactive(obj) {\n return obj && obj[REACTIVE_MARKER] === true;\n}\n\nexport function unReactive(obj) {\n if (!isReactive(obj)) {\n return obj;\n }\n\n const copy = Object.assign({}, obj);\n delete copy[REACTIVE_MARKER];\n return copy;\n}\nexport function reactive(initialValue) {\n if (isReactive(initialValue)) {\n return initialValue;\n }\n const signalObj = signalObject(initialValue);\n\n const handler = {\n get(target, key, receiver) {\n track(target, key);\n const value = Reflect.get(target, key, receiver);\n return isSignal(value) ? value.value : value;\n },\n set(target, key, value, receiver) {\n const oldValue = Reflect.get(target, key, receiver);\n if (oldValue !== value) {\n Reflect.set(target, key, useSignal(value), receiver);\n trigger(target, key);\n }\n return true;\n },\n };\n\n const reactiveProxy = new Proxy(signalObj, handler);\n reactiveProxy[REACTIVE_MARKER] = true;\n\n return reactiveProxy;\n}\n","import { reactive, useComputed } from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\nexport interface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<\n Record<string, any>,\n Record<string, any>,\n Record<string, any>\n >;\n\n const initState = { ...(state ?? {}) };\n const reactiveState = reactive(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(reactiveState, payload);\n subscriptions.forEach(callback => callback(reactiveState));\n actionCallbacks.forEach(callback => callback(reactiveState));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n Object.assign(reactiveState, initState);\n },\n };\n const gettersStates: Record<string | symbol, any> = {};\n const actionStates: Record<string | symbol, any> = {};\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n gettersStates[key] = useComputed(() => {\n return getter.call(reactiveState, reactiveState);\n });\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n actionStates[key] = action.bind(reactiveState);\n }\n }\n\n StoreMap.set(_id, reactiveState);\n ++_id;\n\n return new Proxy(\n {},\n {\n get(_, key) {\n if (key === 'state') {\n return reactiveState;\n }\n if (key in gettersStates) {\n return gettersStates[key].value;\n }\n if (key in actionStates) {\n return actionStates[key];\n }\n if (key in default_actions) {\n return default_actions[key];\n }\n return reactiveState[key];\n },\n },\n );\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? ReturnType<S[K]> : S[K];\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<S & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions & { state: S } {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","export const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport function hasChanged(value, oldValue) {\n return !Object.is(value, oldValue);\n}\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n return str.indexOf(searchString) === 0;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { isFunction, startsWith } from 'essor-shared';\nimport { signalObject } from '../signal';\nimport { type Signal, useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, any>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(\n props,\n key => startsWith(key, 'on') || startsWith(key, 'update:'),\n );\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: Record<string, Signal<any>> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n // patch props\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(this.proxyProps);\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, any>) {\n for (const [key, prop] of Object.entries(props)) {\n if (startsWith(key, 'on') && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key === 'ref') {\n if (isSignal(prop)) {\n (props[key] as any).value = this.rootNode?.nodes[0];\n } else if (isFunction(prop)) {\n (props[key] as Function)(this.rootNode?.nodes[0]);\n }\n } else if (startsWith(key, 'update:')) {\n props[key] = isSignal(prop) ? prop.value : prop;\n } else {\n const newValue = (this.proxyProps[key] ??= useSignal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = useEffect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFunction } from 'essor-shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, any>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFalsy, kebabCase } from 'essor-shared';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { coerceArray, isArray, isFunction, isNil, startsWith } from 'essor-shared';\nimport { useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach((item, index) => {\n if (!item) {\n return;\n }\n const [child, path] = isArray(item) ? item : [item, null];\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isSignal(props[attr])) {\n props[attr].value = node;\n } else if (isFunction(props[attr])) {\n (props[attr] as Function)(node);\n }\n }\n // handle events\n else if (startsWith(attr, 'on')) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (!startsWith(attr, 'update:')) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : useSignal(val);\n\n const cleanup = useEffect(() => {\n triggerValue.value = isSignal(val) ? val.value : val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n let cleanupBind;\n const updateKey = `update:${attr}`;\n if (props[updateKey]) {\n cleanupBind = binNode(node, value => {\n props[updateKey](value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = useEffect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = useEffect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n\n/**\n * Initializes a reference with a null value of type T or null.\n *\n * @template T - The type of the reference.\n * @return {T & { __is_ref: boolean; current: T | null }} A proxy object allowing custom get and set behavior.\n */\nexport function useRef<T>(): {\n __is_ref: boolean;\n current: T | null;\n} {\n // 初始化 ref 为 null,类型为 T 或 null\n let refValue: T | null = null;\n\n // 使用 Proxy 创建一个代理对象,以便我们可以自定义 get 和 set 行为\n return new Proxy({} as any, {\n get(target, key: string | symbol) {\n // 特殊属性 __is_ref 始终返回 true\n if (key === '__is_ref') {\n return true;\n }\n // 直接返回 refValue\n return refValue;\n },\n set(target, prop: string | symbol, value: any) {\n if (prop === 'current') {\n refValue = value;\n return true;\n }\n refValue = value;\n return true;\n },\n });\n}\n","export const __essor_version = '0.0.6-beta.4';\n","import { isFunction, isObject, startsWith } from 'essor-shared';\nimport type { EssorNode } from '../../types';\n\ninterface TemplateMap {\n [key: number]: {\n template: string;\n prop?: Record<string, any>;\n };\n}\n\ntype Props = Record<string, any>;\n\nexport function ssrtmpl(templates: string[] = []): TemplateMap {\n return templates.reduce((acc, template, index) => {\n acc[index + 1] = { template };\n return acc;\n }, {} as TemplateMap);\n}\n\nfunction jsonToAttrs(json: Record<string, any>): string {\n return Object.entries(json)\n .map(([key, value]) => `${key}=${JSON.stringify(value)}`)\n .join(' ');\n}\n\nexport function ssr(\n template: TemplateMap | EssorNode | ((props: Props) => string),\n props: Props,\n): string {\n if (isFunction(template)) {\n return template(props);\n }\n\n const childrenMap: Record<string, EssorNode[]> = {};\n const newTemplate: TemplateMap = {};\n if (isObject(template)) {\n Object.entries(template).forEach(([key, tmpl]) => {\n const prop = props[key];\n if (prop) {\n Object.keys(prop).forEach(propKey => {\n if (startsWith(propKey, 'on') && isFunction(prop[propKey])) {\n delete prop[propKey];\n }\n });\n\n if (prop.children) {\n prop.children.forEach(([child, idx]: [any, number]) => {\n childrenMap[idx] = [...(childrenMap[idx] || []), child];\n });\n delete prop.children;\n }\n }\n\n newTemplate[key] = { template: tmpl.template, prop };\n });\n }\n\n return Object.entries(newTemplate)\n .map(([key, { template: tmpl, prop }]) => {\n let str = tmpl;\n if (prop) {\n str += ` ${jsonToAttrs(prop)}`;\n }\n if (childrenMap[key]) {\n str += childrenMap[key].map(child => ssr(child, prop)).join('');\n }\n\n return str;\n })\n .join('');\n}\n\nexport function renderToString(component: (...args: any[]) => string, props: Props): string {\n return ssr(component, props);\n}\n\nexport function hydrate(\n component: { mount: (root: HTMLElement) => void },\n root: HTMLElement,\n): void {\n root.innerHTML = '';\n component.mount(root);\n}\n"]}
1
+ {"version":3,"sources":["../../shared/src/is.ts","../src/signal/signal.ts","../src/signal/store.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/template/component-node.ts","../src/template/template.ts","../src/template/utils.ts","../src/template/patch.ts","../src/template/template-node.ts","../src/template/hooks.ts","../src/version.ts","../src/server/index.ts"],"names":["isArray","isFunction","val","activeEffect","activeComputed","computedSet","targetMap","EffectDeps","track","target","key","depsMap","dep","trigger","computedSignal","effect","Signal","value","newValue","useSignal","isSignal","Computed","fn","prev","useComputed","isComputed","useEffect","effectFn","shouldExclude","exclude","signalObject","initialValues","acc","unSignal","signal","REACTIVE_MARKER","isReactive","obj","unReactive","reactive","initialValue","signalObj","handler","receiver","oldValue","_id","StoreMap","createOptionsStore","options","state","getters","actions","initState","__spreadValues","reactiveState","subscriptions","actionCallbacks","store","payload","callback","index","getter","action","createStore","coerceArray","data","noop","startsWith","str","searchString","isObject","isNil","x","isFalsy","kebabCase","string","match","offset","_ComponentNode","template","props","_a","_b","hook","cb","context","node","set","emitter","parent","before","_c","_d","mountedNode","trackKey","suppressCleanupCall","_e","prop","event","listener","cleanup","addEventListener","ComponentNode","h","TemplateNode","isJsxElement","html","Fragment","coerceNode","text","insertChild","child","beforeNode","removeChild","replaceChild","setAttribute","element","attr","binNode","setter","p","nextTick","eventName","patchChildren","childrenMap","nextChildren","result","children","parentChildNodesLength","parentElement","range","start","replaces","nextChildrenMap","mapKeys","i","currChild","currKey","getKey","origChild","patch","placeholder","next","id","_TemplateNode","cloneNode","firstChild","tree","walk","trackLastNodes","isRoot","item","path","patchChild","triggerValue","patchAttribute","cleanupBind","updateKey","nextNodes","newNode","onMount","throwIfOutsideComponent","onDestroy","useProvide","useInject","defaultValue","useRef","refValue","__essor_version","ssrtmpl","templates","jsonToAttrs","json","ssr","newTemplate","tmpl","propKey","idx","renderToString","component","ssgRender","root"],"mappings":"qWAQO,IAAMA,GAAU,MAAM,QAgBtB,IAAMC,EAAcC,GAAkC,OAAOA,GAAQ,WCpB5E,IAAIC,EAAgC,KAChCC,EAA2C,KAEzCC,EAAc,IAAI,IAClBC,EAAY,IAAI,QAChBC,EAAa,IAAI,IAEvB,SAASC,EAAMC,EAAQC,EAAK,CAC1B,IAAIC,EAAUL,EAAU,IAAIG,CAAM,EAC7BE,IACHA,EAAU,IAAI,IACdL,EAAU,IAAIG,EAAQE,CAAO,GAE/B,IAAIC,EAAMD,EAAQ,IAAID,CAAG,EACpBE,IACHA,EAAM,IAAI,IACVD,EAAQ,IAAID,EAAKE,CAAG,GAElBT,GAAcS,EAAI,IAAIT,CAAY,EAClCC,GACFC,EAAY,IAAID,CAAc,CAElC,CAEA,SAASS,EAAQJ,EAAQC,EAAK,CACxBL,EAAY,KAAO,GACrBA,EAAY,QAAQS,GAAkBA,EAAe,IAAI,CAAC,EAG5D,IAAMH,EAAUL,EAAU,IAAIG,CAAM,EACpC,GAAI,CAACE,EACH,OAEF,IAAMC,EAAMD,EAAQ,IAAID,CAAG,EACvBE,GACFA,EAAI,QAAQG,GAAUR,EAAW,IAAIQ,CAAM,GAAKA,EAAO,CAAC,CAE5D,CAEO,IAAMC,EAAN,KAAgB,CAGrB,YAAYC,EAAU,CACpB,KAAK,OAASA,CAChB,CAEA,SAAa,CACX,OAAAT,EAAM,KAAM,OAAO,EACZ,KAAK,MACd,CAEA,UAAmB,CACjB,OAAAA,EAAM,KAAM,OAAO,EACZ,OAAO,KAAK,MAAM,CAC3B,CAEA,QAAY,CACV,OAAO,KAAK,MACd,CAEA,IAAI,OAAW,CACb,OAAAA,EAAM,KAAM,OAAO,EACZ,KAAK,MACd,CAEA,IAAI,MAAMU,EAAa,CACjB,KAAK,SAAWA,IAClB,KAAK,OAASA,EACdL,EAAQ,KAAM,OAAO,EAEzB,CAEA,MAAU,CACR,OAAO,KAAK,MACd,CAEA,QAAS,CACPA,EAAQ,KAAM,OAAO,CACvB,CACF,EACO,SAASM,EAAaF,EAAsB,CACjD,OAAIG,EAASH,CAAK,EACTA,EAEF,IAAID,EAAUC,CAAU,CACjC,CAEO,SAASG,EAAYH,EAAgC,CAC1D,OAAOA,aAAiBD,CAC1B,CACO,IAAMK,EAAN,KAAkB,CAIvB,YAA6BC,EAAa,CAAb,QAAAA,EAF7B,KAAQ,MAAuB,IAAI,IAGjC,IAAMC,EAAOnB,EACbA,EAAiB,KACjB,KAAK,OAAS,KAAK,GAAG,EACtBA,EAAiBmB,CACnB,CAEA,MAAU,CACR,OAAO,KAAK,MACd,CAEA,KAAM,CACJ,IAAML,EAAW,KAAK,GAAG,EACrBA,IAAa,KAAK,SACpB,KAAK,OAASA,EACd,KAAK,MAAM,QAAQH,GAAUA,EAAO,CAAC,EAEzC,CAEA,IAAI,OAAW,CACb,OAAIZ,GACF,KAAK,MAAM,IAAIA,CAAY,EAE7BK,EAAM,KAAM,QAAQ,EACb,KAAK,MACd,CACF,EAEO,SAASgB,EAAeF,EAA0B,CACvD,OAAO,IAAID,EAAYC,CAAE,CAC3B,CAEO,SAASG,GAAcR,EAAkC,CAC9D,OAAOA,aAAiBI,CAC1B,CAEO,SAASK,EAAUJ,EAA0B,CAClD,SAASK,GAAW,CAClB,IAAMJ,EAAOpB,EACbA,EAAewB,EACfL,EAAG,EACHnB,EAAeoB,CACjB,CAEA,OAAAhB,EAAW,IAAIoB,CAAQ,EACvBA,EAAS,EAEF,IAAM,CACXpB,EAAW,OAAOoB,CAAQ,EAC1BxB,EAAe,IACjB,CACF,CAEA,SAASyB,GAAclB,EAAamB,EAA0D,CAC5F,OAAO,MAAM,QAAQA,CAAO,EACxBA,EAAQ,SAASnB,CAAG,EACpBT,EAAW4B,CAAO,EAChBA,EAAQnB,CAAG,EACX,EACR,CAYO,SAASoB,EACdC,EACAF,EACiB,CAMjB,OALgB,OAAO,QAAQE,CAAa,EAAE,OAAO,CAACC,EAAK,CAACtB,EAAKO,CAAK,KACpEe,EAAItB,CAAG,EAAIkB,GAAclB,EAAKmB,CAAO,GAAKT,EAASH,CAAK,EAAIA,EAAQE,EAAUF,CAAK,EAC5Ee,GACN,CAAC,CAAoB,CAG1B,CASO,SAASC,GACdC,EACAL,EACG,CACH,OAAKK,EACDd,EAASc,CAAM,EACVA,EAAO,KAAK,EAEd,OAAO,QAAQA,CAAM,EAAE,OAAO,CAACF,EAAK,CAACtB,EAAKO,CAAK,KAChDW,GAAclB,EAAKmB,CAAO,EAC5BG,EAAItB,CAAG,EAAIO,EAEXe,EAAItB,CAAG,EAAIU,EAASH,CAAK,EAAIA,EAAM,KAAK,EAAIA,EAEvCe,GACN,CAAC,CAAM,EAXU,CAAC,CAYvB,CAEA,IAAMG,GAAkB,OAAO,UAAU,EAElC,SAASC,EAAWC,EAAK,CAC9B,OAAOA,GAAOA,EAAIF,EAAe,IAAM,EACzC,CAEO,SAASG,GAAWD,EAAK,CAC9B,OAAKD,EAAWC,CAAG,EAGZ,OAAO,OAAO,CAAC,EAAGA,CAAG,EAFnBA,CAGX,CACO,SAASE,EAA2BC,EAAoB,CAC7D,GAAIJ,EAAWI,CAAY,EACzB,OAAOA,EAGT,IAAMC,EAAYX,EAAaU,CAAY,EAErCE,EAAyC,CAC7C,IAAIjC,EAAQC,EAAKiC,EAAU,CACzB,GAAIjC,IAAQyB,GAAiB,MAAO,GACpC3B,EAAMC,EAAQC,CAAG,EACjB,IAAMO,EAAQ,QAAQ,IAAIR,EAAQC,EAAKiC,CAAQ,EAC/C,OAAOvB,EAASH,CAAK,EAAIA,EAAM,MAAQA,CACzC,EACA,IAAIR,EAAQC,EAAKO,EAAO0B,EAAU,CAChC,IAAIC,EAA8B,QAAQ,IAAInC,EAAQC,EAAKiC,CAAQ,EAQnE,OANIvB,EAASwB,CAAQ,IACnBA,EAAWA,EAAS,OAElBxB,EAASH,CAAK,IAChBA,EAAQA,EAAM,OAEZ2B,IAAa3B,IACf,QAAQ,IAAIR,EAAQC,EAAKS,EAAUF,CAAK,EAAG0B,CAAQ,EACnD9B,EAAQJ,EAAQC,CAAG,GACZ,EAGX,CACF,EAEA,OAAO,IAAI,MAAM+B,EAAWC,CAAO,CACrC,CCzOA,IAAIG,EAAM,EACJC,EAAW,IAAI,IAErB,SAASC,GAA4BC,EAAgC,CACnE,GAAM,CAAE,MAAAC,EAAO,QAAAC,EAAS,QAAAC,CAAQ,EAAIH,EAM9BI,EAAYC,EAAA,GAAMJ,GAAA,KAAAA,EAAS,CAAC,GAC5BK,EAAgBf,EAASU,GAAA,KAAAA,EAAS,CAAC,CAAC,EAEpCM,EAA4B,CAAC,EAC7BC,EAA8B,CAAC,EAwB/BC,EAAQJ,EAAA,CACZ,MAAOC,GAxB6B,CACpC,OAAOI,EAAuB,CAC5B,OAAO,OAAOJ,EAAeI,CAAO,EACpCH,EAAc,QAAQI,GAAYA,EAASL,CAAa,CAAC,EACzDE,EAAgB,QAAQG,GAAYA,EAASL,CAAa,CAAC,CAC7D,EACA,WAAWK,EAAoB,CAC7BJ,EAAc,KAAKI,CAAQ,CAC7B,EACA,aAAaA,EAAoB,CAC/B,IAAMC,EAAQL,EAAc,QAAQI,CAAQ,EACxCC,IAAU,IACZL,EAAc,OAAOK,EAAO,CAAC,CAEjC,EACA,UAAUD,EAAoB,CAC5BH,EAAgB,KAAKG,CAAQ,CAC/B,EACA,QAAS,CACP,OAAO,OAAOL,EAAeF,CAAS,CACxC,CACF,GAOA,QAAW1C,KAAOwC,EAAS,CACzB,IAAMW,EAASX,EAAQxC,CAAG,EACtBmD,IACFJ,EAAM/C,CAAG,EAAIc,EAAYqC,EAAO,KAAKP,EAAeA,CAAa,CAAC,EAEtE,CAEA,QAAW5C,KAAOyC,EAAS,CACzB,IAAMW,EAASX,EAAQzC,CAAG,EACtBoD,IACFL,EAAM/C,CAAG,EAAIoD,EAAO,KAAKR,CAAa,EAE1C,CAEA,OAAAR,EAAS,IAAID,EAAKY,CAAK,EACvB,EAAEZ,EAEKY,CACT,CAMO,SAASM,GACdf,EAKwD,CACxD,OAAO,UAAY,CACjB,OAAIF,EAAS,IAAID,CAAG,EACXC,EAAS,IAAID,CAAG,EAGlBE,GAA4BC,CAAO,CAC5C,CACF,CC7FO,SAASgB,EAAeC,EAAoB,CACjD,OAAO,MAAM,QAAQA,CAAI,EAAKA,EAAK,KAAK,EAAY,CAACA,CAAI,CAC3D,CAIO,IAAMC,GAAO,SAAS,UAWtB,SAASC,EAAWC,EAAKC,EAAc,CAC5C,OAAOD,EAAI,QAAQC,CAAY,IAAM,CACvC,CHvBO,IAAMC,GAAYpE,GACvBA,IAAQ,MAAQ,OAAOA,GAAQ,SAK1B,IAAMF,EAAU,MAAM,QAYtB,SAASuE,GAAMC,EAA+B,CACnD,OAAOA,GAAM,IACf,CAEO,IAAMvE,EAAcC,GAAkC,OAAOA,GAAQ,WAMrE,SAASuE,EAAQD,EAAuC,CAC7D,OAAOA,IAAM,IAASA,IAAM,MAAQA,IAAM,QAAaA,IAAM,EAC/D,CIhCO,IAAME,GAAaC,GACjBA,EAAO,WAAW,UAAW,CAACC,EAAOC,IACnC,GAAGA,EAAS,EAAI,IAAM,EAAE,GAAGD,EAAM,kBAAkB,CAAC,EAC5D,ECOI,IAAME,EAAN,MAAMA,CAAqC,CAChD,YACSC,EACAC,EACAtE,EACP,CAHO,cAAAqE,EACA,WAAAC,EACA,SAAAtE,EAaT,KAAQ,WAA0C,CAAC,EACnD,aAAiD,CAAC,EAClD,aAAU,IAAI,IACd,aAAU,GACV,cAAgC,KAChC,WAAuC,CACrC,QAAS,IAAI,IACb,QAAS,IAAI,GACf,EACA,KAAQ,SAAW,IAAI,IApBrB,KAAK,WAAaoB,EAChBkD,EACAtE,GAAOyD,EAAWzD,EAAK,IAAI,GAAKyD,EAAWzD,EAAK,SAAS,CAC3D,CACF,CACA,kBAAyB,CAAC,CAC1B,qBAA4B,CAAC,CAe7B,IAAI,YAA0B,CArChC,IAAAuE,EAAAC,EAsCI,OAAOA,GAAAD,EAAA,KAAK,WAAL,YAAAA,EAAe,aAAf,KAAAC,EAA6B,IACtC,CAEA,IAAI,aAAuB,CAzC7B,IAAAD,EAAAC,EA0CI,OAAOA,GAAAD,EAAA,KAAK,WAAL,YAAAA,EAAe,cAAf,KAAAC,EAA8B,EACvC,CAEA,QAAQC,EAAYC,EAAsB,CA7C5C,IAAAH,GA8CIA,EAAA,KAAK,MAAME,CAAI,IAAf,MAAAF,EAAkB,IAAIG,EACxB,CAEA,WAAcC,EAAkD,CAC9D,OAAOP,EAAc,QAAQO,CAAO,CACtC,CAEA,WAAcA,EAAmCpE,EAAgB,CAC/D6D,EAAc,QAAQO,CAAO,EAAIpE,CACnC,CAEA,YAAYqE,EAA2B,CACrC,KAAK,QAAUA,EAAK,QACpB,KAAK,MAAQA,EAAK,MAElB,OAAO,OAAO,KAAK,WAAYA,EAAK,UAAU,EAC9C,KAAK,SAAWA,EAAK,SACrB,KAAK,SAAWA,EAAK,SAGrB,IAAMN,EAAQ,KAAK,MACnB,KAAK,MAAQM,EAAK,MAElB,KAAK,WAAWN,CAAK,CACvB,CAEA,SAAgB,CAxElB,IAAAC,EAyEI,KAAK,MAAM,QAAQ,QAAQvC,GAAWA,EAAQ,CAAC,EAC/C,OAAO,OAAO,KAAK,KAAK,EAAE,QAAQ6C,GAAOA,EAAI,MAAM,CAAC,GACpDN,EAAA,KAAK,WAAL,MAAAA,EAAe,UACf,KAAK,SAAW,KAChB,KAAK,WAAa,CAAC,EACnB,KAAK,QAAU,GACf,KAAK,QAAQ,QAAQO,GAAWA,EAAQ,CAAC,EACzCV,EAAc,QAAU,CAAC,CAC3B,CAEA,MAAMW,EAAcC,EAA8B,CAnFpD,IAAAT,EAAAC,EAAAS,EAAAC,EAoFI,GAAI,CAAC3F,EAAW,KAAK,QAAQ,EAC3B,MAAM,IAAI,MAAM,6BAA6B,EAE/C,GAAI,KAAK,YACP,OAAOiF,GAAAD,EAAA,KAAK,WAAL,YAAAA,EAAe,MAAMQ,EAAQC,KAA7B,KAAAR,EAAwC,CAAC,EAGlDJ,EAAc,IAAM,KACpB,KAAK,SAAW,KAAK,SAAS,KAAK,UAAU,EAC7CA,EAAc,IAAM,KACpB,KAAK,QAAU,GACf,IAAMe,GAAcD,GAAAD,EAAA,KAAK,WAAL,YAAAA,EAAe,MAAMF,EAAQC,KAA7B,KAAAE,EAAwC,CAAC,EAC7D,YAAK,MAAM,QAAQ,QAAQlD,GAAWA,EAAQ,CAAC,EAC/C,KAAK,WAAW,KAAK,KAAK,EAEnBmD,CACT,CACQ,aAAaC,EAAkBC,EAA0C,CAC/E,IAAIvF,EAAQ,KAAK,SAAS,IAAIsF,CAAQ,EACtC,OAAKtF,IACHA,EAAQ,CAAE,QAAS,IAAM,CAAC,CAAE,EAC5B,KAAK,SAAS,IAAIsF,EAAUtF,CAAK,GAE9BuF,GACHvF,EAAM,QAAQ,EAETA,CACT,CAEA,WAAWwE,EAA4B,CAjHzC,IAAAC,EAAAC,EAAAS,EAAAC,EAAAI,EAkHI,OAAW,CAACtF,EAAKuF,CAAI,IAAK,OAAO,QAAQjB,CAAK,EAC5C,GAAIb,EAAWzD,EAAK,IAAI,KAAKuE,EAAA,KAAK,WAAL,MAAAA,EAAe,OAAO,CACjD,IAAMiB,EAAQxF,EAAI,MAAM,CAAC,EAAE,YAAY,EACjCyF,EAAWF,EACXG,EAAUC,EAAiB,KAAK,SAAS,MAAM,CAAC,EAAGH,EAAOC,CAAQ,EACxE,KAAK,QAAQ,IAAIC,CAAO,CAC1B,SAAW1F,IAAQ,MACbU,EAAS6E,CAAI,EACdjB,EAAMtE,CAAG,EAAU,OAAQwE,EAAA,KAAK,WAAL,YAAAA,EAAe,MAAM,GACxCjF,EAAWgG,CAAI,GACvBjB,EAAMtE,CAAG,GAAeiF,EAAA,KAAK,WAAL,YAAAA,EAAe,MAAM,EAAE,UAEzCxB,EAAWzD,EAAK,SAAS,EAClCsE,EAAMtE,CAAG,EAAIU,EAAS6E,CAAI,EAAIA,EAAK,MAAQA,MACtC,CACL,IAAM/E,GAAY8E,GAAAJ,EAAA,KAAK,YAALlF,KAAA,KAAAsF,EAAAJ,EAAAlF,GAAyBS,EAAU8E,CAAI,EACnDzF,EAAQ,KAAK,aAAaE,CAAG,EACnCF,EAAM,QAAUkB,EAAU,IAAM,CAC9BR,EAAS,MAAQ+E,CACnB,CAAC,CACH,CAEF,KAAK,MAAQjB,CACf,CACF,EAhIaF,EAcJ,IAA4B,KAdxBA,EAeJ,QAAuC,CAAC,EAf1C,IAAMwB,EAANxB,ECLA,SAASyB,GACdxB,EACAC,EACAtE,EACa,CACb,OAAOT,EAAW8E,CAAQ,EACtB,IAAIuB,EAAcvB,EAAUC,EAAOtE,CAAG,EACtC,IAAI8F,EAAazB,EAAUC,EAAOtE,CAAG,CAC3C,CAMO,SAAS+F,EAAanB,EAAkC,CAC7D,OAAOA,aAAgBgB,GAAiBhB,aAAgBkB,CAC1D,CAEO,SAASzB,GAAS2B,EAAmC,CAC1D,IAAM3B,EAAW,SAAS,cAAc,UAAU,EAClD,OAAAA,EAAS,UAAY2B,EACd3B,CACT,CACO,SAAS4B,GAAS3B,EAAkC,CACzD,OAAOA,EAAM,QACf,CC1BO,SAAS4B,EAAW3C,EAAe,CACxC,GAAIwC,EAAaxC,CAAI,GAAKA,aAAgB,KACxC,OAAOA,EAET,IAAM4C,EAAOpC,EAAQR,CAAI,EAAI,GAAK,OAAOA,CAAI,EAC7C,OAAO,SAAS,eAAe4C,CAAI,CACrC,CAEO,SAASC,EACdrB,EACAsB,EACArB,EAAoC,KAC9B,CACN,IAAMsB,EAAaP,EAAaf,CAAM,EAAIA,EAAO,WAAaA,EAC1De,EAAaM,CAAK,EACpBA,EAAM,MAAMtB,EAAQuB,CAAU,EACrBA,EACRA,EAA2B,OAAOD,CAAK,EAEvCtB,EAAuB,OAAOsB,CAAK,CAExC,CAEO,SAASE,EAAYF,EAAiC,CACvDN,EAAaM,CAAK,EACpBA,EAAM,QAAQ,EAECA,EAAM,YAElBA,EAAsB,OAAO,CAGpC,CAEO,SAASG,EACdzB,EACAH,EACAyB,EACM,CAEND,EAAYrB,EAAQH,EAAMyB,CAAK,EAC/BE,EAAYF,CAAK,CACnB,CACO,SAASI,EAAaC,EAAsBC,EAAcpG,EAAsB,CACrF,GAAIoG,IAAS,QAAS,CAChB,OAAOpG,GAAU,SACnBmG,EAAQ,UAAYnG,EACX,MAAM,QAAQA,CAAK,EAC5BmG,EAAQ,UAAYnG,EAAM,KAAK,GAAG,EACzBA,GAAS,OAAOA,GAAU,WACnCmG,EAAQ,UAAY,OAAO,QAAQnG,CAAK,EACrC,OAAO,CAACe,EAAK,CAACtB,EAAKO,CAAK,IAAMe,GAAOf,EAAQ,IAAIP,CAAG,GAAK,IAAK,EAAE,EAChE,KAAK,GAEV,MACF,CAEA,GAAI2G,IAAS,QAAS,CACpB,GAAI,OAAOpG,GAAU,SACnBmG,EAAQ,MAAM,QAAUnG,UACfA,GAAS,OAAOA,GAAU,SAAU,CAC7C,IAAMoB,EAAMpB,EAEZ,OAAO,KAAKoB,CAAG,EAAE,QAAQ3B,GAAO,CAC9B0G,EAAQ,MAAM,YAAY1C,GAAUhE,CAAG,EAAG,OAAO2B,EAAI3B,CAAG,CAAC,CAAC,CAC5D,CAAC,CACH,CACA,MACF,CAEI+D,EAAQxD,CAAK,EACfmG,EAAQ,gBAAgBC,CAAI,EACnBpG,IAAU,GACnBmG,EAAQ,aAAaC,EAAM,EAAE,EAE7BD,EAAQ,aAAaC,EAAM,OAAOpG,CAAK,CAAC,CAE5C,CAEO,SAASqG,GAAQhC,EAAYiC,EAA8B,CAChE,GAAIjC,aAAgB,iBAAkB,CAEpC,GAAIA,EAAK,OAAS,WAChB,OAAOe,EAAiBf,EAAM,SAAU,IAAM,CAC5CiC,EAAO,EAAQjC,EAAK,OAAQ,CAC9B,CAAC,EAIH,GAAIA,EAAK,OAAS,OAChB,OAAOe,EAAiBf,EAAM,SAAU,IAAM,CAC5CiC,EAAOjC,EAAK,MAAQA,EAAK,MAAQ,EAAE,CACrC,CAAC,EAIH,GAAIA,EAAK,OAAS,OAChB,OAAOe,EAAiBf,EAAM,SAAU,IAAM,CACxCA,EAAK,OACPiC,EAAOjC,EAAK,KAAK,CAErB,CAAC,EAIH,GAAIA,EAAK,OAAS,SAChB,OAAOe,EAAiBf,EAAM,QAAS,IAAM,CAC3C,IAAMrE,EAAQ,OAAO,WAAWqE,EAAK,KAAK,EAC1CiC,EAAO,OAAO,MAAMtG,CAAK,EAAI,GAAK,OAAOA,CAAK,CAAC,CACjD,CAAC,EAIH,GAAIqE,EAAK,OAAS,QAChB,OAAOe,EAAiBf,EAAM,SAAU,IAAM,CAC5CiC,EAAOjC,EAAK,QAAUA,EAAK,MAAQ,EAAE,CACvC,CAAC,EAIH,GAAIA,EAAK,OAAS,OAChB,OAAOe,EAAiBf,EAAM,QAAS,IAAM,CAC3CiC,EAAOjC,EAAK,KAAK,CACnB,CAAC,CAEL,CAEA,GAAIA,aAAgB,kBAClB,OAAOe,EAAiBf,EAAM,SAAU,IAAM,CAC5CiC,EAAOjC,EAAK,KAAK,CACnB,CAAC,EAGH,GAAIA,aAAgB,oBAClB,OAAOe,EAAiBf,EAAM,QAAS,IAAM,CAC3CiC,EAAOjC,EAAK,KAAK,CACnB,CAAC,CAEL,CACA,IAAMkC,GAAI,QAAQ,QAAQ,EACnB,SAASC,GAASnG,EAAgC,CACvD,OAAOA,EAAKkG,GAAE,KAAKlG,CAAE,EAAIkG,EAC3B,CAWO,SAASnB,EACdf,EACAoC,EACAhF,EACY,CACZ,OAAA4C,EAAK,iBAAiBoC,EAAWhF,CAAO,EACjC,IAAM4C,EAAK,oBAAoBoC,EAAWhF,CAAO,CAC1D,CC/JO,SAASiF,GACdlC,EACAmC,EACAC,EACAnC,EACsB,CACtB,IAAMoC,EAAS,IAAI,IACbC,EAAWH,EAAY,OAAO,EAC9BI,EAAyBvC,EAAO,WAAW,OAEjD,GAAImC,EAAY,KAAO,GAAKC,EAAa,SAAW,EAAG,CACrD,GAAIG,IAA2BJ,EAAY,MAAQlC,EAAS,EAAI,GAAI,CAClE,IAAMuC,EAAgBxC,EACtBwC,EAAc,UAAY,GACtBvC,GACFoB,EAAYrB,EAAQC,CAAM,CAE9B,KAAO,CACL,IAAMwC,EAAQ,SAAS,YAAY,EAC7BnB,EAAQgB,EAAS,KAAK,EAAE,MACxBI,EAAQ1B,EAAaM,CAAK,EAAIA,EAAM,WAAaA,EACvDmB,EAAM,eAAeC,CAAK,EACtBzC,EACFwC,EAAM,aAAaxC,CAAM,EAEzBwC,EAAM,YAAYzC,CAAM,EAE1ByC,EAAM,eAAe,CACvB,CAEA,OAAAN,EAAY,QAAQtC,GAAQ,CACtBmB,EAAanB,CAAI,GACnBA,EAAK,QAAQ,CAEjB,CAAC,EAEMwC,CACT,CAEA,IAAMM,EAAiC,CAAC,EAClCC,EAAkBC,GAAQT,CAAY,EAE5C,OAAS,CAACU,EAAGxB,CAAK,IAAKc,EAAa,QAAQ,EAAG,CAC7C,IAAIW,EAAYT,EAAS,KAAK,EAAE,MAC5BU,EAAUC,EAAOF,EAAWD,CAAC,EAEjC,KAAOC,GAAa,CAACH,EAAgB,IAAII,CAAO,GAC9CxB,EAAYuB,CAAS,EACrBZ,EAAY,OAAOa,CAAO,EAC1BD,EAAYT,EAAS,KAAK,EAAE,MAC5BU,EAAUC,EAAOF,EAAWD,CAAC,EAG/B,IAAM7H,EAAMgI,EAAO3B,EAAOwB,CAAC,EACrBI,EAAYf,EAAY,IAAIlH,CAAG,EAMrC,GAJIiI,IACF5B,EAAQ6B,GAAMnD,EAAQkD,EAAW5B,CAAK,GAGpCyB,EACF,GAAIA,EAAW,CACb,IAAMK,GAAc,SAAS,cAAc,EAAE,EAC7C/B,EAAYrB,EAAQoD,GAAaL,CAAS,EAC1CJ,EAAS,KAAK,CAACS,GAAa9B,CAAK,CAAC,CACpC,MACED,EAAYrB,EAAQsB,EAAOrB,CAAM,OAGnCoB,EAAYrB,EAAQsB,EAAOrB,CAAM,EAGnCoC,EAAO,IAAIpH,EAAKqG,CAAK,CACvB,CAEA,OAAAqB,EAAS,QAAQ,CAAC,CAACS,EAAa9B,CAAK,IAAMG,EAAazB,EAAQsB,EAAO8B,CAAW,CAAC,EAEnFjB,EAAY,QAAQ,CAACb,EAAOrG,IAAQ,CAC9BqG,EAAM,aAAe,CAACe,EAAO,IAAIpH,CAAG,GACtCuG,EAAYF,CAAK,CAErB,CAAC,EAEMe,CACT,CAEO,SAASc,GAAMnD,EAAcH,EAAewD,EAAwB,CACzE,OAAIxD,IAASwD,EACJxD,EAELmB,EAAanB,CAAI,GAAKmB,EAAaqC,CAAI,GAAKxD,EAAK,WAAawD,EAAK,UACrEA,EAAK,YAAYxD,CAAI,EACdwD,GAELxD,aAAgB,MAAQwD,aAAgB,MACtCxD,EAAK,cAAgBwD,EAAK,cAC5BxD,EAAK,YAAcwD,EAAK,aAEnBxD,IAET4B,EAAazB,EAAQqD,EAAMxD,CAAI,EACxBwD,EACT,CAEO,SAASR,GAAQP,EAA2C,CACjE,IAAMD,EAAS,IAAI,IACnB,OAAW,CAACS,EAAGxB,CAAK,IAAKgB,EAAS,QAAQ,EAAG,CAC3C,IAAMrH,EAAMgI,EAAO3B,EAAOwB,CAAC,EAC3BT,EAAO,IAAIpH,EAAKqG,CAAK,CACvB,CACA,OAAOe,CACT,CAEO,SAASY,EAAOpD,EAAM1B,EAAe,CAC1C,IAAMmF,EAAKzD,aAAgB,QAAUA,EAAK,GAAK,OACzCwC,EAASiB,IAAO,GAAK,OAAYA,EACvC,OAAOjB,GAAA,KAAAA,EAAU,KAAKlE,CAAK,GAC7B,CC5GO,IAAM4C,EAAN,MAAMwC,CAAoC,CAE/C,YACSjE,EACAC,EACAtE,EACP,CAHO,cAAAqE,EACA,WAAAC,EACA,SAAAtE,EAJT,aAAU,IAAI,IAOd,aAAU,GACV,WAAgB,CAAC,EACjB,cAAoC,CAAC,EACrC,cAAW,IAAI,IA8Bf,YAAsB,IAnCnB,CAOH,IAAI,YAA0B,CA3BhC,IAAAuE,EA4BI,OAAOA,EAAA,KAAK,MAAM,CAAC,IAAZ,KAAAA,EAAiB,IAC1B,CAEA,IAAI,aAAuB,CACzB,OAAO,KAAK,OACd,CACA,kBAAyB,CAAC,CAC1B,qBAA4B,CAAC,CAE7B,SAAgB,CACd,KAAK,SAAS,QAAQzE,GAAS,CAtCnC,IAAAyE,EAAAC,GAuCMD,EAAAzE,EAAM,UAAN,MAAAyE,EAAA,KAAAzE,IACA0E,EAAA1E,EAAM,YAAN,MAAA0E,EAAiB,QAAQI,GAAQ,CAC3B9E,EAAM,OACRyG,EAAY3B,CAAI,EACPA,aAAgB0D,GACzB1D,EAAK,QAAQ,CAEjB,EACF,CAAC,EACD,KAAK,SAAS,MAAM,EACpB,KAAK,QAAQ,MAAM,EACnB,KAAK,MAAM,QAAQA,GAAQ2B,EAAY3B,CAAI,CAAC,EAC5C,KAAK,MAAQ,CAAC,EACd,KAAK,QAAU,EACjB,CAGA,MAAMG,EAAcC,EAA8B,CAxDpD,IAAAT,EA0DI,GADA,KAAK,OAASQ,EACV,KAAK,YACP,YAAK,MAAM,QAAQH,GAAQwB,EAAYrB,EAAQH,EAAMI,CAAM,CAAC,EACrD,KAAK,MAGd,IAAMuD,EAAY,KAAK,SAAS,QAAQ,UAAU,EAAI,EAChDC,EAAaD,EAAU,WAE7B,OAAIhE,EAAAiE,GAAA,YAAAA,EAAY,eAAZ,MAAAjE,EAAA,KAAAiE,EAA2B,WAC7BA,EAAW,OAAO,EAClBA,GAAA,MAAAA,EAAY,WAAW,QAAQ5D,GAAQ,CACpC2D,EAAsB,OAAO3D,CAAI,CACpC,IAGF,KAAK,MAAQ,MAAM,KAAK2D,EAAU,UAAU,EAC5C,KAAK,YAAYxD,EAAQwD,CAAS,EAElCnC,EAAYrB,EAAQwD,EAAWvD,CAAM,EAErC,KAAK,WAAW,KAAK,KAAK,EAC1B,KAAK,QAAU,GACR,KAAK,KACd,CAEA,YAAYD,EAAc0D,EAAY,CACpC,IAAIvF,EAAQ,EACZ,KAAK,QAAQ,IAAI,EAAG6B,CAAM,EAC1B,IAAM2D,EAAQ9D,GAAe,CACvBA,EAAK,WAAa,KAAK,wBACzB,KAAK,QAAQ,IAAI1B,IAAS0B,CAAI,EAEhC,IAAIyB,EAAQzB,EAAK,WACjB,KAAOyB,GACLqC,EAAKrC,CAAK,EACVA,EAAQA,EAAM,WAElB,EACAqC,EAAKD,CAAI,CACX,CAEA,WAAWnE,EAAO,CAChB,QAAWtE,KAAOsE,EAAO,CACvB,IAAMpB,EAAQ,OAAOlD,CAAG,EAClB4E,EAAO,KAAK,QAAQ,IAAI1B,CAAK,EACnC,GAAI0B,EAAM,CACR,IAAMrE,EAAQ,KAAK,MAAMP,CAAG,EAC5B,KAAK,UAAUA,EAAK4E,EAAMrE,EAAO2C,IAAU,CAAC,CAC9C,CACF,CACA,KAAK,MAAQoB,CACf,CAEA,aAAac,EAAkBuD,EAA0BC,EAA6B,CA/GxF,IAAArE,EAgHI,IAAIzE,EAAQ,KAAK,SAAS,IAAIsF,CAAQ,EACtC,OAAKtF,IACHA,EAAQ,CAAE,QAAS,IAAM,CAAC,CAAE,EACxB6I,IACF7I,EAAM,UAAY,IAAI,KAEpB8I,IACF9I,EAAM,OAAS,IAEjB,KAAK,SAAS,IAAIsF,EAAUtF,CAAK,IAEnCyE,EAAAzE,EAAM,UAAN,MAAAyE,EAAA,KAAAzE,GACOA,CACT,CAEA,YAAY8E,EAA0B,CACpC,KAAK,QAAUA,EAAK,QACpB,KAAK,MAAQA,EAAK,MAClB,KAAK,SAAWA,EAAK,SACrB,KAAK,QAAUA,EAAK,QAEpB,IAAMN,EAAQ,KAAK,MACnB,KAAK,MAAQM,EAAK,MAClB,KAAK,WAAWN,CAAK,CACvB,CAEA,UAAUtE,EAAK4E,EAAMN,EAAOsE,EAAQ,CAClC,QAAWjC,KAAQrC,EACjB,GAAIqC,IAAS,YAAcrC,EAAM,SAC/B,GAAKhF,EAAQgF,EAAM,QAAQ,EAKzBA,EAAM,SAAS,QAAQ,CAACuE,EAAM3F,IAAU,CAlJlD,IAAAqB,EAmJY,GAAI,CAACsE,EACH,OAEF,GAAM,CAACxC,EAAOyC,CAAI,EAAIxJ,EAAQuJ,CAAI,EAAIA,EAAO,CAACA,EAAM,IAAI,EAClD7D,EAASnB,GAAMiF,CAAI,EAAI,MAAOvE,EAAA,KAAK,QAAQ,IAAIuE,CAAI,IAArB,KAAAvE,EAA0B,KACxDa,EAAW,GAAGpF,CAAG,IAAI2G,CAAI,IAAIzD,CAAK,GAClCpD,EAAQ,KAAK,aAAasF,EAAU,GAAMwD,CAAM,EACtDG,GAAWjJ,EAAO8E,EAAMyB,EAAOrB,CAAM,CACvC,CAAC,MAd2B,CAC5B,IAAMI,EAAW,GAAGpF,CAAG,IAAI2G,CAAI,KACzB7G,EAAQ,KAAK,aAAasF,EAAU,GAAMwD,CAAM,EACtDG,GAAWjJ,EAAO8E,EAAMN,EAAM,SAAU,IAAI,CAC9C,SAYSqC,IAAS,MACdjG,EAAS4D,EAAMqC,CAAI,CAAC,EACtBrC,EAAMqC,CAAI,EAAE,MAAQ/B,EACXrF,EAAW+E,EAAMqC,CAAI,CAAC,GAC9BrC,EAAMqC,CAAI,EAAe/B,CAAI,UAIzBnB,EAAWkD,EAAM,IAAI,EAAG,CAC/B,IAAMK,EAAYL,EAAK,MAAM,CAAC,EAAE,kBAAkB,EAC5C7G,EAAQ,KAAK,aAAa,GAAGE,CAAG,IAAI2G,CAAI,EAAE,EAC1ClB,EAAWnB,EAAMqC,CAAI,EAC3B7G,EAAM,QAAU6F,EAAiBf,EAAMoC,EAAWvB,CAAQ,CAC5D,SAAW,CAAChC,EAAWkD,EAAM,SAAS,EAAG,CACvC,IAAM7G,EAAQ,KAAK,aAAa,GAAGE,CAAG,IAAI2G,CAAI,EAAE,EAC1CnH,EAAM8E,EAAMqC,CAAI,EAChBqC,EAAetI,EAASlB,CAAG,EAAIA,EAAMiB,EAAUjB,CAAG,EAElDkG,EAAU1E,EAAU,IAAM,CAC9BgI,EAAa,MAAQtI,EAASlB,CAAG,EAAIA,EAAI,MAAQA,EACjDyJ,GAAenJ,EAAO8E,EAAM+B,EAAMqC,EAAa,KAAK,CACtD,CAAC,EAEGE,EACEC,EAAY,UAAUxC,CAAI,GAC5BrC,EAAM6E,CAAS,IACjBD,EAActC,GAAQhC,EAAMrE,GAAS,CACnC+D,EAAM6E,CAAS,EAAE5I,CAAK,CACxB,CAAC,GAGHT,EAAM,QAAU,IAAM,CACpB4F,GAAWA,EAAQ,EACnBwD,GAAeA,EAAY,CAC7B,CACF,CAEJ,CACF,EAEA,SAASD,GAAenJ,EAAkB8E,EAAY+B,EAAcpD,EAAqB,CACvF,IAAMmD,EAAU9B,EACX8B,EAAQ,eAGTnH,EAAWgE,CAAI,EACjBzD,EAAM,QAAUkB,EAAU,IAAM,CAC9ByF,EAAaC,EAASC,EAAMpD,EAAK,CAAC,CACpC,CAAC,EAEDkD,EAAaC,EAASC,EAAMpD,CAAI,EAEpC,CAEA,SAASwF,GAAWjJ,EAAkBiF,EAAcsB,EAAgBrB,EAA2B,CACzFzF,EAAW8G,CAAK,EAClBvG,EAAM,QAAUkB,EAAU,IAAM,CAC9B,IAAMoI,EAAY9F,EAAa+C,EAAmB,CAAC,EAAE,IAAIH,CAAU,EACnEpG,EAAM,UAAYmH,GAAclC,EAAQjF,EAAM,UAAYsJ,EAAWpE,CAAM,CAC7E,CAAC,EAED1B,EAAY+C,CAAK,EAAE,QAAQ,CAACzB,EAAM,IAAM,CACtC,IAAMyE,EAAUnD,EAAWtB,CAAI,EAC/B9E,EAAM,UAAW,IAAI,OAAO,CAAC,EAAGuJ,CAAO,EACvCjD,EAAYrB,EAAQsE,EAASrE,CAAM,CACrC,CAAC,CAEL,CC9NO,SAASsE,GAAQ5E,EAAsB,CAF9C,IAAAH,EAGEgF,EAAwB,WAAW,GACnChF,EAAAqB,EAAc,MAAd,MAAArB,EAAmB,QAAQ,UAAWG,EACxC,CAEO,SAAS8E,GAAU9E,EAAsB,CAPhD,IAAAH,EAQEgF,EAAwB,WAAW,GACnChF,EAAAqB,EAAc,MAAd,MAAArB,EAAmB,QAAQ,UAAWG,EACxC,CAEA,SAAS6E,EAAwB9E,EAAc,CAC7C,GAAI,CAACmB,EAAc,IACjB,MAAM,IAAI,MACR,IAAInB,CAAI;AAAA,4DAEV,CAEJ,CAQO,SAASgF,GACdzJ,EACAO,EACA,CA9BF,IAAAgE,EA+BEgF,EAAwB,YAAY,GAEpChF,EAAAqB,EAAc,MAAd,MAAArB,EAAmB,WAAWvE,EAAeO,EAC/C,CACO,SAASmJ,GACd1J,EACA2J,EACA,CAtCF,IAAApF,EAuCE,OAAAgF,EAAwB,WAAW,IAC5BhF,EAAAqB,EAAc,MAAd,YAAArB,EAAmB,WAAWvE,KAAkB2J,CACzD,CAeO,SAASC,IAGd,CAEA,IAAIC,EAAqB,KAGzB,OAAO,IAAI,MAAM,CAAC,EAAU,CAC1B,IAAI9J,EAAQC,EAAsB,CAEhC,OAAIA,IAAQ,WACH,GAGF6J,CACT,EACA,IAAI9J,EAAQwF,EAAuBhF,EAAY,CAC7C,OACEsJ,EAAWtJ,EACJ,EAIX,CACF,CAAC,CACH,CClFO,IAAMuJ,GAAkB,eCYxB,SAASC,GAAQC,EAAsB,CAAC,EAAgB,CAC7D,OAAOA,EAAU,OAAO,CAAC1I,EAAK+C,EAAUnB,KACtC5B,EAAI4B,EAAQ,CAAC,EAAI,CAAE,SAAAmB,CAAS,EACrB/C,GACN,CAAC,CAAgB,CACtB,CAEA,SAAS2I,GAAYC,EAAmC,CACtD,OAAO,OAAO,QAAQA,CAAI,EACvB,IAAI,CAAC,CAAClK,EAAKO,CAAK,IAAM,GAAGP,CAAG,IAAI,KAAK,UAAUO,CAAK,CAAC,EAAE,EACvD,KAAK,GAAG,CACb,CAEO,SAAS4J,GACd9F,EACAC,EACQ,CACR,GAAI/E,EAAW8E,CAAQ,EACrB,OAAOA,EAASC,CAAK,EAGvB,IAAM4C,EAA2C,CAAC,EAC5CkD,EAA2B,CAAC,EAClC,OAAIxG,GAASS,CAAQ,GACnB,OAAO,QAAQA,CAAQ,EAAE,QAAQ,CAAC,CAACrE,EAAKqK,CAAI,IAAM,CAChD,IAAM9E,EAAOjB,EAAMtE,CAAG,EAClBuF,IACF,OAAO,KAAKA,CAAI,EAAE,QAAQ+E,GAAW,CAC/B7G,EAAW6G,EAAS,IAAI,GAAK/K,EAAWgG,EAAK+E,CAAO,CAAC,GACvD,OAAO/E,EAAK+E,CAAO,CAEvB,CAAC,EAEG/E,EAAK,WACPA,EAAK,SAAS,QAAQ,CAAC,CAACc,EAAOkE,CAAG,IAAqB,CACrDrD,EAAYqD,CAAG,EAAI,CAAC,GAAIrD,EAAYqD,CAAG,GAAK,CAAC,EAAIlE,CAAK,CACxD,CAAC,EACD,OAAOd,EAAK,WAIhB6E,EAAYpK,CAAG,EAAI,CAAE,SAAUqK,EAAK,SAAU,KAAA9E,CAAK,CACrD,CAAC,EAGI,OAAO,QAAQ6E,CAAW,EAC9B,IAAI,CAAC,CAACpK,EAAK,CAAE,SAAUqK,EAAM,KAAA9E,CAAK,CAAC,IAAM,CACxC,IAAI7B,EAAM2G,EACV,OAAI9E,IACF7B,GAAO,IAAIuG,GAAY1E,CAAI,CAAC,IAE1B2B,EAAYlH,CAAG,IACjB0D,GAAOwD,EAAYlH,CAAG,EAAE,IAAIqG,GAAS8D,GAAI9D,EAAOd,CAAI,CAAC,EAAE,KAAK,EAAE,GAGzD7B,CACT,CAAC,EACA,KAAK,EAAE,CACZ,CAEO,SAAS8G,GAAeC,EAAuCnG,EAAsB,CAC1F,OAAO6F,GAAIM,EAAWnG,CAAK,CAC7B,CAEO,SAASoG,GACdD,EACAE,EACM,CACNA,EAAK,UAAY,GACjBF,EAAU,MAAME,CAAI,CACtB","sourcesContent":["import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\n\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\nexport function isPrimitive(s: any): s is string | number {\n return (\n typeof s === 'string' || typeof s === 'number' || s instanceof String || s instanceof Number\n );\n}\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n","import { isFunction } from '../../../shared/src';\n\ntype EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function useSignal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n private _deps: Set<EffectFn> = new Set();\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n this._deps.forEach(effect => effect());\n }\n }\n\n get value(): T {\n if (activeEffect) {\n this._deps.add(activeEffect);\n }\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function useComputed<T>(fn: () => T): Computed<T> {\n return new Computed<T>(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function useEffect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n effectFn();\n\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null;\n };\n}\n\nfunction shouldExclude(key: string, exclude?: ((key: string) => boolean) | string[]): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]> | T[K];\n};\n/**\n * Creates a SignalObject from the given initialValues, excluding specified keys.\n *\n * @param {T extends Object} initialValues - The initial values for the SignalObject.\n * @param {(key: string) => boolean | string[]} exclude - A function that determines which keys to exclude from the SignalObject.\n * @return {SignalObject<T>} The created SignalObject.\n */\nexport function signalObject<T extends object>(\n initialValues: T,\n exclude?: ((key: string) => boolean) | string[],\n): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = shouldExclude(key, exclude) || isSignal(value) ? value : useSignal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\n/**\n * Returns the current value of a signal, signal object, or plain object, excluding specified keys.\n *\n * @param {SignalObject<T> | T | Signal<T>} signal - The signal, signal object, or plain object to unwrap.\n * @param {(key: string) => boolean | string[]} [exclude] - A function that determines which keys to exclude from the unwrapped object.\n * @return {T} The unwrapped value of the signal, signal object, or plain object.\n */\nexport function unSignal<T>(\n signal: SignalObject<T> | T | Signal<T>,\n exclude?: ((key: string) => boolean) | string[],\n): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n if (shouldExclude(key, exclude)) {\n acc[key] = value;\n } else {\n acc[key] = isSignal(value) ? value.peek() : value;\n }\n return acc;\n }, {} as T);\n}\n\nconst REACTIVE_MARKER = Symbol('reactive');\n\nexport function isReactive(obj) {\n return obj && obj[REACTIVE_MARKER] === true;\n}\n\nexport function unReactive(obj) {\n if (!isReactive(obj)) {\n return obj;\n }\n return Object.assign({}, obj);\n}\nexport function reactive<T extends object>(initialValue: T): T {\n if (isReactive(initialValue)) {\n return initialValue;\n }\n\n const signalObj = signalObject(initialValue);\n\n const handler: ProxyHandler<SignalObject<T>> = {\n get(target, key, receiver) {\n if (key === REACTIVE_MARKER) return true;\n track(target, key);\n const value = Reflect.get(target, key, receiver);\n return isSignal(value) ? value.value : value;\n },\n set(target, key, value, receiver) {\n let oldValue: Signal<any> | any = Reflect.get(target, key, receiver);\n\n if (isSignal(oldValue)) {\n oldValue = oldValue.value;\n }\n if (isSignal(value)) {\n value = value.value;\n }\n if (oldValue !== value) {\n Reflect.set(target, key, useSignal(value), receiver);\n trigger(target, key);\n return true;\n }\n return true;\n },\n };\n\n return new Proxy(signalObj, handler) as T;\n}\n","import { reactive, useComputed } from './signal';\nimport type { Computed } from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\nexport interface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<\n Record<string | symbol, any>,\n Record<string, any>,\n Record<string, any>\n >;\n\n const initState = { ...(state ?? {}) };\n const reactiveState = reactive(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(reactiveState, payload);\n subscriptions.forEach(callback => callback(reactiveState));\n actionCallbacks.forEach(callback => callback(reactiveState));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n Object.assign(reactiveState, initState);\n },\n };\n\n const store = {\n state: reactiveState,\n ...default_actions,\n };\n\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n store[key] = useComputed(getter.bind(reactiveState, reactiveState));\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n store[key] = action.bind(reactiveState);\n }\n }\n\n StoreMap.set(_id, store);\n ++_id;\n\n return store;\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Computed<ReturnType<S[K]>> : S[K];\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<S & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions & { state: S } {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","export const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport function hasChanged(value, oldValue) {\n return !Object.is(value, oldValue);\n}\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n return str.indexOf(searchString) === 0;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { isFunction, startsWith } from 'essor-shared';\nimport { signalObject } from '../signal';\nimport { type Signal, useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, any>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(\n props,\n key => startsWith(key, 'on') || startsWith(key, 'update:'),\n );\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: Record<string, Signal<any>> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n // patch props\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(this.proxyProps);\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, any>) {\n for (const [key, prop] of Object.entries(props)) {\n if (startsWith(key, 'on') && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key === 'ref') {\n if (isSignal(prop)) {\n (props[key] as any).value = this.rootNode?.nodes[0];\n } else if (isFunction(prop)) {\n (props[key] as Function)(this.rootNode?.nodes[0]);\n }\n } else if (startsWith(key, 'update:')) {\n props[key] = isSignal(prop) ? prop.value : prop;\n } else {\n const newValue = (this.proxyProps[key] ??= useSignal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = useEffect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFunction } from 'essor-shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, any>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFalsy, kebabCase } from 'essor-shared';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { coerceArray, isArray, isFunction, isNil, startsWith } from 'essor-shared';\nimport { useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach((item, index) => {\n if (!item) {\n return;\n }\n const [child, path] = isArray(item) ? item : [item, null];\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isSignal(props[attr])) {\n props[attr].value = node;\n } else if (isFunction(props[attr])) {\n (props[attr] as Function)(node);\n }\n }\n // handle events\n else if (startsWith(attr, 'on')) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (!startsWith(attr, 'update:')) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : useSignal(val);\n\n const cleanup = useEffect(() => {\n triggerValue.value = isSignal(val) ? val.value : val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n let cleanupBind;\n const updateKey = `update:${attr}`;\n if (props[updateKey]) {\n cleanupBind = binNode(node, value => {\n props[updateKey](value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = useEffect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = useEffect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n\n/**\n * Initializes a reference with a null value of type T or null.\n *\n * @template T - The type of the reference.\n * @return {T & { __is_ref: boolean; current: T | null }} A proxy object allowing custom get and set behavior.\n */\nexport function useRef<T>(): {\n __is_ref: boolean;\n current: T | null;\n} {\n // 初始化 ref 为 null,类型为 T 或 null\n let refValue: T | null = null;\n\n // 使用 Proxy 创建一个代理对象,以便我们可以自定义 get 和 set 行为\n return new Proxy({} as any, {\n get(target, key: string | symbol) {\n // 特殊属性 __is_ref 始终返回 true\n if (key === '__is_ref') {\n return true;\n }\n // 直接返回 refValue\n return refValue;\n },\n set(target, prop: string | symbol, value: any) {\n if (prop === 'current') {\n refValue = value;\n return true;\n }\n refValue = value;\n return true;\n },\n });\n}\n","export const __essor_version = '0.0.6-beta.6';\n","import { isFunction, isObject, startsWith } from 'essor-shared';\nimport type { EssorNode } from '../../types';\n\ninterface TemplateMap {\n [key: number]: {\n template: string;\n prop?: Record<string, any>;\n };\n}\n\ntype Props = Record<string, any>;\n\nexport function ssrtmpl(templates: string[] = []): TemplateMap {\n return templates.reduce((acc, template, index) => {\n acc[index + 1] = { template };\n return acc;\n }, {} as TemplateMap);\n}\n\nfunction jsonToAttrs(json: Record<string, any>): string {\n return Object.entries(json)\n .map(([key, value]) => `${key}=${JSON.stringify(value)}`)\n .join(' ');\n}\n\nexport function ssr(\n template: TemplateMap | EssorNode | ((props: Props) => string),\n props: Props,\n): string {\n if (isFunction(template)) {\n return template(props);\n }\n\n const childrenMap: Record<string, EssorNode[]> = {};\n const newTemplate: TemplateMap = {};\n if (isObject(template)) {\n Object.entries(template).forEach(([key, tmpl]) => {\n const prop = props[key];\n if (prop) {\n Object.keys(prop).forEach(propKey => {\n if (startsWith(propKey, 'on') && isFunction(prop[propKey])) {\n delete prop[propKey];\n }\n });\n\n if (prop.children) {\n prop.children.forEach(([child, idx]: [any, number]) => {\n childrenMap[idx] = [...(childrenMap[idx] || []), child];\n });\n delete prop.children;\n }\n }\n\n newTemplate[key] = { template: tmpl.template, prop };\n });\n }\n\n return Object.entries(newTemplate)\n .map(([key, { template: tmpl, prop }]) => {\n let str = tmpl;\n if (prop) {\n str += ` ${jsonToAttrs(prop)}`;\n }\n if (childrenMap[key]) {\n str += childrenMap[key].map(child => ssr(child, prop)).join('');\n }\n\n return str;\n })\n .join('');\n}\n\nexport function renderToString(component: (...args: any[]) => string, props: Props): string {\n return ssr(component, props);\n}\n\nexport function ssgRender(\n component: { mount: (root: HTMLElement) => void },\n root: HTMLElement,\n): void {\n root.innerHTML = '';\n component.mount(root);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "essor",
3
- "version": "0.0.6-beta.5",
3
+ "version": "0.0.6-beta.7",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "keywords": [],
@@ -54,7 +54,7 @@
54
54
  "jsdelivr": "dist/essor.esm.js",
55
55
  "dependencies": {
56
56
  "csstype": "^3.1.3",
57
- "essor-shared": "0.0.6-beta.5"
57
+ "essor-shared": "0.0.6-beta.7"
58
58
  },
59
59
  "scripts": {
60
60
  "build": "tsup && cross-env NODE_ENV=production tsup --clean=false --treeshake --sourcemap=false",