@but212/atom-effect 0.15.1 → 0.15.3

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/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const oe={ONE_SECOND_MS:1e3},v={IDLE:"idle",PENDING:"pending",RESOLVED:"resolved",REJECTED:"rejected"},g={DISPOSED:1,HAS_FN_SUBS:2,HAS_OBJ_SUBS:4},S={...g,EXECUTING:8},u={...g,DIRTY:8,IDLE:16,PENDING:32,RESOLVED:64,REJECTED:128,RECOMPUTING:256,HAS_ERROR:512},I={...g,SYNC:8,NOTIFICATION_SCHEDULED:16},ce={MAX_SIZE:1e3,WARMUP_SIZE:100},R={MAX_EXECUTIONS_PER_SECOND:1e3,CLEANUP_THRESHOLD:1e3,MAX_EXECUTIONS_PER_EFFECT:100,MAX_EXECUTIONS_PER_FLUSH:1e4,MAX_FLUSH_ITERATIONS:1e3,MIN_FLUSH_ITERATIONS:10,BATCH_QUEUE_SHRINK_THRESHOLD:1e3},H={MAX_DEPENDENCIES:1e3,WARN_INFINITE_LOOP:!0},x=1073741823,E=typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production",he=Object.freeze([]);class D extends Error{constructor(e,t=null,s=!0){super(e),this.name="AtomError",this.cause=t,this.recoverable=s,this.timestamp=new Date}}class C extends D{constructor(e,t=null){super(e,t,!0),this.name="ComputedError"}}class T extends D{constructor(e,t=null){super(e,t,!1),this.name="EffectError"}}class F extends D{constructor(e,t=null){super(e,t,!1),this.name="SchedulerError"}}const l={COMPUTED_MUST_BE_FUNCTION:"Computed function must be a function",COMPUTED_SUBSCRIBER_MUST_BE_FUNCTION:"Subscriber listener must be a function or Subscriber object",COMPUTED_ASYNC_PENDING_NO_DEFAULT:"Async computation is pending. No default value provided",COMPUTED_COMPUTATION_FAILED:"Computed computation failed",COMPUTED_ASYNC_COMPUTATION_FAILED:"Async computed computation failed",COMPUTED_CIRCULAR_DEPENDENCY:"Circular dependency detected during computation",COMPUTED_DEPENDENCY_SUBSCRIPTION_FAILED:"Failed to subscribe to dependency",ATOM_SUBSCRIBER_MUST_BE_FUNCTION:"Subscription listener must be a function or Subscriber object",ATOM_SUBSCRIBER_EXECUTION_FAILED:"Error occurred while executing atom subscribers",ATOM_INDIVIDUAL_SUBSCRIBER_FAILED:"Error during individual atom subscriber execution",EFFECT_MUST_BE_FUNCTION:"Effect function must be a function",EFFECT_EXECUTION_FAILED:"Effect execution failed",EFFECT_CLEANUP_FAILED:"Effect cleanup function execution failed",EFFECT_DISPOSED:"Cannot run a disposed effect",LARGE_DEPENDENCY_GRAPH:i=>`Large dependency graph detected: ${i} dependencies`,UNSUBSCRIBE_NON_EXISTENT:"Attempted to unsubscribe a non-existent listener",CALLBACK_ERROR_IN_ERROR_HANDLER:"Error occurred during onError callback execution"},w=Symbol("debugName"),ue=Symbol("id"),k=Symbol("type"),Y=Symbol("noDefaultValue");function _e(i){return"dependencies"in i&&Array.isArray(i.dependencies)}let q=0;function K(i,e,t){if(i._visitedEpoch!==t){if(i._visitedEpoch=t,i===e)throw new C("Indirect circular dependency detected");if(_e(i)){const s=i.dependencies;for(let n=0;n<s.length;n++){const r=s[n];r&&K(r,e,t)}}}}const b={enabled:typeof process<"u"&&process.env?.NODE_ENV==="development",maxDependencies:H.MAX_DEPENDENCIES,warnInfiniteLoop:H.WARN_INFINITE_LOOP,warn(i,e){this.enabled&&i&&console.warn(`[Atom Effect] ${e}`)},checkCircular(i,e){if(i===e)throw new C("Direct circular dependency detected");this.enabled&&(q++,K(i,e,q))},attachDebugInfo(i,e,t){if(!this.enabled)return;const s=i;s[w]=`${e}_${t}`,s[ue]=t,s[k]=e},getDebugName(i){if(i!=null&&w in i)return i[w]},getDebugType(i){if(i!=null&&k in i)return i[k]}};let le=1;const ae=()=>le++;class W{constructor(){this.flags=0,this.version=0,this._lastSeenEpoch=-1,this._modifiedAtEpoch=-1,this._visitedEpoch=-1,this.id=ae()&x,this._tempUnsub=void 0}getShift(e){return this.version-e&x}}class Z extends W{subscribe(e){if(typeof e=="function")return this._addSubscriber(this._fnSubs,e,g.HAS_FN_SUBS);if(e!==null&&typeof e=="object"&&"execute"in e)return this._addSubscriber(this._objSubs,e,g.HAS_OBJ_SUBS);throw new D(l.ATOM_SUBSCRIBER_MUST_BE_FUNCTION)}subscriberCount(){return this._fnSubs.length+this._objSubs.length}_addSubscriber(e,t,s){if(e.indexOf(t)!==-1)return E&&console.warn("Attempted to subscribe the same listener twice. Ignoring duplicate subscription."),()=>{};e.push(t),this.flags|=s;let r=!1;return()=>{if(r)return;r=!0;const o=e.indexOf(t);if(o!==-1){const c=e.pop();o<e.length&&(e[o]=c),this.flags&=~(e.length===0?s:0)}}}_notifySubscribers(e,t){const s=this.flags,n=g.HAS_FN_SUBS|g.HAS_OBJ_SUBS;if(s&n){if(s&g.HAS_FN_SUBS){const r=this._fnSubs;for(let o=0,c=r.length;o<c;o++){const h=r[o];if(h)try{h(e,t)}catch(_){console.error(new D(l.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,_))}}}if(s&g.HAS_OBJ_SUBS){const r=this._objSubs;for(let o=0,c=r.length;o<c;o++){const h=r[o];if(h)try{h.execute()}catch(_){console.error(new D(l.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,_))}}}}}}class fe{constructor(){this.acquired=0,this.released=0,this.rejected=new Ee}}class Ee{constructor(){this.frozen=0,this.tooLarge=0,this.poolFull=0}}class j{constructor(){this.pool=[],this.maxPoolSize=50,this.maxReusableCapacity=256,this.stats=E?new fe:null}acquire(){const e=this.stats;return E&&e&&e.acquired++,this.pool.pop()??[]}release(e,t){if(t&&e===t||Object.isFrozen(e)){const c=this.stats;E&&c&&e!==t&&c.rejected.frozen++;return}const s=e.length,n=this.pool,r=n.length;if(s>this.maxReusableCapacity||r>=this.maxPoolSize){const c=this.stats;E&&c&&(s>this.maxReusableCapacity?c.rejected.tooLarge++:c.rejected.poolFull++);return}e.length=0,n.push(e);const o=this.stats;E&&o&&o.released++}getStats(){const e=this.stats;if(!E||!e)return null;const{acquired:t,released:s,rejected:n}=e,r=n.frozen+n.tooLarge+n.poolFull;return{acquired:t,released:s,rejected:{frozen:n.frozen,tooLarge:n.tooLarge,poolFull:n.poolFull},leaked:t-s-r,poolSize:this.pool.length}}reset(){this.pool.length=0;const e=this.stats;E&&e&&(e.acquired=0,e.released=0,e.rejected.frozen=0,e.rejected.tooLarge=0,e.rejected.poolFull=0)}}const d=Object.freeze([]),A=Object.freeze([]),p=Object.freeze([]),y=new j,m=new j,N=new j;function O(i,e,t,s){if(e!=null){if((typeof e=="object"||typeof e=="function")&&typeof e.addDependency=="function"){e.addDependency(i);return}if(typeof e=="function"){const n=e;t.indexOf(n)===-1&&(t.push(n),i.flags|=g.HAS_FN_SUBS);return}typeof e=="object"&&typeof e.execute=="function"&&s.indexOf(e)===-1&&(s.push(e),i.flags|=g.HAS_OBJ_SUBS)}}function Q(i,e,t,s){const n=i.length,r=e.length,o=e!==d&&r>0;if(o)for(let h=0;h<r;h++){const _=e[h];_&&(_._tempUnsub=t[h])}const c=m.acquire();c.length=n;for(let h=0;h<n;h++){const _=i[h];if(!_)continue;const a=_._tempUnsub;a?(c[h]=a,_._tempUnsub=void 0):(b.checkCircular(_,s),c[h]=_.subscribe(s))}if(o)for(let h=0;h<r;h++){const _=e[h];if(_){const a=_._tempUnsub;a&&(a(),_._tempUnsub=void 0)}}return t!==A&&m.release(t),c}let L=0;function ee(){return L=L+1&x||1,L}function de(){return L}let G=0,z=0,M=!1;function J(){return M?(E&&console.warn("Warning: startFlush() called during flush - ignored to prevent infinite loop detection bypass"),!1):(M=!0,G=G+1&x||1,z=0,!0)}function $(){M=!1}function pe(){return M?++z:0}class Se{constructor(){this._queueBuffer=[[],[]],this._bufferIndex=0,this._size=0,this._epoch=0,this.isProcessing=!1,this.isBatching=!1,this.batchDepth=0,this.batchQueue=[],this.batchQueueSize=0,this.isFlushingSync=!1,this.maxFlushIterations=R.MAX_FLUSH_ITERATIONS}get phase(){return this.isProcessing||this.isFlushingSync?2:this.isBatching?1:0}get queueSize(){return this._size}schedule(e){if(E&&typeof e!="function")throw new F("Scheduler callback must be a function");const t=this._epoch;if(e._nextEpoch!==t){if(e._nextEpoch=t,this.isBatching||this.isFlushingSync){this.batchQueue[this.batchQueueSize++]=e;return}this._queueBuffer[this._bufferIndex][this._size++]=e,this.isProcessing||this.flush()}}flush(){this.isProcessing||this._size===0||(this.isProcessing=!0,queueMicrotask(()=>{try{if(this._size===0)return;const e=J();this._drainQueue(),e&&$()}finally{this.isProcessing=!1,this._size>0&&!this.isBatching&&this.flush()}}))}flushSync(){this.isFlushingSync=!0;const e=J();try{this._mergeBatchQueue(),this._drainQueue()}finally{this.isFlushingSync=!1,e&&$()}}_mergeBatchQueue(){const e=this.batchQueueSize;if(e===0)return;const t=++this._epoch,s=this.batchQueue,n=this._queueBuffer[this._bufferIndex];let r=this._size;for(let o=0;o<e;o++){const c=s[o];c._nextEpoch!==t&&(c._nextEpoch=t,n[r++]=c)}this._size=r,this.batchQueueSize=0,s.length>R.BATCH_QUEUE_SHRINK_THRESHOLD&&(s.length=0)}_drainQueue(){let e=0;const t=this.maxFlushIterations;for(;this._size>0;){if(++e>t){this._handleFlushOverflow();return}this._processQueue(),this._mergeBatchQueue()}}_processQueue(){const e=this._bufferIndex,t=this._queueBuffer[e],s=this._size,n=e^1;this._bufferIndex=n,this._size=0,this._epoch++,this._processJobs(t,s)}_handleFlushOverflow(){console.error(new F(`Maximum flush iterations (${this.maxFlushIterations}) exceeded. Possible infinite loop.`)),this._size=0,this._queueBuffer[this._bufferIndex].length=0,this.batchQueueSize=0}_processJobs(e,t){for(let s=0;s<t;s++)try{e[s]()}catch(n){console.error(new F("Error occurred during scheduler execution",n))}e.length=0}startBatch(){this.batchDepth++,this.isBatching=!0}endBatch(){if(this.batchDepth===0){E&&console.warn("endBatch() called without matching startBatch(). Ignoring.");return}this.batchDepth--,this.batchDepth===0&&(this.flushSync(),this.isBatching=!1)}setMaxFlushIterations(e){if(e<R.MIN_FLUSH_ITERATIONS)throw new F(`Max flush iterations must be at least ${R.MIN_FLUSH_ITERATIONS}`);this.maxFlushIterations=e}}const U=new Se;class ge{constructor(){this.current=null}run(e,t){const s=this.current;this.current=e;try{return t()}finally{this.current=s}}getCurrent(){return this.current}}const f=new ge;function te(i){if(typeof i!="function")throw new D("Untracked callback must be a function");const e=f.current;f.current=null;try{return i()}finally{f.current=e}}class be extends Z{constructor(e,t){super(),this._value=e,this._pendingOldValue=void 0,this._notifyTask=void 0,this._fnSubs=[],this._objSubs=[],t&&(this.flags|=I.SYNC),b.attachDebugInfo(this,"atom",this.id)}get value(){const e=f.current;return e&&O(this,e,this._fnSubs,this._objSubs),this._value}set value(e){const t=this._value;if(Object.is(t,e))return;this._value=e,this.version=this.version+1&x;const s=this.flags,n=I.HAS_FN_SUBS|I.HAS_OBJ_SUBS;s&n&&this._scheduleNotification(t)}_scheduleNotification(e){let t=this.flags;if(t&I.NOTIFICATION_SCHEDULED||(this._pendingOldValue=e,this.flags=t|=I.NOTIFICATION_SCHEDULED),t&I.SYNC&&!U.isBatching){this._flushNotifications();return}let s=this._notifyTask;s||(s=this._notifyTask=()=>this._flushNotifications()),U.schedule(s)}_flushNotifications(){const e=this.flags;if(!(e&I.NOTIFICATION_SCHEDULED)||e&I.DISPOSED)return;const t=this._pendingOldValue,s=this._value;this._pendingOldValue=void 0,this.flags&=-17,this._notifySubscribers(s,t)}peek(){return this._value}dispose(){this.flags&I.DISPOSED||(this._fnSubs=[],this._objSubs=[],this.flags|=I.DISPOSED,this._value=void 0,this._pendingOldValue=void 0,this._notifyTask=void 0)}}function Ie(i,e={}){return new be(i,e.sync??!1)}function P(i,e,t){if(i instanceof TypeError)return new e(`Type error (${t}): ${i.message}`,i);if(i instanceof ReferenceError)return new e(`Reference error (${t}): ${i.message}`,i);if(i instanceof D)return i;const s=i instanceof Error?i.message:String(i),n=i instanceof Error?i:null;return new e(`Unexpected error (${t}): ${s}`,n)}function se(i){return i!==null&&typeof i=="object"&&"value"in i&&"subscribe"in i&&typeof i.subscribe=="function"}function De(i){if(b.enabled&&i!=null&&typeof i=="object"){const e=b.getDebugType(i);if(e)return e==="computed"}return se(i)&&"invalidate"in i&&typeof i.invalidate=="function"}function Ce(i){return i!==null&&typeof i=="object"&&"dispose"in i&&"run"in i&&typeof i.dispose=="function"&&typeof i.run=="function"}function ie(i){return i!=null&&typeof i.then=="function"}const ne=u.RESOLVED|u.PENDING|u.REJECTED,V=Array(ne+1).fill(v.IDLE);V[u.RESOLVED]=v.RESOLVED;V[u.PENDING]=v.PENDING;V[u.REJECTED]=v.REJECTED;class Ne{constructor(e){this._owner=e,this._epoch=-1,this._nextDeps=d,this._nextVersions=p,this._depCount=0}execute(){this._owner._markDirty()}addDependency(e){if(e._lastSeenEpoch===this._epoch)return;e._lastSeenEpoch=this._epoch;const t=this._depCount,s=this._nextDeps,n=this._nextVersions;t<s.length?(s[t]=e,n[t]=e.version):(s.push(e),n.push(e.version)),this._depCount=t+1}reset(){this._epoch=-1,this._nextDeps=d,this._nextVersions=p,this._depCount=0}}class re extends Z{constructor(e,t={}){if(typeof e!="function")throw new C(l.COMPUTED_MUST_BE_FUNCTION);if(super(),this.MAX_ASYNC_RETRIES=3,this._value=void 0,this.flags=u.DIRTY|u.IDLE,this._error=null,this._promiseId=0,this._equal=t.equal??Object.is,this._fn=e,this._defaultValue="defaultValue"in t?t.defaultValue:Y,this._hasDefaultValue=this._defaultValue!==Y,this._onError=t.onError??null,this.MAX_PROMISE_ID=Number.MAX_SAFE_INTEGER-1,this._fnSubs=[],this._objSubs=[],this._dependencies=d,this._dependencyVersions=p,this._unsubscribes=A,this._cachedErrors=null,this._errorCacheEpoch=-1,this._asyncStartAggregateVersion=0,this._asyncRetryCount=0,this._trackable=new Ne(this),b.attachDebugInfo(this,"computed",this.id),b.enabled){const s=this;s.subscriberCount=this.subscriberCount.bind(this),s.isDirty=()=>(this.flags&u.DIRTY)!==0,s.dependencies=this._dependencies,s.stateFlags=""}if(t.lazy===!1)try{this._recompute()}catch{}}get value(){const e=f.current;e&&O(this,e,this._fnSubs,this._objSubs);const t=this.flags;if(t&u.RECOMPUTING){if(this._hasDefaultValue)return this._defaultValue;throw new C(l.COMPUTED_CIRCULAR_DEPENDENCY)}t&(u.DIRTY|u.IDLE)&&this._recompute();const s=this.flags;return s&u.PENDING?this._handlePending():s&u.REJECTED?this._handleRejected():this._value}peek(){return this._value}get state(){const e=f.current;return e&&O(this,e,this._fnSubs,this._objSubs),V[this.flags&ne]}get hasError(){const e=f.current;if(e&&O(this,e,this._fnSubs,this._objSubs),this.flags&(u.REJECTED|u.HAS_ERROR))return!0;const s=this._dependencies;for(let n=0,r=s.length;n<r;n++){const o=s[n];if(o&&o.flags&u.HAS_ERROR)return!0}return!1}get isValid(){return!this.hasError}get errors(){const e=f.current;if(e&&O(this,e,this._fnSubs,this._objSubs),!this.hasError)return he;const t=de();if(this._errorCacheEpoch===t&&this._cachedErrors!==null)return this._cachedErrors;const s=new Set;this._error&&s.add(this._error);const n=this._dependencies;for(let o=0,c=n.length;o<c;o++){const h=n[o];if(h&&"errors"in h){const _=h.errors;for(let a=0,B=_.length;a<B;a++){const X=_[a];X&&s.add(X)}}}const r=Object.freeze([...s]);return this._cachedErrors=r,this._errorCacheEpoch=t,r}get lastError(){const e=f.current;return e&&O(this,e,this._fnSubs,this._objSubs),this._error}get isPending(){const e=f.current;return e&&O(this,e,this._fnSubs,this._objSubs),(this.flags&u.PENDING)!==0}get isResolved(){const e=f.current;return e&&O(this,e,this._fnSubs,this._objSubs),(this.flags&u.RESOLVED)!==0}invalidate(){this._markDirty();const e=this._dependencyVersions;e!==p&&(N.release(e),this._dependencyVersions=p),this._errorCacheEpoch=-1,this._cachedErrors=null}dispose(){const e=this._unsubscribes;if(e!==A){for(let n=0,r=e.length;n<r;n++){const o=e[n];o&&o()}m.release(e),this._unsubscribes=A}const t=this._dependencies;t!==d&&(y.release(t),this._dependencies=d);const s=this._dependencyVersions;s!==p&&(N.release(s),this._dependencyVersions=p),this._fnSubs=[],this._objSubs=[],this.flags=u.DISPOSED|u.DIRTY|u.IDLE,this._error=null,this._value=void 0,this._promiseId=(this._promiseId+1)%this.MAX_PROMISE_ID,this._cachedErrors=null,this._errorCacheEpoch=-1}_clearDirty(){this.flags&=-9}_setPending(){this.flags=(this.flags|u.PENDING)&-209}_isResolved(){return(this.flags&u.RESOLVED)!==0}_setResolved(){this.flags=(this.flags|u.RESOLVED)&-689}_isRejected(){return(this.flags&u.REJECTED)!==0}_setRejected(){this.flags=this.flags&-113|(u.REJECTED|u.HAS_ERROR)}_setRecomputing(e){const t=u.RECOMPUTING;this.flags=this.flags&~t|(e?-1:0)&t}_recompute(){if(this.flags&u.RECOMPUTING)return;this._setRecomputing(!0);const e=this._trackable,t=this._dependencies,s=this._dependencyVersions;e._epoch=ee(),e._nextDeps=y.acquire(),e._nextVersions=N.acquire(),e._depCount=0;let n=!1;try{const r=f.run(e,this._fn),o=e._nextDeps,c=e._nextVersions,h=e._depCount;o.length=h,c.length=h,this._unsubscribes=Q(o,t,this._unsubscribes,this),this._dependencies=o,this._dependencyVersions=c,n=!0,ie(r)?this._handleAsyncComputation(r):this._finalizeResolution(r)}catch(r){let o=r;if(!n)try{const c=e._nextDeps,h=e._nextVersions,_=e._depCount;c.length=_,h.length=_,this._unsubscribes=Q(c,t,this._unsubscribes,this),this._dependencies=c,this._dependencyVersions=h,n=!0}catch(c){o=c}this._handleComputationError(o)}finally{n?(t!==d&&y.release(t),s!==p&&N.release(s)):(y.release(e._nextDeps),N.release(e._nextVersions)),e.reset(),this._setRecomputing(!1)}}_handleAsyncComputation(e){this._setPending(),this._clearDirty(),this._notifySubscribers(void 0,void 0),this._asyncStartAggregateVersion=this._captureVersionSnapshot(),this._asyncRetryCount=0,this._promiseId=(this._promiseId+1)%this.MAX_PROMISE_ID;const t=this._promiseId;e.then(s=>{if(t!==this._promiseId)return;if(this._captureVersionSnapshot()!==this._asyncStartAggregateVersion){if(this._asyncRetryCount<this.MAX_ASYNC_RETRIES){this._asyncRetryCount++,this._markDirty();return}const o=new C(`Async drift exceeded threshold after ${this.MAX_ASYNC_RETRIES} retries.`);this._handleAsyncRejection(o);return}this._finalizeResolution(s),this._notifySubscribers(s,void 0)}).catch(s=>{t===this._promiseId&&this._handleAsyncRejection(s)})}_captureVersionSnapshot(){let e=0;const t=this._dependencies;for(let s=0,n=t.length;s<n;s++){const r=t[s];if(r){const o=r.version;e=((e<<5)-e|0)+o&x}}return e}_handleAsyncRejection(e){const t=P(e,C,l.COMPUTED_ASYNC_COMPUTATION_FAILED);this.flags&u.REJECTED||(this.version=this.version+1&x),this._error=t,this._setRejected(),this._clearDirty();const s=this._onError;if(s)try{s(t)}catch(n){console.error(l.CALLBACK_ERROR_IN_ERROR_HANDLER,n)}this._notifySubscribers(void 0,void 0)}_finalizeResolution(e){(!(this.flags&u.RESOLVED)||!this._equal(this._value,e))&&(this.version=this.version+1&x),this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1),this._cachedErrors=null,this._errorCacheEpoch=-1}_handleComputationError(e){const t=P(e,C,l.COMPUTED_COMPUTATION_FAILED);this._error=t,this._setRejected(),this._clearDirty(),this._setRecomputing(!1);const s=this._onError;if(s)try{s(t)}catch(n){console.error(l.CALLBACK_ERROR_IN_ERROR_HANDLER,n)}throw t}_handlePending(){if(this._hasDefaultValue)return this._defaultValue;throw new C(l.COMPUTED_ASYNC_PENDING_NO_DEFAULT)}_handleRejected(){const e=this._error;if(e?.recoverable&&this._hasDefaultValue)return this._defaultValue;throw e}execute(){this._markDirty()}_markDirty(){const e=this.flags;e&(u.RECOMPUTING|u.DIRTY)||(this.flags=e|u.DIRTY,this._notifySubscribers(void 0,void 0))}}Object.freeze(re.prototype);function Re(i,e={}){return new re(i,e)}class Oe extends W{constructor(e,t={}){super(),this._cleanup=null,this._dependencies=d,this._dependencyVersions=p,this._unsubscribes=A,this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,this._executeTask=void 0,this._onError=t.onError??null,this._currentEpoch=-1,this._lastFlushEpoch=-1,this._executionsInEpoch=0,this._fn=e,this._sync=t.sync??!1,this._maxExecutions=t.maxExecutionsPerSecond??R.MAX_EXECUTIONS_PER_SECOND,this._maxExecutionsPerFlush=t.maxExecutionsPerFlush??R.MAX_EXECUTIONS_PER_EFFECT,this._trackModifications=t.trackModifications??!1,this._executionCount=0,this._historyPtr=0;const s=Number.isFinite(this._maxExecutions),n=s?Math.min(this._maxExecutions+1,R.MAX_EXECUTIONS_PER_SECOND+1):0;this._historyCapacity=n,this._history=E&&s&&n>0?new Array(n).fill(0):null,this._execId=0,b.attachDebugInfo(this,"effect",this.id)}run(){if(this.flags&S.DISPOSED)throw new T(l.EFFECT_DISPOSED);this.execute(!0)}dispose(){const e=this.flags;if(e&S.DISPOSED)return;this.flags=e|S.DISPOSED,this._safeCleanup();const t=this._unsubscribes;if(t!==A){for(let r=0,o=t.length;r<o;r++){const c=t[r];c&&c()}m.release(t),this._unsubscribes=A}const s=this._dependencies;s!==d&&(y.release(s),this._dependencies=d);const n=this._dependencyVersions;n!==p&&(N.release(n),this._dependencyVersions=p),this._executeTask=void 0}addDependency(e){if(!(this.flags&S.EXECUTING))return;const s=this._currentEpoch;if(e._lastSeenEpoch===s)return;e._lastSeenEpoch=s;const n=this._nextDeps,r=this._nextVersions,o=this._nextUnsubs;if(!n||!r||!o)return;n.push(e),r.push(e.version);const c=e._tempUnsub;c?(o.push(c),e._tempUnsub=void 0):this._subscribeTo(e)}execute(e=!1){if(this.flags&(S.DISPOSED|S.EXECUTING)||!e&&!this._shouldExecute())return;this._checkInfiniteLoop(),this._setExecuting(!0),this._safeCleanup();const s=this._prepareEffectExecutionContext();let n=!1;try{const r=f.run(this,this._fn),o=s.nextDeps.length;s.nextDeps.length=o,s.nextVersions.length=o,this._dependencies=s.nextDeps,this._dependencyVersions=s.nextVersions,this._unsubscribes=s.nextUnsubs,n=!0,this._checkLoopWarnings();const c=++this._execId;ie(r)?r.then(h=>{const _=c!==this._execId,a=this.flags&S.DISPOSED;if(_||a){if(typeof h=="function")try{h()}catch(B){this._handleExecutionError(B,l.EFFECT_CLEANUP_FAILED)}return}typeof h=="function"&&(this._cleanup=h)}).catch(h=>{c===this._execId&&this._handleExecutionError(h)}):this._cleanup=typeof r=="function"?r:null}catch(r){n=!0,this._handleExecutionError(r),this._cleanup=null}finally{this._cleanupEffect(s,n),this._setExecuting(!1)}}_prepareEffectExecutionContext(){const e=this._dependencies,t=this._dependencyVersions,s=this._unsubscribes,n=y.acquire(),r=N.acquire(),o=m.acquire(),c=ee();if(e!==d)for(let h=0,_=e.length;h<_;h++){const a=e[h];a&&(a._tempUnsub=s[h])}return this._nextDeps=n,this._nextVersions=r,this._nextUnsubs=o,this._currentEpoch=c,{prevDeps:e,prevVersions:t,prevUnsubs:s,nextDeps:n,nextVersions:r,nextUnsubs:o}}_cleanupEffect(e,t){this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null;const s=e.prevDeps;if(t){if(s!==d){for(let n=0,r=s.length;n<r;n++){const o=s[n],c=o?o._tempUnsub:void 0;c&&(c(),o&&(o._tempUnsub=void 0))}y.release(s)}e.prevUnsubs!==A&&m.release(e.prevUnsubs),e.prevVersions!==p&&N.release(e.prevVersions)}else{y.release(e.nextDeps),N.release(e.nextVersions);const n=e.nextUnsubs;for(let r=0,o=n.length;r<o;r++)n[r]?.();if(m.release(n),s!==d)for(let r=0,o=s.length;r<o;r++){const c=s[r];c&&(c._tempUnsub=void 0)}}}_subscribeTo(e){try{const t=e.subscribe(()=>{if(this._trackModifications&&this.flags&S.EXECUTING&&(e._modifiedAtEpoch=this._currentEpoch),this._sync){this.execute();return}let n=this._executeTask;n||(n=this._executeTask=()=>this.execute()),U.schedule(n)}),s=this._nextUnsubs;s&&s.push(t)}catch(t){console.error(P(t,T,l.EFFECT_EXECUTION_FAILED));const s=this._nextUnsubs;s&&s.push(()=>{})}}get isDisposed(){return(this.flags&S.DISPOSED)!==0}get executionCount(){return this._executionCount}get isExecuting(){return(this.flags&S.EXECUTING)!==0}_setExecuting(e){const t=S.EXECUTING;this.flags=this.flags&~t|(e?-1:0)&t}_safeCleanup(){const e=this._cleanup;if(e){try{e()}catch(t){this._handleExecutionError(t,l.EFFECT_CLEANUP_FAILED)}this._cleanup=null}}_checkInfiniteLoop(){const e=G;this._lastFlushEpoch!==e&&(this._lastFlushEpoch=e,this._executionsInEpoch=0),++this._executionsInEpoch>this._maxExecutionsPerFlush&&this._throwInfiniteLoopError("per-effect"),pe()>R.MAX_EXECUTIONS_PER_FLUSH&&this._throwInfiniteLoopError("global"),this._executionCount++;const s=this._history;if(s){const n=Date.now(),r=this._historyPtr,o=this._historyCapacity;s[r]=n;const c=(r+1)%o;this._historyPtr=c;const h=s[c]??0;if(h>0&&n-h<oe.ONE_SECOND_MS){const _=new T(`Effect executed ${o} times within 1 second. Infinite loop suspected`);if(this.dispose(),console.error(_),this._onError&&this._onError(_),E)throw _;return}}}_throwInfiniteLoopError(e){const t=new T(`Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${z}`);throw this.dispose(),console.error(t),t}_shouldExecute(){const e=this._dependencies;if(e.length===0)return!0;const t=this._dependencyVersions;for(let s=0,n=e.length;s<n;s++){const r=e[s];if(r){if(r.version!==t[s])return!0;if("value"in r)try{te(()=>r.value)}catch{return!0}}}return!1}_handleExecutionError(e,t=l.EFFECT_EXECUTION_FAILED){const s=P(e,T,t);console.error(s);const n=this._onError;if(n)try{n(s)}catch(r){console.error(P(r,T,l.CALLBACK_ERROR_IN_ERROR_HANDLER))}}_checkLoopWarnings(){if(this._trackModifications&&b.enabled){const e=this._dependencies,t=this._currentEpoch;for(let s=0,n=e.length;s<n;s++){const r=e[s];r&&r._modifiedAtEpoch===t&&b.warn(!0,`Effect is reading a dependency (${b.getDebugName(r)||"unknown"}) that it just modified. Infinite loop may occur`)}}}}function Te(i,e={}){if(typeof i!="function")throw new T(l.EFFECT_MUST_BE_FUNCTION);const t=new Oe(i,e);return t.execute(),t}function Ae(i){if(typeof i!="function")throw new D("Batch callback must be a function");U.startBatch();try{return i()}finally{U.endBatch()}}exports.AsyncState=v;exports.AtomError=D;exports.ComputedError=C;exports.DEBUG_CONFIG=H;exports.DEBUG_RUNTIME=b;exports.EffectError=T;exports.POOL_CONFIG=ce;exports.SCHEDULER_CONFIG=R;exports.SchedulerError=F;exports.atom=Ie;exports.batch=Ae;exports.computed=Re;exports.effect=Te;exports.isAtom=se;exports.isComputed=De;exports.isEffect=Ce;exports.scheduler=U;exports.untracked=te;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const oe={ONE_SECOND_MS:1e3},v={IDLE:"idle",PENDING:"pending",RESOLVED:"resolved",REJECTED:"rejected"},g={DISPOSED:1,HAS_FN_SUBS:2,HAS_OBJ_SUBS:4},S={...g,EXECUTING:8},u={...g,DIRTY:8,IDLE:16,PENDING:32,RESOLVED:64,REJECTED:128,RECOMPUTING:256,HAS_ERROR:512},I={...g,SYNC:8,NOTIFICATION_SCHEDULED:16},ce={MAX_SIZE:1e3,WARMUP_SIZE:100},O={MAX_EXECUTIONS_PER_SECOND:1e3,CLEANUP_THRESHOLD:1e3,MAX_EXECUTIONS_PER_EFFECT:100,MAX_EXECUTIONS_PER_FLUSH:1e4,MAX_FLUSH_ITERATIONS:1e3,MIN_FLUSH_ITERATIONS:10,BATCH_QUEUE_SHRINK_THRESHOLD:1e3},H={MAX_DEPENDENCIES:1e3,WARN_INFINITE_LOOP:!0},x=1073741823,E=typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production",he=Object.freeze([]);class C extends Error{constructor(e,t=null,s=!0){super(e),this.name="AtomError",this.cause=t,this.recoverable=s,this.timestamp=new Date}}class D extends C{constructor(e,t=null){super(e,t,!0),this.name="ComputedError"}}class R extends C{constructor(e,t=null){super(e,t,!1),this.name="EffectError"}}class F extends C{constructor(e,t=null){super(e,t,!1),this.name="SchedulerError"}}const l={COMPUTED_MUST_BE_FUNCTION:"Computed function must be a function",COMPUTED_SUBSCRIBER_MUST_BE_FUNCTION:"Subscriber listener must be a function or Subscriber object",COMPUTED_ASYNC_PENDING_NO_DEFAULT:"Async computation is pending. No default value provided",COMPUTED_COMPUTATION_FAILED:"Computed computation failed",COMPUTED_ASYNC_COMPUTATION_FAILED:"Async computed computation failed",COMPUTED_CIRCULAR_DEPENDENCY:"Circular dependency detected during computation",COMPUTED_DEPENDENCY_SUBSCRIPTION_FAILED:"Failed to subscribe to dependency",COMPUTED_DISPOSED:"Cannot access a disposed computed",ATOM_SUBSCRIBER_MUST_BE_FUNCTION:"Subscription listener must be a function or Subscriber object",ATOM_SUBSCRIBER_EXECUTION_FAILED:"Error occurred while executing atom subscribers",ATOM_INDIVIDUAL_SUBSCRIBER_FAILED:"Error during individual atom subscriber execution",EFFECT_MUST_BE_FUNCTION:"Effect function must be a function",EFFECT_EXECUTION_FAILED:"Effect execution failed",EFFECT_CLEANUP_FAILED:"Effect cleanup function execution failed",EFFECT_DISPOSED:"Cannot run a disposed effect",LARGE_DEPENDENCY_GRAPH:i=>`Large dependency graph detected: ${i} dependencies`,UNSUBSCRIBE_NON_EXISTENT:"Attempted to unsubscribe a non-existent listener",CALLBACK_ERROR_IN_ERROR_HANDLER:"Error occurred during onError callback execution"},w=Symbol("debugName"),ue=Symbol("id"),k=Symbol("type"),Y=Symbol("noDefaultValue");function _e(i){return"dependencies"in i&&Array.isArray(i.dependencies)}let q=0;function K(i,e,t){if(i._visitedEpoch!==t){if(i._visitedEpoch=t,i===e)throw new D("Indirect circular dependency detected");if(_e(i)){const s=i.dependencies;for(let n=0;n<s.length;n++){const r=s[n];r&&K(r,e,t)}}}}const b={enabled:typeof process<"u"&&process.env?.NODE_ENV==="development",maxDependencies:H.MAX_DEPENDENCIES,warnInfiniteLoop:H.WARN_INFINITE_LOOP,warn(i,e){this.enabled&&i&&console.warn(`[Atom Effect] ${e}`)},checkCircular(i,e){if(i===e)throw new D("Direct circular dependency detected");this.enabled&&(q++,K(i,e,q))},attachDebugInfo(i,e,t){if(!this.enabled)return;const s=i;s[w]=`${e}_${t}`,s[ue]=t,s[k]=e},getDebugName(i){if(i!=null&&w in i)return i[w]},getDebugType(i){if(i!=null&&k in i)return i[k]}};let le=1;const ae=()=>le++;class W{constructor(){this.flags=0,this.version=0,this._lastSeenEpoch=-1,this._modifiedAtEpoch=-1,this._visitedEpoch=-1,this.id=ae()&x,this._tempUnsub=void 0}getShift(e){return this.version-e&x}}class Z extends W{subscribe(e){if(typeof e=="function")return this._addSubscriber(this._fnSubs,e,g.HAS_FN_SUBS);if(e!==null&&typeof e=="object"&&"execute"in e)return this._addSubscriber(this._objSubs,e,g.HAS_OBJ_SUBS);throw new C(l.ATOM_SUBSCRIBER_MUST_BE_FUNCTION)}subscriberCount(){return this._fnSubs.length+this._objSubs.length}_addSubscriber(e,t,s){if(e.indexOf(t)!==-1)return E&&console.warn("Attempted to subscribe the same listener twice. Ignoring duplicate subscription."),()=>{};e.push(t),this.flags|=s;let r=!1;return()=>{if(r)return;r=!0;const o=e.indexOf(t);if(o!==-1){const c=e.pop();o<e.length&&(e[o]=c),this.flags&=~(e.length===0?s:0)}}}_notifySubscribers(e,t){const s=this.flags,n=g.HAS_FN_SUBS|g.HAS_OBJ_SUBS;if(s&n){if(s&g.HAS_FN_SUBS){const r=this._fnSubs;for(let o=0,c=r.length;o<c;o++){const h=r[o];if(h)try{h(e,t)}catch(_){console.error(new C(l.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,_))}}}if(s&g.HAS_OBJ_SUBS){const r=this._objSubs;for(let o=0,c=r.length;o<c;o++){const h=r[o];if(h)try{h.execute()}catch(_){console.error(new C(l.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,_))}}}}}}class fe{constructor(){this.acquired=0,this.released=0,this.rejected=new Ee}}class Ee{constructor(){this.frozen=0,this.tooLarge=0,this.poolFull=0}}class j{constructor(){this.pool=[],this.maxPoolSize=50,this.maxReusableCapacity=256,this.stats=E?new fe:null}acquire(){const e=this.stats;return E&&e&&e.acquired++,this.pool.pop()??[]}release(e,t){if(t&&e===t||Object.isFrozen(e)){const c=this.stats;E&&c&&e!==t&&c.rejected.frozen++;return}const s=e.length,n=this.pool,r=n.length;if(s>this.maxReusableCapacity||r>=this.maxPoolSize){const c=this.stats;E&&c&&(s>this.maxReusableCapacity?c.rejected.tooLarge++:c.rejected.poolFull++);return}e.length=0,n.push(e);const o=this.stats;E&&o&&o.released++}getStats(){const e=this.stats;if(!E||!e)return null;const{acquired:t,released:s,rejected:n}=e,r=n.frozen+n.tooLarge+n.poolFull;return{acquired:t,released:s,rejected:{frozen:n.frozen,tooLarge:n.tooLarge,poolFull:n.poolFull},leaked:t-s-r,poolSize:this.pool.length}}reset(){this.pool.length=0;const e=this.stats;E&&e&&(e.acquired=0,e.released=0,e.rejected.frozen=0,e.rejected.tooLarge=0,e.rejected.poolFull=0)}}const d=Object.freeze([]),A=Object.freeze([]),p=Object.freeze([]),y=new j,U=new j,N=new j;function T(i,e,t,s){if(e!=null){if((typeof e=="object"||typeof e=="function")&&typeof e.addDependency=="function"){e.addDependency(i);return}if(typeof e=="function"){const n=e;t.indexOf(n)===-1&&(t.push(n),i.flags|=g.HAS_FN_SUBS);return}typeof e=="object"&&typeof e.execute=="function"&&s.indexOf(e)===-1&&(s.push(e),i.flags|=g.HAS_OBJ_SUBS)}}function Q(i,e,t,s){const n=i.length,r=e.length,o=e!==d&&r>0;if(o)for(let h=0;h<r;h++){const _=e[h];_&&(_._tempUnsub=t[h])}const c=U.acquire();c.length=n;for(let h=0;h<n;h++){const _=i[h];if(!_)continue;const a=_._tempUnsub;a?(c[h]=a,_._tempUnsub=void 0):(b.checkCircular(_,s),c[h]=_.subscribe(s))}if(o)for(let h=0;h<r;h++){const _=e[h];if(_){const a=_._tempUnsub;a&&(a(),_._tempUnsub=void 0)}}return t!==A&&U.release(t),c}let L=0;function ee(){return L=L+1&x||1,L}function de(){return L}let G=0,z=0,M=!1;function J(){return M?(E&&console.warn("Warning: startFlush() called during flush - ignored to prevent infinite loop detection bypass"),!1):(M=!0,G=G+1&x||1,z=0,!0)}function $(){M=!1}function pe(){return M?++z:0}class Se{constructor(){this._queueBuffer=[[],[]],this._bufferIndex=0,this._size=0,this._epoch=0,this.isProcessing=!1,this._isBatching=!1,this.batchDepth=0,this.batchQueue=[],this.batchQueueSize=0,this.isFlushingSync=!1,this.maxFlushIterations=O.MAX_FLUSH_ITERATIONS}get phase(){return this.isProcessing||this.isFlushingSync?2:this._isBatching?1:0}get queueSize(){return this._size}get isBatching(){return this._isBatching}schedule(e){if(E&&typeof e!="function")throw new F("Scheduler callback must be a function");const t=this._epoch;if(e._nextEpoch!==t){if(e._nextEpoch=t,this._isBatching||this.isFlushingSync){this.batchQueue[this.batchQueueSize++]=e;return}this._queueBuffer[this._bufferIndex][this._size++]=e,this.isProcessing||this.flush()}}flush(){this.isProcessing||this._size===0||(this.isProcessing=!0,queueMicrotask(()=>{try{if(this._size===0)return;const e=J();this._drainQueue(),e&&$()}finally{this.isProcessing=!1,this._size>0&&!this._isBatching&&this.flush()}}))}flushSync(){this.isFlushingSync=!0;const e=J();try{this._mergeBatchQueue(),this._drainQueue()}finally{this.isFlushingSync=!1,e&&$()}}_mergeBatchQueue(){const e=this.batchQueueSize;if(e===0)return;const t=++this._epoch,s=this.batchQueue,n=this._queueBuffer[this._bufferIndex];let r=this._size;for(let o=0;o<e;o++){const c=s[o];c._nextEpoch!==t&&(c._nextEpoch=t,n[r++]=c)}this._size=r,this.batchQueueSize=0,s.length>O.BATCH_QUEUE_SHRINK_THRESHOLD&&(s.length=0)}_drainQueue(){let e=0;const t=this.maxFlushIterations;for(;this._size>0;){if(++e>t){this._handleFlushOverflow();return}this._processQueue(),this._mergeBatchQueue()}}_processQueue(){const e=this._bufferIndex,t=this._queueBuffer[e],s=this._size,n=e^1;this._bufferIndex=n,this._size=0,this._epoch++,this._processJobs(t,s)}_handleFlushOverflow(){console.error(new F(`Maximum flush iterations (${this.maxFlushIterations}) exceeded. Possible infinite loop.`)),this._size=0,this._queueBuffer[this._bufferIndex].length=0,this.batchQueueSize=0}_processJobs(e,t){for(let s=0;s<t;s++)try{e[s]()}catch(n){console.error(new F("Error occurred during scheduler execution",n))}e.length=0}startBatch(){this.batchDepth++,this._isBatching=!0}endBatch(){if(this.batchDepth===0){E&&console.warn("endBatch() called without matching startBatch(). Ignoring.");return}this.batchDepth--,this.batchDepth===0&&(this.flushSync(),this._isBatching=!1)}setMaxFlushIterations(e){if(e<O.MIN_FLUSH_ITERATIONS)throw new F(`Max flush iterations must be at least ${O.MIN_FLUSH_ITERATIONS}`);this.maxFlushIterations=e}}const m=new Se;class ge{constructor(){this.current=null}run(e,t){const s=this.current;this.current=e;try{return t()}finally{this.current=s}}getCurrent(){return this.current}}const f=new ge;function te(i){if(typeof i!="function")throw new C("Untracked callback must be a function");const e=f.current;f.current=null;try{return i()}finally{f.current=e}}class be extends Z{constructor(e,t){super(),this._value=e,this._pendingOldValue=void 0,this._notifyTask=void 0,this._fnSubs=[],this._objSubs=[],t&&(this.flags|=I.SYNC),b.attachDebugInfo(this,"atom",this.id)}get value(){const e=f.current;return e&&T(this,e,this._fnSubs,this._objSubs),this._value}set value(e){const t=this._value;if(Object.is(t,e))return;this._value=e,this.version=this.version+1&x;const s=this.flags,n=I.HAS_FN_SUBS|I.HAS_OBJ_SUBS;s&n&&this._scheduleNotification(t)}_scheduleNotification(e){let t=this.flags;if(t&I.NOTIFICATION_SCHEDULED||(this._pendingOldValue=e,this.flags=t|=I.NOTIFICATION_SCHEDULED),t&I.SYNC&&!m.isBatching){this._flushNotifications();return}let s=this._notifyTask;s||(s=this._notifyTask=()=>this._flushNotifications()),m.schedule(s)}_flushNotifications(){const e=this.flags;if(!(e&I.NOTIFICATION_SCHEDULED)||e&I.DISPOSED)return;const t=this._pendingOldValue,s=this._value;this._pendingOldValue=void 0,this.flags&=-17,this._notifySubscribers(s,t)}peek(){return this._value}dispose(){this.flags&I.DISPOSED||(this._fnSubs=[],this._objSubs=[],this.flags|=I.DISPOSED,this._value=void 0,this._pendingOldValue=void 0,this._notifyTask=void 0)}}function Ie(i,e={}){return new be(i,e.sync??!1)}function P(i,e,t){if(i instanceof TypeError)return new e(`Type error (${t}): ${i.message}`,i);if(i instanceof ReferenceError)return new e(`Reference error (${t}): ${i.message}`,i);if(i instanceof C)return i;const s=i instanceof Error?i.message:String(i),n=i instanceof Error?i:null;return new e(`Unexpected error (${t}): ${s}`,n)}function se(i){return i!==null&&typeof i=="object"&&"value"in i&&"subscribe"in i&&typeof i.subscribe=="function"}function De(i){if(b.enabled&&i!=null&&typeof i=="object"){const e=b.getDebugType(i);if(e)return e==="computed"}return se(i)&&"invalidate"in i&&typeof i.invalidate=="function"}function Ce(i){return i!==null&&typeof i=="object"&&"dispose"in i&&"run"in i&&typeof i.dispose=="function"&&typeof i.run=="function"}function ie(i){return i!=null&&typeof i.then=="function"}const ne=u.RESOLVED|u.PENDING|u.REJECTED,B=Array(ne+1).fill(v.IDLE);B[u.RESOLVED]=v.RESOLVED;B[u.PENDING]=v.PENDING;B[u.REJECTED]=v.REJECTED;class Ne{constructor(e){this._owner=e,this._epoch=-1,this._nextDeps=d,this._nextVersions=p,this._depCount=0}execute(){this._owner._markDirty()}addDependency(e){if(e._lastSeenEpoch===this._epoch)return;e._lastSeenEpoch=this._epoch;const t=this._depCount,s=this._nextDeps,n=this._nextVersions;t<s.length?(s[t]=e,n[t]=e.version):(s.push(e),n.push(e.version)),this._depCount=t+1}reset(){this._epoch=-1,this._nextDeps=d,this._nextVersions=p,this._depCount=0}}class re extends Z{constructor(e,t={}){if(typeof e!="function")throw new D(l.COMPUTED_MUST_BE_FUNCTION);if(super(),this.MAX_ASYNC_RETRIES=3,this._value=void 0,this.flags=u.DIRTY|u.IDLE,this._error=null,this._promiseId=0,this._equal=t.equal??Object.is,this._fn=e,this._defaultValue="defaultValue"in t?t.defaultValue:Y,this._hasDefaultValue=this._defaultValue!==Y,this._onError=t.onError??null,this.MAX_PROMISE_ID=Number.MAX_SAFE_INTEGER-1,this._fnSubs=[],this._objSubs=[],this._dependencies=d,this._dependencyVersions=p,this._unsubscribes=A,this._cachedErrors=null,this._errorCacheEpoch=-1,this._asyncStartAggregateVersion=0,this._asyncRetryCount=0,this._trackable=new Ne(this),b.attachDebugInfo(this,"computed",this.id),b.enabled){const s=this;s.subscriberCount=this.subscriberCount.bind(this),s.isDirty=()=>(this.flags&u.DIRTY)!==0,s.dependencies=this._dependencies,s.stateFlags=""}if(t.lazy===!1)try{this._recompute()}catch{}}get value(){const e=f.current;e&&T(this,e,this._fnSubs,this._objSubs);const t=this.flags;if(t&u.DISPOSED)throw new D(l.COMPUTED_DISPOSED);if(t&u.RECOMPUTING){if(this._hasDefaultValue)return this._defaultValue;throw new D(l.COMPUTED_CIRCULAR_DEPENDENCY)}t&(u.DIRTY|u.IDLE)&&this._recompute();const s=this.flags;return s&u.PENDING?this._handlePending():s&u.REJECTED?this._handleRejected():this._value}peek(){return this._value}get state(){const e=f.current;return e&&T(this,e,this._fnSubs,this._objSubs),B[this.flags&ne]}get hasError(){const e=f.current;if(e&&T(this,e,this._fnSubs,this._objSubs),this.flags&(u.REJECTED|u.HAS_ERROR))return!0;const s=this._dependencies;for(let n=0,r=s.length;n<r;n++){const o=s[n];if(o&&o.flags&u.HAS_ERROR)return!0}return!1}get isValid(){return!this.hasError}get errors(){const e=f.current;if(e&&T(this,e,this._fnSubs,this._objSubs),!this.hasError)return he;const t=de();if(this._errorCacheEpoch===t&&this._cachedErrors!==null)return this._cachedErrors;const s=new Set;this._error&&s.add(this._error);const n=this._dependencies;for(let o=0,c=n.length;o<c;o++){const h=n[o];if(h&&"errors"in h){const _=h.errors;for(let a=0,V=_.length;a<V;a++){const X=_[a];X&&s.add(X)}}}const r=Object.freeze([...s]);return this._cachedErrors=r,this._errorCacheEpoch=t,r}get lastError(){const e=f.current;return e&&T(this,e,this._fnSubs,this._objSubs),this._error}get isPending(){const e=f.current;return e&&T(this,e,this._fnSubs,this._objSubs),(this.flags&u.PENDING)!==0}get isResolved(){const e=f.current;return e&&T(this,e,this._fnSubs,this._objSubs),(this.flags&u.RESOLVED)!==0}invalidate(){this._markDirty();const e=this._dependencyVersions;e!==p&&(N.release(e),this._dependencyVersions=p),this._errorCacheEpoch=-1,this._cachedErrors=null}dispose(){const e=this._unsubscribes;if(e!==A){for(let n=0,r=e.length;n<r;n++){const o=e[n];o&&o()}U.release(e),this._unsubscribes=A}const t=this._dependencies;t!==d&&(y.release(t),this._dependencies=d);const s=this._dependencyVersions;s!==p&&(N.release(s),this._dependencyVersions=p),this._fnSubs=[],this._objSubs=[],this.flags=u.DISPOSED|u.DIRTY|u.IDLE,this._error=null,this._value=void 0,this._promiseId=(this._promiseId+1)%this.MAX_PROMISE_ID,this._cachedErrors=null,this._errorCacheEpoch=-1}_clearDirty(){this.flags&=-9}_setPending(){this.flags=(this.flags|u.PENDING)&-209}_isResolved(){return(this.flags&u.RESOLVED)!==0}_setResolved(){this.flags=(this.flags|u.RESOLVED)&-689}_isRejected(){return(this.flags&u.REJECTED)!==0}_setRejected(){this.flags=this.flags&-113|(u.REJECTED|u.HAS_ERROR)}_setRecomputing(e){const t=u.RECOMPUTING;this.flags=this.flags&~t|(e?-1:0)&t}_recompute(){if(this.flags&u.RECOMPUTING)return;this._setRecomputing(!0);const e=this._trackable,t=this._dependencies,s=this._dependencyVersions;e._epoch=ee(),e._nextDeps=y.acquire(),e._nextVersions=N.acquire(),e._depCount=0;let n=!1;try{const r=f.run(e,this._fn),o=e._nextDeps,c=e._nextVersions,h=e._depCount;o.length=h,c.length=h,this._unsubscribes=Q(o,t,this._unsubscribes,this),this._dependencies=o,this._dependencyVersions=c,n=!0,ie(r)?this._handleAsyncComputation(r):this._finalizeResolution(r)}catch(r){let o=r;if(!n)try{const c=e._nextDeps,h=e._nextVersions,_=e._depCount;c.length=_,h.length=_,this._unsubscribes=Q(c,t,this._unsubscribes,this),this._dependencies=c,this._dependencyVersions=h,n=!0}catch(c){o=c}this._handleComputationError(o)}finally{n?(t!==d&&y.release(t),s!==p&&N.release(s)):(y.release(e._nextDeps),N.release(e._nextVersions)),e.reset(),this._setRecomputing(!1)}}_handleAsyncComputation(e){this._setPending(),this._clearDirty(),this._notifySubscribers(void 0,void 0),this._asyncStartAggregateVersion=this._captureVersionSnapshot(),this._asyncRetryCount=0,this._promiseId=(this._promiseId+1)%this.MAX_PROMISE_ID;const t=this._promiseId;e.then(s=>{if(t!==this._promiseId)return;if(this._captureVersionSnapshot()!==this._asyncStartAggregateVersion){if(this._asyncRetryCount<this.MAX_ASYNC_RETRIES){this._asyncRetryCount++,this._markDirty();return}const o=new D(`Async drift exceeded threshold after ${this.MAX_ASYNC_RETRIES} retries.`);this._handleAsyncRejection(o);return}this._finalizeResolution(s),this._notifySubscribers(s,void 0)}).catch(s=>{t===this._promiseId&&this._handleAsyncRejection(s)})}_captureVersionSnapshot(){let e=0;const t=this._dependencies;for(let s=0,n=t.length;s<n;s++){const r=t[s];if(r){const o=r.version;e=((e<<5)-e|0)+o&x}}return e}_handleAsyncRejection(e){const t=P(e,D,l.COMPUTED_ASYNC_COMPUTATION_FAILED);this.flags&u.REJECTED||(this.version=this.version+1&x),this._error=t,this._setRejected(),this._clearDirty();const s=this._onError;if(s)try{s(t)}catch(n){console.error(l.CALLBACK_ERROR_IN_ERROR_HANDLER,n)}this._notifySubscribers(void 0,void 0)}_finalizeResolution(e){(!(this.flags&u.RESOLVED)||!this._equal(this._value,e))&&(this.version=this.version+1&x),this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1),this._cachedErrors=null,this._errorCacheEpoch=-1}_handleComputationError(e){const t=P(e,D,l.COMPUTED_COMPUTATION_FAILED);this._error=t,this._setRejected(),this._clearDirty(),this._setRecomputing(!1);const s=this._onError;if(s)try{s(t)}catch(n){console.error(l.CALLBACK_ERROR_IN_ERROR_HANDLER,n)}throw t}_handlePending(){if(this._hasDefaultValue)return this._defaultValue;throw new D(l.COMPUTED_ASYNC_PENDING_NO_DEFAULT)}_handleRejected(){const e=this._error;if(e?.recoverable&&this._hasDefaultValue)return this._defaultValue;throw e}execute(){this._markDirty()}_markDirty(){const e=this.flags;e&(u.RECOMPUTING|u.DIRTY)||(this.flags=e|u.DIRTY,this._notifySubscribers(void 0,void 0))}}Object.freeze(re.prototype);function Oe(i,e={}){return new re(i,e)}class Te extends W{constructor(e,t={}){super(),this._cleanup=null,this._dependencies=d,this._dependencyVersions=p,this._unsubscribes=A,this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,this._executeTask=void 0,this._onError=t.onError??null,this._currentEpoch=-1,this._lastFlushEpoch=-1,this._executionsInEpoch=0,this._fn=e,this._sync=t.sync??!1,this._maxExecutions=t.maxExecutionsPerSecond??O.MAX_EXECUTIONS_PER_SECOND,this._maxExecutionsPerFlush=t.maxExecutionsPerFlush??O.MAX_EXECUTIONS_PER_EFFECT,this._trackModifications=t.trackModifications??!1,this._executionCount=0,this._historyPtr=0;const s=Number.isFinite(this._maxExecutions),n=s?Math.min(this._maxExecutions+1,O.MAX_EXECUTIONS_PER_SECOND+1):0;this._historyCapacity=n,this._history=E&&s&&n>0?new Array(n).fill(0):null,this._execId=0,b.attachDebugInfo(this,"effect",this.id)}run(){if(this.flags&S.DISPOSED)throw new R(l.EFFECT_DISPOSED);this.execute(!0)}dispose(){const e=this.flags;if(e&S.DISPOSED)return;this.flags=e|S.DISPOSED,this._safeCleanup();const t=this._unsubscribes;if(t!==A){for(let r=0,o=t.length;r<o;r++){const c=t[r];c&&c()}U.release(t),this._unsubscribes=A}const s=this._dependencies;s!==d&&(y.release(s),this._dependencies=d);const n=this._dependencyVersions;n!==p&&(N.release(n),this._dependencyVersions=p),this._executeTask=void 0}addDependency(e){if(!(this.flags&S.EXECUTING))return;const s=this._currentEpoch;if(e._lastSeenEpoch===s)return;e._lastSeenEpoch=s;const n=this._nextDeps,r=this._nextVersions,o=this._nextUnsubs;if(!n||!r||!o)return;n.push(e),r.push(e.version);const c=e._tempUnsub;c?(o.push(c),e._tempUnsub=void 0):this._subscribeTo(e)}execute(e=!1){if(this.flags&(S.DISPOSED|S.EXECUTING)||!e&&!this._shouldExecute())return;this._checkInfiniteLoop(),this._setExecuting(!0),this._safeCleanup();const s=this._prepareEffectExecutionContext();let n=!1;try{const r=f.run(this,this._fn),o=s.nextDeps.length;s.nextDeps.length=o,s.nextVersions.length=o,this._dependencies=s.nextDeps,this._dependencyVersions=s.nextVersions,this._unsubscribes=s.nextUnsubs,n=!0,this._checkLoopWarnings();const c=++this._execId;ie(r)?r.then(h=>{const _=c!==this._execId,a=this.flags&S.DISPOSED;if(_||a){if(typeof h=="function")try{h()}catch(V){this._handleExecutionError(V,l.EFFECT_CLEANUP_FAILED)}return}typeof h=="function"&&(this._cleanup=h)}).catch(h=>{c===this._execId&&this._handleExecutionError(h)}):this._cleanup=typeof r=="function"?r:null}catch(r){n=!0,this._handleExecutionError(r),this._cleanup=null}finally{this._cleanupEffect(s,n),this._setExecuting(!1)}}_prepareEffectExecutionContext(){const e=this._dependencies,t=this._dependencyVersions,s=this._unsubscribes,n=y.acquire(),r=N.acquire(),o=U.acquire(),c=ee();if(e!==d)for(let h=0,_=e.length;h<_;h++){const a=e[h];a&&(a._tempUnsub=s[h])}return this._nextDeps=n,this._nextVersions=r,this._nextUnsubs=o,this._currentEpoch=c,{prevDeps:e,prevVersions:t,prevUnsubs:s,nextDeps:n,nextVersions:r,nextUnsubs:o}}_cleanupEffect(e,t){this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null;const s=e.prevDeps;if(t){if(s!==d){for(let n=0,r=s.length;n<r;n++){const o=s[n],c=o?o._tempUnsub:void 0;c&&(c(),o&&(o._tempUnsub=void 0))}y.release(s)}e.prevUnsubs!==A&&U.release(e.prevUnsubs),e.prevVersions!==p&&N.release(e.prevVersions)}else{y.release(e.nextDeps),N.release(e.nextVersions);const n=e.nextUnsubs;for(let r=0,o=n.length;r<o;r++)n[r]?.();if(U.release(n),s!==d)for(let r=0,o=s.length;r<o;r++){const c=s[r];c&&(c._tempUnsub=void 0)}}}_subscribeTo(e){try{const t=e.subscribe(()=>{if(this._trackModifications&&this.flags&S.EXECUTING&&(e._modifiedAtEpoch=this._currentEpoch),this._sync){this.execute();return}let n=this._executeTask;n||(n=this._executeTask=()=>this.execute()),m.schedule(n)}),s=this._nextUnsubs;s&&s.push(t)}catch(t){console.error(P(t,R,l.EFFECT_EXECUTION_FAILED));const s=this._nextUnsubs;s&&s.push(()=>{})}}get isDisposed(){return(this.flags&S.DISPOSED)!==0}get executionCount(){return this._executionCount}get isExecuting(){return(this.flags&S.EXECUTING)!==0}_setExecuting(e){const t=S.EXECUTING;this.flags=this.flags&~t|(e?-1:0)&t}_safeCleanup(){const e=this._cleanup;if(e){try{e()}catch(t){this._handleExecutionError(t,l.EFFECT_CLEANUP_FAILED)}this._cleanup=null}}_checkInfiniteLoop(){const e=G;this._lastFlushEpoch!==e&&(this._lastFlushEpoch=e,this._executionsInEpoch=0),++this._executionsInEpoch>this._maxExecutionsPerFlush&&this._throwInfiniteLoopError("per-effect"),pe()>O.MAX_EXECUTIONS_PER_FLUSH&&this._throwInfiniteLoopError("global"),this._executionCount++;const s=this._history;if(s){const n=Date.now(),r=this._historyPtr,o=this._historyCapacity;s[r]=n;const c=(r+1)%o;this._historyPtr=c;const h=s[c]??0;if(h>0&&n-h<oe.ONE_SECOND_MS){const _=new R(`Effect executed ${o} times within 1 second. Infinite loop suspected`);if(this.dispose(),console.error(_),this._onError&&this._onError(_),E)throw _;return}}}_throwInfiniteLoopError(e){const t=new R(`Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${z}`);throw this.dispose(),console.error(t),t}_shouldExecute(){const e=this._dependencies;if(e.length===0)return!0;const t=this._dependencyVersions;for(let s=0,n=e.length;s<n;s++){const r=e[s];if(r){if(r.version!==t[s])return!0;if("value"in r)try{te(()=>r.value)}catch{return!0}}}return!1}_handleExecutionError(e,t=l.EFFECT_EXECUTION_FAILED){const s=P(e,R,t);console.error(s);const n=this._onError;if(n)try{n(s)}catch(r){console.error(P(r,R,l.CALLBACK_ERROR_IN_ERROR_HANDLER))}}_checkLoopWarnings(){if(this._trackModifications&&b.enabled){const e=this._dependencies,t=this._currentEpoch;for(let s=0,n=e.length;s<n;s++){const r=e[s];r&&r._modifiedAtEpoch===t&&b.warn(!0,`Effect is reading a dependency (${b.getDebugName(r)||"unknown"}) that it just modified. Infinite loop may occur`)}}}}function Re(i,e={}){if(typeof i!="function")throw new R(l.EFFECT_MUST_BE_FUNCTION);const t=new Te(i,e);return t.execute(),t}function Ae(i){if(typeof i!="function")throw new C("Batch callback must be a function");m.startBatch();try{return i()}finally{m.endBatch()}}exports.AsyncState=v;exports.AtomError=C;exports.ComputedError=D;exports.DEBUG_CONFIG=H;exports.DEBUG_RUNTIME=b;exports.EffectError=R;exports.POOL_CONFIG=ce;exports.SCHEDULER_CONFIG=O;exports.SchedulerError=F;exports.atom=Ie;exports.batch=Ae;exports.computed=Oe;exports.effect=Re;exports.isAtom=se;exports.isComputed=De;exports.isEffect=Ce;exports.scheduler=m;exports.untracked=te;
2
2
  //# sourceMappingURL=index.cjs.map