@fncts/io 0.0.22 → 0.0.23
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/Cached/definition.d.ts +6 -4
- package/Cached/internal.d.ts +4 -4
- package/Channel/api.d.ts +4 -4
- package/Channel/definition.d.ts +35 -14
- package/Channel/internal/ChannelExecutor.d.ts +1 -0
- package/Channel/internal/MergeDecision.d.ts +10 -6
- package/CountdownLatch.d.ts +1 -1
- package/Differ/definition.d.ts +2 -4
- package/Fiber/FiberRuntime.d.ts +9 -11
- package/Fiber/definition.d.ts +12 -6
- package/FiberRef/definition.d.ts +6 -2
- package/FiberRefs/api.d.ts +1 -1
- package/FiberRefs/definition.d.ts +1 -1
- package/Hub/definition.d.ts +29 -15
- package/IO/api/interrupt.d.ts +19 -19
- package/IO/api/onTermination.d.ts +0 -1
- package/IO/api/sequenceT.d.ts +19 -3
- package/IO/api.d.ts +17 -1
- package/IO/definition.d.ts +40 -26
- package/IO.d.ts +0 -1
- package/Layer/definition.d.ts +17 -13
- package/Logger/definition.d.ts +10 -6
- package/MVar/api.d.ts +101 -0
- package/MVar/definition.d.ts +43 -0
- package/MVar.d.ts +2 -0
- package/Push/api.d.ts +7 -4
- package/Push/definition.d.ts +10 -3
- package/Push/internal.d.ts +1 -1
- package/Queue/api/dimapIO.d.ts +17 -13
- package/Queue/definition.d.ts +26 -18
- package/Ref/Derived.d.ts +3 -1
- package/Ref/Synchronized/constructors.d.ts +6 -1
- package/Ref/Synchronized/definition.d.ts +4 -2
- package/Ref/definition.d.ts +36 -25
- package/Ref.d.ts +0 -1
- package/RefSubject/definition.d.ts +17 -11
- package/Reloadable/definition.d.ts +5 -1
- package/STM/api/atomically.d.ts +9 -0
- package/STM/api.d.ts +12 -6
- package/STM/definition.d.ts +28 -15
- package/STM/internal/Entry.d.ts +2 -2
- package/STM/internal/TryCommit.d.ts +2 -2
- package/STM/internal/Versioned.d.ts +1 -1
- package/STM.d.ts +1 -0
- package/Schedule/definition.d.ts +7 -3
- package/Scope/definition.d.ts +1 -1
- package/ScopedRef/definition.d.ts +1 -1
- package/State/api.d.ts +1 -1
- package/State/definition.d.ts +5 -2
- package/State/internal.d.ts +6 -2
- package/Stream/definition.d.ts +26 -5
- package/Stream/internal/Handoff.d.ts +21 -15
- package/Stream/internal/SinkEndReason.d.ts +2 -2
- package/Subject/Atomic.d.ts +8 -4
- package/SupervisorPatch.d.ts +1 -1
- package/TExit/definition.d.ts +5 -5
- package/TRef/definition.d.ts +16 -14
- package/TRef.d.ts +0 -1
- package/_cjs/Cached/definition.cjs +4 -2
- package/_cjs/Cached/definition.cjs.map +1 -1
- package/_cjs/Cached/internal.cjs +7 -6
- package/_cjs/Cached/internal.cjs.map +1 -1
- package/_cjs/Channel/api/mapOutConcurrentIO.cjs +1 -1
- package/_cjs/Channel/api/mergeAllWith.cjs +1 -1
- package/_cjs/Channel/api.cjs +20 -20
- package/_cjs/Channel/api.cjs.map +1 -1
- package/_cjs/Channel/definition.cjs +13 -3
- package/_cjs/Channel/definition.cjs.map +1 -1
- package/_cjs/Channel/internal/ChannelExecutor.cjs +11 -6
- package/_cjs/Channel/internal/ChannelExecutor.cjs.map +1 -1
- package/_cjs/Channel/internal/MergeDecision.cjs +7 -3
- package/_cjs/Channel/internal/MergeDecision.cjs.map +1 -1
- package/_cjs/CountdownLatch.cjs +4 -2
- package/_cjs/CountdownLatch.cjs.map +1 -1
- package/_cjs/Differ/definition.cjs +3 -1
- package/_cjs/Differ/definition.cjs.map +1 -1
- package/_cjs/Fiber/FiberRuntime.cjs +96 -89
- package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
- package/_cjs/Fiber/definition.cjs +8 -4
- package/_cjs/Fiber/definition.cjs.map +1 -1
- package/_cjs/FiberRef/definition.cjs +8 -4
- package/_cjs/FiberRef/definition.cjs.map +1 -1
- package/_cjs/Future/api.cjs +17 -6
- package/_cjs/Future/api.cjs.map +1 -1
- package/_cjs/Hub/api.cjs +5 -5
- package/_cjs/Hub/api.cjs.map +1 -1
- package/_cjs/Hub/definition.cjs +9 -7
- package/_cjs/Hub/definition.cjs.map +1 -1
- package/_cjs/Hub/internal.cjs +6 -6
- package/_cjs/Hub/internal.cjs.map +1 -1
- package/_cjs/IO/api/asyncIO.cjs +1 -1
- package/_cjs/IO/api/asyncIO.cjs.map +1 -1
- package/_cjs/IO/api/asyncInterrupt.cjs +2 -2
- package/_cjs/IO/api/asyncInterrupt.cjs.map +1 -1
- package/_cjs/IO/api/bracketExit.cjs +1 -1
- package/_cjs/IO/api/bracketExit.cjs.map +1 -1
- package/_cjs/IO/api/foreachConcurrent.cjs +2 -2
- package/_cjs/IO/api/foreachConcurrent.cjs.map +1 -1
- package/_cjs/IO/api/forkIn.cjs +1 -1
- package/_cjs/IO/api/forkIn.cjs.map +1 -1
- package/_cjs/IO/api/forkScoped.cjs +1 -1
- package/_cjs/IO/api/forkScoped.cjs.map +1 -1
- package/_cjs/IO/api/fulfill.cjs +1 -1
- package/_cjs/IO/api/fulfill.cjs.map +1 -1
- package/_cjs/IO/api/interrupt.cjs +52 -43
- package/_cjs/IO/api/interrupt.cjs.map +1 -1
- package/_cjs/IO/api/onTermination.cjs +7 -6
- package/_cjs/IO/api/onTermination.cjs.map +1 -1
- package/_cjs/IO/api/race.cjs +1 -1
- package/_cjs/IO/api/race.cjs.map +1 -1
- package/_cjs/IO/api/sequenceT.cjs +1 -1
- package/_cjs/IO/api/sequenceT.cjs.map +1 -1
- package/_cjs/IO/api/zipConcurrent.cjs +1 -1
- package/_cjs/IO/api/zipConcurrent.cjs.map +1 -1
- package/_cjs/IO/api.cjs +79 -53
- package/_cjs/IO/api.cjs.map +1 -1
- package/_cjs/IO/definition.cjs +26 -21
- package/_cjs/IO/definition.cjs.map +1 -1
- package/_cjs/IO.cjs +0 -11
- package/_cjs/IO.cjs.map +1 -1
- package/_cjs/Layer/MemoMap.cjs +30 -31
- package/_cjs/Layer/MemoMap.cjs.map +1 -1
- package/_cjs/Layer/api.cjs +1 -1
- package/_cjs/Layer/api.cjs.map +1 -1
- package/_cjs/Layer/definition.cjs +12 -10
- package/_cjs/Layer/definition.cjs.map +1 -1
- package/_cjs/Logger/definition.cjs +3 -1
- package/_cjs/Logger/definition.cjs.map +1 -1
- package/_cjs/MVar/api.cjs +170 -0
- package/_cjs/MVar/api.cjs.map +1 -0
- package/_cjs/MVar/definition.cjs +28 -0
- package/_cjs/MVar/definition.cjs.map +1 -0
- package/_cjs/MVar.cjs +28 -0
- package/_cjs/MVar.cjs.map +1 -0
- package/_cjs/Push/api.cjs +39 -36
- package/_cjs/Push/api.cjs.map +1 -1
- package/_cjs/Push/definition.cjs +9 -2
- package/_cjs/Push/definition.cjs.map +1 -1
- package/_cjs/Push/internal.cjs +4 -2
- package/_cjs/Push/internal.cjs.map +1 -1
- package/_cjs/Queue/api/dimapIO.cjs +10 -10
- package/_cjs/Queue/api/dimapIO.cjs.map +1 -1
- package/_cjs/Queue/api/filterInputIO.cjs +4 -4
- package/_cjs/Queue/api/filterInputIO.cjs.map +1 -1
- package/_cjs/Queue/api/filterOutputIO.cjs +7 -7
- package/_cjs/Queue/api/filterOutputIO.cjs.map +1 -1
- package/_cjs/Queue/definition.cjs +3 -1
- package/_cjs/Queue/definition.cjs.map +1 -1
- package/_cjs/Queue/internal.cjs +2 -2
- package/_cjs/Queue/internal.cjs.map +1 -1
- package/_cjs/Queue/strategy.cjs +2 -2
- package/_cjs/Queue/strategy.cjs.map +1 -1
- package/_cjs/Ref/Derived.cjs +8 -4
- package/_cjs/Ref/Derived.cjs.map +1 -1
- package/_cjs/Ref/Synchronized/constructors.cjs +16 -7
- package/_cjs/Ref/Synchronized/constructors.cjs.map +1 -1
- package/_cjs/Ref/Synchronized/definition.cjs +16 -12
- package/_cjs/Ref/Synchronized/definition.cjs.map +1 -1
- package/_cjs/Ref/definition.cjs +3 -2
- package/_cjs/Ref/definition.cjs.map +1 -1
- package/_cjs/Ref.cjs +0 -11
- package/_cjs/Ref.cjs.map +1 -1
- package/_cjs/RefSubject/Synchronized/api.cjs +1 -1
- package/_cjs/RefSubject/definition.cjs +9 -5
- package/_cjs/RefSubject/definition.cjs.map +1 -1
- package/_cjs/Reloadable/definition.cjs +4 -2
- package/_cjs/Reloadable/definition.cjs.map +1 -1
- package/_cjs/STM/api/atomically.cjs +55 -0
- package/_cjs/STM/api/atomically.cjs.map +1 -0
- package/_cjs/STM/api.cjs +65 -91
- package/_cjs/STM/api.cjs.map +1 -1
- package/_cjs/STM/definition.cjs +32 -19
- package/_cjs/STM/definition.cjs.map +1 -1
- package/_cjs/STM/driver.cjs +3 -3
- package/_cjs/STM/driver.cjs.map +1 -1
- package/_cjs/STM/internal/Entry.cjs +6 -3
- package/_cjs/STM/internal/Entry.cjs.map +1 -1
- package/_cjs/STM/internal/TryCommit.cjs +5 -2
- package/_cjs/STM/internal/TryCommit.cjs.map +1 -1
- package/_cjs/STM/internal/Versioned.cjs +3 -1
- package/_cjs/STM/internal/Versioned.cjs.map +1 -1
- package/_cjs/STM.cjs +11 -0
- package/_cjs/STM.cjs.map +1 -1
- package/_cjs/Schedule/definition.cjs +3 -1
- package/_cjs/Schedule/definition.cjs.map +1 -1
- package/_cjs/Scope/api.cjs +1 -2
- package/_cjs/Scope/api.cjs.map +1 -1
- package/_cjs/Scope/definition.cjs +5 -3
- package/_cjs/Scope/definition.cjs.map +1 -1
- package/_cjs/ScopedRef/api.cjs +2 -2
- package/_cjs/ScopedRef/api.cjs.map +1 -1
- package/_cjs/ScopedRef/definition.cjs +3 -1
- package/_cjs/ScopedRef/definition.cjs.map +1 -1
- package/_cjs/State/api.cjs +2 -2
- package/_cjs/State/api.cjs.map +1 -1
- package/_cjs/State/definition.cjs +4 -2
- package/_cjs/State/definition.cjs.map +1 -1
- package/_cjs/State/internal.cjs +7 -3
- package/_cjs/State/internal.cjs.map +1 -1
- package/_cjs/Stream/api.cjs +1 -1
- package/_cjs/Stream/definition.cjs +4 -2
- package/_cjs/Stream/definition.cjs.map +1 -1
- package/_cjs/Stream/internal/Handoff.cjs +37 -37
- package/_cjs/Stream/internal/Handoff.cjs.map +1 -1
- package/_cjs/Stream/internal/SinkEndReason.cjs +6 -3
- package/_cjs/Stream/internal/SinkEndReason.cjs.map +1 -1
- package/_cjs/Subject/Atomic.cjs +6 -4
- package/_cjs/Subject/Atomic.cjs.map +1 -1
- package/_cjs/SubscriptionRef.cjs +1 -1
- package/_cjs/SupervisorPatch.cjs +3 -1
- package/_cjs/SupervisorPatch.cjs.map +1 -1
- package/_cjs/TExit/definition.cjs +25 -24
- package/_cjs/TExit/definition.cjs.map +1 -1
- package/_cjs/TFuture/constructors.cjs +1 -1
- package/_cjs/TReentrantLock/api.cjs +10 -9
- package/_cjs/TReentrantLock/api.cjs.map +1 -1
- package/_cjs/TRef/constructors.cjs +1 -1
- package/_cjs/TRef/definition.cjs +21 -21
- package/_cjs/TRef/definition.cjs.map +1 -1
- package/_cjs/TRef.cjs +0 -11
- package/_cjs/TRef.cjs.map +1 -1
- package/_cjs/TSemaphore/api.cjs +2 -2
- package/_cjs/TSemaphore/api.cjs.map +1 -1
- package/_cjs/TSemaphore/constructors.cjs +1 -1
- package/_cjs/internal/IsFatal.cjs +3 -1
- package/_cjs/internal/IsFatal.cjs.map +1 -1
- package/_mjs/Cached/definition.mjs +4 -2
- package/_mjs/Cached/definition.mjs.map +1 -1
- package/_mjs/Cached/internal.mjs +3 -5
- package/_mjs/Cached/internal.mjs.map +1 -1
- package/_mjs/Channel/api/mapOutConcurrentIO.mjs +1 -1
- package/_mjs/Channel/api/mergeAllWith.mjs +1 -1
- package/_mjs/Channel/api.mjs +15 -14
- package/_mjs/Channel/api.mjs.map +1 -1
- package/_mjs/Channel/definition.mjs +9 -1
- package/_mjs/Channel/definition.mjs.map +1 -1
- package/_mjs/Channel/internal/ChannelExecutor.mjs +11 -6
- package/_mjs/Channel/internal/ChannelExecutor.mjs.map +1 -1
- package/_mjs/Channel/internal/MergeDecision.mjs +4 -1
- package/_mjs/Channel/internal/MergeDecision.mjs.map +1 -1
- package/_mjs/CountdownLatch.mjs +3 -1
- package/_mjs/CountdownLatch.mjs.map +1 -1
- package/_mjs/Differ/definition.mjs +3 -1
- package/_mjs/Differ/definition.mjs.map +1 -1
- package/_mjs/Fiber/FiberRuntime.mjs +97 -90
- package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
- package/_mjs/Fiber/definition.mjs +5 -2
- package/_mjs/Fiber/definition.mjs.map +1 -1
- package/_mjs/FiberRef/definition.mjs +6 -3
- package/_mjs/FiberRef/definition.mjs.map +1 -1
- package/_mjs/Future/api.mjs +17 -6
- package/_mjs/Future/api.mjs.map +1 -1
- package/_mjs/Hub/api.mjs +6 -6
- package/_mjs/Hub/api.mjs.map +1 -1
- package/_mjs/Hub/definition.mjs +5 -4
- package/_mjs/Hub/definition.mjs.map +1 -1
- package/_mjs/Hub/internal.mjs +6 -6
- package/_mjs/Hub/internal.mjs.map +1 -1
- package/_mjs/IO/api/asyncIO.mjs +1 -1
- package/_mjs/IO/api/asyncIO.mjs.map +1 -1
- package/_mjs/IO/api/asyncInterrupt.mjs +2 -2
- package/_mjs/IO/api/asyncInterrupt.mjs.map +1 -1
- package/_mjs/IO/api/bracketExit.mjs +1 -1
- package/_mjs/IO/api/bracketExit.mjs.map +1 -1
- package/_mjs/IO/api/foreachConcurrent.mjs +2 -2
- package/_mjs/IO/api/foreachConcurrent.mjs.map +1 -1
- package/_mjs/IO/api/forkIn.mjs +1 -1
- package/_mjs/IO/api/forkIn.mjs.map +1 -1
- package/_mjs/IO/api/forkScoped.mjs +1 -1
- package/_mjs/IO/api/forkScoped.mjs.map +1 -1
- package/_mjs/IO/api/fulfill.mjs +1 -1
- package/_mjs/IO/api/fulfill.mjs.map +1 -1
- package/_mjs/IO/api/interrupt.mjs +46 -38
- package/_mjs/IO/api/interrupt.mjs.map +1 -1
- package/_mjs/IO/api/onTermination.mjs +7 -6
- package/_mjs/IO/api/onTermination.mjs.map +1 -1
- package/_mjs/IO/api/race.mjs +1 -1
- package/_mjs/IO/api/race.mjs.map +1 -1
- package/_mjs/IO/api/sequenceT.mjs +1 -1
- package/_mjs/IO/api/sequenceT.mjs.map +1 -1
- package/_mjs/IO/api/zipConcurrent.mjs +1 -1
- package/_mjs/IO/api/zipConcurrent.mjs.map +1 -1
- package/_mjs/IO/api.mjs +73 -50
- package/_mjs/IO/api.mjs.map +1 -1
- package/_mjs/IO/definition.mjs +23 -19
- package/_mjs/IO/definition.mjs.map +1 -1
- package/_mjs/IO.mjs +0 -1
- package/_mjs/IO.mjs.map +1 -1
- package/_mjs/Layer/MemoMap.mjs +28 -29
- package/_mjs/Layer/MemoMap.mjs.map +1 -1
- package/_mjs/Layer/api.mjs +2 -2
- package/_mjs/Layer/api.mjs.map +1 -1
- package/_mjs/Layer/definition.mjs +9 -8
- package/_mjs/Layer/definition.mjs.map +1 -1
- package/_mjs/Logger/definition.mjs +1 -0
- package/_mjs/Logger/definition.mjs.map +1 -1
- package/_mjs/MVar/api.mjs +150 -0
- package/_mjs/MVar/api.mjs.map +1 -0
- package/_mjs/MVar/definition.mjs +18 -0
- package/_mjs/MVar/definition.mjs.map +1 -0
- package/_mjs/MVar.mjs +4 -0
- package/_mjs/MVar.mjs.map +1 -0
- package/_mjs/Push/api.mjs +39 -36
- package/_mjs/Push/api.mjs.map +1 -1
- package/_mjs/Push/definition.mjs +5 -0
- package/_mjs/Push/definition.mjs.map +1 -1
- package/_mjs/Push/internal.mjs +4 -2
- package/_mjs/Push/internal.mjs.map +1 -1
- package/_mjs/Queue/api/dimapIO.mjs +11 -11
- package/_mjs/Queue/api/dimapIO.mjs.map +1 -1
- package/_mjs/Queue/api/filterInputIO.mjs +5 -5
- package/_mjs/Queue/api/filterInputIO.mjs.map +1 -1
- package/_mjs/Queue/api/filterOutputIO.mjs +8 -8
- package/_mjs/Queue/api/filterOutputIO.mjs.map +1 -1
- package/_mjs/Queue/definition.mjs +1 -0
- package/_mjs/Queue/definition.mjs.map +1 -1
- package/_mjs/Queue/internal.mjs +2 -2
- package/_mjs/Queue/internal.mjs.map +1 -1
- package/_mjs/Queue/strategy.mjs +2 -2
- package/_mjs/Queue/strategy.mjs.map +1 -1
- package/_mjs/Ref/Derived.mjs +6 -3
- package/_mjs/Ref/Derived.mjs.map +1 -1
- package/_mjs/Ref/Synchronized/constructors.mjs +15 -7
- package/_mjs/Ref/Synchronized/constructors.mjs.map +1 -1
- package/_mjs/Ref/Synchronized/definition.mjs +13 -10
- package/_mjs/Ref/Synchronized/definition.mjs.map +1 -1
- package/_mjs/Ref/definition.mjs +1 -1
- package/_mjs/Ref/definition.mjs.map +1 -1
- package/_mjs/Ref.mjs +0 -1
- package/_mjs/Ref.mjs.map +1 -1
- package/_mjs/RefSubject/Synchronized/api.mjs +1 -1
- package/_mjs/RefSubject/definition.mjs +10 -3
- package/_mjs/RefSubject/definition.mjs.map +1 -1
- package/_mjs/Reloadable/definition.mjs +2 -1
- package/_mjs/Reloadable/definition.mjs.map +1 -1
- package/_mjs/STM/api/atomically.mjs +47 -0
- package/_mjs/STM/api/atomically.mjs.map +1 -0
- package/_mjs/STM/api.mjs +61 -88
- package/_mjs/STM/api.mjs.map +1 -1
- package/_mjs/STM/definition.mjs +27 -17
- package/_mjs/STM/definition.mjs.map +1 -1
- package/_mjs/STM/driver.mjs +3 -3
- package/_mjs/STM/driver.mjs.map +1 -1
- package/_mjs/STM/internal/Entry.mjs +5 -2
- package/_mjs/STM/internal/Entry.mjs.map +1 -1
- package/_mjs/STM/internal/TryCommit.mjs +6 -2
- package/_mjs/STM/internal/TryCommit.mjs.map +1 -1
- package/_mjs/STM/internal/Versioned.mjs +3 -1
- package/_mjs/STM/internal/Versioned.mjs.map +1 -1
- package/_mjs/STM.mjs +1 -0
- package/_mjs/STM.mjs.map +1 -1
- package/_mjs/Schedule/definition.mjs +1 -0
- package/_mjs/Schedule/definition.mjs.map +1 -1
- package/_mjs/Scope/api.mjs +1 -2
- package/_mjs/Scope/api.mjs.map +1 -1
- package/_mjs/Scope/definition.mjs +4 -2
- package/_mjs/Scope/definition.mjs.map +1 -1
- package/_mjs/ScopedRef/api.mjs +2 -2
- package/_mjs/ScopedRef/api.mjs.map +1 -1
- package/_mjs/ScopedRef/definition.mjs +3 -1
- package/_mjs/ScopedRef/definition.mjs.map +1 -1
- package/_mjs/State/api.mjs +1 -1
- package/_mjs/State/api.mjs.map +1 -1
- package/_mjs/State/definition.mjs +4 -1
- package/_mjs/State/definition.mjs.map +1 -1
- package/_mjs/State/internal.mjs +5 -2
- package/_mjs/State/internal.mjs.map +1 -1
- package/_mjs/Stream/api.mjs +1 -1
- package/_mjs/Stream/definition.mjs +2 -1
- package/_mjs/Stream/definition.mjs.map +1 -1
- package/_mjs/Stream/internal/Handoff.mjs +40 -32
- package/_mjs/Stream/internal/Handoff.mjs.map +1 -1
- package/_mjs/Stream/internal/SinkEndReason.mjs +6 -2
- package/_mjs/Stream/internal/SinkEndReason.mjs.map +1 -1
- package/_mjs/Subject/Atomic.mjs +4 -2
- package/_mjs/Subject/Atomic.mjs.map +1 -1
- package/_mjs/SubscriptionRef.mjs +1 -1
- package/_mjs/SupervisorPatch.mjs +3 -1
- package/_mjs/SupervisorPatch.mjs.map +1 -1
- package/_mjs/TExit/definition.mjs +25 -24
- package/_mjs/TExit/definition.mjs.map +1 -1
- package/_mjs/TFuture/constructors.mjs +1 -1
- package/_mjs/TReentrantLock/api.mjs +10 -9
- package/_mjs/TReentrantLock/api.mjs.map +1 -1
- package/_mjs/TRef/constructors.mjs +1 -1
- package/_mjs/TRef/definition.mjs +19 -20
- package/_mjs/TRef/definition.mjs.map +1 -1
- package/_mjs/TRef.mjs +0 -1
- package/_mjs/TRef.mjs.map +1 -1
- package/_mjs/TSemaphore/api.mjs +2 -2
- package/_mjs/TSemaphore/api.mjs.map +1 -1
- package/_mjs/TSemaphore/constructors.mjs +1 -1
- package/_mjs/internal/IsFatal.mjs +3 -1
- package/_mjs/internal/IsFatal.mjs.map +1 -1
- package/_src/Cached/definition.ts +6 -4
- package/_src/Cached/internal.ts +4 -4
- package/_src/Channel/api.ts +14 -15
- package/_src/Channel/definition.ts +37 -14
- package/_src/Channel/internal/ChannelExecutor.ts +14 -3
- package/_src/Channel/internal/MergeDecision.ts +11 -6
- package/_src/CountdownLatch.ts +1 -1
- package/_src/Differ/definition.ts +2 -4
- package/_src/Fiber/FiberRuntime.ts +54 -50
- package/_src/Fiber/definition.ts +15 -8
- package/_src/FiberRef/definition.ts +9 -4
- package/_src/FiberRefs/api.ts +1 -1
- package/_src/FiberRefs/definition.ts +1 -1
- package/_src/Future/api.ts +14 -5
- package/_src/Hub/api.ts +9 -7
- package/_src/Hub/definition.ts +30 -15
- package/_src/IO/api/interrupt.ts +72 -55
- package/_src/IO/api/onTermination.ts +8 -7
- package/_src/IO/api/sequenceT.ts +4 -6
- package/_src/IO/api.ts +23 -1
- package/_src/IO/definition.ts +36 -27
- package/_src/IO.ts +0 -1
- package/_src/Layer/MemoMap.ts +1 -1
- package/_src/Layer/api.ts +2 -2
- package/_src/Layer/definition.ts +18 -13
- package/_src/Logger/definition.ts +9 -4
- package/_src/MVar/api.ts +185 -0
- package/_src/MVar/definition.ts +45 -0
- package/_src/MVar.ts +4 -0
- package/_src/Push/api.ts +7 -4
- package/_src/Push/definition.ts +12 -3
- package/_src/Push/internal.ts +2 -2
- package/_src/Queue/api/dimapIO.ts +24 -13
- package/_src/Queue/api/filterInputIO.ts +9 -7
- package/_src/Queue/api/filterOutputIO.ts +9 -7
- package/_src/Queue/definition.ts +27 -18
- package/_src/Ref/Derived.ts +4 -1
- package/_src/Ref/Synchronized/constructors.ts +9 -0
- package/_src/Ref/Synchronized/definition.ts +5 -2
- package/_src/Ref/definition.ts +36 -25
- package/_src/Ref.ts +0 -1
- package/_src/RefSubject/definition.ts +19 -12
- package/_src/Reloadable/definition.ts +6 -1
- package/_src/STM/api/atomically.ts +43 -0
- package/_src/STM/api.ts +20 -38
- package/_src/STM/definition.ts +33 -20
- package/_src/STM/driver.ts +3 -3
- package/_src/STM/internal/Entry.ts +2 -2
- package/_src/STM/internal/TryCommit.ts +4 -4
- package/_src/STM/internal/Versioned.ts +1 -1
- package/_src/STM.ts +1 -0
- package/_src/Schedule/definition.ts +8 -3
- package/_src/Scope/definition.ts +2 -2
- package/_src/ScopedRef/definition.ts +1 -1
- package/_src/State/api.ts +1 -1
- package/_src/State/definition.ts +6 -3
- package/_src/State/internal.ts +8 -3
- package/_src/Stream/definition.ts +17 -5
- package/_src/Stream/internal/Handoff.ts +31 -24
- package/_src/Stream/internal/SinkEndReason.ts +2 -2
- package/_src/Subject/Atomic.ts +8 -4
- package/_src/SupervisorPatch.ts +1 -1
- package/_src/TExit/definition.ts +11 -12
- package/_src/TRef/definition.ts +18 -14
- package/_src/TRef.ts +0 -1
- package/_src/global.ts +4 -0
- package/_src/internal/IsFatal.ts +1 -1
- package/global.d.ts +4 -0
- package/internal/IsFatal.d.ts +1 -1
- package/package.json +2 -2
- package/IO/api/onExit.d.ts +0 -7
- package/Ref/symbols.d.ts +0 -30
- package/TRef/symbols.d.ts +0 -20
- package/_cjs/IO/api/onExit.cjs +0 -19
- package/_cjs/IO/api/onExit.cjs.map +0 -1
- package/_cjs/Ref/symbols.cjs +0 -37
- package/_cjs/Ref/symbols.cjs.map +0 -1
- package/_cjs/TRef/symbols.cjs +0 -27
- package/_cjs/TRef/symbols.cjs.map +0 -1
- package/_mjs/IO/api/onExit.mjs +0 -11
- package/_mjs/IO/api/onExit.mjs.map +0 -1
- package/_mjs/Ref/symbols.mjs +0 -25
- package/_mjs/Ref/symbols.mjs.map +0 -1
- package/_mjs/TRef/symbols.mjs +0 -17
- package/_mjs/TRef/symbols.mjs.map +0 -1
- package/_src/IO/api/onExit.ts +0 -11
- package/_src/Ref/symbols.ts +0 -29
- package/_src/TRef/symbols.ts +0 -19
package/_src/FiberRefs/api.ts
CHANGED
|
@@ -81,6 +81,6 @@ export function remove(self: FiberRefs, fiberRef: FiberRef<any>): FiberRefs {
|
|
|
81
81
|
* @tsplus getter fncts.io.FiberRefs unFiberRefs
|
|
82
82
|
* @tsplus macro identity
|
|
83
83
|
*/
|
|
84
|
-
export function unFiberRefs(self: FiberRefs): HashMap<FiberRef<
|
|
84
|
+
export function unFiberRefs(self: FiberRefs): HashMap<FiberRef<any>, Cons<readonly [FiberId.Runtime, unknown]>> {
|
|
85
85
|
return FiberRefs.reverseGet(self);
|
|
86
86
|
}
|
|
@@ -8,7 +8,7 @@ export interface FiberRefsN extends HKT {
|
|
|
8
8
|
export interface FiberRefs
|
|
9
9
|
extends Newtype<
|
|
10
10
|
{ readonly FiberRefs: unique symbol },
|
|
11
|
-
HashMap<FiberRef<
|
|
11
|
+
HashMap<FiberRef<any>, Cons<readonly [FiberId.Runtime, unknown]>>
|
|
12
12
|
> {}
|
|
13
13
|
|
|
14
14
|
/**
|
package/_src/Future/api.ts
CHANGED
|
@@ -194,17 +194,26 @@ export function unsafeSucceed<A>(a: A, __tsplusTrace?: string) {
|
|
|
194
194
|
* @tsplus getter fncts.io.Future await
|
|
195
195
|
*/
|
|
196
196
|
export function wait<E, A>(future: Future<E, A>, __tsplusTrace?: string): IO<never, E, A> {
|
|
197
|
-
return IO.
|
|
197
|
+
return IO.defer(() => {
|
|
198
198
|
switch (future.state._tag) {
|
|
199
199
|
case FutureStateTag.Done: {
|
|
200
|
-
return
|
|
200
|
+
return future.state.value;
|
|
201
201
|
}
|
|
202
202
|
case FutureStateTag.Pending: {
|
|
203
|
-
|
|
204
|
-
|
|
203
|
+
return IO.asyncInterrupt<never, E, A>((k) => {
|
|
204
|
+
switch (future.state._tag) {
|
|
205
|
+
case FutureStateTag.Done: {
|
|
206
|
+
return Either.right(future.state.value);
|
|
207
|
+
}
|
|
208
|
+
case FutureStateTag.Pending: {
|
|
209
|
+
future.state = new Pending(future.state.joiners.prepend(k));
|
|
210
|
+
return Either.left(interruptJoiner(future, k));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}, future.blockingOn);
|
|
205
214
|
}
|
|
206
215
|
}
|
|
207
|
-
}
|
|
216
|
+
});
|
|
208
217
|
}
|
|
209
218
|
|
|
210
219
|
function interruptJoiner<E, A>(
|
package/_src/Hub/api.ts
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
unsafeMakeHub,
|
|
12
12
|
} from "@fncts/io/Hub/internal";
|
|
13
13
|
import { Hub as HubInternal } from "@fncts/io/internal/Hub";
|
|
14
|
-
import { EnqueueTypeId, QueueTypeId } from "@fncts/io/Queue";
|
|
14
|
+
import { EnqueueTypeId, QueueTypeId , QueueVariance } from "@fncts/io/Queue";
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Waits for the hub to be shut down.
|
|
@@ -275,12 +275,14 @@ export function mapIO<B, RC, EC, C>(f: (b: B) => IO<RC, EC, C>, __tsplusTrace?:
|
|
|
275
275
|
class ToQueue<RA, RB, EA, EB, A, B> implements PEnqueue<RA, RB, EA, EB, A, B> {
|
|
276
276
|
readonly [QueueTypeId]: QueueTypeId = QueueTypeId;
|
|
277
277
|
readonly [EnqueueTypeId]: EnqueueTypeId = EnqueueTypeId;
|
|
278
|
-
declare
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
278
|
+
declare [QueueVariance]: {
|
|
279
|
+
readonly _RA: (_: never) => RA;
|
|
280
|
+
readonly _RB: (_: never) => RB;
|
|
281
|
+
readonly _EA: (_: never) => EA;
|
|
282
|
+
readonly _EB: (_: never) => EB;
|
|
283
|
+
readonly _A: (_: A) => void;
|
|
284
|
+
readonly _B: (_: never) => B;
|
|
285
|
+
};
|
|
284
286
|
constructor(readonly source: PHubInternal<RA, RB, EA, EB, A, B>) {}
|
|
285
287
|
awaitShutdown = this.source.awaitShutdown;
|
|
286
288
|
capacity = this.source.capacity;
|
package/_src/Hub/definition.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { IO } from "@fncts/io/IO";
|
|
2
2
|
import type { PDequeue, PEnqueue, PEnqueueInternal } from "@fncts/io/Queue";
|
|
3
3
|
|
|
4
|
-
import { EnqueueTypeId, QueueTypeId } from "@fncts/io/Queue";
|
|
4
|
+
import { EnqueueTypeId, QueueTypeId, QueueVariance } from "@fncts/io/Queue/definition";
|
|
5
|
+
|
|
6
|
+
export const HubVariance = Symbol.for("fncts.io.Hub.Variance");
|
|
7
|
+
export type HubVariance = typeof HubVariance;
|
|
5
8
|
|
|
6
9
|
export const HubTypeId = Symbol.for("fncts.io.Hub");
|
|
7
10
|
export type HubTypeId = typeof HubTypeId;
|
|
@@ -17,13 +20,15 @@ export type HubTypeId = typeof HubTypeId;
|
|
|
17
20
|
* @tsplus type fncts.io.Hub
|
|
18
21
|
*/
|
|
19
22
|
export interface PHub<RA, RB, EA, EB, A, B> extends PEnqueue<RA, RB, EA, EB, A, B> {
|
|
20
|
-
readonly
|
|
21
|
-
readonly
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
readonly [HubTypeId]: HubTypeId;
|
|
24
|
+
readonly [HubVariance]: {
|
|
25
|
+
readonly _RA: (_: never) => RA;
|
|
26
|
+
readonly _RB: (_: never) => RB;
|
|
27
|
+
readonly _EA: (_: never) => EA;
|
|
28
|
+
readonly _EB: (_: never) => EB;
|
|
29
|
+
readonly _A: (_: A) => void;
|
|
30
|
+
readonly _B: (_: never) => B;
|
|
31
|
+
};
|
|
27
32
|
}
|
|
28
33
|
|
|
29
34
|
/**
|
|
@@ -46,13 +51,23 @@ export abstract class PHubInternal<RA, RB, EA, EB, A, B>
|
|
|
46
51
|
{
|
|
47
52
|
readonly [QueueTypeId]: QueueTypeId = QueueTypeId;
|
|
48
53
|
readonly [EnqueueTypeId]: EnqueueTypeId = EnqueueTypeId;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
readonly [HubTypeId]: HubTypeId = HubTypeId;
|
|
55
|
+
declare [HubVariance]: {
|
|
56
|
+
readonly _RA: (_: never) => RA;
|
|
57
|
+
readonly _RB: (_: never) => RB;
|
|
58
|
+
readonly _EA: (_: never) => EA;
|
|
59
|
+
readonly _EB: (_: never) => EB;
|
|
60
|
+
readonly _A: (_: A) => void;
|
|
61
|
+
readonly _B: (_: never) => B;
|
|
62
|
+
};
|
|
63
|
+
declare [QueueVariance]: {
|
|
64
|
+
readonly _RA: (_: never) => RA;
|
|
65
|
+
readonly _RB: (_: never) => RB;
|
|
66
|
+
readonly _EA: (_: never) => EA;
|
|
67
|
+
readonly _EB: (_: never) => EB;
|
|
68
|
+
readonly _A: (_: A) => void;
|
|
69
|
+
readonly _B: (_: never) => B;
|
|
70
|
+
};
|
|
56
71
|
|
|
57
72
|
/**
|
|
58
73
|
* Waits for the hub to be shut down.
|
package/_src/IO/api/interrupt.ts
CHANGED
|
@@ -2,6 +2,21 @@ import { Dynamic, Interruptible, Uninterruptible } from "@fncts/io/IO/definition
|
|
|
2
2
|
import { RuntimeFlag } from "@fncts/io/RuntimeFlag";
|
|
3
3
|
import { RuntimeFlags } from "@fncts/io/RuntimeFlags";
|
|
4
4
|
|
|
5
|
+
export interface InterruptibilityRestorer {
|
|
6
|
+
readonly restore: <R, E, A>(io: IO<R, E, A>, __tsplusTrace?: string) => IO<R, E, A>;
|
|
7
|
+
readonly force: <R, E, A>(io: IO<R, E, A>, __tsplusTrace?: string) => IO<R, E, A>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const RestoreInterruptible: InterruptibilityRestorer = {
|
|
11
|
+
restore: (io, __tsplusTrace) => io.interruptible,
|
|
12
|
+
force: (io, __tsplusTrace) => io.interruptible,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const RestoreUninterruptible: InterruptibilityRestorer = {
|
|
16
|
+
restore: (io, __tsplusTrace) => io.uninterruptible,
|
|
17
|
+
force: (io, __tsplusTrace) => io.uninterruptible.disconnect.interruptible,
|
|
18
|
+
};
|
|
19
|
+
|
|
5
20
|
/**
|
|
6
21
|
* Returns an effect that is interrupted as if by the specified fiber.
|
|
7
22
|
*
|
|
@@ -51,7 +66,6 @@ export const interrupt: IO<never, never, never> = IO.fiberId.flatMap(IO.interrup
|
|
|
51
66
|
*/
|
|
52
67
|
export function interruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
|
53
68
|
return new Interruptible(self, __tsplusTrace);
|
|
54
|
-
// return self.setInterruptStatus(InterruptStatus.interruptible);
|
|
55
69
|
}
|
|
56
70
|
|
|
57
71
|
/**
|
|
@@ -67,7 +81,6 @@ export function interruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string
|
|
|
67
81
|
*/
|
|
68
82
|
export function uninterruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
|
69
83
|
return new Uninterruptible(self, __tsplusTrace);
|
|
70
|
-
// return self.setInterruptStatus(InterruptStatus.uninterruptible);
|
|
71
84
|
}
|
|
72
85
|
|
|
73
86
|
/**
|
|
@@ -77,9 +90,9 @@ export function uninterruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: stri
|
|
|
77
90
|
*
|
|
78
91
|
* @tsplus static fncts.io.IOOps uninterruptibleMask
|
|
79
92
|
*/
|
|
80
|
-
export function uninterruptibleMask<R, E, A>(f: (restore:
|
|
93
|
+
export function uninterruptibleMask<R, E, A>(f: (restore: InterruptibilityRestorer) => IO<R, E, A>): IO<R, E, A> {
|
|
81
94
|
return new Dynamic(RuntimeFlags.disable(RuntimeFlag.Interruption), (oldFlags) =>
|
|
82
|
-
f(
|
|
95
|
+
f(oldFlags.interruption ? RestoreInterruptible : RestoreUninterruptible),
|
|
83
96
|
);
|
|
84
97
|
}
|
|
85
98
|
|
|
@@ -109,52 +122,72 @@ export function ensuring<R1>(finalizer: IO<R1, never, any>, __tsplusTrace?: stri
|
|
|
109
122
|
* @tsplus static fncts.io.IOOps interruptibleMask
|
|
110
123
|
*/
|
|
111
124
|
export function interruptibleMask<R, E, A>(
|
|
112
|
-
k: (restore:
|
|
125
|
+
k: (restore: InterruptibilityRestorer) => IO<R, E, A>,
|
|
113
126
|
__tsplusTrace?: string,
|
|
114
127
|
): IO<R, E, A> {
|
|
115
|
-
return IO.checkInterruptible(
|
|
128
|
+
return IO.checkInterruptible(
|
|
129
|
+
(flag) => k(flag.isInterruptible ? RestoreInterruptible : RestoreUninterruptible).interruptible,
|
|
130
|
+
);
|
|
116
131
|
}
|
|
117
132
|
|
|
118
133
|
/**
|
|
119
134
|
* Calls the specified function, and runs the effect it returns, if this
|
|
120
135
|
* effect is interrupted.
|
|
121
136
|
*
|
|
122
|
-
* @tsplus
|
|
137
|
+
* @tsplus pipeable fncts.io.IO onInterrupt
|
|
123
138
|
*/
|
|
124
|
-
export function
|
|
125
|
-
ma: IO<R, E, A
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
)
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
IO.succeedNow,
|
|
134
|
-
),
|
|
135
|
-
);
|
|
139
|
+
export function onInterrupt<R1, E1>(cleanup: Lazy<IO<R1, E1, any>>, __tsplusTrace?: string) {
|
|
140
|
+
return <R, E, A>(ma: IO<R, E, A>): IO<R | R1, E | E1, A> => {
|
|
141
|
+
return ma.onExit((exit) =>
|
|
142
|
+
exit.match(
|
|
143
|
+
(cause) => (cause.isInterruptedOnly ? cleanup() : IO.unit),
|
|
144
|
+
() => IO.unit,
|
|
145
|
+
),
|
|
146
|
+
);
|
|
147
|
+
};
|
|
136
148
|
}
|
|
137
149
|
|
|
138
150
|
/**
|
|
139
151
|
* Calls the specified function, and runs the effect it returns, if this
|
|
140
|
-
* effect is interrupted
|
|
152
|
+
* effect is interrupted.
|
|
141
153
|
*
|
|
142
|
-
* @tsplus
|
|
154
|
+
* @tsplus pipeable fncts.io.IO onInterrupt
|
|
143
155
|
*/
|
|
144
|
-
export function
|
|
145
|
-
|
|
146
|
-
cleanup: Lazy<IO<R2, E2, any>>,
|
|
156
|
+
export function onInterruptWith<R1, E1>(
|
|
157
|
+
cleanup: (interruptors: HashSet<FiberId>) => IO<R1, E1, any>,
|
|
147
158
|
__tsplusTrace?: string,
|
|
148
|
-
)
|
|
149
|
-
return
|
|
150
|
-
|
|
151
|
-
(
|
|
152
|
-
cause.
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
159
|
+
) {
|
|
160
|
+
return <R, E, A>(ma: IO<R, E, A>): IO<R | R1, E | E1, A> => {
|
|
161
|
+
return ma.onExit((exit) =>
|
|
162
|
+
exit.match(
|
|
163
|
+
(cause) => (cause.isInterruptedOnly ? cleanup(cause.interruptors) : IO.unit),
|
|
164
|
+
() => IO.unit,
|
|
165
|
+
),
|
|
166
|
+
);
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* @tsplus pipeable fncts.io.IO onExit
|
|
172
|
+
*/
|
|
173
|
+
export function onExit<E, A, R1, E1>(cleanup: (exit: Exit<E, A>) => IO<R1, E1, any>, __tsplusTrace?: string) {
|
|
174
|
+
return <R>(self: IO<R, E, A>): IO<R | R1, E | E1, A> => {
|
|
175
|
+
return IO.uninterruptibleMask(({ restore }) =>
|
|
176
|
+
restore(self).matchCauseIO(
|
|
177
|
+
(failure1) => {
|
|
178
|
+
const result = Exit.failCause(failure1);
|
|
179
|
+
return cleanup(result).matchCauseIO(
|
|
180
|
+
(failure2) => IO.failCauseNow(Cause.then(failure1, failure2)),
|
|
181
|
+
() => IO.fromExitNow(result),
|
|
182
|
+
);
|
|
183
|
+
},
|
|
184
|
+
(success) => {
|
|
185
|
+
const result = Exit.succeed(success);
|
|
186
|
+
return cleanup(result) > IO.fromExitNow(result);
|
|
187
|
+
},
|
|
188
|
+
),
|
|
189
|
+
);
|
|
190
|
+
};
|
|
158
191
|
}
|
|
159
192
|
|
|
160
193
|
/**
|
|
@@ -174,27 +207,11 @@ export function onInterruptExtended_<R, E, A, R2, E2>(
|
|
|
174
207
|
*/
|
|
175
208
|
export function disconnect<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
|
176
209
|
return uninterruptibleMask(({ restore }) =>
|
|
177
|
-
IO.fiberId.flatMap((
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
210
|
+
IO.fiberId.flatMap((fiberId) =>
|
|
211
|
+
Do((Δ) => {
|
|
212
|
+
const fiber = Δ(restore(self).forkDaemon);
|
|
213
|
+
return Δ(restore(fiber.join).onInterrupt(fiber.interruptAsFork(fiberId)));
|
|
214
|
+
}),
|
|
181
215
|
),
|
|
182
216
|
);
|
|
183
217
|
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Used to restore the inherited interruptibility
|
|
187
|
-
*/
|
|
188
|
-
export class InterruptStatusRestore {
|
|
189
|
-
constructor(readonly flag: InterruptStatus) {}
|
|
190
|
-
|
|
191
|
-
restore = <R, E, A>(io: IO<R, E, A>): IO<R, E, A> =>
|
|
192
|
-
this.flag.isInterruptible ? io.interruptible : io.uninterruptible;
|
|
193
|
-
|
|
194
|
-
force = <R, E, A>(io: IO<R, E, A>): IO<R, E, A> => {
|
|
195
|
-
if (this.flag.isUninteruptible) {
|
|
196
|
-
return io.uninterruptible.disconnect.interruptible;
|
|
197
|
-
}
|
|
198
|
-
return io.interruptible;
|
|
199
|
-
};
|
|
200
|
-
}
|
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export function onTermination<R1>(cleanup: (cause: Cause<never>) => URIO<R1, any>, __tsplusTrace?: string) {
|
|
5
5
|
return <R, E, A>(self: Lazy<IO<R, E, A>>): IO<R | R1, E, A> => {
|
|
6
|
-
return IO.
|
|
7
|
-
(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
),
|
|
6
|
+
return IO.defer(self).onExit((exit) =>
|
|
7
|
+
exit.match(
|
|
8
|
+
(cause) => {
|
|
9
|
+
if (cause.isFailure) return IO.unit;
|
|
10
|
+
else return cleanup(cause as Cause<never>);
|
|
11
|
+
},
|
|
12
|
+
() => IO.unit,
|
|
13
|
+
),
|
|
13
14
|
);
|
|
14
15
|
};
|
|
15
16
|
}
|
package/_src/IO/api/sequenceT.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IOVariance } from "@fncts/io/IO/definition";
|
|
2
2
|
|
|
3
3
|
import { identity, unsafeCoerce } from "@fncts/base/data/function";
|
|
4
4
|
|
|
@@ -8,11 +8,9 @@ import { identity, unsafeCoerce } from "@fncts/base/data/function";
|
|
|
8
8
|
export function sequenceT<T extends ReadonlyNonEmptyArray<IO<any, any, any>>>(
|
|
9
9
|
...ios: T
|
|
10
10
|
): IO<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
{
|
|
14
|
-
[K in keyof T]: _A<T[K]>;
|
|
15
|
-
}
|
|
11
|
+
[T[number]] extends [{ [IOVariance]: { _R: () => infer R } }] ? R : never,
|
|
12
|
+
[T[number]] extends [{ [IOVariance]: { _E: () => infer E } }] ? E : never,
|
|
13
|
+
{ [K in keyof T]: T[K] extends { [IOVariance]: { _A: () => infer A } } ? A : never }
|
|
16
14
|
> {
|
|
17
15
|
return unsafeCoerce(IO.foreach(ios, identity));
|
|
18
16
|
}
|
package/_src/IO/api.ts
CHANGED
|
@@ -410,6 +410,21 @@ export function deferTryCatch<R, E, A, E1>(
|
|
|
410
410
|
});
|
|
411
411
|
}
|
|
412
412
|
|
|
413
|
+
/**
|
|
414
|
+
* @tsplus static fncts.io.IOOps descriptorWith
|
|
415
|
+
*/
|
|
416
|
+
export function descriptorWith<R, E, A>(f: (descriptor: FiberDescriptor) => IO<R, E, A>): IO<R, E, A> {
|
|
417
|
+
return IO.withFiberRuntime((fiber, status) => {
|
|
418
|
+
const descriptor = new FiberDescriptor(fiber.id, status, fiber.getFiberRef(FiberRef.interruptedCause).interruptors);
|
|
419
|
+
return f(descriptor);
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* @tsplus static fncts.io.IOOps descriptor
|
|
425
|
+
*/
|
|
426
|
+
export const descriptor: UIO<FiberDescriptor> = IO.descriptorWith((descriptor) => IO.succeedNow(descriptor));
|
|
427
|
+
|
|
413
428
|
/**
|
|
414
429
|
* Folds an `IO` that may fail with `E` or succeed with `A` into one that never fails but succeeds with `Either<E, A>`
|
|
415
430
|
*
|
|
@@ -488,7 +503,14 @@ export function failCause<E = never, A = never>(cause: Lazy<Cause<E>>, __tsplusT
|
|
|
488
503
|
*
|
|
489
504
|
* @tsplus static fncts.io.IOOps fiberId
|
|
490
505
|
*/
|
|
491
|
-
export const fiberId: IO<never, never, FiberId> = IO.
|
|
506
|
+
export const fiberId: IO<never, never, FiberId> = IO.fiberIdWith((id) => IO.succeedNow(id));
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* @tsplus static fncts.io.IOOps fiberIdWith
|
|
510
|
+
*/
|
|
511
|
+
export function fiberIdWith<R, E, A>(f: (id: FiberId.Runtime) => IO<R, E, A>): IO<R, E, A> {
|
|
512
|
+
return IO.withFiberRuntime((fiber) => f(fiber.id));
|
|
513
|
+
}
|
|
492
514
|
|
|
493
515
|
/**
|
|
494
516
|
* Filters the collection using the specified effectual predicate.
|
package/_src/IO/definition.ts
CHANGED
|
@@ -6,6 +6,9 @@ import type { Trace } from "@fncts/base/data/Trace";
|
|
|
6
6
|
import { RuntimeFlag } from "../RuntimeFlag.js";
|
|
7
7
|
import { RuntimeFlags } from "../RuntimeFlags.js";
|
|
8
8
|
|
|
9
|
+
export const IOVariance = Symbol.for("fncts.io.IO.Variance");
|
|
10
|
+
export type IOVariance = typeof IOVariance;
|
|
11
|
+
|
|
9
12
|
export const IOTypeId = Symbol.for("fncts.io.IO");
|
|
10
13
|
export type IOTypeId = typeof IOTypeId;
|
|
11
14
|
|
|
@@ -23,10 +26,12 @@ export interface IOF extends HKT {
|
|
|
23
26
|
* @tsplus companion fncts.io.IOOps
|
|
24
27
|
*/
|
|
25
28
|
export abstract class IO<R, E, A> {
|
|
26
|
-
readonly
|
|
27
|
-
declare
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
readonly [IOTypeId]: IOTypeId = IOTypeId;
|
|
30
|
+
declare [IOVariance]: {
|
|
31
|
+
_R: () => R;
|
|
32
|
+
_E: () => E;
|
|
33
|
+
_A: () => A;
|
|
34
|
+
};
|
|
30
35
|
}
|
|
31
36
|
|
|
32
37
|
/**
|
|
@@ -45,9 +50,9 @@ export const IOAspects: IOAspects = {};
|
|
|
45
50
|
export function unifyIO<X extends IO<any, any, any>>(
|
|
46
51
|
self: X,
|
|
47
52
|
): IO<
|
|
48
|
-
[X] extends [{ _R: () => infer R }] ? R : never,
|
|
49
|
-
[X] extends [{ _E: () => infer E }] ? E : never,
|
|
50
|
-
[X] extends [{ _A: () => infer A }] ? A : never
|
|
53
|
+
[X] extends [{ [IOVariance]: { _R: () => infer R } }] ? R : never,
|
|
54
|
+
[X] extends [{ [IOVariance]: { _E: () => infer E } }] ? E : never,
|
|
55
|
+
[X] extends [{ [IOVariance]: { _A: () => infer A } }] ? A : never
|
|
51
56
|
> {
|
|
52
57
|
return self;
|
|
53
58
|
}
|
|
@@ -58,7 +63,7 @@ export type URIO<R, A> = IO<R, never, A>;
|
|
|
58
63
|
|
|
59
64
|
export type FIO<E, A> = IO<never, E, A>;
|
|
60
65
|
|
|
61
|
-
export const enum
|
|
66
|
+
export const enum IOOpCode {
|
|
62
67
|
SucceedNow,
|
|
63
68
|
Fail,
|
|
64
69
|
Sync,
|
|
@@ -72,21 +77,24 @@ export const enum IOTag {
|
|
|
72
77
|
Stateful,
|
|
73
78
|
WhileLoop,
|
|
74
79
|
YieldNow,
|
|
80
|
+
Commit,
|
|
81
|
+
RevertFlags,
|
|
82
|
+
UpdateTrace,
|
|
75
83
|
}
|
|
76
84
|
|
|
77
85
|
export function isIO(u: unknown): u is IO<any, any, any> {
|
|
78
|
-
return
|
|
86
|
+
return isObject(u) && IOTypeId in u;
|
|
79
87
|
}
|
|
80
88
|
|
|
81
89
|
export class Sync<A> extends IO<never, never, A> {
|
|
82
|
-
readonly
|
|
90
|
+
readonly ioOpCode = IOOpCode.Sync;
|
|
83
91
|
constructor(readonly evaluate: () => A, readonly trace?: string) {
|
|
84
92
|
super();
|
|
85
93
|
}
|
|
86
94
|
}
|
|
87
95
|
|
|
88
96
|
export class Async<R, E, A> extends IO<R, E, A> {
|
|
89
|
-
readonly
|
|
97
|
+
readonly ioOpCode = IOOpCode.Async;
|
|
90
98
|
constructor(
|
|
91
99
|
readonly registerCallback: (f: (_: IO<R, E, A>) => void) => any,
|
|
92
100
|
readonly blockingOn: () => FiberId,
|
|
@@ -100,7 +108,7 @@ export class Async<R, E, A> extends IO<R, E, A> {
|
|
|
100
108
|
* @internal
|
|
101
109
|
*/
|
|
102
110
|
export class OnSuccessAndFailure<R, E, A, R1, E1, B, R2, E2, C> extends IO<R | R1 | R2, E1 | E2, B | C> {
|
|
103
|
-
readonly
|
|
111
|
+
readonly ioOpCode = IOOpCode.OnSuccessAndFailure;
|
|
104
112
|
|
|
105
113
|
constructor(
|
|
106
114
|
readonly first: IO<R, E, A>,
|
|
@@ -120,7 +128,7 @@ export class OnSuccessAndFailure<R, E, A, R1, E1, B, R2, E2, C> extends IO<R | R
|
|
|
120
128
|
}
|
|
121
129
|
|
|
122
130
|
export class OnFailure<R, E, A, R1, E1, B> extends IO<R | R1, E1, A | B> {
|
|
123
|
-
readonly
|
|
131
|
+
readonly ioOpCode = IOOpCode.OnFailure;
|
|
124
132
|
constructor(
|
|
125
133
|
readonly first: IO<R, E, A>,
|
|
126
134
|
readonly failureK: (cause: Cause<E>) => IO<R1, E1, B>,
|
|
@@ -141,7 +149,7 @@ export class OnFailure<R, E, A, R1, E1, B> extends IO<R | R1, E1, A | B> {
|
|
|
141
149
|
* @internal
|
|
142
150
|
*/
|
|
143
151
|
export class OnSuccess<R, R1, E, E1, A, A1> extends IO<R | R1, E | E1, A1> {
|
|
144
|
-
readonly
|
|
152
|
+
readonly ioOpCode = IOOpCode.OnSuccess;
|
|
145
153
|
constructor(readonly first: IO<R, E, A>, readonly successK: (a: A) => IO<R1, E1, A1>, readonly trace?: string) {
|
|
146
154
|
super();
|
|
147
155
|
}
|
|
@@ -157,21 +165,21 @@ export class OnSuccess<R, R1, E, E1, A, A1> extends IO<R | R1, E | E1, A1> {
|
|
|
157
165
|
* @internal
|
|
158
166
|
*/
|
|
159
167
|
export class SucceedNow<A> extends IO<never, never, A> {
|
|
160
|
-
readonly
|
|
168
|
+
readonly ioOpCode = IOOpCode.SucceedNow;
|
|
161
169
|
constructor(readonly value: A, readonly trace?: string) {
|
|
162
170
|
super();
|
|
163
171
|
}
|
|
164
172
|
}
|
|
165
173
|
|
|
166
174
|
export class UpdateRuntimeFlags extends IO<never, never, void> {
|
|
167
|
-
readonly
|
|
175
|
+
readonly ioOpCode = IOOpCode.UpdateRuntimeFlags;
|
|
168
176
|
constructor(readonly update: RuntimeFlags.Patch, readonly trace?: string) {
|
|
169
177
|
super();
|
|
170
178
|
}
|
|
171
179
|
}
|
|
172
180
|
|
|
173
181
|
export class Interruptible<R, E, A> extends IO<R, E, A> {
|
|
174
|
-
readonly
|
|
182
|
+
readonly ioOpCode = IOOpCode.UpdateRuntimeFlagsWithin;
|
|
175
183
|
constructor(readonly effect: IO<R, E, A>, readonly trace?: string) {
|
|
176
184
|
super();
|
|
177
185
|
}
|
|
@@ -183,7 +191,7 @@ export class Interruptible<R, E, A> extends IO<R, E, A> {
|
|
|
183
191
|
}
|
|
184
192
|
|
|
185
193
|
export class Uninterruptible<R, E, A> extends IO<R, E, A> {
|
|
186
|
-
readonly
|
|
194
|
+
readonly ioOpCode = IOOpCode.UpdateRuntimeFlagsWithin;
|
|
187
195
|
constructor(readonly effect: IO<R, E, A>, readonly trace?: string) {
|
|
188
196
|
super();
|
|
189
197
|
}
|
|
@@ -195,7 +203,7 @@ export class Uninterruptible<R, E, A> extends IO<R, E, A> {
|
|
|
195
203
|
}
|
|
196
204
|
|
|
197
205
|
export class Dynamic<R, E, A> extends IO<R, E, A> {
|
|
198
|
-
readonly
|
|
206
|
+
readonly ioOpCode = IOOpCode.UpdateRuntimeFlagsWithin;
|
|
199
207
|
constructor(
|
|
200
208
|
readonly update: RuntimeFlagsPatch,
|
|
201
209
|
readonly f: (oldRuntimeFlags: RuntimeFlags) => IO<R, E, A>,
|
|
@@ -210,21 +218,21 @@ export class Dynamic<R, E, A> extends IO<R, E, A> {
|
|
|
210
218
|
}
|
|
211
219
|
|
|
212
220
|
export class GenerateStackTrace extends IO<never, never, Trace> {
|
|
213
|
-
readonly
|
|
221
|
+
readonly ioOpCode = IOOpCode.GenerateStackTrace;
|
|
214
222
|
constructor(readonly trace?: string) {
|
|
215
223
|
super();
|
|
216
224
|
}
|
|
217
225
|
}
|
|
218
226
|
|
|
219
227
|
export class Stateful<R, E, A> extends IO<R, E, A> {
|
|
220
|
-
readonly
|
|
228
|
+
readonly ioOpCode = IOOpCode.Stateful;
|
|
221
229
|
constructor(readonly onState: (fiber: FiberRuntime<E, A>, status: Running) => IO<R, E, A>, readonly trace?: string) {
|
|
222
230
|
super();
|
|
223
231
|
}
|
|
224
232
|
}
|
|
225
233
|
|
|
226
234
|
export class WhileLoop<R, E, A> extends IO<R, E, void> {
|
|
227
|
-
readonly
|
|
235
|
+
readonly ioOpCode = IOOpCode.WhileLoop;
|
|
228
236
|
constructor(
|
|
229
237
|
readonly check: () => boolean,
|
|
230
238
|
readonly body: () => IO<R, E, A>,
|
|
@@ -236,7 +244,7 @@ export class WhileLoop<R, E, A> extends IO<R, E, void> {
|
|
|
236
244
|
}
|
|
237
245
|
|
|
238
246
|
export class YieldNow extends IO<never, never, void> {
|
|
239
|
-
readonly
|
|
247
|
+
readonly ioOpCode = IOOpCode.YieldNow;
|
|
240
248
|
constructor(readonly trace?: string) {
|
|
241
249
|
super();
|
|
242
250
|
}
|
|
@@ -246,7 +254,7 @@ export class YieldNow extends IO<never, never, void> {
|
|
|
246
254
|
* @internal
|
|
247
255
|
*/
|
|
248
256
|
export class Fail<E> extends IO<never, E, never> {
|
|
249
|
-
readonly
|
|
257
|
+
readonly ioOpCode = IOOpCode.Fail;
|
|
250
258
|
|
|
251
259
|
constructor(readonly cause: Lazy<Cause<E>>, readonly trace?: string) {
|
|
252
260
|
super();
|
|
@@ -266,7 +274,8 @@ export type Concrete =
|
|
|
266
274
|
| Stateful<any, any, any>
|
|
267
275
|
| WhileLoop<any, any, any>
|
|
268
276
|
| YieldNow
|
|
269
|
-
| Fail<any
|
|
277
|
+
| Fail<any>
|
|
278
|
+
| STM<any, any, any>;
|
|
270
279
|
|
|
271
280
|
/**
|
|
272
281
|
* @tsplus static fncts.io.IOOps concrete
|
|
@@ -292,10 +301,10 @@ export const IOErrorTypeId = Symbol.for("fncts.io.IO.IOError");
|
|
|
292
301
|
export type IOErrorTypeId = typeof IOErrorTypeId;
|
|
293
302
|
|
|
294
303
|
export class IOError<E> {
|
|
295
|
-
readonly
|
|
304
|
+
readonly [IOErrorTypeId]: IOErrorTypeId = IOErrorTypeId;
|
|
296
305
|
constructor(readonly cause: Cause<E>) {}
|
|
297
306
|
}
|
|
298
307
|
|
|
299
308
|
export function isIOError(u: unknown): u is IOError<unknown> {
|
|
300
|
-
return
|
|
309
|
+
return isObject(u) && IOErrorTypeId in u;
|
|
301
310
|
}
|
package/_src/IO.ts
CHANGED
|
@@ -33,7 +33,6 @@ export * from "./IO/api/fulfill.js";
|
|
|
33
33
|
export * from "./IO/api/interrupt.js";
|
|
34
34
|
export * from "./IO/api/memoize.js";
|
|
35
35
|
export * from "./IO/api/once.js";
|
|
36
|
-
export * from "./IO/api/onExit.js";
|
|
37
36
|
export * from "./IO/api/onTermination.js";
|
|
38
37
|
export * from "./IO/api/provideLayer.js";
|
|
39
38
|
export * from "./IO/api/provideSomeLayer.js";
|
package/_src/Layer/MemoMap.ts
CHANGED
|
@@ -162,7 +162,7 @@ export function scope(scope: Scope, __tsplusTrace?: string) {
|
|
|
162
162
|
.zipWith(memoMap.getOrElseMemoize(scope, layer.that, layer.trace), layer.f, layer.trace),
|
|
163
163
|
);
|
|
164
164
|
}
|
|
165
|
-
case LayerTag.
|
|
165
|
+
case LayerTag.ZipWithConcurrent: {
|
|
166
166
|
return IO.succeed(
|
|
167
167
|
() => (memoMap: MemoMap) =>
|
|
168
168
|
memoMap
|
package/_src/Layer/api.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Spreadable } from "@fncts/base/types";
|
|
2
2
|
import type { Erase } from "@fncts/typelevel/Intersection";
|
|
3
3
|
|
|
4
|
-
import { Fold, Fresh, FromScoped, Layer, To,
|
|
4
|
+
import { Fold, Fresh, FromScoped, Layer, To, ZipWithConcurrent } from "@fncts/io/Layer/definition";
|
|
5
5
|
import { DecisionTag } from "@fncts/io/Schedule";
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -9,7 +9,7 @@ import { DecisionTag } from "@fncts/io/Schedule";
|
|
|
9
9
|
*/
|
|
10
10
|
export function and<RIn1, E1, ROut1>(that: Layer<RIn1, E1, ROut1>, __tsplusTrace?: string) {
|
|
11
11
|
return <RIn, E, ROut>(self: Layer<RIn, E, ROut>): Layer<RIn | RIn1, E | E1, ROut | ROut1> => {
|
|
12
|
-
return new
|
|
12
|
+
return new ZipWithConcurrent(self, that, (a, b) => a.union(b), __tsplusTrace);
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
15
|
|