UNPKG

signalforge

Version:

Fine-grained reactive state management with automatic dependency tracking - Ultra-optimized, zero dependencies

2 lines (1 loc) 4.49 kB
"use strict";var y=Object.defineProperty;var Y=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.prototype.hasOwnProperty;var X=(e,n)=>{for(var t in n)y(e,t,{get:n[t],enumerable:!0})},ee=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of J(n))!K.call(e,i)&&i!==t&&y(e,i,{get:()=>n[i],enumerable:!(r=Y(n,i))||r.enumerable});return e};var ne=e=>ee(y({},"__esModule",{value:!0}),e);var pe={};X(pe,{batch:()=>z,createComputed:()=>G,createEffect:()=>O,createSignal:()=>q,flushSync:()=>Q,untrack:()=>j});module.exports=ne(pe);var b=[],g=new Map,te=0,m=!0;function re(){return`signal_${++te}_${Date.now()}`}function C(e,n,t){let r={id:re(),type:e,createdAt:Date.now(),label:t};if(g.set(r.id,r),m){for(let i of b)if(i.onSignalCreate)try{i.onSignalCreate(r,n)}catch(a){console.error(`Error in plugin "${i.name}" onSignalCreate:`,a)}}return r}function $(e,n,t,r="set"){if(!m)return;let i=g.get(e);if(!i)return;let a={signal:i,oldValue:n,newValue:t,timestamp:Date.now(),source:r};for(let p of b)if(p.onSignalUpdate)try{p.onSignalUpdate(a)}catch(Z){console.error(`Error in plugin "${p.name}" onSignalUpdate:`,Z)}}function M(e){if(!m)return;let n=g.get(e);if(n){for(let t of b)if(t.onSignalDestroy)try{t.onSignalDestroy(n)}catch(r){console.error(`Error in plugin "${t.name}" onSignalDestroy:`,r)}g.delete(e)}}var s=1,S=2,v=4,T=8,D=16,I=1e4,V=new Array(I),f=0;function ie(e){f<I&&(e.value=void 0,e.subscribers=null,e.listeners=null,e.dependencies=null,e.computeFn=null,e.flags=0,V[f++]=e)}var d=new WeakMap,E=new Map;var _=1e4,B=new Array(_),l=0,u=0,h=!1;function oe(e){if(e.flags&S)return;let n=(u+1)%_;n===l&&(console.error("[SignalForge] Batch queue overflow \u2192 forcing flush"),U()),e.flags|=S,B[u]=e,u=n,h||(h=!0,queueMicrotask(U))}function U(){for(h=!1;l!==u;){let e=B[l];l=(l+1)%_,e.flags&=~S,e.flags&s&&c(e)}}var A=new Array(100),L=0,o=null;function ae(e){A[L++]=o,o=e}function se(){o=A[--L]}var le=function(){return this._node.value},ue=function(e){this._node.subscribers||(this._node.subscribers=new Set),this._node.subscribers.add(e)},ce=function(e){this._node.subscribers&&this._node.subscribers.delete(e)};function w(e,n=null){let t=f>0?V[--f]:{value:void 0,subscribers:null,listeners:null,dependencies:null,computeFn:null,flags:0};return t.value=e,t.computeFn=n,t.flags=n?D|s:0,n&&c(t),t}function R(e,n){return o?(o!==e&&(k(e,o),fe(o,n)),e.flags&s&&e.computeFn&&c(e),e.value):(e.flags&s&&e.computeFn&&c(e),e.value)}function ge(e,n,t){if(e.flags&D)throw new Error("Cannot set computed signal");if(typeof t=="function"&&(t=t(e.value)),Object.is(t,e.value))return;let r=e.value;e.value=t;let i=d.get(n);i&&$(i,r,t,"set"),H(e)}function k(e,n){e.subscribers||(e.subscribers=new Set),e.subscribers.add(n)}function de(e,n){e.subscribers&&e.subscribers.delete(n)}function fe(e,n){e.dependencies||(e.dependencies=new Set),e.dependencies.has(n)||(e.dependencies.add(n),k(n._node,e))}function F(e){if(e.dependencies){for(let n of e.dependencies)de(n._node,e);e.dependencies.clear()}}function P(e){if(!(e.flags&s)&&(e.flags|=s,oe(e),e.subscribers))for(let n of e.subscribers)P(n)}function c(e){if(e.computeFn&&!(e.flags&v)){e.flags|=v,F(e),ae(e);try{let n=e.computeFn();e.flags&=~s,e.flags&=~v,Object.is(n,e.value)||(e.value=n,H(e))}finally{se()}}}function H(e){if(e.subscribers)for(let n of e.subscribers)P(n);if(e.flags&T&&e.listeners)for(let n of e.listeners)n(e.value)}function N(e,n){return e.listeners||(e.listeners=new Set),e.listeners.add(n),e.flags|=T,()=>{e.listeners.delete(n),e.listeners.size===0&&(e.flags&=~T)}}function x(e){F(e),e.subscribers&&e.subscribers.clear(),e.listeners&&e.listeners.clear(),ie(e)}function q(e){let n=w(e,null),t={get:()=>R(n,t),set:i=>ge(n,t,i),subscribe:i=>N(n,i),destroy:()=>{let i=d.get(t);i&&(M(i),E.delete(i),d.delete(t)),x(n)},_node:n,_peek:le,_addSubscriber:ue,_removeSubscriber:ce},r=C("signal",e);return d.set(t,r.id),E.set(r.id,t),t}function G(e){let n,t=o;o=null;try{n=e()}finally{o=t}let r=w(n,e),i={get:()=>R(r,i),set:()=>{throw new Error("Cannot set a computed signal")},subscribe:a=>N(r,a),destroy:()=>x(r),_node:r,_peek:()=>r.value,_addSubscriber:a=>{r.subscribers||(r.subscribers=new Set),r.subscribers.add(a)},_removeSubscriber:a=>{r.subscribers&&r.subscribers.delete(a)},_markDirty:()=>P(r),_recompute:()=>c(r)};return i}function O(e){let n=w(void 0,e);return()=>x(n)}function z(e){let n=e();return W(),n}function W(){l!==u&&U()}function j(e){let n=o;o=null;try{return e()}finally{o=n}}var Q=W;