@fncts/io 0.0.49 → 0.0.51
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/Channel/internal/SingleProducerAsyncInput.d.ts +1 -1
- package/CountdownLatch.d.ts +5 -5
- package/Fiber/FiberRuntime.d.ts +1 -1
- package/Hub/api.d.ts +7 -7
- package/IO/api/foreachExec.d.ts +18 -0
- package/IO/api.d.ts +1 -1
- package/Push/Bounds.d.ts +4 -0
- package/Push/FlattenStrategy.d.ts +47 -0
- package/Push/IndexedBuffer.d.ts +19 -0
- package/Push/MergeStrategy.d.ts +19 -0
- package/Push/Operator/IOLoopOperator.d.ts +61 -0
- package/Push/Operator/IOOperator.d.ts +63 -0
- package/Push/Operator/LoopOperator.d.ts +50 -0
- package/Push/Operator/SyncOperator.d.ts +41 -0
- package/Push/Operator.d.ts +4 -0
- package/Push/Producer/IOProducer.d.ts +41 -0
- package/Push/Producer/SyncProducer.d.ts +61 -0
- package/Push/Producer.d.ts +1 -0
- package/Push/Sink.d.ts +65 -0
- package/Push/api.d.ts +80 -163
- package/Push/definition.d.ts +92 -19
- package/Push/internal.d.ts +3 -0
- package/Push.d.ts +6 -0
- package/Queue/api/dimapIO.d.ts +12 -12
- package/Ref/Synchronized/definition.d.ts +32 -9
- package/Ref/definition.d.ts +12 -0
- package/STM/api.d.ts +1 -1
- package/Scope/api.d.ts +16 -1
- package/Semaphore/definition.d.ts +1 -1
- package/Sink/definition.d.ts +5 -6
- package/Subject/Atomic.d.ts +19 -9
- package/Subject/DeferredRef.d.ts +17 -0
- package/Subject/Hold.d.ts +19 -0
- package/Subject/RefSubject/Atomic.d.ts +43 -0
- package/Subject/RefSubject/Derived.d.ts +43 -0
- package/Subject/RefSubject/RefSubject.d.ts +37 -0
- package/Subject/RefSubject/constructors.d.ts +15 -0
- package/Subject/RefSubject.d.ts +4 -0
- package/Subject/definition.d.ts +14 -2
- package/Subject.d.ts +3 -0
- package/SubscriptionRef.d.ts +0 -1
- package/Supervisor/definition.d.ts +1 -1
- package/_cjs/Cached/api.cjs +8 -2
- package/_cjs/Cached/api.cjs.map +1 -1
- package/_cjs/Cached/definition.cjs +2 -6
- package/_cjs/Cached/definition.cjs.map +1 -1
- package/_cjs/CancellerState.cjs +4 -7
- package/_cjs/CancellerState.cjs.map +1 -1
- package/_cjs/Channel/UpstreamPullRequest/definition.cjs +4 -2
- package/_cjs/Channel/UpstreamPullRequest/definition.cjs.map +1 -1
- package/_cjs/Channel/api.cjs +2 -3
- package/_cjs/Channel/api.cjs.map +1 -1
- package/_cjs/Channel/definition.cjs +22 -16
- package/_cjs/Channel/definition.cjs.map +1 -1
- package/_cjs/Channel/internal/ChannelExecutor.cjs +35 -11
- package/_cjs/Channel/internal/ChannelExecutor.cjs.map +1 -1
- package/_cjs/Channel/internal/ChannelState.cjs +15 -8
- package/_cjs/Channel/internal/ChannelState.cjs.map +1 -1
- package/_cjs/Channel/internal/MergeDecision.cjs +6 -8
- package/_cjs/Channel/internal/MergeDecision.cjs.map +1 -1
- package/_cjs/Channel/internal/MergeState.cjs +7 -3
- package/_cjs/Channel/internal/MergeState.cjs.map +1 -1
- package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs +49 -42
- package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs.map +1 -1
- package/_cjs/Clock/live.cjs +1 -4
- package/_cjs/Clock/live.cjs.map +1 -1
- package/_cjs/CountdownLatch.cjs +22 -12
- package/_cjs/CountdownLatch.cjs.map +1 -1
- package/_cjs/Differ/api.cjs +3 -12
- package/_cjs/Differ/api.cjs.map +1 -1
- package/_cjs/Differ/definition.cjs +1 -5
- package/_cjs/Differ/definition.cjs.map +1 -1
- package/_cjs/Fiber/FiberMessage.cjs +6 -3
- package/_cjs/Fiber/FiberMessage.cjs.map +1 -1
- package/_cjs/Fiber/FiberRuntime.cjs +66 -61
- package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
- package/_cjs/Fiber/definition.cjs +10 -6
- package/_cjs/Fiber/definition.cjs.map +1 -1
- package/_cjs/FiberDescriptor.cjs +3 -0
- package/_cjs/FiberDescriptor.cjs.map +1 -1
- package/_cjs/FiberRef/definition.cjs +9 -6
- package/_cjs/FiberRef/definition.cjs.map +1 -1
- package/_cjs/FiberRefs/Patch.cjs +13 -13
- package/_cjs/FiberRefs/Patch.cjs.map +1 -1
- package/_cjs/FiberScope/definition.cjs +2 -0
- package/_cjs/FiberScope/definition.cjs.map +1 -1
- package/_cjs/FiberSet.cjs +4 -3
- package/_cjs/FiberSet.cjs.map +1 -1
- package/_cjs/FiberStatus/definition.cjs +12 -9
- package/_cjs/FiberStatus/definition.cjs.map +1 -1
- package/_cjs/Future/State.cjs +8 -7
- package/_cjs/Future/State.cjs.map +1 -1
- package/_cjs/Future/definition.cjs +3 -3
- package/_cjs/Future/definition.cjs.map +1 -1
- package/_cjs/Hub/api.cjs +61 -44
- package/_cjs/Hub/api.cjs.map +1 -1
- package/_cjs/Hub/definition.cjs +4 -8
- package/_cjs/Hub/definition.cjs.map +1 -1
- package/_cjs/Hub/internal.cjs +130 -110
- package/_cjs/Hub/internal.cjs.map +1 -1
- package/_cjs/IO/api/foreachExec.cjs +29 -4
- package/_cjs/IO/api/foreachExec.cjs.map +1 -1
- package/_cjs/IO/api/transplant.cjs +8 -7
- package/_cjs/IO/api/transplant.cjs.map +1 -1
- package/_cjs/IO/api.cjs +9 -4
- package/_cjs/IO/api.cjs.map +1 -1
- package/_cjs/IO/definition.cjs +8 -12
- package/_cjs/IO/definition.cjs.map +1 -1
- package/_cjs/IO/runtime.cjs +64 -61
- package/_cjs/IO/runtime.cjs.map +1 -1
- package/_cjs/InterruptStatus/definition.cjs +1 -0
- package/_cjs/InterruptStatus/definition.cjs.map +1 -1
- package/_cjs/Layer/MemoMap.cjs +25 -24
- package/_cjs/Layer/MemoMap.cjs.map +1 -1
- package/_cjs/Layer/definition.cjs +30 -13
- package/_cjs/Layer/definition.cjs.map +1 -1
- package/_cjs/LogLevel.cjs +3 -0
- package/_cjs/LogLevel.cjs.map +1 -1
- package/_cjs/LogSpan.cjs +2 -0
- package/_cjs/LogSpan.cjs.map +1 -1
- package/_cjs/Logger/definition.cjs +1 -0
- package/_cjs/Logger/definition.cjs.map +1 -1
- package/_cjs/MVar/definition.cjs +3 -4
- package/_cjs/MVar/definition.cjs.map +1 -1
- package/_cjs/Push/Bounds.cjs +2 -0
- package/_cjs/Push/Bounds.cjs.map +1 -0
- package/_cjs/Push/FlattenStrategy.cjs +96 -0
- package/_cjs/Push/FlattenStrategy.cjs.map +1 -0
- package/_cjs/Push/IndexedBuffer.cjs +74 -0
- package/_cjs/Push/IndexedBuffer.cjs.map +1 -0
- package/_cjs/Push/MergeStrategy.cjs +47 -0
- package/_cjs/Push/MergeStrategy.cjs.map +1 -0
- package/_cjs/Push/Operator/IOLoopOperator.cjs +225 -0
- package/_cjs/Push/Operator/IOLoopOperator.cjs.map +1 -0
- package/_cjs/Push/Operator/IOOperator.cjs +104 -0
- package/_cjs/Push/Operator/IOOperator.cjs.map +1 -0
- package/_cjs/Push/Operator/LoopOperator.cjs +165 -0
- package/_cjs/Push/Operator/LoopOperator.cjs.map +1 -0
- package/_cjs/Push/Operator/SyncOperator.cjs +78 -0
- package/_cjs/Push/Operator/SyncOperator.cjs.map +1 -0
- package/_cjs/Push/Operator.cjs +2 -0
- package/_cjs/Push/Operator.cjs.map +1 -0
- package/_cjs/Push/Producer/IOProducer.cjs +72 -0
- package/_cjs/Push/Producer/IOProducer.cjs.map +1 -0
- package/_cjs/Push/Producer/SyncProducer.cjs +111 -0
- package/_cjs/Push/Producer/SyncProducer.cjs.map +1 -0
- package/_cjs/Push/Producer.cjs +2 -0
- package/_cjs/Push/Producer.cjs.map +1 -0
- package/_cjs/Push/Sink.cjs +238 -0
- package/_cjs/Push/Sink.cjs.map +1 -0
- package/_cjs/Push/api.cjs +369 -387
- package/_cjs/Push/api.cjs.map +1 -1
- package/_cjs/Push/definition.cjs +82 -26
- package/_cjs/Push/definition.cjs.map +1 -1
- package/_cjs/Push/internal.cjs +31 -26
- package/_cjs/Push/internal.cjs.map +1 -1
- package/_cjs/Push.cjs +66 -0
- package/_cjs/Push.cjs.map +1 -1
- package/_cjs/Queue/api/dimapIO.cjs +74 -32
- package/_cjs/Queue/api/dimapIO.cjs.map +1 -1
- package/_cjs/Queue/api/filterInputIO.cjs +51 -25
- package/_cjs/Queue/api/filterInputIO.cjs.map +1 -1
- package/_cjs/Queue/api/filterOutputIO.cjs +60 -30
- package/_cjs/Queue/api/filterOutputIO.cjs.map +1 -1
- package/_cjs/Queue/api/zipWithIO.cjs +27 -10
- package/_cjs/Queue/api/zipWithIO.cjs.map +1 -1
- package/_cjs/Queue/definition.cjs +3 -7
- package/_cjs/Queue/definition.cjs.map +1 -1
- package/_cjs/Queue/internal.cjs +73 -62
- package/_cjs/Queue/internal.cjs.map +1 -1
- package/_cjs/Queue/strategy.cjs +1 -3
- package/_cjs/Queue/strategy.cjs.map +1 -1
- package/_cjs/Random/live.cjs +4 -3
- package/_cjs/Random/live.cjs.map +1 -1
- package/_cjs/Ref/Atomic.cjs +2 -3
- package/_cjs/Ref/Atomic.cjs.map +1 -1
- package/_cjs/Ref/Derived.cjs +2 -3
- package/_cjs/Ref/Derived.cjs.map +1 -1
- package/_cjs/Ref/DerivedAll.cjs +2 -3
- package/_cjs/Ref/DerivedAll.cjs.map +1 -1
- package/_cjs/Ref/Synchronized/definition.cjs +17 -16
- package/_cjs/Ref/Synchronized/definition.cjs.map +1 -1
- package/_cjs/Ref/definition.cjs +2 -6
- package/_cjs/Ref/definition.cjs.map +1 -1
- package/_cjs/Reloadable/definition.cjs +2 -0
- package/_cjs/Reloadable/definition.cjs.map +1 -1
- package/_cjs/STM/definition.cjs +30 -25
- package/_cjs/STM/definition.cjs.map +1 -1
- package/_cjs/STM/driver.cjs +5 -0
- package/_cjs/STM/driver.cjs.map +1 -1
- package/_cjs/STM/internal/Entry.cjs +9 -6
- package/_cjs/STM/internal/Entry.cjs.map +1 -1
- package/_cjs/STM/internal/TryCommit.cjs +6 -7
- package/_cjs/STM/internal/TryCommit.cjs.map +1 -1
- package/_cjs/STM/internal/Versioned.cjs +2 -3
- package/_cjs/STM/internal/Versioned.cjs.map +1 -1
- package/_cjs/Schedule/Decision.cjs +3 -4
- package/_cjs/Schedule/Decision.cjs.map +1 -1
- package/_cjs/Schedule/Driver.cjs +4 -0
- package/_cjs/Schedule/Driver.cjs.map +1 -1
- package/_cjs/Schedule/api.cjs +2 -5
- package/_cjs/Schedule/api.cjs.map +1 -1
- package/_cjs/Schedule/definition.cjs +3 -1
- package/_cjs/Schedule/definition.cjs.map +1 -1
- package/_cjs/Scope/ReleaseMap/definition.cjs +8 -2
- package/_cjs/Scope/ReleaseMap/definition.cjs.map +1 -1
- package/_cjs/Scope/api.cjs +29 -11
- package/_cjs/Scope/api.cjs.map +1 -1
- package/_cjs/Scope/definition.cjs +3 -7
- package/_cjs/Scope/definition.cjs.map +1 -1
- package/_cjs/ScopedRef/api.cjs +8 -3
- package/_cjs/ScopedRef/api.cjs.map +1 -1
- package/_cjs/ScopedRef/definition.cjs +1 -5
- package/_cjs/ScopedRef/definition.cjs.map +1 -1
- package/_cjs/Semaphore/Reservation.cjs +2 -0
- package/_cjs/Semaphore/Reservation.cjs.map +1 -1
- package/_cjs/Semaphore/definition.cjs +42 -38
- package/_cjs/Semaphore/definition.cjs.map +1 -1
- package/_cjs/Sink/definition.cjs +3 -3
- package/_cjs/Sink/definition.cjs.map +1 -1
- package/_cjs/State/api.cjs +1 -4
- package/_cjs/State/api.cjs.map +1 -1
- package/_cjs/State/definition.cjs +2 -6
- package/_cjs/State/definition.cjs.map +1 -1
- package/_cjs/State/internal.cjs +1 -5
- package/_cjs/State/internal.cjs.map +1 -1
- package/_cjs/Stream/api/zipAllWith.cjs +7 -11
- package/_cjs/Stream/api/zipAllWith.cjs.map +1 -1
- package/_cjs/Stream/api/zipWithChunks.cjs +5 -5
- package/_cjs/Stream/api/zipWithChunks.cjs.map +1 -1
- package/_cjs/Stream/api.cjs +8 -7
- package/_cjs/Stream/api.cjs.map +1 -1
- package/_cjs/Stream/definition.cjs +3 -4
- package/_cjs/Stream/definition.cjs.map +1 -1
- package/_cjs/Stream/internal/DebounceState.cjs +5 -5
- package/_cjs/Stream/internal/DebounceState.cjs.map +1 -1
- package/_cjs/Stream/internal/Handoff.cjs +18 -17
- package/_cjs/Stream/internal/Handoff.cjs.map +1 -1
- package/_cjs/Stream/internal/SinkEndReason.cjs +5 -12
- package/_cjs/Stream/internal/SinkEndReason.cjs.map +1 -1
- package/_cjs/Stream/internal/Take.cjs +3 -0
- package/_cjs/Stream/internal/Take.cjs.map +1 -1
- package/_cjs/Subject/Atomic.cjs +45 -15
- package/_cjs/Subject/Atomic.cjs.map +1 -1
- package/_cjs/Subject/DeferredRef.cjs +56 -0
- package/_cjs/Subject/DeferredRef.cjs.map +1 -0
- package/_cjs/Subject/Hold.cjs +38 -0
- package/_cjs/Subject/Hold.cjs.map +1 -0
- package/_cjs/Subject/RefSubject/Atomic.cjs +171 -0
- package/_cjs/Subject/RefSubject/Atomic.cjs.map +1 -0
- package/_cjs/Subject/RefSubject/Derived.cjs +103 -0
- package/_cjs/Subject/RefSubject/Derived.cjs.map +1 -0
- package/_cjs/Subject/RefSubject/RefSubject.cjs +18 -0
- package/_cjs/Subject/RefSubject/RefSubject.cjs.map +1 -0
- package/_cjs/Subject/RefSubject/constructors.cjs +30 -0
- package/_cjs/Subject/RefSubject/constructors.cjs.map +1 -0
- package/_cjs/Subject/RefSubject.cjs +2 -0
- package/_cjs/Subject/RefSubject.cjs.map +1 -0
- package/_cjs/Subject/definition.cjs +11 -1
- package/_cjs/Subject/definition.cjs.map +1 -1
- package/_cjs/Subject.cjs +33 -0
- package/_cjs/Subject.cjs.map +1 -1
- package/_cjs/SubscriptionRef.cjs +4 -5
- package/_cjs/SubscriptionRef.cjs.map +1 -1
- package/_cjs/Supervisor/constructors.cjs +3 -11
- package/_cjs/Supervisor/constructors.cjs.map +1 -1
- package/_cjs/Supervisor/definition.cjs +10 -4
- package/_cjs/Supervisor/definition.cjs.map +1 -1
- package/_cjs/SupervisorPatch.cjs +9 -12
- package/_cjs/SupervisorPatch.cjs.map +1 -1
- package/_cjs/TExit/definition.cjs +19 -18
- package/_cjs/TExit/definition.cjs.map +1 -1
- package/_cjs/TReentrantLock/definition.cjs +8 -3
- package/_cjs/TReentrantLock/definition.cjs.map +1 -1
- package/_cjs/TRef/definition.cjs +6 -6
- package/_cjs/TRef/definition.cjs.map +1 -1
- package/_cjs/internal/BackgroundScheduler.cjs +16 -16
- package/_cjs/internal/BackgroundScheduler.cjs.map +1 -1
- package/_cjs/internal/HashedPair.cjs +2 -0
- package/_cjs/internal/HashedPair.cjs.map +1 -1
- package/_cjs/internal/Hub.cjs +39 -15
- package/_cjs/internal/Hub.cjs.map +1 -1
- package/_cjs/internal/IsFatal.cjs +7 -11
- package/_cjs/internal/IsFatal.cjs.map +1 -1
- package/_cjs/internal/MutableQueue.cjs +14 -11
- package/_cjs/internal/MutableQueue.cjs.map +1 -1
- package/_cjs/internal/Scheduler.cjs +4 -8
- package/_cjs/internal/Scheduler.cjs.map +1 -1
- package/_cjs/internal/StackTraceBuilder.cjs +2 -4
- package/_cjs/internal/StackTraceBuilder.cjs.map +1 -1
- package/_mjs/Cached/api.mjs +8 -2
- package/_mjs/Cached/api.mjs.map +1 -1
- package/_mjs/Cached/definition.mjs +1 -5
- package/_mjs/Cached/definition.mjs.map +1 -1
- package/_mjs/CancellerState.mjs +4 -7
- package/_mjs/CancellerState.mjs.map +1 -1
- package/_mjs/Channel/UpstreamPullRequest/definition.mjs +4 -2
- package/_mjs/Channel/UpstreamPullRequest/definition.mjs.map +1 -1
- package/_mjs/Channel/api.mjs +2 -3
- package/_mjs/Channel/api.mjs.map +1 -1
- package/_mjs/Channel/definition.mjs +21 -15
- package/_mjs/Channel/definition.mjs.map +1 -1
- package/_mjs/Channel/internal/ChannelExecutor.mjs +35 -11
- package/_mjs/Channel/internal/ChannelExecutor.mjs.map +1 -1
- package/_mjs/Channel/internal/ChannelState.mjs +15 -8
- package/_mjs/Channel/internal/ChannelState.mjs.map +1 -1
- package/_mjs/Channel/internal/MergeDecision.mjs +5 -7
- package/_mjs/Channel/internal/MergeDecision.mjs.map +1 -1
- package/_mjs/Channel/internal/MergeState.mjs +7 -3
- package/_mjs/Channel/internal/MergeState.mjs.map +1 -1
- package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs +49 -42
- package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs.map +1 -1
- package/_mjs/Clock/live.mjs +1 -4
- package/_mjs/Clock/live.mjs.map +1 -1
- package/_mjs/CountdownLatch.mjs +21 -11
- package/_mjs/CountdownLatch.mjs.map +1 -1
- package/_mjs/Differ/api.mjs +3 -12
- package/_mjs/Differ/api.mjs.map +1 -1
- package/_mjs/Differ/definition.mjs +1 -5
- package/_mjs/Differ/definition.mjs.map +1 -1
- package/_mjs/Fiber/FiberMessage.mjs +6 -3
- package/_mjs/Fiber/FiberMessage.mjs.map +1 -1
- package/_mjs/Fiber/FiberRuntime.mjs +66 -61
- package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
- package/_mjs/Fiber/definition.mjs +9 -5
- package/_mjs/Fiber/definition.mjs.map +1 -1
- package/_mjs/FiberDescriptor.mjs +3 -0
- package/_mjs/FiberDescriptor.mjs.map +1 -1
- package/_mjs/FiberRef/definition.mjs +9 -6
- package/_mjs/FiberRef/definition.mjs.map +1 -1
- package/_mjs/FiberRefs/Patch.mjs +13 -13
- package/_mjs/FiberRefs/Patch.mjs.map +1 -1
- package/_mjs/FiberScope/definition.mjs +2 -0
- package/_mjs/FiberScope/definition.mjs.map +1 -1
- package/_mjs/FiberSet.mjs +4 -3
- package/_mjs/FiberSet.mjs.map +1 -1
- package/_mjs/FiberStatus/definition.mjs +12 -9
- package/_mjs/FiberStatus/definition.mjs.map +1 -1
- package/_mjs/Future/State.mjs +8 -7
- package/_mjs/Future/State.mjs.map +1 -1
- package/_mjs/Future/definition.mjs +3 -3
- package/_mjs/Future/definition.mjs.map +1 -1
- package/_mjs/Hub/api.mjs +61 -44
- package/_mjs/Hub/api.mjs.map +1 -1
- package/_mjs/Hub/definition.mjs +3 -7
- package/_mjs/Hub/definition.mjs.map +1 -1
- package/_mjs/Hub/internal.mjs +130 -110
- package/_mjs/Hub/internal.mjs.map +1 -1
- package/_mjs/IO/api/foreachExec.mjs +27 -4
- package/_mjs/IO/api/foreachExec.mjs.map +1 -1
- package/_mjs/IO/api/transplant.mjs +8 -7
- package/_mjs/IO/api/transplant.mjs.map +1 -1
- package/_mjs/IO/api.mjs +9 -4
- package/_mjs/IO/api.mjs.map +1 -1
- package/_mjs/IO/definition.mjs +7 -11
- package/_mjs/IO/definition.mjs.map +1 -1
- package/_mjs/IO/runtime.mjs +64 -61
- package/_mjs/IO/runtime.mjs.map +1 -1
- package/_mjs/InterruptStatus/definition.mjs +1 -0
- package/_mjs/InterruptStatus/definition.mjs.map +1 -1
- package/_mjs/Layer/MemoMap.mjs +25 -24
- package/_mjs/Layer/MemoMap.mjs.map +1 -1
- package/_mjs/Layer/definition.mjs +29 -12
- package/_mjs/Layer/definition.mjs.map +1 -1
- package/_mjs/LogLevel.mjs +3 -0
- package/_mjs/LogLevel.mjs.map +1 -1
- package/_mjs/LogSpan.mjs +2 -0
- package/_mjs/LogSpan.mjs.map +1 -1
- package/_mjs/Logger/definition.mjs +1 -0
- package/_mjs/Logger/definition.mjs.map +1 -1
- package/_mjs/MVar/definition.mjs +2 -3
- package/_mjs/MVar/definition.mjs.map +1 -1
- package/_mjs/Push/Bounds.mjs +2 -0
- package/_mjs/Push/Bounds.mjs.map +1 -0
- package/_mjs/Push/FlattenStrategy.mjs +87 -0
- package/_mjs/Push/FlattenStrategy.mjs.map +1 -0
- package/_mjs/Push/IndexedBuffer.mjs +65 -0
- package/_mjs/Push/IndexedBuffer.mjs.map +1 -0
- package/_mjs/Push/MergeStrategy.mjs +36 -0
- package/_mjs/Push/MergeStrategy.mjs.map +1 -0
- package/_mjs/Push/Operator/IOLoopOperator.mjs +208 -0
- package/_mjs/Push/Operator/IOLoopOperator.mjs.map +1 -0
- package/_mjs/Push/Operator/IOOperator.mjs +91 -0
- package/_mjs/Push/Operator/IOOperator.mjs.map +1 -0
- package/_mjs/Push/Operator/LoopOperator.mjs +151 -0
- package/_mjs/Push/Operator/LoopOperator.mjs.map +1 -0
- package/_mjs/Push/Operator/SyncOperator.mjs +67 -0
- package/_mjs/Push/Operator/SyncOperator.mjs.map +1 -0
- package/_mjs/Push/Operator.mjs +2 -0
- package/_mjs/Push/Operator.mjs.map +1 -0
- package/_mjs/Push/Producer/IOProducer.mjs +60 -0
- package/_mjs/Push/Producer/IOProducer.mjs.map +1 -0
- package/_mjs/Push/Producer/SyncProducer.mjs +94 -0
- package/_mjs/Push/Producer/SyncProducer.mjs.map +1 -0
- package/_mjs/Push/Producer.mjs +2 -0
- package/_mjs/Push/Producer.mjs.map +1 -0
- package/_mjs/Push/Sink.mjs +225 -0
- package/_mjs/Push/Sink.mjs.map +1 -0
- package/_mjs/Push/api.mjs +340 -348
- package/_mjs/Push/api.mjs.map +1 -1
- package/_mjs/Push/definition.mjs +75 -21
- package/_mjs/Push/definition.mjs.map +1 -1
- package/_mjs/Push/internal.mjs +30 -26
- package/_mjs/Push/internal.mjs.map +1 -1
- package/_mjs/Push.mjs +7 -1
- package/_mjs/Push.mjs.map +1 -1
- package/_mjs/Queue/api/dimapIO.mjs +74 -32
- package/_mjs/Queue/api/dimapIO.mjs.map +1 -1
- package/_mjs/Queue/api/filterInputIO.mjs +51 -25
- package/_mjs/Queue/api/filterInputIO.mjs.map +1 -1
- package/_mjs/Queue/api/filterOutputIO.mjs +60 -30
- package/_mjs/Queue/api/filterOutputIO.mjs.map +1 -1
- package/_mjs/Queue/api/zipWithIO.mjs +27 -10
- package/_mjs/Queue/api/zipWithIO.mjs.map +1 -1
- package/_mjs/Queue/definition.mjs +3 -7
- package/_mjs/Queue/definition.mjs.map +1 -1
- package/_mjs/Queue/internal.mjs +73 -62
- package/_mjs/Queue/internal.mjs.map +1 -1
- package/_mjs/Queue/strategy.mjs +1 -3
- package/_mjs/Queue/strategy.mjs.map +1 -1
- package/_mjs/Random/live.mjs +4 -3
- package/_mjs/Random/live.mjs.map +1 -1
- package/_mjs/Ref/Atomic.mjs +2 -3
- package/_mjs/Ref/Atomic.mjs.map +1 -1
- package/_mjs/Ref/Derived.mjs +2 -3
- package/_mjs/Ref/Derived.mjs.map +1 -1
- package/_mjs/Ref/DerivedAll.mjs +2 -3
- package/_mjs/Ref/DerivedAll.mjs.map +1 -1
- package/_mjs/Ref/Synchronized/definition.mjs +16 -15
- package/_mjs/Ref/Synchronized/definition.mjs.map +1 -1
- package/_mjs/Ref/definition.mjs +1 -5
- package/_mjs/Ref/definition.mjs.map +1 -1
- package/_mjs/Reloadable/definition.mjs +2 -0
- package/_mjs/Reloadable/definition.mjs.map +1 -1
- package/_mjs/STM/definition.mjs +29 -24
- package/_mjs/STM/definition.mjs.map +1 -1
- package/_mjs/STM/driver.mjs +5 -0
- package/_mjs/STM/driver.mjs.map +1 -1
- package/_mjs/STM/internal/Entry.mjs +8 -5
- package/_mjs/STM/internal/Entry.mjs.map +1 -1
- package/_mjs/STM/internal/TryCommit.mjs +6 -7
- package/_mjs/STM/internal/TryCommit.mjs.map +1 -1
- package/_mjs/STM/internal/Versioned.mjs +2 -3
- package/_mjs/STM/internal/Versioned.mjs.map +1 -1
- package/_mjs/Schedule/Decision.mjs +3 -4
- package/_mjs/Schedule/Decision.mjs.map +1 -1
- package/_mjs/Schedule/Driver.mjs +4 -0
- package/_mjs/Schedule/Driver.mjs.map +1 -1
- package/_mjs/Schedule/api.mjs +2 -5
- package/_mjs/Schedule/api.mjs.map +1 -1
- package/_mjs/Schedule/definition.mjs +3 -1
- package/_mjs/Schedule/definition.mjs.map +1 -1
- package/_mjs/Scope/ReleaseMap/definition.mjs +8 -2
- package/_mjs/Scope/ReleaseMap/definition.mjs.map +1 -1
- package/_mjs/Scope/api.mjs +23 -8
- package/_mjs/Scope/api.mjs.map +1 -1
- package/_mjs/Scope/definition.mjs +2 -6
- package/_mjs/Scope/definition.mjs.map +1 -1
- package/_mjs/ScopedRef/api.mjs +8 -3
- package/_mjs/ScopedRef/api.mjs.map +1 -1
- package/_mjs/ScopedRef/definition.mjs +1 -5
- package/_mjs/ScopedRef/definition.mjs.map +1 -1
- package/_mjs/Semaphore/Reservation.mjs +2 -0
- package/_mjs/Semaphore/Reservation.mjs.map +1 -1
- package/_mjs/Semaphore/definition.mjs +42 -38
- package/_mjs/Semaphore/definition.mjs.map +1 -1
- package/_mjs/Sink/definition.mjs +3 -3
- package/_mjs/Sink/definition.mjs.map +1 -1
- package/_mjs/State/api.mjs +1 -4
- package/_mjs/State/api.mjs.map +1 -1
- package/_mjs/State/definition.mjs +1 -5
- package/_mjs/State/definition.mjs.map +1 -1
- package/_mjs/State/internal.mjs +1 -5
- package/_mjs/State/internal.mjs.map +1 -1
- package/_mjs/Stream/api/zipAllWith.mjs +7 -11
- package/_mjs/Stream/api/zipAllWith.mjs.map +1 -1
- package/_mjs/Stream/api/zipWithChunks.mjs +5 -5
- package/_mjs/Stream/api/zipWithChunks.mjs.map +1 -1
- package/_mjs/Stream/api.mjs +8 -7
- package/_mjs/Stream/api.mjs.map +1 -1
- package/_mjs/Stream/definition.mjs +2 -3
- package/_mjs/Stream/definition.mjs.map +1 -1
- package/_mjs/Stream/internal/DebounceState.mjs +5 -5
- package/_mjs/Stream/internal/DebounceState.mjs.map +1 -1
- package/_mjs/Stream/internal/Handoff.mjs +17 -16
- package/_mjs/Stream/internal/Handoff.mjs.map +1 -1
- package/_mjs/Stream/internal/SinkEndReason.mjs +4 -11
- package/_mjs/Stream/internal/SinkEndReason.mjs.map +1 -1
- package/_mjs/Stream/internal/Take.mjs +3 -0
- package/_mjs/Stream/internal/Take.mjs.map +1 -1
- package/_mjs/Subject/Atomic.mjs +46 -15
- package/_mjs/Subject/Atomic.mjs.map +1 -1
- package/_mjs/Subject/DeferredRef.mjs +48 -0
- package/_mjs/Subject/DeferredRef.mjs.map +1 -0
- package/_mjs/Subject/Hold.mjs +30 -0
- package/_mjs/Subject/Hold.mjs.map +1 -0
- package/_mjs/Subject/RefSubject/Atomic.mjs +163 -0
- package/_mjs/Subject/RefSubject/Atomic.mjs.map +1 -0
- package/_mjs/Subject/RefSubject/Derived.mjs +95 -0
- package/_mjs/Subject/RefSubject/Derived.mjs.map +1 -0
- package/_mjs/Subject/RefSubject/RefSubject.mjs +11 -0
- package/_mjs/Subject/RefSubject/RefSubject.mjs.map +1 -0
- package/_mjs/Subject/RefSubject/constructors.mjs +23 -0
- package/_mjs/Subject/RefSubject/constructors.mjs.map +1 -0
- package/_mjs/Subject/RefSubject.mjs +2 -0
- package/_mjs/Subject/RefSubject.mjs.map +1 -0
- package/_mjs/Subject/definition.mjs +9 -0
- package/_mjs/Subject/definition.mjs.map +1 -1
- package/_mjs/Subject.mjs +3 -0
- package/_mjs/Subject.mjs.map +1 -1
- package/_mjs/SubscriptionRef.mjs +4 -5
- package/_mjs/SubscriptionRef.mjs.map +1 -1
- package/_mjs/Supervisor/constructors.mjs +3 -11
- package/_mjs/Supervisor/constructors.mjs.map +1 -1
- package/_mjs/Supervisor/definition.mjs +10 -4
- package/_mjs/Supervisor/definition.mjs.map +1 -1
- package/_mjs/SupervisorPatch.mjs +9 -12
- package/_mjs/SupervisorPatch.mjs.map +1 -1
- package/_mjs/TExit/definition.mjs +19 -18
- package/_mjs/TExit/definition.mjs.map +1 -1
- package/_mjs/TReentrantLock/definition.mjs +8 -3
- package/_mjs/TReentrantLock/definition.mjs.map +1 -1
- package/_mjs/TRef/definition.mjs +6 -6
- package/_mjs/TRef/definition.mjs.map +1 -1
- package/_mjs/internal/BackgroundScheduler.mjs +16 -16
- package/_mjs/internal/BackgroundScheduler.mjs.map +1 -1
- package/_mjs/internal/HashedPair.mjs +2 -0
- package/_mjs/internal/HashedPair.mjs.map +1 -1
- package/_mjs/internal/Hub.mjs +39 -15
- package/_mjs/internal/Hub.mjs.map +1 -1
- package/_mjs/internal/IsFatal.mjs +7 -11
- package/_mjs/internal/IsFatal.mjs.map +1 -1
- package/_mjs/internal/MutableQueue.mjs +14 -11
- package/_mjs/internal/MutableQueue.mjs.map +1 -1
- package/_mjs/internal/Scheduler.mjs +4 -8
- package/_mjs/internal/Scheduler.mjs.map +1 -1
- package/_mjs/internal/StackTraceBuilder.mjs +2 -4
- package/_mjs/internal/StackTraceBuilder.mjs.map +1 -1
- package/_src/Cached/api.ts +8 -2
- package/_src/Channel/internal/SingleProducerAsyncInput.ts +6 -4
- package/_src/CountdownLatch.ts +24 -13
- package/_src/Fiber/FiberRuntime.ts +4 -2
- package/_src/FiberRef/definition.ts +1 -1
- package/_src/Hub/api.ts +85 -54
- package/_src/Hub/internal.ts +36 -20
- package/_src/IO/api/foreachExec.ts +47 -0
- package/_src/IO/api.ts +0 -5
- package/_src/Push/Bounds.ts +4 -0
- package/_src/Push/FlattenStrategy.ts +137 -0
- package/_src/Push/IndexedBuffer.ts +79 -0
- package/_src/Push/MergeStrategy.ts +59 -0
- package/_src/Push/Operator/IOLoopOperator.ts +413 -0
- package/_src/Push/Operator/IOOperator.ts +173 -0
- package/_src/Push/Operator/LoopOperator.ts +242 -0
- package/_src/Push/Operator/SyncOperator.ts +107 -0
- package/_src/Push/Operator.ts +7 -0
- package/_src/Push/Producer/IOProducer.ts +83 -0
- package/_src/Push/Producer/SyncProducer.ts +105 -0
- package/_src/Push/Producer.ts +0 -0
- package/_src/Push/Sink.ts +302 -0
- package/_src/Push/api.ts +389 -515
- package/_src/Push/definition.ts +216 -23
- package/_src/Push/internal.ts +11 -0
- package/_src/Push.ts +7 -1
- package/_src/Queue/api/dimapIO.ts +57 -19
- package/_src/Queue/api/filterInputIO.ts +36 -12
- package/_src/Queue/api/filterOutputIO.ts +42 -18
- package/_src/Queue/api/zipWithIO.ts +23 -11
- package/_src/Queue/internal.ts +9 -3
- package/_src/Ref/Synchronized/definition.ts +81 -37
- package/_src/Ref/definition.ts +26 -0
- package/_src/Schedule/api.ts +1 -1
- package/_src/Scope/api.ts +22 -0
- package/_src/ScopedRef/api.ts +6 -2
- package/_src/Semaphore/definition.ts +4 -2
- package/_src/Sink/definition.ts +4 -5
- package/_src/Stream/api.ts +0 -2
- package/_src/Stream/definition.ts +0 -1
- package/_src/Subject/Atomic.ts +68 -11
- package/_src/Subject/DeferredRef.ts +44 -0
- package/_src/Subject/Hold.ts +48 -0
- package/_src/Subject/RefSubject/Atomic.ts +233 -0
- package/_src/Subject/RefSubject/Derived.ts +184 -0
- package/_src/Subject/RefSubject/RefSubject.ts +100 -0
- package/_src/Subject/RefSubject/constructors.ts +27 -0
- package/_src/Subject/RefSubject.ts +7 -0
- package/_src/Subject/definition.ts +21 -3
- package/_src/Subject.ts +6 -3
- package/_src/SubscriptionRef.ts +1 -1
- package/_src/Supervisor/constructors.ts +0 -2
- package/_src/Supervisor/definition.ts +2 -1
- package/_src/TReentrantLock/api.ts +1 -1
- package/_src/global.ts +8 -0
- package/_src/index.ts +49 -50
- package/_src/internal/MutableQueue.ts +5 -3
- package/global.d.ts +8 -0
- package/index.d.ts +0 -1
- package/internal/MutableQueue.d.ts +2 -2
- package/package.json +4 -4
- package/RefSubject/Atomic.d.ts +0 -34
- package/RefSubject/Synchronized/api.d.ts +0 -9
- package/RefSubject/Synchronized/definition.d.ts +0 -39
- package/RefSubject/api.d.ts +0 -120
- package/RefSubject/definition.d.ts +0 -52
- package/RefSubject.d.ts +0 -3
- package/_cjs/RefSubject/Atomic.cjs +0 -107
- package/_cjs/RefSubject/Atomic.cjs.map +0 -1
- package/_cjs/RefSubject/Synchronized/api.cjs +0 -22
- package/_cjs/RefSubject/Synchronized/api.cjs.map +0 -1
- package/_cjs/RefSubject/Synchronized/definition.cjs +0 -55
- package/_cjs/RefSubject/Synchronized/definition.cjs.map +0 -1
- package/_cjs/RefSubject/api.cjs +0 -251
- package/_cjs/RefSubject/api.cjs.map +0 -1
- package/_cjs/RefSubject/definition.cjs +0 -26
- package/_cjs/RefSubject/definition.cjs.map +0 -1
- package/_cjs/RefSubject.cjs +0 -39
- package/_cjs/RefSubject.cjs.map +0 -1
- package/_mjs/RefSubject/Atomic.mjs +0 -99
- package/_mjs/RefSubject/Atomic.mjs.map +0 -1
- package/_mjs/RefSubject/Synchronized/api.mjs +0 -15
- package/_mjs/RefSubject/Synchronized/api.mjs.map +0 -1
- package/_mjs/RefSubject/Synchronized/definition.mjs +0 -47
- package/_mjs/RefSubject/Synchronized/definition.mjs.map +0 -1
- package/_mjs/RefSubject/api.mjs +0 -229
- package/_mjs/RefSubject/api.mjs.map +0 -1
- package/_mjs/RefSubject/definition.mjs +0 -19
- package/_mjs/RefSubject/definition.mjs.map +0 -1
- package/_mjs/RefSubject.mjs +0 -5
- package/_mjs/RefSubject.mjs.map +0 -1
- package/_src/RefSubject/Atomic.ts +0 -129
- package/_src/RefSubject/Synchronized/api.ts +0 -14
- package/_src/RefSubject/Synchronized/definition.ts +0 -76
- package/_src/RefSubject/api.ts +0 -253
- package/_src/RefSubject/definition.ts +0 -70
- package/_src/RefSubject.ts +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackTraceBuilder.mjs","names":["StackTraceBuilder","
|
|
1
|
+
{"version":3,"file":"StackTraceBuilder.mjs","names":["StackTraceBuilder","last","undefined","builder","tsplus_module_1","append","trace","tsplus_module_2","NoLocation","result"],"sources":["../../_src/internal/StackTraceBuilder.ts"],"sourcesContent":[null],"mappings":";;AAAA,OAAM,MAAOA,iBAAiB;EACpBC,IAAI,GAAiCC,SAAS;EAC9CC,OAAO,gBAA8BC,eAAA,CAAAD,OAAA,EAAc;EAE3DE,MAAMA,CAACC,KAA+B;IACpC,IAAIA,KAAK,IAAI,IAAI,IAAIA,KAAK,KAAK,IAAI,CAACL,IAAI,IAAIK,KAAK,KAAAC,eAAA,CAAAC,UAA4B,EAAE;MAC7E,IAAI,CAACL,OAAO,CAACE,MAAM,CAACC,KAAK,CAAC;MAC1B,IAAI,CAACL,IAAI,GAAGK,KAAK;IACnB;EACF;EAEAG,MAAMA,CAAA;IACJ,OAAO,IAAI,CAACN,OAAO,CAACM,MAAM,EAAE;EAC9B","ignoreList":[]}
|
package/_src/Cached/api.ts
CHANGED
|
@@ -45,8 +45,14 @@ class Manual<Error, Resource> extends CachedInternal<Error, Resource> {
|
|
|
45
45
|
) {
|
|
46
46
|
super();
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
|
|
49
|
+
get get(): FIO<Error, Resource> {
|
|
50
|
+
return this.ref.get.flatMap(IO.fromExitNow);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get refresh(): FIO<Error, void> {
|
|
54
|
+
return this.ref.set(this.acquire.map(Exit.succeed));
|
|
55
|
+
}
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
/**
|
|
@@ -56,6 +56,10 @@ export class SingleProducerAsyncInput<Err, Elem, Done>
|
|
|
56
56
|
{
|
|
57
57
|
constructor(readonly ref: Ref<State<Err, Elem, Done>>) {}
|
|
58
58
|
|
|
59
|
+
get awaitRead(): UIO<void> {
|
|
60
|
+
return this.ref.modify((s) => (s._stateTag === StateTag.Empty ? [s.notifyProducer.await, s] : [IO.unit, s]));
|
|
61
|
+
}
|
|
62
|
+
|
|
59
63
|
emit(el: Elem): UIO<unknown> {
|
|
60
64
|
return Future.make<never, void>().flatMap(
|
|
61
65
|
(p) =>
|
|
@@ -167,10 +171,8 @@ export class SingleProducerAsyncInput<Err, Elem, Done>
|
|
|
167
171
|
(el) => Exit.succeed(el),
|
|
168
172
|
(d) => Exit.fail(Either.right(d)),
|
|
169
173
|
);
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
s._stateTag === StateTag.Empty ? [s.notifyProducer.await, s] : [IO.unit, s],
|
|
173
|
-
);
|
|
174
|
+
|
|
175
|
+
close = IO.fiberId.flatMap((id) => this.error(Cause.interrupt(id)));
|
|
174
176
|
}
|
|
175
177
|
|
|
176
178
|
/**
|
package/_src/CountdownLatch.ts
CHANGED
|
@@ -7,28 +7,39 @@ export type CountdownLatchTypeId = typeof CountdownLatchTypeId;
|
|
|
7
7
|
*/
|
|
8
8
|
export class CountdownLatch {
|
|
9
9
|
readonly [CountdownLatchTypeId]: CountdownLatchTypeId = CountdownLatchTypeId;
|
|
10
|
+
|
|
10
11
|
constructor(
|
|
11
12
|
private _count: Ref<number>,
|
|
12
13
|
private _waiters: Future<never, void>,
|
|
13
14
|
) {}
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
get await(): UIO<void> {
|
|
17
|
+
return this._waiters.await;
|
|
18
|
+
}
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
get countDown(): UIO<void> {
|
|
21
|
+
return this._count.modify((n) => {
|
|
22
|
+
if (n === 0) {
|
|
23
|
+
return [IO.unit, 0];
|
|
24
|
+
} else if (n === 1) {
|
|
25
|
+
return [this._waiters.succeed(undefined), 0];
|
|
26
|
+
} else {
|
|
27
|
+
return [IO.unit, n - 1];
|
|
28
|
+
}
|
|
29
|
+
}).flatten.asUnit;
|
|
30
|
+
}
|
|
26
31
|
|
|
27
|
-
|
|
32
|
+
get count(): UIO<number> {
|
|
33
|
+
return this._count.get;
|
|
34
|
+
}
|
|
28
35
|
|
|
29
|
-
|
|
36
|
+
get increment(): UIO<void> {
|
|
37
|
+
return this._count.update((n) => n + 1);
|
|
38
|
+
}
|
|
30
39
|
|
|
31
|
-
|
|
40
|
+
get isOpen(): UIO<boolean> {
|
|
41
|
+
return this._count.get.map((count) => count === 0);
|
|
42
|
+
}
|
|
32
43
|
}
|
|
33
44
|
|
|
34
45
|
/**
|
|
@@ -42,8 +42,6 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
|
42
42
|
readonly _A: (_: never) => A;
|
|
43
43
|
};
|
|
44
44
|
|
|
45
|
-
location = this.fiberId.location;
|
|
46
|
-
|
|
47
45
|
get await(): UIO<Exit<E, A>> {
|
|
48
46
|
return IO.defer(this.awaitUnsafe());
|
|
49
47
|
}
|
|
@@ -82,6 +80,10 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
|
82
80
|
});
|
|
83
81
|
}
|
|
84
82
|
|
|
83
|
+
get location(): string | undefined {
|
|
84
|
+
return this.fiberId.location;
|
|
85
|
+
}
|
|
86
|
+
|
|
85
87
|
get poll(): UIO<Maybe<Exit<E, A>>> {
|
|
86
88
|
return IO.succeed(Maybe.fromNullable(this.exitValue()));
|
|
87
89
|
}
|
|
@@ -33,7 +33,7 @@ const fiberRefCounter = globalValue(FiberRefCounterId, () => new AtomicNumber(0)
|
|
|
33
33
|
* @tsplus type fncts.io.FiberRef
|
|
34
34
|
*/
|
|
35
35
|
export class FiberRefInternal<Value, Patch> extends FiberRef<Value> implements Hashable, Equatable {
|
|
36
|
-
readonly _Patch
|
|
36
|
+
declare readonly _Patch: Patch;
|
|
37
37
|
private readonly id = fiberRefCounter.getAndIncrement();
|
|
38
38
|
constructor(
|
|
39
39
|
readonly _initial: Value,
|
package/_src/Hub/api.ts
CHANGED
|
@@ -63,6 +63,18 @@ export function dimap<A, B, C, D>(f: (c: C) => A, g: (b: B) => D, __tsplusTrace?
|
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Transforms messages taken from the hub using the specified effectual
|
|
68
|
+
* function.
|
|
69
|
+
*
|
|
70
|
+
* @tsplus pipeable fncts.io.Hub mapIO
|
|
71
|
+
*/
|
|
72
|
+
export function mapIO<B, RC, EC, C>(f: (b: B) => IO<RC, EC, C>, __tsplusTrace?: string) {
|
|
73
|
+
return <RA, RB, EA, EB, A>(self: PHub<RA, RB, EA, EB, A, B>): PHub<RA, RC | RB, EA, EB | EC, A, C> => {
|
|
74
|
+
return self.dimapIO(IO.succeedNow, f);
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
66
78
|
class DimapIO<RA, RB, RC, RD, EA, EB, EC, ED, A, B, C, D> extends PHubInternal<
|
|
67
79
|
RC | RA,
|
|
68
80
|
RD | RB,
|
|
@@ -71,24 +83,31 @@ class DimapIO<RA, RB, RC, RD, EA, EB, EC, ED, A, B, C, D> extends PHubInternal<
|
|
|
71
83
|
C,
|
|
72
84
|
D
|
|
73
85
|
> {
|
|
86
|
+
declare readonly awaitShutdown;
|
|
87
|
+
declare readonly capacity;
|
|
88
|
+
declare readonly isShutdown;
|
|
89
|
+
declare readonly shutdown;
|
|
90
|
+
declare readonly size;
|
|
91
|
+
|
|
74
92
|
constructor(
|
|
75
93
|
readonly source: PHubInternal<RA, RB, EA, EB, A, B>,
|
|
76
94
|
readonly f: (c: C) => IO<RC, EC, A>,
|
|
77
95
|
readonly g: (b: B) => IO<RD, ED, D>,
|
|
78
96
|
) {
|
|
79
97
|
super();
|
|
98
|
+
this.awaitShutdown = this.source.awaitShutdown;
|
|
99
|
+
this.capacity = this.source.capacity;
|
|
100
|
+
this.isShutdown = this.source.isShutdown;
|
|
101
|
+
this.shutdown = this.source.shutdown;
|
|
102
|
+
this.size = this.source.size;
|
|
80
103
|
}
|
|
81
|
-
|
|
82
|
-
capacity = this.source.capacity;
|
|
83
|
-
isShutdown = this.source.isShutdown;
|
|
84
|
-
shutdown = this.source.shutdown;
|
|
85
|
-
size = this.source.size;
|
|
104
|
+
|
|
86
105
|
get unsafeSize() {
|
|
87
106
|
return this.source.unsafeSize;
|
|
88
107
|
}
|
|
89
|
-
subscribe: IO<Scope, never, PDequeue<RA | RC, RB | RD, EA | EC, EB | ED, C, D>>
|
|
90
|
-
this.source.subscribe.map((queue) => queue.mapIO(this.g))
|
|
91
|
-
|
|
108
|
+
get subscribe(): IO<Scope, never, PDequeue<RA | RC, RB | RD, EA | EC, EB | ED, C, D>> {
|
|
109
|
+
return unsafeCoerce(this.source.subscribe.map((queue) => queue.mapIO(this.g)));
|
|
110
|
+
}
|
|
92
111
|
publish = (c: C) => this.f(c).flatMap((a) => this.source.publish(a));
|
|
93
112
|
publishAll = (cs: Iterable<C>) => IO.foreach(cs, this.f).flatMap((as) => this.source.publishAll(as));
|
|
94
113
|
}
|
|
@@ -122,21 +141,29 @@ export function filterInput<A>(f: (a: A) => boolean, __tsplusTrace?: string) {
|
|
|
122
141
|
}
|
|
123
142
|
|
|
124
143
|
class FilterInputIO<RA, RA1, RB, EA, EA1, EB, A, B> extends PHubInternal<RA | RA1, RB, EA | EA1, EB, A, B> {
|
|
144
|
+
declare readonly awaitShutdown;
|
|
145
|
+
declare readonly capacity;
|
|
146
|
+
declare readonly isShutdown;
|
|
147
|
+
declare readonly shutdown;
|
|
148
|
+
declare readonly size;
|
|
149
|
+
|
|
125
150
|
constructor(
|
|
126
151
|
readonly source: PHubInternal<RA, RB, EA, EB, A, B>,
|
|
127
152
|
readonly f: (a: A) => IO<RA1, EA1, boolean>,
|
|
128
153
|
) {
|
|
129
154
|
super();
|
|
155
|
+
this.awaitShutdown = this.source.awaitShutdown;
|
|
156
|
+
this.capacity = this.source.capacity;
|
|
157
|
+
this.isShutdown = this.source.isShutdown;
|
|
158
|
+
this.shutdown = this.source.shutdown;
|
|
159
|
+
this.size = this.source.size;
|
|
130
160
|
}
|
|
131
|
-
awaitShutdown = this.source.awaitShutdown;
|
|
132
|
-
capacity = this.source.capacity;
|
|
133
|
-
isShutdown = this.source.isShutdown;
|
|
134
|
-
shutdown = this.source.shutdown;
|
|
135
|
-
size = this.source.size;
|
|
136
161
|
get unsafeSize() {
|
|
137
162
|
return this.source.unsafeSize;
|
|
138
163
|
}
|
|
139
|
-
subscribe
|
|
164
|
+
get subscribe() {
|
|
165
|
+
return this.source.subscribe;
|
|
166
|
+
}
|
|
140
167
|
publish = (a: A) => this.f(a).flatMap((b) => (b ? this.source.publish(a) : IO.succeedNow(false)));
|
|
141
168
|
publishAll = (as: Iterable<A>) =>
|
|
142
169
|
IO.filter(as, this.f).flatMap((as) => (as.isNonEmpty ? this.source.publishAll(as) : IO.succeedNow(false)));
|
|
@@ -166,39 +193,46 @@ export function filterOutput<B>(f: (b: B) => boolean, __tsplusTrace?: string) {
|
|
|
166
193
|
};
|
|
167
194
|
}
|
|
168
195
|
|
|
196
|
+
/**
|
|
197
|
+
* Filters messages taken from the hub using the specified effectual
|
|
198
|
+
* function.
|
|
199
|
+
*
|
|
200
|
+
* @tsplus pipeable fncts.io.Hub filterOutputIO
|
|
201
|
+
*/
|
|
202
|
+
export function filterOutputIO<B, R1, E1>(f: (a: B) => IO<R1, E1, boolean>, __tsplusTrace?: string) {
|
|
203
|
+
return <RA, RB, EA, EB, A>(source: PHub<RA, RB, EA, EB, A, B>): PHub<RA, RB | R1, EA, EB | E1, A, B> => {
|
|
204
|
+
concrete(source);
|
|
205
|
+
return new FilterOutputIO(source, f);
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
169
209
|
class FilterOutputIO<RA, RB, RB1, EA, EB, EB1, A, B> extends PHubInternal<RA, RB | RB1, EA, EB | EB1, A, B> {
|
|
210
|
+
declare readonly awaitShutdown;
|
|
211
|
+
declare readonly capacity;
|
|
212
|
+
declare readonly isShutdown;
|
|
213
|
+
declare readonly shutdown;
|
|
214
|
+
declare readonly size;
|
|
170
215
|
constructor(
|
|
171
216
|
readonly source: PHubInternal<RA, RB, EA, EB, A, B>,
|
|
172
217
|
readonly f: (a: B) => IO<RB1, EB1, boolean>,
|
|
173
218
|
) {
|
|
174
219
|
super();
|
|
220
|
+
this.awaitShutdown = this.source.awaitShutdown;
|
|
221
|
+
this.capacity = this.source.capacity;
|
|
222
|
+
this.isShutdown = this.source.isShutdown;
|
|
223
|
+
this.shutdown = this.source.shutdown;
|
|
224
|
+
this.size = this.source.size;
|
|
175
225
|
}
|
|
176
|
-
awaitShutdown = this.source.awaitShutdown;
|
|
177
|
-
capacity = this.source.capacity;
|
|
178
|
-
isShutdown = this.source.isShutdown;
|
|
179
|
-
shutdown = this.source.shutdown;
|
|
180
|
-
size = this.source.size;
|
|
181
226
|
get unsafeSize() {
|
|
182
227
|
return this.source.unsafeSize;
|
|
183
228
|
}
|
|
184
|
-
|
|
229
|
+
get subscribe() {
|
|
230
|
+
return this.source.subscribe.map((queue) => queue.filterOutputIO(this.f));
|
|
231
|
+
}
|
|
185
232
|
publish = (a: A) => this.source.publish(a);
|
|
186
233
|
publishAll = (as: Iterable<A>) => this.source.publishAll(as);
|
|
187
234
|
}
|
|
188
235
|
|
|
189
|
-
/**
|
|
190
|
-
* Filters messages taken from the hub using the specified effectual
|
|
191
|
-
* function.
|
|
192
|
-
*
|
|
193
|
-
* @tsplus pipeable fncts.io.Hub filterOutputIO
|
|
194
|
-
*/
|
|
195
|
-
export function filterOutputIO<B, R1, E1>(f: (a: B) => IO<R1, E1, boolean>, __tsplusTrace?: string) {
|
|
196
|
-
return <RA, RB, EA, EB, A>(source: PHub<RA, RB, EA, EB, A, B>): PHub<RA, RB | R1, EA, EB | E1, A, B> => {
|
|
197
|
-
concrete(source);
|
|
198
|
-
return new FilterOutputIO(source, f);
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
|
|
202
236
|
/**
|
|
203
237
|
* Checks whether the hub is shut down.
|
|
204
238
|
*
|
|
@@ -275,18 +309,6 @@ export function map<B, C>(f: (b: B) => C, __tsplusTrace?: string) {
|
|
|
275
309
|
};
|
|
276
310
|
}
|
|
277
311
|
|
|
278
|
-
/**
|
|
279
|
-
* Transforms messages taken from the hub using the specified effectual
|
|
280
|
-
* function.
|
|
281
|
-
*
|
|
282
|
-
* @tsplus pipeable fncts.io.Hub mapIO
|
|
283
|
-
*/
|
|
284
|
-
export function mapIO<B, RC, EC, C>(f: (b: B) => IO<RC, EC, C>, __tsplusTrace?: string) {
|
|
285
|
-
return <RA, RB, EA, EB, A>(self: PHub<RA, RB, EA, EB, A, B>): PHub<RA, RC | RB, EA, EB | EC, A, C> => {
|
|
286
|
-
return self.dimapIO(IO.succeedNow, f);
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
|
|
290
312
|
/**
|
|
291
313
|
* Publishes a message to the hub, returning whether the message was
|
|
292
314
|
* published to the hub.
|
|
@@ -359,15 +381,24 @@ class ToQueue<RA, RB, EA, EB, A, B> implements PEnqueue<RA, RB, EA, EB, A, B> {
|
|
|
359
381
|
readonly _A: (_: A) => void;
|
|
360
382
|
readonly _B: (_: never) => B;
|
|
361
383
|
};
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
384
|
+
|
|
385
|
+
readonly awaitShutdown;
|
|
386
|
+
readonly capacity;
|
|
387
|
+
readonly isShutdown;
|
|
388
|
+
readonly shutdown;
|
|
389
|
+
readonly size;
|
|
390
|
+
|
|
391
|
+
constructor(readonly source: PHubInternal<RA, RB, EA, EB, A, B>) {
|
|
392
|
+
this.awaitShutdown = this.source.awaitShutdown;
|
|
393
|
+
this.capacity = this.source.capacity;
|
|
394
|
+
this.isShutdown = this.source.isShutdown;
|
|
395
|
+
this.shutdown = this.source.shutdown;
|
|
396
|
+
this.size = this.source.size;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
offer = (a: A): IO<RA, EA, boolean> => this.source.publish(a);
|
|
400
|
+
offerAll = (as: Iterable<A>): IO<RA, EA, boolean> => this.source.publishAll(as);
|
|
401
|
+
takeUpTo = (): IO<never, never, Conc<never>> => IO.succeedNow(Conc.empty());
|
|
371
402
|
}
|
|
372
403
|
|
|
373
404
|
/**
|
package/_src/Hub/internal.ts
CHANGED
|
@@ -267,20 +267,28 @@ class UnsafeSubscription<A> extends QueueInternal<never, never, never, never, A,
|
|
|
267
267
|
super();
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
-
awaitShutdown: UIO<void>
|
|
270
|
+
get awaitShutdown(): UIO<void> {
|
|
271
|
+
return this.shutdownHook.await;
|
|
272
|
+
}
|
|
271
273
|
|
|
272
|
-
capacity: number
|
|
274
|
+
get capacity(): number {
|
|
275
|
+
return this.hub.capacity;
|
|
276
|
+
}
|
|
273
277
|
|
|
274
|
-
isShutdown: UIO<boolean>
|
|
278
|
+
get isShutdown(): UIO<boolean> {
|
|
279
|
+
return IO.succeed(() => this.shutdownFlag.get);
|
|
280
|
+
}
|
|
275
281
|
|
|
276
|
-
shutdown: UIO<void>
|
|
277
|
-
IO.
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
282
|
+
get shutdown(): UIO<void> {
|
|
283
|
+
return IO.fiberId.flatMap((fiberId) =>
|
|
284
|
+
IO.defer(() => {
|
|
285
|
+
this.shutdownFlag.set(true);
|
|
286
|
+
return IO.foreachConcurrent(this.pollers.unsafeDequeueAll, (fiber) => fiber.interruptAs(fiberId))
|
|
287
|
+
.zipRight(IO.succeed(this.subscription.unsubscribe()))
|
|
288
|
+
.whenIO(this.shutdownHook.succeed(undefined));
|
|
289
|
+
}),
|
|
290
|
+
);
|
|
291
|
+
}
|
|
284
292
|
|
|
285
293
|
get unsafeSize(): Maybe<number> {
|
|
286
294
|
if (this.shutdownFlag.get) {
|
|
@@ -418,11 +426,17 @@ class UnsafeHub<A> extends PHubInternal<never, never, never, never, A, A> {
|
|
|
418
426
|
super();
|
|
419
427
|
}
|
|
420
428
|
|
|
421
|
-
awaitShutdown
|
|
429
|
+
get awaitShutdown() {
|
|
430
|
+
return this.shutdownHook.await;
|
|
431
|
+
}
|
|
422
432
|
|
|
423
|
-
capacity
|
|
433
|
+
get capacity() {
|
|
434
|
+
return this.hub.capacity;
|
|
435
|
+
}
|
|
424
436
|
|
|
425
|
-
isShutdown
|
|
437
|
+
get isShutdown() {
|
|
438
|
+
return IO.succeed(this.shutdownFlag.get);
|
|
439
|
+
}
|
|
426
440
|
|
|
427
441
|
shutdown = IO.fiberId.flatMap((fiberId) =>
|
|
428
442
|
IO.defer(() => {
|
|
@@ -449,12 +463,14 @@ class UnsafeHub<A> extends PHubInternal<never, never, never, never, A, A> {
|
|
|
449
463
|
return IO.succeed(this.hub.size());
|
|
450
464
|
});
|
|
451
465
|
|
|
452
|
-
subscribe: IO<Scope, never, Queue.Dequeue<A>>
|
|
453
|
-
|
|
454
|
-
this.
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
466
|
+
get subscribe(): IO<Scope, never, Queue.Dequeue<A>> {
|
|
467
|
+
return IO.acquireRelease(
|
|
468
|
+
makeSubscription(this.hub, this.subscribers, this.strategy).tap((dequeue) =>
|
|
469
|
+
this.scope.addFinalizer(dequeue.shutdown),
|
|
470
|
+
),
|
|
471
|
+
(dequeue) => dequeue.shutdown,
|
|
472
|
+
);
|
|
473
|
+
}
|
|
458
474
|
|
|
459
475
|
publish = (a: A): IO<never, never, boolean> =>
|
|
460
476
|
IO.defer(() => {
|
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Applies the function `f` to each element of the `Iterable<A>` in parallel,
|
|
3
|
+
* and returns the results in a new `Conc<B>`.
|
|
4
|
+
*
|
|
5
|
+
* For a sequential version of this method, see `foreach`.
|
|
6
|
+
*
|
|
7
|
+
* @tsplus static fncts.io.IOOps foreachWithIndexDiscardExec
|
|
8
|
+
*/
|
|
9
|
+
export function foreachWithIndexDiscardExec<R, E, A, B>(
|
|
10
|
+
as: Iterable<A>,
|
|
11
|
+
es: ExecutionStrategy,
|
|
12
|
+
f: (index: number, a: A) => IO<R, E, B>,
|
|
13
|
+
__tsplusTrace?: string,
|
|
14
|
+
): IO<R, E, void> {
|
|
15
|
+
return es.match(
|
|
16
|
+
() => IO.foreachWithIndexDiscard(as, f),
|
|
17
|
+
() =>
|
|
18
|
+
IO.withConcurrencyUnboundedMask((restore) => IO.foreachConcurrent(as.zipWithIndex, ([i, a]) => restore(f(i, a)))),
|
|
19
|
+
(fiberBound) =>
|
|
20
|
+
IO.withConcurrencyMask(fiberBound, (restore) =>
|
|
21
|
+
IO.foreachConcurrent(as.zipWithIndex, ([i, a]) => restore(f(i, a))),
|
|
22
|
+
),
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
1
26
|
/**
|
|
2
27
|
* Applies the function `f` to each element of the `Iterable<A>` in parallel,
|
|
3
28
|
* and returns the results in a new `Conc<B>`.
|
|
@@ -18,3 +43,25 @@ export function foreachExec<R, E, A, B>(
|
|
|
18
43
|
(fiberBound) => IO.withConcurrencyMask(fiberBound, (restore) => IO.foreachConcurrent(as, (a) => restore(f(a)))),
|
|
19
44
|
);
|
|
20
45
|
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Applies the function `f` to each element of the `Iterable<A>` in parallel,
|
|
49
|
+
* and returns the results in a new `Conc<B>`.
|
|
50
|
+
*
|
|
51
|
+
* For a sequential version of this method, see `foreach`.
|
|
52
|
+
*
|
|
53
|
+
* @tsplus static fncts.io.IOOps foreachExecDiscard
|
|
54
|
+
*/
|
|
55
|
+
export function foreachDiscardExec<R, E, A, B>(
|
|
56
|
+
as: Iterable<A>,
|
|
57
|
+
es: ExecutionStrategy,
|
|
58
|
+
f: (a: A) => IO<R, E, B>,
|
|
59
|
+
__tsplusTrace?: string,
|
|
60
|
+
): IO<R, E, void> {
|
|
61
|
+
return es.match(
|
|
62
|
+
() => IO.foreachDiscard(as, f),
|
|
63
|
+
() => IO.withConcurrencyUnboundedMask((restore) => IO.foreachConcurrentDiscard(as, (a) => restore(f(a)))),
|
|
64
|
+
(fiberBound) =>
|
|
65
|
+
IO.withConcurrencyMask(fiberBound, (restore) => IO.foreachConcurrentDiscard(as, (a) => restore(f(a)))),
|
|
66
|
+
);
|
|
67
|
+
}
|
package/_src/IO/api.ts
CHANGED
|
@@ -518,13 +518,11 @@ export function filterOrElse<A, B extends A, R1, E1, A1>(
|
|
|
518
518
|
or: (a: Exclude<A, B>) => IO<R1, E1, A1>,
|
|
519
519
|
__tsplusTrace?: string,
|
|
520
520
|
): <R, E>(fa: IO<R, E, A>) => IO<R | R1, E | E1, B | A1>;
|
|
521
|
-
|
|
522
521
|
export function filterOrElse<A, R1, E1, A1>(
|
|
523
522
|
predicate: Predicate<A>,
|
|
524
523
|
or: (a: A) => IO<R1, E1, A1>,
|
|
525
524
|
__tsplusTrace?: string,
|
|
526
525
|
): <R, E>(fa: IO<R, E, A>) => IO<R | R1, E | E1, A | A1>;
|
|
527
|
-
|
|
528
526
|
export function filterOrElse<A>(predicate: Predicate<A>, or: unknown, __tsplusTrace?: string) {
|
|
529
527
|
return <R, E, R1, E1, A1>(fa: IO<R, E, A>): IO<R | R1, E | E1, A | A1> => {
|
|
530
528
|
return fa.flatMap(
|
|
@@ -542,12 +540,10 @@ export function filterOrFail<A, B extends A, E1>(
|
|
|
542
540
|
refinement: Refinement<A, B>,
|
|
543
541
|
failWith: (a: Exclude<A, B>) => E1,
|
|
544
542
|
): <R, E>(fa: IO<R, E, A>) => IO<R, E | E1, B>;
|
|
545
|
-
|
|
546
543
|
export function filterOrFail<A, E1>(
|
|
547
544
|
predicate: Predicate<A>,
|
|
548
545
|
failWith: (a: A) => E1,
|
|
549
546
|
): <R, E>(fa: IO<R, E, A>) => IO<R, E | E1, A>;
|
|
550
|
-
|
|
551
547
|
export function filterOrFail<A>(predicate: Predicate<A>, failWith: unknown, __tsplusTrace?: string) {
|
|
552
548
|
return <R, E, E1>(fa: IO<R, E, A>): IO<R, E | E1, A> => {
|
|
553
549
|
return fa.filterOrElse(predicate, (a) => IO.failNow((failWith as (a: A) => E1)(a)));
|
|
@@ -568,7 +564,6 @@ export function filterOrHalt<A>(
|
|
|
568
564
|
haltWith: (a: A) => unknown,
|
|
569
565
|
__tsplusTrace?: string,
|
|
570
566
|
): <R, E>(fa: IO<R, E, A>) => IO<R, E, A>;
|
|
571
|
-
|
|
572
567
|
export function filterOrHalt<A>(predicate: Predicate<A>, haltWith: unknown, __tsplusTrace?: string) {
|
|
573
568
|
return <R, E>(fa: IO<R, E, A>): IO<R, E, A> => {
|
|
574
569
|
return fa.filterOrElse(predicate, (a) => IO.haltNow((haltWith as (a: A) => unknown)(a)));
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { withScope } from "@fncts/io/Push/internal";
|
|
2
|
+
|
|
3
|
+
type ScopedFork = <R, E, A>(io: IO<R, E, A>) => IO<R | Scope, never, Fiber.Runtime<E, A>>;
|
|
4
|
+
|
|
5
|
+
type Fork = <R>(io: IO<R, never, void>) => IO<R | Scope, never, void>;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @tsplus type fncts.io.Push.FlattenStrategy
|
|
9
|
+
* @tsplus companion fncts.io.Push.FlattenStrategyOps
|
|
10
|
+
*/
|
|
11
|
+
export abstract class FlattenStrategy {
|
|
12
|
+
abstract withFork<R>(
|
|
13
|
+
f: (fork: Fork, scope: Scope) => IO<R, never, void>,
|
|
14
|
+
executionStrategy: ExecutionStrategy,
|
|
15
|
+
): IO<R | Scope, never, void>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function withScopedFork<R, E, A>(
|
|
19
|
+
f: (fork: ScopedFork, scope: Scope.Closeable) => IO<R, E, A>,
|
|
20
|
+
executionStrategy: ExecutionStrategy,
|
|
21
|
+
): IO<R | Scope, E, A> {
|
|
22
|
+
return withScope((scope) => f((io) => io.forkIn(scope), scope), executionStrategy);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @tsplus static fncts.io.Push.FlattenStrategyOps Switch
|
|
27
|
+
*/
|
|
28
|
+
export const SwitchStrategy = new (class SwitchStrategy extends FlattenStrategy {
|
|
29
|
+
withFork<R>(
|
|
30
|
+
f: (fork: Fork, scope: Scope) => IO<R, never, void>,
|
|
31
|
+
executionStrategy: ExecutionStrategy,
|
|
32
|
+
): IO<R | Scope, never, void> {
|
|
33
|
+
return withScopedFork(
|
|
34
|
+
(fork, scope) =>
|
|
35
|
+
Ref.Synchronized.make<Fiber<never, void>>(Fiber.unit).flatMap(
|
|
36
|
+
(ref) =>
|
|
37
|
+
f((io) => ref.updateIO((fiber) => fiber.interrupt > fork(io)), scope) >
|
|
38
|
+
ref.get.flatMap((fiber) => fiber.join),
|
|
39
|
+
),
|
|
40
|
+
executionStrategy,
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
})();
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @tsplus static fncts.io.Push.FlattenStrategyOps Exhaust
|
|
47
|
+
*/
|
|
48
|
+
export const ExhaustStrategy = new (class ExhaustStrategy extends FlattenStrategy {
|
|
49
|
+
withFork<R>(
|
|
50
|
+
f: (fork: Fork, scope: Scope) => IO<R, never, void>,
|
|
51
|
+
executionStrategy: ExecutionStrategy,
|
|
52
|
+
): IO<R | Scope, never, void> {
|
|
53
|
+
return withScopedFork(
|
|
54
|
+
(fork, scope) =>
|
|
55
|
+
Ref.Synchronized.make<Fiber.Runtime<never, void> | null>(null).flatMap(
|
|
56
|
+
(ref) =>
|
|
57
|
+
f(
|
|
58
|
+
(io) =>
|
|
59
|
+
ref.updateIO((fiber) => {
|
|
60
|
+
if (fiber) {
|
|
61
|
+
return IO.succeedNow(fiber);
|
|
62
|
+
} else {
|
|
63
|
+
return fork(io.onExit(() => ref.set(null)));
|
|
64
|
+
}
|
|
65
|
+
}),
|
|
66
|
+
scope,
|
|
67
|
+
) >
|
|
68
|
+
ref.get.flatMap((fiber) => {
|
|
69
|
+
if (fiber) {
|
|
70
|
+
return fiber.join;
|
|
71
|
+
} else {
|
|
72
|
+
return IO.unit;
|
|
73
|
+
}
|
|
74
|
+
}),
|
|
75
|
+
),
|
|
76
|
+
executionStrategy,
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
})();
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @tsplus static fncts.io.Push.FlattenStrategyOps Unbounded
|
|
83
|
+
*/
|
|
84
|
+
export const UnboundedStrategy = new (class UnboundedStrategy extends FlattenStrategy {
|
|
85
|
+
withFork<R>(f: (fork: Fork, scope: Scope) => IO<R, never, void>): IO<R | Scope, never, void> {
|
|
86
|
+
return IO.scopeWith((scope) =>
|
|
87
|
+
FiberSet.make<never, void>().flatMap((fiberSet) => f((io) => fiberSet.run(io), scope) > Fiber.joinAll(fiberSet)),
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
})();
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @tsplus static fncts.io.Push.FlattenStrategyOps Bounded
|
|
94
|
+
*/
|
|
95
|
+
export function makeBounded(capacity: number): BoundedStrategy {
|
|
96
|
+
return new BoundedStrategy(capacity);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
class BoundedStrategy extends FlattenStrategy {
|
|
100
|
+
constructor(readonly capacity: number) {
|
|
101
|
+
super();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
withFork<R>(
|
|
105
|
+
f: (fork: Fork, scope: Scope) => IO<R, never, void>,
|
|
106
|
+
executionStrategy: ExecutionStrategy,
|
|
107
|
+
): IO<R | Scope, never, void> {
|
|
108
|
+
return withScopedFork(
|
|
109
|
+
(fork, scope) =>
|
|
110
|
+
Do((Δ) => {
|
|
111
|
+
const ref = Δ(Ref.make<HashSet<Fiber.Runtime<never, void>>>(HashSet.empty()));
|
|
112
|
+
const semaphore = Δ(Semaphore.make(this.capacity));
|
|
113
|
+
Δ(
|
|
114
|
+
f(
|
|
115
|
+
(io) =>
|
|
116
|
+
Do((Δ) => {
|
|
117
|
+
const fiber = Δ(fork(semaphore.withPermit(io)));
|
|
118
|
+
Δ(ref.update((set) => set.add(fiber)));
|
|
119
|
+
Δ(scope.addFinalizer(ref.update((set) => set.remove(fiber))));
|
|
120
|
+
}),
|
|
121
|
+
scope,
|
|
122
|
+
),
|
|
123
|
+
);
|
|
124
|
+
return ref;
|
|
125
|
+
}).flatMap((ref) =>
|
|
126
|
+
ref.get.flatMap((fibers) => {
|
|
127
|
+
if (fibers.size > 0) {
|
|
128
|
+
return Fiber.joinAll(fibers);
|
|
129
|
+
} else {
|
|
130
|
+
return IO.unit;
|
|
131
|
+
}
|
|
132
|
+
}),
|
|
133
|
+
),
|
|
134
|
+
executionStrategy,
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
}
|