@estjs/template 0.0.12 → 0.0.13-beta.2

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.
@@ -4,27 +4,24 @@ var shared = require('@estjs/shared');
4
4
  var signal = require('@estjs/signal');
5
5
 
6
6
  /**
7
- * @estjs/template v0.0.12
7
+ * @estjs/template v0.0.13-beta.2
8
8
  * (c) 2023-Present jiangxd <jiangxd2016@gmail.com>
9
9
  * @license MIT
10
10
  **/
11
- var oe=Object.defineProperty;var K=Object.getOwnPropertySymbols;var re=Object.prototype.hasOwnProperty,ie=Object.prototype.propertyIsEnumerable;var I=(t,n,e)=>n in t?oe(t,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[n]=e,O=(t,n)=>{for(var e in n||(n={}))re.call(n,e)&&I(t,e,n[e]);if(K)for(var e of K(n))ie.call(n,e)&&I(t,e,n[e]);return t};var N=class N{constructor(){this.hooks={mounted:new Set,destroy:new Set};}addEventListener(){}removeEventListener(){}addHook(n,e){var o;(o=this.hooks[n])==null||o.add(e);}getContext(n){return N.context[n]}setContext(n,e){N.context[n]=e;}initRef(){N.ref=this;}removeRef(){N.ref=null;}};N.ref=null,N.context={};var h=N,y=class extends h{constructor(e,o,r){super();this.template=e;this.props=o;this.key=r;this.proxyProps={};this.emitter=new Set;this.mounted=!1;this.rootNode=null;this.context={};this.trackMap=new Map;this.proxyProps=signal.signalObject(o,i=>shared.startsWith(i,"on")||shared.startsWith(i,"update")),this.key=this.key||o.key;}get firstChild(){var e,o;return (o=(e=this.rootNode)==null?void 0:e.firstChild)!=null?o:null}get isConnected(){var e,o;return (o=(e=this.rootNode)==null?void 0:e.isConnected)!=null?o:!1}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 o=this.props;this.props=e.props,this.patchProps(o);}mount(e,o){var i,s,a,l;if(!shared.isFunction(this.template))throw new Error("Template must be a function");if(this.isConnected)return (s=(i=this.rootNode)==null?void 0:i.mount(e,o))!=null?s:[];this.initRef(),this.rootNode=this.template(signal.useReactive(this.proxyProps,["children"])),this.removeRef(),this.mounted=!0;let r=(l=(a=this.rootNode)==null?void 0:a.mount(e,o))!=null?l:[];return this.hooks.mounted.forEach(d=>d()),this.patchProps(this.props),r}unmount(){var e;this.hooks.destroy.forEach(o=>o()),Object.values(this.hooks).forEach(o=>o.clear()),(e=this.rootNode)==null||e.unmount(),this.rootNode=null,this.proxyProps={},this.mounted=!1,this.emitter.forEach(o=>o());}getNodeTrack(e,o){let r=this.trackMap.get(e);return r||(r={cleanup:()=>{}},this.trackMap.set(e,r)),o||r.cleanup(),r}patchProps(e){var o,r,i,s;for(let[a,l]of Object.entries(e))if(shared.startsWith(a,"on")&&((o=this.rootNode)!=null&&o.nodes)){let d=a.slice(2).toLowerCase(),c=l,u=m(this.rootNode.nodes[0],d,c);this.emitter.add(u);}else if(a==="ref")e[a].value=(r=this.rootNode)==null?void 0:r.nodes[0];else if(shared.startsWith(a,"update"))e[a]=signal.isSignal(l)?l.value:l;else if(a!=="children"){let d=(s=(i=this.proxyProps)[a])!=null?s:i[a]=signal.useSignal(l),c=this.getNodeTrack(a);c.cleanup=signal.useEffect(()=>{d.value=shared.isFunction(l)?l():l;});}this.props=e;}};function me(t,n,e){return shared.isString(t)&&(V(t)&&(t=B(t),n={1:n}),t===""&&(n={0:n}),t=F(t)),shared.isFunction(t)?new y(t,n,e):new x(t,n,e)}function fe(t){return t instanceof y}function f(t){return t instanceof y||t instanceof x}function F(t){let n=document.createElement("template");return n.innerHTML=X(t),n}function he(t){return t.children}var q="area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr",Ne="a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,bgsound,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,dir,div,dl,dt,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,kbd,keygen,label,legend,li,link,listing,main,map,mark,marquee,menu,menuitem,meta,meter,nav,nobr,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,plaintext,pre,progress,q,rb,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,var,video,wbr,xmp";function A(t){if(f(t)||t instanceof Node)return t;let n=shared.isFalsy(t)?"":String(t);return document.createTextNode(n)}function g(t,n,e=null){let o=f(e)?e.firstChild:e;f(n)?n.mount(t,o):o?o.before(n):t.append(n);}function v(t){f(t)?t.unmount():t.parentNode&&t.remove();}function j(t,n,e){g(t,n,e),v(e);}function H(t,n,e){if(n==="class"){typeof e=="string"?t.className=e:Array.isArray(e)?t.className=e.join(" "):e&&typeof e=="object"&&(t.className=Object.entries(e).reduce((o,[r,i])=>o+(i?` ${r}`:""),"").trim());return}if(n==="style"){if(typeof e=="string")t.style.cssText=e;else if(e&&typeof e=="object"){let o=e;Object.keys(o).forEach(r=>{t.style.setProperty(shared.kebabCase(r),String(o[r]));});}return}shared.isFalsy(e)?t.removeAttribute(n):e===!0?t.setAttribute(n,""):t instanceof HTMLInputElement?t.value=String(e):t.setAttribute(n,String(e));}function W(t,n){if(t instanceof HTMLInputElement)switch(t.type){case"checkbox":return m(t,"change",()=>{n(!!t.checked);});case"date":return m(t,"change",()=>{n(t.value?t.value:"");});case"file":return m(t,"change",()=>{t.files&&n(t.files);});case"number":return m(t,"input",()=>{let e=Number.parseFloat(t.value);n(Number.isNaN(e)?"":String(e));});case"radio":return m(t,"change",()=>{n(t.checked?t.value:"");});case"text":return m(t,"input",()=>{n(t.value);})}if(t instanceof HTMLSelectElement)return m(t,"change",()=>{n(t.value);});if(t instanceof HTMLTextAreaElement)return m(t,"input",()=>{n(t.value);})}var D=Promise.resolve();function ye(t){return t?D.then(t):D}function m(t,n,e){return t.addEventListener(n,e),()=>t.removeEventListener(n,e)}function X(t){let n=q.split(","),e=[],o=[],r=/<\/?([\da-z-]+)([^>]*)>/gi,i=0;for(;;){let s=r.exec(t);if(!s)break;let[a,l]=s,d=a[1]==="/";if(o.push(t.slice(i,s.index)),i=s.index+a.length,d){for(;e.length>0&&e[e.length-1]!==l;){let c=e.pop();c&&o.push(`</${c}>`);}e.length>0&&e.pop();}else n.includes(l)||e.push(l);o.push(a);}for(o.push(t.slice(i));e.length>0;){let s=e.pop();s&&o.push(`</${s}>`);}return o.join("")}function V(t){return Ne.split(",").includes(t)}function B(t){return q.split(",").includes(t)?`<${t}/>`:`<${t}></${t}>`}function G(t,n,e,o){let r=new Map,i=Array.from(n.values()),s=i.length;if(n.size>0&&e.length===0){if(t.childNodes.length===s+(o?1:0))t.innerHTML="",o&&g(t,o);else {let c=document.createRange(),u=i[0],p=f(u)?u.firstChild:u;c.setStartBefore(p),o?c.setEndBefore(o):c.setEndAfter(t),c.deleteContents();}return i.forEach(c=>{f(c)&&c.unmount();}),r}let a=[],l=ve(e),d=0;for(let[c,u]of e.entries()){let p=i[d],b=C(p,c);for(;p&&!l.has(b);)v(p),n.delete(b),p=i[++d],b=C(p,c);let P=C(u,c),L=n.get(P);if(L&&(u=Te(t,L,u)),p)if(p===L)d++;else {let $=document.createComment("");g(t,$,p),a.push([$,u]);}else g(t,u,o);r.set(P,u);}return a.forEach(([c,u])=>j(t,u,c)),n.forEach((c,u)=>{c.isConnected&&!r.has(u)&&v(c);}),r}function Te(t,n,e){return n===e?n:f(n)&&f(e)&&n.template===e.template?(e.inheritNode(n),e):n instanceof Text&&e instanceof Text?(n.textContent!==e.textContent&&(n.textContent=e.textContent),n):(j(t,e,n),e)}function ve(t){let n=new Map;for(let[e,o]of t.entries()){let r=C(o,e);n.set(r,o);}return n}function C(t,n){if(f(t)){let e=t.key;if(e!=null)return String(e)}return `_$${n}$`}var x=class t{constructor(n,e,o){this.template=n;this.props=e;this.key=o;this.treeMap=new Map;this.mounted=!1;this.nodes=[];this.provides={};this.trackMap=new Map;this.parent=null;this.key=this.key||e.key;}get firstChild(){var n;return (n=this.nodes[0])!=null?n:null}get isConnected(){return this.mounted}addEventListener(){}removeEventListener(){}mount(n,e){var i;if(this.parent=n,this.isConnected)return this.nodes.forEach(s=>g(n,s,e)),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(n,o),g(n,o,e),this.patchNodes(this.props),this.mounted=!0,this.nodes}unmount(){this.trackMap.forEach(n=>{var e,o;(e=n.cleanup)==null||e.call(n),(o=n.lastNodes)==null||o.forEach(r=>{n.isRoot?v(r):r instanceof t&&r.unmount();});}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(n=>v(n)),this.nodes=[],this.mounted=!1;}mapNodeTree(n,e){let o=1;this.treeMap.set(0,n);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(e);}patchNodes(n){for(let e in n){let o=Number(e),r=this.treeMap.get(o);if(r){let i=this.props[e];this.patchNode(e,r,i,o===0);}}this.props=n;}getNodeTrack(n,e,o){var i;let r=this.trackMap.get(n);return r||(r={cleanup:()=>{}},e&&(r.lastNodes=new Map),o&&(r.isRoot=!0),this.trackMap.set(n,r)),(i=r.cleanup)==null||i.call(r),r}inheritNode(n){this.mounted=n.mounted,this.nodes=n.nodes,this.trackMap=n.trackMap,this.treeMap=n.treeMap;let e=this.props;this.props=n.props,this.patchNodes(e);}patchNode(n,e,o,r){for(let i in o)if(i==="children"&&o.children)if(shared.isArray(o.children))o.children.filter(Boolean).forEach((s,a)=>{var b;let[l,d]=shared.isArray(s)?s:[s,null],c=shared.isNil(d)?null:(b=this.treeMap.get(d))!=null?b:null,u=`${n}:${i}:${a}`,p=this.getNodeTrack(u,!0,r);ee(p,e,l,c);});else {let s=`${n}:${i}:0`,a=this.getNodeTrack(s,!0,r);ee(a,e,o.children,null);}else if(i==="ref")o[i].value=e;else if(shared.startsWith(i,"on")){let s=i.slice(2).toLocaleLowerCase(),a=this.getNodeTrack(`${n}:${i}`),l=o[i];a.cleanup=m(e,s,l);}else if(!shared.startsWith(i,"update")){let s=this.getNodeTrack(`${n}:${i}`),a=o[i],l=signal.isSignal(a)?a:signal.useSignal(a);_(s,e,i,l.value);let d=signal.useEffect(()=>{l.value=signal.isSignal(a)?a.value:a,_(s,e,i,l.value);}),c,u=`update${shared.capitalizeFirstLetter(i)}`;o[u]&&(c=W(e,p=>{o[u](p);})),s.cleanup=()=>{d&&d(),c&&c();};}}};function _(t,n,e,o){let r=n;r.setAttribute&&(shared.isFunction(o)?t.cleanup=signal.useEffect(()=>{H(r,e,o());}):H(r,e,o));}function ee(t,n,e,o){shared.isFunction(e)?t.cleanup=signal.useEffect(()=>{let r=shared.coerceArray(e()).map(A);t.lastNodes=G(n,t.lastNodes,r,o);}):shared.coerceArray(e).forEach((r,i)=>{let s=A(r);t.lastNodes.set(String(i),s),g(n,s,o);});}function Me(t){var n;M("onMounted"),(n=h.ref)==null||n.addHook("mounted",t);}function Se(t){var n;M("onDestroy"),(n=h.ref)==null||n.addHook("destroy",t);}function M(t,n){h.ref||console.error(`"${t}"(key: ${shared.isSymbol(n)?n.toString():n}) can only be called within the component function body
12
- and cannot be used in asynchronous or deferred calls.`);}function we(t,n){var e;M("useProvide",t),(e=h.ref)==null||e.setContext(t,n);}function Le(t,n){var e;return M("useInject",t),((e=h.ref)==null?void 0:e.getContext(t))||n}function Ae(){return signal.shallowSignal(null)}function $e(t){return Object.entries(t).map(([n,e])=>n==="children"||shared.isFunction(e)?"":`${n}="${shared.escape(String(e))}"`).filter(Boolean).join(" ")}function Ke(t){Object.keys(t).forEach(n=>{shared.isFunction(t[n])&&delete t[n],signal.isSignal(t[n])&&(t[n]=t[n].value);});}function Ie(t,n,e,o,r,i){if(signal.isSignal(t))o.template+=t.value;else if(t instanceof w){let s=i?String(i):`${e}`;r[s]||(r[s]=[]);let a=t.mount();r[s].push(shared.isFunction(a)?a(n):signal.isSignal(a)?a.value:a);}else o.template+=shared.isFunction(t)?t(n):String(t);}var w=class t extends h{constructor(e,o={},r){super();this.template=e;this.props=o;this.key=r;this.childNodesMap={};this.processedTemplates={};}mount(){this.initRef();let e=this.render();return this.removeRef(),e}initTemplates(){let e=Array.isArray(this.template)?this.template.reduce((o,r,i)=>(o[i+1]={template:r},o),{}):this.template;shared.isObject(e)&&Object.entries(e).forEach(([o,r])=>{let i=O({},this.props[o]);Ke(i),i.children&&i.children.forEach(s=>{let[a,l]=shared.isArray(s)?s:[s,null];if(shared.isFunction(a)){let d=a(i);Ie(d,i,o,r,this.childNodesMap,l);}else r.template+=signal.isSignal(a)?a.value:String(a);}),this.processedTemplates[o]={template:r.template,props:i};});}render(){if(shared.isFunction(this.template)){let e=this.template(this.props);return e instanceof t?e.mount():String(e)}return this.template instanceof t?this.template.mount():(this.initTemplates(),Object.entries(this.processedTemplates).map(([e,{template:o,props:r}])=>{let i=o;return r&&Object.keys(r).length>0&&(i+=` ${$e(r)}`),this.childNodesMap[e]&&(i=i.replace("<!>",this.renderChildren(this.childNodesMap[e]))),i}).join(""))}renderChildren(e){return shared.coerceArray(e).map(String).join("")}};function ne(t,n){return new w(t,n)}function Oe(t,n){return ne(t,n).mount()}
11
+ var J=new Map;var O=class{constructor(){this.renderMode=0;}get isSSG(){return this.renderMode===1}get isSSR(){return this.renderMode===2}get isClient(){return this.renderMode===0}setSSR(){this.renderMode=2;}setSSG(){this.renderMode=1;}setClient(){this.renderMode=0;}},p=new O;function F(t,e){J.set(t,{index:e});}function V(t){return J.get(t).index}var E=class E{constructor(){this.hooks={mounted:new Set,destroy:new Set};}addEventListener(){}removeEventListener(){}addHook(e,n){var o;(o=this.hooks[e])==null||o.add(n);}getContext(e){return E.context[e]}setContext(e,n){E.context[e]=n;}initRef(){E.ref=this;}removeRef(){E.ref=null;}clearHooks(){Object.values(this.hooks).forEach(e=>e.clear());}};E.ref=null,E.context={};var f=E;function w(t){return t instanceof v}var S=1,v=class extends f{constructor(n,o={},i){super();this.template=n;this.props=o;this.key=i;if(F(n,S),shared.isArray(this.template)){let r=" __PLACEHOLDER__ ",l=this.template.join(r).replaceAll(/(<[^>]+>)|([^<]+)/g,(c,a,u)=>a?a.includes("data-ci")?c:a.replace(/<\s*([\da-z]+)(\s[^>]*)?>/i,(d,T,x)=>`<${T} data-ci="${S}"${x||""}>`):u&&u.replace(r,"").trim()?`<!--0-${S}-->${u}<!$>`:c);this.template=l.split(r);}}mount(){this.initRef();let n=this.render();return this.removeRef(),n}render(){if(shared.isFunction(this.template)){let o=this.template(this.props);return w(o)?o.mount():String(o)}let n=this.template;return Object.keys(this.props).forEach(o=>{let i=this.props[o],r=i.children;ue(i);let s=n.findIndex(l=>l.includes(`data-hk="${o}"`));r&&r.forEach(([l])=>{S++;let c=z(l,i);this.template[s]+=c;}),this.template[s].replaceAll(`data-hk="${o}"`,`data-hk="${o}" ${de(i)}`);}),n.join("")}};function ue(t){Object.entries(t).forEach(([e,n])=>{e==="children"||shared.isFunction(n)?delete t[e]:signal.isSignal(n)&&(t[e]=n.value);});}function de(t){return Object.entries(t).filter(([e,n])=>e!=="children"&&!shared.isFunction(n)).map(([e,n])=>`${e}="${shared.escape(String(n))}"`).join(" ")}function z(t,e){if(shared.isFunction(t))return z(t(e),e);if(signal.isSignal(t))return `<!--1-${S}-->${t.value}<!$>`;if(w(t)){let n=t.mount();return shared.isFunction(n)?n(e):L(n)}else return `<!--1-${S}-->${t}<!$>`}var U="area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr".split(","),he="a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,bgsound,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,dir,div,dl,dt,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,kbd,keygen,label,legend,li,link,listing,main,map,mark,marquee,menu,menuitem,meta,meter,nav,nobr,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,plaintext,pre,progress,q,rb,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,var,video,wbr,xmp".split(",");function j(t){if(h(t)||t instanceof Node||w(t))return t;let e=shared.isFalsy(t)?"":String(t);return document.createTextNode(e)}function N(t,e,n=null){let o=h(n)?n.firstChild:n,i=p.isSSR;h(e)?e.mount(t,o):o&&!i?o.before(e):i||t.append(e);}function b(t){h(t)?t.unmount():t.parentNode&&t.remove();}function I(t,e,n){N(t,e,n),b(n);}function K(t,e,n){if(e==="class"){typeof n=="string"?t.className=n:shared.isArray(n)?t.className=n.join(" "):n&&typeof n=="object"&&(t.className=Object.entries(n).reduce((o,[i,r])=>o+(r?` ${i}`:""),"").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(i=>{t.style.setProperty(shared.kebabCase(i),String(o[i]));});}return}shared.isFalsy(n)?t.removeAttribute(e):n===!0?t.setAttribute(e,""):t instanceof HTMLInputElement&&e==="value"?t.value=String(n):t.setAttribute(e,String(n));}function W(t,e){if(t instanceof HTMLInputElement)switch(t.type){case"checkbox":return m(t,"change",()=>{e(!!t.checked);});case"date":return m(t,"change",()=>{e(t.value?t.value:"");});case"file":return m(t,"change",()=>{t.files&&e(t.files);});case"number":return m(t,"input",()=>{let n=Number.parseFloat(t.value);e(Number.isNaN(n)?"":String(n));});case"radio":return m(t,"change",()=>{e(t.checked?t.value:"");});case"text":return m(t,"input",()=>{e(t.value);})}if(t instanceof HTMLSelectElement)return m(t,"change",()=>{e(t.value);});if(t instanceof HTMLTextAreaElement)return m(t,"input",()=>{e(t.value);})}Promise.resolve();function m(t,e,n){return t.addEventListener(e,n),()=>t.removeEventListener(e,n)}function Q(t){let e=[],n=[],o=/<\/?([\da-z-]+)([^>]*)>/gi,i=0;for(;;){let r=o.exec(t);if(!r)break;let[s,l]=r,c=s[1]==="/";if(n.push(t.slice(i,r.index)),i=r.index+s.length,c){for(;e.length>0&&e[e.length-1]!==l;){let a=e.pop();a&&n.push(`</${a}>`);}e.length>0&&e.pop();}else U.includes(l)||e.push(l);n.push(s);}for(n.push(t.slice(i));e.length>0;){let r=e.pop();r&&n.push(`</${r}>`);}return n.join("")}function Y(t){return he.includes(t)}function Z(t){return U.includes(t)?`<${t}/>`:`<${t}></${t}>`}function L(t){return signal.isSignal(t)?t.value:t}var C=class extends f{constructor(n,o,i){super();this.template=n;this.props=o;this.key=i;this.emitter=new Set;this.rootNode=null;this.trackMap=new Map;this.proxyProps=o?signal.useReactive(o,r=>shared.startsWith(r,"on")||shared.startsWith(r,"update")||r==="children"):{};}get firstChild(){var n,o;return (o=(n=this.rootNode)==null?void 0:n.firstChild)!=null?o:null}get isConnected(){var n,o;return (o=(n=this.rootNode)==null?void 0:n.isConnected)!=null?o:!1}mount(n,o){var r,s,l,c;if(!shared.isFunction(this.template))throw new Error("Template must be a function");if(this.isConnected)return (s=(r=this.rootNode)==null?void 0:r.mount(n,o))!=null?s:[];this.initRef(),this.rootNode=this.template(this.proxyProps);let i=(c=(l=this.rootNode)==null?void 0:l.mount(n,o))!=null?c:[];return this.hooks.mounted.forEach(a=>a()),this.patchProps(this.props),this.removeRef(),i}unmount(){var n;this.hooks.destroy.forEach(o=>o()),this.clearHooks(),(n=this.rootNode)==null||n.unmount(),this.rootNode=null,this.proxyProps={};for(let o of this.emitter)o();this.emitter.clear();}inheritNode(n){Object.assign(this.proxyProps,n.proxyProps),this.rootNode=n.rootNode,this.trackMap=n.trackMap,this.hooks=n.hooks;let o=this.props;this.props=n.props,this.patchProps(o);}getNodeTrack(n){let o=this.trackMap.get(n);return o||(o={cleanup:()=>{}},this.trackMap.set(n,o)),o.cleanup(),o}patchProps(n){var o,i;if(n){for(let[r,s]of Object.entries(n))if(shared.startsWith(r,"on")&&((o=this.rootNode)!=null&&o.firstChild)){let l=r.slice(2).toLowerCase(),c=m(this.rootNode.nodes[0],l,s);this.emitter.add(c);}else if(r==="ref")s.value=(i=this.rootNode)==null?void 0:i.firstChild;else if(shared.startsWith(r,"update"))this.props[r]=L(s);else if(r!=="children"){let l=this.getNodeTrack(r);l.cleanup=signal.useEffect(()=>{this.proxyProps[r]=shared.isFunction(s)?s():s;});}this.props=n;}}};function te(t,e,n,o){let i=new Map,r=Array.from(e.values());if(e.size>0&&n.length===0)return Te(t,r,o),i;let s=[],l=xe(n),c=0;for(let[a,u]of n.entries()){let d=r[c],T=y(d,a);for(;d&&!l.has(T);)b(d),e.delete(T),d=r[++c],T=y(d,a);let x=y(u,a),R=e.get(x);if(R&&(u=Ee(t,R,u)),d)if(d===R)c++;else {let G=document.createComment("");N(t,G,d),s.push([G,u]);}else N(t,u,o);i.set(x,u);}return s.forEach(([a,u])=>I(t,u,a)),e.forEach((a,u)=>{a.isConnected&&!i.has(u)&&b(a);}),i}function Te(t,e,n){if(t.childNodes.length===e.length+(n?1:0))t.innerHTML="",n&&N(t,n);else {let o=document.createRange(),i=e[0],r=h(i)?i.firstChild:i;o.setStartBefore(r),n?o.setEndBefore(n):o.setEndAfter(t),o.deleteContents();}e.forEach(o=>{h(o)&&o.unmount();});}function Ee(t,e,n){return e===n?e:h(e)&&h(n)&&e.template===n.template?(n.inheritNode(e),n):e instanceof Text&&n instanceof Text?(e.textContent!==n.textContent&&(e.textContent=n.textContent),e):(I(t,n,e),n)}function xe(t){let e=new Map;for(let[n,o]of t.entries()){let i=y(o,n);e.set(i,o);}return e}function y(t,e){if(h(t)){let n=t.key;if(n!=null)return String(n)}return `_$${e}$`}var M=class{constructor(e,n,o){this.template=e;this.props=n;this.key=o;this.treeMap=new Map;this.mounted=!1;this.nodes=[];this.trackMap=new Map;this.bindValueKeys=[];this.parent=null;this.key||(this.key=n==null?void 0:n.key),p.isSSR&&(this.componentIndex=V(this.template));}addEventListener(){}removeEventListener(){}get firstChild(){var e;return (e=this.nodes[0])!=null?e:null}get isConnected(){return this.mounted}mount(e,n){var r;if(this.parent=e,this.isConnected)return this.nodes.forEach(s=>N(e,s,n)),this.nodes;shared.isArray(this.template)&&(this.template=P(this.template.join("")));let o=this.template.content.cloneNode(!0),i=o.firstChild;return (r=i==null?void 0:i.hasAttribute)!=null&&r.call(i,"_svg_")&&(i.remove(),i==null||i.childNodes.forEach(s=>{o.append(s);})),this.nodes=Array.from(o.childNodes),p.isSSR?this.mapSSGNodeTree(e):this.mapNodeTree(e,o),N(e,o,n),this.patchProps(this.props),this.mounted=!0,this.nodes}unmount(){this.trackMap.forEach(e=>{var n;(n=e.cleanup)==null||n.call(e);}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(e=>b(e)),this.nodes=[],this.mounted=!1;}patchProps(e){e&&(Object.entries(e).forEach(([n,o])=>{let i=Number(n),r=this.treeMap.get(i);r&&this.patchProp(n,r,o,i===0);}),this.props=e);}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.patchProps(n);}mapSSGNodeTree(e){this.treeMap.set(0,e);let n=o=>{var r;if(o.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){if(o.nodeType===Node.COMMENT_NODE){let[s,l]=((r=o.textContent)==null?void 0:r.split("-"))||"";if(0===+s&&+l===this.componentIndex){let c=o.nextSibling;this.treeMap.set(+l,c);}}else if(o.nodeType!==Node.TEXT_NODE){let{ci:s="-1",hk:l}=(o==null?void 0:o.dataset)||{};l&&+s===this.componentIndex&&this.treeMap.set(+l,o);}}let i=o.firstChild;for(;i;)n(i),i=i.nextSibling;};n(e);}mapNodeTree(e,n){let o=1;this.treeMap.set(0,e);let i=[e],r=s=>{s.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(this.treeMap.set(o++,s),i.push(s));let l=s.firstChild;for(;l;)r(l),l=l.nextSibling;};r(n);}getNodeTrack(e,n,o){var r;let i=this.trackMap.get(e);return i||(i={cleanup:()=>{}},n&&(i.lastNodes=new Map),o&&(i.isRoot=!0),this.trackMap.set(e,i)),(r=i.cleanup)==null||r.call(i),i}patchProp(e,n,o,i){for(let r in o)if(r==="children"&&o.children)if(shared.isArray(o.children))o.children.filter(Boolean).forEach((s,l)=>{var x;let[c,a]=shared.isArray(s)?s:[s,null],u=shared.isNil(a)?null:(x=this.treeMap.get(a))!=null?x:null,d=`${e}:${r}:${l}`,T=this.getNodeTrack(d,!0,i);re(T,n,c,u);});else {let s=`${e}:${r}:0`,l=this.getNodeTrack(s,!0,i);re(l,n,o.children,null);}else if(r==="ref")o[r].value=n;else if(shared.startsWith(r,"on")){let s=r.slice(2).toLocaleLowerCase(),l=this.getNodeTrack(`${e}:${r}`),c=o[r];l.cleanup=m(n,s,c);}else {let s=`update${shared.capitalizeFirstLetter(r)}`;if(this.bindValueKeys.includes(r))break;o[s]&&this.bindValueKeys.push(s);let l=this.getNodeTrack(`${e}:${r}`),c=o[r],a=signal.isSignal(c)?c:signal.useSignal(c);se(l,n,r,a.value);let u=signal.useEffect(()=>{a.value=signal.isSignal(c)?c.value:c,se(l,n,r,a.value);}),d;o[s]&&!D(r)&&(d=W(n,T=>{o[s](T);})),l.cleanup=()=>{u&&u(),d&&d();};}}};function re(t,e,n,o){shared.isFunction(n)?t.cleanup=signal.useEffect(()=>{let i=shared.coerceArray(n()).map(j);p.isSSR?t.lastNodes=ie(e,i,o):t.lastNodes=te(e,t.lastNodes,i,o);}):shared.coerceArray(n).forEach((i,r)=>{let s=j(i),l=y(s,r);p.isSSR?t.lastNodes=ie(e,[s],o):(t.lastNodes.set(l,s),N(e,s,o));});}function ie(t,e,n){let o=new Map,i=Array.from(t.childNodes).filter(r=>{var s,l;return r.nodeType===Node.TEXT_NODE&&((s=r.previousSibling)==null?void 0:s.nodeType)===Node.COMMENT_NODE&&((l=r.nextSibling)==null?void 0:l.nodeType)===Node.COMMENT_NODE});return e.forEach((r,s)=>{let l=y(r,s);r.nodeType===Node.TEXT_NODE?i.forEach(c=>{r.textContent===c.textContent&&t.replaceChild(r,c);}):N(t,r,n),o.set(l,r);}),o}function se(t,e,n,o){let i=e;i.setAttribute&&(shared.isFunction(o)?t.cleanup=signal.useEffect(()=>{K(i,n,o());}):K(i,n,o));}function A(t,e,n){return shared.isString(t)&&(Y(t)?(t=Z(t),e={1:e}):t===""&&(e={0:e}),t=P(t)),shared.isFunction(t)?new C(t,e,n):new M(t,e,n)}function D(t){return t instanceof C}function h(t){return t instanceof C||t instanceof M}function P(t){let e=document.createElement("template");return e.innerHTML=Q(t),e}function Me(t){return t.children}function Le(t){var e;(e=f.ref)==null||e.addHook("mounted",t);}function $e(t){var e;(e=f.ref)==null||e.addHook("destroy",t);}function Pe(t,e){var n;(n=f.ref)==null||n.setContext(t,e);}function Ae(t,e){var n;return ((n=f.ref)==null?void 0:n.getContext(t))||e}function He(){return signal.shallowSignal(null)}function Re(t,e){p.setSSG();let o=new v(t,e||{}).mount();return p.setClient(),o}function Oe(t,e){let n=typeof e=="string"?document.querySelector(e):e;if(!n)throw new Error(`Could not find container: ${e}`);p.setSSR(),A(t).mount(n),p.setClient();}function je(t,e){return p.isSSG?new v(t,e):A(t,e)}
13
12
 
14
- exports.ComponentNode = y;
15
- exports.Fragment = he;
16
- exports.TemplateNode = x;
17
- exports.h = me;
18
- exports.isComponent = fe;
19
- exports.isJsxElement = f;
20
- exports.nextTick = ye;
21
- exports.onDestroy = Se;
22
- exports.onMount = Me;
23
- exports.renderToString = Oe;
24
- exports.ssg = ne;
25
- exports.template = F;
26
- exports.useInject = Le;
27
- exports.useProvide = we;
28
- exports.useRef = Ae;
13
+ exports.Fragment = Me;
14
+ exports.h = A;
15
+ exports.hydrate = Oe;
16
+ exports.isComponent = D;
17
+ exports.isJsxElement = h;
18
+ exports.onDestroy = $e;
19
+ exports.onMount = Le;
20
+ exports.renderToString = Re;
21
+ exports.ssg = je;
22
+ exports.template = P;
23
+ exports.useInject = Ae;
24
+ exports.useProvide = Pe;
25
+ exports.useRef = He;
29
26
  //# sourceMappingURL=template.cjs.js.map
30
27
  //# sourceMappingURL=template.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/template-node.ts","../src/component-node.ts","../src/template.ts","../src/utils.ts","../src/patch.ts","../src/hooks.ts","../src/server-render.ts"],"names":["_Hooks","hook","cb","_a","context","value","Hooks","ComponentNode","template","props","key","signalObject","startsWith","_b","node","parent","before","_c","_d","isFunction","useReactive","mountedNode","handler","set","emitter","trackKey","suppressCleanupCall","track","prop","event","listener","cleanup","addEventListener","isSignal","newValue","useSignal","useEffect","h","_template","isString","isHtmlTagName","convertToHtmlTag","TemplateNode","isComponent","isJsxElement","html","closeHtmlTags","Fragment","selfClosingTags","htmlTags","coerceNode","data","text","isFalsy","insertChild","child","beforeNode","removeChild","replaceChild","setAttribute","element","attr","acc","obj","kebabCase","binNode","setter","p","nextTick","fn","eventName","input","selfClosingTagList","tagStack","output","tagPattern","lastIndex","match","fullMatch","tagName","isEndTag","unclosedTag","patchChildren","childrenMap","nextChildren","result","children","childrenLength","range","start","replaces","nextChildrenMap","mapKeys","childIndex","i","currChild","currKey","getKey","origChild","patch","placeholder","next","index","jsxKey","_TemplateNode","cloneNode","firstChild","tree","walk","trackLastNodes","isRoot","isArray","item","path","isNil","patchChild","val","triggerValue","patchAttribute","cleanupBind","updateKey","capitalizeFirstLetter","nextNodes","coerceArray","newNode","onMount","throwIfOutsideComponent","onDestroy","isSymbol","useProvide","useInject","defaultValue","useRef","shallowSignal","generateAttributes","escape","normalizeProps","propKey","handleChildResult","tmpl","childNodesMap","ServerNode","mapKey","childResult","_ServerNode","templateCollection","isObject","__spreadValues","root","content","ssg","component","renderToString"],"mappings":"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","file":"template.cjs.js","sourcesContent":["import {\n capitalizeFirstLetter,\n coerceArray,\n isArray,\n isFunction,\n isNil,\n startsWith,\n} from '@estjs/shared';\nimport { isSignal, useEffect, useSignal } from '@estjs/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 constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {\n this.key = this.key || (props.key as string);\n }\n treeMap = new Map<number, Node>();\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n parent: Node | null = null;\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 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 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 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.filter(Boolean).forEach((item, index) => {\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 // handle ref\n } else if (attr === 'ref') {\n props[attr].value = node;\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 // attr\n } else if (!startsWith(attr, 'update')) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n\n const val = props[attr];\n\n const triggerValue = isSignal(val) ? val : useSignal(val);\n patchAttribute(track, node, attr, triggerValue.value);\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${capitalizeFirstLetter(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 { isFunction, startsWith } from '@estjs/shared';\nimport { isSignal, signalObject } from '@estjs/signal';\nimport { type Signal, useEffect, useReactive, useSignal } from '@estjs/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 Hooks {\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: Hooks | null = null;\n static context: Record<symbol, Signal<any>> = {};\n\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\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 Hooks.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n Hooks.context[context] = value;\n }\n\n initRef() {\n Hooks.ref = this;\n }\n removeRef() {\n Hooks.ref = null;\n }\n}\n\nexport class ComponentNode extends Hooks implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, any>,\n public key?: string,\n ) {\n super();\n this.proxyProps = signalObject(\n props,\n key => startsWith(key, 'on') || startsWith(key, 'update'),\n );\n\n this.key = this.key || props.key;\n }\n\n private proxyProps: Record<string, Signal<any>> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n context: Record<symbol | string | number, any> = {};\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 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 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 this.initRef();\n this.rootNode = this.template(useReactive(this.proxyProps, ['children']));\n this.removeRef();\n this.mounted = true;\n\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\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 }\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 (props[key] as Signal<unknown>).value = this.rootNode?.nodes[0];\n } else if (startsWith(key, 'update')) {\n props[key] = isSignal(prop) ? prop.value : prop;\n } else if (key !== 'children') {\n const newValue = (this.proxyProps[key] ??= useSignal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = useEffect(() => {\n newValue.value = isFunction(prop) ? prop() : prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFunction, isString } from '@estjs/shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport { closeHtmlTags, convertToHtmlTag, isHtmlTagName } from './utils';\nimport type { EssorComponent, EssorNode } from '../types';\n\nexport function h<K extends keyof HTMLElementTagNameMap>(\n _template: EssorComponent | HTMLTemplateElement | K | '',\n props: Record<string, unknown>,\n key?: string,\n): JSX.Element {\n if (isString(_template)) {\n if (isHtmlTagName(_template)) {\n (_template as string) = convertToHtmlTag(_template);\n props = {\n 1: props,\n };\n }\n if (_template === '') {\n props = {\n 0: props,\n };\n }\n _template = template(_template);\n }\n\n return isFunction(_template)\n ? new ComponentNode(_template, props, key)\n : new TemplateNode(_template as HTMLTemplateElement, props, key);\n}\n\nexport function isComponent(node: unknown) {\n return node instanceof ComponentNode;\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 = closeHtmlTags(html);\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFalsy, kebabCase } from '@estjs/shared';\nimport { isJsxElement } from './template';\n\nconst selfClosingTags = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\nconst htmlTags =\n 'a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,bgsound,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,dir,div,dl,dt,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,kbd,keygen,label,legend,li,link,listing,main,map,mark,marquee,menu,menuitem,meta,meter,nav,nobr,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,plaintext,pre,progress,q,rb,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,var,video,wbr,xmp';\n\n/**\n * Converts any data to a Node or JSX.Element type.\n * @param data - The data to be coerced into a Node or JSX.Element.\n * @returns A Node or JSX.Element.\n */\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\n/**\n * Inserts a child Node or JSX.Element into a parent Node at a specified position.\n * @param parent - The parent Node where the child will be inserted.\n * @param child - The child Node or JSX.Element to insert.\n * @param before - The Node or JSX.Element before which the new child will be inserted.\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\n/**\n * Removes a child Node or JSX.Element from its parent.\n * @param child - The child Node or JSX.Element to remove.\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\n/**\n * Replaces an existing child Node or JSX.Element with a new one in a parent Node.\n * @param parent - The parent Node where the replacement will occur.\n * @param node - The new Node or JSX.Element to insert.\n * @param child - The existing Node or JSX.Element to be replaced.\n */\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n insertChild(parent, node, child);\n removeChild(child);\n}\n\n/**\n * Sets an attribute on an HTMLElement, handling special cases for 'class' and 'style'.\n * @param element - The HTMLElement on which to set the attribute.\n * @param attr - The attribute name.\n * @param value - The attribute value.\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 if (element instanceof HTMLInputElement) {\n element.value = String(value);\n } else {\n element.setAttribute(attr, String(value));\n }\n }\n}\n\n/**\n * Binds an event listener to an input element to update a state setter based on the input type.\n * @param node - The input HTML element to bind the event listener to.\n * @param setter - The function to call when the input value changes.\n */\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n switch (node.type) {\n case 'checkbox':\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n case 'date':\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n case 'file':\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n case 'number':\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n case 'radio':\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n case '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}\n\n/**\n * Defers the execution of a function until the next tick of the event loop.\n * @param fn - The function to be executed on the next tick.\n * @returns A Promise that resolves after the next tick.\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 addEventListener(type: string, listener: Listener<unknown>): void;\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\n/**\n * Adds an event listener to a DOM node and returns a function to remove it.\n * @param node - The target node to add the event listener to.\n * @param eventName - The name of the event.\n * @param handler - The event handler function.\n * @returns A function to remove the event listener.\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\n/**\n * Closes unclosed HTML tags in a given input string.\n * @param input - The input HTML string to process.\n * @returns The HTML string with unclosed tags properly closed.\n */\nexport function closeHtmlTags(input: string): string {\n const selfClosingTagList = selfClosingTags.split(',');\n const tagStack: string[] = [];\n const output: string[] = [];\n const tagPattern = /<\\/?([\\da-z-]+)([^>]*)>/gi;\n let lastIndex = 0;\n\n while (true) {\n const match = tagPattern.exec(input);\n if (!match) break;\n\n const [fullMatch, tagName] = match;\n const isEndTag = fullMatch[1] === '/';\n\n // Push text content between tags\n output.push(input.slice(lastIndex, match.index));\n lastIndex = match.index + fullMatch.length;\n\n if (isEndTag) {\n // Handle end tag\n while (tagStack.length > 0 && tagStack[tagStack.length - 1] !== tagName) {\n const unclosedTag = tagStack.pop();\n if (unclosedTag) {\n output.push(`</${unclosedTag}>`);\n }\n }\n if (tagStack.length > 0) {\n tagStack.pop(); // pop the matching start tag\n }\n } else if (!selfClosingTagList.includes(tagName)) {\n // Handle start tag\n tagStack.push(tagName);\n }\n output.push(fullMatch); // Push the current tag\n }\n\n // Add any remaining unclosed tags\n output.push(input.slice(lastIndex));\n while (tagStack.length > 0) {\n const unclosedTag = tagStack.pop();\n if (unclosedTag) {\n output.push(`</${unclosedTag}>`);\n }\n }\n\n return output.join('');\n}\n\n/**\n * Checks if a given tag name is a valid HTML tag.\n * @param tagName - The tag name to check.\n * @returns A boolean indicating if the tag name is valid.\n */\nexport function isHtmlTagName(tagName: string): tagName is keyof HTMLElementTagNameMap {\n const htmlTagsList = htmlTags.split(',');\n return htmlTagsList.includes(tagName);\n}\n\n/**\n * Converts a string to a valid HTML tag name.\n * @param tagName - The input string to convert.\n * @returns The valid HTML tag name.\n */\nexport function convertToHtmlTag(tagName: string): string {\n const selfClosingTagList = selfClosingTags.split(',');\n if (selfClosingTagList.includes(tagName)) {\n return `<${tagName}/>`;\n } else {\n return `<${tagName}></${tagName}>`;\n }\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 = Array.from(childrenMap.values());\n const childrenLength = children.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parent.childNodes.length === childrenLength + (before ? 1 : 0)) {\n (parent as Element).innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children[0];\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 children.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n let childIndex = 0;\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children[childIndex];\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children[++childIndex];\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 === origChild) {\n childIndex++;\n } else {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\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\nfunction 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}\nexport function getKey(node: AnyNode, index: number): string {\n if (isJsxElement(node)) {\n // use jsx key\n const jsxKey = (node as any).key;\n if (jsxKey !== undefined && jsxKey !== null) {\n return String(jsxKey);\n }\n }\n\n // use index\n return `_$${index}$`;\n}\n","import { isSymbol } from '@estjs/shared';\nimport { type Signal, shallowSignal } from '@estjs/signal';\nimport { Hooks } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n Hooks.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n Hooks.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string, key?: unknown) {\n if (!Hooks.ref) {\n console.error(\n `\"${hook}\"(key: ${isSymbol(key) ? key.toString() : key}) can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types, unused-imports/no-unused-vars\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', key);\n\n Hooks.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): (K extends InjectionKey<infer V> ? V : T) | undefined {\n throwIfOutsideComponent('useInject', key);\n return Hooks.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 * Creates a reactive ref that can be used to reference a DOM node\n * or a component instance within the component function body.\n *\n * @returns a reactive ref signal\n *\n * @example\n * const inputRef = useRef(')\n *\n * <input ref={inputRef} />\n *\n * inputRef.value // input element\n */\nexport function useRef<T>(): Signal<T | null> {\n const ref = shallowSignal<T | null>(null);\n return ref;\n}\n","import { coerceArray, escape, isArray, isFunction, isObject } from '@estjs/shared';\nimport { isSignal } from '@estjs/signal';\nimport { Hooks } from './component-node';\nimport type { EssorNode } from '../types';\n\ninterface TemplateEntry {\n template: string;\n props?: Record<string, any>;\n}\n\ninterface TemplateCollection {\n [key: number]: TemplateEntry;\n}\n\ntype Props = Record<string, any>;\n\n/**\n * Convert properties into HTML attributes string\n * Exclude 'children' and function values\n */\nfunction generateAttributes(props: Props): string {\n return Object.entries(props)\n .map(([key, value]) => {\n if (key === 'children' || isFunction(value)) return '';\n return `${key}=\"${escape(String(value))}\"`;\n })\n .filter(Boolean)\n .join(' ');\n}\n\n/**\n * Handle signal and function values from props\n */\nfunction normalizeProps(props: Props) {\n Object.keys(props).forEach(propKey => {\n if (isFunction(props[propKey])) {\n delete props[propKey]; // Remove functions from props\n }\n if (isSignal(props[propKey])) {\n props[propKey] = props[propKey].value; // Resolve signals to values\n }\n });\n}\n\n/**\n * Process the result of rendering child nodes\n */\nfunction handleChildResult(\n result: any,\n prop: Props,\n key: string,\n tmpl: TemplateEntry,\n childNodesMap: Record<string, EssorNode[]>,\n path?: string,\n) {\n if (isSignal(result)) {\n tmpl.template += result.value;\n } else if (result instanceof ServerNode) {\n const mapKey = path ? String(path) : `${key}`;\n if (!childNodesMap[mapKey]) childNodesMap[mapKey] = [];\n const childResult = result.mount();\n\n childNodesMap[mapKey].push(\n isFunction(childResult)\n ? childResult(prop)\n : isSignal(childResult)\n ? childResult.value\n : childResult,\n );\n } else {\n tmpl.template += isFunction(result) ? result(prop) : String(result);\n }\n}\n\nexport class ServerNode extends Hooks {\n private childNodesMap: Record<string, EssorNode[]> = {};\n private processedTemplates: TemplateCollection = {};\n\n constructor(\n private template: string[] | EssorNode | Function,\n private props: Props = {},\n public key?: string,\n ) {\n super();\n }\n\n /**\n * Mount and render the component\n */\n mount(): string {\n this.initRef();\n const output = this.render();\n this.removeRef();\n return output;\n }\n\n /**\n * Initialize template entries and props\n */\n private initTemplates() {\n const templateCollection: TemplateCollection = Array.isArray(this.template)\n ? this.template.reduce((acc, tmpl, index) => {\n acc[index + 1] = { template: tmpl };\n return acc;\n }, {})\n : this.template;\n\n if (isObject(templateCollection)) {\n Object.entries(templateCollection).forEach(([key, tmpl]) => {\n const prop = { ...this.props[key] };\n\n // Normalize props (resolve signals and remove functions)\n normalizeProps(prop);\n\n // Handle child nodes\n if (prop.children) {\n prop.children.forEach(item => {\n const [child, path] = isArray(item) ? item : [item, null];\n\n if (isFunction(child)) {\n const result = child(prop); // Pass props to child component\n handleChildResult(result, prop, key, tmpl, this.childNodesMap, path);\n } else {\n tmpl.template += isSignal(child) ? child.value : String(child);\n }\n });\n }\n\n // Store processed template and props\n this.processedTemplates[key] = {\n template: tmpl.template,\n props: prop,\n };\n });\n }\n }\n\n /**\n * Render component and its children into a string\n */\n render(): string {\n if (isFunction(this.template)) {\n const root = this.template(this.props);\n return root instanceof ServerNode ? root.mount() : String(root);\n }\n\n if (this.template instanceof ServerNode) {\n return this.template.mount();\n }\n\n this.initTemplates();\n\n return Object.entries(this.processedTemplates)\n .map(([key, { template, props }]) => {\n let content = template;\n if (props && Object.keys(props).length > 0) {\n content += ` ${generateAttributes(props)}`;\n }\n\n // Replace placeholder with child nodes' rendered content\n if (this.childNodesMap[key]) {\n content = content.replace('<!>', this.renderChildren(this.childNodesMap[key]));\n }\n\n return content;\n })\n .join('');\n }\n\n /**\n * Render child nodes into a string\n */\n private renderChildren(children: any[]): string {\n return coerceArray(children).map(String).join('');\n }\n}\n\ntype ServerNodeType = (props: Props) => ServerNode;\n/**\n * Create ServerNode for server-side generation (SSG)\n */\nexport function ssg(component: string[] | ServerNodeType, props?: Props) {\n return new ServerNode(component, props);\n}\n\n/**\n * Render a component to string for SSR\n */\nexport function renderToString(component: any, props?: Props): string {\n return ssg(component, props).mount();\n}\n"]}
1
+ {"version":3,"sources":["../src/shared-config.ts","../src/lifecycle-context.ts","../src/ssg-node.ts","../src/utils.ts","../src/component-node.ts","../src/patch.ts","../src/template-node.ts","../src/jsx-renderer.ts","../src/hooks.ts","../src/hydration.ts"],"names":["componentMap","RenderContext","renderContext","enterComponent","temp","index","getComponentIndex","_LifecycleContext","hook","cb","_a","context","value","set","LifecycleContext","isSSGNode","node","SSGNode","componentIndex","template","props","key","isArray","PLACEHOLDER","processedString","match","p1","p2","_","tagName","attrs","output","isFunction","root","cur","childrens","normalizeProp","findIndex","t","child","children","renderChildren","generateAttributes","isSignal","escape","prop","childResult","extractSignal","selfClosingTags","htmlTags","coerceNode","data","isJsxElement","text","isFalsy","insertChild","parent","before","beforeNode","ssr","removeChild","replaceChild","setAttribute","element","attr","acc","obj","kebabCase","bindNode","setter","addEventListener","eventName","handler","closeHtmlTags","input","tagStack","tagPattern","lastIndex","fullMatch","isEndTag","unclosedTag","isHtmlTagName","convertToHtmlTag","signal","ComponentNode","useReactive","startsWith","_b","_c","_d","mountedNode","cleanup","trackKey","track","event","useEffect","patchChildren","childrenMap","nextChildren","result","clearChildren","replaces","nextChildrenMap","mapKeys","childIndex","i","currChild","currKey","getKey","origChild","patch","placeholder","range","start","next","jsxKey","TemplateNode","createTemplate","cloneNode","firstChild","walk","type","textNode","ci","hk","tree","arr","trackLastNodes","isRoot","item","path","isNil","patchChild","listener","updateKey","capitalizeFirstLetter","val","triggerValue","useSignal","patchAttribute","cleanupBind","isComponent","nextNodes","coerceArray","reconcileChildren","newNode","textNodes","ne","h","isString","html","Fragment","onMount","assertInsideComponent","onDestroy","useProvide","useInject","defaultValue","useRef","shallowSignal","renderToString","component","hydrate","container","rootElement","ssg"],"mappings":"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","file":"template.cjs.js","sourcesContent":["const componentMap = new Map();\n\n/**\n * framework render type\n *\n * CLIENT: client side\n * SSR: server side render\n * SSG: server side generate\n */\nexport enum RENDER_MODE {\n CLIENT,\n SSG,\n SSR,\n}\n\nclass RenderContext {\n renderMode = RENDER_MODE.CLIENT;\n\n get isSSG() {\n return this.renderMode === RENDER_MODE.SSG;\n }\n\n get isSSR() {\n return this.renderMode === RENDER_MODE.SSR;\n }\n\n get isClient() {\n return this.renderMode === RENDER_MODE.CLIENT;\n }\n\n setSSR() {\n this.renderMode = RENDER_MODE.SSR;\n }\n\n setSSG() {\n this.renderMode = RENDER_MODE.SSG;\n }\n\n setClient() {\n this.renderMode = RENDER_MODE.CLIENT;\n }\n}\n\nexport const renderContext = new RenderContext();\n\nexport function enterComponent(temp, index) {\n componentMap.set(temp, {\n index,\n });\n}\n\nexport function getComponentIndex(temp) {\n return componentMap.get(temp).index;\n}\n","import type { Signal } from '@estjs/signal';\nimport type { Hook } from '../types';\n\n// create lifecycle and context\nexport class LifecycleContext {\n addEventListener(): void {}\n removeEventListener(): void {}\n\n // current context ref\n static ref: LifecycleContext | null = null;\n static context: Record<symbol, Signal<any>> = {};\n\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\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 LifecycleContext.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n LifecycleContext.context[context] = value;\n }\n\n initRef() {\n LifecycleContext.ref = this;\n }\n removeRef() {\n LifecycleContext.ref = null;\n }\n\n clearHooks(): void {\n Object.values(this.hooks).forEach(set => set.clear());\n }\n}\n","import { escape, isArray, isFunction } from '@estjs/shared';\nimport { isSignal } from '@estjs/signal';\nimport { LifecycleContext } from './lifecycle-context';\nimport { extractSignal } from './utils';\nimport { enterComponent } from './shared-config';\nimport type { Signal } from '@estjs/signal/*';\nimport type { EssorNode, Props } from '../types';\n\nexport enum componentType {\n TEXT,\n TEXT_COMPONENT,\n COMPONENT,\n}\n\nexport function isSSGNode(node: unknown): node is SSGNode {\n return node instanceof SSGNode;\n}\nlet componentIndex = 1;\nexport class SSGNode extends LifecycleContext {\n templates: string;\n constructor(\n private template: string[] | SSGNode | ((props: Props) => SSGNode),\n private props: Props = {},\n public key?: string,\n ) {\n super();\n\n enterComponent(template, componentIndex);\n if (isArray(this.template)) {\n const PLACEHOLDER = ' __PLACEHOLDER__ ';\n const htmlString = this.template.join(PLACEHOLDER);\n const processedString = htmlString.replaceAll(/(<[^>]+>)|([^<]+)/g, (match, p1, p2) => {\n if (p1) {\n if (p1.includes('data-ci')) return match;\n return p1.replace(/<\\s*([\\da-z]+)(\\s[^>]*)?>/i, (_, tagName, attrs) => {\n return `<${tagName} data-ci=\"${componentIndex}\"${attrs || ''}>`;\n });\n } else if (p2 && p2.replace(PLACEHOLDER, '').trim()) {\n return `<!--${componentType.TEXT}-${componentIndex}-->${p2}<!$>`;\n }\n return match;\n });\n this.template = processedString.split(PLACEHOLDER);\n }\n }\n\n mount(): string {\n this.initRef();\n const output = this.render();\n this.removeRef();\n return output;\n }\n\n render(): string {\n if (isFunction(this.template)) {\n const root = this.template(this.props);\n if (isSSGNode(root)) {\n return root.mount();\n } else {\n return String(root);\n }\n }\n const template = this.template as string[];\n Object.keys(this.props).forEach(key => {\n const cur = this.props[key];\n const childrens = cur.children;\n normalizeProp(cur);\n const findIndex = template.findIndex(t => t.includes(`data-hk=\"${key}\"`));\n\n // add children\n if (childrens) {\n childrens.forEach(([child]) => {\n componentIndex++;\n // dont need path in this case\n const children = renderChildren(child, cur);\n this.template[findIndex] += children;\n });\n }\n // add props\n this.template[findIndex].replaceAll(\n `data-hk=\"${key}\"`,\n `data-hk=\"${key}\" ${generateAttributes(cur)}`,\n );\n });\n\n return template.join('');\n }\n}\n\nfunction normalizeProp(props: Props): void {\n Object.entries(props).forEach(([key, value]) => {\n if (key === 'children') {\n delete props[key];\n } else if (isFunction(value)) {\n delete props[key];\n } else if (isSignal(value)) {\n props[key] = value.value;\n }\n });\n}\n\nfunction generateAttributes(props: Props): string {\n return Object.entries(props)\n .filter(([key, value]) => key !== 'children' && !isFunction(value))\n .map(([key, value]) => `${key}=\"${escape(String(value))}\"`)\n .join(' ');\n}\n\nexport function renderChildren(\n children: EssorNode | Function | Signal<unknown>,\n prop: Props,\n): string {\n if (isFunction(children)) {\n return renderChildren(children(prop), prop);\n } else if (isSignal(children)) {\n return `<!--${componentType.TEXT_COMPONENT}-${componentIndex}-->${(children as Signal<any>).value}<!$>`;\n } else if (isSSGNode(children)) {\n const childResult = (children as SSGNode).mount();\n return isFunction(childResult) ? childResult(prop) : extractSignal(childResult);\n } else {\n return `<!--${componentType.TEXT_COMPONENT}-${componentIndex}-->${children}<!$>`;\n }\n}\n","import { isArray, isFalsy, kebabCase } from '@estjs/shared';\nimport { type Signal, isSignal } from '@estjs/signal';\nimport { isJsxElement } from './jsx-renderer';\nimport { renderContext } from './shared-config';\nimport { isSSGNode } from './ssg-node';\n\nconst selfClosingTags =\n 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr'.split(',');\nconst htmlTags =\n 'a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,bgsound,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,dir,div,dl,dt,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,kbd,keygen,label,legend,li,link,listing,main,map,mark,marquee,menu,menuitem,meta,meter,nav,nobr,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,plaintext,pre,progress,q,rb,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,var,video,wbr,xmp'.split(\n ',',\n );\n\n/**\n * Converts any data to a Node or JSX.Element type.\n * @param data - The data to be coerced into a Node or JSX.Element.\n * @returns A Node or JSX.Element.\n */\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node || isSSGNode(data)) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\n/**\n * Inserts a child Node or JSX.Element into a parent Node at a specified position.\n * @param parent - The parent Node where the child will be inserted.\n * @param child - The child Node or JSX.Element to insert.\n * @param before - The Node or JSX.Element before which the new child will be inserted.\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 const ssr = renderContext.isSSR;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n // hack ssr compile node\n } else if (beforeNode && !ssr) {\n (beforeNode as HTMLElement).before(child);\n // hack ssr compile node\n } else if (!ssr) {\n (parent as HTMLElement).append(child);\n }\n}\n\n/**\n * Removes a child Node or JSX.Element from its parent.\n * @param child - The child Node or JSX.Element to remove.\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\n/**\n * Replaces an existing child Node or JSX.Element with a new one in a parent Node.\n * @param parent - The parent Node where the replacement will occur.\n * @param node - The new Node or JSX.Element to insert.\n * @param child - The existing Node or JSX.Element to be replaced.\n */\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n insertChild(parent, node, child);\n removeChild(child);\n}\n\n/**\n * Sets an attribute on an HTMLElement, handling special cases for 'class' and 'style'.\n * @param element - The HTMLElement on which to set the attribute.\n * @param attr - The attribute name.\n * @param value - The attribute value.\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 (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 if (element instanceof HTMLInputElement && attr === 'value') {\n element.value = String(value);\n } else {\n element.setAttribute(attr, String(value));\n }\n }\n}\n\n/**\n * Binds an event listener to an input element to update a state setter based on the input type.\n * @param node - The input HTML element to bind the event listener to.\n * @param setter - The function to call when the input value changes.\n */\nexport function bindNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n switch (node.type) {\n case 'checkbox':\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n case 'date':\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n case 'file':\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n case 'number':\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n case 'radio':\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n case '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}\n\n/**\n * Defers the execution of a function until the next tick of the event loop.\n * @param fn - The function to be executed on the next tick.\n * @returns A Promise that resolves after the next tick.\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 addEventListener(type: string, listener: Listener<unknown>): void;\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\n/**\n * Adds an event listener to a DOM node and returns a function to remove it.\n * @param node - The target node to add the event listener to.\n * @param eventName - The name of the event.\n * @param handler - The event handler function.\n * @returns A function to remove the event listener.\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\n/**\n * Closes unclosed HTML tags in a given input string.\n * @param input - The input HTML string to process.\n * @returns The HTML string with unclosed tags properly closed.\n */\nexport function closeHtmlTags(input: string): string {\n const tagStack: string[] = [];\n const output: string[] = [];\n const tagPattern = /<\\/?([\\da-z-]+)([^>]*)>/gi;\n let lastIndex = 0;\n\n while (true) {\n const match = tagPattern.exec(input);\n if (!match) break;\n\n const [fullMatch, tagName] = match;\n const isEndTag = fullMatch[1] === '/';\n\n // Push text content between tags\n output.push(input.slice(lastIndex, match.index));\n lastIndex = match.index + fullMatch.length;\n\n if (isEndTag) {\n // Handle end tag\n while (tagStack.length > 0 && tagStack[tagStack.length - 1] !== tagName) {\n const unclosedTag = tagStack.pop();\n if (unclosedTag) {\n output.push(`</${unclosedTag}>`);\n }\n }\n if (tagStack.length > 0) {\n tagStack.pop(); // pop the matching start tag\n }\n } else if (!selfClosingTags.includes(tagName)) {\n // Handle start tag\n tagStack.push(tagName);\n }\n output.push(fullMatch); // Push the current tag\n }\n\n // Add any remaining unclosed tags\n output.push(input.slice(lastIndex));\n while (tagStack.length > 0) {\n const unclosedTag = tagStack.pop();\n if (unclosedTag) {\n output.push(`</${unclosedTag}>`);\n }\n }\n\n return output.join('');\n}\n\n/**\n * Checks if a given tag name is a valid HTML tag.\n * @param tagName - The tag name to check.\n * @returns A boolean indicating if the tag name is valid.\n */\nexport function isHtmlTagName(tagName: string): tagName is keyof HTMLElementTagNameMap {\n return htmlTags.includes(tagName);\n}\n\n/**\n * Converts a string to a valid HTML tag name.\n * @param tagName - The input string to convert.\n * @returns The valid HTML tag name.\n */\nexport function convertToHtmlTag(tagName: string): string {\n if (selfClosingTags.includes(tagName)) {\n return `<${tagName}/>`;\n } else {\n return `<${tagName}></${tagName}>`;\n }\n}\n\n/**\n * Extracts the value from a signal if given, or returns the given value if not a signal.\n * @param signal - The signal or value to extract.\n * @returns The extracted value.\n */\nexport function extractSignal<T>(signal: T | Signal<T>): T {\n if (isSignal(signal)) {\n return signal.value;\n } else {\n return signal;\n }\n}\n\n// Checks if the current environment is a server.\nexport const isServer = typeof window === 'undefined';\n\nexport function parseHTMLToArray(htmlString: string): string[] {\n const result: string[] = [];\n\n const regex = /(<[^>]+>[^<]*)|(<!>)|([^<>]+)/g;\n let match;\n\n while ((match = regex.exec(htmlString)) !== null) {\n if (match[1]) {\n const fullTag = match[1].trim();\n result.push(fullTag);\n } else if (match[2]) {\n result.push(match[2]);\n } else if (match[3].trim() !== '') {\n result.push(match[3].trim());\n }\n }\n\n return result.flatMap(tag => {\n if (/^<[^>]+>\\d/.test(tag)) {\n const tagEndIndex = tag.indexOf('>') + 1;\n return [tag.slice(0, tagEndIndex), tag.slice(tagEndIndex)].filter(Boolean);\n }\n return tag;\n });\n}\n","import { isFunction, startsWith } from '@estjs/shared';\nimport { type Signal, useEffect, useReactive } from '@estjs/signal';\nimport { addEventListener, extractSignal } from './utils';\nimport { LifecycleContext } from './lifecycle-context';\nimport type { TemplateNode } from './template-node';\nimport type { EssorComponent, NodeTrack, Props } from '../types';\n\n// render essor component node\nexport class ComponentNode extends LifecycleContext implements JSX.Element {\n private proxyProps: Record<string, Signal<unknown>>;\n private emitter = new Set<() => void>();\n private rootNode: TemplateNode | null = null;\n private trackMap = new Map<string, NodeTrack>();\n\n constructor(\n public template: EssorComponent,\n public props?: Props,\n public key?: string,\n ) {\n super();\n // create proxy props\n this.proxyProps = props\n ? useReactive(\n props,\n key => startsWith(key, 'on') || startsWith(key, 'update') || key === 'children',\n )\n : {};\n }\n\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 mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n // if it mounted in the template, it will be connected\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n // init hooks\n this.initRef();\n\n // render template node\n this.rootNode = this.template(this.proxyProps);\n\n // mount template node\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n\n // call mount hooks\n this.hooks.mounted.forEach(handler => handler());\n\n // patch props\n this.patchProps(this.props);\n\n // destroy hooks\n this.removeRef();\n\n return mountedNode;\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n this.clearHooks();\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n for (const cleanup of this.emitter) {\n cleanup();\n }\n this.emitter.clear();\n }\n\n /**\n * Inherit props and state from another ComponentNode.\n * It will:\n * 1. Copy props from the node to this proxyProps.\n * 2. Copy the rootNode, trackMap and hooks from the node.\n * 3. Copy the props from the node to this.\n * 4. Patch props from the props passed in the constructor.\n * @param node The node to inherit from.\n */\n inheritNode(node: ComponentNode): void {\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n this.hooks = node.hooks;\n\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n /**\n * Get a NodeTrack from the trackMap. If the track is not in the trackMap, create a new one.\n * Then, call the cleanup function to remove any previously registered hooks.\n * @param trackKey the key of the node track to get.\n * @returns the NodeTrack, cleaned up and ready to use.\n */\n private getNodeTrack(trackKey: string): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n track.cleanup();\n return track;\n }\n\n /**\n * Patch the props of this node.\n * It will:\n * 1. Iterate the props and patch it.\n * 2. If the prop is a event handler, add a event listener to the first child of the node.\n * 3. If the prop is a ref, set the first child of the node to the ref.\n * 4. If the prop is a update handler, update the prop in the node's props.\n * 5. If the prop is a normal prop, create a signal for it and then patch it.\n * @param props The props to patch.\n */\n patchProps(props: Record<string, any> | undefined) {\n if (!props) {\n return;\n }\n for (const [key, prop] of Object.entries(props)) {\n if (startsWith(key, 'on') && this.rootNode?.firstChild) {\n const event = key.slice(2).toLowerCase();\n // @ts-ignore\n const cleanup = addEventListener(this.rootNode.nodes[0], event, prop);\n this.emitter.add(cleanup);\n } else if (key === 'ref') {\n // just support useRef\n prop.value = this.rootNode?.firstChild;\n } else if (startsWith(key, 'update')) {\n // hack bind:value to valueUpdate\n this.props![key] = extractSignal(prop);\n } else if (key !== 'children') {\n // bind signal or normal prop\n const track = this.getNodeTrack(key);\n track.cleanup = useEffect(() => {\n this.proxyProps[key] = isFunction(prop) ? prop() : prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './jsx-renderer';\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 = Array.from(childrenMap.values());\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n clearChildren(parent, children, before);\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n let childIndex = 0;\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children[childIndex];\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children[++childIndex];\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 === origChild) {\n childIndex++;\n } else {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\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/**\n * Clear the children of the parent node.\n * @param parent The parent node.\n * @param children The children to be cleared.\n * @param before The node before which the children should be cleared.\n */\nexport function clearChildren(parent: Node, children: AnyNode[], before: Node | null) {\n if (parent.childNodes.length === children.length + (before ? 1 : 0)) {\n (parent as Element).innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children[0];\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 children.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n}\n\n/**\n * Compare two nodes and update the first node to be the same as the second node.\n * @param parent The parent node of the first node.\n * @param node The first node.\n * @param next The second node.\n * @returns The updated first node.\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}\nexport function getKey(node: AnyNode, index: number): string {\n if (isJsxElement(node)) {\n // use jsx key\n const jsxKey = (node as any).key;\n if (jsxKey !== undefined && jsxKey !== null) {\n return String(jsxKey);\n }\n }\n\n // use index\n return `_$${index}$`;\n}\n","import {\n capitalizeFirstLetter,\n coerceArray,\n isArray,\n isFunction,\n isNil,\n startsWith,\n} from '@estjs/shared';\nimport { isSignal, useEffect, useSignal } from '@estjs/signal';\n\nimport {\n addEventListener,\n bindNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { getKey, patchChildren } from './patch';\nimport { getComponentIndex, renderContext } from './shared-config';\nimport { createTemplate, isComponent } from './jsx-renderer';\nimport { componentType } from './ssg-node';\nimport type { NodeTrack, Props } from '../types';\n\nexport class TemplateNode implements JSX.Element {\n private treeMap = new Map<number, Node>();\n private mounted = false;\n private nodes: Node[] = [];\n private trackMap = new Map<string, NodeTrack>();\n\n private bindValueKeys: string[] = [];\n componentIndex;\n\n constructor(\n public template: HTMLTemplateElement,\n public props?: Props,\n public key?: string,\n ) {\n this.key ||= props?.key as string;\n if (renderContext.isSSR) {\n this.componentIndex = getComponentIndex(this.template);\n }\n }\n\n addEventListener(): void {}\n removeEventListener(): void {}\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n // is mounted\n get isConnected(): boolean {\n return this.mounted;\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 if (isArray(this.template)) {\n this.template = createTemplate(this.template.join(''));\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\n if (renderContext.isSSR) {\n this.mapSSGNodeTree(parent as HTMLElement);\n } else {\n this.mapNodeTree(parent, cloneNode);\n }\n insertChild(parent, cloneNode, before);\n this.patchProps(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\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 patchProps(props: Record<string, Record<string, unknown>> | undefined): void {\n if (!props) return;\n\n Object.entries(props).forEach(([key, value]) => {\n const index = Number(key);\n // get node in treeMap\n const node = this.treeMap.get(index);\n if (node) {\n this.patchProp(key, node, value, index === 0);\n }\n });\n this.props = props;\n }\n\n inheritNode(node: TemplateNode): void {\n // update node info in other patch node\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n // update props\n const props = this.props;\n this.props = node.props;\n // run patch\n this.patchProps(props);\n }\n\n mapSSGNodeTree(parent: Node): void {\n this.treeMap.set(0, parent);\n\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n if (node.nodeType === Node.COMMENT_NODE) {\n const [type, index] = node.textContent?.split('-') || '';\n if (componentType.TEXT === +type && +index === this.componentIndex) {\n const textNode = node.nextSibling as Text;\n this.treeMap.set(+index, textNode);\n }\n } else if (node.nodeType !== Node.TEXT_NODE) {\n const { ci = '-1', hk } = (node as HTMLElement)?.dataset || {};\n if (hk && +ci === this.componentIndex) {\n this.treeMap.set(+hk, node);\n }\n }\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n\n walk(parent);\n }\n\n mapNodeTree(parent: Node, tree: Node): void {\n let index = 1;\n this.treeMap.set(0, parent);\n const arr = [parent];\n\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n arr.push(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 * Get a NodeTrack from the trackMap. If the track is not in the trackMap, create a new one.\n * Then, call the cleanup function to remove any previously registered hooks.\n * @param trackKey the key of the node track to get.\n * @param trackLastNodes if true, the track will record the last nodes it has rendered.\n * @param isRoot if true, the track will be treated as a root track.\n * @returns the NodeTrack, cleaned up and ready to use.\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 patchProp(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.filter(Boolean).forEach((item, index) => {\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 props[attr].value = node;\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 {\n const updateKey = `update${capitalizeFirstLetter(attr)}`;\n if (this.bindValueKeys.includes(attr)) {\n break;\n }\n if (props[updateKey]) {\n this.bindValueKeys.push(updateKey);\n }\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : useSignal(val);\n patchAttribute(track, node, attr, triggerValue.value);\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 if (props[updateKey] && !isComponent(attr)) {\n cleanupBind = bindNode(node, value => {\n props[updateKey](value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n }\n }\n}\n\n/**\n * Patch the children of the parent node.\n * If the child is a function, it will call the function and patch the returned nodes.\n * If the child is not a function, it will patch each node in the child array.\n * @param track The track to store the cleanup function.\n * @param parent The parent node.\n * @param child The child to patch.\n * @param before The node before which the children should be inserted.\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) as Node[];\n\n // Check if we are in hydration mode\n if (renderContext.isSSR) {\n // In SSR, reconcile with existing nodes\n track.lastNodes = reconcileChildren(parent, nextNodes, before);\n } else {\n // In client-side rendering, patch normally\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n }\n });\n } else {\n coerceArray(child).forEach((node, index) => {\n const newNode = coerceNode(node) as Node;\n const key = getKey(newNode, index);\n\n // Check if we are in hydration mode\n if (renderContext.isSSR) {\n // In SSR, reconcile with existing nodes\n track.lastNodes = reconcileChildren(parent, [newNode], before);\n } else {\n track.lastNodes!.set(key, newNode);\n insertChild(parent, newNode, before);\n }\n });\n }\n}\n\nfunction reconcileChildren(\n parent: Node,\n nextNodes: Node[],\n before: Node | null,\n): Map<string, Node> {\n const result = new Map<string, Node>();\n\n const textNodes = Array.from(parent.childNodes).filter(\n node =>\n node.nodeType === Node.TEXT_NODE &&\n node.previousSibling?.nodeType === Node.COMMENT_NODE &&\n node.nextSibling?.nodeType === Node.COMMENT_NODE,\n );\n\n nextNodes.forEach((node, index) => {\n const key = getKey(node, index);\n if (node.nodeType === Node.TEXT_NODE) {\n textNodes.forEach(ne => {\n if (node.textContent === ne.textContent) {\n parent.replaceChild(node, ne);\n }\n });\n } else {\n insertChild(parent, node, before);\n }\n result.set(key, node);\n });\n return result;\n}\n\n/**\n * Patch an attribute of a node.\n * If the data is a function, it will be called when the attribute is updated.\n * @param track The track of the node.\n * @param node The node to patch.\n * @param attr The attribute to patch.\n * @param data The data to patch.\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","import { isFunction, isString } from '@estjs/shared';\nimport { closeHtmlTags, convertToHtmlTag, isHtmlTagName } from './utils';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode, Props } from '../types';\n\n/**\n * Creates a JSX element from a given template.\n *\n * @param template - The template to render. Can be a string representing an HTML\n * element, a function representing a component, or an `HTMLTemplateElement`.\n * @param props - Properties to pass to the component or element.\n * @param key - The key of the element.\n * @returns The created JSX element.\n */\nexport function h<K extends keyof HTMLElementTagNameMap>(\n template: EssorComponent | HTMLTemplateElement | K | '',\n props?: Props,\n key?: string,\n): JSX.Element {\n if (isString(template)) {\n if (isHtmlTagName(template)) {\n (template as string) = convertToHtmlTag(template);\n props = { '1': props };\n } else if (template === '') {\n props = { '0': props };\n }\n template = createTemplate(template);\n }\n\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\n/**\n * Checks if the given node is an instance of `ComponentNode`.\n *\n * @param node The node to check.\n * @returns `true` if the node is an instance of `ComponentNode`, otherwise `false`.\n */\nexport function isComponent(node: unknown): node is ComponentNode {\n return node instanceof ComponentNode;\n}\n\n/**\n * Checks if the given node is a JSX element. A JSX element is either an instance\n * of `ComponentNode` or an instance of `TemplateNode`.\n *\n * @param node The node to check.\n * @returns `true` if the node is a JSX element, otherwise `false`.\n */\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\n/**\n * Creates an HTML template element from a given HTML string.\n *\n * @param html The HTML string to create a template from.\n * @returns A new HTML template element.\n */\nexport function createTemplate(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = closeHtmlTags(html);\n return template;\n}\n\n/**\n * A built-in component for grouping JSX elements without adding a new node to the DOM.\n *\n * The `Fragment` component takes a single prop, `children`, which should be a JSX element.\n * It returns the `children` prop, which is the JSX element passed to it.\n *\n * It is used to group JSX elements without adding a new node to the DOM.\n *\n */\nexport function Fragment(props: { children: JSX.Element }): JSX.Element {\n return props.children;\n}\n/**\n * Splits an HTML string into its component parts. The following types of elements are detected:\n * 1. HTML comments (`<!-- -->`)\n * 2. Self-closing tags (`<tag/>`)\n * 3. Opening tags (`<tag>`)\n * 4. Closing tags (`</tag>`)\n * 5. Numbers (`\\d+`)\n * 6. Text elements (`[^<>]+`)\n * @param str - The HTML string to split.\n * @returns An array of the split elements.\n */\nexport function splitHtmlString(str: string): string[] {\n const closed = closeHtmlTags(str);\n const splitReg = /<!--[\\S\\s]*?-->|<[^>]+\\/>|<[^>]+>|<!>|\\d+|[^<>]+/g;\n return (closed.match(splitReg) || []).filter(Boolean);\n}\n","import { isSymbol } from '@estjs/shared';\nimport { type Signal, shallowSignal } from '@estjs/signal';\nimport { LifecycleContext } from './lifecycle-context';\n\n/**\n * Registers a hook to be called when the component is mounted.\n *\n * @remarks\n * This function can only be called in the component function body.\n * It cannot be used in asynchronous or deferred calls.\n * @param cb - The function to call when the component is mounted.\n */\nexport function onMount(cb: () => void): void {\n assertInsideComponent('onMounted');\n LifecycleContext.ref?.addHook('mounted', cb);\n}\n\n/**\n * Registers a hook to be called when the component is about to be unmounted.\n *\n * @remarks\n * This function can only be called in the component function body.\n * It cannot be used in asynchronous or deferred calls.\n * @param cb - The function to call when the component is about to be unmounted.\n */\nexport function onDestroy(cb: () => void): void {\n assertInsideComponent('onDestroy');\n LifecycleContext.ref?.addHook('destroy', cb);\n}\n\nfunction assertInsideComponent(hookName: string, key?: unknown) {\n if (!LifecycleContext.ref && __DEV__) {\n console.error(\n `\"${hookName}\"(key: ${isSymbol(key) ? key.toString() : key}) can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types, unused-imports/no-unused-vars\nexport interface InjectionKey<T> extends Symbol {}\n\n/**\n * Provides a value to be used in the component tree.\n *\n * @remarks\n * This function can only be called in the component function body.\n * It cannot be used in asynchronous or deferred calls.\n * @param key - The key to store the value in the LifecycleContext with.\n * @param value - The value to store in the LifecycleContext with the given key.\n */\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n assertInsideComponent('useProvide', key);\n\n LifecycleContext.ref?.setContext(key as string, value);\n}\n/**\n * Injects a value from the current component LifecycleContext.\n *\n * @remarks\n * This function can only be called in the component function body.\n * It cannot be used in asynchronous or deferred calls.\n * @param key - The key to retrieve the value from the LifecycleContext with.\n * @param defaultValue - The default value to return if the key is not present\n * in the LifecycleContext.\n * @returns The value stored in the LifecycleContext with the given key, or the default\n * value if the key is not present in the LifecycleContext.\n */\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n): (K extends InjectionKey<infer V> ? V : T) | undefined {\n assertInsideComponent('useInject', key);\n return LifecycleContext.ref?.getContext(key as string) || defaultValue;\n}\n\n/**\n * Creates a reactive ref that can be used to reference a DOM node\n * or a component instance within the component function body.\n *\n * @returns a reactive ref signal\n *\n * @example\n * const inputRef = useRef(')\n *\n * <input ref={inputRef} />\n *\n * inputRef.value // input element\n */\nexport function useRef<T>(): Signal<T | null> {\n const ref = shallowSignal<T | null>(null);\n return ref;\n}\n","import { SSGNode } from './ssg-node';\nimport { renderContext } from './shared-config';\nimport { h } from './jsx-renderer';\nimport type { EssorComponent, Props } from '../types';\n\n/**\n * Render a component to a string.\n *\n * This function renders a component to an HTML string. It is used for server-side rendering (SSR) and static site generation (SSG).\n *\n * @param component The component to render.\n * @param props Optional props to pass to the component.\n * @returns The rendered HTML string.\n */\nexport function renderToString(component: EssorComponent, props?: Record<string, unknown>): string {\n renderContext.setSSG();\n const ssrNode = new SSGNode(component, props || {});\n const html = ssrNode.mount();\n renderContext.setClient();\n return html;\n}\n\n/**\n * Hydrate a component in a container.\n *\n * This function hydrates a component in a container element. It is used for server-side rendering (SSR) and client-side rendering (CSR).\n *\n * @param component The component to hydrate.\n * @param container The container element to hydrate in. Can be a string selector or an Element.\n */\nexport function hydrate(component: EssorComponent, container: string | Element): void {\n const rootElement = typeof container === 'string' ? document.querySelector(container) : container;\n\n // if the container is not found, throw an error\n if (!rootElement) {\n throw new Error(`Could not find container: ${container}`);\n }\n renderContext.setSSR();\n h(component).mount(rootElement);\n renderContext.setClient();\n}\n\n/**\n * Create a server-side generation (SSG) node from a component.\n *\n * If the render context is set to SSG, this function will create a new SSGNode from the component. Otherwise, it will create a new JSX element using the h function.\n *\n * @param component The component to create the SSGNode from.\n * @param props Optional props to pass to the component.\n * @returns The SSGNode or JSX element.\n */\nexport function ssg(component, props?: Props) {\n if (renderContext.isSSG) {\n return new SSGNode(component, props);\n }\n return h(component, props);\n}\n"]}