UNPKG

signalforge

Version:

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

6 lines (5 loc) 6.68 kB
"use strict";var le=Object.create;var p=Object.defineProperty;var ue=Object.getOwnPropertyDescriptor;var ce=Object.getOwnPropertyNames;var ge=Object.getPrototypeOf,de=Object.prototype.hasOwnProperty;var fe=(e,n)=>{for(var t in n)p(e,t,{get:n[t],enumerable:!0})},k=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of ce(n))!de.call(e,i)&&i!==t&&p(e,i,{get:()=>n[i],enumerable:!(r=ue(n,i))||r.enumerable});return e};var pe=(e,n,t)=>(t=e!=null?le(ge(e)):{},k(n||!e||!e.__esModule?p(t,"default",{value:e,enumerable:!0}):t,e)),ye=e=>k(p({},"__esModule",{value:!0}),e);var Me={};fe(Me,{batch:()=>Y,createComputed:()=>Z,createEffect:()=>v,createSignal:()=>S,flushSync:()=>ee,untrack:()=>X,useSignal:()=>ne,useSignalEffect:()=>te,useSignalValue:()=>D,withSignalValue:()=>oe,withSignals:()=>I});module.exports=ye(Me);var h=[],y=new Map,be=0,x=!0;function me(){return`signal_${++be}_${Date.now()}`}function R(e,n,t){let r={id:me(),type:e,createdAt:Date.now(),label:t};if(y.set(r.id,r),x){for(let i of h)if(i.onSignalCreate)try{i.onSignalCreate(r,n)}catch(s){console.error(`Error in plugin "${i.name}" onSignalCreate:`,s)}}return r}function A(e,n,t,r="set"){if(!x)return;let i=y.get(e);if(!i)return;let s={signal:i,oldValue:n,newValue:t,timestamp:Date.now(),source:r};for(let o of h)if(o.onSignalUpdate)try{o.onSignalUpdate(s)}catch(se){console.error(`Error in plugin "${o.name}" onSignalUpdate:`,se)}}function B(e){if(!x)return;let n=y.get(e);if(n){for(let t of h)if(t.onSignalDestroy)try{t.onSignalDestroy(n)}catch(r){console.error(`Error in plugin "${t.name}" onSignalDestroy:`,r)}y.delete(e)}}var l=1,P=2,U=4,w=8,F=16,L=1e4,H=new Array(L),m=0;function Se(e){m<L&&(e.value=void 0,e.subscribers=null,e.listeners=null,e.dependencies=null,e.computeFn=null,e.flags=0,H[m++]=e)}var b=new WeakMap,N=new Map;var E=1e4,q=new Array(E),c=0,d=0,_=!1;function ve(e){if(e.flags&P)return;let n=(d+1)%E;n===c&&(console.error("[SignalForge] Batch queue overflow \u2192 forcing flush"),C()),e.flags|=P,q[d]=e,d=n,_||(_=!0,queueMicrotask(C))}function C(){for(_=!1;c!==d;){let e=q[c];c=(c+1)%E,e.flags&=~P,e.flags&l&&f(e)}}var j=new Array(100),G=0,a=null;function Te(e){j[G++]=a,a=e}function he(){a=j[--G]}var xe=function(){return this._node.value},Ue=function(e){this._node.subscribers||(this._node.subscribers=new Set),this._node.subscribers.add(e)},Pe=function(e){this._node.subscribers&&this._node.subscribers.delete(e)};function V(e,n=null){let t=m>0?H[--m]:{value:void 0,subscribers:null,listeners:null,dependencies:null,computeFn:null,flags:0};return t.value=e,t.computeFn=n,t.flags=n?F|l:0,n&&f(t),t}function O(e,n){return a?(a!==e&&(W(e,a),Ce(a,n)),e.flags&l&&e.computeFn&&f(e),e.value):(e.flags&l&&e.computeFn&&f(e),e.value)}function we(e,n,t){if(e.flags&F)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=b.get(n);i&&A(i,r,t,"set"),K(e)}function W(e,n){e.subscribers||(e.subscribers=new Set),e.subscribers.add(n)}function _e(e,n){e.subscribers&&e.subscribers.delete(n)}function Ce(e,n){e.dependencies||(e.dependencies=new Set),e.dependencies.has(n)||(e.dependencies.add(n),W(n._node,e))}function z(e){if(e.dependencies){for(let n of e.dependencies)_e(n._node,e);e.dependencies.clear()}}function M(e){if(!(e.flags&l)&&(e.flags|=l,ve(e),e.subscribers))for(let n of e.subscribers)M(n)}function f(e){if(e.computeFn&&!(e.flags&U)){e.flags|=U,z(e),Te(e);try{let n=e.computeFn();e.flags&=~l,e.flags&=~U,Object.is(n,e.value)||(e.value=n,K(e))}finally{he()}}}function K(e){if(e.subscribers)for(let n of e.subscribers)M(n);if(e.flags&w&&e.listeners)for(let n of e.listeners)n(e.value)}function Q(e,n){return e.listeners||(e.listeners=new Set),e.listeners.add(n),e.flags|=w,()=>{e.listeners.delete(n),e.listeners.size===0&&(e.flags&=~w)}}function $(e){z(e),e.subscribers&&e.subscribers.clear(),e.listeners&&e.listeners.clear(),Se(e)}function S(e){let n=V(e,null),t={get:()=>O(n,t),set:i=>we(n,t,i),subscribe:i=>Q(n,i),destroy:()=>{let i=b.get(t);i&&(B(i),N.delete(i),b.delete(t)),$(n)},_node:n,_peek:xe,_addSubscriber:Ue,_removeSubscriber:Pe},r=R("signal",e);return b.set(t,r.id),N.set(r.id,t),t}function Z(e){let n,t=a;a=null;try{n=e()}finally{a=t}let r=V(n,e),i={get:()=>O(r,i),set:()=>{throw new Error("Cannot set a computed signal")},subscribe:s=>Q(r,s),destroy:()=>$(r),_node:r,_peek:()=>r.value,_addSubscriber:s=>{r.subscribers||(r.subscribers=new Set),r.subscribers.add(s)},_removeSubscriber:s=>{r.subscribers&&r.subscribers.delete(s)},_markDirty:()=>M(r),_recompute:()=>f(r)};return i}function v(e){let n=V(void 0,e);return()=>$(n)}function Y(e){let n=e();return J(),n}function J(){c!==d&&C()}function X(e){let n=a;a=null;try{return e()}finally{a=n}}var ee=J;var u=require("react");function Ee(){if(typeof u.useState!="function"||typeof u.useEffect!="function")throw new Error(`[SignalForge] React hooks unavailable. Possible duplicate React instance or invalid bundler resolution. Troubleshooting: 1. Ensure only one react copy: node_modules/react (no nested copy under library). 2. Clear Metro cache: npx react-native start --reset-cache. 3. Verify metro.config.js extraNodeModules maps react to example app node_modules.`)}Ee();function D(e){let[n,t]=(0,u.useState)(()=>e.get());return(0,u.useEffect)(()=>(t(e.get()),e.subscribe(()=>t(e.get()))),[e]),n}function ne(e){let[n]=(0,u.useState)(()=>{let r=typeof e=="function"?e():e;return S(r)});return[D(n),n.set.bind(n)]}var g=require("react");var T=new WeakMap;function te(e,n=[]){let t=(0,g.useRef)({}),r=(0,g.useRef)(null),i=(0,g.useRef)(null);(0,g.useEffect)(()=>{let s=()=>{if(!T.get(t.current)){T.set(t.current,!0);try{r.current&&(r.current(),r.current=null);let o=e();typeof o=="function"&&(r.current=o)}finally{T.set(t.current,!1)}}};return i.current=v(s),()=>{r.current&&r.current(),i.current&&i.current(),T.delete(t.current)}},n)}var ie=pe(require("react")),ae=require("react/jsx-runtime");function re(e){let n={};for(let t of Object.keys(e))n[t]=e[t].get();return n}function Ve(e){return e.displayName||e.name||"Component"}function I(e,n,t){var r;return r=class extends ie.default.Component{constructor(o){super(o);this.unsubscribers=[];this.state=re(n)}componentDidMount(){this.unsubscribeAll(),this.setState(re(n)),this.unsubscribers=Object.keys(n).map(o=>n[o].subscribe(()=>{this.setState({[o]:n[o].get()})}))}componentWillUnmount(){this.unsubscribeAll()}unsubscribeAll(){for(let o of this.unsubscribers)o();this.unsubscribers=[]}render(){return(0,ae.jsx)(e,{...this.props,...this.state})}},r.displayName=t?.displayName||`WithSignals(${Ve(e)})`,r}function oe(e,n,t){return I(e,{value:n},{displayName:t?.displayName})}