@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/Ref/definition.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Atomic as Atomic_ } from "./Atomic.js";
|
|
2
2
|
import type * as Synchro from "./Synchronized/definition.js";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
export const RefVariance = Symbol.for("fncts.io.Ref.Variance");
|
|
5
|
+
export type RefVariance = typeof RefVariance;
|
|
5
6
|
|
|
6
7
|
export const RefTypeId = Symbol.for("fncts.io.Ref");
|
|
7
8
|
export type RefTypeId = typeof RefTypeId;
|
|
@@ -11,12 +12,14 @@ export type RefTypeId = typeof RefTypeId;
|
|
|
11
12
|
*/
|
|
12
13
|
export interface PRef<RA, RB, EA, EB, A, B> {
|
|
13
14
|
readonly [RefTypeId]: RefTypeId;
|
|
14
|
-
readonly [
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
readonly [RefVariance]: {
|
|
16
|
+
readonly _RA: (_: never) => RA;
|
|
17
|
+
readonly _RB: (_: never) => RB;
|
|
18
|
+
readonly _EA: (_: never) => EA;
|
|
19
|
+
readonly _EB: (_: never) => EB;
|
|
20
|
+
readonly _A: (_: A) => void;
|
|
21
|
+
readonly _B: (_: never) => B;
|
|
22
|
+
};
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
export type Ref<A> = PRef<never, never, never, never, A, A>;
|
|
@@ -43,26 +46,32 @@ export interface RefOps {}
|
|
|
43
46
|
export const Ref: RefOps = {};
|
|
44
47
|
|
|
45
48
|
export interface ReadableRef<RB, EB, B> {
|
|
46
|
-
readonly [
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
readonly [RefVariance]: {
|
|
50
|
+
readonly _RB: (_: never) => RB;
|
|
51
|
+
readonly _EB: (_: never) => EB;
|
|
52
|
+
readonly _B: (_: never) => B;
|
|
53
|
+
};
|
|
49
54
|
readonly get: IO<RB, EB, B>;
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
export interface WritableRef<RA, EA, A> {
|
|
53
|
-
readonly [
|
|
54
|
-
|
|
55
|
-
|
|
58
|
+
readonly [RefVariance]: {
|
|
59
|
+
readonly _RA: (_: never) => RA;
|
|
60
|
+
readonly _EA: (_: never) => EA;
|
|
61
|
+
readonly _A: (_: A) => void;
|
|
62
|
+
};
|
|
56
63
|
set(a: A, __tsplusTrace?: string): IO<RA, EA, void>;
|
|
57
64
|
}
|
|
58
65
|
|
|
59
66
|
export interface ModifiableRef<RA, RB, EA, EB, A, B> {
|
|
60
|
-
readonly [
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
readonly [RefVariance]: {
|
|
68
|
+
readonly _RA: (_: never) => RA;
|
|
69
|
+
readonly _RB: (_: never) => RB;
|
|
70
|
+
readonly _EA: (_: never) => EA;
|
|
71
|
+
readonly _EB: (_: never) => EB;
|
|
72
|
+
readonly _A: (_: A) => void;
|
|
73
|
+
readonly _B: (_: never) => B;
|
|
74
|
+
};
|
|
66
75
|
modify<C>(f: (b: B) => readonly [C, A], __tsplusTrace?: string): IO<RA | RB, EA | EB, C>;
|
|
67
76
|
}
|
|
68
77
|
|
|
@@ -74,12 +83,14 @@ export abstract class RefInternal<RA, RB, EA, EB, A, B>
|
|
|
74
83
|
ModifiableRef<RA, RB, EA, EB, A, B>
|
|
75
84
|
{
|
|
76
85
|
readonly [RefTypeId]: RefTypeId = RefTypeId;
|
|
77
|
-
declare [
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
86
|
+
declare [RefVariance]: {
|
|
87
|
+
readonly _RA: (_: never) => RA;
|
|
88
|
+
readonly _RB: (_: never) => RB;
|
|
89
|
+
readonly _EA: (_: never) => EA;
|
|
90
|
+
readonly _EB: (_: never) => EB;
|
|
91
|
+
readonly _A: (_: A) => void;
|
|
92
|
+
readonly _B: (_: never) => B;
|
|
93
|
+
};
|
|
83
94
|
|
|
84
95
|
/**
|
|
85
96
|
* Folds over the error and value types of the `Ref`. This is a highly
|
package/_src/Ref.ts
CHANGED
|
@@ -3,12 +3,14 @@ import type { Push } from "../Push.js";
|
|
|
3
3
|
import type { ModifiableRef, ReadableRef, WritableRef } from "../Ref.js";
|
|
4
4
|
import type { SynchronizedRefSubject } from "@fncts/io/RefSubject/Synchronized/definition";
|
|
5
5
|
|
|
6
|
+
import { PushTypeId } from "../Push.js";
|
|
7
|
+
import { PushVariance } from "../Push.js";
|
|
8
|
+
import { RefVariance } from "../Ref.js";
|
|
9
|
+
|
|
6
10
|
/**
|
|
7
11
|
* @tsplus type fncts.io.Push.RefSubject
|
|
8
12
|
*/
|
|
9
|
-
export interface RefSubject<out R, in out E, in A, out B> extends Push<R, E, B>, Emitter<R, E, A> {
|
|
10
|
-
readonly _A: (_: A) => B;
|
|
11
|
-
}
|
|
13
|
+
export interface RefSubject<out R, in out E, in A, out B> extends Push<R, E, B>, Emitter<R, E, A> {}
|
|
12
14
|
|
|
13
15
|
/**
|
|
14
16
|
* @tsplus type fncts.io.Push.RefSubjectOps
|
|
@@ -29,15 +31,20 @@ export abstract class RefSubjectInternal<R, E, A, B>
|
|
|
29
31
|
Push<R, E, B>,
|
|
30
32
|
Emitter<R, E, A>
|
|
31
33
|
{
|
|
32
|
-
|
|
33
|
-
declare [
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
readonly [PushTypeId]: PushTypeId = PushTypeId;
|
|
35
|
+
declare [RefVariance]: {
|
|
36
|
+
readonly _RA: (_: never) => R;
|
|
37
|
+
readonly _RB: (_: never) => R;
|
|
38
|
+
readonly _EA: (_: never) => never;
|
|
39
|
+
readonly _EB: (_: never) => never;
|
|
40
|
+
readonly _A: (_: A) => void;
|
|
41
|
+
readonly _B: (_: never) => B;
|
|
42
|
+
};
|
|
43
|
+
declare [PushVariance]: {
|
|
44
|
+
readonly _R: (_: never) => R;
|
|
45
|
+
readonly _E: (_: never) => E;
|
|
46
|
+
readonly _A: (_: A) => B;
|
|
47
|
+
};
|
|
41
48
|
|
|
42
49
|
abstract get get(): IO<R, never, B>;
|
|
43
50
|
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { IterableWeakMap } from "@fncts/base/collection/weak/IterableWeakMap";
|
|
2
2
|
|
|
3
|
+
export const ReloadableVariance = Symbol.for("fncts.io.Reloadable");
|
|
4
|
+
export type ReloadableVariance = typeof ReloadableVariance;
|
|
5
|
+
|
|
3
6
|
/**
|
|
4
7
|
* @tsplus type fncts.io.Reloadable
|
|
5
8
|
* @tsplus companion fncts.io.ReloadableOps
|
|
6
9
|
*/
|
|
7
10
|
export class Reloadable<Service> {
|
|
8
|
-
declare
|
|
11
|
+
declare [ReloadableVariance]: {
|
|
12
|
+
readonly _Service: (_: never) => Service;
|
|
13
|
+
};
|
|
9
14
|
constructor(readonly scopedRef: ScopedRef<Service>, readonly reload: IO<never, unknown, void>) {}
|
|
10
15
|
|
|
11
16
|
get get(): UIO<Service> {
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { AtomicReference } from "@fncts/base/internal/AtomicReference";
|
|
2
|
+
import { CommitState } from "@fncts/io/STM/internal/CommitState";
|
|
3
|
+
import { tryCommitAsync, tryCommitSync } from "@fncts/io/STM/internal/Journal";
|
|
4
|
+
import { TryCommitTag } from "@fncts/io/STM/internal/TryCommit";
|
|
5
|
+
import { TxnId } from "@fncts/io/TxnId";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @tsplus static fncts.io.STMOps atomically
|
|
9
|
+
* @tsplus getter fncts.io.STM commit
|
|
10
|
+
*/
|
|
11
|
+
export function atomically<R, E, A>(stm: STM<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
|
12
|
+
return IO.environmentWithIO((r: Environment<R>) =>
|
|
13
|
+
FiberRef.currentScheduler.getWith((scheduler) =>
|
|
14
|
+
IO.fiberId.flatMap((fiberId) => {
|
|
15
|
+
const result = tryCommitSync(fiberId, stm, r, scheduler);
|
|
16
|
+
switch (result._tag) {
|
|
17
|
+
case TryCommitTag.Done: {
|
|
18
|
+
return IO.fromExitNow(result.exit);
|
|
19
|
+
}
|
|
20
|
+
case TryCommitTag.Suspend: {
|
|
21
|
+
const id = TxnId.make();
|
|
22
|
+
const state = new AtomicReference<CommitState<E, A>>(CommitState.Running);
|
|
23
|
+
const async = IO.async(tryCommitAsync(result.journal, fiberId, stm, id, state, r, scheduler));
|
|
24
|
+
return IO.uninterruptibleMask(({ restore }) =>
|
|
25
|
+
restore(async).catchAllCause((cause) => {
|
|
26
|
+
state.compareAndSet(CommitState.Running, CommitState.Interrupted);
|
|
27
|
+
const newState = state.get;
|
|
28
|
+
switch (newState._tag) {
|
|
29
|
+
case "Done": {
|
|
30
|
+
return IO.fromExitNow(newState.exit);
|
|
31
|
+
}
|
|
32
|
+
default: {
|
|
33
|
+
return IO.failCauseNow(cause);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}),
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}),
|
|
41
|
+
),
|
|
42
|
+
);
|
|
43
|
+
}
|
package/_src/STM/api.ts
CHANGED
|
@@ -85,44 +85,6 @@ export function environmentWithSTM<R0, R, E, A>(f: (r: Environment<R0>) => STM<R
|
|
|
85
85
|
return STM.environment<R0>().flatMap(f);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
/**
|
|
89
|
-
* @tsplus static fncts.io.STMOps atomically
|
|
90
|
-
* @tsplus getter fncts.io.STM commit
|
|
91
|
-
*/
|
|
92
|
-
export function atomically<R, E, A>(stm: STM<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
|
93
|
-
return IO.environmentWithIO((r: Environment<R>) =>
|
|
94
|
-
FiberRef.currentScheduler.getWith((scheduler) =>
|
|
95
|
-
IO.fiberId.flatMap((fiberId) => {
|
|
96
|
-
const result = tryCommitSync(fiberId, stm, r, scheduler);
|
|
97
|
-
switch (result._tag) {
|
|
98
|
-
case TryCommitTag.Done: {
|
|
99
|
-
return IO.fromExitNow(result.exit);
|
|
100
|
-
}
|
|
101
|
-
case TryCommitTag.Suspend: {
|
|
102
|
-
const id = TxnId.make();
|
|
103
|
-
const state = new AtomicReference<CommitState<E, A>>(CommitState.Running);
|
|
104
|
-
const async = IO.async(tryCommitAsync(result.journal, fiberId, stm, id, state, r, scheduler));
|
|
105
|
-
return IO.uninterruptibleMask(({ restore }) =>
|
|
106
|
-
restore(async).catchAllCause((cause) => {
|
|
107
|
-
state.compareAndSet(CommitState.Running, CommitState.Interrupted);
|
|
108
|
-
const newState = state.get;
|
|
109
|
-
switch (newState._tag) {
|
|
110
|
-
case "Done": {
|
|
111
|
-
return IO.fromExitNow(newState.exit);
|
|
112
|
-
}
|
|
113
|
-
default: {
|
|
114
|
-
return IO.failCauseNow(cause);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}),
|
|
118
|
-
);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}),
|
|
122
|
-
),
|
|
123
|
-
);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
88
|
/**
|
|
127
89
|
* Returns an `STM` effect whose failure and success channels have been mapped by
|
|
128
90
|
* the specified pair of functions, `f` and `g`.
|
|
@@ -736,3 +698,23 @@ export function zipWith<A, R1, E1, B, C>(that: STM<R1, E1, B>, f: (a: A, b: B) =
|
|
|
736
698
|
return self.flatMap((a) => that.map((b) => f(a, b)));
|
|
737
699
|
};
|
|
738
700
|
}
|
|
701
|
+
|
|
702
|
+
/**
|
|
703
|
+
* @tsplus pipeable fncts.io.STM zipLeft
|
|
704
|
+
* @tsplus opipeable-operator fncts.io.STM <
|
|
705
|
+
*/
|
|
706
|
+
export function zipLeft<R1, E1, B>(that: STM<R1, E1, B>, __tsplusTrace?: string) {
|
|
707
|
+
return <R, E, A>(self: STM<R, E, A>): STM<R | R1, E | E1, A> => {
|
|
708
|
+
return self.flatMap((a) => that.as(a));
|
|
709
|
+
};
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/**
|
|
713
|
+
* @tsplus pipeable fncts.io.STM zipRight
|
|
714
|
+
* @tsplus pipeable-operator fncts.io.STM >
|
|
715
|
+
*/
|
|
716
|
+
export function zipRight<R1, E1, B>(that: STM<R1, E1, B>, __tsplusTrace?: string) {
|
|
717
|
+
return <R, E, A>(self: STM<R, E, A>): STM<R | R1, E | E1, B> => {
|
|
718
|
+
return self.flatMap(() => that);
|
|
719
|
+
};
|
|
720
|
+
}
|
package/_src/STM/definition.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Journal } from "./internal/Journal.js";
|
|
2
2
|
import type { _A, _E, _R } from "@fncts/base/types";
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { IOOpCode, IOTypeId, IOVariance } from "@fncts/io/IO/definition";
|
|
5
5
|
|
|
6
6
|
export const enum STMTag {
|
|
7
7
|
Effect = "Effect",
|
|
@@ -13,6 +13,9 @@ export const enum STMTag {
|
|
|
13
13
|
ContramapEnvironment = "ContramapEnvironment",
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
export const STMVariance = Symbol.for("fncts.io.STM.Variance");
|
|
17
|
+
export type STMVariance = typeof STMVariance;
|
|
18
|
+
|
|
16
19
|
export const STMTypeId = Symbol.for("fncts.io.STM");
|
|
17
20
|
export type STMTypeId = typeof STMTypeId;
|
|
18
21
|
|
|
@@ -21,10 +24,20 @@ export type STMTypeId = typeof STMTypeId;
|
|
|
21
24
|
* @tsplus companion fncts.io.STMOps
|
|
22
25
|
*/
|
|
23
26
|
export abstract class STM<R, E, A> {
|
|
24
|
-
readonly
|
|
25
|
-
readonly
|
|
26
|
-
readonly
|
|
27
|
-
readonly
|
|
27
|
+
readonly [IOTypeId]: IOTypeId = IOTypeId;
|
|
28
|
+
readonly ioOpCode = IOOpCode.Commit;
|
|
29
|
+
readonly trace?: string;
|
|
30
|
+
readonly [STMTypeId]: STMTypeId = STMTypeId;
|
|
31
|
+
declare [IOVariance]: {
|
|
32
|
+
_R: () => R;
|
|
33
|
+
_E: () => E;
|
|
34
|
+
_A: () => A;
|
|
35
|
+
};
|
|
36
|
+
declare [STMVariance]: {
|
|
37
|
+
_R: () => R;
|
|
38
|
+
_E: () => E;
|
|
39
|
+
_A: () => A;
|
|
40
|
+
};
|
|
28
41
|
}
|
|
29
42
|
|
|
30
43
|
/**
|
|
@@ -40,14 +53,14 @@ export function unifySTM<X extends STM<any, any, any>>(self: X): STM<_R<X>, _E<X
|
|
|
40
53
|
export interface USTM<A> extends STM<never, never, A> {}
|
|
41
54
|
|
|
42
55
|
export class Effect<R, E, A> extends STM<R, E, A> {
|
|
43
|
-
readonly
|
|
56
|
+
readonly stmOpCode = STMTag.Effect;
|
|
44
57
|
constructor(readonly f: (journal: Journal, fiberId: FiberId, r: Environment<R>) => A) {
|
|
45
58
|
super();
|
|
46
59
|
}
|
|
47
60
|
}
|
|
48
61
|
|
|
49
62
|
export class OnFailure<R, E, A, E1> extends STM<R, E1, A> {
|
|
50
|
-
readonly
|
|
63
|
+
readonly stmOpCode = STMTag.OnFailure;
|
|
51
64
|
constructor(readonly stm: STM<R, E, A>, readonly onFailure: (e: E) => STM<R, E1, A>) {
|
|
52
65
|
super();
|
|
53
66
|
}
|
|
@@ -57,7 +70,7 @@ export class OnFailure<R, E, A, E1> extends STM<R, E1, A> {
|
|
|
57
70
|
}
|
|
58
71
|
|
|
59
72
|
export class OnRetry<R, E, A> extends STM<R, E, A> {
|
|
60
|
-
readonly
|
|
73
|
+
readonly stmOpCode = STMTag.OnRetry;
|
|
61
74
|
constructor(readonly stm: STM<R, E, A>, readonly onRetry: STM<R, E, A>) {
|
|
62
75
|
super();
|
|
63
76
|
}
|
|
@@ -67,28 +80,28 @@ export class OnRetry<R, E, A> extends STM<R, E, A> {
|
|
|
67
80
|
}
|
|
68
81
|
|
|
69
82
|
export class OnSuccess<R, E, A, B> extends STM<R, E, B> {
|
|
70
|
-
readonly
|
|
83
|
+
readonly stmOpCode = STMTag.OnSuccess;
|
|
71
84
|
constructor(readonly stm: STM<R, E, A>, readonly apply: (a: A) => STM<R, E, B>) {
|
|
72
85
|
super();
|
|
73
86
|
}
|
|
74
87
|
}
|
|
75
88
|
|
|
76
89
|
export class Succeed<A> extends STM<never, never, A> {
|
|
77
|
-
readonly
|
|
90
|
+
readonly stmOpCode = STMTag.Succeed;
|
|
78
91
|
constructor(readonly a: () => A) {
|
|
79
92
|
super();
|
|
80
93
|
}
|
|
81
94
|
}
|
|
82
95
|
|
|
83
96
|
export class SucceedNow<A> extends STM<never, never, A> {
|
|
84
|
-
readonly
|
|
97
|
+
readonly stmOpCode = STMTag.SucceedNow;
|
|
85
98
|
constructor(readonly a: A) {
|
|
86
99
|
super();
|
|
87
100
|
}
|
|
88
101
|
}
|
|
89
102
|
|
|
90
103
|
export class ContramapEnvironment<R, E, A, R0> extends STM<R0, E, A> {
|
|
91
|
-
readonly
|
|
104
|
+
readonly stmOpCode = STMTag.ContramapEnvironment;
|
|
92
105
|
constructor(readonly stm: STM<R, E, A>, readonly f: (_: Environment<R0>) => Environment<R>) {
|
|
93
106
|
super();
|
|
94
107
|
}
|
|
@@ -111,45 +124,45 @@ export const FailExceptionTypeId = Symbol.for("fncta.control.STM.FailException")
|
|
|
111
124
|
export type FailExceptionTypeId = typeof FailExceptionTypeId;
|
|
112
125
|
|
|
113
126
|
export class FailException<E> {
|
|
114
|
-
readonly
|
|
127
|
+
readonly [FailExceptionTypeId]: FailExceptionTypeId = FailExceptionTypeId;
|
|
115
128
|
constructor(readonly e: E) {}
|
|
116
129
|
}
|
|
117
130
|
|
|
118
131
|
export function isFailException(u: unknown): u is FailException<unknown> {
|
|
119
|
-
return
|
|
132
|
+
return isObject(u) && FailExceptionTypeId in u;
|
|
120
133
|
}
|
|
121
134
|
|
|
122
135
|
export const HaltExceptionTypeId = Symbol.for("fncts.io.STM.HaltException");
|
|
123
136
|
export type HaltExceptionTypeId = typeof HaltExceptionTypeId;
|
|
124
137
|
|
|
125
138
|
export class HaltException<E> {
|
|
126
|
-
readonly
|
|
139
|
+
readonly [HaltExceptionTypeId]: HaltExceptionTypeId = HaltExceptionTypeId;
|
|
127
140
|
constructor(readonly e: E) {}
|
|
128
141
|
}
|
|
129
142
|
|
|
130
143
|
export function isHaltException(u: unknown): u is HaltException<unknown> {
|
|
131
|
-
return
|
|
144
|
+
return isObject(u) && HaltExceptionTypeId in u;
|
|
132
145
|
}
|
|
133
146
|
|
|
134
147
|
export const InterruptExceptionTypeId = Symbol.for("fncts.io.STM.InterruptException");
|
|
135
148
|
export type InterruptExceptionTypeId = typeof InterruptExceptionTypeId;
|
|
136
149
|
|
|
137
150
|
export class InterruptException {
|
|
138
|
-
readonly
|
|
151
|
+
readonly [InterruptExceptionTypeId]: InterruptExceptionTypeId = InterruptExceptionTypeId;
|
|
139
152
|
constructor(readonly fiberId: FiberId) {}
|
|
140
153
|
}
|
|
141
154
|
|
|
142
155
|
export function isInterruptException(u: unknown): u is InterruptException {
|
|
143
|
-
return
|
|
156
|
+
return isObject(u) && InterruptExceptionTypeId in u;
|
|
144
157
|
}
|
|
145
158
|
|
|
146
159
|
export const RetryExceptionTypeId = Symbol.for("fncts.io.STM.RetryException");
|
|
147
160
|
export type RetryExceptionTypeId = typeof RetryExceptionTypeId;
|
|
148
161
|
|
|
149
162
|
export class RetryException {
|
|
150
|
-
readonly
|
|
163
|
+
readonly [RetryExceptionTypeId]: RetryExceptionTypeId = RetryExceptionTypeId;
|
|
151
164
|
}
|
|
152
165
|
|
|
153
166
|
export function isRetryException(u: unknown): u is RetryException {
|
|
154
|
-
return
|
|
167
|
+
return isObject(u) && RetryExceptionTypeId in u;
|
|
155
168
|
}
|
package/_src/STM/driver.ts
CHANGED
|
@@ -25,12 +25,12 @@ export class STMDriver<R, E, A> {
|
|
|
25
25
|
let result: Erased | undefined = undefined;
|
|
26
26
|
while (this.contStack.hasNext && !result) {
|
|
27
27
|
const cont = this.contStack.pop()!;
|
|
28
|
-
if (cont.
|
|
28
|
+
if (cont.stmOpCode === STMTag.OnFailure) {
|
|
29
29
|
if (!isRetry) {
|
|
30
30
|
result = cont.onFailure(error);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
if (cont.
|
|
33
|
+
if (cont.stmOpCode === STMTag.OnRetry) {
|
|
34
34
|
if (isRetry) {
|
|
35
35
|
result = cont.onRetry;
|
|
36
36
|
}
|
|
@@ -46,7 +46,7 @@ export class STMDriver<R, E, A> {
|
|
|
46
46
|
while (!exit && curr) {
|
|
47
47
|
const k = curr;
|
|
48
48
|
concrete(k);
|
|
49
|
-
switch (k.
|
|
49
|
+
switch (k.stmOpCode) {
|
|
50
50
|
case STMTag.Succeed: {
|
|
51
51
|
const a = k.a();
|
|
52
52
|
if (!this.contStack.hasNext) {
|
|
@@ -10,7 +10,7 @@ export type EntryTypeId = typeof EntryTypeId;
|
|
|
10
10
|
* @tsplus companion fncts.io.EntryOps
|
|
11
11
|
*/
|
|
12
12
|
export class Entry {
|
|
13
|
-
readonly
|
|
13
|
+
readonly [EntryTypeId]: EntryTypeId = EntryTypeId;
|
|
14
14
|
constructor(readonly use: <X>(f: <S>(entry: ConcreteEntry<S>) => X) => X) {}
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -27,7 +27,7 @@ export const ConcreteEntryTypeId = Symbol.for("fncts.io.ConcreteEntry");
|
|
|
27
27
|
export type ConcreteEntryTypeId = typeof ConcreteEntryTypeId;
|
|
28
28
|
|
|
29
29
|
export class ConcreteEntry<S> {
|
|
30
|
-
readonly
|
|
30
|
+
readonly [ConcreteEntryTypeId]: ConcreteEntryTypeId = ConcreteEntryTypeId;
|
|
31
31
|
constructor(
|
|
32
32
|
readonly tref: Atomic<S>,
|
|
33
33
|
readonly expected: Versioned<S>,
|
|
@@ -11,13 +11,13 @@ export const enum TryCommitTag {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export class Done<E, A> {
|
|
14
|
-
readonly
|
|
15
|
-
readonly _tag
|
|
14
|
+
readonly [TryCommitTypeId]: TryCommitTypeId = TryCommitTypeId;
|
|
15
|
+
readonly _tag = TryCommitTag.Done;
|
|
16
16
|
constructor(readonly exit: Exit<E, A>) {}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export class Suspend {
|
|
20
|
-
readonly
|
|
21
|
-
readonly _tag
|
|
20
|
+
readonly [TryCommitTypeId]: TryCommitTypeId = TryCommitTypeId;
|
|
21
|
+
readonly _tag = TryCommitTag.Suspend;
|
|
22
22
|
constructor(readonly journal: Journal) {}
|
|
23
23
|
}
|
|
@@ -2,6 +2,6 @@ export const VersionedTypeId = Symbol.for("fncts.io.Versioned");
|
|
|
2
2
|
export type VersionedTypeId = typeof VersionedTypeId;
|
|
3
3
|
|
|
4
4
|
export class Versioned<A> {
|
|
5
|
-
readonly
|
|
5
|
+
readonly [VersionedTypeId]: VersionedTypeId = VersionedTypeId;
|
|
6
6
|
constructor(readonly value: A) {}
|
|
7
7
|
}
|
package/_src/STM.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from "./STM/definition.js";
|
|
|
4
4
|
export * from "./STM/driver.js";
|
|
5
5
|
// codegen:end
|
|
6
6
|
// codegen:start { preset: barrel, include: STM/api/*.ts }
|
|
7
|
+
export * from "./STM/api/atomically.js";
|
|
7
8
|
export * from "./STM/api/core-api.js";
|
|
8
9
|
export * from "./STM/api/core-constructors.js";
|
|
9
10
|
// codegen:end
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { Decision } from "./Decision.js";
|
|
2
2
|
import type { Driver as Driver_ } from "./Driver.js";
|
|
3
3
|
|
|
4
|
+
export const ScheduleVariance = Symbol.for("fncts.io.Schedule.Variance");
|
|
5
|
+
export type ScheduleVariance = typeof ScheduleVariance;
|
|
6
|
+
|
|
4
7
|
/**
|
|
5
8
|
* A `Schedule<Env, In, Out>` defines a recurring schedule, which consumes
|
|
6
9
|
* values of type `In`, and which returns values of type `Out`.
|
|
@@ -32,9 +35,11 @@ import type { Driver as Driver_ } from "./Driver.js";
|
|
|
32
35
|
* @tsplus companion fncts.io.ScheduleOps
|
|
33
36
|
*/
|
|
34
37
|
export abstract class Schedule<Env, In, Out> {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
declare [ScheduleVariance]: {
|
|
39
|
+
readonly _Env: (_: never) => Env;
|
|
40
|
+
readonly _In: (_: In) => void;
|
|
41
|
+
readonly _Out: (_: never) => Out;
|
|
42
|
+
};
|
|
38
43
|
readonly _State!: unknown;
|
|
39
44
|
abstract readonly initial: this["_State"];
|
|
40
45
|
abstract step(
|
package/_src/Scope/definition.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const ScopeTypeId = Symbol.for("fncts.
|
|
1
|
+
export const ScopeTypeId = Symbol.for("fncts.io.Scope");
|
|
2
2
|
export type ScopeTypeId = typeof ScopeTypeId;
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -6,7 +6,7 @@ export type ScopeTypeId = typeof ScopeTypeId;
|
|
|
6
6
|
* @tsplus companion fncts.io.ScopeOps
|
|
7
7
|
*/
|
|
8
8
|
export abstract class Scope {
|
|
9
|
-
readonly
|
|
9
|
+
readonly [ScopeTypeId]: ScopeTypeId = ScopeTypeId;
|
|
10
10
|
abstract addFinalizerExit(finalizer: Finalizer): UIO<void>;
|
|
11
11
|
abstract fork: UIO<Scope.Closeable>;
|
|
12
12
|
}
|
|
@@ -6,7 +6,7 @@ export type ScopedRefTypeId = typeof ScopedRefTypeId;
|
|
|
6
6
|
* @tsplus companion fncts.io.ScopedRefOps
|
|
7
7
|
*/
|
|
8
8
|
export abstract class ScopedRef<A> {
|
|
9
|
-
readonly
|
|
9
|
+
readonly [ScopedRefTypeId]: ScopedRefTypeId = ScopedRefTypeId;
|
|
10
10
|
abstract set<R, E>(acquire: IO<R | Scope, E, A>, __tsplusTrace?: string): IO<Exclude<R, Scope>, E, void>;
|
|
11
11
|
abstract get: UIO<A>;
|
|
12
12
|
}
|
package/_src/State/api.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { StateInternal } from "./internal.js";
|
|
|
6
6
|
/**
|
|
7
7
|
* @tsplus getter fncts.io.State get
|
|
8
8
|
*/
|
|
9
|
-
export function
|
|
9
|
+
export function get<S>(self: State<S>, __tsplusTrace?: string): UIO<S> {
|
|
10
10
|
concrete(self);
|
|
11
11
|
return self.get;
|
|
12
12
|
}
|
package/_src/State/definition.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { StateInternal
|
|
1
|
+
import type { StateInternal} from "./internal.js";
|
|
2
2
|
|
|
3
|
+
import { StateVariance } from "./internal.js";
|
|
3
4
|
import { StateTypeId } from "./internal.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -7,8 +8,10 @@ import { StateTypeId } from "./internal.js";
|
|
|
7
8
|
* @tsplus companion fncts.io.StateOps
|
|
8
9
|
*/
|
|
9
10
|
export abstract class State<S> {
|
|
10
|
-
readonly
|
|
11
|
-
|
|
11
|
+
readonly [StateTypeId]: StateTypeId = StateTypeId;
|
|
12
|
+
declare [StateVariance]: {
|
|
13
|
+
readonly _S: (_: S) => S;
|
|
14
|
+
};
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
/**
|
package/_src/State/internal.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const StateVariance = Symbol.for("fncts.io.State.Variance");
|
|
2
|
+
export type StateVariance = typeof StateVariance;
|
|
3
|
+
|
|
4
|
+
export const StateTypeId = Symbol.for("fncts.io.State");
|
|
2
5
|
export type StateTypeId = typeof StateTypeId;
|
|
3
6
|
|
|
4
7
|
export abstract class StateInternal<S> {
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
readonly [StateTypeId]: StateTypeId = StateTypeId;
|
|
9
|
+
declare [StateVariance]: {
|
|
10
|
+
readonly _S: (_: S) => S;
|
|
11
|
+
};
|
|
7
12
|
abstract get: UIO<S>;
|
|
8
13
|
abstract set(s: S, __tsplusTrace?: string): UIO<void>;
|
|
9
14
|
abstract update(f: (s: S) => S, __tsplusTrace?: string): UIO<void>;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { _A, _E, _R } from "@fncts/base/types";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
export const StreamVariance = Symbol.for("fncts.io.Stream.Variance");
|
|
4
|
+
export type StreamVariance = typeof StreamVariance;
|
|
5
|
+
|
|
6
|
+
export const StreamTypeId = Symbol.for("fncts.io.Steam");
|
|
3
7
|
export type StreamTypeId = typeof StreamTypeId;
|
|
4
8
|
|
|
5
9
|
/**
|
|
@@ -24,16 +28,24 @@ export type StreamTypeId = typeof StreamTypeId;
|
|
|
24
28
|
*/
|
|
25
29
|
export class Stream<R, E, A> {
|
|
26
30
|
readonly [StreamTypeId]: StreamTypeId = StreamTypeId;
|
|
27
|
-
declare
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
declare [StreamVariance]: {
|
|
32
|
+
readonly _R: (_: never) => R;
|
|
33
|
+
readonly _E: (_: never) => E;
|
|
34
|
+
readonly _A: (_: never) => A;
|
|
35
|
+
};
|
|
30
36
|
constructor(readonly channel: Channel<R, unknown, unknown, unknown, E, Conc<A>, unknown>) {}
|
|
31
37
|
}
|
|
32
38
|
|
|
33
39
|
/**
|
|
34
40
|
* @tsplus unify fncts.io.Stream
|
|
35
41
|
*/
|
|
36
|
-
export function unifyStream<X extends Stream<any, any, any>>(
|
|
42
|
+
export function unifyStream<X extends Stream<any, any, any>>(
|
|
43
|
+
_: X,
|
|
44
|
+
): Stream<
|
|
45
|
+
[X] extends [{ [StreamVariance]: { _R: (_: never) => infer R } }] ? R : never,
|
|
46
|
+
[X] extends [{ [StreamVariance]: { _E: (_: never) => infer E } }] ? E : never,
|
|
47
|
+
[X] extends [{ [StreamVariance]: { _A: (_: never) => infer A } }] ? A : never
|
|
48
|
+
> {
|
|
37
49
|
return _;
|
|
38
50
|
}
|
|
39
51
|
|