essor 0.0.6-beta.3 → 0.0.6-beta.5

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,32 +1,35 @@
1
1
  'use strict';
2
2
 
3
- var le=Object.defineProperty;var q=Object.getOwnPropertySymbols;var pe=Object.prototype.hasOwnProperty,fe=Object.prototype.propertyIsEnumerable;var Q=(t,e,n)=>e in t?le(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Y=(t,e)=>{for(var n in e||(e={}))pe.call(e,n)&&Q(t,n,e[n]);if(q)for(var n of q(e))fe.call(e,n)&&Q(t,n,e[n]);return t};var H=t=>typeof t=="function";var k=null,A=null,R=new Set,K=new WeakMap,J=new Set;function j(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),A&&R.add(A);}function ee(t,e){R.size>0&&R.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 P=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,ee(this,"value"));}peek(){return this._value}update(){ee(this,"value");}};function T(t){return d(t)?t:new P(t)}function d(t){return t instanceof P}var _=class{constructor(e){this.fn=e;let n=A;A=this,j(this,"_value"),this._value=this.fn(),A=n;}peek(){return this._value}run(){let e=this.fn();e!==this._value&&(this._value=e);}get value(){return j(this,"_value"),this._value}};function G(t){return new _(t)}function me(t){return t instanceof _}function S(t){function e(){let n=k;k=e,t(),k=n;}return J.add(e),e(),()=>{J.delete(e),k=null;}}function te(t,e){return Array.isArray(e)?e.includes(t):H(e)?e(t):!1}function C(t,e){return Object.entries(t).reduce((o,[r,i])=>(o[r]=te(r,e)||d(i)?i:T(i),o),{})}function O(t,e){return t?d(t)?t.peek():Object.entries(t).reduce((n,[o,r])=>(te(o,e)?n[o]=r:n[o]=d(r)?r.peek():r,n),{}):{}}var L=0,I=new Map;function he(t){let{state:e,getters:n,actions:o}=t,r=Y({},e!=null?e:{}),i=C(e!=null?e:{}),s=[],a=[],p={patch$(c){Object.assign(i,C(c)),s.forEach(u=>u(O(i))),a.forEach(u=>u(O(i)));},subscribe$(c){s.push(c);},unsubscribe$(c){let u=s.indexOf(c);u!==-1&&s.splice(u,1);},onAction$(c){a.push(c);},reset$(){p.patch$(r);}},l={_id:`store_${L}`};for(let c in n){let u=n[c];u&&(l[c]=G(()=>u.call(i)));}for(let c in o){let u=o[c];u&&(l[c]=u.bind(i));}return I.set(L,T),++L,new Proxy({},{get(c,u){return u==="state"?O(i):u in l?l[u]:u in p?p[u]:i[u].value}})}function ge(t){return function(){return I.has(L)?I.get(L):he(t)}}function X(t){return Array.isArray(t)?t.flat():[t]}function N(t,e){return t.indexOf(e)===0}var ne=t=>t!==null&&typeof t=="object";var V=Array.isArray;function oe(t){return t==null}var m=t=>typeof t=="function";function D(t){return t===!1||t===null||t===void 0||t===""}var re=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=C(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 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(N(a,"on")&&((n=this.rootNode)!=null&&n.nodes)){let l=a.slice(2).toLowerCase(),c=p,u=g(this.rootNode.nodes[0],l,c);this.emitter.add(u);}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(N(a,"update:"))e[a]=d(p)?p.value:p;else {let l=(s=(i=this.proxyProps)[a])!=null?s:i[a]=T(p),c=this.getNodeTrack(a);c.cleanup=S(()=>{l.value=p;});}this.props=e;}};b.ref=null,b.context={};var h=b;function ye(t,e,n){return m(t)?new h(t,e,n):new M(t,e,n)}function y(t){return t instanceof h||t instanceof M}function Ne(t){let e=document.createElement("template");return e.innerHTML=t,e}function ve(t){return t.children}function W(t){if(y(t)||t instanceof Node)return t;let e=D(t)?"":String(t);return document.createTextNode(e)}function v(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 E(t){y(t)?t.unmount():t.parentNode&&t.remove();}function z(t,e,n){v(t,e,n),E(n);}function B(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(re(r),String(o[r]));});}return}D(n)?t.removeAttribute(e):n===!0?t.setAttribute(e,""):t.setAttribute(e,String(n));}function se(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 ie=Promise.resolve();function be(t){return t?ie.then(t):ie}function g(t,e,n){return t.addEventListener(e,n),()=>t.removeEventListener(e,n)}function ae(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 l=t;l.innerHTML="",o&&v(t,o);}else {let l=document.createRange(),c=i.next().value,u=y(c)?c.firstChild:c;l.setStartBefore(u),o?l.setEndBefore(o):l.setEndAfter(t),l.deleteContents();}return e.forEach(l=>{y(l)&&l.unmount();}),r}let a=[],p=xe(n);for(let[l,c]of n.entries()){let u=i.next().value,x=$(u,l);for(;u&&!p.has(x);)E(u),e.delete(x),u=i.next().value,x=$(u,l);let w=$(c,l),U=e.get(w);if(U&&(c=Te(t,U,c)),u)if(u){let Z=document.createComment("");v(t,Z,u),a.push([Z,c]);}else v(t,c,o);else v(t,c,o);r.set(w,c);}return a.forEach(([l,c])=>z(t,c,l)),e.forEach((l,c)=>{l.isConnected&&!r.has(c)&&E(l);}),r}function Te(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 xe(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?E(r):r instanceof t&&r.unmount();});}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(e=>E(e)),this.nodes=[],this.mounted=!1;}mount(e,n){var i;if(this.parent=e,this.isConnected)return this.nodes.forEach(s=>v(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),v(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(V(o.children))o.children.forEach((s,a)=>{var w;if(!s)return;let[p,l]=V(s)?s:[s,null],c=oe(l)?null:(w=this.treeMap.get(l))!=null?w:null,u=`${e}:${i}:${a}`,x=this.getNodeTrack(u,!0,r);ce(x,n,p,c);});else {let s=`${e}:${i}:0`,a=this.getNodeTrack(s,!0,r);ce(a,n,o.children,null);}else if(i==="ref")d(o[i])?o[i].value=n:m(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=g(n,s,p);}else if(!N(i,"update:")){let s=this.getNodeTrack(`${e}:${i}`),a=o[i],p=d(a)?a:T(a),l=S(()=>{p.value=d(a)?a.value:a,Se(s,n,i,p.value);}),c,u=`update:${i}`;o[u]&&(c=se(n,x=>{o[u](x);})),s.cleanup=()=>{l&&l(),c&&c();};}}};function Se(t,e,n,o){let r=e;r.setAttribute&&(m(o)?t.cleanup=S(()=>{B(r,n,o());}):B(r,n,o));}function ce(t,e,n,o){m(n)?t.cleanup=S(()=>{let r=X(n()).map(W);t.lastNodes=ae(e,t.lastNodes,r,o);}):X(n).forEach((r,i)=>{let s=W(r);t.lastNodes.set(String(i),s),v(e,s,o);});}function Ee(t){var e;F("onMounted"),(e=h.ref)==null||e.addHook("mounted",t);}function ke(t){var e;F("onDestroy"),(e=h.ref)==null||e.addHook("destroy",t);}function F(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 Ce(t,e){var n;F("useProvide"),(n=h.ref)==null||n.setContext(t,e);}function Me(t,e){var n;return F("useInject"),((n=h.ref)==null?void 0:n.getContext(t))||e}function we(){let t=null;return new Proxy({},{get(e,n){return n==="__is_ref"?!0:t},set(e,n,o){return t=o,!0}})}var Xt="0.0.6-beta.2";function zt(t=[]){return t.reduce((e,n,o)=>(e[o+1]={template:n},e),{})}function Ae(t){return Object.entries(t).map(([e,n])=>`${e}=${JSON.stringify(n)}`).join(" ")}function ue(t,e){if(m(t))return t(e);let n={},o={};return ne(t)&&Object.entries(t).forEach(([r,i])=>{let s=e[r];s&&(Object.keys(s).forEach(a=>{N(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+=` ${Ae(s)}`),n[r]&&(a+=n[r].map(p=>ue(p,s)).join("")),a}).join("")}function Bt(t,e){return ue(t,e)}function Ut(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,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);}
5
5
 
6
- exports.ComponentNode = h;
7
- exports.Fragment = ve;
6
+ exports.ComponentNode = g;
7
+ exports.Fragment = Ee;
8
8
  exports.TemplateNode = M;
9
- exports.__essor_version = Xt;
10
- exports.createStore = ge;
11
- exports.h = ye;
12
- exports.hydrate = Ut;
13
- exports.isComputed = me;
14
- exports.isJsxElement = y;
15
- exports.isSignal = d;
16
- exports.nextTick = be;
17
- exports.onDestroy = ke;
18
- exports.onMount = Ee;
19
- exports.renderToString = Bt;
20
- exports.signalObject = C;
21
- exports.ssr = ue;
22
- exports.ssrtmpl = zt;
23
- exports.template = Ne;
24
- exports.unSignal = O;
9
+ exports.__essor_version = zt;
10
+ exports.createStore = be;
11
+ exports.h = Te;
12
+ exports.hydrate = Yt;
13
+ exports.isComputed = ge;
14
+ exports.isJsxElement = v;
15
+ exports.isReactive = X;
16
+ exports.isSignal = m;
17
+ exports.nextTick = Se;
18
+ exports.onDestroy = we;
19
+ exports.onMount = Ae;
20
+ exports.reactive = V;
21
+ exports.renderToString = Qt;
22
+ exports.signalObject = L;
23
+ exports.ssr = pe;
24
+ exports.ssrtmpl = qt;
25
+ exports.template = xe;
26
+ exports.unReactive = ve;
27
+ exports.unSignal = ye;
25
28
  exports.useComputed = G;
26
- exports.useEffect = S;
27
- exports.useInject = Me;
28
- exports.useProvide = Ce;
29
- exports.useRef = we;
30
- exports.useSignal = T;
29
+ exports.useEffect = E;
30
+ exports.useInject = Oe;
31
+ exports.useProvide = je;
32
+ exports.useRef = Le;
33
+ exports.useSignal = x;
31
34
  //# sourceMappingURL=out.js.map
32
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","_id","StoreMap","createOptionsStore","options","state","getters","actions","initState","__spreadValues","signalState","subscriptions","actionCallbacks","default_actions","payload","callback","index","states","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","handler","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","obj","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","import {\n type Signal,\n type SignalObject,\n signalObject,\n unSignal,\n useComputed,\n useSignal,\n} 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<any, any, any>;\n\n const initState = { ...(state ?? {}) };\n const signalState: SignalObject<S> = signalObject(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(signalState, signalObject(payload));\n subscriptions.forEach(callback => callback(unSignal(signalState)));\n actionCallbacks.forEach(callback => callback(unSignal(signalState)));\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 default_actions.patch$(initState);\n },\n };\n const states = {\n _id: `store_${_id}`,\n };\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n states[key] = useComputed(() => {\n return getter.call(signalState);\n });\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n states[key] = action.bind(signalState);\n }\n }\n\n StoreMap.set(_id, useSignal);\n ++_id;\n\n return new Proxy(\n {},\n {\n get(_, key) {\n if (key === 'state') {\n return unSignal(signalState);\n }\n if (key in states) {\n return states[key];\n }\n if (key in default_actions) {\n return default_actions[key];\n }\n return signalState[key].value;\n },\n },\n );\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Signal<ReturnType<S[K]>> : Signal<S[K]>;\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<SignalObject<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.2';\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","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"]}
package/dist/essor.d.cts CHANGED
@@ -44,6 +44,9 @@ declare function signalObject<T extends object>(initialValues: T, exclude?: ((ke
44
44
  * @return {T} The unwrapped value of the signal, signal object, or plain object.
45
45
  */
46
46
  declare function unSignal<T>(signal: SignalObject<T> | T | Signal$1<T>, exclude?: ((key: string) => boolean) | string[]): T;
47
+ declare function isReactive(obj: any): any;
48
+ declare function unReactive(obj: any): any;
49
+ declare function reactive(initialValue: any): any;
47
50
 
48
51
  type PatchPayload = Record<string, any>;
49
52
  type Callback = (value: any) => void;
@@ -55,13 +58,13 @@ interface StoreActions {
55
58
  reset$: () => void;
56
59
  }
57
60
  type Getters<S> = {
58
- [K in keyof S]: S[K] extends (...args: any[]) => any ? Signal$1<ReturnType<S[K]>> : Signal$1<S[K]>;
61
+ [K in keyof S]: S[K] extends (...args: any[]) => any ? ReturnType<S[K]> : S[K];
59
62
  };
60
63
  declare function createStore<S, G, A>(options: {
61
64
  state: S;
62
65
  getters?: G;
63
66
  actions?: A;
64
- } & ThisType<SignalObject<S> & Getters<G> & A>): () => S & Getters<G> & A & StoreActions & {
67
+ } & ThisType<S & Getters<G> & A>): () => S & Getters<G> & A & StoreActions & {
65
68
  state: S;
66
69
  };
67
70
 
@@ -2355,7 +2358,7 @@ declare function useRef<T>(): {
2355
2358
  current: T | null;
2356
2359
  };
2357
2360
 
2358
- declare const __essor_version = "0.0.6-beta.2";
2361
+ declare const __essor_version = "0.0.6-beta.4";
2359
2362
 
2360
2363
  interface TemplateMap {
2361
2364
  [key: number]: {
@@ -2371,4 +2374,4 @@ declare function hydrate(component: {
2371
2374
  mount: (root: HTMLElement) => void;
2372
2375
  }, root: HTMLElement): void;
2373
2376
 
2374
- 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, isSignal, nextTick, onDestroy, onMount, renderToString, signalObject, ssr, ssrtmpl, template, unSignal, useComputed, useEffect, useInject, useProvide, useRef, useSignal };
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 };
package/dist/essor.d.ts CHANGED
@@ -44,6 +44,9 @@ declare function signalObject<T extends object>(initialValues: T, exclude?: ((ke
44
44
  * @return {T} The unwrapped value of the signal, signal object, or plain object.
45
45
  */
46
46
  declare function unSignal<T>(signal: SignalObject<T> | T | Signal$1<T>, exclude?: ((key: string) => boolean) | string[]): T;
47
+ declare function isReactive(obj: any): any;
48
+ declare function unReactive(obj: any): any;
49
+ declare function reactive(initialValue: any): any;
47
50
 
48
51
  type PatchPayload = Record<string, any>;
49
52
  type Callback = (value: any) => void;
@@ -55,13 +58,13 @@ interface StoreActions {
55
58
  reset$: () => void;
56
59
  }
57
60
  type Getters<S> = {
58
- [K in keyof S]: S[K] extends (...args: any[]) => any ? Signal$1<ReturnType<S[K]>> : Signal$1<S[K]>;
61
+ [K in keyof S]: S[K] extends (...args: any[]) => any ? ReturnType<S[K]> : S[K];
59
62
  };
60
63
  declare function createStore<S, G, A>(options: {
61
64
  state: S;
62
65
  getters?: G;
63
66
  actions?: A;
64
- } & ThisType<SignalObject<S> & Getters<G> & A>): () => S & Getters<G> & A & StoreActions & {
67
+ } & ThisType<S & Getters<G> & A>): () => S & Getters<G> & A & StoreActions & {
65
68
  state: S;
66
69
  };
67
70
 
@@ -2355,7 +2358,7 @@ declare function useRef<T>(): {
2355
2358
  current: T | null;
2356
2359
  };
2357
2360
 
2358
- declare const __essor_version = "0.0.6-beta.2";
2361
+ declare const __essor_version = "0.0.6-beta.4";
2359
2362
 
2360
2363
  interface TemplateMap {
2361
2364
  [key: number]: {
@@ -2371,4 +2374,4 @@ declare function hydrate(component: {
2371
2374
  mount: (root: HTMLElement) => void;
2372
2375
  }, root: HTMLElement): void;
2373
2376
 
2374
- 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, isSignal, nextTick, onDestroy, onMount, renderToString, signalObject, ssr, ssrtmpl, template, unSignal, useComputed, useEffect, useInject, useProvide, useRef, useSignal };
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 };
@@ -163,6 +163,42 @@ function unSignal(signal, exclude) {
163
163
  return acc;
164
164
  }, {});
165
165
  }
166
+ var REACTIVE_MARKER = Symbol("reactive");
167
+ function isReactive(obj) {
168
+ return obj && obj[REACTIVE_MARKER] === true;
169
+ }
170
+ function unReactive(obj) {
171
+ if (!isReactive(obj)) {
172
+ return obj;
173
+ }
174
+ const copy = Object.assign({}, obj);
175
+ delete copy[REACTIVE_MARKER];
176
+ return copy;
177
+ }
178
+ function reactive(initialValue) {
179
+ if (isReactive(initialValue)) {
180
+ return initialValue;
181
+ }
182
+ const signalObj = signalObject(initialValue);
183
+ const handler = {
184
+ get(target, key, receiver) {
185
+ track(target, key);
186
+ const value = Reflect.get(target, key, receiver);
187
+ return isSignal(value) ? value.value : value;
188
+ },
189
+ set(target, key, value, receiver) {
190
+ const oldValue = Reflect.get(target, key, receiver);
191
+ if (oldValue !== value) {
192
+ Reflect.set(target, key, useSignal(value), receiver);
193
+ trigger(target, key);
194
+ }
195
+ return true;
196
+ }
197
+ };
198
+ const reactiveProxy = new Proxy(signalObj, handler);
199
+ reactiveProxy[REACTIVE_MARKER] = true;
200
+ return reactiveProxy;
201
+ }
166
202
 
167
203
  // src/signal/store.ts
168
204
  var _id = 0;
@@ -170,14 +206,14 @@ var StoreMap = /* @__PURE__ */ new Map();
170
206
  function createOptionsStore(options) {
171
207
  const { state, getters, actions } = options;
172
208
  const initState = __spreadValues({}, state != null ? state : {});
173
- const signalState = signalObject(state != null ? state : {});
209
+ const reactiveState = reactive(state != null ? state : {});
174
210
  const subscriptions = [];
175
211
  const actionCallbacks = [];
176
212
  const default_actions = {
177
213
  patch$(payload) {
178
- Object.assign(signalState, signalObject(payload));
179
- subscriptions.forEach((callback) => callback(unSignal(signalState)));
180
- actionCallbacks.forEach((callback) => callback(unSignal(signalState)));
214
+ Object.assign(reactiveState, payload);
215
+ subscriptions.forEach((callback) => callback(reactiveState));
216
+ actionCallbacks.forEach((callback) => callback(reactiveState));
181
217
  },
182
218
  subscribe$(callback) {
183
219
  subscriptions.push(callback);
@@ -192,42 +228,44 @@ function createOptionsStore(options) {
192
228
  actionCallbacks.push(callback);
193
229
  },
194
230
  reset$() {
195
- default_actions.patch$(initState);
231
+ Object.assign(reactiveState, initState);
196
232
  }
197
233
  };
198
- const states = {
199
- _id: `store_${_id}`
200
- };
234
+ const gettersStates = {};
235
+ const actionStates = {};
201
236
  for (const key in getters) {
202
237
  const getter = getters[key];
203
238
  if (getter) {
204
- states[key] = useComputed(() => {
205
- return getter.call(signalState);
239
+ gettersStates[key] = useComputed(() => {
240
+ return getter.call(reactiveState, reactiveState);
206
241
  });
207
242
  }
208
243
  }
209
244
  for (const key in actions) {
210
245
  const action = actions[key];
211
246
  if (action) {
212
- states[key] = action.bind(signalState);
247
+ actionStates[key] = action.bind(reactiveState);
213
248
  }
214
249
  }
215
- StoreMap.set(_id, useSignal);
250
+ StoreMap.set(_id, reactiveState);
216
251
  ++_id;
217
252
  return new Proxy(
218
253
  {},
219
254
  {
220
255
  get(_, key) {
221
256
  if (key === "state") {
222
- return unSignal(signalState);
257
+ return reactiveState;
258
+ }
259
+ if (key in gettersStates) {
260
+ return gettersStates[key].value;
223
261
  }
224
- if (key in states) {
225
- return states[key];
262
+ if (key in actionStates) {
263
+ return actionStates[key];
226
264
  }
227
265
  if (key in default_actions) {
228
266
  return default_actions[key];
229
267
  }
230
- return signalState[key].value;
268
+ return reactiveState[key];
231
269
  }
232
270
  }
233
271
  );
@@ -868,7 +906,7 @@ function useRef() {
868
906
  }
869
907
 
870
908
  // src/version.ts
871
- var __essor_version = "0.0.6-beta.2";
909
+ var __essor_version = "0.0.6-beta.4";
872
910
 
873
911
  // src/server/index.ts
874
912
  function ssrtmpl(templates = []) {
@@ -933,15 +971,18 @@ exports.h = h;
933
971
  exports.hydrate = hydrate;
934
972
  exports.isComputed = isComputed;
935
973
  exports.isJsxElement = isJsxElement;
974
+ exports.isReactive = isReactive;
936
975
  exports.isSignal = isSignal;
937
976
  exports.nextTick = nextTick;
938
977
  exports.onDestroy = onDestroy;
939
978
  exports.onMount = onMount;
979
+ exports.reactive = reactive;
940
980
  exports.renderToString = renderToString;
941
981
  exports.signalObject = signalObject;
942
982
  exports.ssr = ssr;
943
983
  exports.ssrtmpl = ssrtmpl;
944
984
  exports.template = template;
985
+ exports.unReactive = unReactive;
945
986
  exports.unSignal = unSignal;
946
987
  exports.useComputed = useComputed;
947
988
  exports.useEffect = useEffect;
@@ -161,6 +161,42 @@ function unSignal(signal, exclude) {
161
161
  return acc;
162
162
  }, {});
163
163
  }
164
+ var REACTIVE_MARKER = Symbol("reactive");
165
+ function isReactive(obj) {
166
+ return obj && obj[REACTIVE_MARKER] === true;
167
+ }
168
+ function unReactive(obj) {
169
+ if (!isReactive(obj)) {
170
+ return obj;
171
+ }
172
+ const copy = Object.assign({}, obj);
173
+ delete copy[REACTIVE_MARKER];
174
+ return copy;
175
+ }
176
+ function reactive(initialValue) {
177
+ if (isReactive(initialValue)) {
178
+ return initialValue;
179
+ }
180
+ const signalObj = signalObject(initialValue);
181
+ const handler = {
182
+ get(target, key, receiver) {
183
+ track(target, key);
184
+ const value = Reflect.get(target, key, receiver);
185
+ return isSignal(value) ? value.value : value;
186
+ },
187
+ set(target, key, value, receiver) {
188
+ const oldValue = Reflect.get(target, key, receiver);
189
+ if (oldValue !== value) {
190
+ Reflect.set(target, key, useSignal(value), receiver);
191
+ trigger(target, key);
192
+ }
193
+ return true;
194
+ }
195
+ };
196
+ const reactiveProxy = new Proxy(signalObj, handler);
197
+ reactiveProxy[REACTIVE_MARKER] = true;
198
+ return reactiveProxy;
199
+ }
164
200
 
165
201
  // src/signal/store.ts
166
202
  var _id = 0;
@@ -168,14 +204,14 @@ var StoreMap = /* @__PURE__ */ new Map();
168
204
  function createOptionsStore(options) {
169
205
  const { state, getters, actions } = options;
170
206
  const initState = __spreadValues({}, state != null ? state : {});
171
- const signalState = signalObject(state != null ? state : {});
207
+ const reactiveState = reactive(state != null ? state : {});
172
208
  const subscriptions = [];
173
209
  const actionCallbacks = [];
174
210
  const default_actions = {
175
211
  patch$(payload) {
176
- Object.assign(signalState, signalObject(payload));
177
- subscriptions.forEach((callback) => callback(unSignal(signalState)));
178
- actionCallbacks.forEach((callback) => callback(unSignal(signalState)));
212
+ Object.assign(reactiveState, payload);
213
+ subscriptions.forEach((callback) => callback(reactiveState));
214
+ actionCallbacks.forEach((callback) => callback(reactiveState));
179
215
  },
180
216
  subscribe$(callback) {
181
217
  subscriptions.push(callback);
@@ -190,42 +226,44 @@ function createOptionsStore(options) {
190
226
  actionCallbacks.push(callback);
191
227
  },
192
228
  reset$() {
193
- default_actions.patch$(initState);
229
+ Object.assign(reactiveState, initState);
194
230
  }
195
231
  };
196
- const states = {
197
- _id: `store_${_id}`
198
- };
232
+ const gettersStates = {};
233
+ const actionStates = {};
199
234
  for (const key in getters) {
200
235
  const getter = getters[key];
201
236
  if (getter) {
202
- states[key] = useComputed(() => {
203
- return getter.call(signalState);
237
+ gettersStates[key] = useComputed(() => {
238
+ return getter.call(reactiveState, reactiveState);
204
239
  });
205
240
  }
206
241
  }
207
242
  for (const key in actions) {
208
243
  const action = actions[key];
209
244
  if (action) {
210
- states[key] = action.bind(signalState);
245
+ actionStates[key] = action.bind(reactiveState);
211
246
  }
212
247
  }
213
- StoreMap.set(_id, useSignal);
248
+ StoreMap.set(_id, reactiveState);
214
249
  ++_id;
215
250
  return new Proxy(
216
251
  {},
217
252
  {
218
253
  get(_, key) {
219
254
  if (key === "state") {
220
- return unSignal(signalState);
255
+ return reactiveState;
256
+ }
257
+ if (key in gettersStates) {
258
+ return gettersStates[key].value;
221
259
  }
222
- if (key in states) {
223
- return states[key];
260
+ if (key in actionStates) {
261
+ return actionStates[key];
224
262
  }
225
263
  if (key in default_actions) {
226
264
  return default_actions[key];
227
265
  }
228
- return signalState[key].value;
266
+ return reactiveState[key];
229
267
  }
230
268
  }
231
269
  );
@@ -866,7 +904,7 @@ function useRef() {
866
904
  }
867
905
 
868
906
  // src/version.ts
869
- var __essor_version = "0.0.6-beta.2";
907
+ var __essor_version = "0.0.6-beta.4";
870
908
 
871
909
  // src/server/index.ts
872
910
  function ssrtmpl(templates = []) {
@@ -922,4 +960,4 @@ function hydrate(component, root) {
922
960
  component.mount(root);
923
961
  }
924
962
 
925
- export { ComponentNode, Fragment, TemplateNode, __essor_version, createStore, h, hydrate, isComputed, isJsxElement, isSignal, nextTick, onDestroy, onMount, renderToString, signalObject, ssr, ssrtmpl, template, unSignal, useComputed, useEffect, useInject, useProvide, useRef, useSignal };
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 };
package/dist/essor.esm.js CHANGED
@@ -1,6 +1,6 @@
1
- var pe=Object.defineProperty;var Q=Object.getOwnPropertySymbols;var fe=Object.prototype.hasOwnProperty,de=Object.prototype.propertyIsEnumerable;var Y=(t,e,n)=>e in t?pe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,ee=(t,e)=>{for(var n in e||(e={}))fe.call(e,n)&&Y(t,n,e[n]);if(Q)for(var n of Q(e))de.call(e,n)&&Y(t,n,e[n]);return t};var R=t=>typeof t=="function";var C=null,j=null,K=new Set,J=new WeakMap,G=new Set;function O(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)),C&&o.add(C),j&&K.add(j);}function te(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 _=class{constructor(e){this._value=e;}valueOf(){return O(this,"value"),this._value}toString(){return O(this,"value"),String(this._value)}toJSON(){return this._value}get value(){return O(this,"value"),this._value}set value(e){this._value!==e&&(this._value=e,te(this,"value"));}peek(){return this._value}update(){te(this,"value");}};function x(t){return m(t)?t:new _(t)}function m(t){return t instanceof _}var $=class{constructor(e){this.fn=e;let n=j;j=this,O(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 O(this,"_value"),this._value}};function I(t){return new $(t)}function he(t){return t instanceof $}function E(t){function e(){let n=C;C=e,t(),C=n;}return G.add(e),e(),()=>{G.delete(e),C=null;}}function ne(t,e){return Array.isArray(e)?e.includes(t):R(e)?e(t):!1}function M(t,e){return Object.entries(t).reduce((o,[r,i])=>(o[r]=ne(r,e)||m(i)?i:x(i),o),{})}function L(t,e){return t?m(t)?t.peek():Object.entries(t).reduce((n,[o,r])=>(ne(o,e)?n[o]=r:n[o]=m(r)?r.peek():r,n),{}):{}}var P=0,X=new Map;function ge(t){let{state:e,getters:n,actions:o}=t,r=ee({},e!=null?e:{}),i=M(e!=null?e:{}),s=[],a=[],p={patch$(c){Object.assign(i,M(c)),s.forEach(u=>u(L(i))),a.forEach(u=>u(L(i)));},subscribe$(c){s.push(c);},unsubscribe$(c){let u=s.indexOf(c);u!==-1&&s.splice(u,1);},onAction$(c){a.push(c);},reset$(){p.patch$(r);}},l={_id:`store_${P}`};for(let c in n){let u=n[c];u&&(l[c]=I(()=>u.call(i)));}for(let c in o){let u=o[c];u&&(l[c]=u.bind(i));}return X.set(P,x),++P,new Proxy({},{get(c,u){return u==="state"?L(i):u in l?l[u]:u in p?p[u]:i[u].value}})}function ye(t){return function(){return X.has(P)?X.get(P):ge(t)}}function V(t){return Array.isArray(t)?t.flat():[t]}function v(t,e){return t.indexOf(e)===0}var oe=t=>t!==null&&typeof t=="object";var D=Array.isArray;function re(t){return t==null}var h=t=>typeof t=="function";function W(t){return t===!1||t===null||t===void 0||t===""}var ie=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=M(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 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(v(a,"on")&&((n=this.rootNode)!=null&&n.nodes)){let l=a.slice(2).toLowerCase(),c=p,u=y(this.rootNode.nodes[0],l,c);this.emitter.add(u);}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(v(a,"update:"))e[a]=m(p)?p.value:p;else {let l=(s=(i=this.proxyProps)[a])!=null?s:i[a]=x(p),c=this.getNodeTrack(a);c.cleanup=E(()=>{l.value=p;});}this.props=e;}};T.ref=null,T.context={};var g=T;function Ne(t,e,n){return h(t)?new g(t,e,n):new w(t,e,n)}function N(t){return t instanceof g||t instanceof w}function ve(t){let e=document.createElement("template");return e.innerHTML=t,e}function be(t){return t.children}function z(t){if(N(t)||t instanceof Node)return t;let e=W(t)?"":String(t);return document.createTextNode(e)}function b(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 k(t){N(t)?t.unmount():t.parentNode&&t.remove();}function B(t,e,n){b(t,e,n),k(n);}function U(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(ie(r),String(o[r]));});}return}W(n)?t.removeAttribute(e):n===!0?t.setAttribute(e,""):t.setAttribute(e,String(n));}function ae(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 se=Promise.resolve();function Te(t){return t?se.then(t):se}function y(t,e,n){return t.addEventListener(e,n),()=>t.removeEventListener(e,n)}function ce(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 l=t;l.innerHTML="",o&&b(t,o);}else {let l=document.createRange(),c=i.next().value,u=N(c)?c.firstChild:c;l.setStartBefore(u),o?l.setEndBefore(o):l.setEndAfter(t),l.deleteContents();}return e.forEach(l=>{N(l)&&l.unmount();}),r}let a=[],p=Se(n);for(let[l,c]of n.entries()){let u=i.next().value,S=F(u,l);for(;u&&!p.has(S);)k(u),e.delete(S),u=i.next().value,S=F(u,l);let A=F(c,l),Z=e.get(A);if(Z&&(c=xe(t,Z,c)),u)if(u){let q=document.createComment("");b(t,q,u),a.push([q,c]);}else b(t,c,o);else b(t,c,o);r.set(A,c);}return a.forEach(([l,c])=>B(t,c,l)),e.forEach((l,c)=>{l.isConnected&&!r.has(c)&&k(l);}),r}function xe(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):(B(t,n,e),n)}function Se(t){let e=new Map;for(let[n,o]of t.entries()){let r=F(o,n);e.set(r,o);}return e}function F(t,e){let n=t instanceof Element?t.id:void 0,o=n===""?void 0:n;return o!=null?o:`_$${e}$`}var w=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(D(o.children))o.children.forEach((s,a)=>{var A;if(!s)return;let[p,l]=D(s)?s:[s,null],c=re(l)?null:(A=this.treeMap.get(l))!=null?A:null,u=`${e}:${i}:${a}`,S=this.getNodeTrack(u,!0,r);ue(S,n,p,c);});else {let s=`${e}:${i}:0`,a=this.getNodeTrack(s,!0,r);ue(a,n,o.children,null);}else if(i==="ref")m(o[i])?o[i].value=n:h(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=y(n,s,p);}else if(!v(i,"update:")){let s=this.getNodeTrack(`${e}:${i}`),a=o[i],p=m(a)?a:x(a),l=E(()=>{p.value=m(a)?a.value:a,Ee(s,n,i,p.value);}),c,u=`update:${i}`;o[u]&&(c=ae(n,S=>{o[u](S);})),s.cleanup=()=>{l&&l(),c&&c();};}}};function Ee(t,e,n,o){let r=e;r.setAttribute&&(h(o)?t.cleanup=E(()=>{U(r,n,o());}):U(r,n,o));}function ue(t,e,n,o){h(n)?t.cleanup=E(()=>{let r=V(n()).map(z);t.lastNodes=ce(e,t.lastNodes,r,o);}):V(n).forEach((r,i)=>{let s=z(r);t.lastNodes.set(String(i),s),b(e,s,o);});}function ke(t){var e;H("onMounted"),(e=g.ref)==null||e.addHook("mounted",t);}function Ce(t){var e;H("onDestroy"),(e=g.ref)==null||e.addHook("destroy",t);}function H(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 Me(t,e){var n;H("useProvide"),(n=g.ref)==null||n.setContext(t,e);}function we(t,e){var n;return H("useInject"),((n=g.ref)==null?void 0:n.getContext(t))||e}function Ae(){let t=null;return new Proxy({},{get(e,n){return n==="__is_ref"?!0:t},set(e,n,o){return t=o,!0}})}var Vt="0.0.6-beta.2";function Bt(t=[]){return t.reduce((e,n,o)=>(e[o+1]={template:n},e),{})}function je(t){return Object.entries(t).map(([e,n])=>`${e}=${JSON.stringify(n)}`).join(" ")}function le(t,e){if(h(t))return t(e);let n={},o={};return oe(t)&&Object.entries(t).forEach(([r,i])=>{let s=e[r];s&&(Object.keys(s).forEach(a=>{v(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+=` ${je(s)}`),n[r]&&(a+=n[r].map(p=>le(p,s)).join("")),a}).join("")}function Ut(t,e){return le(t,e)}function Zt(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,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);}
3
3
 
4
- export { g as ComponentNode, be as Fragment, w as TemplateNode, Vt as __essor_version, ye as createStore, Ne as h, Zt as hydrate, he as isComputed, N as isJsxElement, m as isSignal, Te as nextTick, Ce as onDestroy, ke as onMount, Ut as renderToString, M as signalObject, le as ssr, Bt as ssrtmpl, ve as template, L as unSignal, I as useComputed, E as useEffect, we as useInject, Me as useProvide, Ae as useRef, x as useSignal };
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 };
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","_id","StoreMap","createOptionsStore","options","state","getters","actions","initState","__spreadValues","signalState","subscriptions","actionCallbacks","default_actions","payload","callback","index","states","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","handler","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","obj","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","import {\n type Signal,\n type SignalObject,\n signalObject,\n unSignal,\n useComputed,\n useSignal,\n} 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<any, any, any>;\n\n const initState = { ...(state ?? {}) };\n const signalState: SignalObject<S> = signalObject(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(signalState, signalObject(payload));\n subscriptions.forEach(callback => callback(unSignal(signalState)));\n actionCallbacks.forEach(callback => callback(unSignal(signalState)));\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 default_actions.patch$(initState);\n },\n };\n const states = {\n _id: `store_${_id}`,\n };\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n states[key] = useComputed(() => {\n return getter.call(signalState);\n });\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n states[key] = action.bind(signalState);\n }\n }\n\n StoreMap.set(_id, useSignal);\n ++_id;\n\n return new Proxy(\n {},\n {\n get(_, key) {\n if (key === 'state') {\n return unSignal(signalState);\n }\n if (key in states) {\n return states[key];\n }\n if (key in default_actions) {\n return default_actions[key];\n }\n return signalState[key].value;\n },\n },\n );\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Signal<ReturnType<S[K]>> : Signal<S[K]>;\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<SignalObject<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.2';\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","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"]}
package/package.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "essor",
3
- "version": "0.0.6-beta.3",
4
- "packageManager": "pnpm@8.15.8",
3
+ "version": "0.0.6-beta.5",
5
4
  "description": "",
6
5
  "type": "module",
7
6
  "keywords": [],
@@ -55,7 +54,7 @@
55
54
  "jsdelivr": "dist/essor.esm.js",
56
55
  "dependencies": {
57
56
  "csstype": "^3.1.3",
58
- "essor-shared": "0.0.6-beta.3"
57
+ "essor-shared": "0.0.6-beta.5"
59
58
  },
60
59
  "scripts": {
61
60
  "build": "tsup && cross-env NODE_ENV=production tsup --clean=false --treeshake --sourcemap=false",