essor 0.0.6-beta.8 → 0.0.6-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/essor.cjs.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var xe=Object.defineProperty;var ae=Object.getOwnPropertySymbols;var Ne=Object.prototype.hasOwnProperty,Se=Object.prototype.propertyIsEnumerable;var ce=(e,t,n)=>t in e?xe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,w=(e,t)=>{for(var n in t||(t={}))Ne.call(t,n)&&ce(e,n,t[n]);if(ae)for(var n of ae(t))Se.call(t,n)&&ce(e,n,t[n]);return e};var k=e=>e!==null&&typeof e=="object";var A=Array.isArray;function Ee(e){return e===null}function ue(e){return e==null}var p=e=>typeof e=="function";function z(e){return e===!1||e===null||e===void 0||e===""}var $=e=>["string","number","boolean","symbol","undefined"].includes(typeof e)||Ee(e);function B(e){return Array.isArray(e)?e.flat():[e]}function le(e,t){return !Object.is(e,t)}var fe=Function.prototype;function T(e,t){return e.indexOf(t)===0}function b(e,t=new WeakMap){if(e===null||typeof e!="object")return e;if(t.has(e))return t.get(e);if(e instanceof Date)return new Date(e);if(e instanceof RegExp)return new RegExp(e);if(e instanceof Map){let o=new Map;return t.set(e,o),e.forEach((i,s)=>{o.set(b(s,t),b(i,t));}),o}if(e instanceof Set){let o=new Set;return t.set(e,o),e.forEach(i=>{o.add(b(i,t));}),o}let n=Array.isArray(e)?[]:{};t.set(e,n);let r=Object.keys(e);for(let o of r)n[o]=b(e[o],t);return n}function M(e,t,n=new WeakMap){if($(e)&&$(t))return e===t;if(e===t)return !0;if(e==null||t==null||typeof e!="object"||typeof t!="object"||e.constructor!==t.constructor)return !1;if(n.has(e))return n.get(e)===t;if(n.set(e,t),Array.isArray(e)){if(e.length!==t.length)return !1;for(let[i,s]of e.entries())if(!M(s,t[i],n))return !1;return !0}if(e instanceof Map){if(e.size!==t.size)return !1;for(let[i,s]of e)if(!t.has(i)||!M(s,t.get(i),n))return !1;return !0}if(e instanceof Set){if(e.size!==t.size)return !1;let i=Array.from(e).sort(),s=Array.from(t).sort();for(let[a,c]of i.entries())if(!M(c,s[a],n))return !1;return !0}let r=Object.keys(e),o=new Set(Object.keys(t));if(r.length!==o.size)return !1;for(let i of r)if(!o.has(i)||!M(e[i],t[i],n))return !1;return !0}var pe=e=>e.replaceAll(/[A-Z]+/g,(t,n)=>`${n>0?"-":""}${t.toLocaleLowerCase()}`);var S=null,P=null,U=new Set,q=new WeakMap,Z=new Set;function _(e,t){let n=q.get(e);n||(n=new Map,q.set(e,n));let r=n.get(t);r||(r=new Set,n.set(t,r)),S&&r.add(S),P&&U.add(P);}function K(e,t){U.size>0&&U.forEach(o=>o.run());let n=q.get(e);if(!n)return;let r=n.get(t);r&&r.forEach(o=>Z.has(o)&&o());}var H=class{constructor(t){this._value=t;}valueOf(){return _(this,"value"),this._value}toString(){return _(this,"value"),String(this._value)}toJSON(){return this._value}get value(){return _(this,"value"),this._value}set value(t){this._value!==t&&(this._value=t,K(this,"value"));}peek(){return this._value}update(){K(this,"value");}};function O(e){return d(e)?e:new H(e)}function d(e){return e instanceof H}var I=class{constructor(t){this.fn=t;this._deps=new Set;let n=P;P=this,this._value=this.fn(),P=n;}peek(){return this._value}run(){let t=this.fn();t!==this._value&&(this._value=t,this._deps.forEach(n=>n()));}get value(){return S&&this._deps.add(S),_(this,"_value"),this._value}};function Q(e){return new I(e)}function F(e){return e instanceof I}function x(e){function t(){let n=S;S=t,e(),S=n;}return Z.add(t),t(),()=>{Z.delete(t),S=null;}}function de(e,t){return Array.isArray(t)?t.includes(e):p(t)?t(e):!1}function Y(e,t){return Object.entries(e).reduce((r,[o,i])=>(r[o]=de(o,t)||d(i)?i:O(i),r),{})}function be(e,t){return e?d(e)?e.peek():Object.entries(e).reduce((n,[r,o])=>(de(r,t)?n[r]=o:n[r]=d(o)?o.peek():o,n),{}):{}}var me=Symbol("useReactive");function R(e){return e&&e[me]===!0}function ke(e){return R(e)?Object.assign({},e):e}var D=new WeakMap;function J(e){if(!k(e)||R(e))return e;if(D.has(e))return D.get(e);let t={get(r,o,i){if(o===me)return !0;let s=Reflect.get(r,o,i);return _(r,o),k(s)?J(s):s},set(r,o,i,s){let a=Reflect.get(r,o,s);d(a)&&(a=a.value),d(i)&&(i=i.value);let c=Reflect.set(r,o,i,s);return le(i,a)&&K(r,o),c},deleteProperty(r,o){let i=Reflect.get(r,o),s=Reflect.deleteProperty(r,o);return i!==void 0&&K(r,o),s}},n=new Proxy(e,t);return D.set(e,n),n}function ee(e,...t){console.warn.apply(console,[`[Essor Router warn]: ${e}`].concat(t));}function Ce(e,t,n){return we(e,t,n)}function we(e,t,n){let r,o=n==null?void 0:n.deep;if(d(e)||F(e)?r=()=>e.value:R(e)?r=()=>w({},e):A(e)?r=()=>e.map(c=>d(c)||F(c)?c.value:R(c)?w({},c):p(c)?c():ee("Invalid source",c)):p(e)?r=e:(ee("Invalid source type",e),r=fe),t&&o){let c=r;r=()=>j(c());}let i,s=()=>{let c=b(r());M(c,i)||(t&&t(c,i),i=$(c)?c:b(c));},a=x(s);return n!=null&&n.immediate&&s(),a}function j(e,t=new Set){return !k(e)||t.has(e)||(t.add(e),A(e)?e.forEach(n=>j(n,t)):e instanceof Map?e.forEach((n,r)=>{j(r,t),j(n,t);}):e instanceof Set?e.forEach(n=>j(n,t)):Object.keys(e).forEach(n=>{j(e[n],t);})),e}var V=0,te=new Map;function Me(e){let{state:t,getters:n,actions:r}=e,o=w({},t!=null?t:{}),i=J(t!=null?t:{}),s=[],a=[],l=w({state:i},{patch$(u){Object.assign(i,u),s.forEach(f=>f(i)),a.forEach(f=>f(i));},subscribe$(u){s.push(u);},unsubscribe$(u){let f=s.indexOf(u);f!==-1&&s.splice(f,1);},onAction$(u){a.push(u);},reset$(){Object.assign(i,o);}});for(let u in n){let f=n[u];f&&(l[u]=Q(f.bind(i,i)));}for(let u in r){let f=r[u];f&&(l[u]=f.bind(i));}return te.set(V,l),++V,l}function Ae(e){return function(){return te.has(V)?te.get(V):Me(e)}}var N=class N{constructor(t,n,r){this.template=t;this.props=n;this.key=r;this.proxyProps={};this.context={};this.emitter=new Set;this.mounted=!1;this.rootNode=null;this.hooks={mounted:new Set,destroy:new Set};this.trackMap=new Map;this.proxyProps=Y(n,o=>T(o,"on")||T(o,"update:"));}addEventListener(){}removeEventListener(){}get firstChild(){var t,n;return (n=(t=this.rootNode)==null?void 0:t.firstChild)!=null?n:null}get isConnected(){var t,n;return (n=(t=this.rootNode)==null?void 0:t.isConnected)!=null?n:!1}addHook(t,n){var r;(r=this.hooks[t])==null||r.add(n);}getContext(t){return N.context[t]}setContext(t,n){N.context[t]=n;}inheritNode(t){this.context=t.context,this.hooks=t.hooks,Object.assign(this.proxyProps,t.proxyProps),this.rootNode=t.rootNode,this.trackMap=t.trackMap;let n=this.props;this.props=t.props,this.patchProps(n);}unmount(){var t;this.hooks.destroy.forEach(n=>n()),Object.values(this.hooks).forEach(n=>n.clear()),(t=this.rootNode)==null||t.unmount(),this.rootNode=null,this.proxyProps={},this.mounted=!1,this.emitter.forEach(n=>n()),N.context={};}mount(t,n){var o,i,s,a;if(!p(this.template))throw new Error("Template must be a function");if(this.isConnected)return (i=(o=this.rootNode)==null?void 0:o.mount(t,n))!=null?i:[];N.ref=this,this.rootNode=this.template(this.proxyProps),N.ref=null,this.mounted=!0;let r=(a=(s=this.rootNode)==null?void 0:s.mount(t,n))!=null?a:[];return this.hooks.mounted.forEach(c=>c()),this.patchProps(this.props),r}getNodeTrack(t,n){let r=this.trackMap.get(t);return r||(r={cleanup:()=>{}},this.trackMap.set(t,r)),n||r.cleanup(),r}patchProps(t){var n,r,o,i,s;for(let[a,c]of Object.entries(t))if(T(a,"on")&&((n=this.rootNode)!=null&&n.nodes)){let l=a.slice(2).toLowerCase(),u=c,f=y(this.rootNode.nodes[0],l,u);this.emitter.add(f);}else if(a==="ref")d(c)?t[a].value=(r=this.rootNode)==null?void 0:r.nodes[0]:p(c)&&t[a]((o=this.rootNode)==null?void 0:o.nodes[0]);else if(T(a,"update:"))t[a]=d(c)?c.value:c;else {let l=(s=(i=this.proxyProps)[a])!=null?s:i[a]=O(c),u=this.getNodeTrack(a);u.cleanup=x(()=>{l.value=c;});}this.props=t;}};N.ref=null,N.context={};var h=N;function Oe(e,t,n){return p(e)?new h(e,t,n):new W(e,t,n)}function g(e){return e instanceof h||e instanceof W}function Re(e){let t=document.createElement("template");return t.innerHTML=e,t}function je(e){return e.children}function ne(e){if(g(e)||e instanceof Node)return e;let t=z(e)?"":String(e);return document.createTextNode(t)}function v(e,t,n=null){let r=g(n)?n.firstChild:n;g(t)?t.mount(e,r):r?r.before(t):e.append(t);}function C(e){g(e)?e.unmount():e.parentNode&&e.remove();}function re(e,t,n){v(e,t,n),C(n);}function oe(e,t,n){if(t==="class"){typeof n=="string"?e.className=n:Array.isArray(n)?e.className=n.join(" "):n&&typeof n=="object"&&(e.className=Object.entries(n).reduce((r,[o,i])=>r+(i?` ${o}`:""),"").trim());return}if(t==="style"){if(typeof n=="string")e.style.cssText=n;else if(n&&typeof n=="object"){let r=n;Object.keys(r).forEach(o=>{e.style.setProperty(pe(o),String(r[o]));});}return}z(n)?e.removeAttribute(t):n===!0?e.setAttribute(t,""):e.setAttribute(t,String(n));}function ye(e,t){if(e instanceof HTMLInputElement){if(e.type==="checkbox")return y(e,"change",()=>{t(!!e.checked);});if(e.type==="date")return y(e,"change",()=>{t(e.value?e.value:"");});if(e.type==="file")return y(e,"change",()=>{e.files&&t(e.files);});if(e.type==="number")return y(e,"input",()=>{let n=Number.parseFloat(e.value);t(Number.isNaN(n)?"":String(n));});if(e.type==="radio")return y(e,"change",()=>{t(e.checked?e.value:"");});if(e.type==="text")return y(e,"input",()=>{t(e.value);})}if(e instanceof HTMLSelectElement)return y(e,"change",()=>{t(e.value);});if(e instanceof HTMLTextAreaElement)return y(e,"input",()=>{t(e.value);})}var he=Promise.resolve();function We(e){return e?he.then(e):he}function y(e,t,n){return e.addEventListener(t,n),()=>e.removeEventListener(t,n)}function ge(e,t,n,r){let o=new Map,i=t.values(),s=e.childNodes.length;if(t.size>0&&n.length===0){if(s===t.size+(r?1:0)){let l=e;l.innerHTML="",r&&v(e,r);}else {let l=document.createRange(),u=i.next().value,f=g(u)?u.firstChild:u;l.setStartBefore(f),r?l.setEndBefore(r):l.setEndAfter(e),l.deleteContents();}return t.forEach(l=>{g(l)&&l.unmount();}),o}let a=[],c=Pe(n);for(let[l,u]of n.entries()){let f=i.next().value,E=G(f,l);for(;f&&!c.has(E);)C(f),t.delete(E),f=i.next().value,E=G(f,l);let L=G(u,l),ie=t.get(L);if(ie&&(u=Le(e,ie,u)),f)if(f){let se=document.createComment("");v(e,se,f),a.push([se,u]);}else v(e,u,r);else v(e,u,r);o.set(L,u);}return a.forEach(([l,u])=>re(e,u,l)),t.forEach((l,u)=>{l.isConnected&&!o.has(u)&&C(l);}),o}function Le(e,t,n){return t===n?t:g(t)&&g(n)&&t.template===n.template?(n.inheritNode(t),n):t instanceof Text&&n instanceof Text?(t.textContent!==n.textContent&&(t.textContent=n.textContent),t):(re(e,n,t),n)}function Pe(e){let t=new Map;for(let[n,r]of e.entries()){let o=G(r,n);t.set(o,r);}return t}function G(e,t){let n=e instanceof Element?e.id:void 0,r=n===""?void 0:n;return r!=null?r:`_$${t}$`}var W=class e{constructor(t,n,r){this.template=t;this.props=n;this.key=r;this.treeMap=new Map;this.mounted=!1;this.nodes=[];this.provides={};this.trackMap=new Map;this.parent=null;}get firstChild(){var t;return (t=this.nodes[0])!=null?t:null}get isConnected(){return this.mounted}addEventListener(){}removeEventListener(){}unmount(){this.trackMap.forEach(t=>{var n,r;(n=t.cleanup)==null||n.call(t),(r=t.lastNodes)==null||r.forEach(o=>{t.isRoot?C(o):o instanceof e&&o.unmount();});}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(t=>C(t)),this.nodes=[],this.mounted=!1;}mount(t,n){var i;if(this.parent=t,this.isConnected)return this.nodes.forEach(s=>v(t,s,n)),this.nodes;let r=this.template.content.cloneNode(!0),o=r.firstChild;return (i=o==null?void 0:o.hasAttribute)!=null&&i.call(o,"_svg_")&&(o.remove(),o==null||o.childNodes.forEach(s=>{r.append(s);})),this.nodes=Array.from(r.childNodes),this.mapNodeTree(t,r),v(t,r,n),this.patchNodes(this.props),this.mounted=!0,this.nodes}mapNodeTree(t,n){let r=1;this.treeMap.set(0,t);let o=i=>{i.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&this.treeMap.set(r++,i);let s=i.firstChild;for(;s;)o(s),s=s.nextSibling;};o(n);}patchNodes(t){for(let n in t){let r=Number(n),o=this.treeMap.get(r);if(o){let i=this.props[n];this.patchNode(n,o,i,r===0);}}this.props=t;}getNodeTrack(t,n,r){var i;let o=this.trackMap.get(t);return o||(o={cleanup:()=>{}},n&&(o.lastNodes=new Map),r&&(o.isRoot=!0),this.trackMap.set(t,o)),(i=o.cleanup)==null||i.call(o),o}inheritNode(t){this.mounted=t.mounted,this.nodes=t.nodes,this.trackMap=t.trackMap,this.treeMap=t.treeMap;let n=this.props;this.props=t.props,this.patchNodes(n);}patchNode(t,n,r,o){for(let i in r)if(i==="children"&&r.children)if(A(r.children))r.children.forEach((s,a)=>{var L;if(!s)return;let[c,l]=A(s)?s:[s,null],u=ue(l)?null:(L=this.treeMap.get(l))!=null?L:null,f=`${t}:${i}:${a}`,E=this.getNodeTrack(f,!0,o);Te(E,n,c,u);});else {let s=`${t}:${i}:0`,a=this.getNodeTrack(s,!0,o);Te(a,n,r.children,null);}else if(i==="ref")d(r[i])?r[i].value=n:p(r[i])&&r[i](n);else if(T(i,"on")){let s=i.slice(2).toLocaleLowerCase(),a=this.getNodeTrack(`${t}:${i}`),c=r[i];a.cleanup=y(n,s,c);}else if(!T(i,"update:")){let s=this.getNodeTrack(`${t}:${i}`),a=r[i],c=d(a)?a:O(a),l=x(()=>{c.value=d(a)?a.value:a,_e(s,n,i,c.value);}),u,f=`update:${i}`;r[f]&&(u=ye(n,E=>{r[f](E);})),s.cleanup=()=>{l&&l(),u&&u();};}}};function _e(e,t,n,r){let o=t;o.setAttribute&&(p(r)?e.cleanup=x(()=>{oe(o,n,r());}):oe(o,n,r));}function Te(e,t,n,r){p(n)?e.cleanup=x(()=>{let o=B(n()).map(ne);e.lastNodes=ge(t,e.lastNodes,o,r);}):B(n).forEach((o,i)=>{let s=ne(o);e.lastNodes.set(String(i),s),v(t,s,r);});}function $e(e){var t;X("onMounted"),(t=h.ref)==null||t.addHook("mounted",e);}function Ke(e){var t;X("onDestroy"),(t=h.ref)==null||t.addHook("destroy",e);}function X(e){if(!h.ref)throw new Error(`"${e}" can only be called within the component function body
4
- and cannot be used in asynchronous or deferred calls.`)}function He(e,t){var n;X("useProvide"),(n=h.ref)==null||n.setContext(e,t);}function Ie(e,t){var n;return X("useInject"),((n=h.ref)==null?void 0:n.getContext(e))||t}function Fe(){let e=null;return new Proxy({},{get(t,n){return n==="__is_ref"?!0:e},set(t,n,r){return e=r,!0}})}var Zt="0.0.6-beta.7";function tn(e=[]){return e.reduce((t,n,r)=>(t[r+1]={template:n},t),{})}function Je(e){return Object.entries(e).map(([t,n])=>`${t}=${JSON.stringify(n)}`).join(" ")}function ve(e,t){if(p(e))return e(t);let n={},r={};return k(e)&&Object.entries(e).forEach(([o,i])=>{let s=t[o];s&&(Object.keys(s).forEach(a=>{T(a,"on")&&p(s[a])&&delete s[a];}),s.children&&(s.children.forEach(([a,c])=>{n[c]=[...n[c]||[],a];}),delete s.children)),r[o]={template:i.template,prop:s};}),Object.entries(r).map(([o,{template:i,prop:s}])=>{let a=i;return s&&(a+=` ${Je(s)}`),n[o]&&(a+=n[o].map(c=>ve(c,s)).join("")),a}).join("")}function nn(e,t){return ve(e,t)}function rn(e,t){t.innerHTML="",e.mount(t);}
4
+ and cannot be used in asynchronous or deferred calls.`)}function He(e,t){var n;X("useProvide"),(n=h.ref)==null||n.setContext(e,t);}function Ie(e,t){var n;return X("useInject"),((n=h.ref)==null?void 0:n.getContext(e))||t}function Fe(){let e=null;return new Proxy({},{get(t,n){return n==="__is_ref"?!0:e},set(t,n,r){return e=r,!0}})}var Zt="0.0.6-beta.8";function tn(e=[]){return e.reduce((t,n,r)=>(t[r+1]={template:n},t),{})}function Je(e){return Object.entries(e).map(([t,n])=>`${t}=${JSON.stringify(n)}`).join(" ")}function ve(e,t){if(p(e))return e(t);let n={},r={};return k(e)&&Object.entries(e).forEach(([o,i])=>{let s=t[o];s&&(Object.keys(s).forEach(a=>{T(a,"on")&&p(s[a])&&delete s[a];}),s.children&&(s.children.forEach(([a,c])=>{n[c]=[...n[c]||[],a];}),delete s.children)),r[o]={template:i.template,prop:s};}),Object.entries(r).map(([o,{template:i,prop:s}])=>{let a=i;return s&&(a+=` ${Je(s)}`),n[o]&&(a+=n[o].map(c=>ve(c,s)).join("")),a}).join("")}function nn(e,t){return ve(e,t)}function rn(e,t){t.innerHTML="",e.mount(t);}
5
5
 
6
6
  exports.ComponentNode = h;
7
7
  exports.Fragment = je;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/signal/signal.ts","../src/warning.ts","../src/signal/watch.ts","../src/signal/store.ts","../src/template/component-node.ts","../src/template/template.ts","../src/template/utils.ts","../src/template/patch.ts","../src/template/template-node.ts","../src/template/hooks.ts","../src/version.ts","../src/server/index.ts"],"names":["isObject","val","isArray","isNull","isNil","x","isFunction","isFalsy","isPrimitive","coerceArray","data","hasChanged","value","oldValue","noop","startsWith","str","searchString","deepClone","obj","hash","mapClone","key","setClone","cloneObj","keys","deepEqual","a","b","seen","element","arrA","arrB","i","keysA","keysB","kebabCase","string","match","offset","activeEffect","activeComputed","computedSet","targetMap","EffectDeps","track","target","depsMap","dep","trigger","computedSignal","effect","Signal","newValue","useSignal","isSignal","Computed","fn","prev","useComputed","isComputed","useEffect","effectFn","shouldExclude","exclude","signalObject","initialValues","acc","unSignal","signal","REACTIVE_MARKER","isReactive","unReactive","reactiveMap","useReactive","initialValue","handler","receiver","result","proxy","warn","msg","args","useWatch","source","cb","options","doWatch","getter","deep","__spreadValues","s","baseGetter","traverse","stop","item","v","k","_id","StoreMap","createOptionsStore","state","getters","actions","initState","reactiveState","subscriptions","actionCallbacks","store","payload","callback","index","action","createStore","_ComponentNode","template","props","_a","_b","hook","context","node","set","emitter","parent","before","_c","_d","mountedNode","trackKey","suppressCleanupCall","_e","prop","event","listener","cleanup","addEventListener","ComponentNode","h","TemplateNode","isJsxElement","html","Fragment","coerceNode","text","insertChild","child","beforeNode","removeChild","replaceChild","setAttribute","attr","binNode","setter","p","nextTick","eventName","patchChildren","childrenMap","nextChildren","children","parentChildNodesLength","parentElement","range","start","replaces","nextChildrenMap","mapKeys","currChild","currKey","getKey","origChild","patch","placeholder","next","id","_TemplateNode","cloneNode","firstChild","tree","walk","trackLastNodes","isRoot","path","patchChild","triggerValue","patchAttribute","cleanupBind","updateKey","nextNodes","newNode","onMount","throwIfOutsideComponent","onDestroy","useProvide","useInject","defaultValue","useRef","refValue","__essor_version","ssrtmpl","templates","jsonToAttrs","json","ssr","newTemplate","tmpl","propKey","idx","renderToString","component","ssgRender","root"],"mappings":"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","sourcesContent":["import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n","import { isPrimitive } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport function hasChanged(value, oldValue) {\n return !Object.is(value, oldValue);\n}\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Recursively clones an object, including its nested properties and special types like Date, RegExp, Map, and Set.\n *\n * @param {any} obj - The object to clone.\n * @param {WeakMap<object, object>} [hash] - A WeakMap used to track circular references.\n * @return {any} The cloned object.\n */\nexport function deepClone(obj, hash = new WeakMap()) {\n // Return primitives and functions as-is\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle circular references\n if (hash.has(obj)) {\n return hash.get(obj);\n }\n\n // Handle special types\n if (obj instanceof Date) {\n return new Date(obj);\n }\n\n if (obj instanceof RegExp) {\n return new RegExp(obj);\n }\n\n if (obj instanceof Map) {\n const mapClone = new Map();\n hash.set(obj, mapClone);\n obj.forEach((value, key) => {\n mapClone.set(deepClone(key, hash), deepClone(value, hash));\n });\n return mapClone;\n }\n\n if (obj instanceof Set) {\n const setClone = new Set();\n hash.set(obj, setClone);\n obj.forEach(value => {\n setClone.add(deepClone(value, hash));\n });\n return setClone;\n }\n\n // Initialize the clone and store it in the WeakMap\n const cloneObj = Array.isArray(obj) ? [] : {};\n hash.set(obj, cloneObj);\n\n // Iterate over object keys\n const keys = Object.keys(obj);\n for (const key of keys) {\n cloneObj[key] = deepClone(obj[key], hash);\n }\n\n return cloneObj;\n}\n\n/**\n * Determines whether two values are deeply equal.\n *\n * @param {any} a - The first value to compare.\n * @param {any} b - The second value to compare.\n * @param {WeakMap<object, object>} [seen] - A WeakMap used to store previously seen objects to avoid infinite recursion.\n * @return {boolean} True if the values are deeply equal, false otherwise.\n */\nexport function deepEqual(a: any, b: any, seen = new WeakMap()): boolean {\n if (isPrimitive(a) && isPrimitive(b)) {\n return a === b;\n }\n\n if (a === b) {\n return true;\n }\n\n if (a == null || b == null || typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (seen.has(a)) {\n return seen.get(a) === b;\n }\n\n seen.set(a, b);\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (const [i, element] of a.entries()) {\n if (!deepEqual(element, b[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key), seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n const arrA = Array.from(a).sort();\n const arrB = Array.from(b).sort();\n for (const [i, element] of arrA.entries()) {\n if (!deepEqual(element, arrB[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n const keysA = Object.keys(a);\n const keysB = new Set(Object.keys(b));\n\n if (keysA.length !== keysB.size) {\n return false;\n }\n\n for (const key of keysA) {\n if (!keysB.has(key) || !deepEqual(a[key], b[key], seen)) {\n return false;\n }\n }\n\n return true;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { hasChanged, isFunction, isObject } from 'essor-shared';\n\ntype EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function useSignal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n private _deps: Set<EffectFn> = new Set();\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n this._deps.forEach(effect => effect());\n }\n }\n\n get value(): T {\n if (activeEffect) {\n this._deps.add(activeEffect);\n }\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function useComputed<T>(fn: () => T): Computed<T> {\n return new Computed<T>(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function useEffect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n effectFn();\n\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null;\n };\n}\n\nfunction shouldExclude(key: string, exclude?: ((key: string) => boolean) | string[]): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]> | T[K];\n};\n/**\n * Creates a SignalObject from the given initialValues, excluding specified keys.\n *\n * @param {T extends Object} initialValues - The initial values for the SignalObject.\n * @param {(key: string) => boolean | string[]} exclude - A function that determines which keys to exclude from the SignalObject.\n * @return {SignalObject<T>} The created SignalObject.\n */\nexport function signalObject<T extends object>(\n initialValues: T,\n exclude?: ((key: string) => boolean) | string[],\n): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = shouldExclude(key, exclude) || isSignal(value) ? value : useSignal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\n/**\n * Returns the current value of a signal, signal object, or plain object, excluding specified keys.\n *\n * @param {SignalObject<T> | T | Signal<T>} signal - The signal, signal object, or plain object to unwrap.\n * @param {(key: string) => boolean | string[]} [exclude] - A function that determines which keys to exclude from the unwrapped object.\n * @return {T} The unwrapped value of the signal, signal object, or plain object.\n */\nexport function unSignal<T>(\n signal: SignalObject<T> | T | Signal<T>,\n exclude?: ((key: string) => boolean) | string[],\n): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n if (shouldExclude(key, exclude)) {\n acc[key] = value;\n } else {\n acc[key] = isSignal(value) ? value.peek() : value;\n }\n return acc;\n }, {} as T);\n}\n\nconst REACTIVE_MARKER = Symbol('useReactive');\n\nexport function isReactive(obj) {\n return obj && obj[REACTIVE_MARKER] === true;\n}\n\nexport function unReactive(obj) {\n if (!isReactive(obj)) {\n return obj;\n }\n return Object.assign({}, obj);\n}\nconst reactiveMap = new WeakMap<object, object>();\n\nexport function useReactive<T extends object>(initialValue: T): T {\n if (!isObject(initialValue)) {\n return initialValue;\n }\n if (isReactive(initialValue)) {\n return initialValue;\n }\n\n if (reactiveMap.has(initialValue)) {\n return reactiveMap.get(initialValue) as T;\n }\n\n const handler: ProxyHandler<T> = {\n get(target, key, receiver) {\n if (key === REACTIVE_MARKER) return true;\n\n const value = Reflect.get(target, key, receiver);\n track(target, key);\n if (isObject(value)) {\n return useReactive(value);\n }\n return value;\n },\n set(target, key, value, receiver) {\n let oldValue: Signal<any> | any = Reflect.get(target, key, receiver);\n\n if (isSignal(oldValue)) {\n oldValue = oldValue.value;\n }\n if (isSignal(value)) {\n value = value.value;\n }\n const obj = Reflect.set(target, key, value, receiver);\n if (hasChanged(value, oldValue)) {\n trigger(target, key);\n }\n return obj;\n },\n deleteProperty(target, key) {\n const oldValue = Reflect.get(target, key);\n const result = Reflect.deleteProperty(target, key);\n if (oldValue !== undefined) {\n trigger(target, key);\n }\n return result;\n },\n };\n\n const proxy = new Proxy(initialValue, handler);\n reactiveMap.set(initialValue, proxy);\n return proxy;\n}\n","export function warn(msg: string, ..._args: any[]): void;\nexport function warn(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.warn.apply(console, [`[Essor Router warn]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n","import {\n deepClone,\n deepEqual,\n isArray,\n isFunction,\n isObject,\n isPrimitive,\n noop,\n} from 'essor-shared';\nimport { warn } from '../warning';\nimport { type Computed, type Signal, isComputed, isReactive, isSignal, useEffect } from './signal';\n\nexport type WatchSource<T = any> = Signal<T> | Computed<T> | (() => T);\n\nexport type WatchCallback<V = any, OV = any> = (value: V, oldValue: OV) => any;\n\nexport type WatchStopHandle = () => void;\n\ntype MapSources<T> = {\n [K in keyof T]: T[K] extends WatchSource<infer V> ? V : T[K] extends object ? T[K] : never;\n};\n\ntype MapOldSources<T, Immediate> = {\n [K in keyof T]: T[K] extends WatchSource<infer V>\n ? Immediate extends true\n ? V | undefined\n : V\n : T[K] extends object\n ? Immediate extends true\n ? T[K] | undefined\n : T[K]\n : never;\n};\n\nexport interface WatchOptionsBase {\n flush?: 'sync' | 'pre' | 'post';\n}\n\nexport interface WatchOptions<Immediate = boolean> extends WatchOptionsBase {\n immediate?: Immediate;\n deep?: boolean;\n}\n\n// overload #1: array of multiple sources + cb\nexport function useWatch<\n T extends Readonly<Array<WatchSource<unknown> | object>>,\n Immediate extends Readonly<boolean> = false,\n>(\n sources: T,\n cb: WatchCallback<MapSources<T>, MapOldSources<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// overload #2: single source + cb\nexport function useWatch<T, Immediate extends Readonly<boolean> = false>(\n source: WatchSource<T>,\n cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// overload #3: watching reactive object w/ cb\nexport function useWatch<T extends object, Immediate extends Readonly<boolean> = false>(\n source: T,\n cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// implementation\nexport function useWatch<T = any>(\n source: WatchSource<T> | WatchSource<T>[] | object,\n cb: WatchCallback<T>,\n options?: WatchOptions,\n): WatchStopHandle {\n return doWatch(source, cb, options);\n}\n\nfunction doWatch(\n source: WatchSource | WatchSource[] | object,\n cb: WatchCallback | null,\n options?: WatchOptions,\n): WatchStopHandle {\n let getter: () => any;\n const deep = options?.deep;\n\n if (isSignal(source) || isComputed(source)) {\n getter = () => source.value;\n } else if (isReactive(source)) {\n getter = () => ({ ...source });\n } else if (isArray(source)) {\n getter = () =>\n source.map(s => {\n if (isSignal(s) || isComputed(s)) return s.value;\n if (isReactive(s)) return { ...s };\n if (isFunction(s)) return s();\n return warn('Invalid source', s);\n });\n } else if (isFunction(source)) {\n getter = source as () => any;\n } else {\n warn('Invalid source type', source);\n getter = noop;\n }\n\n if (cb && deep) {\n const baseGetter = getter;\n getter = () => traverse(baseGetter());\n }\n\n let oldValue;\n\n const effectFn = () => {\n const newValue = deepClone(getter());\n\n if (!deepEqual(newValue, oldValue)) {\n cb && cb(newValue, oldValue);\n oldValue = isPrimitive(newValue) ? newValue : deepClone(newValue);\n }\n };\n\n const stop = useEffect(effectFn);\n\n if (options?.immediate) {\n effectFn();\n }\n\n return stop;\n}\n\nfunction traverse(value: unknown, seen: Set<unknown> = new Set()): unknown {\n if (!isObject(value) || seen.has(value)) return value;\n\n seen.add(value);\n if (isArray(value)) {\n value.forEach(item => traverse(item, seen));\n } else if (value instanceof Map) {\n value.forEach((v, k) => {\n traverse(k, seen);\n traverse(v, seen);\n });\n } else if (value instanceof Set) {\n value.forEach(v => traverse(v, seen));\n } else {\n Object.keys(value).forEach(key => {\n traverse((value as Record<string, unknown>)[key], seen);\n });\n }\n return value;\n}\n","import { useComputed, useReactive } from './signal';\nimport type { Computed } from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\nexport interface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<\n Record<string | symbol, any>,\n Record<string, any>,\n Record<string, any>\n >;\n\n const initState = { ...(state ?? {}) };\n const reactiveState = useReactive(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(reactiveState, payload);\n subscriptions.forEach(callback => callback(reactiveState));\n actionCallbacks.forEach(callback => callback(reactiveState));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n Object.assign(reactiveState, initState);\n },\n };\n\n const store = {\n state: reactiveState,\n ...default_actions,\n };\n\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n store[key] = useComputed(getter.bind(reactiveState, reactiveState));\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n store[key] = action.bind(reactiveState);\n }\n }\n\n StoreMap.set(_id, store);\n ++_id;\n\n return store;\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Computed<ReturnType<S[K]>> : S[K];\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<S & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions & { state: S } {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","import { isFunction, startsWith } from 'essor-shared';\nimport { signalObject } from '../signal';\nimport { type Signal, useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, any>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(\n props,\n key => startsWith(key, 'on') || startsWith(key, 'update:'),\n );\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: Record<string, Signal<any>> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n // patch props\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(this.proxyProps);\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, any>) {\n for (const [key, prop] of Object.entries(props)) {\n if (startsWith(key, 'on') && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key === 'ref') {\n if (isSignal(prop)) {\n (props[key] as any).value = this.rootNode?.nodes[0];\n } else if (isFunction(prop)) {\n (props[key] as Function)(this.rootNode?.nodes[0]);\n }\n } else if (startsWith(key, 'update:')) {\n props[key] = isSignal(prop) ? prop.value : prop;\n } else {\n const newValue = (this.proxyProps[key] ??= useSignal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = useEffect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFunction } from 'essor-shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, any>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFalsy, kebabCase } from 'essor-shared';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { coerceArray, isArray, isFunction, isNil, startsWith } from 'essor-shared';\nimport { useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach((item, index) => {\n if (!item) {\n return;\n }\n const [child, path] = isArray(item) ? item : [item, null];\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isSignal(props[attr])) {\n props[attr].value = node;\n } else if (isFunction(props[attr])) {\n (props[attr] as Function)(node);\n }\n }\n // handle events\n else if (startsWith(attr, 'on')) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (!startsWith(attr, 'update:')) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : useSignal(val);\n\n const cleanup = useEffect(() => {\n triggerValue.value = isSignal(val) ? val.value : val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n let cleanupBind;\n const updateKey = `update:${attr}`;\n if (props[updateKey]) {\n cleanupBind = binNode(node, value => {\n props[updateKey](value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = useEffect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = useEffect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n\n/**\n * Initializes a reference with a null value of type T or null.\n *\n * @template T - The type of the reference.\n * @return {T & { __is_ref: boolean; current: T | null }} A proxy object allowing custom get and set behavior.\n */\nexport function useRef<T>(): {\n __is_ref: boolean;\n current: T | null;\n} {\n // 初始化 ref 为 null,类型为 T 或 null\n let refValue: T | null = null;\n\n // 使用 Proxy 创建一个代理对象,以便我们可以自定义 get 和 set 行为\n return new Proxy({} as any, {\n get(target, key: string | symbol) {\n // 特殊属性 __is_ref 始终返回 true\n if (key === '__is_ref') {\n return true;\n }\n // 直接返回 refValue\n return refValue;\n },\n set(target, prop: string | symbol, value: any) {\n if (prop === 'current') {\n refValue = value;\n return true;\n }\n refValue = value;\n return true;\n },\n });\n}\n","export const __essor_version = '0.0.6-beta.7';\n","import { isFunction, isObject, startsWith } from 'essor-shared';\nimport type { EssorNode } from '../../types';\n\ninterface TemplateMap {\n [key: number]: {\n template: string;\n prop?: Record<string, any>;\n };\n}\n\ntype Props = Record<string, any>;\n\nexport function ssrtmpl(templates: string[] = []): TemplateMap {\n return templates.reduce((acc, template, index) => {\n acc[index + 1] = { template };\n return acc;\n }, {} as TemplateMap);\n}\n\nfunction jsonToAttrs(json: Record<string, any>): string {\n return Object.entries(json)\n .map(([key, value]) => `${key}=${JSON.stringify(value)}`)\n .join(' ');\n}\n\nexport function ssr(\n template: TemplateMap | EssorNode | ((props: Props) => string),\n props: Props,\n): string {\n if (isFunction(template)) {\n return template(props);\n }\n\n const childrenMap: Record<string, EssorNode[]> = {};\n const newTemplate: TemplateMap = {};\n if (isObject(template)) {\n Object.entries(template).forEach(([key, tmpl]) => {\n const prop = props[key];\n if (prop) {\n Object.keys(prop).forEach(propKey => {\n if (startsWith(propKey, 'on') && isFunction(prop[propKey])) {\n delete prop[propKey];\n }\n });\n\n if (prop.children) {\n prop.children.forEach(([child, idx]: [any, number]) => {\n childrenMap[idx] = [...(childrenMap[idx] || []), child];\n });\n delete prop.children;\n }\n }\n\n newTemplate[key] = { template: tmpl.template, prop };\n });\n }\n\n return Object.entries(newTemplate)\n .map(([key, { template: tmpl, prop }]) => {\n let str = tmpl;\n if (prop) {\n str += ` ${jsonToAttrs(prop)}`;\n }\n if (childrenMap[key]) {\n str += childrenMap[key].map(child => ssr(child, prop)).join('');\n }\n\n return str;\n })\n .join('');\n}\n\nexport function renderToString(component: (...args: any[]) => string, props: Props): string {\n return ssr(component, props);\n}\n\nexport function ssgRender(\n component: { mount: (root: HTMLElement) => void },\n root: HTMLElement,\n): void {\n root.innerHTML = '';\n component.mount(root);\n}\n"]}
1
+ {"version":3,"sources":["../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/signal/signal.ts","../src/warning.ts","../src/signal/watch.ts","../src/signal/store.ts","../src/template/component-node.ts","../src/template/template.ts","../src/template/utils.ts","../src/template/patch.ts","../src/template/template-node.ts","../src/template/hooks.ts","../src/version.ts","../src/server/index.ts"],"names":["isObject","val","isArray","isNull","isNil","x","isFunction","isFalsy","isPrimitive","coerceArray","data","hasChanged","value","oldValue","noop","startsWith","str","searchString","deepClone","obj","hash","mapClone","key","setClone","cloneObj","keys","deepEqual","a","b","seen","element","arrA","arrB","i","keysA","keysB","kebabCase","string","match","offset","activeEffect","activeComputed","computedSet","targetMap","EffectDeps","track","target","depsMap","dep","trigger","computedSignal","effect","Signal","newValue","useSignal","isSignal","Computed","fn","prev","useComputed","isComputed","useEffect","effectFn","shouldExclude","exclude","signalObject","initialValues","acc","unSignal","signal","REACTIVE_MARKER","isReactive","unReactive","reactiveMap","useReactive","initialValue","handler","receiver","result","proxy","warn","msg","args","useWatch","source","cb","options","doWatch","getter","deep","__spreadValues","s","baseGetter","traverse","stop","item","v","k","_id","StoreMap","createOptionsStore","state","getters","actions","initState","reactiveState","subscriptions","actionCallbacks","store","payload","callback","index","action","createStore","_ComponentNode","template","props","_a","_b","hook","context","node","set","emitter","parent","before","_c","_d","mountedNode","trackKey","suppressCleanupCall","_e","prop","event","listener","cleanup","addEventListener","ComponentNode","h","TemplateNode","isJsxElement","html","Fragment","coerceNode","text","insertChild","child","beforeNode","removeChild","replaceChild","setAttribute","attr","binNode","setter","p","nextTick","eventName","patchChildren","childrenMap","nextChildren","children","parentChildNodesLength","parentElement","range","start","replaces","nextChildrenMap","mapKeys","currChild","currKey","getKey","origChild","patch","placeholder","next","id","_TemplateNode","cloneNode","firstChild","tree","walk","trackLastNodes","isRoot","path","patchChild","triggerValue","patchAttribute","cleanupBind","updateKey","nextNodes","newNode","onMount","throwIfOutsideComponent","onDestroy","useProvide","useInject","defaultValue","useRef","refValue","__essor_version","ssrtmpl","templates","jsonToAttrs","json","ssr","newTemplate","tmpl","propKey","idx","renderToString","component","ssgRender","root"],"mappings":"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","sourcesContent":["import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n","import { isPrimitive } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport function hasChanged(value, oldValue) {\n return !Object.is(value, oldValue);\n}\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Recursively clones an object, including its nested properties and special types like Date, RegExp, Map, and Set.\n *\n * @param {any} obj - The object to clone.\n * @param {WeakMap<object, object>} [hash] - A WeakMap used to track circular references.\n * @return {any} The cloned object.\n */\nexport function deepClone(obj, hash = new WeakMap()) {\n // Return primitives and functions as-is\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle circular references\n if (hash.has(obj)) {\n return hash.get(obj);\n }\n\n // Handle special types\n if (obj instanceof Date) {\n return new Date(obj);\n }\n\n if (obj instanceof RegExp) {\n return new RegExp(obj);\n }\n\n if (obj instanceof Map) {\n const mapClone = new Map();\n hash.set(obj, mapClone);\n obj.forEach((value, key) => {\n mapClone.set(deepClone(key, hash), deepClone(value, hash));\n });\n return mapClone;\n }\n\n if (obj instanceof Set) {\n const setClone = new Set();\n hash.set(obj, setClone);\n obj.forEach(value => {\n setClone.add(deepClone(value, hash));\n });\n return setClone;\n }\n\n // Initialize the clone and store it in the WeakMap\n const cloneObj = Array.isArray(obj) ? [] : {};\n hash.set(obj, cloneObj);\n\n // Iterate over object keys\n const keys = Object.keys(obj);\n for (const key of keys) {\n cloneObj[key] = deepClone(obj[key], hash);\n }\n\n return cloneObj;\n}\n\n/**\n * Determines whether two values are deeply equal.\n *\n * @param {any} a - The first value to compare.\n * @param {any} b - The second value to compare.\n * @param {WeakMap<object, object>} [seen] - A WeakMap used to store previously seen objects to avoid infinite recursion.\n * @return {boolean} True if the values are deeply equal, false otherwise.\n */\nexport function deepEqual(a: any, b: any, seen = new WeakMap()): boolean {\n if (isPrimitive(a) && isPrimitive(b)) {\n return a === b;\n }\n\n if (a === b) {\n return true;\n }\n\n if (a == null || b == null || typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (seen.has(a)) {\n return seen.get(a) === b;\n }\n\n seen.set(a, b);\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (const [i, element] of a.entries()) {\n if (!deepEqual(element, b[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key), seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n const arrA = Array.from(a).sort();\n const arrB = Array.from(b).sort();\n for (const [i, element] of arrA.entries()) {\n if (!deepEqual(element, arrB[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n const keysA = Object.keys(a);\n const keysB = new Set(Object.keys(b));\n\n if (keysA.length !== keysB.size) {\n return false;\n }\n\n for (const key of keysA) {\n if (!keysB.has(key) || !deepEqual(a[key], b[key], seen)) {\n return false;\n }\n }\n\n return true;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { hasChanged, isFunction, isObject } from 'essor-shared';\n\ntype EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function useSignal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n private _deps: Set<EffectFn> = new Set();\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n this._deps.forEach(effect => effect());\n }\n }\n\n get value(): T {\n if (activeEffect) {\n this._deps.add(activeEffect);\n }\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function useComputed<T>(fn: () => T): Computed<T> {\n return new Computed<T>(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function useEffect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n effectFn();\n\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null;\n };\n}\n\nfunction shouldExclude(key: string, exclude?: ((key: string) => boolean) | string[]): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]> | T[K];\n};\n/**\n * Creates a SignalObject from the given initialValues, excluding specified keys.\n *\n * @param {T extends Object} initialValues - The initial values for the SignalObject.\n * @param {(key: string) => boolean | string[]} exclude - A function that determines which keys to exclude from the SignalObject.\n * @return {SignalObject<T>} The created SignalObject.\n */\nexport function signalObject<T extends object>(\n initialValues: T,\n exclude?: ((key: string) => boolean) | string[],\n): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = shouldExclude(key, exclude) || isSignal(value) ? value : useSignal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\n/**\n * Returns the current value of a signal, signal object, or plain object, excluding specified keys.\n *\n * @param {SignalObject<T> | T | Signal<T>} signal - The signal, signal object, or plain object to unwrap.\n * @param {(key: string) => boolean | string[]} [exclude] - A function that determines which keys to exclude from the unwrapped object.\n * @return {T} The unwrapped value of the signal, signal object, or plain object.\n */\nexport function unSignal<T>(\n signal: SignalObject<T> | T | Signal<T>,\n exclude?: ((key: string) => boolean) | string[],\n): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n if (shouldExclude(key, exclude)) {\n acc[key] = value;\n } else {\n acc[key] = isSignal(value) ? value.peek() : value;\n }\n return acc;\n }, {} as T);\n}\n\nconst REACTIVE_MARKER = Symbol('useReactive');\n\nexport function isReactive(obj) {\n return obj && obj[REACTIVE_MARKER] === true;\n}\n\nexport function unReactive(obj) {\n if (!isReactive(obj)) {\n return obj;\n }\n return Object.assign({}, obj);\n}\nconst reactiveMap = new WeakMap<object, object>();\n\nexport function useReactive<T extends object>(initialValue: T): T {\n if (!isObject(initialValue)) {\n return initialValue;\n }\n if (isReactive(initialValue)) {\n return initialValue;\n }\n\n if (reactiveMap.has(initialValue)) {\n return reactiveMap.get(initialValue) as T;\n }\n\n const handler: ProxyHandler<T> = {\n get(target, key, receiver) {\n if (key === REACTIVE_MARKER) return true;\n\n const value = Reflect.get(target, key, receiver);\n track(target, key);\n if (isObject(value)) {\n return useReactive(value);\n }\n return value;\n },\n set(target, key, value, receiver) {\n let oldValue: Signal<any> | any = Reflect.get(target, key, receiver);\n\n if (isSignal(oldValue)) {\n oldValue = oldValue.value;\n }\n if (isSignal(value)) {\n value = value.value;\n }\n const obj = Reflect.set(target, key, value, receiver);\n if (hasChanged(value, oldValue)) {\n trigger(target, key);\n }\n return obj;\n },\n deleteProperty(target, key) {\n const oldValue = Reflect.get(target, key);\n const result = Reflect.deleteProperty(target, key);\n if (oldValue !== undefined) {\n trigger(target, key);\n }\n return result;\n },\n };\n\n const proxy = new Proxy(initialValue, handler);\n reactiveMap.set(initialValue, proxy);\n return proxy;\n}\n","export function warn(msg: string, ..._args: any[]): void;\nexport function warn(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.warn.apply(console, [`[Essor Router warn]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n","import {\n deepClone,\n deepEqual,\n isArray,\n isFunction,\n isObject,\n isPrimitive,\n noop,\n} from 'essor-shared';\nimport { warn } from '../warning';\nimport { type Computed, type Signal, isComputed, isReactive, isSignal, useEffect } from './signal';\n\nexport type WatchSource<T = any> = Signal<T> | Computed<T> | (() => T);\n\nexport type WatchCallback<V = any, OV = any> = (value: V, oldValue: OV) => any;\n\nexport type WatchStopHandle = () => void;\n\ntype MapSources<T> = {\n [K in keyof T]: T[K] extends WatchSource<infer V> ? V : T[K] extends object ? T[K] : never;\n};\n\ntype MapOldSources<T, Immediate> = {\n [K in keyof T]: T[K] extends WatchSource<infer V>\n ? Immediate extends true\n ? V | undefined\n : V\n : T[K] extends object\n ? Immediate extends true\n ? T[K] | undefined\n : T[K]\n : never;\n};\n\nexport interface WatchOptionsBase {\n flush?: 'sync' | 'pre' | 'post';\n}\n\nexport interface WatchOptions<Immediate = boolean> extends WatchOptionsBase {\n immediate?: Immediate;\n deep?: boolean;\n}\n\n// overload #1: array of multiple sources + cb\nexport function useWatch<\n T extends Readonly<Array<WatchSource<unknown> | object>>,\n Immediate extends Readonly<boolean> = false,\n>(\n sources: T,\n cb: WatchCallback<MapSources<T>, MapOldSources<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// overload #2: single source + cb\nexport function useWatch<T, Immediate extends Readonly<boolean> = false>(\n source: WatchSource<T>,\n cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// overload #3: watching reactive object w/ cb\nexport function useWatch<T extends object, Immediate extends Readonly<boolean> = false>(\n source: T,\n cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// implementation\nexport function useWatch<T = any>(\n source: WatchSource<T> | WatchSource<T>[] | object,\n cb: WatchCallback<T>,\n options?: WatchOptions,\n): WatchStopHandle {\n return doWatch(source, cb, options);\n}\n\nfunction doWatch(\n source: WatchSource | WatchSource[] | object,\n cb: WatchCallback | null,\n options?: WatchOptions,\n): WatchStopHandle {\n let getter: () => any;\n const deep = options?.deep;\n\n if (isSignal(source) || isComputed(source)) {\n getter = () => source.value;\n } else if (isReactive(source)) {\n getter = () => ({ ...source });\n } else if (isArray(source)) {\n getter = () =>\n source.map(s => {\n if (isSignal(s) || isComputed(s)) return s.value;\n if (isReactive(s)) return { ...s };\n if (isFunction(s)) return s();\n return warn('Invalid source', s);\n });\n } else if (isFunction(source)) {\n getter = source as () => any;\n } else {\n warn('Invalid source type', source);\n getter = noop;\n }\n\n if (cb && deep) {\n const baseGetter = getter;\n getter = () => traverse(baseGetter());\n }\n\n let oldValue;\n\n const effectFn = () => {\n const newValue = deepClone(getter());\n\n if (!deepEqual(newValue, oldValue)) {\n cb && cb(newValue, oldValue);\n oldValue = isPrimitive(newValue) ? newValue : deepClone(newValue);\n }\n };\n\n const stop = useEffect(effectFn);\n\n if (options?.immediate) {\n effectFn();\n }\n\n return stop;\n}\n\nfunction traverse(value: unknown, seen: Set<unknown> = new Set()): unknown {\n if (!isObject(value) || seen.has(value)) return value;\n\n seen.add(value);\n if (isArray(value)) {\n value.forEach(item => traverse(item, seen));\n } else if (value instanceof Map) {\n value.forEach((v, k) => {\n traverse(k, seen);\n traverse(v, seen);\n });\n } else if (value instanceof Set) {\n value.forEach(v => traverse(v, seen));\n } else {\n Object.keys(value).forEach(key => {\n traverse((value as Record<string, unknown>)[key], seen);\n });\n }\n return value;\n}\n","import { useComputed, useReactive } from './signal';\nimport type { Computed } from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\nexport interface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<\n Record<string | symbol, any>,\n Record<string, any>,\n Record<string, any>\n >;\n\n const initState = { ...(state ?? {}) };\n const reactiveState = useReactive(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(reactiveState, payload);\n subscriptions.forEach(callback => callback(reactiveState));\n actionCallbacks.forEach(callback => callback(reactiveState));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n Object.assign(reactiveState, initState);\n },\n };\n\n const store = {\n state: reactiveState,\n ...default_actions,\n };\n\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n store[key] = useComputed(getter.bind(reactiveState, reactiveState));\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n store[key] = action.bind(reactiveState);\n }\n }\n\n StoreMap.set(_id, store);\n ++_id;\n\n return store;\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Computed<ReturnType<S[K]>> : S[K];\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<S & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions & { state: S } {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","import { isFunction, startsWith } from 'essor-shared';\nimport { signalObject } from '../signal';\nimport { type Signal, useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, any>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(\n props,\n key => startsWith(key, 'on') || startsWith(key, 'update:'),\n );\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: Record<string, Signal<any>> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n // patch props\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(this.proxyProps);\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, any>) {\n for (const [key, prop] of Object.entries(props)) {\n if (startsWith(key, 'on') && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key === 'ref') {\n if (isSignal(prop)) {\n (props[key] as any).value = this.rootNode?.nodes[0];\n } else if (isFunction(prop)) {\n (props[key] as Function)(this.rootNode?.nodes[0]);\n }\n } else if (startsWith(key, 'update:')) {\n props[key] = isSignal(prop) ? prop.value : prop;\n } else {\n const newValue = (this.proxyProps[key] ??= useSignal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = useEffect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFunction } from 'essor-shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, any>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFalsy, kebabCase } from 'essor-shared';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { coerceArray, isArray, isFunction, isNil, startsWith } from 'essor-shared';\nimport { useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach((item, index) => {\n if (!item) {\n return;\n }\n const [child, path] = isArray(item) ? item : [item, null];\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isSignal(props[attr])) {\n props[attr].value = node;\n } else if (isFunction(props[attr])) {\n (props[attr] as Function)(node);\n }\n }\n // handle events\n else if (startsWith(attr, 'on')) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (!startsWith(attr, 'update:')) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : useSignal(val);\n\n const cleanup = useEffect(() => {\n triggerValue.value = isSignal(val) ? val.value : val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n let cleanupBind;\n const updateKey = `update:${attr}`;\n if (props[updateKey]) {\n cleanupBind = binNode(node, value => {\n props[updateKey](value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = useEffect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = useEffect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n\n/**\n * Initializes a reference with a null value of type T or null.\n *\n * @template T - The type of the reference.\n * @return {T & { __is_ref: boolean; current: T | null }} A proxy object allowing custom get and set behavior.\n */\nexport function useRef<T>(): {\n __is_ref: boolean;\n current: T | null;\n} {\n // 初始化 ref 为 null,类型为 T 或 null\n let refValue: T | null = null;\n\n // 使用 Proxy 创建一个代理对象,以便我们可以自定义 get 和 set 行为\n return new Proxy({} as any, {\n get(target, key: string | symbol) {\n // 特殊属性 __is_ref 始终返回 true\n if (key === '__is_ref') {\n return true;\n }\n // 直接返回 refValue\n return refValue;\n },\n set(target, prop: string | symbol, value: any) {\n if (prop === 'current') {\n refValue = value;\n return true;\n }\n refValue = value;\n return true;\n },\n });\n}\n","export const __essor_version = '0.0.6-beta.8';\n","import { isFunction, isObject, startsWith } from 'essor-shared';\nimport type { EssorNode } from '../../types';\n\ninterface TemplateMap {\n [key: number]: {\n template: string;\n prop?: Record<string, any>;\n };\n}\n\ntype Props = Record<string, any>;\n\nexport function ssrtmpl(templates: string[] = []): TemplateMap {\n return templates.reduce((acc, template, index) => {\n acc[index + 1] = { template };\n return acc;\n }, {} as TemplateMap);\n}\n\nfunction jsonToAttrs(json: Record<string, any>): string {\n return Object.entries(json)\n .map(([key, value]) => `${key}=${JSON.stringify(value)}`)\n .join(' ');\n}\n\nexport function ssr(\n template: TemplateMap | EssorNode | ((props: Props) => string),\n props: Props,\n): string {\n if (isFunction(template)) {\n return template(props);\n }\n\n const childrenMap: Record<string, EssorNode[]> = {};\n const newTemplate: TemplateMap = {};\n if (isObject(template)) {\n Object.entries(template).forEach(([key, tmpl]) => {\n const prop = props[key];\n if (prop) {\n Object.keys(prop).forEach(propKey => {\n if (startsWith(propKey, 'on') && isFunction(prop[propKey])) {\n delete prop[propKey];\n }\n });\n\n if (prop.children) {\n prop.children.forEach(([child, idx]: [any, number]) => {\n childrenMap[idx] = [...(childrenMap[idx] || []), child];\n });\n delete prop.children;\n }\n }\n\n newTemplate[key] = { template: tmpl.template, prop };\n });\n }\n\n return Object.entries(newTemplate)\n .map(([key, { template: tmpl, prop }]) => {\n let str = tmpl;\n if (prop) {\n str += ` ${jsonToAttrs(prop)}`;\n }\n if (childrenMap[key]) {\n str += childrenMap[key].map(child => ssr(child, prop)).join('');\n }\n\n return str;\n })\n .join('');\n}\n\nexport function renderToString(component: (...args: any[]) => string, props: Props): string {\n return ssr(component, props);\n}\n\nexport function ssgRender(\n component: { mount: (root: HTMLElement) => void },\n root: HTMLElement,\n): void {\n root.innerHTML = '';\n component.mount(root);\n}\n"]}
package/dist/essor.d.cts CHANGED
@@ -2379,7 +2379,7 @@ declare function useRef<T>(): {
2379
2379
  current: T | null;
2380
2380
  };
2381
2381
 
2382
- declare const __essor_version = "0.0.6-beta.7";
2382
+ declare const __essor_version = "0.0.6-beta.8";
2383
2383
 
2384
2384
  interface TemplateMap {
2385
2385
  [key: number]: {
package/dist/essor.d.ts CHANGED
@@ -2379,7 +2379,7 @@ declare function useRef<T>(): {
2379
2379
  current: T | null;
2380
2380
  };
2381
2381
 
2382
- declare const __essor_version = "0.0.6-beta.7";
2382
+ declare const __essor_version = "0.0.6-beta.8";
2383
2383
 
2384
2384
  interface TemplateMap {
2385
2385
  [key: number]: {
@@ -165,8 +165,7 @@ function track(target, key) {
165
165
  dep = /* @__PURE__ */ new Set();
166
166
  depsMap.set(key, dep);
167
167
  }
168
- if (activeEffect)
169
- dep.add(activeEffect);
168
+ if (activeEffect) dep.add(activeEffect);
170
169
  if (activeComputed) {
171
170
  computedSet.add(activeComputed);
172
171
  }
@@ -283,8 +282,7 @@ function signalObject(initialValues, exclude) {
283
282
  return signals;
284
283
  }
285
284
  function unSignal(signal, exclude) {
286
- if (!signal)
287
- return {};
285
+ if (!signal) return {};
288
286
  if (isSignal(signal)) {
289
287
  return signal.peek();
290
288
  }
@@ -320,8 +318,7 @@ function useReactive(initialValue) {
320
318
  }
321
319
  const handler = {
322
320
  get(target, key, receiver) {
323
- if (key === REACTIVE_MARKER)
324
- return true;
321
+ if (key === REACTIVE_MARKER) return true;
325
322
  const value = Reflect.get(target, key, receiver);
326
323
  track(target, key);
327
324
  if (isObject(value)) {
@@ -375,12 +372,9 @@ function doWatch(source, cb, options) {
375
372
  getter = () => __spreadValues({}, source);
376
373
  } else if (isArray(source)) {
377
374
  getter = () => source.map((s) => {
378
- if (isSignal(s) || isComputed(s))
379
- return s.value;
380
- if (isReactive(s))
381
- return __spreadValues({}, s);
382
- if (isFunction(s))
383
- return s();
375
+ if (isSignal(s) || isComputed(s)) return s.value;
376
+ if (isReactive(s)) return __spreadValues({}, s);
377
+ if (isFunction(s)) return s();
384
378
  return warn("Invalid source", s);
385
379
  });
386
380
  } else if (isFunction(source)) {
@@ -408,8 +402,7 @@ function doWatch(source, cb, options) {
408
402
  return stop;
409
403
  }
410
404
  function traverse(value, seen = /* @__PURE__ */ new Set()) {
411
- if (!isObject(value) || seen.has(value))
412
- return value;
405
+ if (!isObject(value) || seen.has(value)) return value;
413
406
  seen.add(value);
414
407
  if (isArray(value)) {
415
408
  value.forEach((item) => traverse(item, seen));
@@ -1092,7 +1085,7 @@ function useRef() {
1092
1085
  }
1093
1086
 
1094
1087
  // src/version.ts
1095
- var __essor_version = "0.0.6-beta.7";
1088
+ var __essor_version = "0.0.6-beta.8";
1096
1089
 
1097
1090
  // src/server/index.ts
1098
1091
  function ssrtmpl(templates = []) {
@@ -163,8 +163,7 @@ function track(target, key) {
163
163
  dep = /* @__PURE__ */ new Set();
164
164
  depsMap.set(key, dep);
165
165
  }
166
- if (activeEffect)
167
- dep.add(activeEffect);
166
+ if (activeEffect) dep.add(activeEffect);
168
167
  if (activeComputed) {
169
168
  computedSet.add(activeComputed);
170
169
  }
@@ -281,8 +280,7 @@ function signalObject(initialValues, exclude) {
281
280
  return signals;
282
281
  }
283
282
  function unSignal(signal, exclude) {
284
- if (!signal)
285
- return {};
283
+ if (!signal) return {};
286
284
  if (isSignal(signal)) {
287
285
  return signal.peek();
288
286
  }
@@ -318,8 +316,7 @@ function useReactive(initialValue) {
318
316
  }
319
317
  const handler = {
320
318
  get(target, key, receiver) {
321
- if (key === REACTIVE_MARKER)
322
- return true;
319
+ if (key === REACTIVE_MARKER) return true;
323
320
  const value = Reflect.get(target, key, receiver);
324
321
  track(target, key);
325
322
  if (isObject(value)) {
@@ -373,12 +370,9 @@ function doWatch(source, cb, options) {
373
370
  getter = () => __spreadValues({}, source);
374
371
  } else if (isArray(source)) {
375
372
  getter = () => source.map((s) => {
376
- if (isSignal(s) || isComputed(s))
377
- return s.value;
378
- if (isReactive(s))
379
- return __spreadValues({}, s);
380
- if (isFunction(s))
381
- return s();
373
+ if (isSignal(s) || isComputed(s)) return s.value;
374
+ if (isReactive(s)) return __spreadValues({}, s);
375
+ if (isFunction(s)) return s();
382
376
  return warn("Invalid source", s);
383
377
  });
384
378
  } else if (isFunction(source)) {
@@ -406,8 +400,7 @@ function doWatch(source, cb, options) {
406
400
  return stop;
407
401
  }
408
402
  function traverse(value, seen = /* @__PURE__ */ new Set()) {
409
- if (!isObject(value) || seen.has(value))
410
- return value;
403
+ if (!isObject(value) || seen.has(value)) return value;
411
404
  seen.add(value);
412
405
  if (isArray(value)) {
413
406
  value.forEach((item) => traverse(item, seen));
@@ -1090,7 +1083,7 @@ function useRef() {
1090
1083
  }
1091
1084
 
1092
1085
  // src/version.ts
1093
- var __essor_version = "0.0.6-beta.7";
1086
+ var __essor_version = "0.0.6-beta.8";
1094
1087
 
1095
1088
  // src/server/index.ts
1096
1089
  function ssrtmpl(templates = []) {
package/dist/essor.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  var Ne=Object.defineProperty;var ce=Object.getOwnPropertySymbols;var Se=Object.prototype.hasOwnProperty,Ee=Object.prototype.propertyIsEnumerable;var ue=(e,t,n)=>t in e?Ne(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,M=(e,t)=>{for(var n in t||(t={}))Se.call(t,n)&&ue(e,n,t[n]);if(ce)for(var n of ce(t))Ee.call(t,n)&&ue(e,n,t[n]);return e};var C=e=>e!==null&&typeof e=="object";var O=Array.isArray;function be(e){return e===null}function le(e){return e==null}var p=e=>typeof e=="function";function B(e){return e===!1||e===null||e===void 0||e===""}var K=e=>["string","number","boolean","symbol","undefined"].includes(typeof e)||be(e);function D(e){return Array.isArray(e)?e.flat():[e]}function fe(e,t){return !Object.is(e,t)}var pe=Function.prototype;function v(e,t){return e.indexOf(t)===0}function k(e,t=new WeakMap){if(e===null||typeof e!="object")return e;if(t.has(e))return t.get(e);if(e instanceof Date)return new Date(e);if(e instanceof RegExp)return new RegExp(e);if(e instanceof Map){let o=new Map;return t.set(e,o),e.forEach((i,s)=>{o.set(k(s,t),k(i,t));}),o}if(e instanceof Set){let o=new Set;return t.set(e,o),e.forEach(i=>{o.add(k(i,t));}),o}let n=Array.isArray(e)?[]:{};t.set(e,n);let r=Object.keys(e);for(let o of r)n[o]=k(e[o],t);return n}function A(e,t,n=new WeakMap){if(K(e)&&K(t))return e===t;if(e===t)return !0;if(e==null||t==null||typeof e!="object"||typeof t!="object"||e.constructor!==t.constructor)return !1;if(n.has(e))return n.get(e)===t;if(n.set(e,t),Array.isArray(e)){if(e.length!==t.length)return !1;for(let[i,s]of e.entries())if(!A(s,t[i],n))return !1;return !0}if(e instanceof Map){if(e.size!==t.size)return !1;for(let[i,s]of e)if(!t.has(i)||!A(s,t.get(i),n))return !1;return !0}if(e instanceof Set){if(e.size!==t.size)return !1;let i=Array.from(e).sort(),s=Array.from(t).sort();for(let[a,c]of i.entries())if(!A(c,s[a],n))return !1;return !0}let r=Object.keys(e),o=new Set(Object.keys(t));if(r.length!==o.size)return !1;for(let i of r)if(!o.has(i)||!A(e[i],t[i],n))return !1;return !0}var de=e=>e.replaceAll(/[A-Z]+/g,(t,n)=>`${n>0?"-":""}${t.toLocaleLowerCase()}`);var E=null,_=null,q=new Set,Z=new WeakMap,Q=new Set;function $(e,t){let n=Z.get(e);n||(n=new Map,Z.set(e,n));let r=n.get(t);r||(r=new Set,n.set(t,r)),E&&r.add(E),_&&q.add(_);}function H(e,t){q.size>0&&q.forEach(o=>o.run());let n=Z.get(e);if(!n)return;let r=n.get(t);r&&r.forEach(o=>Q.has(o)&&o());}var I=class{constructor(t){this._value=t;}valueOf(){return $(this,"value"),this._value}toString(){return $(this,"value"),String(this._value)}toJSON(){return this._value}get value(){return $(this,"value"),this._value}set value(t){this._value!==t&&(this._value=t,H(this,"value"));}peek(){return this._value}update(){H(this,"value");}};function R(e){return d(e)?e:new I(e)}function d(e){return e instanceof I}var F=class{constructor(t){this.fn=t;this._deps=new Set;let n=_;_=this,this._value=this.fn(),_=n;}peek(){return this._value}run(){let t=this.fn();t!==this._value&&(this._value=t,this._deps.forEach(n=>n()));}get value(){return E&&this._deps.add(E),$(this,"_value"),this._value}};function Y(e){return new F(e)}function J(e){return e instanceof F}function N(e){function t(){let n=E;E=t,e(),E=n;}return Q.add(t),t(),()=>{Q.delete(t),E=null;}}function me(e,t){return Array.isArray(t)?t.includes(e):p(t)?t(e):!1}function ee(e,t){return Object.entries(e).reduce((r,[o,i])=>(r[o]=me(o,t)||d(i)?i:R(i),r),{})}function ke(e,t){return e?d(e)?e.peek():Object.entries(e).reduce((n,[r,o])=>(me(r,t)?n[r]=o:n[r]=d(o)?o.peek():o,n),{}):{}}var he=Symbol("useReactive");function j(e){return e&&e[he]===!0}function Ce(e){return j(e)?Object.assign({},e):e}var U=new WeakMap;function V(e){if(!C(e)||j(e))return e;if(U.has(e))return U.get(e);let t={get(r,o,i){if(o===he)return !0;let s=Reflect.get(r,o,i);return $(r,o),C(s)?V(s):s},set(r,o,i,s){let a=Reflect.get(r,o,s);d(a)&&(a=a.value),d(i)&&(i=i.value);let c=Reflect.set(r,o,i,s);return fe(i,a)&&H(r,o),c},deleteProperty(r,o){let i=Reflect.get(r,o),s=Reflect.deleteProperty(r,o);return i!==void 0&&H(r,o),s}},n=new Proxy(e,t);return U.set(e,n),n}function te(e,...t){console.warn.apply(console,[`[Essor Router warn]: ${e}`].concat(t));}function we(e,t,n){return Me(e,t,n)}function Me(e,t,n){let r,o=n==null?void 0:n.deep;if(d(e)||J(e)?r=()=>e.value:j(e)?r=()=>M({},e):O(e)?r=()=>e.map(c=>d(c)||J(c)?c.value:j(c)?M({},c):p(c)?c():te("Invalid source",c)):p(e)?r=e:(te("Invalid source type",e),r=pe),t&&o){let c=r;r=()=>W(c());}let i,s=()=>{let c=k(r());A(c,i)||(t&&t(c,i),i=K(c)?c:k(c));},a=N(s);return n!=null&&n.immediate&&s(),a}function W(e,t=new Set){return !C(e)||t.has(e)||(t.add(e),O(e)?e.forEach(n=>W(n,t)):e instanceof Map?e.forEach((n,r)=>{W(r,t),W(n,t);}):e instanceof Set?e.forEach(n=>W(n,t)):Object.keys(e).forEach(n=>{W(e[n],t);})),e}var G=0,ne=new Map;function Ae(e){let{state:t,getters:n,actions:r}=e,o=M({},t!=null?t:{}),i=V(t!=null?t:{}),s=[],a=[],l=M({state:i},{patch$(u){Object.assign(i,u),s.forEach(f=>f(i)),a.forEach(f=>f(i));},subscribe$(u){s.push(u);},unsubscribe$(u){let f=s.indexOf(u);f!==-1&&s.splice(f,1);},onAction$(u){a.push(u);},reset$(){Object.assign(i,o);}});for(let u in n){let f=n[u];f&&(l[u]=Y(f.bind(i,i)));}for(let u in r){let f=r[u];f&&(l[u]=f.bind(i));}return ne.set(G,l),++G,l}function Oe(e){return function(){return ne.has(G)?ne.get(G):Ae(e)}}var S=class S{constructor(t,n,r){this.template=t;this.props=n;this.key=r;this.proxyProps={};this.context={};this.emitter=new Set;this.mounted=!1;this.rootNode=null;this.hooks={mounted:new Set,destroy:new Set};this.trackMap=new Map;this.proxyProps=ee(n,o=>v(o,"on")||v(o,"update:"));}addEventListener(){}removeEventListener(){}get firstChild(){var t,n;return (n=(t=this.rootNode)==null?void 0:t.firstChild)!=null?n:null}get isConnected(){var t,n;return (n=(t=this.rootNode)==null?void 0:t.isConnected)!=null?n:!1}addHook(t,n){var r;(r=this.hooks[t])==null||r.add(n);}getContext(t){return S.context[t]}setContext(t,n){S.context[t]=n;}inheritNode(t){this.context=t.context,this.hooks=t.hooks,Object.assign(this.proxyProps,t.proxyProps),this.rootNode=t.rootNode,this.trackMap=t.trackMap;let n=this.props;this.props=t.props,this.patchProps(n);}unmount(){var t;this.hooks.destroy.forEach(n=>n()),Object.values(this.hooks).forEach(n=>n.clear()),(t=this.rootNode)==null||t.unmount(),this.rootNode=null,this.proxyProps={},this.mounted=!1,this.emitter.forEach(n=>n()),S.context={};}mount(t,n){var o,i,s,a;if(!p(this.template))throw new Error("Template must be a function");if(this.isConnected)return (i=(o=this.rootNode)==null?void 0:o.mount(t,n))!=null?i:[];S.ref=this,this.rootNode=this.template(this.proxyProps),S.ref=null,this.mounted=!0;let r=(a=(s=this.rootNode)==null?void 0:s.mount(t,n))!=null?a:[];return this.hooks.mounted.forEach(c=>c()),this.patchProps(this.props),r}getNodeTrack(t,n){let r=this.trackMap.get(t);return r||(r={cleanup:()=>{}},this.trackMap.set(t,r)),n||r.cleanup(),r}patchProps(t){var n,r,o,i,s;for(let[a,c]of Object.entries(t))if(v(a,"on")&&((n=this.rootNode)!=null&&n.nodes)){let l=a.slice(2).toLowerCase(),u=c,f=g(this.rootNode.nodes[0],l,u);this.emitter.add(f);}else if(a==="ref")d(c)?t[a].value=(r=this.rootNode)==null?void 0:r.nodes[0]:p(c)&&t[a]((o=this.rootNode)==null?void 0:o.nodes[0]);else if(v(a,"update:"))t[a]=d(c)?c.value:c;else {let l=(s=(i=this.proxyProps)[a])!=null?s:i[a]=R(c),u=this.getNodeTrack(a);u.cleanup=N(()=>{l.value=c;});}this.props=t;}};S.ref=null,S.context={};var y=S;function Re(e,t,n){return p(e)?new y(e,t,n):new L(e,t,n)}function T(e){return e instanceof y||e instanceof L}function je(e){let t=document.createElement("template");return t.innerHTML=e,t}function We(e){return e.children}function re(e){if(T(e)||e instanceof Node)return e;let t=B(e)?"":String(e);return document.createTextNode(t)}function x(e,t,n=null){let r=T(n)?n.firstChild:n;T(t)?t.mount(e,r):r?r.before(t):e.append(t);}function w(e){T(e)?e.unmount():e.parentNode&&e.remove();}function oe(e,t,n){x(e,t,n),w(n);}function ie(e,t,n){if(t==="class"){typeof n=="string"?e.className=n:Array.isArray(n)?e.className=n.join(" "):n&&typeof n=="object"&&(e.className=Object.entries(n).reduce((r,[o,i])=>r+(i?` ${o}`:""),"").trim());return}if(t==="style"){if(typeof n=="string")e.style.cssText=n;else if(n&&typeof n=="object"){let r=n;Object.keys(r).forEach(o=>{e.style.setProperty(de(o),String(r[o]));});}return}B(n)?e.removeAttribute(t):n===!0?e.setAttribute(t,""):e.setAttribute(t,String(n));}function ge(e,t){if(e instanceof HTMLInputElement){if(e.type==="checkbox")return g(e,"change",()=>{t(!!e.checked);});if(e.type==="date")return g(e,"change",()=>{t(e.value?e.value:"");});if(e.type==="file")return g(e,"change",()=>{e.files&&t(e.files);});if(e.type==="number")return g(e,"input",()=>{let n=Number.parseFloat(e.value);t(Number.isNaN(n)?"":String(n));});if(e.type==="radio")return g(e,"change",()=>{t(e.checked?e.value:"");});if(e.type==="text")return g(e,"input",()=>{t(e.value);})}if(e instanceof HTMLSelectElement)return g(e,"change",()=>{t(e.value);});if(e instanceof HTMLTextAreaElement)return g(e,"input",()=>{t(e.value);})}var ye=Promise.resolve();function Le(e){return e?ye.then(e):ye}function g(e,t,n){return e.addEventListener(t,n),()=>e.removeEventListener(t,n)}function Te(e,t,n,r){let o=new Map,i=t.values(),s=e.childNodes.length;if(t.size>0&&n.length===0){if(s===t.size+(r?1:0)){let l=e;l.innerHTML="",r&&x(e,r);}else {let l=document.createRange(),u=i.next().value,f=T(u)?u.firstChild:u;l.setStartBefore(f),r?l.setEndBefore(r):l.setEndAfter(e),l.deleteContents();}return t.forEach(l=>{T(l)&&l.unmount();}),o}let a=[],c=_e(n);for(let[l,u]of n.entries()){let f=i.next().value,b=X(f,l);for(;f&&!c.has(b);)w(f),t.delete(b),f=i.next().value,b=X(f,l);let P=X(u,l),se=t.get(P);if(se&&(u=Pe(e,se,u)),f)if(f){let ae=document.createComment("");x(e,ae,f),a.push([ae,u]);}else x(e,u,r);else x(e,u,r);o.set(P,u);}return a.forEach(([l,u])=>oe(e,u,l)),t.forEach((l,u)=>{l.isConnected&&!o.has(u)&&w(l);}),o}function Pe(e,t,n){return t===n?t:T(t)&&T(n)&&t.template===n.template?(n.inheritNode(t),n):t instanceof Text&&n instanceof Text?(t.textContent!==n.textContent&&(t.textContent=n.textContent),t):(oe(e,n,t),n)}function _e(e){let t=new Map;for(let[n,r]of e.entries()){let o=X(r,n);t.set(o,r);}return t}function X(e,t){let n=e instanceof Element?e.id:void 0,r=n===""?void 0:n;return r!=null?r:`_$${t}$`}var L=class e{constructor(t,n,r){this.template=t;this.props=n;this.key=r;this.treeMap=new Map;this.mounted=!1;this.nodes=[];this.provides={};this.trackMap=new Map;this.parent=null;}get firstChild(){var t;return (t=this.nodes[0])!=null?t:null}get isConnected(){return this.mounted}addEventListener(){}removeEventListener(){}unmount(){this.trackMap.forEach(t=>{var n,r;(n=t.cleanup)==null||n.call(t),(r=t.lastNodes)==null||r.forEach(o=>{t.isRoot?w(o):o instanceof e&&o.unmount();});}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(t=>w(t)),this.nodes=[],this.mounted=!1;}mount(t,n){var i;if(this.parent=t,this.isConnected)return this.nodes.forEach(s=>x(t,s,n)),this.nodes;let r=this.template.content.cloneNode(!0),o=r.firstChild;return (i=o==null?void 0:o.hasAttribute)!=null&&i.call(o,"_svg_")&&(o.remove(),o==null||o.childNodes.forEach(s=>{r.append(s);})),this.nodes=Array.from(r.childNodes),this.mapNodeTree(t,r),x(t,r,n),this.patchNodes(this.props),this.mounted=!0,this.nodes}mapNodeTree(t,n){let r=1;this.treeMap.set(0,t);let o=i=>{i.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&this.treeMap.set(r++,i);let s=i.firstChild;for(;s;)o(s),s=s.nextSibling;};o(n);}patchNodes(t){for(let n in t){let r=Number(n),o=this.treeMap.get(r);if(o){let i=this.props[n];this.patchNode(n,o,i,r===0);}}this.props=t;}getNodeTrack(t,n,r){var i;let o=this.trackMap.get(t);return o||(o={cleanup:()=>{}},n&&(o.lastNodes=new Map),r&&(o.isRoot=!0),this.trackMap.set(t,o)),(i=o.cleanup)==null||i.call(o),o}inheritNode(t){this.mounted=t.mounted,this.nodes=t.nodes,this.trackMap=t.trackMap,this.treeMap=t.treeMap;let n=this.props;this.props=t.props,this.patchNodes(n);}patchNode(t,n,r,o){for(let i in r)if(i==="children"&&r.children)if(O(r.children))r.children.forEach((s,a)=>{var P;if(!s)return;let[c,l]=O(s)?s:[s,null],u=le(l)?null:(P=this.treeMap.get(l))!=null?P:null,f=`${t}:${i}:${a}`,b=this.getNodeTrack(f,!0,o);ve(b,n,c,u);});else {let s=`${t}:${i}:0`,a=this.getNodeTrack(s,!0,o);ve(a,n,r.children,null);}else if(i==="ref")d(r[i])?r[i].value=n:p(r[i])&&r[i](n);else if(v(i,"on")){let s=i.slice(2).toLocaleLowerCase(),a=this.getNodeTrack(`${t}:${i}`),c=r[i];a.cleanup=g(n,s,c);}else if(!v(i,"update:")){let s=this.getNodeTrack(`${t}:${i}`),a=r[i],c=d(a)?a:R(a),l=N(()=>{c.value=d(a)?a.value:a,$e(s,n,i,c.value);}),u,f=`update:${i}`;r[f]&&(u=ge(n,b=>{r[f](b);})),s.cleanup=()=>{l&&l(),u&&u();};}}};function $e(e,t,n,r){let o=t;o.setAttribute&&(p(r)?e.cleanup=N(()=>{ie(o,n,r());}):ie(o,n,r));}function ve(e,t,n,r){p(n)?e.cleanup=N(()=>{let o=D(n()).map(re);e.lastNodes=Te(t,e.lastNodes,o,r);}):D(n).forEach((o,i)=>{let s=re(o);e.lastNodes.set(String(i),s),x(t,s,r);});}function Ke(e){var t;z("onMounted"),(t=y.ref)==null||t.addHook("mounted",e);}function He(e){var t;z("onDestroy"),(t=y.ref)==null||t.addHook("destroy",e);}function z(e){if(!y.ref)throw new Error(`"${e}" can only be called within the component function body
2
- and cannot be used in asynchronous or deferred calls.`)}function Ie(e,t){var n;z("useProvide"),(n=y.ref)==null||n.setContext(e,t);}function Fe(e,t){var n;return z("useInject"),((n=y.ref)==null?void 0:n.getContext(e))||t}function Je(){let e=null;return new Proxy({},{get(t,n){return n==="__is_ref"?!0:e},set(t,n,r){return e=r,!0}})}var Qt="0.0.6-beta.7";function nn(e=[]){return e.reduce((t,n,r)=>(t[r+1]={template:n},t),{})}function Ve(e){return Object.entries(e).map(([t,n])=>`${t}=${JSON.stringify(n)}`).join(" ")}function xe(e,t){if(p(e))return e(t);let n={},r={};return C(e)&&Object.entries(e).forEach(([o,i])=>{let s=t[o];s&&(Object.keys(s).forEach(a=>{v(a,"on")&&p(s[a])&&delete s[a];}),s.children&&(s.children.forEach(([a,c])=>{n[c]=[...n[c]||[],a];}),delete s.children)),r[o]={template:i.template,prop:s};}),Object.entries(r).map(([o,{template:i,prop:s}])=>{let a=i;return s&&(a+=` ${Ve(s)}`),n[o]&&(a+=n[o].map(c=>xe(c,s)).join("")),a}).join("")}function rn(e,t){return xe(e,t)}function on(e,t){t.innerHTML="",e.mount(t);}
2
+ and cannot be used in asynchronous or deferred calls.`)}function Ie(e,t){var n;z("useProvide"),(n=y.ref)==null||n.setContext(e,t);}function Fe(e,t){var n;return z("useInject"),((n=y.ref)==null?void 0:n.getContext(e))||t}function Je(){let e=null;return new Proxy({},{get(t,n){return n==="__is_ref"?!0:e},set(t,n,r){return e=r,!0}})}var Qt="0.0.6-beta.8";function nn(e=[]){return e.reduce((t,n,r)=>(t[r+1]={template:n},t),{})}function Ve(e){return Object.entries(e).map(([t,n])=>`${t}=${JSON.stringify(n)}`).join(" ")}function xe(e,t){if(p(e))return e(t);let n={},r={};return C(e)&&Object.entries(e).forEach(([o,i])=>{let s=t[o];s&&(Object.keys(s).forEach(a=>{v(a,"on")&&p(s[a])&&delete s[a];}),s.children&&(s.children.forEach(([a,c])=>{n[c]=[...n[c]||[],a];}),delete s.children)),r[o]={template:i.template,prop:s};}),Object.entries(r).map(([o,{template:i,prop:s}])=>{let a=i;return s&&(a+=` ${Ve(s)}`),n[o]&&(a+=n[o].map(c=>xe(c,s)).join("")),a}).join("")}function rn(e,t){return xe(e,t)}function on(e,t){t.innerHTML="",e.mount(t);}
3
3
 
4
4
  export { y as ComponentNode, We as Fragment, L as TemplateNode, Qt as __essor_version, Oe as createStore, Re as h, J as isComputed, T as isJsxElement, j as isReactive, d as isSignal, Le as nextTick, He as onDestroy, Ke as onMount, rn as renderToString, ee as signalObject, on as ssgRender, xe as ssr, nn as ssrtmpl, je as template, Ce as unReactive, ke as unSignal, Y as useComputed, N as useEffect, Fe as useInject, Ie as useProvide, V as useReactive, Je as useRef, R as useSignal, we as useWatch };
5
5
  //# sourceMappingURL=out.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/signal/signal.ts","../src/warning.ts","../src/signal/watch.ts","../src/signal/store.ts","../src/template/component-node.ts","../src/template/template.ts","../src/template/utils.ts","../src/template/patch.ts","../src/template/template-node.ts","../src/template/hooks.ts","../src/version.ts","../src/server/index.ts"],"names":["isObject","val","isArray","isNull","isNil","x","isFunction","isFalsy","isPrimitive","coerceArray","data","hasChanged","value","oldValue","noop","startsWith","str","searchString","deepClone","obj","hash","mapClone","key","setClone","cloneObj","keys","deepEqual","a","b","seen","element","arrA","arrB","i","keysA","keysB","kebabCase","string","match","offset","activeEffect","activeComputed","computedSet","targetMap","EffectDeps","track","target","depsMap","dep","trigger","computedSignal","effect","Signal","newValue","useSignal","isSignal","Computed","fn","prev","useComputed","isComputed","useEffect","effectFn","shouldExclude","exclude","signalObject","initialValues","acc","unSignal","signal","REACTIVE_MARKER","isReactive","unReactive","reactiveMap","useReactive","initialValue","handler","receiver","result","proxy","warn","msg","args","useWatch","source","cb","options","doWatch","getter","deep","__spreadValues","s","baseGetter","traverse","stop","item","v","k","_id","StoreMap","createOptionsStore","state","getters","actions","initState","reactiveState","subscriptions","actionCallbacks","store","payload","callback","index","action","createStore","_ComponentNode","template","props","_a","_b","hook","context","node","set","emitter","parent","before","_c","_d","mountedNode","trackKey","suppressCleanupCall","_e","prop","event","listener","cleanup","addEventListener","ComponentNode","h","TemplateNode","isJsxElement","html","Fragment","coerceNode","text","insertChild","child","beforeNode","removeChild","replaceChild","setAttribute","attr","binNode","setter","p","nextTick","eventName","patchChildren","childrenMap","nextChildren","children","parentChildNodesLength","parentElement","range","start","replaces","nextChildrenMap","mapKeys","currChild","currKey","getKey","origChild","patch","placeholder","next","id","_TemplateNode","cloneNode","firstChild","tree","walk","trackLastNodes","isRoot","path","patchChild","triggerValue","patchAttribute","cleanupBind","updateKey","nextNodes","newNode","onMount","throwIfOutsideComponent","onDestroy","useProvide","useInject","defaultValue","useRef","refValue","__essor_version","ssrtmpl","templates","jsonToAttrs","json","ssr","newTemplate","tmpl","propKey","idx","renderToString","component","ssgRender","root"],"mappings":"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","sourcesContent":["import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n","import { isPrimitive } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport function hasChanged(value, oldValue) {\n return !Object.is(value, oldValue);\n}\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Recursively clones an object, including its nested properties and special types like Date, RegExp, Map, and Set.\n *\n * @param {any} obj - The object to clone.\n * @param {WeakMap<object, object>} [hash] - A WeakMap used to track circular references.\n * @return {any} The cloned object.\n */\nexport function deepClone(obj, hash = new WeakMap()) {\n // Return primitives and functions as-is\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle circular references\n if (hash.has(obj)) {\n return hash.get(obj);\n }\n\n // Handle special types\n if (obj instanceof Date) {\n return new Date(obj);\n }\n\n if (obj instanceof RegExp) {\n return new RegExp(obj);\n }\n\n if (obj instanceof Map) {\n const mapClone = new Map();\n hash.set(obj, mapClone);\n obj.forEach((value, key) => {\n mapClone.set(deepClone(key, hash), deepClone(value, hash));\n });\n return mapClone;\n }\n\n if (obj instanceof Set) {\n const setClone = new Set();\n hash.set(obj, setClone);\n obj.forEach(value => {\n setClone.add(deepClone(value, hash));\n });\n return setClone;\n }\n\n // Initialize the clone and store it in the WeakMap\n const cloneObj = Array.isArray(obj) ? [] : {};\n hash.set(obj, cloneObj);\n\n // Iterate over object keys\n const keys = Object.keys(obj);\n for (const key of keys) {\n cloneObj[key] = deepClone(obj[key], hash);\n }\n\n return cloneObj;\n}\n\n/**\n * Determines whether two values are deeply equal.\n *\n * @param {any} a - The first value to compare.\n * @param {any} b - The second value to compare.\n * @param {WeakMap<object, object>} [seen] - A WeakMap used to store previously seen objects to avoid infinite recursion.\n * @return {boolean} True if the values are deeply equal, false otherwise.\n */\nexport function deepEqual(a: any, b: any, seen = new WeakMap()): boolean {\n if (isPrimitive(a) && isPrimitive(b)) {\n return a === b;\n }\n\n if (a === b) {\n return true;\n }\n\n if (a == null || b == null || typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (seen.has(a)) {\n return seen.get(a) === b;\n }\n\n seen.set(a, b);\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (const [i, element] of a.entries()) {\n if (!deepEqual(element, b[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key), seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n const arrA = Array.from(a).sort();\n const arrB = Array.from(b).sort();\n for (const [i, element] of arrA.entries()) {\n if (!deepEqual(element, arrB[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n const keysA = Object.keys(a);\n const keysB = new Set(Object.keys(b));\n\n if (keysA.length !== keysB.size) {\n return false;\n }\n\n for (const key of keysA) {\n if (!keysB.has(key) || !deepEqual(a[key], b[key], seen)) {\n return false;\n }\n }\n\n return true;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { hasChanged, isFunction, isObject } from 'essor-shared';\n\ntype EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function useSignal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n private _deps: Set<EffectFn> = new Set();\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n this._deps.forEach(effect => effect());\n }\n }\n\n get value(): T {\n if (activeEffect) {\n this._deps.add(activeEffect);\n }\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function useComputed<T>(fn: () => T): Computed<T> {\n return new Computed<T>(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function useEffect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n effectFn();\n\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null;\n };\n}\n\nfunction shouldExclude(key: string, exclude?: ((key: string) => boolean) | string[]): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]> | T[K];\n};\n/**\n * Creates a SignalObject from the given initialValues, excluding specified keys.\n *\n * @param {T extends Object} initialValues - The initial values for the SignalObject.\n * @param {(key: string) => boolean | string[]} exclude - A function that determines which keys to exclude from the SignalObject.\n * @return {SignalObject<T>} The created SignalObject.\n */\nexport function signalObject<T extends object>(\n initialValues: T,\n exclude?: ((key: string) => boolean) | string[],\n): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = shouldExclude(key, exclude) || isSignal(value) ? value : useSignal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\n/**\n * Returns the current value of a signal, signal object, or plain object, excluding specified keys.\n *\n * @param {SignalObject<T> | T | Signal<T>} signal - The signal, signal object, or plain object to unwrap.\n * @param {(key: string) => boolean | string[]} [exclude] - A function that determines which keys to exclude from the unwrapped object.\n * @return {T} The unwrapped value of the signal, signal object, or plain object.\n */\nexport function unSignal<T>(\n signal: SignalObject<T> | T | Signal<T>,\n exclude?: ((key: string) => boolean) | string[],\n): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n if (shouldExclude(key, exclude)) {\n acc[key] = value;\n } else {\n acc[key] = isSignal(value) ? value.peek() : value;\n }\n return acc;\n }, {} as T);\n}\n\nconst REACTIVE_MARKER = Symbol('useReactive');\n\nexport function isReactive(obj) {\n return obj && obj[REACTIVE_MARKER] === true;\n}\n\nexport function unReactive(obj) {\n if (!isReactive(obj)) {\n return obj;\n }\n return Object.assign({}, obj);\n}\nconst reactiveMap = new WeakMap<object, object>();\n\nexport function useReactive<T extends object>(initialValue: T): T {\n if (!isObject(initialValue)) {\n return initialValue;\n }\n if (isReactive(initialValue)) {\n return initialValue;\n }\n\n if (reactiveMap.has(initialValue)) {\n return reactiveMap.get(initialValue) as T;\n }\n\n const handler: ProxyHandler<T> = {\n get(target, key, receiver) {\n if (key === REACTIVE_MARKER) return true;\n\n const value = Reflect.get(target, key, receiver);\n track(target, key);\n if (isObject(value)) {\n return useReactive(value);\n }\n return value;\n },\n set(target, key, value, receiver) {\n let oldValue: Signal<any> | any = Reflect.get(target, key, receiver);\n\n if (isSignal(oldValue)) {\n oldValue = oldValue.value;\n }\n if (isSignal(value)) {\n value = value.value;\n }\n const obj = Reflect.set(target, key, value, receiver);\n if (hasChanged(value, oldValue)) {\n trigger(target, key);\n }\n return obj;\n },\n deleteProperty(target, key) {\n const oldValue = Reflect.get(target, key);\n const result = Reflect.deleteProperty(target, key);\n if (oldValue !== undefined) {\n trigger(target, key);\n }\n return result;\n },\n };\n\n const proxy = new Proxy(initialValue, handler);\n reactiveMap.set(initialValue, proxy);\n return proxy;\n}\n","export function warn(msg: string, ..._args: any[]): void;\nexport function warn(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.warn.apply(console, [`[Essor Router warn]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n","import {\n deepClone,\n deepEqual,\n isArray,\n isFunction,\n isObject,\n isPrimitive,\n noop,\n} from 'essor-shared';\nimport { warn } from '../warning';\nimport { type Computed, type Signal, isComputed, isReactive, isSignal, useEffect } from './signal';\n\nexport type WatchSource<T = any> = Signal<T> | Computed<T> | (() => T);\n\nexport type WatchCallback<V = any, OV = any> = (value: V, oldValue: OV) => any;\n\nexport type WatchStopHandle = () => void;\n\ntype MapSources<T> = {\n [K in keyof T]: T[K] extends WatchSource<infer V> ? V : T[K] extends object ? T[K] : never;\n};\n\ntype MapOldSources<T, Immediate> = {\n [K in keyof T]: T[K] extends WatchSource<infer V>\n ? Immediate extends true\n ? V | undefined\n : V\n : T[K] extends object\n ? Immediate extends true\n ? T[K] | undefined\n : T[K]\n : never;\n};\n\nexport interface WatchOptionsBase {\n flush?: 'sync' | 'pre' | 'post';\n}\n\nexport interface WatchOptions<Immediate = boolean> extends WatchOptionsBase {\n immediate?: Immediate;\n deep?: boolean;\n}\n\n// overload #1: array of multiple sources + cb\nexport function useWatch<\n T extends Readonly<Array<WatchSource<unknown> | object>>,\n Immediate extends Readonly<boolean> = false,\n>(\n sources: T,\n cb: WatchCallback<MapSources<T>, MapOldSources<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// overload #2: single source + cb\nexport function useWatch<T, Immediate extends Readonly<boolean> = false>(\n source: WatchSource<T>,\n cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// overload #3: watching reactive object w/ cb\nexport function useWatch<T extends object, Immediate extends Readonly<boolean> = false>(\n source: T,\n cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// implementation\nexport function useWatch<T = any>(\n source: WatchSource<T> | WatchSource<T>[] | object,\n cb: WatchCallback<T>,\n options?: WatchOptions,\n): WatchStopHandle {\n return doWatch(source, cb, options);\n}\n\nfunction doWatch(\n source: WatchSource | WatchSource[] | object,\n cb: WatchCallback | null,\n options?: WatchOptions,\n): WatchStopHandle {\n let getter: () => any;\n const deep = options?.deep;\n\n if (isSignal(source) || isComputed(source)) {\n getter = () => source.value;\n } else if (isReactive(source)) {\n getter = () => ({ ...source });\n } else if (isArray(source)) {\n getter = () =>\n source.map(s => {\n if (isSignal(s) || isComputed(s)) return s.value;\n if (isReactive(s)) return { ...s };\n if (isFunction(s)) return s();\n return warn('Invalid source', s);\n });\n } else if (isFunction(source)) {\n getter = source as () => any;\n } else {\n warn('Invalid source type', source);\n getter = noop;\n }\n\n if (cb && deep) {\n const baseGetter = getter;\n getter = () => traverse(baseGetter());\n }\n\n let oldValue;\n\n const effectFn = () => {\n const newValue = deepClone(getter());\n\n if (!deepEqual(newValue, oldValue)) {\n cb && cb(newValue, oldValue);\n oldValue = isPrimitive(newValue) ? newValue : deepClone(newValue);\n }\n };\n\n const stop = useEffect(effectFn);\n\n if (options?.immediate) {\n effectFn();\n }\n\n return stop;\n}\n\nfunction traverse(value: unknown, seen: Set<unknown> = new Set()): unknown {\n if (!isObject(value) || seen.has(value)) return value;\n\n seen.add(value);\n if (isArray(value)) {\n value.forEach(item => traverse(item, seen));\n } else if (value instanceof Map) {\n value.forEach((v, k) => {\n traverse(k, seen);\n traverse(v, seen);\n });\n } else if (value instanceof Set) {\n value.forEach(v => traverse(v, seen));\n } else {\n Object.keys(value).forEach(key => {\n traverse((value as Record<string, unknown>)[key], seen);\n });\n }\n return value;\n}\n","import { useComputed, useReactive } from './signal';\nimport type { Computed } from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\nexport interface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<\n Record<string | symbol, any>,\n Record<string, any>,\n Record<string, any>\n >;\n\n const initState = { ...(state ?? {}) };\n const reactiveState = useReactive(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(reactiveState, payload);\n subscriptions.forEach(callback => callback(reactiveState));\n actionCallbacks.forEach(callback => callback(reactiveState));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n Object.assign(reactiveState, initState);\n },\n };\n\n const store = {\n state: reactiveState,\n ...default_actions,\n };\n\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n store[key] = useComputed(getter.bind(reactiveState, reactiveState));\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n store[key] = action.bind(reactiveState);\n }\n }\n\n StoreMap.set(_id, store);\n ++_id;\n\n return store;\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Computed<ReturnType<S[K]>> : S[K];\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<S & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions & { state: S } {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","import { isFunction, startsWith } from 'essor-shared';\nimport { signalObject } from '../signal';\nimport { type Signal, useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, any>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(\n props,\n key => startsWith(key, 'on') || startsWith(key, 'update:'),\n );\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: Record<string, Signal<any>> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n // patch props\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(this.proxyProps);\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, any>) {\n for (const [key, prop] of Object.entries(props)) {\n if (startsWith(key, 'on') && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key === 'ref') {\n if (isSignal(prop)) {\n (props[key] as any).value = this.rootNode?.nodes[0];\n } else if (isFunction(prop)) {\n (props[key] as Function)(this.rootNode?.nodes[0]);\n }\n } else if (startsWith(key, 'update:')) {\n props[key] = isSignal(prop) ? prop.value : prop;\n } else {\n const newValue = (this.proxyProps[key] ??= useSignal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = useEffect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFunction } from 'essor-shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, any>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFalsy, kebabCase } from 'essor-shared';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { coerceArray, isArray, isFunction, isNil, startsWith } from 'essor-shared';\nimport { useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach((item, index) => {\n if (!item) {\n return;\n }\n const [child, path] = isArray(item) ? item : [item, null];\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isSignal(props[attr])) {\n props[attr].value = node;\n } else if (isFunction(props[attr])) {\n (props[attr] as Function)(node);\n }\n }\n // handle events\n else if (startsWith(attr, 'on')) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (!startsWith(attr, 'update:')) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : useSignal(val);\n\n const cleanup = useEffect(() => {\n triggerValue.value = isSignal(val) ? val.value : val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n let cleanupBind;\n const updateKey = `update:${attr}`;\n if (props[updateKey]) {\n cleanupBind = binNode(node, value => {\n props[updateKey](value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = useEffect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = useEffect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n\n/**\n * Initializes a reference with a null value of type T or null.\n *\n * @template T - The type of the reference.\n * @return {T & { __is_ref: boolean; current: T | null }} A proxy object allowing custom get and set behavior.\n */\nexport function useRef<T>(): {\n __is_ref: boolean;\n current: T | null;\n} {\n // 初始化 ref 为 null,类型为 T 或 null\n let refValue: T | null = null;\n\n // 使用 Proxy 创建一个代理对象,以便我们可以自定义 get 和 set 行为\n return new Proxy({} as any, {\n get(target, key: string | symbol) {\n // 特殊属性 __is_ref 始终返回 true\n if (key === '__is_ref') {\n return true;\n }\n // 直接返回 refValue\n return refValue;\n },\n set(target, prop: string | symbol, value: any) {\n if (prop === 'current') {\n refValue = value;\n return true;\n }\n refValue = value;\n return true;\n },\n });\n}\n","export const __essor_version = '0.0.6-beta.7';\n","import { isFunction, isObject, startsWith } from 'essor-shared';\nimport type { EssorNode } from '../../types';\n\ninterface TemplateMap {\n [key: number]: {\n template: string;\n prop?: Record<string, any>;\n };\n}\n\ntype Props = Record<string, any>;\n\nexport function ssrtmpl(templates: string[] = []): TemplateMap {\n return templates.reduce((acc, template, index) => {\n acc[index + 1] = { template };\n return acc;\n }, {} as TemplateMap);\n}\n\nfunction jsonToAttrs(json: Record<string, any>): string {\n return Object.entries(json)\n .map(([key, value]) => `${key}=${JSON.stringify(value)}`)\n .join(' ');\n}\n\nexport function ssr(\n template: TemplateMap | EssorNode | ((props: Props) => string),\n props: Props,\n): string {\n if (isFunction(template)) {\n return template(props);\n }\n\n const childrenMap: Record<string, EssorNode[]> = {};\n const newTemplate: TemplateMap = {};\n if (isObject(template)) {\n Object.entries(template).forEach(([key, tmpl]) => {\n const prop = props[key];\n if (prop) {\n Object.keys(prop).forEach(propKey => {\n if (startsWith(propKey, 'on') && isFunction(prop[propKey])) {\n delete prop[propKey];\n }\n });\n\n if (prop.children) {\n prop.children.forEach(([child, idx]: [any, number]) => {\n childrenMap[idx] = [...(childrenMap[idx] || []), child];\n });\n delete prop.children;\n }\n }\n\n newTemplate[key] = { template: tmpl.template, prop };\n });\n }\n\n return Object.entries(newTemplate)\n .map(([key, { template: tmpl, prop }]) => {\n let str = tmpl;\n if (prop) {\n str += ` ${jsonToAttrs(prop)}`;\n }\n if (childrenMap[key]) {\n str += childrenMap[key].map(child => ssr(child, prop)).join('');\n }\n\n return str;\n })\n .join('');\n}\n\nexport function renderToString(component: (...args: any[]) => string, props: Props): string {\n return ssr(component, props);\n}\n\nexport function ssgRender(\n component: { mount: (root: HTMLElement) => void },\n root: HTMLElement,\n): void {\n root.innerHTML = '';\n component.mount(root);\n}\n"]}
1
+ {"version":3,"sources":["../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/signal/signal.ts","../src/warning.ts","../src/signal/watch.ts","../src/signal/store.ts","../src/template/component-node.ts","../src/template/template.ts","../src/template/utils.ts","../src/template/patch.ts","../src/template/template-node.ts","../src/template/hooks.ts","../src/version.ts","../src/server/index.ts"],"names":["isObject","val","isArray","isNull","isNil","x","isFunction","isFalsy","isPrimitive","coerceArray","data","hasChanged","value","oldValue","noop","startsWith","str","searchString","deepClone","obj","hash","mapClone","key","setClone","cloneObj","keys","deepEqual","a","b","seen","element","arrA","arrB","i","keysA","keysB","kebabCase","string","match","offset","activeEffect","activeComputed","computedSet","targetMap","EffectDeps","track","target","depsMap","dep","trigger","computedSignal","effect","Signal","newValue","useSignal","isSignal","Computed","fn","prev","useComputed","isComputed","useEffect","effectFn","shouldExclude","exclude","signalObject","initialValues","acc","unSignal","signal","REACTIVE_MARKER","isReactive","unReactive","reactiveMap","useReactive","initialValue","handler","receiver","result","proxy","warn","msg","args","useWatch","source","cb","options","doWatch","getter","deep","__spreadValues","s","baseGetter","traverse","stop","item","v","k","_id","StoreMap","createOptionsStore","state","getters","actions","initState","reactiveState","subscriptions","actionCallbacks","store","payload","callback","index","action","createStore","_ComponentNode","template","props","_a","_b","hook","context","node","set","emitter","parent","before","_c","_d","mountedNode","trackKey","suppressCleanupCall","_e","prop","event","listener","cleanup","addEventListener","ComponentNode","h","TemplateNode","isJsxElement","html","Fragment","coerceNode","text","insertChild","child","beforeNode","removeChild","replaceChild","setAttribute","attr","binNode","setter","p","nextTick","eventName","patchChildren","childrenMap","nextChildren","children","parentChildNodesLength","parentElement","range","start","replaces","nextChildrenMap","mapKeys","currChild","currKey","getKey","origChild","patch","placeholder","next","id","_TemplateNode","cloneNode","firstChild","tree","walk","trackLastNodes","isRoot","path","patchChild","triggerValue","patchAttribute","cleanupBind","updateKey","nextNodes","newNode","onMount","throwIfOutsideComponent","onDestroy","useProvide","useInject","defaultValue","useRef","refValue","__essor_version","ssrtmpl","templates","jsonToAttrs","json","ssr","newTemplate","tmpl","propKey","idx","renderToString","component","ssgRender","root"],"mappings":"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","sourcesContent":["import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n","import { isPrimitive } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport function hasChanged(value, oldValue) {\n return !Object.is(value, oldValue);\n}\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Recursively clones an object, including its nested properties and special types like Date, RegExp, Map, and Set.\n *\n * @param {any} obj - The object to clone.\n * @param {WeakMap<object, object>} [hash] - A WeakMap used to track circular references.\n * @return {any} The cloned object.\n */\nexport function deepClone(obj, hash = new WeakMap()) {\n // Return primitives and functions as-is\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle circular references\n if (hash.has(obj)) {\n return hash.get(obj);\n }\n\n // Handle special types\n if (obj instanceof Date) {\n return new Date(obj);\n }\n\n if (obj instanceof RegExp) {\n return new RegExp(obj);\n }\n\n if (obj instanceof Map) {\n const mapClone = new Map();\n hash.set(obj, mapClone);\n obj.forEach((value, key) => {\n mapClone.set(deepClone(key, hash), deepClone(value, hash));\n });\n return mapClone;\n }\n\n if (obj instanceof Set) {\n const setClone = new Set();\n hash.set(obj, setClone);\n obj.forEach(value => {\n setClone.add(deepClone(value, hash));\n });\n return setClone;\n }\n\n // Initialize the clone and store it in the WeakMap\n const cloneObj = Array.isArray(obj) ? [] : {};\n hash.set(obj, cloneObj);\n\n // Iterate over object keys\n const keys = Object.keys(obj);\n for (const key of keys) {\n cloneObj[key] = deepClone(obj[key], hash);\n }\n\n return cloneObj;\n}\n\n/**\n * Determines whether two values are deeply equal.\n *\n * @param {any} a - The first value to compare.\n * @param {any} b - The second value to compare.\n * @param {WeakMap<object, object>} [seen] - A WeakMap used to store previously seen objects to avoid infinite recursion.\n * @return {boolean} True if the values are deeply equal, false otherwise.\n */\nexport function deepEqual(a: any, b: any, seen = new WeakMap()): boolean {\n if (isPrimitive(a) && isPrimitive(b)) {\n return a === b;\n }\n\n if (a === b) {\n return true;\n }\n\n if (a == null || b == null || typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (seen.has(a)) {\n return seen.get(a) === b;\n }\n\n seen.set(a, b);\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (const [i, element] of a.entries()) {\n if (!deepEqual(element, b[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key), seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n const arrA = Array.from(a).sort();\n const arrB = Array.from(b).sort();\n for (const [i, element] of arrA.entries()) {\n if (!deepEqual(element, arrB[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n const keysA = Object.keys(a);\n const keysB = new Set(Object.keys(b));\n\n if (keysA.length !== keysB.size) {\n return false;\n }\n\n for (const key of keysA) {\n if (!keysB.has(key) || !deepEqual(a[key], b[key], seen)) {\n return false;\n }\n }\n\n return true;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { hasChanged, isFunction, isObject } from 'essor-shared';\n\ntype EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function useSignal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n private _deps: Set<EffectFn> = new Set();\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n this._deps.forEach(effect => effect());\n }\n }\n\n get value(): T {\n if (activeEffect) {\n this._deps.add(activeEffect);\n }\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function useComputed<T>(fn: () => T): Computed<T> {\n return new Computed<T>(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function useEffect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n effectFn();\n\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null;\n };\n}\n\nfunction shouldExclude(key: string, exclude?: ((key: string) => boolean) | string[]): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]> | T[K];\n};\n/**\n * Creates a SignalObject from the given initialValues, excluding specified keys.\n *\n * @param {T extends Object} initialValues - The initial values for the SignalObject.\n * @param {(key: string) => boolean | string[]} exclude - A function that determines which keys to exclude from the SignalObject.\n * @return {SignalObject<T>} The created SignalObject.\n */\nexport function signalObject<T extends object>(\n initialValues: T,\n exclude?: ((key: string) => boolean) | string[],\n): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = shouldExclude(key, exclude) || isSignal(value) ? value : useSignal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\n/**\n * Returns the current value of a signal, signal object, or plain object, excluding specified keys.\n *\n * @param {SignalObject<T> | T | Signal<T>} signal - The signal, signal object, or plain object to unwrap.\n * @param {(key: string) => boolean | string[]} [exclude] - A function that determines which keys to exclude from the unwrapped object.\n * @return {T} The unwrapped value of the signal, signal object, or plain object.\n */\nexport function unSignal<T>(\n signal: SignalObject<T> | T | Signal<T>,\n exclude?: ((key: string) => boolean) | string[],\n): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n if (shouldExclude(key, exclude)) {\n acc[key] = value;\n } else {\n acc[key] = isSignal(value) ? value.peek() : value;\n }\n return acc;\n }, {} as T);\n}\n\nconst REACTIVE_MARKER = Symbol('useReactive');\n\nexport function isReactive(obj) {\n return obj && obj[REACTIVE_MARKER] === true;\n}\n\nexport function unReactive(obj) {\n if (!isReactive(obj)) {\n return obj;\n }\n return Object.assign({}, obj);\n}\nconst reactiveMap = new WeakMap<object, object>();\n\nexport function useReactive<T extends object>(initialValue: T): T {\n if (!isObject(initialValue)) {\n return initialValue;\n }\n if (isReactive(initialValue)) {\n return initialValue;\n }\n\n if (reactiveMap.has(initialValue)) {\n return reactiveMap.get(initialValue) as T;\n }\n\n const handler: ProxyHandler<T> = {\n get(target, key, receiver) {\n if (key === REACTIVE_MARKER) return true;\n\n const value = Reflect.get(target, key, receiver);\n track(target, key);\n if (isObject(value)) {\n return useReactive(value);\n }\n return value;\n },\n set(target, key, value, receiver) {\n let oldValue: Signal<any> | any = Reflect.get(target, key, receiver);\n\n if (isSignal(oldValue)) {\n oldValue = oldValue.value;\n }\n if (isSignal(value)) {\n value = value.value;\n }\n const obj = Reflect.set(target, key, value, receiver);\n if (hasChanged(value, oldValue)) {\n trigger(target, key);\n }\n return obj;\n },\n deleteProperty(target, key) {\n const oldValue = Reflect.get(target, key);\n const result = Reflect.deleteProperty(target, key);\n if (oldValue !== undefined) {\n trigger(target, key);\n }\n return result;\n },\n };\n\n const proxy = new Proxy(initialValue, handler);\n reactiveMap.set(initialValue, proxy);\n return proxy;\n}\n","export function warn(msg: string, ..._args: any[]): void;\nexport function warn(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.warn.apply(console, [`[Essor Router warn]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n","import {\n deepClone,\n deepEqual,\n isArray,\n isFunction,\n isObject,\n isPrimitive,\n noop,\n} from 'essor-shared';\nimport { warn } from '../warning';\nimport { type Computed, type Signal, isComputed, isReactive, isSignal, useEffect } from './signal';\n\nexport type WatchSource<T = any> = Signal<T> | Computed<T> | (() => T);\n\nexport type WatchCallback<V = any, OV = any> = (value: V, oldValue: OV) => any;\n\nexport type WatchStopHandle = () => void;\n\ntype MapSources<T> = {\n [K in keyof T]: T[K] extends WatchSource<infer V> ? V : T[K] extends object ? T[K] : never;\n};\n\ntype MapOldSources<T, Immediate> = {\n [K in keyof T]: T[K] extends WatchSource<infer V>\n ? Immediate extends true\n ? V | undefined\n : V\n : T[K] extends object\n ? Immediate extends true\n ? T[K] | undefined\n : T[K]\n : never;\n};\n\nexport interface WatchOptionsBase {\n flush?: 'sync' | 'pre' | 'post';\n}\n\nexport interface WatchOptions<Immediate = boolean> extends WatchOptionsBase {\n immediate?: Immediate;\n deep?: boolean;\n}\n\n// overload #1: array of multiple sources + cb\nexport function useWatch<\n T extends Readonly<Array<WatchSource<unknown> | object>>,\n Immediate extends Readonly<boolean> = false,\n>(\n sources: T,\n cb: WatchCallback<MapSources<T>, MapOldSources<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// overload #2: single source + cb\nexport function useWatch<T, Immediate extends Readonly<boolean> = false>(\n source: WatchSource<T>,\n cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// overload #3: watching reactive object w/ cb\nexport function useWatch<T extends object, Immediate extends Readonly<boolean> = false>(\n source: T,\n cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle;\n\n// implementation\nexport function useWatch<T = any>(\n source: WatchSource<T> | WatchSource<T>[] | object,\n cb: WatchCallback<T>,\n options?: WatchOptions,\n): WatchStopHandle {\n return doWatch(source, cb, options);\n}\n\nfunction doWatch(\n source: WatchSource | WatchSource[] | object,\n cb: WatchCallback | null,\n options?: WatchOptions,\n): WatchStopHandle {\n let getter: () => any;\n const deep = options?.deep;\n\n if (isSignal(source) || isComputed(source)) {\n getter = () => source.value;\n } else if (isReactive(source)) {\n getter = () => ({ ...source });\n } else if (isArray(source)) {\n getter = () =>\n source.map(s => {\n if (isSignal(s) || isComputed(s)) return s.value;\n if (isReactive(s)) return { ...s };\n if (isFunction(s)) return s();\n return warn('Invalid source', s);\n });\n } else if (isFunction(source)) {\n getter = source as () => any;\n } else {\n warn('Invalid source type', source);\n getter = noop;\n }\n\n if (cb && deep) {\n const baseGetter = getter;\n getter = () => traverse(baseGetter());\n }\n\n let oldValue;\n\n const effectFn = () => {\n const newValue = deepClone(getter());\n\n if (!deepEqual(newValue, oldValue)) {\n cb && cb(newValue, oldValue);\n oldValue = isPrimitive(newValue) ? newValue : deepClone(newValue);\n }\n };\n\n const stop = useEffect(effectFn);\n\n if (options?.immediate) {\n effectFn();\n }\n\n return stop;\n}\n\nfunction traverse(value: unknown, seen: Set<unknown> = new Set()): unknown {\n if (!isObject(value) || seen.has(value)) return value;\n\n seen.add(value);\n if (isArray(value)) {\n value.forEach(item => traverse(item, seen));\n } else if (value instanceof Map) {\n value.forEach((v, k) => {\n traverse(k, seen);\n traverse(v, seen);\n });\n } else if (value instanceof Set) {\n value.forEach(v => traverse(v, seen));\n } else {\n Object.keys(value).forEach(key => {\n traverse((value as Record<string, unknown>)[key], seen);\n });\n }\n return value;\n}\n","import { useComputed, useReactive } from './signal';\nimport type { Computed } from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\nexport interface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<\n Record<string | symbol, any>,\n Record<string, any>,\n Record<string, any>\n >;\n\n const initState = { ...(state ?? {}) };\n const reactiveState = useReactive(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(reactiveState, payload);\n subscriptions.forEach(callback => callback(reactiveState));\n actionCallbacks.forEach(callback => callback(reactiveState));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n Object.assign(reactiveState, initState);\n },\n };\n\n const store = {\n state: reactiveState,\n ...default_actions,\n };\n\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n store[key] = useComputed(getter.bind(reactiveState, reactiveState));\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n store[key] = action.bind(reactiveState);\n }\n }\n\n StoreMap.set(_id, store);\n ++_id;\n\n return store;\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Computed<ReturnType<S[K]>> : S[K];\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<S & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions & { state: S } {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","import { isFunction, startsWith } from 'essor-shared';\nimport { signalObject } from '../signal';\nimport { type Signal, useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, any>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(\n props,\n key => startsWith(key, 'on') || startsWith(key, 'update:'),\n );\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: Record<string, Signal<any>> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n // patch props\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(this.proxyProps);\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, any>) {\n for (const [key, prop] of Object.entries(props)) {\n if (startsWith(key, 'on') && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key === 'ref') {\n if (isSignal(prop)) {\n (props[key] as any).value = this.rootNode?.nodes[0];\n } else if (isFunction(prop)) {\n (props[key] as Function)(this.rootNode?.nodes[0]);\n }\n } else if (startsWith(key, 'update:')) {\n props[key] = isSignal(prop) ? prop.value : prop;\n } else {\n const newValue = (this.proxyProps[key] ??= useSignal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = useEffect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFunction } from 'essor-shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, any>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFalsy, kebabCase } from 'essor-shared';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { coerceArray, isArray, isFunction, isNil, startsWith } from 'essor-shared';\nimport { useEffect, useSignal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach((item, index) => {\n if (!item) {\n return;\n }\n const [child, path] = isArray(item) ? item : [item, null];\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isSignal(props[attr])) {\n props[attr].value = node;\n } else if (isFunction(props[attr])) {\n (props[attr] as Function)(node);\n }\n }\n // handle events\n else if (startsWith(attr, 'on')) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (!startsWith(attr, 'update:')) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : useSignal(val);\n\n const cleanup = useEffect(() => {\n triggerValue.value = isSignal(val) ? val.value : val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n let cleanupBind;\n const updateKey = `update:${attr}`;\n if (props[updateKey]) {\n cleanupBind = binNode(node, value => {\n props[updateKey](value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = useEffect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = useEffect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n\n/**\n * Initializes a reference with a null value of type T or null.\n *\n * @template T - The type of the reference.\n * @return {T & { __is_ref: boolean; current: T | null }} A proxy object allowing custom get and set behavior.\n */\nexport function useRef<T>(): {\n __is_ref: boolean;\n current: T | null;\n} {\n // 初始化 ref 为 null,类型为 T 或 null\n let refValue: T | null = null;\n\n // 使用 Proxy 创建一个代理对象,以便我们可以自定义 get 和 set 行为\n return new Proxy({} as any, {\n get(target, key: string | symbol) {\n // 特殊属性 __is_ref 始终返回 true\n if (key === '__is_ref') {\n return true;\n }\n // 直接返回 refValue\n return refValue;\n },\n set(target, prop: string | symbol, value: any) {\n if (prop === 'current') {\n refValue = value;\n return true;\n }\n refValue = value;\n return true;\n },\n });\n}\n","export const __essor_version = '0.0.6-beta.8';\n","import { isFunction, isObject, startsWith } from 'essor-shared';\nimport type { EssorNode } from '../../types';\n\ninterface TemplateMap {\n [key: number]: {\n template: string;\n prop?: Record<string, any>;\n };\n}\n\ntype Props = Record<string, any>;\n\nexport function ssrtmpl(templates: string[] = []): TemplateMap {\n return templates.reduce((acc, template, index) => {\n acc[index + 1] = { template };\n return acc;\n }, {} as TemplateMap);\n}\n\nfunction jsonToAttrs(json: Record<string, any>): string {\n return Object.entries(json)\n .map(([key, value]) => `${key}=${JSON.stringify(value)}`)\n .join(' ');\n}\n\nexport function ssr(\n template: TemplateMap | EssorNode | ((props: Props) => string),\n props: Props,\n): string {\n if (isFunction(template)) {\n return template(props);\n }\n\n const childrenMap: Record<string, EssorNode[]> = {};\n const newTemplate: TemplateMap = {};\n if (isObject(template)) {\n Object.entries(template).forEach(([key, tmpl]) => {\n const prop = props[key];\n if (prop) {\n Object.keys(prop).forEach(propKey => {\n if (startsWith(propKey, 'on') && isFunction(prop[propKey])) {\n delete prop[propKey];\n }\n });\n\n if (prop.children) {\n prop.children.forEach(([child, idx]: [any, number]) => {\n childrenMap[idx] = [...(childrenMap[idx] || []), child];\n });\n delete prop.children;\n }\n }\n\n newTemplate[key] = { template: tmpl.template, prop };\n });\n }\n\n return Object.entries(newTemplate)\n .map(([key, { template: tmpl, prop }]) => {\n let str = tmpl;\n if (prop) {\n str += ` ${jsonToAttrs(prop)}`;\n }\n if (childrenMap[key]) {\n str += childrenMap[key].map(child => ssr(child, prop)).join('');\n }\n\n return str;\n })\n .join('');\n}\n\nexport function renderToString(component: (...args: any[]) => string, props: Props): string {\n return ssr(component, props);\n}\n\nexport function ssgRender(\n component: { mount: (root: HTMLElement) => void },\n root: HTMLElement,\n): void {\n root.innerHTML = '';\n component.mount(root);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "essor",
3
- "version": "0.0.6-beta.8",
3
+ "version": "0.0.6-beta.9",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "keywords": [],
@@ -54,7 +54,7 @@
54
54
  "jsdelivr": "dist/essor.esm.js",
55
55
  "dependencies": {
56
56
  "csstype": "^3.1.3",
57
- "essor-shared": "0.0.6-beta.8"
57
+ "essor-shared": "0.0.6-beta.9"
58
58
  },
59
59
  "scripts": {
60
60
  "build": "tsup && cross-env NODE_ENV=production tsup --clean=false --treeshake --sourcemap=false",