@tntsuperman/rjs
Version:
simple, react, fast JavaScript framework
3 lines (2 loc) • 1.85 kB
JavaScript
;const e=[],t=(t,o,n)=>{e.push([t,o,n]),o(),e.pop(),n()},o=(e,o=()=>0)=>{const n=Symbol();return t(n,e,o),n};class n{node;#e;constructor(e){e.dispatchEvent(new window.CustomEvent("create")),this.node=e,this.#e=[e.remove.bind(e)],e.remove=()=>{for(this.#e.forEach((e=>e()));this.node.childNodes.length;)this.node.childNodes[0].remove()}}ondestroy(e){this.#e.push(e)}}const r=[],s=o=>{let n=[],c=[];const i=e=>n=n.filter((t=>t[1]!=e)),{proxy:d,revoke:p}=Proxy.revocable(o,{get(t,o,r){let i=Reflect.get(t,o,r);if("object"==typeof i){const e=c.find((e=>e[0]==o));if(e)i=e[1];else{const e=s(i);c.push([o,...e]),i=e[0]}}const d=e.at(-1);return d&&n.push([o,...d]),i},set(e,o,s,c){const i=Reflect.set(e,o,s,c);return n.filter((e=>e[0]==o)).forEach((e=>{r.forEach((t=>t(e[1]))),t(e[1],e[2],e[3])})),i}});return r.push(i),[d,()=>(r.splice(r.findIndex((e=>e==i)),1),c.forEach((e=>e[2]?e[2]():0)),p())]},c=(e,t)=>new Proxy((function(...o){if("function"==typeof o[0]){const n=t.pop();return n&&e.addEventListener(n,o[0]),c(e,t)}return e.append(...o.map((e=>"string"==typeof e?e:e instanceof n?e.node:""))),new n(e)}),{get(o,n){if("string"==typeof n)return t.push(n),2==t.length&&e.setAttribute(t.shift()??"",t.pop()??""),c(e,t)}}),i=new Proxy({},{get:(e,t)=>"string"==typeof t?c(window.document.createElement(t),[]):void 0});exports.VNode=n,exports.createProxy=s,exports.createVElement=(e,t,r=()=>({}),s={})=>{const c=window.document.createElement(e);return o((()=>Object.entries(r()).forEach((e=>c.setAttribute(...e))))),o((()=>{for(;c.childNodes.length;)c.childNodes[0].remove();t().forEach((e=>c.appendChild(e.node)))})),Object.entries(s).forEach((e=>c.addEventListener(...e))),new n(c)},exports.createVText=e=>{const t=new window.Text("");return o((()=>t.nodeValue=e())),new n(t)},exports.hook=o,exports.seg=i;
//# sourceMappingURL=R.cjs.min.js.map