@but212/atom-effect 0.9.0 → 0.9.1

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 te={ONE_SECOND_MS:1e3},O={IDLE:"idle",PENDING:"pending",RESOLVED:"resolved",REJECTED:"rejected"},U={DISPOSED:1,EXECUTING:2},c={DIRTY:1,IDLE:2,PENDING:4,RESOLVED:8,REJECTED:16,RECOMPUTING:32,HAS_ERROR:64},se={MAX_SIZE:1e3,WARMUP_SIZE:100},g={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},w={MAX_DEPENDENCIES:1e3,WARN_INFINITE_LOOP:!0},m=1073741823,l=typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production",ie=Object.freeze([]);class p extends Error{constructor(e,t=null,i=!0){super(e),this.name="AtomError",this.cause=t,this.recoverable=i,this.timestamp=new Date}}class y extends p{constructor(e,t=null){super(e,t,!0),this.name="ComputedError"}}class S extends p{constructor(e,t=null){super(e,t,!1),this.name="EffectError"}}class T extends p{constructor(e,t=null){super(e,t,!1),this.name="SchedulerError"}}const h={COMPUTED_MUST_BE_FUNCTION:"Computed function must be a function",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",ATOM_SUBSCRIBER_MUST_BE_FUNCTION:"Subscription listener must be a function or Subscriber object",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",CALLBACK_ERROR_IN_ERROR_HANDLER:"Error occurred during onError callback execution"},L=Symbol("debugName"),re=Symbol("id"),V=Symbol("type"),B=Symbol("noDefaultValue");function ne(s){return"dependencies"in s&&Array.isArray(s.dependencies)}let j=0;function X(s,e,t){if(s._visitedEpoch!==t){if(s._visitedEpoch=t,s===e)throw new y("Indirect circular dependency detected");if(ne(s)){const i=s.dependencies;for(let r=0;r<i.length;r++){const n=i[r];n&&X(n,e,t)}}}}const f={enabled:typeof process<"u"&&process.env?.NODE_ENV==="development",maxDependencies:w.MAX_DEPENDENCIES,warnInfiniteLoop:w.WARN_INFINITE_LOOP,warn(s,e){this.enabled&&s&&console.warn(`[Atom Effect] ${e}`)},checkCircular(s,e){if(s===e)throw new y("Direct circular dependency detected");this.enabled&&(j++,X(s,e,j))},attachDebugInfo(s,e,t){if(!this.enabled)return;const i=s;i[L]=`${e}_${t}`,i[re]=t,i[V]=e},getDebugName(s){if(s!=null&&L in s)return s[L]},getDebugType(s){if(s!=null&&V in s)return s[V]}};let oe=1;const ce=()=>oe++;class Y{constructor(){this.id=ce()&m,this.flags=0}}class H extends Y{constructor(){super(),this.version=0,this._lastSeenEpoch=-1}subscribe(e){if(typeof e=="object"&&e!==null&&"execute"in e)return this._objectSubscribers.add(e);if(typeof e!="function")throw new p(h.ATOM_SUBSCRIBER_MUST_BE_FUNCTION);return this._functionSubscribers.add(e)}subscriberCount(){return this._functionSubscribers.size+this._objectSubscribers.size}_notifySubscribers(e,t){this._functionSubscribers.forEachSafe(i=>i(e,t),i=>console.error(new p(h.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,i))),this._objectSubscribers.forEachSafe(i=>i.execute(),i=>console.error(new p(h.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,i)))}}let x=0;function J(){return x=x+1&m||1,x}function he(){return x}let F=0,k=0,v=!1;function z(){return v?(l&&console.warn("Warning: startFlush() called during flush - ignored to prevent infinite loop detection bypass"),!1):(v=!0,F=F+1&m,k=0,!0)}function G(){v=!1}function ue(){return v?++k:0}class ae{constructor(){this.queueA=[],this.queueB=[],this.queue=this.queueA,this.queueSize=0,this._epoch=0,this.isProcessing=!1,this.isBatching=!1,this.batchDepth=0,this.batchQueue=[],this.batchQueueSize=0,this.isFlushingSync=!1,this.maxFlushIterations=g.MAX_FLUSH_ITERATIONS}get phase(){return this.isProcessing||this.isFlushingSync?2:this.isBatching?1:0}schedule(e){if(typeof e!="function")throw new T("Scheduler callback must be a function");e._nextEpoch!==this._epoch&&(e._nextEpoch=this._epoch,this.isBatching||this.isFlushingSync?this.batchQueue[this.batchQueueSize++]=e:(this.queue[this.queueSize++]=e,this.isProcessing||this.flush()))}flush(){if(this.isProcessing||this.queueSize===0)return;this.isProcessing=!0;const e=this.queue,t=this.queueSize;this.queue=this.queue===this.queueA?this.queueB:this.queueA,this.queueSize=0,this._epoch++,queueMicrotask(()=>{const i=z();this._processJobs(e,t),this.isProcessing=!1,i&&G(),this.queueSize>0&&!this.isBatching&&this.flush()})}flushSync(){this.isFlushingSync=!0;const e=z();try{this._mergeBatchQueue(),this._drainQueue()}finally{this.isFlushingSync=!1,e&&G()}}_mergeBatchQueue(){if(this._epoch++,this.batchQueueSize>0){for(let e=0;e<this.batchQueueSize;e++){const t=this.batchQueue[e];t&&t._nextEpoch!==this._epoch&&(t._nextEpoch=this._epoch,this.queue[this.queueSize++]=t)}this.batchQueueSize=0}}_drainQueue(){let e=0;for(;this.queueSize>0;){if(++e>this.maxFlushIterations){this._handleFlushOverflow();break}this._processCurrentQueue(),this._mergeBatchQueue()}}_processCurrentQueue(){const e=this.queue,t=this.queueSize;this.queue=this.queue===this.queueA?this.queueB:this.queueA,this.queueSize=0,this._epoch++,this._processJobs(e,t)}_handleFlushOverflow(){console.error(new T(`Maximum flush iterations (${this.maxFlushIterations}) exceeded. Possible infinite loop.`)),this.queueSize=0,this.queue.length=0,this.batchQueueSize=0}_processJobs(e,t){for(let i=0;i<t;i++)try{e[i]?.()}catch(r){console.error(new T("Error occurred during scheduler execution",r))}e.length=0}startBatch(){this.batchDepth++,this.isBatching=!0}endBatch(){this.batchDepth=Math.max(0,this.batchDepth-1),this.batchDepth===0&&(this.flushSync(),this.isBatching=!1)}setMaxFlushIterations(e){if(e<g.MIN_FLUSH_ITERATIONS)throw new T(`Max flush iterations must be at least ${g.MIN_FLUSH_ITERATIONS}`);this.maxFlushIterations=e}}const R=new ae;function _e(s){if(typeof s!="function")throw new p("Batch callback must be a function");R.startBatch();try{return s()}finally{R.endBatch()}}const C={current:null,run(s,e){const t=this.current;this.current=s;try{return e()}finally{this.current=t}},getCurrent(){return this.current}};function Q(s){if(typeof s!="function")throw new p("Untracked callback must be a function");const e=C.current;C.current=null;try{return s()}finally{C.current=e}}class P{constructor(){this.subscribers=null}add(e){if(this.subscribers||(this.subscribers=[]),this.subscribers.indexOf(e)!==-1)return()=>{};this.subscribers.push(e);let t=!1;return()=>{t||(t=!0,this.remove(e))}}remove(e){if(!this.subscribers)return!1;const t=this.subscribers.indexOf(e);if(t===-1)return!1;const i=this.subscribers.length-1;return t!==i&&(this.subscribers[t]=this.subscribers[i]),this.subscribers.pop(),!0}has(e){return this.subscribers?this.subscribers.indexOf(e)!==-1:!1}forEach(e){if(this.subscribers)for(let t=0;t<this.subscribers.length;t++)e(this.subscribers[t],t)}forEachSafe(e,t){if(this.subscribers)for(let i=0;i<this.subscribers.length;i++)try{e(this.subscribers[i],i)}catch(r){t?t(r):console.error("[SubscriberManager] Error in subscriber callback:",r)}}get size(){return this.subscribers?.length??0}get hasSubscribers(){return this.subscribers!==null&&this.subscribers.length>0}clear(){this.subscribers=null}toArray(){return this.subscribers?[...this.subscribers]:[]}}class q{constructor(){this.pool=[],this.maxPoolSize=50,this.maxReusableCapacity=256,this.stats=l?{acquired:0,released:0,rejected:{frozen:0,tooLarge:0,poolFull:0}}:null}acquire(){return l&&this.stats&&this.stats.acquired++,this.pool.pop()??[]}release(e,t){if(!(t&&e===t)){if(Object.isFrozen(e)){l&&this.stats&&this.stats.rejected.frozen++;return}if(e.length>this.maxReusableCapacity){l&&this.stats&&this.stats.rejected.tooLarge++;return}if(this.pool.length>=this.maxPoolSize){l&&this.stats&&this.stats.rejected.poolFull++;return}e.length=0,this.pool.push(e),l&&this.stats&&this.stats.released++}}getStats(){if(!l||!this.stats)return null;const{acquired:e,released:t,rejected:i}=this.stats,r=i.frozen+i.tooLarge+i.poolFull;return{acquired:e,released:t,rejected:i,leaked:e-t-r,poolSize:this.pool.length}}reset(){this.pool.length=0,l&&this.stats&&(this.stats.acquired=0,this.stats.released=0,this.stats.rejected={frozen:0,tooLarge:0,poolFull:0})}}const u=Object.freeze([]),d=Object.freeze([]),a=Object.freeze([]),D=new q,I=new q,E=new q;function $(s){return s!==null&&typeof s=="object"&&"value"in s&&"subscribe"in s&&typeof s.subscribe=="function"}function le(s){if(f.enabled&&(s==null||typeof s=="object")){const e=f.getDebugType(s);if(e)return e==="computed"}return $(s)&&"invalidate"in s&&typeof s.invalidate=="function"}function fe(s){return s!==null&&typeof s=="object"&&"dispose"in s&&"run"in s&&typeof s.dispose=="function"&&typeof s.run=="function"}function W(s){return s!=null&&typeof s.then=="function"}function de(s){return typeof s=="object"&&s!==null}function Ee(s){return(typeof s=="object"||typeof s=="function")&&s!==null&&typeof s.addDependency=="function"}function pe(s){return typeof s=="function"&&typeof s.addDependency!="function"}function be(s){return de(s)&&typeof s.execute=="function"}function K(s,e,t,i){if(e){if(Ee(e)){e.addDependency(s);return}if(pe(e)){t.add(e);return}be(e)&&i.add(e)}}function Se(s,e,t,i){if(e!==u&&t!==d)for(let n=0;n<e.length;n++){const o=e[n];o&&(o._tempUnsub=t[n])}const r=I.acquire();r.length=s.length;for(let n=0;n<s.length;n++){const o=s[n];o&&(o._tempUnsub?(r[n]=o._tempUnsub,o._tempUnsub=void 0):(f.checkCircular(o,i),r[n]=o.subscribe(i)))}if(e!==u)for(let n=0;n<e.length;n++){const o=e[n];o?._tempUnsub&&(o._tempUnsub(),o._tempUnsub=void 0)}return t!==d&&I.release(t),r}class ge extends H{constructor(e,t){super(),this._isNotificationScheduled=!1,this._value=e,this._functionSubscribersStore=new P,this._objectSubscribersStore=new P,this._sync=t,this._notifyTask=this._flushNotifications.bind(this),f.attachDebugInfo(this,"atom",this.id)}get _functionSubscribers(){return this._functionSubscribersStore}get _objectSubscribers(){return this._objectSubscribersStore}get value(){const e=C.getCurrent();return e&&this._track(e),this._value}set value(e){if(Object.is(this._value,e))return;const t=this._value;this.version=this.version+1&m,this._value=e,!(!this._functionSubscribersStore.hasSubscribers&&!this._objectSubscribersStore.hasSubscribers)&&this._scheduleNotification(t)}_track(e){K(this,e,this._functionSubscribersStore,this._objectSubscribersStore)}_scheduleNotification(e){this._isNotificationScheduled||(this._pendingOldValue=e,this._isNotificationScheduled=!0),this._sync&&!R.isBatching?this._flushNotifications():R.schedule(this._notifyTask)}_flushNotifications(){if(!this._isNotificationScheduled)return;const e=this._pendingOldValue,t=this._value;this._pendingOldValue=void 0,this._isNotificationScheduled=!1,this._notifySubscribers(t,e)}peek(){return this._value}dispose(){this._functionSubscribersStore.clear(),this._objectSubscribersStore.clear(),this._value=void 0}}function De(s,e={}){return new ge(s,e.sync??!1)}function A(s,e,t){if(s instanceof TypeError)return new e(`Type error (${t}): ${s.message}`,s);if(s instanceof ReferenceError)return new e(`Reference error (${t}): ${s.message}`,s);if(s instanceof p)return s;const i=s instanceof Error?s.message:String(s),r=s instanceof Error?s:null;return new e(`Unexpected error (${t}): ${i}`,r)}const Z=c.RESOLVED|c.PENDING|c.REJECTED,M=Array(Z+1).fill(O.IDLE);M[c.RESOLVED]=O.RESOLVED;M[c.PENDING]=O.PENDING;M[c.REJECTED]=O.REJECTED;class ee extends H{constructor(e,t={}){if(typeof e!="function")throw new y(h.COMPUTED_MUST_BE_FUNCTION);if(super(),this._cachedErrors=null,this._errorCacheEpoch=-1,this._value=void 0,this.flags=c.DIRTY|c.IDLE,this._error=null,this._promiseId=0,this._equal=t.equal??Object.is,this._fn=e,this._defaultValue="defaultValue"in t?t.defaultValue:B,this._hasDefaultValue=this._defaultValue!==B,this._onError=t.onError??null,this.MAX_PROMISE_ID=Number.MAX_SAFE_INTEGER-1,this._functionSubscribersStore=new P,this._objectSubscribersStore=new P,this._dependencies=u,this._dependencyVersions=a,this._unsubscribes=d,this._notifyJob=()=>{this._functionSubscribersStore.forEachSafe(i=>i(),i=>console.error(i)),this._objectSubscribersStore.forEachSafe(i=>i.execute(),i=>console.error(i))},this._trackable=Object.assign(()=>this._markDirty(),{addDependency:i=>{}}),f.attachDebugInfo(this,"computed",this.id),f.enabled){const i=this;i.subscriberCount=()=>this._functionSubscribersStore.size+this._objectSubscribersStore.size,i.isDirty=()=>this._isDirty(),i.dependencies=this._dependencies,i.stateFlags=this._getFlagsAsString()}if(t.lazy===!1)try{this._recompute()}catch{}}get _functionSubscribers(){return this._functionSubscribersStore}get _objectSubscribers(){return this._objectSubscribersStore}get value(){return this._registerTracking(),this._computeValue()}peek(){return this._value}get state(){return this._registerTracking(),this._getAsyncState()}get hasError(){if(this._registerTracking(),this._isRejected())return!0;for(let e=0;e<this._dependencies.length;e++){const t=this._dependencies[e];if(t&&"hasError"in t&&t.hasError)return!0}return!1}get isValid(){return!this.hasError}get errors(){if(this._registerTracking(),!this.hasError)return ie;const e=he();if(this._errorCacheEpoch===e&&this._cachedErrors!==null)return this._cachedErrors;const t=new Set;this._error&&t.add(this._error);for(let i=0;i<this._dependencies.length;i++){const r=this._dependencies[i];if(r&&"errors"in r){const n=r.errors;for(let o=0;o<n.length;o++){const _=n[o];_&&t.add(_)}}}return this._cachedErrors=Object.freeze([...t]),this._errorCacheEpoch=e,this._cachedErrors}get lastError(){return this._registerTracking(),this._error}get isPending(){return this._registerTracking(),this._isPending()}get isResolved(){return this._registerTracking(),this._isResolved()}invalidate(){this._markDirty(),this._dependencyVersions!==a&&(E.release(this._dependencyVersions),this._dependencyVersions=a),this._errorCacheEpoch=-1,this._cachedErrors=null}dispose(){if(this._unsubscribes!==d){for(let e=0;e<this._unsubscribes.length;e++){const t=this._unsubscribes[e];t&&t()}I.release(this._unsubscribes),this._unsubscribes=d}this._dependencies!==u&&(D.release(this._dependencies),this._dependencies=u),this._dependencyVersions!==a&&(E.release(this._dependencyVersions),this._dependencyVersions=a),this._functionSubscribersStore.clear(),this._objectSubscribersStore.clear(),this.flags=c.DIRTY|c.IDLE,this._error=null,this._value=void 0,this._promiseId=(this._promiseId+1)%this.MAX_PROMISE_ID,this._cachedErrors=null,this._errorCacheEpoch=-1}_isDirty(){return(this.flags&c.DIRTY)!==0}_setDirty(){this.flags|=c.DIRTY}_clearDirty(){this.flags&=-2}_isIdle(){return(this.flags&c.IDLE)!==0}_setIdle(){this.flags|=c.IDLE,this.flags&=-29}_isPending(){return(this.flags&c.PENDING)!==0}_setPending(){this.flags|=c.PENDING,this.flags&=-27}_isResolved(){return(this.flags&c.RESOLVED)!==0}_setResolved(){this.flags|=c.RESOLVED,this.flags&=-87}_isRejected(){return(this.flags&c.REJECTED)!==0}_setRejected(){this.flags|=c.REJECTED|c.HAS_ERROR,this.flags&=-15}_isRecomputing(){return(this.flags&c.RECOMPUTING)!==0}_setRecomputing(e){const t=c.RECOMPUTING;this.flags=this.flags&~t|-Number(e)&t}_getAsyncState(){return M[this.flags&Z]}_getFlagsAsString(){const e=[];return this._isDirty()&&e.push("DIRTY"),this._isIdle()&&e.push("IDLE"),this._isPending()&&e.push("PENDING"),this._isResolved()&&e.push("RESOLVED"),this._isRejected()&&e.push("REJECTED"),this._isRecomputing()&&e.push("RECOMPUTING"),e.join(" | ")}_computeValue(){return this._isRecomputing()?this._value:((this._isDirty()||this._isIdle())&&this._recompute(),this._isPending()?this._handlePending():this._isRejected()?this._handleRejected():this._value)}_recompute(){if(this._isRecomputing())return;this._setRecomputing(!0);const e=this._prepareComputationContext();let t=!1;try{const i=C.run(this._trackable,this._fn);this._commitDependencies(e),t=!0,W(i)?this._handleAsyncComputation(i):this._handleSyncResult(i)}catch(i){if(!t)try{this._commitDependencies(e),t=!0}catch(r){this._handleComputationError(r)}this._handleComputationError(i)}finally{this._cleanupContext(e,t),this._setRecomputing(!1)}}_prepareComputationContext(){const e=this._dependencies,t=this._dependencyVersions,i=D.acquire(),r=E.acquire(),n=J(),o={depCount:0},_=b=>{b._lastSeenEpoch!==n&&(b._lastSeenEpoch=n,o.depCount<i.length?(i[o.depCount]=b,r[o.depCount]=b.version):(i.push(b),r.push(b.version)),o.depCount++)},N=this._trackable.addDependency;return this._trackable.addDependency=_,{prevDeps:e,prevVersions:t,nextDeps:i,nextVersions:r,originalAdd:N,state:o}}_commitDependencies(e){const{nextDeps:t,nextVersions:i,state:r,prevDeps:n}=e;t.length=r.depCount,i.length=r.depCount,this._unsubscribes=Se(t,n,this._unsubscribes,this),this._dependencies=t,this._dependencyVersions=i}_cleanupContext(e,t){this._trackable.addDependency=e.originalAdd,t?(e.prevDeps!==u&&D.release(e.prevDeps),e.prevVersions!==a&&E.release(e.prevVersions)):(D.release(e.nextDeps),E.release(e.nextVersions))}_handleSyncResult(e){const t=!this._isResolved()||!this._equal(this._value,e);this.version=this.version+Number(t)&m,this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1),this._cachedErrors=null,this._errorCacheEpoch=-1}_handleAsyncComputation(e){this._setPending(),this._clearDirty(),this._notifyJob(),this._promiseId=this._promiseId>=this.MAX_PROMISE_ID?1:this._promiseId+1;const t=this._promiseId;e.then(i=>{t===this._promiseId&&this._handleAsyncResolution(i)}).catch(i=>{t===this._promiseId&&this._handleAsyncRejection(i)})}_handleAsyncResolution(e){const t=!this._isResolved()||!this._equal(this._value,e);this.version=this.version+Number(t)&m,this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1),this._cachedErrors=null,this._errorCacheEpoch=-1,this._notifyJob()}_handleAsyncRejection(e){const t=A(e,y,h.COMPUTED_ASYNC_COMPUTATION_FAILED),i=!this._isRejected();if(this.version=this.version+Number(i)&m,this._error=t,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(t)}catch(r){console.error(h.CALLBACK_ERROR_IN_ERROR_HANDLER,r)}this._notifyJob()}_handleComputationError(e){const t=A(e,y,h.COMPUTED_COMPUTATION_FAILED);if(this._error=t,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(t)}catch(i){console.error(h.CALLBACK_ERROR_IN_ERROR_HANDLER,i)}throw t}_handlePending(){if(this._hasDefaultValue)return this._defaultValue;throw new y(h.COMPUTED_ASYNC_PENDING_NO_DEFAULT)}_handleRejected(){if(this._error?.recoverable&&this._hasDefaultValue)return this._defaultValue;throw this._error}execute(){this._markDirty()}_markDirty(){this._isRecomputing()||this._isDirty()||(this._setDirty(),this._notifyJob())}_registerTracking(){K(this,C.getCurrent(),this._functionSubscribersStore,this._objectSubscribersStore)}}Object.freeze(ee.prototype);function ye(s,e={}){return new ee(s,e)}class Ie extends Y{constructor(e,t={}){super(),this.run=()=>{if(this.isDisposed)throw new S(h.EFFECT_MUST_BE_FUNCTION);this._dependencyVersions!==a&&(E.release(this._dependencyVersions),this._dependencyVersions=a),this.execute()},this.dispose=()=>{if(!this.isDisposed){if(this._setDisposed(),this._safeCleanup(),this._unsubscribes!==d){for(let r=0;r<this._unsubscribes.length;r++){const n=this._unsubscribes[r];n&&n()}I.release(this._unsubscribes),this._unsubscribes=d}this._dependencies!==u&&(D.release(this._dependencies),this._dependencies=u),this._dependencyVersions!==a&&(E.release(this._dependencyVersions),this._dependencyVersions=a)}},this.addDependency=r=>{if(this.isExecuting&&this._nextDeps&&this._nextUnsubs&&this._nextVersions){const n=this._currentEpoch;if(r._lastSeenEpoch===n)return;r._lastSeenEpoch=n,this._nextDeps.push(r),this._nextVersions.push(r.version),r._tempUnsub?(this._nextUnsubs.push(r._tempUnsub),r._tempUnsub=void 0):this._subscribeTo(r)}},this.execute=()=>{if(this.isDisposed||this.isExecuting||!this._shouldExecute())return;this._checkInfiniteLoop(),this._setExecuting(!0),this._safeCleanup();const r=this._prepareEffectContext();let n=!1;try{const o=C.run(this,this._fn);this._commitEffect(r),n=!0,this._checkLoopWarnings(),W(o)?o.then(_=>{!this.isDisposed&&typeof _=="function"&&(this._cleanup=_)}).catch(_=>{this._handleExecutionError(_)}):this._cleanup=typeof o=="function"?o:null}catch(o){n=!0,this._handleExecutionError(o),this._cleanup=null}finally{this._cleanupEffect(r,n),this._setExecuting(!1)}},this._currentEpoch=-1,this._lastFlushEpoch=-1,this._executionsInEpoch=0,this._fn=e,this._sync=t.sync??!1,this._maxExecutions=t.maxExecutionsPerSecond??g.MAX_EXECUTIONS_PER_SECOND,this._maxExecutionsPerFlush=t.maxExecutionsPerFlush??g.MAX_EXECUTIONS_PER_EFFECT,this._trackModifications=t.trackModifications??!1,this._cleanup=null,this._dependencies=u,this._dependencyVersions=a,this._unsubscribes=d,this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,this._onError=t.onError??null,this._historyPtr=0;const i=Number.isFinite(this._maxExecutions);this._historyCapacity=i?Math.min(this._maxExecutions+1,g.MAX_EXECUTIONS_PER_SECOND+1):0,this._history=l&&i&&this._historyCapacity>0?new Array(this._historyCapacity).fill(0):null,this._executionCount=0,f.attachDebugInfo(this,"effect",this.id)}_prepareEffectContext(){const e=this._dependencies,t=this._dependencyVersions,i=this._unsubscribes,r=D.acquire(),n=E.acquire(),o=I.acquire(),_=J();if(e!==u&&i!==d)for(let N=0;N<e.length;N++){const b=e[N];b&&(b._tempUnsub=i[N])}return this._nextDeps=r,this._nextVersions=n,this._nextUnsubs=o,this._currentEpoch=_,{prevDeps:e,prevVersions:t,prevUnsubs:i,nextDeps:r,nextVersions:n,nextUnsubs:o}}_commitEffect(e){const t=e.nextDeps.length;e.nextDeps.length=t,e.nextVersions.length=t,this._dependencies=e.nextDeps,this._dependencyVersions=e.nextVersions,this._unsubscribes=e.nextUnsubs}_cleanupEffect(e,t){if(this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,t){if(e.prevDeps!==u){for(let i=0;i<e.prevDeps.length;i++){const r=e.prevDeps[i];r?._tempUnsub&&(r._tempUnsub(),r._tempUnsub=void 0)}D.release(e.prevDeps)}e.prevUnsubs!==d&&I.release(e.prevUnsubs),e.prevVersions!==a&&E.release(e.prevVersions)}else{D.release(e.nextDeps),E.release(e.nextVersions);for(let i=0;i<e.nextUnsubs.length;i++)e.nextUnsubs[i]?.();if(I.release(e.nextUnsubs),e.prevDeps!==u)for(let i=0;i<e.prevDeps.length;i++){const r=e.prevDeps[i];r&&(r._tempUnsub=void 0)}}}_subscribeTo(e){try{const t=e.subscribe(()=>{this._trackModifications&&this.isExecuting&&(e._modifiedAtEpoch=this._currentEpoch),this._sync?this.execute():R.schedule(this.execute)});this._nextUnsubs&&this._nextUnsubs.push(t)}catch(t){console.error(A(t,S,h.EFFECT_EXECUTION_FAILED)),this._nextUnsubs&&this._nextUnsubs.push(()=>{})}}get isDisposed(){return(this.flags&U.DISPOSED)!==0}get executionCount(){return this._executionCount}get isExecuting(){return(this.flags&U.EXECUTING)!==0}_setDisposed(){this.flags|=U.DISPOSED}_setExecuting(e){const t=U.EXECUTING;this.flags=this.flags&~t|-Number(e)&t}_safeCleanup(){if(this._cleanup){try{this._cleanup()}catch(e){console.error(A(e,S,h.EFFECT_CLEANUP_FAILED))}this._cleanup=null}}_checkInfiniteLoop(){if(this._lastFlushEpoch!==F&&(this._lastFlushEpoch=F,this._executionsInEpoch=0),this._executionsInEpoch++,this._executionsInEpoch>this._maxExecutionsPerFlush&&this._throwInfiniteLoopError("per-effect"),ue()>g.MAX_EXECUTIONS_PER_FLUSH&&this._throwInfiniteLoopError("global"),this._executionCount++,this._history&&this._maxExecutions>0){const e=Date.now(),t=this._historyPtr,i=this._historyCapacity;this._history[t]=e;const r=(t+1)%i,n=this._history[r]??0;if(this._historyPtr=r,n>0&&e-n<te.ONE_SECOND_MS){const o=new S(`Effect executed ${i} times within 1 second. Infinite loop suspected`);if(this.dispose(),console.error(o),this._onError&&this._onError(o),l)throw o}}}_throwInfiniteLoopError(e){const t=new S(`Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${k}`);throw this.dispose(),console.error(t),t}_shouldExecute(){if(this._dependencies===u||this._dependencyVersions===a)return!0;for(let e=0;e<this._dependencies.length;e++){const t=this._dependencies[e];if(t){if("value"in t)try{Q(()=>t.value)}catch{return!0}if(t.version!==this._dependencyVersions[e])return!0}}return!1}_handleExecutionError(e){const t=A(e,S,h.EFFECT_EXECUTION_FAILED);console.error(t),this._onError&&this._onError(t)}_checkLoopWarnings(){if(this._trackModifications&&f.enabled){const e=this._dependencies;for(let t=0;t<e.length;t++){const i=e[t];i&&i._modifiedAtEpoch===this._currentEpoch&&f.warn(!0,`Effect is reading a dependency (${f.getDebugName(i)||"unknown"}) that it just modified. Infinite loop may occur`)}}}}function me(s,e={}){if(typeof s!="function")throw new S(h.EFFECT_MUST_BE_FUNCTION);const t=new Ie(s,e);return t.execute(),t}exports.AsyncState=O;exports.AtomError=p;exports.ComputedError=y;exports.DEBUG_CONFIG=w;exports.DEBUG_RUNTIME=f;exports.EffectError=S;exports.POOL_CONFIG=se;exports.SCHEDULER_CONFIG=g;exports.SchedulerError=T;exports.atom=De;exports.batch=_e;exports.computed=ye;exports.effect=me;exports.isAtom=$;exports.isComputed=le;exports.isEffect=fe;exports.scheduler=R;exports.untracked=Q;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const te={ONE_SECOND_MS:1e3},O={IDLE:"idle",PENDING:"pending",RESOLVED:"resolved",REJECTED:"rejected"},U={DISPOSED:1,EXECUTING:2},c={DIRTY:1,IDLE:2,PENDING:4,RESOLVED:8,REJECTED:16,RECOMPUTING:32,HAS_ERROR:64},se={MAX_SIZE:1e3,WARMUP_SIZE:100},g={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},w={MAX_DEPENDENCIES:1e3,WARN_INFINITE_LOOP:!0},m=1073741823,l=typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production",ie=Object.freeze([]);class p extends Error{constructor(e,t=null,i=!0){super(e),this.name="AtomError",this.cause=t,this.recoverable=i,this.timestamp=new Date}}class y extends p{constructor(e,t=null){super(e,t,!0),this.name="ComputedError"}}class S extends p{constructor(e,t=null){super(e,t,!1),this.name="EffectError"}}class T extends p{constructor(e,t=null){super(e,t,!1),this.name="SchedulerError"}}const h={COMPUTED_MUST_BE_FUNCTION:"Computed function must be a function",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",ATOM_SUBSCRIBER_MUST_BE_FUNCTION:"Subscription listener must be a function or Subscriber object",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",CALLBACK_ERROR_IN_ERROR_HANDLER:"Error occurred during onError callback execution"},L=Symbol("debugName"),re=Symbol("id"),V=Symbol("type"),j=Symbol("noDefaultValue");function ne(s){return"dependencies"in s&&Array.isArray(s.dependencies)}let q=0;function X(s,e,t){if(s._visitedEpoch!==t){if(s._visitedEpoch=t,s===e)throw new y("Indirect circular dependency detected");if(ne(s)){const i=s.dependencies;for(let r=0;r<i.length;r++){const n=i[r];n&&X(n,e,t)}}}}const f={enabled:typeof process<"u"&&process.env?.NODE_ENV==="development",maxDependencies:w.MAX_DEPENDENCIES,warnInfiniteLoop:w.WARN_INFINITE_LOOP,warn(s,e){this.enabled&&s&&console.warn(`[Atom Effect] ${e}`)},checkCircular(s,e){if(s===e)throw new y("Direct circular dependency detected");this.enabled&&(q++,X(s,e,q))},attachDebugInfo(s,e,t){if(!this.enabled)return;const i=s;i[L]=`${e}_${t}`,i[re]=t,i[V]=e},getDebugName(s){if(s!=null&&L in s)return s[L]},getDebugType(s){if(s!=null&&V in s)return s[V]}};let oe=1;const ce=()=>oe++;class Y{constructor(){this.id=ce()&m,this.flags=0}}class Q extends Y{constructor(){super(),this.version=0,this._lastSeenEpoch=-1}subscribe(e){if(typeof e=="object"&&e!==null&&"execute"in e)return this._objectSubscribers.add(e);if(typeof e!="function")throw new p(h.ATOM_SUBSCRIBER_MUST_BE_FUNCTION);return this._functionSubscribers.add(e)}subscriberCount(){return this._functionSubscribers.size+this._objectSubscribers.size}_notifySubscribers(e,t){this._functionSubscribers.forEachSafe(i=>i(e,t),i=>console.error(new p(h.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,i))),this._objectSubscribers.forEachSafe(i=>i.execute(),i=>console.error(new p(h.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,i)))}}let x=0;function H(){return x=x+1&m||1,x}function he(){return x}let F=0,k=0,v=!1;function z(){return v?(l&&console.warn("Warning: startFlush() called during flush - ignored to prevent infinite loop detection bypass"),!1):(v=!0,F=F+1&m,k=0,!0)}function G(){v=!1}function ue(){return v?++k:0}class ae{constructor(){this.queueA=[],this.queueB=[],this.queue=this.queueA,this.queueSize=0,this._epoch=0,this.isProcessing=!1,this.isBatching=!1,this.batchDepth=0,this.batchQueue=[],this.batchQueueSize=0,this.isFlushingSync=!1,this.maxFlushIterations=g.MAX_FLUSH_ITERATIONS}get phase(){return this.isProcessing||this.isFlushingSync?2:this.isBatching?1:0}schedule(e){if(typeof e!="function")throw new T("Scheduler callback must be a function");e._nextEpoch!==this._epoch&&(e._nextEpoch=this._epoch,this.isBatching||this.isFlushingSync?this.batchQueue[this.batchQueueSize++]=e:(this.queue[this.queueSize++]=e,this.isProcessing||this.flush()))}flush(){this.isProcessing||this.queueSize===0||(this.isProcessing=!0,queueMicrotask(()=>{try{if(this.queueSize===0)return;const e=z();this._drainQueue(),e&&G()}finally{this.isProcessing=!1,this.queueSize>0&&!this.isBatching&&this.flush()}}))}flushSync(){this.isFlushingSync=!0;const e=z();try{this._mergeBatchQueue(),this._drainQueue()}finally{this.isFlushingSync=!1,e&&G()}}_mergeBatchQueue(){if(this._epoch++,this.batchQueueSize>0){for(let e=0;e<this.batchQueueSize;e++){const t=this.batchQueue[e];t&&t._nextEpoch!==this._epoch&&(t._nextEpoch=this._epoch,this.queue[this.queueSize++]=t)}this.batchQueueSize=0}}_drainQueue(){let e=0;for(;this.queueSize>0;){if(++e>this.maxFlushIterations){this._handleFlushOverflow();break}this._processCurrentQueue(),this._mergeBatchQueue()}}_processCurrentQueue(){const e=this.queue,t=this.queueSize;this.queue=this.queue===this.queueA?this.queueB:this.queueA,this.queueSize=0,this._epoch++,this._processJobs(e,t)}_handleFlushOverflow(){console.error(new T(`Maximum flush iterations (${this.maxFlushIterations}) exceeded. Possible infinite loop.`)),this.queueSize=0,this.queue.length=0,this.batchQueueSize=0}_processJobs(e,t){for(let i=0;i<t;i++)try{e[i]?.()}catch(r){console.error(new T("Error occurred during scheduler execution",r))}e.length=0}startBatch(){this.batchDepth++,this.isBatching=!0}endBatch(){this.batchDepth=Math.max(0,this.batchDepth-1),this.batchDepth===0&&(this.flushSync(),this.isBatching=!1)}setMaxFlushIterations(e){if(e<g.MIN_FLUSH_ITERATIONS)throw new T(`Max flush iterations must be at least ${g.MIN_FLUSH_ITERATIONS}`);this.maxFlushIterations=e}}const R=new ae;function _e(s){if(typeof s!="function")throw new p("Batch callback must be a function");R.startBatch();try{return s()}finally{R.endBatch()}}const C={current:null,run(s,e){const t=this.current;this.current=s;try{return e()}finally{this.current=t}},getCurrent(){return this.current}};function $(s){if(typeof s!="function")throw new p("Untracked callback must be a function");const e=C.current;C.current=null;try{return s()}finally{C.current=e}}class P{constructor(){this.subscribers=null}add(e){if(this.subscribers||(this.subscribers=[]),this.subscribers.indexOf(e)!==-1)return()=>{};this.subscribers.push(e);let t=!1;return()=>{t||(t=!0,this.remove(e))}}remove(e){if(!this.subscribers)return!1;const t=this.subscribers.indexOf(e);if(t===-1)return!1;const i=this.subscribers.length-1;return t!==i&&(this.subscribers[t]=this.subscribers[i]),this.subscribers.pop(),!0}has(e){return this.subscribers?this.subscribers.indexOf(e)!==-1:!1}forEach(e){if(this.subscribers)for(let t=0;t<this.subscribers.length;t++)e(this.subscribers[t],t)}forEachSafe(e,t){if(this.subscribers)for(let i=0;i<this.subscribers.length;i++)try{e(this.subscribers[i],i)}catch(r){t?t(r):console.error("[SubscriberManager] Error in subscriber callback:",r)}}get size(){return this.subscribers?.length??0}get hasSubscribers(){return this.subscribers!==null&&this.subscribers.length>0}clear(){this.subscribers=null}toArray(){return this.subscribers?[...this.subscribers]:[]}}class B{constructor(){this.pool=[],this.maxPoolSize=50,this.maxReusableCapacity=256,this.stats=l?{acquired:0,released:0,rejected:{frozen:0,tooLarge:0,poolFull:0}}:null}acquire(){return l&&this.stats&&this.stats.acquired++,this.pool.pop()??[]}release(e,t){if(!(t&&e===t)){if(Object.isFrozen(e)){l&&this.stats&&this.stats.rejected.frozen++;return}if(e.length>this.maxReusableCapacity){l&&this.stats&&this.stats.rejected.tooLarge++;return}if(this.pool.length>=this.maxPoolSize){l&&this.stats&&this.stats.rejected.poolFull++;return}e.length=0,this.pool.push(e),l&&this.stats&&this.stats.released++}}getStats(){if(!l||!this.stats)return null;const{acquired:e,released:t,rejected:i}=this.stats,r=i.frozen+i.tooLarge+i.poolFull;return{acquired:e,released:t,rejected:i,leaked:e-t-r,poolSize:this.pool.length}}reset(){this.pool.length=0,l&&this.stats&&(this.stats.acquired=0,this.stats.released=0,this.stats.rejected={frozen:0,tooLarge:0,poolFull:0})}}const u=Object.freeze([]),d=Object.freeze([]),a=Object.freeze([]),D=new B,I=new B,E=new B;function J(s){return s!==null&&typeof s=="object"&&"value"in s&&"subscribe"in s&&typeof s.subscribe=="function"}function le(s){if(f.enabled&&(s==null||typeof s=="object")){const e=f.getDebugType(s);if(e)return e==="computed"}return J(s)&&"invalidate"in s&&typeof s.invalidate=="function"}function fe(s){return s!==null&&typeof s=="object"&&"dispose"in s&&"run"in s&&typeof s.dispose=="function"&&typeof s.run=="function"}function W(s){return s!=null&&typeof s.then=="function"}function de(s){return typeof s=="object"&&s!==null}function Ee(s){return(typeof s=="object"||typeof s=="function")&&s!==null&&typeof s.addDependency=="function"}function pe(s){return typeof s=="function"&&typeof s.addDependency!="function"}function be(s){return de(s)&&typeof s.execute=="function"}function K(s,e,t,i){if(e){if(Ee(e)){e.addDependency(s);return}if(pe(e)){t.add(e);return}be(e)&&i.add(e)}}function Se(s,e,t,i){if(e!==u&&t!==d)for(let n=0;n<e.length;n++){const o=e[n];o&&(o._tempUnsub=t[n])}const r=I.acquire();r.length=s.length;for(let n=0;n<s.length;n++){const o=s[n];o&&(o._tempUnsub?(r[n]=o._tempUnsub,o._tempUnsub=void 0):(f.checkCircular(o,i),r[n]=o.subscribe(i)))}if(e!==u)for(let n=0;n<e.length;n++){const o=e[n];o?._tempUnsub&&(o._tempUnsub(),o._tempUnsub=void 0)}return t!==d&&I.release(t),r}class ge extends Q{constructor(e,t){super(),this._isNotificationScheduled=!1,this._value=e,this._functionSubscribersStore=new P,this._objectSubscribersStore=new P,this._sync=t,this._notifyTask=this._flushNotifications.bind(this),f.attachDebugInfo(this,"atom",this.id)}get _functionSubscribers(){return this._functionSubscribersStore}get _objectSubscribers(){return this._objectSubscribersStore}get value(){const e=C.getCurrent();return e&&this._track(e),this._value}set value(e){if(Object.is(this._value,e))return;const t=this._value;this.version=this.version+1&m,this._value=e,!(!this._functionSubscribersStore.hasSubscribers&&!this._objectSubscribersStore.hasSubscribers)&&this._scheduleNotification(t)}_track(e){K(this,e,this._functionSubscribersStore,this._objectSubscribersStore)}_scheduleNotification(e){this._isNotificationScheduled||(this._pendingOldValue=e,this._isNotificationScheduled=!0),this._sync&&!R.isBatching?this._flushNotifications():R.schedule(this._notifyTask)}_flushNotifications(){if(!this._isNotificationScheduled)return;const e=this._pendingOldValue,t=this._value;this._pendingOldValue=void 0,this._isNotificationScheduled=!1,this._notifySubscribers(t,e)}peek(){return this._value}dispose(){this._functionSubscribersStore.clear(),this._objectSubscribersStore.clear(),this._value=void 0}}function De(s,e={}){return new ge(s,e.sync??!1)}function A(s,e,t){if(s instanceof TypeError)return new e(`Type error (${t}): ${s.message}`,s);if(s instanceof ReferenceError)return new e(`Reference error (${t}): ${s.message}`,s);if(s instanceof p)return s;const i=s instanceof Error?s.message:String(s),r=s instanceof Error?s:null;return new e(`Unexpected error (${t}): ${i}`,r)}const Z=c.RESOLVED|c.PENDING|c.REJECTED,M=Array(Z+1).fill(O.IDLE);M[c.RESOLVED]=O.RESOLVED;M[c.PENDING]=O.PENDING;M[c.REJECTED]=O.REJECTED;class ee extends Q{constructor(e,t={}){if(typeof e!="function")throw new y(h.COMPUTED_MUST_BE_FUNCTION);if(super(),this._cachedErrors=null,this._errorCacheEpoch=-1,this._value=void 0,this.flags=c.DIRTY|c.IDLE,this._error=null,this._promiseId=0,this._equal=t.equal??Object.is,this._fn=e,this._defaultValue="defaultValue"in t?t.defaultValue:j,this._hasDefaultValue=this._defaultValue!==j,this._onError=t.onError??null,this.MAX_PROMISE_ID=Number.MAX_SAFE_INTEGER-1,this._functionSubscribersStore=new P,this._objectSubscribersStore=new P,this._dependencies=u,this._dependencyVersions=a,this._unsubscribes=d,this._notifyJob=()=>{this._functionSubscribersStore.forEachSafe(i=>i(),i=>console.error(i)),this._objectSubscribersStore.forEachSafe(i=>i.execute(),i=>console.error(i))},this._trackable=Object.assign(()=>this._markDirty(),{addDependency:i=>{}}),f.attachDebugInfo(this,"computed",this.id),f.enabled){const i=this;i.subscriberCount=()=>this._functionSubscribersStore.size+this._objectSubscribersStore.size,i.isDirty=()=>this._isDirty(),i.dependencies=this._dependencies,i.stateFlags=this._getFlagsAsString()}if(t.lazy===!1)try{this._recompute()}catch{}}get _functionSubscribers(){return this._functionSubscribersStore}get _objectSubscribers(){return this._objectSubscribersStore}get value(){return this._registerTracking(),this._computeValue()}peek(){return this._value}get state(){return this._registerTracking(),this._getAsyncState()}get hasError(){if(this._registerTracking(),this._isRejected())return!0;for(let e=0;e<this._dependencies.length;e++){const t=this._dependencies[e];if(t&&"hasError"in t&&t.hasError)return!0}return!1}get isValid(){return!this.hasError}get errors(){if(this._registerTracking(),!this.hasError)return ie;const e=he();if(this._errorCacheEpoch===e&&this._cachedErrors!==null)return this._cachedErrors;const t=new Set;this._error&&t.add(this._error);for(let i=0;i<this._dependencies.length;i++){const r=this._dependencies[i];if(r&&"errors"in r){const n=r.errors;for(let o=0;o<n.length;o++){const _=n[o];_&&t.add(_)}}}return this._cachedErrors=Object.freeze([...t]),this._errorCacheEpoch=e,this._cachedErrors}get lastError(){return this._registerTracking(),this._error}get isPending(){return this._registerTracking(),this._isPending()}get isResolved(){return this._registerTracking(),this._isResolved()}invalidate(){this._markDirty(),this._dependencyVersions!==a&&(E.release(this._dependencyVersions),this._dependencyVersions=a),this._errorCacheEpoch=-1,this._cachedErrors=null}dispose(){if(this._unsubscribes!==d){for(let e=0;e<this._unsubscribes.length;e++){const t=this._unsubscribes[e];t&&t()}I.release(this._unsubscribes),this._unsubscribes=d}this._dependencies!==u&&(D.release(this._dependencies),this._dependencies=u),this._dependencyVersions!==a&&(E.release(this._dependencyVersions),this._dependencyVersions=a),this._functionSubscribersStore.clear(),this._objectSubscribersStore.clear(),this.flags=c.DIRTY|c.IDLE,this._error=null,this._value=void 0,this._promiseId=(this._promiseId+1)%this.MAX_PROMISE_ID,this._cachedErrors=null,this._errorCacheEpoch=-1}_isDirty(){return(this.flags&c.DIRTY)!==0}_setDirty(){this.flags|=c.DIRTY}_clearDirty(){this.flags&=-2}_isIdle(){return(this.flags&c.IDLE)!==0}_setIdle(){this.flags|=c.IDLE,this.flags&=-29}_isPending(){return(this.flags&c.PENDING)!==0}_setPending(){this.flags|=c.PENDING,this.flags&=-27}_isResolved(){return(this.flags&c.RESOLVED)!==0}_setResolved(){this.flags|=c.RESOLVED,this.flags&=-87}_isRejected(){return(this.flags&c.REJECTED)!==0}_setRejected(){this.flags|=c.REJECTED|c.HAS_ERROR,this.flags&=-15}_isRecomputing(){return(this.flags&c.RECOMPUTING)!==0}_setRecomputing(e){const t=c.RECOMPUTING;this.flags=this.flags&~t|-Number(e)&t}_getAsyncState(){return M[this.flags&Z]}_getFlagsAsString(){const e=[];return this._isDirty()&&e.push("DIRTY"),this._isIdle()&&e.push("IDLE"),this._isPending()&&e.push("PENDING"),this._isResolved()&&e.push("RESOLVED"),this._isRejected()&&e.push("REJECTED"),this._isRecomputing()&&e.push("RECOMPUTING"),e.join(" | ")}_computeValue(){return this._isRecomputing()?this._value:((this._isDirty()||this._isIdle())&&this._recompute(),this._isPending()?this._handlePending():this._isRejected()?this._handleRejected():this._value)}_recompute(){if(this._isRecomputing())return;this._setRecomputing(!0);const e=this._prepareComputationContext();let t=!1;try{const i=C.run(this._trackable,this._fn);this._commitDependencies(e),t=!0,W(i)?this._handleAsyncComputation(i):this._handleSyncResult(i)}catch(i){if(!t)try{this._commitDependencies(e),t=!0}catch(r){this._handleComputationError(r)}this._handleComputationError(i)}finally{this._cleanupContext(e,t),this._setRecomputing(!1)}}_prepareComputationContext(){const e=this._dependencies,t=this._dependencyVersions,i=D.acquire(),r=E.acquire(),n=H(),o={depCount:0},_=b=>{b._lastSeenEpoch!==n&&(b._lastSeenEpoch=n,o.depCount<i.length?(i[o.depCount]=b,r[o.depCount]=b.version):(i.push(b),r.push(b.version)),o.depCount++)},N=this._trackable.addDependency;return this._trackable.addDependency=_,{prevDeps:e,prevVersions:t,nextDeps:i,nextVersions:r,originalAdd:N,state:o}}_commitDependencies(e){const{nextDeps:t,nextVersions:i,state:r,prevDeps:n}=e;t.length=r.depCount,i.length=r.depCount,this._unsubscribes=Se(t,n,this._unsubscribes,this),this._dependencies=t,this._dependencyVersions=i}_cleanupContext(e,t){this._trackable.addDependency=e.originalAdd,t?(e.prevDeps!==u&&D.release(e.prevDeps),e.prevVersions!==a&&E.release(e.prevVersions)):(D.release(e.nextDeps),E.release(e.nextVersions))}_handleSyncResult(e){const t=!this._isResolved()||!this._equal(this._value,e);this.version=this.version+Number(t)&m,this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1),this._cachedErrors=null,this._errorCacheEpoch=-1}_handleAsyncComputation(e){this._setPending(),this._clearDirty(),this._notifyJob(),this._promiseId=this._promiseId>=this.MAX_PROMISE_ID?1:this._promiseId+1;const t=this._promiseId;e.then(i=>{t===this._promiseId&&this._handleAsyncResolution(i)}).catch(i=>{t===this._promiseId&&this._handleAsyncRejection(i)})}_handleAsyncResolution(e){const t=!this._isResolved()||!this._equal(this._value,e);this.version=this.version+Number(t)&m,this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1),this._cachedErrors=null,this._errorCacheEpoch=-1,this._notifyJob()}_handleAsyncRejection(e){const t=A(e,y,h.COMPUTED_ASYNC_COMPUTATION_FAILED),i=!this._isRejected();if(this.version=this.version+Number(i)&m,this._error=t,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(t)}catch(r){console.error(h.CALLBACK_ERROR_IN_ERROR_HANDLER,r)}this._notifyJob()}_handleComputationError(e){const t=A(e,y,h.COMPUTED_COMPUTATION_FAILED);if(this._error=t,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(t)}catch(i){console.error(h.CALLBACK_ERROR_IN_ERROR_HANDLER,i)}throw t}_handlePending(){if(this._hasDefaultValue)return this._defaultValue;throw new y(h.COMPUTED_ASYNC_PENDING_NO_DEFAULT)}_handleRejected(){if(this._error?.recoverable&&this._hasDefaultValue)return this._defaultValue;throw this._error}execute(){this._markDirty()}_markDirty(){this._isRecomputing()||this._isDirty()||(this._setDirty(),this._notifyJob())}_registerTracking(){K(this,C.getCurrent(),this._functionSubscribersStore,this._objectSubscribersStore)}}Object.freeze(ee.prototype);function ye(s,e={}){return new ee(s,e)}class Ie extends Y{constructor(e,t={}){super(),this.run=()=>{if(this.isDisposed)throw new S(h.EFFECT_MUST_BE_FUNCTION);this._dependencyVersions!==a&&(E.release(this._dependencyVersions),this._dependencyVersions=a),this.execute()},this.dispose=()=>{if(!this.isDisposed){if(this._setDisposed(),this._safeCleanup(),this._unsubscribes!==d){for(let r=0;r<this._unsubscribes.length;r++){const n=this._unsubscribes[r];n&&n()}I.release(this._unsubscribes),this._unsubscribes=d}this._dependencies!==u&&(D.release(this._dependencies),this._dependencies=u),this._dependencyVersions!==a&&(E.release(this._dependencyVersions),this._dependencyVersions=a)}},this.addDependency=r=>{if(this.isExecuting&&this._nextDeps&&this._nextUnsubs&&this._nextVersions){const n=this._currentEpoch;if(r._lastSeenEpoch===n)return;r._lastSeenEpoch=n,this._nextDeps.push(r),this._nextVersions.push(r.version),r._tempUnsub?(this._nextUnsubs.push(r._tempUnsub),r._tempUnsub=void 0):this._subscribeTo(r)}},this.execute=()=>{if(this.isDisposed||this.isExecuting||!this._shouldExecute())return;this._checkInfiniteLoop(),this._setExecuting(!0),this._safeCleanup();const r=this._prepareEffectContext();let n=!1;try{const o=C.run(this,this._fn);this._commitEffect(r),n=!0,this._checkLoopWarnings(),W(o)?o.then(_=>{!this.isDisposed&&typeof _=="function"&&(this._cleanup=_)}).catch(_=>{this._handleExecutionError(_)}):this._cleanup=typeof o=="function"?o:null}catch(o){n=!0,this._handleExecutionError(o),this._cleanup=null}finally{this._cleanupEffect(r,n),this._setExecuting(!1)}},this._currentEpoch=-1,this._lastFlushEpoch=-1,this._executionsInEpoch=0,this._fn=e,this._sync=t.sync??!1,this._maxExecutions=t.maxExecutionsPerSecond??g.MAX_EXECUTIONS_PER_SECOND,this._maxExecutionsPerFlush=t.maxExecutionsPerFlush??g.MAX_EXECUTIONS_PER_EFFECT,this._trackModifications=t.trackModifications??!1,this._cleanup=null,this._dependencies=u,this._dependencyVersions=a,this._unsubscribes=d,this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,this._onError=t.onError??null,this._historyPtr=0;const i=Number.isFinite(this._maxExecutions);this._historyCapacity=i?Math.min(this._maxExecutions+1,g.MAX_EXECUTIONS_PER_SECOND+1):0,this._history=l&&i&&this._historyCapacity>0?new Array(this._historyCapacity).fill(0):null,this._executionCount=0,f.attachDebugInfo(this,"effect",this.id)}_prepareEffectContext(){const e=this._dependencies,t=this._dependencyVersions,i=this._unsubscribes,r=D.acquire(),n=E.acquire(),o=I.acquire(),_=H();if(e!==u&&i!==d)for(let N=0;N<e.length;N++){const b=e[N];b&&(b._tempUnsub=i[N])}return this._nextDeps=r,this._nextVersions=n,this._nextUnsubs=o,this._currentEpoch=_,{prevDeps:e,prevVersions:t,prevUnsubs:i,nextDeps:r,nextVersions:n,nextUnsubs:o}}_commitEffect(e){const t=e.nextDeps.length;e.nextDeps.length=t,e.nextVersions.length=t,this._dependencies=e.nextDeps,this._dependencyVersions=e.nextVersions,this._unsubscribes=e.nextUnsubs}_cleanupEffect(e,t){if(this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,t){if(e.prevDeps!==u){for(let i=0;i<e.prevDeps.length;i++){const r=e.prevDeps[i];r?._tempUnsub&&(r._tempUnsub(),r._tempUnsub=void 0)}D.release(e.prevDeps)}e.prevUnsubs!==d&&I.release(e.prevUnsubs),e.prevVersions!==a&&E.release(e.prevVersions)}else{D.release(e.nextDeps),E.release(e.nextVersions);for(let i=0;i<e.nextUnsubs.length;i++)e.nextUnsubs[i]?.();if(I.release(e.nextUnsubs),e.prevDeps!==u)for(let i=0;i<e.prevDeps.length;i++){const r=e.prevDeps[i];r&&(r._tempUnsub=void 0)}}}_subscribeTo(e){try{const t=e.subscribe(()=>{this._trackModifications&&this.isExecuting&&(e._modifiedAtEpoch=this._currentEpoch),this._sync?this.execute():R.schedule(this.execute)});this._nextUnsubs&&this._nextUnsubs.push(t)}catch(t){console.error(A(t,S,h.EFFECT_EXECUTION_FAILED)),this._nextUnsubs&&this._nextUnsubs.push(()=>{})}}get isDisposed(){return(this.flags&U.DISPOSED)!==0}get executionCount(){return this._executionCount}get isExecuting(){return(this.flags&U.EXECUTING)!==0}_setDisposed(){this.flags|=U.DISPOSED}_setExecuting(e){const t=U.EXECUTING;this.flags=this.flags&~t|-Number(e)&t}_safeCleanup(){if(this._cleanup){try{this._cleanup()}catch(e){console.error(A(e,S,h.EFFECT_CLEANUP_FAILED))}this._cleanup=null}}_checkInfiniteLoop(){if(this._lastFlushEpoch!==F&&(this._lastFlushEpoch=F,this._executionsInEpoch=0),this._executionsInEpoch++,this._executionsInEpoch>this._maxExecutionsPerFlush&&this._throwInfiniteLoopError("per-effect"),ue()>g.MAX_EXECUTIONS_PER_FLUSH&&this._throwInfiniteLoopError("global"),this._executionCount++,this._history&&this._maxExecutions>0){const e=Date.now(),t=this._historyPtr,i=this._historyCapacity;this._history[t]=e;const r=(t+1)%i,n=this._history[r]??0;if(this._historyPtr=r,n>0&&e-n<te.ONE_SECOND_MS){const o=new S(`Effect executed ${i} times within 1 second. Infinite loop suspected`);if(this.dispose(),console.error(o),this._onError&&this._onError(o),l)throw o}}}_throwInfiniteLoopError(e){const t=new S(`Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${k}`);throw this.dispose(),console.error(t),t}_shouldExecute(){if(this._dependencies===u||this._dependencyVersions===a)return!0;for(let e=0;e<this._dependencies.length;e++){const t=this._dependencies[e];if(t){if("value"in t)try{$(()=>t.value)}catch{return!0}if(t.version!==this._dependencyVersions[e])return!0}}return!1}_handleExecutionError(e){const t=A(e,S,h.EFFECT_EXECUTION_FAILED);console.error(t),this._onError&&this._onError(t)}_checkLoopWarnings(){if(this._trackModifications&&f.enabled){const e=this._dependencies;for(let t=0;t<e.length;t++){const i=e[t];i&&i._modifiedAtEpoch===this._currentEpoch&&f.warn(!0,`Effect is reading a dependency (${f.getDebugName(i)||"unknown"}) that it just modified. Infinite loop may occur`)}}}}function me(s,e={}){if(typeof s!="function")throw new S(h.EFFECT_MUST_BE_FUNCTION);const t=new Ie(s,e);return t.execute(),t}exports.AsyncState=O;exports.AtomError=p;exports.ComputedError=y;exports.DEBUG_CONFIG=w;exports.DEBUG_RUNTIME=f;exports.EffectError=S;exports.POOL_CONFIG=se;exports.SCHEDULER_CONFIG=g;exports.SchedulerError=T;exports.atom=De;exports.batch=_e;exports.computed=ye;exports.effect=me;exports.isAtom=J;exports.isComputed=le;exports.isEffect=fe;exports.scheduler=R;exports.untracked=$;
2
2
  //# sourceMappingURL=index.cjs.map