@estjs/template 0.0.14-beta.19 → 0.0.14-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/template.cjs.js +2 -2
- package/dist/template.cjs.js.map +1 -1
- package/dist/template.d.cts +14 -12
- package/dist/template.d.ts +14 -12
- package/dist/template.dev.cjs.js +74 -56
- package/dist/template.dev.esm.js +76 -58
- package/dist/template.esm.js +3 -3
- package/dist/template.esm.js.map +1 -1
- package/package.json +3 -3
package/dist/template.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';var shared=require('@estjs/shared'),signal=require('@estjs/signal');/**
|
|
2
|
-
* @estjs/template v0.0.14-beta.
|
|
2
|
+
* @estjs/template v0.0.14-beta.21
|
|
3
3
|
* (c) 2023-Present jiangxd <jiangxd2016@gmail.com>
|
|
4
4
|
* @license MIT
|
|
5
5
|
**/
|
|
6
|
-
var k="on",P="update",N="children",w="",B="0",q="1";var H="ref",A=" __PLACEHOLDER__ ";var D=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;}},u=new D,z=new Map;function W(n,e){z.set(n,{index:e});}function Q(n){var e;return (e=z.get(n))==null?void 0:e.index}var S=class S{constructor(){this.hooks={mounted:new Set,destroy:new Set};}addEventListener(){}removeEventListener(){}addHook(e,t){var o;(o=this.hooks[e])==null||o.add(t);}getContext(e){return S.context[e]}setContext(e,t){S.context[e]=t;}initRef(){S.ref=this;}removeRef(){S.ref=null;}clearHooks(){Object.values(this.hooks).forEach(e=>e.clear());}};S.ref=null,S.context={};var p=S;function O(n){return n instanceof C}var b=1,C=class extends p{constructor(t,o={},r){super();this.template=t;this.props=o;this.key=r;W(t,b),this.templates=this.processTemplate();}processTemplate(){if(shared.isArray(this.template)){let t=this.template.join(A);return this.processHtmlString(t).split(A)}return []}processHtmlString(t){return t.replaceAll(/(<[^>]+>)|([^<]+)/g,(o,r,i)=>r?r.includes("data-ci")?o:r.replace(/<\s*([\da-z]+)(\s[^>]*)?>/i,(s,a,c)=>`<${a} data-ci="${b}"${c||""}>`):i&&i.replace(A,"").trim()?`<!--0-${b}-->${i}<!$>`:o)}mount(){this.initRef();let t=this.render();return this.removeRef(),t}render(){if(shared.isFunction(this.template)){let t=this.template(this.props);return O(t)?t.mount():String(t)}return this.renderTemplate()}renderTemplate(){return Object.entries(this.props).forEach(([t,o])=>{let r=o.children;this.normalizeProps(o);let i=this.templates.findIndex(s=>s.includes(`data-hk="${t}"`));r&&this.renderChildren(r,i),this.templates[i]=this.templates[i].replace(`data-hk="${t}"`,`data-hk="${t}" ${this.generateAttributes(o)}`);}),this.templates.join("")}normalizeProps(t){Object.entries(t).forEach(([o,r])=>{o===N||shared.isFunction(r)?delete t[o]:signal.isSignal(r)&&(t[o]=r.value);});}generateAttributes(t){return Object.entries(t).filter(([o,r])=>o!==N&&!shared.isFunction(r)).map(([o,r])=>`${o}="${shared.escape(String(r))}"`).join(" ")}renderChildren(t,o){t.forEach(([r])=>{b++;let i=this.renderChild(r);this.templates[o]+=i;});}renderChild(t){if(signal.isSignal(t))return `<!--1-${b}-->${t.value}<!$>`;if(shared.isFunction(t))return this.renderChild(t(this.props));if(O(t)){let o=t.mount();return shared.isFunction(o)?o(this.props):_(o)}else return `<!--1-${b}-->${t}<!$>`}};var Ne="area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr".split(",");function G(n){if(h(n)||n instanceof Node||O(n))return n;let e=shared.isFalsy(n)?"":String(n);return document.createTextNode(e)}function g(n,e,t=null){let o=h(t)?t.firstChild:t,r=u.isSSR;h(e)?e.mount(n,o):o&&!r?o.before(e):r||n.append(e);}function T(n){h(n)?n.unmount():n.parentNode&&n.remove();}function F(n,e,t){g(n,e,t),T(t);}function te(n,e,t){e==="class"?Ee(n,t):e==="style"?ge(n,t):Te(n,e,t);}function Ee(n,e){typeof e=="string"?n.className=e:shared.isArray(e)?n.className=e.join(" "):e&&typeof e=="object"&&(n.className=Object.entries(e).reduce((t,[o,r])=>t+(r?` ${o}`:""),"").trim());}function ge(n,e){typeof e=="string"?n.style.cssText=e:e&&typeof e=="object"&&Object.entries(e).forEach(([o,r])=>{n.style.setProperty(shared.kebabCase(o),String(r));});}function Te(n,e,t){shared.isFalsy(t)?n.removeAttribute(e):t===!0?n.setAttribute(e,""):n instanceof HTMLInputElement&&e==="value"?n.value=String(t):n.setAttribute(e,String(t));}function oe(n,e){if(n instanceof HTMLInputElement)switch(n.type){case"checkbox":return m(n,"change",()=>{e(!!n.checked);});case"date":return m(n,"change",()=>{e(n.value?n.value:"");});case"file":return m(n,"change",()=>{n.files&&e(n.files);});case"number":return m(n,"input",()=>{let t=Number.parseFloat(n.value);e(Number.isNaN(t)?"":String(t));});case"radio":return m(n,"change",()=>{e(n.checked?n.value:"");});case"text":return m(n,"input",()=>{e(n.value);})}if(n instanceof HTMLSelectElement)return m(n,"change",()=>{e(n.value);});if(n instanceof HTMLTextAreaElement)return m(n,"input",()=>{e(n.value);})}function m(n,e,t){return n.addEventListener(e,t),()=>n.removeEventListener(e,t)}function ne(n){return Ne.includes(n)?`<${n}/>`:`<${n}></${n}>`}function _(n){return signal.isSignal(n)?n.value:n}var M=class extends p{constructor(t,o,r){super();this.template=t;this.props=o;this.key=r;this.emitter=new Set;this.rootNode=null;this.trackMap=new Map;this.key||(this.key=o&&o.key),this.proxyProps=this.createProxyProps(o);}createProxyProps(t){return t?signal.signalObject(t,o=>shared.startsWith(o,k)||shared.startsWith(o,P)||o===N):{}}get firstChild(){var t,o;return (o=(t=this.rootNode)==null?void 0:t.firstChild)!=null?o:null}get isConnected(){var t,o;return (o=(t=this.rootNode)==null?void 0:t.isConnected)!=null?o:!1}mount(t,o){var i,s,a,c;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(t,o))!=null?s:[];this.initRef(),this.rootNode=this.template(signal.reactive(this.proxyProps,[N]));let r=(c=(a=this.rootNode)==null?void 0:a.mount(t,o))!=null?c:[];return this.callMountHooks(),this.patchProps(this.props),this.removeRef(),r}unmount(){var t;this.callDestroyHooks(),this.clearHooks(),(t=this.rootNode)==null||t.unmount(),this.rootNode=null,this.proxyProps={},this.clearEmitter();}callMountHooks(){this.hooks.mounted.forEach(t=>t());}callDestroyHooks(){this.hooks.destroy.forEach(t=>t());}clearEmitter(){for(let t of this.emitter)t();this.emitter.clear();}inheritNode(t){Object.assign(this.proxyProps,t.proxyProps),this.rootNode=t.rootNode,this.trackMap=t.trackMap,this.hooks=t.hooks;let o=this.props;this.props=t.props,this.patchProps(o);}getNodeTrack(t){let o=this.trackMap.get(t);return o||(o={cleanup:()=>{}},this.trackMap.set(t,o)),o.cleanup(),o}patchProps(t){var o;if(t){for(let[r,i]of Object.entries(t))shared.startsWith(r,k)&&((o=this.rootNode)!=null&&o.firstChild)?this.patchEventListener(r,i):r===H?this.patchRef(i):shared.startsWith(r,P)?this.patchUpdateHandler(r,i):r!==N&&this.patchNormalProp(r,i);this.props=t;}}patchEventListener(t,o){let r=t.slice(2).toLowerCase(),i=m(this.rootNode.nodes[0],r,o);this.emitter.add(i);}patchRef(t){var o,r;t.value=(r=(o=this.rootNode)==null?void 0:o.firstChild)!=null?r:null;}patchUpdateHandler(t,o){this.props[t]=_(o);}patchNormalProp(t,o){var s,a;let r=(a=(s=this.proxyProps)[t])!=null?a:s[t]=signal.signal(o),i=this.getNodeTrack(t);i.cleanup=signal.effect(()=>{r.value=shared.isFunction(o)?o():o;});}};function ie(n,e,t,o){let r=new Map,i=Array.from(e.values());if(i.length&&t.length===0)return be(n,i,o),r;let s=[],a=Me(t),c=0;for(let[d,l]of t.entries()){let E=i[c],v=x(E,d);for(;E&&!a.has(v);)T(E),e.delete(v),E=i[++c],v=x(E,d);let Y=x(l,d),X=e.get(Y);if(X&&(l=Ce(n,X,l)),E)if(E===X)c++;else {let U=document.createComment("");g(n,U,E),s.push([U,l]);}else g(n,l,o);r.set(Y,l);}return s.forEach(([d,l])=>{F(n,l,d);}),e.forEach((d,l)=>{d.isConnected&&!r.has(l)&&T(d);}),r}function be(n,e,t){if(n.childNodes.length===e.length+(t?1:0))n.innerHTML="",t&&g(n,t);else {let o=document.createRange(),r=e[0],i=h(r)?r.firstChild:r;o.setStartBefore(i),t?o.setEndBefore(t):o.setEndAfter(n),o.deleteContents();}e.forEach(o=>{h(o)&&o.unmount();});}function Ce(n,e,t){return e===t?e:h(e)&&h(t)&&e.template===t.template?(t.inheritNode(e),t):e instanceof Text&&t instanceof Text?(e.textContent!==t.textContent&&(e.textContent=t.textContent),e):(F(n,t,e),t)}function Me(n){let e=new Map;for(let[t,o]of n.entries()){let r=x(o,t);e.set(r,o);}return e}function x(n,e){if(h(n)){let t=n.key;if(t!=null)return String(t)}return `_$${e}$`}var y=class{constructor(e,t,o){this.template=e;this.props=t;this.key=o;this.treeMap=new Map;this.mounted=!1;this.nodes=[];this.trackMap=new Map;this.bindValueKeys=[];this.parent=null;u.isSSR&&(this.componentIndex=Q(this.template));}get firstChild(){var e;return (e=this.nodes[0])!=null?e:null}get isConnected(){return this.mounted}addEventListener(){}removeEventListener(){}mount(e,t){var i;if(this.parent=e,this.isConnected)return this.nodes.forEach(s=>g(e,s,t)),this.nodes;shared.isArray(this.template)&&(this.template=R(this.template.join("")));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.childNodes.forEach(s=>{o.append(s);})),this.nodes=Array.from(o.childNodes),u.isSSR?this.mapSSGNodeTree(e):this.mapNodeTree(e,o),g(e,o,t),this.patchProps(this.props),this.mounted=!0,this.nodes}unmount(){this.trackMap.forEach(e=>{e.cleanup&&e.cleanup();}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(e=>T(e)),this.nodes=[],this.mounted=!1;}inheritNode(e){this.mounted=e.mounted,this.nodes=e.nodes,this.trackMap=e.trackMap,this.treeMap=e.treeMap;let t=this.props;this.props=e.props,this.patchProps(t);}mapSSGNodeTree(e){this.treeMap.set(0,e),this.walkNodeTree(e,this.handleSSGNode.bind(this));}mapNodeTree(e,t){let o=1;this.treeMap.set(0,e);let r=[e],i=s=>{s.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(this.treeMap.set(o++,s),r.push(s));};this.walkNodeTree(t,i);}walkNodeTree(e,t){e.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&t(e);let o=e.firstChild;for(;o;)this.walkNodeTree(o,t),o=o.nextSibling;}handleSSGNode(e){var t;if(e.nodeType===Node.COMMENT_NODE){let[o,r]=((t=e.textContent)==null?void 0:t.split("-"))||[];if(0===+o&&+r===this.componentIndex){let i=e.nextSibling;this.treeMap.set(+r,i);}}else if(e.nodeType!==Node.TEXT_NODE){let{ci:o="-1",hk:r}=(e==null?void 0:e.dataset)||{};r&&+o===this.componentIndex&&this.treeMap.set(+r,e);}}patchProps(e){e&&(Object.entries(e).forEach(([t,o])=>{let r=Number(t),i=this.treeMap.get(r);i&&this.patchProp(t,i,o,r===0);}),this.props=e);}patchProp(e,t,o,r){o&&Object.entries(o).forEach(([i,s])=>{if(i===N&&s)this.patchChildren(e,t,s,r);else if(i===H)o[i].value=t;else if(shared.startsWith(i,k))this.patchEventListener(e,t,i,s);else {if(this.bindValueKeys.includes(i))return;let a=this.getBindUpdateValue(o,e,i);this.patchAttribute(e,t,i,s,a);}});}getBindUpdateValue(e,t,o){let r=`${P}${shared.capitalize(o)}`;if(r&&e[r]&&shared.isFunction(e[r]))return this.bindValueKeys.push(r),e[r]}patchChildren(e,t,o,r){if(shared.isArray(o))o.filter(Boolean).forEach((i,s)=>{var v;let[a,c]=shared.isArray(i)?i:[i,null],d=shared.isNil(c)?null:(v=this.treeMap.get(c))!=null?v:null,l=`${e}:${N}:${s}`,E=this.getNodeTrack(l,!0,r);this.patchChild(E,t,a,d);});else {let i=`${e}:${N}:0`,s=this.getNodeTrack(i,!0,r);this.patchChild(s,t,o,null);}}patchEventListener(e,t,o,r){let i=o.slice(2).toLowerCase(),s=this.getNodeTrack(`${e}:${o}`);s.cleanup=m(t,i,r);}patchAttribute(e,t,o,r,i){let s=this.getNodeTrack(`${e}:${o}`),a=signal.shallowSignal(),c=signal.effect(()=>{let l=shared.isFunction(r)?r():r;shared.isPlainObject(l)&&shared.isPlainObject(a.peek())&&JSON.stringify(a.value)===JSON.stringify(l)||(a.value=signal.isSignal(l)?l.value:l,te(t,o,a.value));}),d;i&&shared.isHTMLElement(t)&&(d=oe(t,l=>{i(l);})),s.cleanup=()=>{c&&c(),d&&d();};}getNodeTrack(e,t,o){let r=this.trackMap.get(e);return r||(r={cleanup:()=>{}},t&&(r.lastNodes=new Map),o&&(r.isRoot=!0),this.trackMap.set(e,r)),r.cleanup&&r.cleanup(),r}patchChild(e,t,o,r){shared.isFunction(o)?e.cleanup=signal.effect(()=>{let i=shared.coerceArray(o()).map(G);u.isSSR?e.lastNodes=this.reconcileChildren(t,i,r):e.lastNodes=ie(t,e.lastNodes,i,r);}):shared.coerceArray(o).forEach((i,s)=>{let a=G(i),c=x(a,s);u.isSSR?e.lastNodes=this.reconcileChildren(t,[a],r):(e.lastNodes.set(c,a),g(t,a,r));});}reconcileChildren(e,t,o){let r=new Map,i=Array.from(e.childNodes).filter(s=>{var a,c;return s.nodeType===Node.TEXT_NODE&&((a=s.previousSibling)==null?void 0:a.nodeType)===Node.COMMENT_NODE&&((c=s.nextSibling)==null?void 0:c.nodeType)===Node.COMMENT_NODE});return t.forEach((s,a)=>{let c=x(s,a);s.nodeType===Node.TEXT_NODE?i.forEach(d=>{s.textContent===d.textContent&&e.replaceChild(s,d);}):g(e,s,o),r.set(c,s);}),r}};var I=class extends y{unmount(){this.trackMap.forEach(e=>{e.lastNodes&&e.lastNodes.forEach(t=>{T(t);}),e.cleanup&&e.cleanup();}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(e=>{T(e);}),this.nodes=[],this.mounted=!1;}};function j(n,e,t){if(n===w)return le(n,e);if(shared.isString(n)){let o=ne(n);return e={[q]:e},new y(R(o),e,t)}return shared.isFunction(n)?new M(n,e,t):new y(n,e,t)}function $e(n){return n instanceof M}function h(n){return n instanceof M||n instanceof y}function R(n){let e=document.createElement("template");return e.innerHTML=n,e}function le(n,e){return e.children&&(e={[B]:{children:shared.isArray(e.children)?e.children.filter(Boolean):[e.children]}}),n===w&&(n=R(w)),new I(n,e)}function Ie(n){p.ref&&p.ref.addHook("mounted",n);}function je(n){p.ref&&p.ref.addHook("destroy",n);}function Ke(n,e){p.ref&&p.ref.setContext(n,e);}function Xe(n,e){var t;return (t=p.ref&&p.ref.getContext(n))!=null?t:e}function De(n,e){u.setSSG();let o=new C(n,e||{}).mount();return u.setClient(),o}function Ge(n,e){let t=typeof e=="string"?document.querySelector(e):e;if(!t)throw new Error(`Could not find container: ${e}`);u.setSSR(),j(n).mount(t),u.setClient();}function Fe(n,e){return u.isSSG?new C(n,e):j(n,e)}exports.Fragment=le;exports.h=j;exports.hydrate=Ge;exports.inject=Xe;exports.isComponent=$e;exports.isJsxElement=h;exports.onDestroy=je;exports.onMount=Ie;exports.provide=Ke;exports.renderToString=De;exports.ssg=Fe;exports.template=R;//# sourceMappingURL=template.cjs.js.map
|
|
6
|
+
var P="on",L="update",f="children",A="",q="0",z="1";var H="ref",O=" __PLACEHOLDER__ ";var D=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;}},u=new D,W=new Map;function Q(n,t){W.set(n,{index:t});}function Z(n){var t;return (t=W.get(n))==null?void 0:t.index}var T=class T{constructor(){this.hooks={mounted:new Set,destroy:new Set};}addEventListener(){}removeEventListener(){}addHook(t,e){var o;(o=this.hooks[t])==null||o.add(e);}getContext(t){return T.context[t]}setContext(t,e){T.context[t]=e;}initRef(){T.ref=this;}removeRef(){T.ref=null;}clearHooks(){Object.values(this.hooks).forEach(t=>t.clear());}};T.ref=null,T.context={};var p=T;function _(n){return n instanceof b}var C=1,b=class extends p{constructor(e,o={},r){super();this.template=e;this.props=o;this.key=r;Q(e,C),this.templates=this.processTemplate();}processTemplate(){if(shared.isArray(this.template)){let e=this.template.join(O);return this.processHtmlString(e).split(O)}return []}processHtmlString(e){return e.replaceAll(/(<[^>]+>)|([^<]+)/g,(o,r,i)=>r?r.includes("data-ci")?o:r.replace(/<\s*([\da-z]+)(\s[^>]*)?>/i,(s,c,d)=>`<${c} data-ci="${C}"${d||""}>`):i&&i.replace(O,"").trim()?`<!--0-${C}-->${i}<!$>`:o)}mount(){this.initRef();let e=this.render();return this.removeRef(),e}render(){if(shared.isFunction(this.template)){let e=this.template(this.props);return _(e)?e.mount():String(e)}return this.renderTemplate()}renderTemplate(){return Object.entries(this.props).forEach(([e,o])=>{let r=o.children;this.normalizeProps(o);let i=this.templates.findIndex(s=>s.includes(`data-hk="${e}"`));r&&this.renderChildren(r,i),this.templates[i]=this.templates[i].replace(`data-hk="${e}"`,`data-hk="${e}" ${this.generateAttributes(o)}`);}),this.templates.join("")}normalizeProps(e){Object.entries(e).forEach(([o,r])=>{o===f||shared.isFunction(r)?delete e[o]:signal.isSignal(r)&&(e[o]=r.value);});}generateAttributes(e){return Object.entries(e).filter(([o,r])=>o!==f&&!shared.isFunction(r)).map(([o,r])=>`${o}="${shared.escape(String(r))}"`).join(" ")}renderChildren(e,o){e.forEach(([r])=>{C++;let i=this.renderChild(r);this.templates[o]+=i;});}renderChild(e){if(signal.isSignal(e))return `<!--1-${C}-->${e.value}<!$>`;if(shared.isFunction(e))return this.renderChild(e(this.props));if(_(e)){let o=e.mount();return shared.isFunction(o)?o(this.props):$(o)}else return `<!--1-${C}-->${e}<!$>`}};var Ee="area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr".split(",");function F(n){if(h(n)||n instanceof Node||_(n))return n;let t=shared.isFalsy(n)?"":String(n);return document.createTextNode(t)}function g(n,t,e=null){let o=h(e)?e.firstChild:e,r=u.isSSR;h(t)?t.mount(n,o):o&&!r?o.before(t):r||n.append(t);}function M(n){h(n)?n.unmount():n.parentNode&&n.remove();}function J(n,t,e){g(n,t,e),M(e);}function oe(n,t,e){t==="class"?ge(n,e):t==="style"?Te(n,e):ye(n,t,e);}function ge(n,t){typeof t=="string"?n.className=t:shared.isArray(t)?n.className=t.join(" "):t&&typeof t=="object"&&(n.className=Object.entries(t).reduce((e,[o,r])=>e+(r?` ${o}`:""),"").trim());}function Te(n,t){typeof t=="string"?n.style.cssText=t:t&&typeof t=="object"&&Object.entries(t).forEach(([o,r])=>{n.style.setProperty(shared.kebabCase(o),String(r));});}function ye(n,t,e){shared.isFalsy(e)?n.removeAttribute(t):e===!0?n.setAttribute(t,""):n instanceof HTMLInputElement&&t==="value"?n.value=String(e):n.setAttribute(t,String(e));}function ne(n,t){if(n instanceof HTMLInputElement)switch(n.type){case"checkbox":return m(n,"change",()=>{t(!!n.checked);});case"date":return m(n,"change",()=>{t(n.value?n.value:"");});case"file":return m(n,"change",()=>{n.files&&t(n.files);});case"number":return m(n,"input",()=>{let e=Number.parseFloat(n.value);t(Number.isNaN(e)?"":String(e));});case"radio":return m(n,"change",()=>{t(n.checked?n.value:"");});case"text":return m(n,"input",()=>{t(n.value);})}if(n instanceof HTMLSelectElement)return m(n,"change",()=>{t(n.value);});if(n instanceof HTMLTextAreaElement)return m(n,"input",()=>{t(n.value);})}function m(n,t,e){return n.addEventListener(t,e),()=>n.removeEventListener(t,e)}function re(n){return Ee.includes(n)?`<${n}/>`:`<${n}></${n}>`}function $(n){return signal.isSignal(n)?n.value:n}var y=class extends p{constructor(e,o,r){super();this.template=e;this.props=o;this.key=r;this.emitter=new Set;this.rootNode=null;this.trackMap=new Map;this.nodes=[];this.parent=null;this.before=null;this.key||(this.key=o&&o.key),this.proxyProps||(this.proxyProps=this.createProxyProps(o));}createProxyProps(e){return e?signal.shallowReactive(e,o=>shared.startsWith(o,P)||shared.startsWith(o,L)||o===f):{}}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}mount(e,o){var r,i,s,c;if(this.parent=e,!shared.isFunction(this.template))throw new Error("Template must be a function");return this.isConnected?(i=(r=this.rootNode)==null?void 0:r.mount(e,o))!=null?i:[]:(this.initRef(),this.rootNode=this.template(signal.reactive(this.proxyProps,[f])),this.nodes=(c=(s=this.rootNode)==null?void 0:s.mount(e,o))!=null?c:[],this.callMountHooks(),this.patchProps(this.props),this.removeRef(),this.nodes)}unmount(){var e;this.callLifecycleHooks("destroy"),this.cleanup(),(e=this.rootNode)==null||e.unmount(),this.resetState(),this.key&&k.delete(this.key);}resetState(){this.rootNode=null,this.proxyProps={},this.nodes=[],this.parent=null;}callLifecycleHooks(e){this.hooks[e].forEach(o=>o());}callMountHooks(){this.hooks.mounted.forEach(e=>e());}callDestroyHooks(){this.hooks.destroy.forEach(e=>e());}clearEmitter(){for(let e of this.emitter)e();this.emitter.clear();}inheritNode(e){if(Object.assign(this.proxyProps,e.proxyProps),this.rootNode=e.rootNode,this.trackMap=e.trackMap,this.hooks=e.hooks,shared.hasChanged(e.props,this.props)){let o=this.props;this.props=e.props,this.patchProps(o);}}getNodeTrack(e){let o=this.trackMap.get(e);return o||(o={cleanup:()=>{}},this.trackMap.set(e,o)),o.cleanup(),o}patchProps(e){var o;if(e){for(let[r,i]of Object.entries(e))shared.startsWith(r,P)&&((o=this.rootNode)!=null&&o.firstChild)?this.patchEventListener(r,i):r===H?this.patchRef(i):shared.startsWith(r,L)?this.patchUpdateHandler(r,i):r!==f&&this.patchNormalProp(r,i);this.props=e;}}patchEventListener(e,o){let r=e.slice(2).toLowerCase(),i=m(this.rootNode.nodes[0],r,o);this.emitter.add(i);}patchRef(e){var o,r;e.value=(r=(o=this.rootNode)==null?void 0:o.firstChild)!=null?r:null;}patchUpdateHandler(e,o){this.proxyProps[e]=$(o);}patchNormalProp(e,o){let r=this.getNodeTrack(e);r.cleanup=signal.effect(()=>{this.proxyProps[e]=shared.isFunction(o)?o():o;});}cleanup(){this.trackMap.forEach(e=>{var o;return (o=e.cleanup)==null?void 0:o.call(e)}),this.trackMap.clear(),this.emitter.forEach(e=>e()),this.emitter.clear();}};function se(n,t,e,o){let r=new Map,i=Array.from(t.values());if(i.length&&e.length===0)return be(n,i,o),r;let s=[],c=ke(e),d=0;for(let[l,a]of e.entries()){let N=i[d],v=S(N,l);for(;N&&!c.has(v);)M(N),t.delete(v),N=i[++d],v=S(N,l);let U=S(a,l),G=t.get(U);if(G&&(a=Me(n,G,a)),N)if(N===G)d++;else {let B=document.createComment("");g(n,B,N),s.push([B,a]);}else g(n,a,o);r.set(U,a);}return s.forEach(([l,a])=>{J(n,a,l);}),t.forEach((l,a)=>{l.isConnected&&!r.has(a)&&M(l);}),r}function be(n,t,e){if(n.childNodes.length===t.length+(e?1:0))n.innerHTML="",e&&g(n,e);else {let o=document.createRange(),r=t[0],i=h(r)?r.firstChild:r;o.setStartBefore(i),e?o.setEndBefore(e):o.setEndAfter(n),o.deleteContents();}t.forEach(o=>{h(o)&&o.unmount();});}function Me(n,t,e){return t===e?t:h(t)&&h(e)&&t.template===e.template?(e.inheritNode(t),e):t instanceof Text&&e instanceof Text?(t.textContent!==e.textContent&&(t.textContent=e.textContent),t):(J(n,e,t),e)}function ke(n){let t=new Map;for(let[e,o]of n.entries()){let r=S(o,e);t.set(r,o);}return t}function S(n,t){if(h(n)){let e=n.key;if(e!=null)return String(e)}return `_$${t}$`}var x=class{constructor(t,e,o){this.template=t;this.props=e;this.key=o;this.treeMap=new Map;this.mounted=!1;this.nodes=[];this.trackMap=new Map;this.bindValueKeys=[];this.parent=null;u.isSSR&&(this.componentIndex=Z(this.template));}get firstChild(){var t;return (t=this.nodes[0])!=null?t:null}get isConnected(){return this.mounted}addEventListener(){}removeEventListener(){}mount(t,e){var i;if(this.parent=t,this.isConnected)return this.nodes.forEach(s=>g(t,s,e)),this.nodes;shared.isArray(this.template)&&(this.template=w(this.template.join("")));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.childNodes.forEach(s=>{o.append(s);})),this.nodes=Array.from(o.childNodes),u.isSSR?this.mapSSGNodeTree(t):this.mapNodeTree(t,o),g(t,o,e),this.patchProps(this.props),this.mounted=!0,this.nodes}unmount(){this.trackMap.forEach(t=>{t.cleanup&&t.cleanup();}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(t=>M(t)),this.nodes=[],this.mounted=!1,this.key&&k.delete(this.key);}inheritNode(t){this.mounted=t.mounted,this.nodes=t.nodes,this.trackMap=t.trackMap,this.treeMap=t.treeMap;let e=this.props;this.props=t.props,this.patchProps(e);}mapSSGNodeTree(t){this.treeMap.set(0,t),this.walkNodeTree(t,this.handleSSGNode.bind(this));}mapNodeTree(t,e){let o=1;this.treeMap.set(0,t);let r=[t],i=s=>{s.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(this.treeMap.set(o++,s),r.push(s));};this.walkNodeTree(e,i);}walkNodeTree(t,e){t.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&e(t);let o=t.firstChild;for(;o;)this.walkNodeTree(o,e),o=o.nextSibling;}handleSSGNode(t){var e;if(t.nodeType===Node.COMMENT_NODE){let[o,r]=((e=t.textContent)==null?void 0:e.split("-"))||[];if(0===+o&&+r===this.componentIndex){let i=t.nextSibling;this.treeMap.set(+r,i);}}else if(t.nodeType!==Node.TEXT_NODE){let{ci:o="-1",hk:r}=(t==null?void 0:t.dataset)||{};r&&+o===this.componentIndex&&this.treeMap.set(+r,t);}}patchProps(t){t&&(Object.entries(t).forEach(([e,o])=>{let r=Number(e),i=this.treeMap.get(r);i&&this.patchProp(e,i,o,r===0);}),this.props=t);}patchProp(t,e,o,r){o&&Object.entries(o).forEach(([i,s])=>{if(i===f&&s)this.patchChildren(t,e,s,r);else if(i===H)o[i].value=e;else if(shared.startsWith(i,P))this.patchEventListener(t,e,i,s);else {if(this.bindValueKeys.includes(i))return;let c=this.getBindUpdateValue(o,t,i);this.patchAttribute(t,e,i,s,c);}});}getBindUpdateValue(t,e,o){let r=`${L}${shared.capitalize(o)}`;if(r&&t[r]&&shared.isFunction(t[r]))return this.bindValueKeys.push(r),t[r]}patchChildren(t,e,o,r){if(shared.isArray(o))o.filter(Boolean).forEach((i,s)=>{var v;let[c,d]=shared.isArray(i)?i:[i,null],l=shared.isNil(d)?null:(v=this.treeMap.get(d))!=null?v:null,a=`${t}:${f}:${s}`,N=this.getNodeTrack(a,!0,r);this.patchChild(N,e,c,l);});else {let i=`${t}:${f}:0`,s=this.getNodeTrack(i,!0,r);this.patchChild(s,e,o,null);}}patchEventListener(t,e,o,r){let i=o.slice(2).toLowerCase(),s=this.getNodeTrack(`${t}:${o}`);s.cleanup=m(e,i,r);}patchAttribute(t,e,o,r,i){let s=this.getNodeTrack(`${t}:${o}`),c=signal.shallowSignal(),d=signal.effect(()=>{let a=shared.isFunction(r)?r():r;shared.isPlainObject(a)&&shared.isPlainObject(c.peek())&&JSON.stringify(c.value)===JSON.stringify(a)||(c.value=signal.isSignal(a)?a.value:a,oe(e,o,c.value));}),l;i&&shared.isHTMLElement(e)&&(l=ne(e,a=>{i(a);})),s.cleanup=()=>{d&&d(),l&&l();};}getNodeTrack(t,e,o){let r=this.trackMap.get(t);return r||(r={cleanup:()=>{}},e&&(r.lastNodes=new Map),o&&(r.isRoot=!0),this.trackMap.set(t,r)),r.cleanup&&r.cleanup(),r}patchChild(t,e,o,r){shared.isFunction(o)?t.cleanup=signal.effect(()=>{let i=shared.coerceArray(o()).map(F);u.isSSR?t.lastNodes=this.reconcileChildren(e,i,r):t.lastNodes=se(e,t.lastNodes,i,r);}):shared.coerceArray(o).forEach((i,s)=>{let c=F(i),d=S(c,s);u.isSSR?t.lastNodes=this.reconcileChildren(e,[c],r):(t.lastNodes.set(d,c),g(e,c,r));});}reconcileChildren(t,e,o){let r=new Map,i=Array.from(t.childNodes).filter(s=>{var c,d;return s.nodeType===Node.TEXT_NODE&&((c=s.previousSibling)==null?void 0:c.nodeType)===Node.COMMENT_NODE&&((d=s.nextSibling)==null?void 0:d.nodeType)===Node.COMMENT_NODE});return e.forEach((s,c)=>{let d=S(s,c);s.nodeType===Node.TEXT_NODE?i.forEach(l=>{s.textContent===l.textContent&&t.replaceChild(s,l);}):g(t,s,o),r.set(d,s);}),r}};var k=new Map;function j(n,t,e={},o){if(o){let i=k.get(o);if(i)return i}typeof t=="string"&&(t=w(t));let r=new n(t,e,o);return o&&r instanceof y&&k.set(o,r),r}function K(n,t={},e){if(n===A)return le(n,t);if(shared.isString(n)){let o=re(n),r={[z]:t};return j(x,o,r,e)}return shared.isFunction(n)?j(y,n,t,e):j(x,n,t,e)}function $e(n){return n instanceof y}function h(n){return n instanceof y||n instanceof x}function w(n){let t=document.createElement("template");return t.innerHTML=n,t}function le(n,t){let e=t.children?{[q]:{children:Array.isArray(t.children)?t.children.filter(Boolean):[t.children]}}:t,o=n===A?w(A):n;return j(x,o,e)}function Ie(n){p.ref&&p.ref.addHook("mounted",n);}function je(n){p.ref&&p.ref.addHook("destroy",n);}function Ke(n,t){p.ref&&p.ref.setContext(n,t);}function Xe(n,t){var e;return (e=p.ref&&p.ref.getContext(n))!=null?e:t}function Ge(n,t){u.setSSG();let o=new b(n,t||{}).mount();return u.setClient(),o}function De(n,t){let e=typeof t=="string"?document.querySelector(t):t;if(!e)throw new Error(`Could not find container: ${t}`);u.setSSR(),K(n).mount(e),u.setClient();}function Fe(n,t){return u.isSSG?new b(n,t):K(n,t)}exports.Fragment=le;exports.h=K;exports.hydrate=De;exports.inject=Xe;exports.isComponent=$e;exports.isJsxElement=h;exports.onDestroy=je;exports.onMount=Ie;exports.provide=Ke;exports.renderToString=Ge;exports.ssg=Fe;exports.template=w;//# sourceMappingURL=template.cjs.js.map
|
|
7
7
|
//# sourceMappingURL=template.cjs.js.map
|
package/dist/template.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sharedConfig.ts","../src/lifecycleContext.ts","../src/ssgNode.ts","../src/utils.ts","../src/componentNode.ts","../src/patch.ts","../src/templateNode.ts","../src/fragmentNode.ts","../src/jsxRenderer.ts","../src/hooks.ts","../src/server.ts"],"names":["EVENT_PREFIX","UPDATE_PREFIX","CHILDREN_PROP","EMPTY_TEMPLATE","FRAGMENT_PROP_KEY","SINGLE_PROP_KEY","REF_KEY","PLACEHOLDER","RenderContext","renderContext","componentMap","enterComponent","temp","index","getComponentIndex","_a","_LifecycleContext","hook","cb","context","value","set","LifecycleContext","isSSGNode","node","SSGNode","componentIndex","template","props","key","isArray","htmlString","match","p1","p2","_","tagName","attrs","output","isFunction","root","cur","children","findIndex","t","isSignal","escape","child","renderedChild","childResult","extractSignal","SELF_CLOSING_TAGS","HTML_TAGS","coerceNode","data","isJsxElement","text","isFalsy","insertChild","parent","before","beforeNode","ssr","removeChild","replaceChild","setAttribute","element","attr","setClassAttribute","setStyleAttribute","setGenericAttribute","acc","kebabCase","bindNode","setter","addEventListener","eventName","handler","convertToHtmlTag","signal","ComponentNode","signalObject","startsWith","_b","_c","_d","reactive","mountedNode","cleanup","trackKey","track","prop","event","newValue","effect","patchChildren","childrenMap","nextChildren","result","clearChildren","replaces","nextChildrenMap","mapKeys","childIndex","i","currChild","currKey","getKey","origChild","patch","placeholder","range","start","next","jsxKey","TemplateNode","createTemplate","cloneNode","firstChild","tree","arr","handleNode","type","textNode","ci","hk","isRoot","updateFn","updateKey","capitalize","item","path","isNil","listener","triggerValue","shallowSignal","unFnValue","isPlainObject","cleanupBind","isHTMLElement","trackLastNodes","nextNodes","coerceArray","newNode","textNodes","ne","FragmentNode","h","Fragment","isString","htmlTemplate","isComponent","html","onMount","onDestroy","provide","inject","defaultValue","renderToString","component","hydrate","container","rootElement","ssg"],"mappings":"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","file":"template.cjs.js","sourcesContent":["/**\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\nexport const EVENT_PREFIX = 'on';\nexport const UPDATE_PREFIX = 'update';\nexport const CHILDREN_PROP = 'children';\n\nexport const EMPTY_TEMPLATE = '';\nexport const FRAGMENT_PROP_KEY = '0';\nexport const SINGLE_PROP_KEY = '1';\nexport const STYLE_KEY = 'style';\nexport const REF_KEY = 'ref';\n\nexport const PLACEHOLDER = ' __PLACEHOLDER__ ';\n\nexport enum ComponentType {\n TEXT,\n TEXT_COMPONENT,\n COMPONENT,\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\nconst componentMap = new Map();\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\nexport class LifecycleContext {\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: LifecycleContext | null = null;\n static context: Record<symbol, Signal<any>> = {};\n\n // Hooks for different lifecycle stages\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n\n // Add a hook for a specific lifecycle stage\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n // Get a value from the static context\n getContext<T>(context: symbol | string | number): T | undefined {\n return LifecycleContext.context[context];\n }\n\n // Set a value in the static context\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\n removeRef() {\n LifecycleContext.ref = null;\n }\n\n // Clear all hooks\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 './lifecycleContext';\nimport { extractSignal } from './utils';\nimport { CHILDREN_PROP, ComponentType, PLACEHOLDER, enterComponent } from './sharedConfig';\nimport type { Signal } from '@estjs/signal';\nimport type { EssorNode, Props } from '../types';\n\nexport function isSSGNode(node: unknown): node is SSGNode {\n return node instanceof SSGNode;\n}\n\nlet componentIndex = 1;\n\nexport class SSGNode extends LifecycleContext {\n private templates: string[];\n\n constructor(\n private template: string[] | SSGNode | ((props: Props) => SSGNode),\n private props: Props = {},\n public key?: string,\n ) {\n super();\n enterComponent(template, componentIndex);\n this.templates = this.processTemplate();\n }\n\n private processTemplate(): string[] {\n if (isArray(this.template)) {\n const htmlString = this.template.join(PLACEHOLDER);\n const processedString = this.processHtmlString(htmlString);\n return processedString.split(PLACEHOLDER);\n }\n return [];\n }\n\n private processHtmlString(htmlString: string): string {\n return 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 }\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 return this.renderTemplate();\n }\n\n private renderTemplate(): string {\n Object.entries(this.props).forEach(([key, cur]) => {\n const children = cur.children;\n this.normalizeProps(cur);\n const findIndex = this.templates.findIndex(t => t.includes(`data-hk=\"${key}\"`));\n\n if (children) {\n this.renderChildren(children, findIndex);\n }\n this.templates[findIndex] = this.templates[findIndex].replace(\n `data-hk=\"${key}\"`,\n `data-hk=\"${key}\" ${this.generateAttributes(cur)}`,\n );\n });\n\n return this.templates.join('');\n }\n\n private normalizeProps(props: Props): void {\n Object.entries(props).forEach(([key, value]) => {\n if (key === CHILDREN_PROP) {\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\n private generateAttributes(props: Props): string {\n return Object.entries(props)\n .filter(([key, value]) => key !== CHILDREN_PROP && !isFunction(value))\n .map(([key, value]) => `${key}=\"${escape(String(value))}\"`)\n .join(' ');\n }\n\n private renderChildren(children: any[], findIndex: number): void {\n children.forEach(([child]) => {\n componentIndex++;\n const renderedChild = this.renderChild(child);\n this.templates[findIndex] += renderedChild;\n });\n }\n\n private renderChild(child: EssorNode | Function | Signal<unknown>): string {\n if (isSignal(child)) {\n return `<!--${ComponentType.TEXT_COMPONENT}-${componentIndex}-->${(child as Signal<any>).value}<!$>`;\n } else if (isFunction(child)) {\n return this.renderChild(child(this.props));\n } else if (isSSGNode(child)) {\n const childResult = (child as SSGNode).mount();\n return isFunction(childResult) ? childResult(this.props) : extractSignal(childResult);\n } else {\n return `<!--${ComponentType.TEXT_COMPONENT}-${componentIndex}-->${child}<!$>`;\n }\n }\n}\n","import { isArray, isFalsy, kebabCase } from '@estjs/shared';\nimport { type Signal, isSignal } from '@estjs/signal';\nimport { isJsxElement } from './jsxRenderer';\nimport { renderContext } from './sharedConfig';\nimport { isSSGNode } from './ssgNode';\n\n// 新增:常量定义\nconst SELF_CLOSING_TAGS =\n 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr'.split(',');\nconst HTML_TAGS =\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 setClassAttribute(element, value);\n } else if (attr === 'style') {\n setStyleAttribute(element, value);\n } else {\n setGenericAttribute(element, attr, value);\n }\n}\n\nfunction setClassAttribute(element: HTMLElement, value: unknown): void {\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}\n\nfunction setStyleAttribute(element: HTMLElement, value: unknown): void {\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 Object.entries(obj).forEach(([key, value]) => {\n element.style.setProperty(kebabCase(key), String(value));\n });\n }\n}\n\nfunction setGenericAttribute(element: HTMLElement, attr: string, value: unknown): void {\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\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 * 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 HTML_TAGS.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 return SELF_CLOSING_TAGS.includes(tagName) ? `<${tagName}/>` : `<${tagName}></${tagName}>`;\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","import { isFunction, startsWith } from '@estjs/shared';\nimport { type Signal, effect, signal, signalObject } from '@estjs/signal';\nimport { reactive } from '@estjs/signal';\nimport { addEventListener, extractSignal } from './utils';\nimport { LifecycleContext } from './lifecycleContext';\nimport { CHILDREN_PROP, EVENT_PREFIX, REF_KEY, UPDATE_PREFIX } from './sharedConfig';\nimport type { TemplateNode } from './templateNode';\nimport type { EssorComponent, NodeTrack, Props } from '../types';\n\nexport class ComponentNode extends LifecycleContext implements JSX.Element {\n protected proxyProps: Record<string, Signal<unknown>>;\n protected emitter = new Set<() => void>();\n protected rootNode: TemplateNode | null = null;\n protected trackMap = new Map<string, NodeTrack>();\n\n constructor(\n public template: EssorComponent,\n public props?: Props,\n public key?: string,\n ) {\n super();\n\n this.key ||= props && (props.key as string);\n this.proxyProps = this.createProxyProps(props);\n }\n\n protected createProxyProps(props?: Props): Record<string, Signal<unknown>> {\n if (!props) return {};\n return signalObject(\n props,\n key =>\n startsWith(key, EVENT_PREFIX) || startsWith(key, UPDATE_PREFIX) || key === CHILDREN_PROP,\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 (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n this.initRef();\n this.rootNode = this.template(reactive(this.proxyProps, [CHILDREN_PROP]));\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.callMountHooks();\n this.patchProps(this.props);\n this.removeRef();\n\n return mountedNode;\n }\n\n unmount(): void {\n this.callDestroyHooks();\n this.clearHooks();\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.clearEmitter();\n }\n\n protected callMountHooks(): void {\n this.hooks.mounted.forEach(handler => handler());\n }\n\n protected callDestroyHooks(): void {\n this.hooks.destroy.forEach(handler => handler());\n }\n\n protected clearEmitter(): void {\n for (const cleanup of this.emitter) {\n cleanup();\n }\n this.emitter.clear();\n }\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 protected 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 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, EVENT_PREFIX) && this.rootNode?.firstChild) {\n this.patchEventListener(key, prop);\n } else if (key === REF_KEY) {\n this.patchRef(prop);\n } else if (startsWith(key, UPDATE_PREFIX)) {\n this.patchUpdateHandler(key, prop);\n } else if (key !== CHILDREN_PROP) {\n this.patchNormalProp(key, prop);\n }\n }\n this.props = props;\n }\n\n protected patchEventListener(key: string, prop: any): void {\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 }\n\n protected patchRef(prop: { value: Node | null }): void {\n prop.value = this.rootNode?.firstChild ?? null;\n }\n\n protected patchUpdateHandler(key: string, prop: any): void {\n this.props![key] = extractSignal(prop);\n }\n\n protected patchNormalProp(key: string, prop: any): void {\n const newValue = (this.proxyProps[key] ??= signal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = effect(() => {\n newValue.value = isFunction(prop) ? prop() : prop;\n });\n }\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './jsxRenderer';\n\n// Type alias for nodes that can be either DOM Node or JSX Element\ntype AnyNode = Node | JSX.Element;\n\n/**\n * Patches children of a parent node with new children.\n * This function is responsible for efficiently updating the DOM to reflect changes in the virtual DOM.\n *\n * @param parent - The parent node whose children are being updated\n * @param childrenMap - A map of current children, keyed by their unique identifiers\n * @param nextChildren - An array of new children to be patched in\n * @param before - The node before which new children should be inserted (if any)\n * @returns A new map of children after patching\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 there are no new children, clear all existing children\n if (children.length && 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 // Iterate through new children and patch or insert as necessary\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children[childIndex];\n let currKey = getKey(currChild, i);\n\n // Remove any current children that are not in the new children set\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 the child already exists, patch it\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n // Handle insertion or replacement of children\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 // Replace placeholders with actual nodes\n replaces.forEach(([placeholder, child]) => {\n replaceChild(parent, child, placeholder);\n });\n\n // Remove any remaining children that weren't in the new set\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\n/**\n * Clears all children from a parent node.\n *\n * @param parent - The parent node to clear children from\n * @param children - The array of children to be cleared\n * @param before - The node before which clearing should stop (if any)\n */\nfunction 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 * Patches a single node, replacing it with a new node if necessary.\n *\n * @param parent - The parent node\n * @param node - The current node\n * @param next - The new node to patch with\n * @returns The patched 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\n/**\n * Maps an array of nodes to a Map, using their keys as identifiers.\n *\n * @param children - The array of nodes to map\n * @returns A Map of nodes, keyed by their unique identifiers\n */\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\n/**\n * Gets the key for a node, either from its 'key' property (if it's a JSX element)\n * or generates a key based on its index.\n *\n * @param node - The node to get the key for\n * @param index - The index of the node in its parent's children array\n * @returns A string key for the node\n */\nexport function getKey(node: AnyNode, index: number): string {\n if (isJsxElement(node)) {\n const jsxKey = (node as any).key;\n if (jsxKey !== undefined && jsxKey !== null) {\n return String(jsxKey);\n }\n }\n return `_$${index}$`;\n}\n","import {\n capitalize,\n coerceArray,\n isArray,\n isFunction,\n isHTMLElement,\n isNil,\n isPlainObject,\n startsWith,\n} from '@estjs/shared';\nimport { effect, isSignal, shallowSignal } from '@estjs/signal';\nimport {\n addEventListener,\n bindNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { getKey, patchChildren } from './patch';\nimport {\n CHILDREN_PROP,\n ComponentType,\n EVENT_PREFIX,\n REF_KEY,\n UPDATE_PREFIX,\n getComponentIndex,\n renderContext,\n} from './sharedConfig';\nimport { createTemplate } from './jsxRenderer';\nimport type { NodeTrack, Props } from '../types';\n\nexport class TemplateNode implements JSX.Element {\n protected treeMap = new Map<number, Node>();\n protected mounted = false;\n protected nodes: Node[] = [];\n protected trackMap = new Map<string, NodeTrack>();\n protected bindValueKeys: string[] = [];\n protected componentIndex: number;\n protected parent: Node | null = null;\n\n constructor(\n public template: HTMLTemplateElement,\n public props?: Props,\n public key?: string,\n ) {\n if (renderContext.isSSR) {\n this.componentIndex = getComponentIndex(this.template);\n }\n }\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n\n addEventListener(): void {}\n removeEventListener(): void {}\n\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n\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 && track.cleanup();\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n\n this.nodes = [];\n this.mounted = false;\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 const props = this.props;\n this.props = node.props;\n this.patchProps(props);\n }\n\n protected mapSSGNodeTree(parent: Node): void {\n this.treeMap.set(0, parent);\n this.walkNodeTree(parent, this.handleSSGNode.bind(this));\n }\n\n // protected method to map node tree\n protected mapNodeTree(parent: Node, tree: Node): void {\n let index = 1;\n this.treeMap.set(0, parent);\n const arr = [parent];\n\n const handleNode = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n arr.push(node);\n }\n };\n\n this.walkNodeTree(tree, handleNode);\n }\n\n protected walkNodeTree(node: Node, handler: (node: Node) => void): void {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n handler(node);\n }\n let child = node.firstChild;\n while (child) {\n this.walkNodeTree(child, handler);\n child = child.nextSibling;\n }\n }\n\n protected handleSSGNode(node: Node): void {\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\n protected 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 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 protected patchProp(\n key: string,\n node: Node,\n props: Record<string, unknown>,\n isRoot: boolean,\n ): void {\n if (!props) return;\n\n Object.entries(props).forEach(([attr, value]) => {\n if (attr === CHILDREN_PROP && value) {\n this.patchChildren(key, node, value, isRoot);\n } else if (attr === REF_KEY) {\n (props[attr] as { value: Node }).value = node;\n } else if (startsWith(attr, EVENT_PREFIX)) {\n this.patchEventListener(key, node, attr, value as EventListener);\n } else {\n if (this.bindValueKeys.includes(attr)) return;\n const updateFn = this.getBindUpdateValue(props, key, attr);\n this.patchAttribute(key, node as HTMLElement, attr, value, updateFn);\n }\n });\n }\n\n protected getBindUpdateValue(props: Record<string, any>, key: string, attr: string) {\n const updateKey = `${UPDATE_PREFIX}${capitalize(attr)}`;\n if (updateKey && props[updateKey] && isFunction(props[updateKey])) {\n this.bindValueKeys.push(updateKey);\n return props[updateKey];\n }\n }\n\n protected patchChildren(key: string, node: Node, children: unknown, isRoot: boolean): void {\n if (!isArray(children)) {\n const trackKey = `${key}:${CHILDREN_PROP}:0`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n this.patchChild(track, node, children, null);\n } else {\n 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}:${CHILDREN_PROP}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n this.patchChild(track, node, child, before);\n });\n }\n }\n\n protected patchEventListener(\n key: string,\n node: Node,\n attr: string,\n listener: EventListener,\n ): void {\n const eventName = attr.slice(2).toLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n track.cleanup = addEventListener(node, eventName, listener);\n }\n\n protected patchAttribute(\n key: string,\n element: HTMLElement,\n attr: string,\n value: unknown,\n updateFn?: Function,\n ): void {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const triggerValue = shallowSignal();\n const cleanup = effect(() => {\n // trigger conditional expression\n const unFnValue = isFunction(value) ? value() : value;\n // TODO: class and style should be pure object\n if (\n isPlainObject(unFnValue) &&\n isPlainObject(triggerValue.peek()) &&\n JSON.stringify(triggerValue.value) === JSON.stringify(unFnValue)\n )\n return;\n\n triggerValue.value = isSignal(unFnValue) ? unFnValue.value : unFnValue;\n setAttribute(element, attr, triggerValue.value);\n });\n\n let cleanupBind;\n if (updateFn && isHTMLElement(element)) {\n cleanupBind = bindNode(element, value => {\n updateFn(value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n\n protected 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 && track.cleanup();\n return track;\n }\n\n protected patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = effect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode) as Node[];\n if (renderContext.isSSR) {\n track.lastNodes = this.reconcileChildren(parent, nextNodes, before);\n } else {\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 if (renderContext.isSSR) {\n track.lastNodes = this.reconcileChildren(parent, [newNode], before);\n } else {\n track.lastNodes!.set(key, newNode);\n insertChild(parent, newNode, before);\n }\n });\n }\n }\n\n protected 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","import { removeChild } from './utils';\nimport { TemplateNode } from './templateNode';\n\nexport class FragmentNode extends TemplateNode {\n unmount(): void {\n this.trackMap.forEach(track => {\n // clear track node\n if (track.lastNodes) {\n track.lastNodes.forEach(node => {\n removeChild(node);\n });\n }\n track.cleanup && track.cleanup();\n });\n\n this.trackMap.clear();\n this.treeMap.clear();\n\n this.nodes.forEach(node => {\n removeChild(node);\n });\n\n this.nodes = [];\n this.mounted = false;\n }\n}\n","import { isArray, isFunction, isString } from '@estjs/shared';\nimport { convertToHtmlTag } from './utils';\nimport { ComponentNode } from './componentNode';\nimport { TemplateNode } from './templateNode';\nimport { EMPTY_TEMPLATE, FRAGMENT_PROP_KEY, SINGLE_PROP_KEY } from './sharedConfig';\nimport { FragmentNode } from './fragmentNode';\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 // handle fragment\n if (template === EMPTY_TEMPLATE) {\n return Fragment(template, props!);\n }\n // Handle string templates\n if (isString(template)) {\n const htmlTemplate = convertToHtmlTag(template);\n props = { [SINGLE_PROP_KEY]: props };\n return new TemplateNode(createTemplate(htmlTemplate), props, key);\n }\n\n // Handle functional templates (Components)\n if (isFunction(template)) {\n return new ComponentNode(template, props, key);\n }\n\n // Handle HTMLTemplateElement\n return new TemplateNode(template as HTMLTemplateElement, 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 /**\n * the code that sets the unclosed tag, the browser's innerHTML method is, will automatically close the tag.\n * like `<div><button type=button>`\n * it will be translated:\n * `<div><button type=button></button></div>`\n */\n template.innerHTML = html;\n return template;\n}\n\nexport function Fragment<\n T extends\n | JSX.JSXElement\n | string\n | number\n | boolean\n | (JSX.JSXElement | string | number | boolean)[],\n>(\n template: HTMLTemplateElement | '',\n props:\n | { children: T }\n | {\n [key in string]: {\n children: T;\n };\n },\n) {\n if (props.children) {\n props = {\n [FRAGMENT_PROP_KEY]: {\n children: (isArray(props.children)\n ? props.children.filter(Boolean)\n : [props.children]) as T,\n },\n };\n }\n if (template === EMPTY_TEMPLATE) {\n template = createTemplate(EMPTY_TEMPLATE);\n }\n return new FragmentNode(template, props);\n}\n","import { isSymbol } from '@estjs/shared';\nimport { LifecycleContext } from './lifecycleContext';\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 && 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 && 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\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 provide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n): void {\n assertInsideComponent('provide', key);\n LifecycleContext.ref && LifecycleContext.ref.setContext(key as string, value);\n}\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 inject<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('inject', key);\n return (LifecycleContext.ref && LifecycleContext.ref.getContext(key as string)) ?? defaultValue;\n}\n","import { SSGNode } from './ssgNode';\nimport { renderContext } from './sharedConfig';\nimport { h } from './jsxRenderer';\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?: Props): string {\n renderContext.setSSG();\n // Create a new SSGNode with the component and props\n const ssrNode = new SSGNode(component, props || {});\n // Mount the SSGNode to get the rendered HTML\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 * @throws Error if the container is not found.\n */\nexport function hydrate(component: EssorComponent, container: string | Element): void {\n // Find the root element based on the container parameter\n const rootElement = typeof container === 'string' ? document.querySelector(container) : container;\n\n if (!rootElement) {\n throw new Error(`Could not find container: ${container}`);\n }\n renderContext.setSSR();\n // Create a new component using the h function and mount it to the root element\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: EssorComponent, props?: Props): SSGNode | JSX.Element {\n if (renderContext.isSSG) {\n return new SSGNode(component, props);\n }\n // If not in SSG mode, create and return a new JSX element\n return h(component, props);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/sharedConfig.ts","../src/lifecycleContext.ts","../src/ssgNode.ts","../src/utils.ts","../src/componentNode.ts","../src/templateNode.ts","../src/patch.ts","../src/jsxRenderer.ts","../src/hooks.ts","../src/server.ts"],"names":["EVENT_PREFIX","UPDATE_PREFIX","CHILDREN_PROP","EMPTY_TEMPLATE","FRAGMENT_PROP_KEY","SINGLE_PROP_KEY","REF_KEY","PLACEHOLDER","RenderContext","renderContext","componentMap","enterComponent","temp","index","getComponentIndex","_a","_LifecycleContext","hook","cb","context","value","set","LifecycleContext","isSSGNode","node","SSGNode","componentIndex","template","props","key","isArray","htmlString","match","p1","p2","_","tagName","attrs","output","isFunction","root","cur","children","findIndex","t","isSignal","escape","child","renderedChild","childResult","extractSignal","SELF_CLOSING_TAGS","coerceNode","data","isJsxElement","text","isFalsy","insertChild","parent","before","beforeNode","ssr","removeChild","replaceChild","setAttribute","element","attr","setClassAttribute","setStyleAttribute","setGenericAttribute","acc","kebabCase","bindNode","setter","addEventListener","eventName","handler","convertToHtmlTag","signal","ComponentNode","shallowReactive","startsWith","_b","_c","_d","reactive","componentCache","type","cleanup","hasChanged","trackKey","track","prop","event","effect","patchChildren","childrenMap","nextChildren","result","clearChildren","replaces","nextChildrenMap","mapKeys","childIndex","i","currChild","currKey","getKey","origChild","patch","placeholder","range","start","next","jsxKey","TemplateNode","createTemplate","cloneNode","firstChild","tree","arr","handleNode","textNode","ci","hk","isRoot","updateFn","updateKey","capitalize","item","path","isNil","listener","triggerValue","shallowSignal","unFnValue","isPlainObject","cleanupBind","isHTMLElement","trackLastNodes","nextNodes","coerceArray","newNode","textNodes","ne","createNodeCache","NodeConstructor","cached","h","Fragment","isString","htmlTemplate","wrappedProps","isComponent","html","processedProps","templateElement","onMount","onDestroy","provide","inject","defaultValue","renderToString","component","hydrate","container","rootElement","ssg"],"mappings":"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","file":"template.cjs.js","sourcesContent":["/**\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\nexport const EVENT_PREFIX = 'on';\nexport const UPDATE_PREFIX = 'update';\nexport const CHILDREN_PROP = 'children';\n\nexport const EMPTY_TEMPLATE = '';\nexport const FRAGMENT_PROP_KEY = '0';\nexport const SINGLE_PROP_KEY = '1';\nexport const STYLE_KEY = 'style';\nexport const REF_KEY = 'ref';\n\nexport const PLACEHOLDER = ' __PLACEHOLDER__ ';\n\nexport enum ComponentType {\n TEXT,\n TEXT_COMPONENT,\n COMPONENT,\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\nconst componentMap = new Map();\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\nexport class LifecycleContext {\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: LifecycleContext | null = null;\n static context: Record<symbol, Signal<any>> = {};\n\n // Hooks for different lifecycle stages\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n\n // Add a hook for a specific lifecycle stage\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n // Get a value from the static context\n getContext<T>(context: symbol | string | number): T | undefined {\n return LifecycleContext.context[context];\n }\n\n // Set a value in the static context\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\n removeRef() {\n LifecycleContext.ref = null;\n }\n\n // Clear all hooks\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 './lifecycleContext';\nimport { extractSignal } from './utils';\nimport { CHILDREN_PROP, ComponentType, PLACEHOLDER, enterComponent } from './sharedConfig';\nimport type { Signal } from '@estjs/signal';\nimport type { EssorNode, Props } from '../types';\n\nexport function isSSGNode(node: unknown): node is SSGNode {\n return node instanceof SSGNode;\n}\n\nlet componentIndex = 1;\n\nexport class SSGNode extends LifecycleContext {\n private templates: string[];\n\n constructor(\n private template: string[] | SSGNode | ((props: Props) => SSGNode),\n private props: Props = {},\n public key?: string,\n ) {\n super();\n enterComponent(template, componentIndex);\n this.templates = this.processTemplate();\n }\n\n private processTemplate(): string[] {\n if (isArray(this.template)) {\n const htmlString = this.template.join(PLACEHOLDER);\n const processedString = this.processHtmlString(htmlString);\n return processedString.split(PLACEHOLDER);\n }\n return [];\n }\n\n private processHtmlString(htmlString: string): string {\n return 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 }\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 return this.renderTemplate();\n }\n\n private renderTemplate(): string {\n Object.entries(this.props).forEach(([key, cur]) => {\n const children = cur.children;\n this.normalizeProps(cur);\n const findIndex = this.templates.findIndex(t => t.includes(`data-hk=\"${key}\"`));\n\n if (children) {\n this.renderChildren(children, findIndex);\n }\n this.templates[findIndex] = this.templates[findIndex].replace(\n `data-hk=\"${key}\"`,\n `data-hk=\"${key}\" ${this.generateAttributes(cur)}`,\n );\n });\n\n return this.templates.join('');\n }\n\n private normalizeProps(props: Props): void {\n Object.entries(props).forEach(([key, value]) => {\n if (key === CHILDREN_PROP) {\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\n private generateAttributes(props: Props): string {\n return Object.entries(props)\n .filter(([key, value]) => key !== CHILDREN_PROP && !isFunction(value))\n .map(([key, value]) => `${key}=\"${escape(String(value))}\"`)\n .join(' ');\n }\n\n private renderChildren(children: any[], findIndex: number): void {\n children.forEach(([child]) => {\n componentIndex++;\n const renderedChild = this.renderChild(child);\n this.templates[findIndex] += renderedChild;\n });\n }\n\n private renderChild(child: EssorNode | Function | Signal<unknown>): string {\n if (isSignal(child)) {\n return `<!--${ComponentType.TEXT_COMPONENT}-${componentIndex}-->${(child as Signal<any>).value}<!$>`;\n } else if (isFunction(child)) {\n return this.renderChild(child(this.props));\n } else if (isSSGNode(child)) {\n const childResult = (child as SSGNode).mount();\n return isFunction(childResult) ? childResult(this.props) : extractSignal(childResult);\n } else {\n return `<!--${ComponentType.TEXT_COMPONENT}-${componentIndex}-->${child}<!$>`;\n }\n }\n}\n","import { isArray, isFalsy, kebabCase } from '@estjs/shared';\nimport { type Signal, isSignal } from '@estjs/signal';\nimport { isJsxElement } from './jsxRenderer';\nimport { renderContext } from './sharedConfig';\nimport { isSSGNode } from './ssgNode';\n\nconst SELF_CLOSING_TAGS =\n 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr'.split(',');\nconst HTML_TAGS =\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 setClassAttribute(element, value);\n } else if (attr === 'style') {\n setStyleAttribute(element, value);\n } else {\n setGenericAttribute(element, attr, value);\n }\n}\n\nfunction setClassAttribute(element: HTMLElement, value: unknown): void {\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}\n\nfunction setStyleAttribute(element: HTMLElement, value: unknown): void {\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 Object.entries(obj).forEach(([key, value]) => {\n element.style.setProperty(kebabCase(key), String(value));\n });\n }\n}\n\nfunction setGenericAttribute(element: HTMLElement, attr: string, value: unknown): void {\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\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 * 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 HTML_TAGS.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 return SELF_CLOSING_TAGS.includes(tagName) ? `<${tagName}/>` : `<${tagName}></${tagName}>`;\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","import { hasChanged, isFunction, startsWith } from '@estjs/shared';\nimport { type Signal, effect, shallowReactive } from '@estjs/signal';\nimport { reactive } from '@estjs/signal';\nimport { addEventListener, extractSignal } from './utils';\nimport { LifecycleContext } from './lifecycleContext';\nimport { CHILDREN_PROP, EVENT_PREFIX, REF_KEY, UPDATE_PREFIX } from './sharedConfig';\nimport { componentCache } from './jsxRenderer';\nimport type { EssorComponent, NodeTrack, Props } from '../types';\nimport type { TemplateNode } from './templateNode';\n\nexport class ComponentNode extends LifecycleContext implements JSX.Element {\n protected proxyProps: Record<string, Signal<unknown>>;\n protected emitter = new Set<() => void>();\n protected rootNode: TemplateNode | null = null;\n protected trackMap = new Map<string, NodeTrack>();\n protected nodes: Node[] = [];\n protected parent: Node | null = null;\n protected before: Node | null = null;\n\n constructor(\n public template: EssorComponent,\n public props: Props,\n public key?: string,\n ) {\n super();\n this.key ||= props && (props.key as string);\n this.proxyProps ||= this.createProxyProps(props);\n }\n\n protected createProxyProps(props?: Props): Record<string, Signal<unknown>> {\n if (!props) return {};\n return shallowReactive(\n props,\n key =>\n startsWith(key, EVENT_PREFIX) || startsWith(key, UPDATE_PREFIX) || key === CHILDREN_PROP,\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 this.parent = parent;\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 this.initRef();\n this.rootNode = this.template(reactive(this.proxyProps, [CHILDREN_PROP]));\n this.nodes = this.rootNode?.mount(parent, before) ?? [];\n this.callMountHooks();\n this.patchProps(this.props);\n this.removeRef();\n\n return this.nodes;\n }\n\n unmount(): void {\n this.callLifecycleHooks('destroy');\n this.cleanup();\n this.rootNode?.unmount();\n this.resetState();\n\n if (this.key) {\n componentCache.delete(this.key);\n }\n }\n\n private resetState(): void {\n this.rootNode = null;\n this.proxyProps = {};\n this.nodes = [];\n this.parent = null;\n }\n\n protected callLifecycleHooks(type: 'mounted' | 'destroy'): void {\n this.hooks[type].forEach(handler => handler());\n }\n\n protected callMountHooks(): void {\n this.hooks.mounted.forEach(handler => handler());\n }\n\n protected callDestroyHooks(): void {\n this.hooks.destroy.forEach(handler => handler());\n }\n\n protected clearEmitter(): void {\n for (const cleanup of this.emitter) {\n cleanup();\n }\n this.emitter.clear();\n }\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 if (hasChanged(node.props, this.props)) {\n const props = this.props;\n this.props = node.props;\n this.patchProps(props);\n }\n }\n\n protected 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 patchProps(props: Record<string, any> | undefined) {\n if (!props) {\n return;\n }\n\n for (const [key, prop] of Object.entries(props)) {\n if (startsWith(key, EVENT_PREFIX) && this.rootNode?.firstChild) {\n this.patchEventListener(key, prop);\n } else if (key === REF_KEY) {\n this.patchRef(prop);\n } else if (startsWith(key, UPDATE_PREFIX)) {\n this.patchUpdateHandler(key, prop);\n } else if (key !== CHILDREN_PROP) {\n this.patchNormalProp(key, prop);\n }\n }\n this.props = props;\n }\n\n protected patchEventListener(key: string, prop: any): void {\n const event = key.slice(2).toLowerCase();\n const cleanup = addEventListener((this.rootNode as any)!.nodes[0], event, prop);\n this.emitter.add(cleanup);\n }\n\n protected patchRef(prop: { value: Node | null }): void {\n prop.value = this.rootNode?.firstChild ?? null;\n }\n\n protected patchUpdateHandler(key: string, prop: any): void {\n this.proxyProps![key] = extractSignal(prop);\n }\n\n protected patchNormalProp(key: string, prop: any): void {\n const track = this.getNodeTrack(key);\n track.cleanup = effect(() => {\n this.proxyProps[key] = isFunction(prop) ? prop() : prop;\n });\n }\n\n protected cleanup(): void {\n this.trackMap.forEach(track => track.cleanup?.());\n this.trackMap.clear();\n this.emitter.forEach(cleanup => cleanup());\n this.emitter.clear();\n }\n}\n","import {\n capitalize,\n coerceArray,\n isArray,\n isFunction,\n isHTMLElement,\n isNil,\n isPlainObject,\n startsWith,\n} from '@estjs/shared';\nimport { effect, isSignal, shallowSignal } from '@estjs/signal';\nimport {\n addEventListener,\n bindNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { getKey, patchChildren } from './patch';\nimport {\n CHILDREN_PROP,\n ComponentType,\n EVENT_PREFIX,\n REF_KEY,\n UPDATE_PREFIX,\n getComponentIndex,\n renderContext,\n} from './sharedConfig';\nimport { componentCache, createTemplate } from './jsxRenderer';\nimport type { NodeTrack, Props } from '../types';\n\nexport class TemplateNode implements JSX.Element {\n protected treeMap = new Map<number, Node>();\n protected mounted = false;\n protected nodes: Node[] = [];\n protected trackMap = new Map<string, NodeTrack>();\n protected bindValueKeys: string[] = [];\n protected componentIndex: number;\n protected parent: Node | null = null;\n\n constructor(\n public template: HTMLTemplateElement,\n public props: Props,\n public key?: string,\n ) {\n if (renderContext.isSSR) {\n this.componentIndex = getComponentIndex(this.template);\n }\n }\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\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 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 && track.cleanup();\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n\n this.nodes = [];\n this.mounted = false;\n\n if (this.key) {\n componentCache.delete(this.key);\n }\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 const props = this.props;\n this.props = node.props;\n this.patchProps(props);\n }\n\n protected mapSSGNodeTree(parent: Node): void {\n this.treeMap.set(0, parent);\n this.walkNodeTree(parent, this.handleSSGNode.bind(this));\n }\n\n // protected method to map node tree\n protected mapNodeTree(parent: Node, tree: Node): void {\n let index = 1;\n this.treeMap.set(0, parent);\n const arr = [parent];\n\n const handleNode = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n arr.push(node);\n }\n };\n\n this.walkNodeTree(tree, handleNode);\n }\n\n protected walkNodeTree(node: Node, handler: (node: Node) => void): void {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n handler(node);\n }\n let child = node.firstChild;\n while (child) {\n this.walkNodeTree(child, handler);\n child = child.nextSibling;\n }\n }\n\n protected handleSSGNode(node: Node): void {\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\n protected 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 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 protected patchProp(\n key: string,\n node: Node,\n props: Record<string, unknown>,\n isRoot: boolean,\n ): void {\n if (!props) return;\n\n Object.entries(props).forEach(([attr, value]) => {\n if (attr === CHILDREN_PROP && value) {\n this.patchChildren(key, node, value, isRoot);\n } else if (attr === REF_KEY) {\n (props[attr] as { value: Node }).value = node;\n } else if (startsWith(attr, EVENT_PREFIX)) {\n this.patchEventListener(key, node, attr, value as EventListener);\n } else {\n if (this.bindValueKeys.includes(attr)) return;\n const updateFn = this.getBindUpdateValue(props, key, attr);\n this.patchAttribute(key, node as HTMLElement, attr, value, updateFn);\n }\n });\n }\n\n protected getBindUpdateValue(props: Record<string, any>, key: string, attr: string) {\n const updateKey = `${UPDATE_PREFIX}${capitalize(attr)}`;\n if (updateKey && props[updateKey] && isFunction(props[updateKey])) {\n this.bindValueKeys.push(updateKey);\n return props[updateKey];\n }\n }\n\n protected patchChildren(key: string, node: Node, children: unknown, isRoot: boolean): void {\n if (!isArray(children)) {\n const trackKey = `${key}:${CHILDREN_PROP}:0`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n this.patchChild(track, node, children, null);\n } else {\n 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}:${CHILDREN_PROP}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n this.patchChild(track, node, child, before);\n });\n }\n }\n\n protected patchEventListener(\n key: string,\n node: Node,\n attr: string,\n listener: EventListener,\n ): void {\n const eventName = attr.slice(2).toLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n track.cleanup = addEventListener(node, eventName, listener);\n }\n\n protected patchAttribute(\n key: string,\n element: HTMLElement,\n attr: string,\n value: unknown,\n updateFn?: Function,\n ): void {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const triggerValue = shallowSignal();\n const cleanup = effect(() => {\n // trigger conditional expression\n const unFnValue = isFunction(value) ? value() : value;\n // TODO: class and style should be pure object\n if (\n isPlainObject(unFnValue) &&\n isPlainObject(triggerValue.peek()) &&\n JSON.stringify(triggerValue.value) === JSON.stringify(unFnValue)\n )\n return;\n\n triggerValue.value = isSignal(unFnValue) ? unFnValue.value : unFnValue;\n setAttribute(element, attr, triggerValue.value);\n });\n\n let cleanupBind;\n if (updateFn && isHTMLElement(element)) {\n cleanupBind = bindNode(element, value => {\n updateFn(value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n\n protected 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 && track.cleanup();\n return track;\n }\n\n protected patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = effect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode) as Node[];\n if (renderContext.isSSR) {\n track.lastNodes = this.reconcileChildren(parent, nextNodes, before);\n } else {\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 if (renderContext.isSSR) {\n track.lastNodes = this.reconcileChildren(parent, [newNode], before);\n } else {\n track.lastNodes!.set(key, newNode);\n insertChild(parent, newNode, before);\n }\n });\n }\n }\n\n protected 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","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './jsxRenderer';\n\n// Type alias for nodes that can be either DOM Node or JSX Element\ntype AnyNode = Node | JSX.Element;\n\n/**\n * Patches children of a parent node with new children.\n * This function is responsible for efficiently updating the DOM to reflect changes in the virtual DOM.\n *\n * @param parent - The parent node whose children are being updated\n * @param childrenMap - A map of current children, keyed by their unique identifiers\n * @param nextChildren - An array of new children to be patched in\n * @param before - The node before which new children should be inserted (if any)\n * @returns A new map of children after patching\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 there are no new children, clear all existing children\n if (children.length && 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 // Iterate through new children and patch or insert as necessary\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children[childIndex];\n let currKey = getKey(currChild, i);\n\n // Remove any current children that are not in the new children set\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 the child already exists, patch it\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n // Handle insertion or replacement of children\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 // Replace placeholders with actual nodes\n replaces.forEach(([placeholder, child]) => {\n replaceChild(parent, child, placeholder);\n });\n\n // Remove any remaining children that weren't in the new set\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\n/**\n * Clears all children from a parent node.\n *\n * @param parent - The parent node to clear children from\n * @param children - The array of children to be cleared\n * @param before - The node before which clearing should stop (if any)\n */\nfunction 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 * Patches a single node, replacing it with a new node if necessary.\n *\n * @param parent - The parent node\n * @param node - The current node\n * @param next - The new node to patch with\n * @returns The patched 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\n/**\n * Maps an array of nodes to a Map, using their keys as identifiers.\n *\n * @param children - The array of nodes to map\n * @returns A Map of nodes, keyed by their unique identifiers\n */\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\n/**\n * Gets the key for a node, either from its 'key' property (if it's a JSX element)\n * or generates a key based on its index.\n *\n * @param node - The node to get the key for\n * @param index - The index of the node in its parent's children array\n * @returns A string key for the node\n */\nexport function getKey(node: AnyNode, index: number): string {\n if (isJsxElement(node)) {\n const jsxKey = (node as any).key;\n if (jsxKey !== undefined && jsxKey !== null) {\n return String(jsxKey);\n }\n }\n return `_$${index}$`;\n}\n","import { isFunction, isString } from '@estjs/shared';\nimport { convertToHtmlTag } from './utils';\nimport { ComponentNode } from './componentNode';\nimport { TemplateNode } from './templateNode';\nimport { EMPTY_TEMPLATE, FRAGMENT_PROP_KEY, SINGLE_PROP_KEY } from './sharedConfig';\nimport type { EssorComponent, EssorNode, Props } from '../types';\n\nexport const componentCache = new Map();\n\nfunction createNodeCache(\n NodeConstructor: typeof ComponentNode | typeof TemplateNode,\n template: EssorComponent | HTMLTemplateElement | string,\n props: Props = {},\n key?: string,\n): JSX.Element {\n if (key) {\n const cached = componentCache.get(key);\n if (cached) {\n return cached;\n }\n }\n\n if (typeof template === 'string') {\n template = createTemplate(template);\n }\n\n const newNode = new NodeConstructor(template as any, props, key);\n if (key && newNode instanceof ComponentNode) {\n componentCache.set(key, newNode);\n }\n return newNode;\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 // handle fragment\n if (template === EMPTY_TEMPLATE) {\n return Fragment(template, props) as JSX.Element;\n }\n\n // Handle string templates\n if (isString(template)) {\n const htmlTemplate = convertToHtmlTag(template);\n const wrappedProps = { [SINGLE_PROP_KEY]: props };\n return createNodeCache(TemplateNode, htmlTemplate, wrappedProps, key);\n }\n\n // Handle functional templates (Components)\n if (isFunction(template)) {\n return createNodeCache(ComponentNode, template, props, key);\n }\n\n // Handle HTMLTemplateElement\n return createNodeCache(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 /**\n * the code that sets the unclosed tag, the browser's innerHTML method is, will automatically close the tag.\n * like `<div><button type=button>`\n * it will be translated:\n * `<div><button type=button></button></div>`\n */\n template.innerHTML = html;\n return template;\n}\n\nexport function Fragment<\n T extends\n | JSX.JSXElement\n | string\n | number\n | boolean\n | Array<JSX.JSXElement | string | number | boolean>,\n>(\n template: HTMLTemplateElement | '',\n props: { children: T } | { [key: string]: { children: T } },\n): JSX.Element {\n const processedProps = props.children\n ? {\n [FRAGMENT_PROP_KEY]: {\n children: (Array.isArray(props.children)\n ? props.children.filter(Boolean)\n : [props.children]) as T,\n },\n }\n : props;\n\n const templateElement = template === EMPTY_TEMPLATE ? createTemplate(EMPTY_TEMPLATE) : template;\n\n return createNodeCache(TemplateNode, templateElement, processedProps);\n}\n\nexport function createApp(component: EssorComponent, root: HTMLElement | string) {\n const rootElement = typeof root === 'string' ? document.querySelector(root) : root;\n if (!rootElement) {\n throw new Error('Root element not found');\n }\n const rootNode = h(component).mount(rootElement);\n return rootNode;\n}\n","import { isSymbol } from '@estjs/shared';\nimport { LifecycleContext } from './lifecycleContext';\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 && 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 && 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\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 provide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n): void {\n assertInsideComponent('provide', key);\n LifecycleContext.ref && LifecycleContext.ref.setContext(key as string, value);\n}\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 inject<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('inject', key);\n return (LifecycleContext.ref && LifecycleContext.ref.getContext(key as string)) ?? defaultValue;\n}\n","import { SSGNode } from './ssgNode';\nimport { renderContext } from './sharedConfig';\nimport { h } from './jsxRenderer';\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?: Props): string {\n renderContext.setSSG();\n // Create a new SSGNode with the component and props\n const ssrNode = new SSGNode(component, props || {});\n // Mount the SSGNode to get the rendered HTML\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 * @throws Error if the container is not found.\n */\nexport function hydrate(component: EssorComponent, container: string | Element): void {\n // Find the root element based on the container parameter\n const rootElement = typeof container === 'string' ? document.querySelector(container) : container;\n\n if (!rootElement) {\n throw new Error(`Could not find container: ${container}`);\n }\n renderContext.setSSR();\n // Create a new component using the h function and mount it to the root element\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: EssorComponent, props?: Props): SSGNode | JSX.Element {\n if (renderContext.isSSG) {\n return new SSGNode(component, props);\n }\n // If not in SSG mode, create and return a new JSX element\n return h(component, props);\n}\n"]}
|
package/dist/template.d.cts
CHANGED
|
@@ -2225,7 +2225,7 @@ declare class LifecycleContext {
|
|
|
2225
2225
|
|
|
2226
2226
|
declare class TemplateNode$1 implements JSX.Element {
|
|
2227
2227
|
template: HTMLTemplateElement;
|
|
2228
|
-
props
|
|
2228
|
+
props: Props;
|
|
2229
2229
|
key?: string | undefined;
|
|
2230
2230
|
protected treeMap: Map<number, Node>;
|
|
2231
2231
|
protected mounted: boolean;
|
|
@@ -2234,7 +2234,7 @@ declare class TemplateNode$1 implements JSX.Element {
|
|
|
2234
2234
|
protected bindValueKeys: string[];
|
|
2235
2235
|
protected componentIndex: number;
|
|
2236
2236
|
protected parent: Node | null;
|
|
2237
|
-
constructor(template: HTMLTemplateElement, props
|
|
2237
|
+
constructor(template: HTMLTemplateElement, props: Props, key?: string | undefined);
|
|
2238
2238
|
get firstChild(): Node | null;
|
|
2239
2239
|
get isConnected(): boolean;
|
|
2240
2240
|
addEventListener(): void;
|
|
@@ -2259,18 +2259,23 @@ declare class TemplateNode$1 implements JSX.Element {
|
|
|
2259
2259
|
|
|
2260
2260
|
declare class ComponentNode$1 extends LifecycleContext implements JSX.Element {
|
|
2261
2261
|
template: EssorComponent;
|
|
2262
|
-
props
|
|
2262
|
+
props: Props;
|
|
2263
2263
|
key?: string | undefined;
|
|
2264
2264
|
protected proxyProps: Record<string, Signal$1<unknown>>;
|
|
2265
2265
|
protected emitter: Set<() => void>;
|
|
2266
2266
|
protected rootNode: TemplateNode$1 | null;
|
|
2267
2267
|
protected trackMap: Map<string, NodeTrack>;
|
|
2268
|
-
|
|
2268
|
+
protected nodes: Node[];
|
|
2269
|
+
protected parent: Node | null;
|
|
2270
|
+
protected before: Node | null;
|
|
2271
|
+
constructor(template: EssorComponent, props: Props, key?: string | undefined);
|
|
2269
2272
|
protected createProxyProps(props?: Props): Record<string, Signal$1<unknown>>;
|
|
2270
2273
|
get firstChild(): Node | null;
|
|
2271
2274
|
get isConnected(): boolean;
|
|
2272
|
-
mount(parent: Node, before
|
|
2275
|
+
mount(parent: Node, before: Node | null): Node[];
|
|
2273
2276
|
unmount(): void;
|
|
2277
|
+
private resetState;
|
|
2278
|
+
protected callLifecycleHooks(type: 'mounted' | 'destroy'): void;
|
|
2274
2279
|
protected callMountHooks(): void;
|
|
2275
2280
|
protected callDestroyHooks(): void;
|
|
2276
2281
|
protected clearEmitter(): void;
|
|
@@ -2283,10 +2288,7 @@ declare class ComponentNode$1 extends LifecycleContext implements JSX.Element {
|
|
|
2283
2288
|
}): void;
|
|
2284
2289
|
protected patchUpdateHandler(key: string, prop: any): void;
|
|
2285
2290
|
protected patchNormalProp(key: string, prop: any): void;
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
declare class FragmentNode extends TemplateNode$1 {
|
|
2289
|
-
unmount(): void;
|
|
2291
|
+
protected cleanup(): void;
|
|
2290
2292
|
}
|
|
2291
2293
|
|
|
2292
2294
|
/**
|
|
@@ -2321,13 +2323,13 @@ declare function isJsxElement(node: unknown): node is EssorNode;
|
|
|
2321
2323
|
* @returns A new HTML template element.
|
|
2322
2324
|
*/
|
|
2323
2325
|
declare function createTemplate(html: string): HTMLTemplateElement;
|
|
2324
|
-
declare function Fragment<T extends JSX.JSXElement | string | number | boolean |
|
|
2326
|
+
declare function Fragment<T extends JSX.JSXElement | string | number | boolean | Array<JSX.JSXElement | string | number | boolean>>(template: HTMLTemplateElement | '', props: {
|
|
2325
2327
|
children: T;
|
|
2326
2328
|
} | {
|
|
2327
|
-
[key
|
|
2329
|
+
[key: string]: {
|
|
2328
2330
|
children: T;
|
|
2329
2331
|
};
|
|
2330
|
-
}):
|
|
2332
|
+
}): JSX.Element;
|
|
2331
2333
|
|
|
2332
2334
|
/**
|
|
2333
2335
|
* Registers a hook to be called when the component is mounted.
|
package/dist/template.d.ts
CHANGED
|
@@ -2225,7 +2225,7 @@ declare class LifecycleContext {
|
|
|
2225
2225
|
|
|
2226
2226
|
declare class TemplateNode$1 implements JSX.Element {
|
|
2227
2227
|
template: HTMLTemplateElement;
|
|
2228
|
-
props
|
|
2228
|
+
props: Props;
|
|
2229
2229
|
key?: string | undefined;
|
|
2230
2230
|
protected treeMap: Map<number, Node>;
|
|
2231
2231
|
protected mounted: boolean;
|
|
@@ -2234,7 +2234,7 @@ declare class TemplateNode$1 implements JSX.Element {
|
|
|
2234
2234
|
protected bindValueKeys: string[];
|
|
2235
2235
|
protected componentIndex: number;
|
|
2236
2236
|
protected parent: Node | null;
|
|
2237
|
-
constructor(template: HTMLTemplateElement, props
|
|
2237
|
+
constructor(template: HTMLTemplateElement, props: Props, key?: string | undefined);
|
|
2238
2238
|
get firstChild(): Node | null;
|
|
2239
2239
|
get isConnected(): boolean;
|
|
2240
2240
|
addEventListener(): void;
|
|
@@ -2259,18 +2259,23 @@ declare class TemplateNode$1 implements JSX.Element {
|
|
|
2259
2259
|
|
|
2260
2260
|
declare class ComponentNode$1 extends LifecycleContext implements JSX.Element {
|
|
2261
2261
|
template: EssorComponent;
|
|
2262
|
-
props
|
|
2262
|
+
props: Props;
|
|
2263
2263
|
key?: string | undefined;
|
|
2264
2264
|
protected proxyProps: Record<string, Signal$1<unknown>>;
|
|
2265
2265
|
protected emitter: Set<() => void>;
|
|
2266
2266
|
protected rootNode: TemplateNode$1 | null;
|
|
2267
2267
|
protected trackMap: Map<string, NodeTrack>;
|
|
2268
|
-
|
|
2268
|
+
protected nodes: Node[];
|
|
2269
|
+
protected parent: Node | null;
|
|
2270
|
+
protected before: Node | null;
|
|
2271
|
+
constructor(template: EssorComponent, props: Props, key?: string | undefined);
|
|
2269
2272
|
protected createProxyProps(props?: Props): Record<string, Signal$1<unknown>>;
|
|
2270
2273
|
get firstChild(): Node | null;
|
|
2271
2274
|
get isConnected(): boolean;
|
|
2272
|
-
mount(parent: Node, before
|
|
2275
|
+
mount(parent: Node, before: Node | null): Node[];
|
|
2273
2276
|
unmount(): void;
|
|
2277
|
+
private resetState;
|
|
2278
|
+
protected callLifecycleHooks(type: 'mounted' | 'destroy'): void;
|
|
2274
2279
|
protected callMountHooks(): void;
|
|
2275
2280
|
protected callDestroyHooks(): void;
|
|
2276
2281
|
protected clearEmitter(): void;
|
|
@@ -2283,10 +2288,7 @@ declare class ComponentNode$1 extends LifecycleContext implements JSX.Element {
|
|
|
2283
2288
|
}): void;
|
|
2284
2289
|
protected patchUpdateHandler(key: string, prop: any): void;
|
|
2285
2290
|
protected patchNormalProp(key: string, prop: any): void;
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
declare class FragmentNode extends TemplateNode$1 {
|
|
2289
|
-
unmount(): void;
|
|
2291
|
+
protected cleanup(): void;
|
|
2290
2292
|
}
|
|
2291
2293
|
|
|
2292
2294
|
/**
|
|
@@ -2321,13 +2323,13 @@ declare function isJsxElement(node: unknown): node is EssorNode;
|
|
|
2321
2323
|
* @returns A new HTML template element.
|
|
2322
2324
|
*/
|
|
2323
2325
|
declare function createTemplate(html: string): HTMLTemplateElement;
|
|
2324
|
-
declare function Fragment<T extends JSX.JSXElement | string | number | boolean |
|
|
2326
|
+
declare function Fragment<T extends JSX.JSXElement | string | number | boolean | Array<JSX.JSXElement | string | number | boolean>>(template: HTMLTemplateElement | '', props: {
|
|
2325
2327
|
children: T;
|
|
2326
2328
|
} | {
|
|
2327
|
-
[key
|
|
2329
|
+
[key: string]: {
|
|
2328
2330
|
children: T;
|
|
2329
2331
|
};
|
|
2330
|
-
}):
|
|
2332
|
+
}): JSX.Element;
|
|
2331
2333
|
|
|
2332
2334
|
/**
|
|
2333
2335
|
* Registers a hook to be called when the component is mounted.
|