@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
package/_src/Push/api.ts
CHANGED
|
@@ -1,58 +1,92 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { withExhaust, withSwitch, withUnboundedConcurrency } from "@fncts/io/Push/internal";
|
|
1
|
+
import type { MergeStrategy } from "./MergeStrategy.js";
|
|
2
|
+
import type { UnsafeSink } from "@fncts/io/Push/Sink";
|
|
4
3
|
|
|
5
|
-
import {
|
|
4
|
+
import { IO, IOTag } from "@fncts/io/IO";
|
|
5
|
+
import { Push, PushPrimitive, PushTag } from "@fncts/io/Push/definition";
|
|
6
|
+
import { FlattenStrategy, UnboundedStrategy } from "@fncts/io/Push/FlattenStrategy";
|
|
7
|
+
import { SyncProducer } from "@fncts/io/Push/Producer/SyncProducer";
|
|
8
|
+
import { Sink } from "@fncts/io/Push/Sink";
|
|
9
|
+
import { Scope } from "@fncts/io/Scope";
|
|
10
|
+
|
|
11
|
+
import { FromIO, FromScheduled, type IOProducer, Scheduled } from "./Producer/IOProducer.js";
|
|
6
12
|
|
|
7
13
|
/**
|
|
8
|
-
* @tsplus
|
|
14
|
+
* @tsplus static fncts.io.PushOps bracketExit
|
|
9
15
|
*/
|
|
10
|
-
export function
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
export function bracketExit<R, E, A, R1, E1, B, R2, E2, C>(
|
|
17
|
+
acquire: IO<R, E, A>,
|
|
18
|
+
use: (a: A) => Push<R1, E1, B>,
|
|
19
|
+
release: (a: A, exit: Exit<unknown, unknown>) => IO<R2, E2, C>,
|
|
20
|
+
): Push<R | R1 | R2, E | E1 | E2, B> {
|
|
21
|
+
return new BracketExit(acquire, use, release);
|
|
14
22
|
}
|
|
15
23
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
24
|
+
class BracketExit<R, E, A, R1, E1, B, R2, E2, C> extends Push<R | R1 | R2, E | E1 | E2, B> {
|
|
25
|
+
constructor(
|
|
26
|
+
readonly acquire: IO<R, E, A>,
|
|
27
|
+
readonly use: (a: A) => Push<R1, E1, B>,
|
|
28
|
+
readonly release: (a: A, exit: Exit<unknown, unknown>) => IO<R2, E2, C>,
|
|
29
|
+
) {
|
|
30
|
+
super();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
run<R3>(sink: Push.UnsafeSink<R3, E | E1 | E2, B>): IO<R | R1 | R2 | R3, never, void> {
|
|
34
|
+
return IO.bracketExit(
|
|
35
|
+
this.acquire,
|
|
36
|
+
(a) => this.use(a).run(sink),
|
|
37
|
+
(a, exit) => this.release(a, exit).catchAllCause(sink.onFailure),
|
|
38
|
+
).catchAllCause(sink.onFailure);
|
|
39
|
+
}
|
|
19
40
|
}
|
|
20
41
|
|
|
21
42
|
/**
|
|
22
|
-
* @tsplus static fncts.io.PushOps
|
|
43
|
+
* @tsplus static fncts.io.PushOps defer
|
|
23
44
|
*/
|
|
24
|
-
export function
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
45
|
+
export function defer<R, E, A>(self: Lazy<Push<R, E, A>>): Push<R, E, A> {
|
|
46
|
+
return new Defer(self);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
class CombineLatest<R, E, A> extends Push<R | Scope, E, ReadonlyArray<A>> {
|
|
50
|
+
private static UNSET = Symbol();
|
|
51
|
+
|
|
52
|
+
constructor(readonly streams: Iterable<Push<R, E, A>>) {
|
|
53
|
+
super();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
run<R1>(sink: UnsafeSink<R1, E, readonly A[]>): IO<Scope | R | R1, never, void> {
|
|
57
|
+
return UnboundedStrategy.withFork((fork) =>
|
|
29
58
|
Do((Δ) => {
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
error: (cause) => runtime.unsafeRunOrFork(sink.error(cause).fulfill(future).forkIn(scope)),
|
|
36
|
-
};
|
|
37
|
-
const eitherPush = Δ(IO(make(unsafeSink)));
|
|
59
|
+
const size = this.streams.size;
|
|
60
|
+
const latch = Δ(CountdownLatch(size));
|
|
61
|
+
const ref: Array<A> = Array(size).fill(CombineLatest.UNSET, 0, size);
|
|
62
|
+
const emitIfReady = IO.defer(sink.onSuccess(ref)).whenIO(latch.isOpen);
|
|
63
|
+
|
|
38
64
|
Δ(
|
|
39
|
-
|
|
40
|
-
(
|
|
41
|
-
|
|
65
|
+
IO.foreach(this.streams.zipWithIndex, ([i, stream]) =>
|
|
66
|
+
fork(
|
|
67
|
+
stream.run(
|
|
68
|
+
Sink.unsafeMake(
|
|
69
|
+
(value) =>
|
|
70
|
+
IO.defer(() => {
|
|
71
|
+
const indexEmpty = ref[i] === CombineLatest.UNSET;
|
|
72
|
+
|
|
73
|
+
ref[i] = value;
|
|
74
|
+
|
|
75
|
+
if (indexEmpty) {
|
|
76
|
+
return latch.countDown;
|
|
77
|
+
} else {
|
|
78
|
+
return IO.unit;
|
|
79
|
+
}
|
|
80
|
+
}) > emitIfReady,
|
|
81
|
+
(cause) => sink.onFailure(cause),
|
|
82
|
+
),
|
|
83
|
+
),
|
|
84
|
+
),
|
|
42
85
|
),
|
|
43
86
|
);
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* @tsplus static fncts.io.PushOps async
|
|
50
|
-
*/
|
|
51
|
-
export function async<E, A>(make: (sink: UnsafeSink<E, A>) => void): Push<never, E, A> {
|
|
52
|
-
return Push.asyncInterrupt((sink) => {
|
|
53
|
-
make(sink);
|
|
54
|
-
return Either.left(IO.unit);
|
|
55
|
-
});
|
|
87
|
+
}),
|
|
88
|
+
);
|
|
89
|
+
}
|
|
56
90
|
}
|
|
57
91
|
|
|
58
92
|
/**
|
|
@@ -60,647 +94,487 @@ export function async<E, A>(make: (sink: UnsafeSink<E, A>) => void): Push<never,
|
|
|
60
94
|
*/
|
|
61
95
|
export function combineLatest<A extends ReadonlyArray<Push<any, any, any>>>(
|
|
62
96
|
streams: [...A],
|
|
63
|
-
): Push<Push.EnvironmentOf<A[number]
|
|
64
|
-
export function combineLatest<R, E, A>(streams: Iterable<Push<R, E, A>>): Push<R, E, ReadonlyArray<A>>;
|
|
65
|
-
export function combineLatest<R, E, A>(streams: Iterable<Push<R, E, A>>): Push<R, E, ReadonlyArray<A>> {
|
|
66
|
-
return
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
Sink(
|
|
77
|
-
(value) => IO((ref[i] = value)) > emitIfReady,
|
|
78
|
-
(cause) => emitter.error(cause),
|
|
79
|
-
),
|
|
80
|
-
),
|
|
81
|
-
),
|
|
82
|
-
);
|
|
83
|
-
}),
|
|
84
|
-
);
|
|
85
|
-
}
|
|
97
|
+
): Push<Push.EnvironmentOf<A[number]> | Scope, Push.ErrorOf<A[number]>, { [K in keyof A]: Push.ValueOf<A[K]> }>;
|
|
98
|
+
export function combineLatest<R, E, A>(streams: Iterable<Push<R, E, A>>): Push<R | Scope, E, ReadonlyArray<A>>;
|
|
99
|
+
export function combineLatest<R, E, A>(streams: Iterable<Push<R, E, A>>): Push<R | Scope, E, ReadonlyArray<A>> {
|
|
100
|
+
return new CombineLatest(streams);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
class ContramapEnvironment<R, E, A, R1> extends Push<R1, E, A> {
|
|
104
|
+
constructor(
|
|
105
|
+
readonly self: Push<R, E, A>,
|
|
106
|
+
readonly f: (r: Environment<R1>) => Environment<R>,
|
|
107
|
+
) {
|
|
108
|
+
super();
|
|
109
|
+
}
|
|
86
110
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
export function combineLatestWith<A, R1, E1, B, C>(that: Push<R1, E1, B>, f: (a: A, b: B) => C) {
|
|
91
|
-
return <R, E>(self: Push<R, E, A>): Push<R | R1, E | E1, C> => {
|
|
92
|
-
return Push.combineLatest([self, that]).map(([a, b]) => f(a, b));
|
|
93
|
-
};
|
|
111
|
+
run<R2>(sink: UnsafeSink<R2, E, A>): IO<R1 | R2, never, void> {
|
|
112
|
+
return this.self.run(sink).contramapEnvironment(this.f);
|
|
113
|
+
}
|
|
94
114
|
}
|
|
95
115
|
|
|
96
116
|
/**
|
|
97
|
-
* @tsplus pipeable fncts.io.Push
|
|
117
|
+
* @tsplus pipeable fncts.io.Push contramapEnvironment
|
|
98
118
|
*/
|
|
99
|
-
export function
|
|
100
|
-
return <
|
|
101
|
-
return self.switchMapIO((a) => IO.succeedNow(a).delay(duration));
|
|
102
|
-
};
|
|
119
|
+
export function contramapEnvironment<R, R1>(f: (r: Environment<R1>) => Environment<R>) {
|
|
120
|
+
return <E, A>(self: Push<R, E, A>): Push<R1, E, A> => new ContramapEnvironment(self, f);
|
|
103
121
|
}
|
|
104
122
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
123
|
+
class Defer<R, E, A> extends Push<R, E, A> {
|
|
124
|
+
constructor(readonly self: Lazy<Push<R, E, A>>) {
|
|
125
|
+
super();
|
|
126
|
+
}
|
|
127
|
+
run<R1>(sink: UnsafeSink<R1, E, A>): IO<R | R1, never, void> {
|
|
128
|
+
return IO.defer(this.self().run(sink));
|
|
129
|
+
}
|
|
110
130
|
}
|
|
111
131
|
|
|
112
132
|
/**
|
|
113
|
-
* @tsplus
|
|
133
|
+
* @tsplus static fncts.io.PushOps failCause
|
|
114
134
|
*/
|
|
115
|
-
export function
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
135
|
+
export function failCause<E>(cause: Lazy<Cause<E>>): Push<never, E, never> {
|
|
136
|
+
const op = new PushPrimitive(PushTag.FailCause) as any;
|
|
137
|
+
op.i0 = cause;
|
|
138
|
+
return op;
|
|
119
139
|
}
|
|
120
140
|
|
|
121
141
|
/**
|
|
122
|
-
* @tsplus
|
|
142
|
+
* @tsplus static fncts.io.PushOps failCauseNow
|
|
123
143
|
*/
|
|
124
|
-
export function
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
144
|
+
export function failCauseNow<E>(cause: Cause<E>): Push<never, E, never> {
|
|
145
|
+
const op = new PushPrimitive(PushTag.FailCause) as any;
|
|
146
|
+
op.i0 = () => cause;
|
|
147
|
+
return op;
|
|
128
148
|
}
|
|
129
149
|
|
|
130
150
|
/**
|
|
131
|
-
* @tsplus
|
|
151
|
+
* @tsplus static fncts.io.PushOps failNow
|
|
132
152
|
*/
|
|
133
|
-
export function
|
|
134
|
-
return
|
|
135
|
-
return Push((sink) =>
|
|
136
|
-
self.run(
|
|
137
|
-
Sink(
|
|
138
|
-
(a) =>
|
|
139
|
-
predicate(a)
|
|
140
|
-
.flatMap((b) => (b ? sink.event(a) : IO.unit))
|
|
141
|
-
.catchAllCause(sink.error),
|
|
142
|
-
sink.error,
|
|
143
|
-
),
|
|
144
|
-
),
|
|
145
|
-
);
|
|
146
|
-
};
|
|
153
|
+
export function failNow<E>(error: E): Push<never, E, never> {
|
|
154
|
+
return Push.failCauseNow(Cause.fail(error));
|
|
147
155
|
}
|
|
148
156
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
157
|
+
class Filter<R, E, A, B extends A = A> extends Push<R, E, B> {
|
|
158
|
+
constructor(
|
|
159
|
+
readonly self: Push<R, E, A>,
|
|
160
|
+
readonly p: Predicate<A>,
|
|
161
|
+
) {
|
|
162
|
+
super();
|
|
163
|
+
}
|
|
164
|
+
run<R1>(sink: UnsafeSink<R1, E, B>): IO<R | R1, never, void> {
|
|
165
|
+
return this.self.run(
|
|
166
|
+
Sink.unsafeMake(
|
|
167
|
+
(value) => {
|
|
168
|
+
if (this.p(value)) {
|
|
169
|
+
return sink.onSuccess(value as B);
|
|
170
|
+
} else {
|
|
171
|
+
return IO.unit;
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
(cause) => sink.onFailure(cause),
|
|
163
175
|
),
|
|
164
176
|
);
|
|
165
|
-
}
|
|
177
|
+
}
|
|
166
178
|
}
|
|
167
179
|
|
|
168
180
|
/**
|
|
169
181
|
* @tsplus pipeable fncts.io.Push filter
|
|
170
182
|
*/
|
|
171
|
-
export function filter<A, B extends A>(
|
|
172
|
-
export function filter<A>(
|
|
173
|
-
export function filter<A>(
|
|
174
|
-
return <R, E>(self: Push<R, E, A>): Push<R, E, A> =>
|
|
175
|
-
|
|
176
|
-
|
|
183
|
+
export function filter<A, B extends A>(p: Refinement<A, B>): <R, E>(self: Push<R, E, A>) => Push<R, E, B>;
|
|
184
|
+
export function filter<A>(p: Predicate<A>): <R, E>(self: Push<R, E, A>) => Push<R, E, A>;
|
|
185
|
+
export function filter<A>(p: Predicate<A>) {
|
|
186
|
+
return <R, E>(self: Push<R, E, A>): Push<R, E, A> => new Filter(self, p);
|
|
187
|
+
}
|
|
188
|
+
class FilterMap<R, E, A, B> extends Push<R, E, B> {
|
|
189
|
+
constructor(
|
|
190
|
+
readonly self: Push<R, E, A>,
|
|
191
|
+
readonly f: (value: A) => Maybe<B>,
|
|
192
|
+
) {
|
|
193
|
+
super();
|
|
194
|
+
}
|
|
195
|
+
run<R1>(sink: UnsafeSink<R1, E, B>): IO<R | R1, never, void> {
|
|
196
|
+
return this.self.run(
|
|
197
|
+
Sink.unsafeMake(
|
|
198
|
+
(value) =>
|
|
199
|
+
this.f(value).match(
|
|
200
|
+
() => IO.unit,
|
|
201
|
+
(b) => sink.onSuccess(b),
|
|
202
|
+
),
|
|
203
|
+
(cause) => sink.onFailure(cause),
|
|
204
|
+
),
|
|
205
|
+
);
|
|
206
|
+
}
|
|
177
207
|
}
|
|
178
208
|
|
|
179
209
|
/**
|
|
180
210
|
* @tsplus pipeable fncts.io.Push filterMap
|
|
181
211
|
*/
|
|
182
|
-
export function filterMap<A, B>(f: (
|
|
183
|
-
return <R, E>(self: Push<R, E, A>): Push<R, E, B> =>
|
|
184
|
-
return Push((sink) => self.run(Sink((a) => f(a).match(() => IO.unit, sink.event), sink.error)));
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* @tsplus pipeable fncts.io.Push flatMapConcurrentBounded
|
|
190
|
-
*/
|
|
191
|
-
export function flatMapConcurrentBounded<A, R1, E1, B>(f: (a: A) => Push<R1, E1, B>, concurrency: number) {
|
|
192
|
-
return <R, E>(self: Push<R, E, A>): Push<R | R1, E | E1, B> => {
|
|
193
|
-
return Push(<R2>(emitter: Sink<R | R1 | R2, E | E1, B>) =>
|
|
194
|
-
Do((Δ) => {
|
|
195
|
-
const semaphore = Δ(Semaphore(concurrency));
|
|
196
|
-
Δ(self.flatMapConcurrentUnbounded((a) => f(a).transform((io) => semaphore.withPermit(io))).run(emitter));
|
|
197
|
-
}),
|
|
198
|
-
);
|
|
199
|
-
};
|
|
212
|
+
export function filterMap<A, B>(f: (value: A) => Maybe<B>) {
|
|
213
|
+
return <R, E>(self: Push<R, E, A>): Push<R, E, B> => new FilterMap(self, f);
|
|
200
214
|
}
|
|
201
215
|
|
|
202
216
|
/**
|
|
203
|
-
* @tsplus pipeable fncts.io.Push
|
|
217
|
+
* @tsplus pipeable fncts.io.Push flatMap
|
|
204
218
|
*/
|
|
205
|
-
export function
|
|
219
|
+
export function flatMap<A, R1, E1, B>(f: (a: A) => Push<R1, E1, B>) {
|
|
206
220
|
return <R, E>(self: Push<R, E, A>): Push<R | R1, E | E1, B> => {
|
|
207
|
-
|
|
221
|
+
const op = new PushPrimitive(PushTag.OnSuccess);
|
|
222
|
+
op.i0 = self;
|
|
223
|
+
op.i1 = f;
|
|
224
|
+
return op;
|
|
208
225
|
};
|
|
209
226
|
}
|
|
210
227
|
|
|
211
228
|
/**
|
|
212
|
-
* @tsplus pipeable fncts.io.Push
|
|
229
|
+
* @tsplus pipeable fncts.io.Push flatMapUnbounded
|
|
213
230
|
*/
|
|
214
|
-
export function
|
|
215
|
-
return <R, E>(self: Push<R, E, A>): Push<R | R1, E | E1, B> =>
|
|
216
|
-
|
|
217
|
-
IO.concurrency.map((concurrency) =>
|
|
218
|
-
concurrency.match(
|
|
219
|
-
() => self.flatMapConcurrentUnbounded(f),
|
|
220
|
-
(n) => self.flatMapConcurrentBounded(f, n),
|
|
221
|
-
),
|
|
222
|
-
),
|
|
223
|
-
);
|
|
224
|
-
};
|
|
231
|
+
export function flatMapUnbounded<A, R1, E1, B>(f: (a: A) => Push<R1, E1, B>) {
|
|
232
|
+
return <R, E>(self: Push<R, E, A>): Push<R | R1, E | E1, B> =>
|
|
233
|
+
self.flatMapWithStrategy(f, FlattenStrategy.Unbounded, ExecutionStrategy.concurrent);
|
|
225
234
|
}
|
|
226
235
|
|
|
227
236
|
/**
|
|
228
|
-
* @tsplus pipeable fncts.io.Push
|
|
237
|
+
* @tsplus pipeable fncts.io.Push flatMapWithStrategy
|
|
229
238
|
*/
|
|
230
|
-
export function
|
|
239
|
+
export function flatMapWithStrategy<A, R1, E1, B>(
|
|
240
|
+
f: (a: A) => Push<R1, E1, B>,
|
|
241
|
+
flattenStrategy: FlattenStrategy,
|
|
242
|
+
executionStrategy: ExecutionStrategy,
|
|
243
|
+
) {
|
|
231
244
|
return <R, E>(self: Push<R, E, A>): Push<R | R1, E | E1, B> => {
|
|
232
|
-
|
|
245
|
+
const op = new PushPrimitive(PushTag.OnSuccessWithStrategy);
|
|
246
|
+
op.i0 = self;
|
|
247
|
+
op.i1 = f;
|
|
248
|
+
op.i2 = flattenStrategy;
|
|
249
|
+
op.i3 = executionStrategy;
|
|
250
|
+
return op;
|
|
233
251
|
};
|
|
234
252
|
}
|
|
235
253
|
|
|
236
254
|
/**
|
|
237
|
-
* @tsplus
|
|
255
|
+
* @tsplus static fncts.io.PushOps fromArray
|
|
238
256
|
*/
|
|
239
|
-
export function
|
|
240
|
-
return
|
|
257
|
+
export function fromArray<A extends ReadonlyArray<any>>(array: A): Push<never, never, A[number]> {
|
|
258
|
+
return Push.fromSyncProducer(SyncProducer.fromArray(array));
|
|
241
259
|
}
|
|
242
|
-
|
|
243
260
|
/**
|
|
244
261
|
* @tsplus static fncts.io.PushOps fromIO
|
|
245
262
|
*/
|
|
246
|
-
export function fromIO<R, E, A>(io:
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
263
|
+
export function fromIO<R, E, A>(io: IO<R, E, A>): Push<R, E, A> {
|
|
264
|
+
const concrete = IO.concrete(io);
|
|
265
|
+
switch (concrete._ioOpCode) {
|
|
266
|
+
case IOTag.SucceedNow: {
|
|
267
|
+
return Push.succeedNow(concrete.i0);
|
|
268
|
+
}
|
|
269
|
+
case IOTag.Fail: {
|
|
270
|
+
return Push.failCause<any>(concrete.i0);
|
|
271
|
+
}
|
|
272
|
+
case IOTag.Sync: {
|
|
273
|
+
return Push.fromSyncProducer(SyncProducer.fromSync(concrete.i0));
|
|
274
|
+
}
|
|
275
|
+
default: {
|
|
276
|
+
return Push.fromIOProducer(new FromIO(io));
|
|
277
|
+
}
|
|
278
|
+
}
|
|
253
279
|
}
|
|
254
|
-
|
|
255
280
|
/**
|
|
256
|
-
* @tsplus static fncts.io.PushOps
|
|
281
|
+
* @tsplus static fncts.io.PushOps fromIOProducer
|
|
257
282
|
*/
|
|
258
|
-
export function
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
function fromAsyncIterableLoop<A, R>(
|
|
265
|
-
iterator: AsyncIterator<A>,
|
|
266
|
-
sink: Sink<R, never, A>,
|
|
267
|
-
cb: (io: UIO<void>) => void,
|
|
268
|
-
__tsplusTrace?: string,
|
|
269
|
-
): IO<R, never, void> {
|
|
270
|
-
return IO.fromPromiseHalt(iterator.next).matchCauseIO(
|
|
271
|
-
(cause) => sink.error(cause),
|
|
272
|
-
(result) => (result.done ? IO(cb(IO.unit)) : sink.event(result.value) > fromAsyncIterableLoop(iterator, sink, cb)),
|
|
273
|
-
);
|
|
283
|
+
export function fromIOProducer<R, E, A>(producer: IOProducer<R, E, A>): Push<R, E, A> {
|
|
284
|
+
const op = new PushPrimitive(PushTag.ProducerIO);
|
|
285
|
+
op.i0 = producer;
|
|
286
|
+
return op;
|
|
274
287
|
}
|
|
275
288
|
|
|
276
289
|
/**
|
|
277
290
|
* @tsplus static fncts.io.PushOps fromIterable
|
|
278
291
|
*/
|
|
279
292
|
export function fromIterable<A>(iterable: Iterable<A>): Push<never, never, A> {
|
|
280
|
-
return Push(
|
|
281
|
-
IO.asyncIO<R, never, void>((cb) => IO.defer(fromIterableLoop(iterable[Symbol.iterator](), sink, cb))),
|
|
282
|
-
);
|
|
293
|
+
return Push.fromSyncProducer(SyncProducer.fromIterable(iterable));
|
|
283
294
|
}
|
|
284
295
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
return IO.defer(() => {
|
|
291
|
-
const value = iterator.next();
|
|
292
|
-
return value.done ? IO(cb(IO.unit)) : sink.event(value.value) > fromIterableLoop(iterator, sink, cb);
|
|
293
|
-
});
|
|
296
|
+
/**
|
|
297
|
+
* @tsplus static fncts.io.PushOps fromScheduled
|
|
298
|
+
*/
|
|
299
|
+
export function fromScheduled<R, E, I, R1, O>(io: IO<R, E, I>, schedule: Schedule<R1, I, O>): Push<R | R1, E, O> {
|
|
300
|
+
return Push.fromIOProducer(new FromScheduled(io, schedule));
|
|
294
301
|
}
|
|
295
302
|
|
|
296
303
|
/**
|
|
297
|
-
* @tsplus
|
|
304
|
+
* @tsplus static fncts.io.PushOps fromSyncProducer
|
|
298
305
|
*/
|
|
299
|
-
export function
|
|
300
|
-
|
|
306
|
+
export function fromSyncProducer<A>(producer: SyncProducer<A>): Push<never, never, A> {
|
|
307
|
+
const op = new PushPrimitive(PushTag.ProducerSync) as any;
|
|
308
|
+
op.i0 = producer;
|
|
309
|
+
return op;
|
|
301
310
|
}
|
|
302
311
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
312
|
+
/**
|
|
313
|
+
* @tsplus static fncts.io.PushOps haltNow
|
|
314
|
+
*/
|
|
315
|
+
export function haltNow(error: unknown): Push<never, never, never> {
|
|
316
|
+
return Push.failCauseNow(Cause.halt(error));
|
|
306
317
|
}
|
|
307
318
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
run<R1>(sink: Sink<R1, E, A>): IO<R | R1, never, void> {
|
|
320
|
-
return Do((Δ) => {
|
|
321
|
-
const environment = Δ(IO.environment<R1>());
|
|
322
|
-
Δ(
|
|
323
|
-
IO.defer(() => {
|
|
324
|
-
let io: URIO<R, void> = IO.unit;
|
|
325
|
-
if (this.observers.push({ sink: sink, environment }) === 1) {
|
|
326
|
-
io = this.push.run(this).forkDaemon.flatMap((fiber) => IO((this.fiber = fiber)));
|
|
327
|
-
}
|
|
328
|
-
return io > this.fiber!.await.ensuring(this.removeSink(sink));
|
|
329
|
-
}),
|
|
330
|
-
);
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
event(value: A) {
|
|
335
|
-
return IO.defer(IO.foreachDiscard(this.observers.slice(), (observer) => this.runValue(value, observer)));
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
error(cause: Cause<E>) {
|
|
339
|
-
return IO.defer(IO.foreachDiscard(this.observers.slice(), (observer) => this.runError(cause, observer)));
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
protected runValue(value: A, observer: MulticastObserver<E, A>) {
|
|
343
|
-
return observer.sink
|
|
344
|
-
.event(value)
|
|
345
|
-
.provideEnvironment(observer.environment)
|
|
346
|
-
.catchAllCause(() => this.removeSink(observer.sink));
|
|
347
|
-
}
|
|
319
|
+
/**
|
|
320
|
+
* @tsplus static fncts.io.PushOps __call
|
|
321
|
+
*/
|
|
322
|
+
export function makePush<R, E, A>(
|
|
323
|
+
run: <R1>(sink: Push.UnsafeSink<R1, E, A>) => IO<R | R1, never, unknown>,
|
|
324
|
+
): Push<R, E, A> {
|
|
325
|
+
const op = new PushPrimitive(PushTag.FromPush) as any;
|
|
326
|
+
op.i0 = run;
|
|
327
|
+
return op;
|
|
328
|
+
}
|
|
348
329
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
330
|
+
class Map<R, E, A, B> extends Push<R, E, B> {
|
|
331
|
+
constructor(
|
|
332
|
+
readonly self: Push<R, E, A>,
|
|
333
|
+
readonly f: (a: A) => B,
|
|
334
|
+
) {
|
|
335
|
+
super();
|
|
354
336
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
if (index > -1) {
|
|
363
|
-
this.observers.splice(index, 1);
|
|
364
|
-
if (this.observers.length === 0) {
|
|
365
|
-
const interrupt = this.fiber!.interrupt;
|
|
366
|
-
this.fiber = undefined;
|
|
367
|
-
return interrupt;
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
return IO.unit;
|
|
371
|
-
});
|
|
337
|
+
run<R1>(sink: UnsafeSink<R1, E, B>): IO<R | R1, never, void> {
|
|
338
|
+
return this.self.run(
|
|
339
|
+
Sink.unsafeMake(
|
|
340
|
+
(value) => sink.onSuccess(this.f(value)),
|
|
341
|
+
(cause) => sink.onFailure(cause),
|
|
342
|
+
),
|
|
343
|
+
);
|
|
372
344
|
}
|
|
373
345
|
}
|
|
374
346
|
|
|
375
347
|
/**
|
|
376
|
-
* @tsplus
|
|
348
|
+
* @tsplus pipeable fncts.io.Push map
|
|
377
349
|
*/
|
|
378
|
-
export function
|
|
379
|
-
return new
|
|
350
|
+
export function map<A, B>(f: (a: A) => B) {
|
|
351
|
+
return <R, E>(self: Push<R, E, A>): Push<R, E, B> => new Map(self, f);
|
|
380
352
|
}
|
|
381
353
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
354
|
+
class MapAccum<R, E, A, S, B> extends Push<R, E, B> {
|
|
355
|
+
constructor(
|
|
356
|
+
readonly self: Push<R, E, A>,
|
|
357
|
+
readonly seed: S,
|
|
358
|
+
readonly f: (acc: S, a: A) => readonly [S, B],
|
|
359
|
+
) {
|
|
360
|
+
super();
|
|
387
361
|
}
|
|
388
362
|
|
|
389
|
-
run<R1>(sink:
|
|
390
|
-
const current = this.current.get;
|
|
391
|
-
|
|
392
|
-
if (current.isJust()) {
|
|
393
|
-
return sink.event(current.value) > super.run(sink);
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
return super.run(sink);
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
event(value: A): IO<never, never, void> {
|
|
363
|
+
run<R1>(sink: UnsafeSink<R1, E, B>): IO<R | R1, never, void> {
|
|
400
364
|
return IO.defer(() => {
|
|
401
|
-
this.
|
|
402
|
-
return
|
|
365
|
+
let acc = this.seed;
|
|
366
|
+
return this.self.run(
|
|
367
|
+
Sink.unsafeMake(
|
|
368
|
+
(value) => {
|
|
369
|
+
const [s, b] = this.f(acc, value);
|
|
370
|
+
acc = s;
|
|
371
|
+
return sink.onSuccess(b);
|
|
372
|
+
},
|
|
373
|
+
(cause) => sink.onFailure(cause),
|
|
374
|
+
),
|
|
375
|
+
);
|
|
403
376
|
});
|
|
404
377
|
}
|
|
405
378
|
}
|
|
406
379
|
|
|
407
380
|
/**
|
|
408
|
-
* @tsplus pipeable fncts.io.Push
|
|
381
|
+
* @tsplus pipeable fncts.io.Push mapAccum
|
|
409
382
|
*/
|
|
410
|
-
export function
|
|
411
|
-
return <R, E>(self: Push<R, E, A>): Push<R, E, B> =>
|
|
412
|
-
return self.mapIO((a) => IO.succeedNow(f(a)));
|
|
413
|
-
};
|
|
383
|
+
export function mapAccum<A, S, B>(seed: S, f: (acc: S, a: A) => readonly [S, B]) {
|
|
384
|
+
return <R, E>(self: Push<R, E, A>): Push<R, E, B> => new MapAccum(self, seed, f);
|
|
414
385
|
}
|
|
415
386
|
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
Sink(
|
|
424
|
-
(value) => emitter.event(value),
|
|
425
|
-
(cause) => emitter.error(cause.map(f)),
|
|
426
|
-
),
|
|
427
|
-
),
|
|
428
|
-
);
|
|
429
|
-
};
|
|
430
|
-
}
|
|
387
|
+
class MapIO<R, E, A, R1, E1, B> extends Push<R | R1, E | E1, B> {
|
|
388
|
+
constructor(
|
|
389
|
+
readonly self: Push<R, E, A>,
|
|
390
|
+
readonly f: (a: A) => IO<R1, E1, B>,
|
|
391
|
+
) {
|
|
392
|
+
super();
|
|
393
|
+
}
|
|
431
394
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
return Push((emitter) =>
|
|
438
|
-
self.run(
|
|
439
|
-
Sink(
|
|
440
|
-
(value) => emitter.event(value),
|
|
441
|
-
(cause) => emitter.error(f(cause)),
|
|
442
|
-
),
|
|
395
|
+
run<R2>(sink: UnsafeSink<R2, E | E1, B>): IO<R | R1 | R2, never, void> {
|
|
396
|
+
return this.self.run(
|
|
397
|
+
Sink.unsafeMake(
|
|
398
|
+
(value) => this.f(value).matchCauseIO(sink.onFailure, sink.onSuccess),
|
|
399
|
+
(cause) => sink.onFailure(cause),
|
|
443
400
|
),
|
|
444
401
|
);
|
|
445
|
-
}
|
|
402
|
+
}
|
|
446
403
|
}
|
|
447
404
|
|
|
448
405
|
/**
|
|
449
406
|
* @tsplus pipeable fncts.io.Push mapIO
|
|
450
407
|
*/
|
|
451
408
|
export function mapIO<A, R1, E1, B>(f: (a: A) => IO<R1, E1, B>) {
|
|
452
|
-
return <R, E>(self: Push<R, E, A>): Push<R | R1, E | E1, B> =>
|
|
453
|
-
Push((emitter) =>
|
|
454
|
-
self.run(
|
|
455
|
-
Sink(
|
|
456
|
-
(value) =>
|
|
457
|
-
f(value).matchCauseIO(
|
|
458
|
-
(cause) => emitter.error(cause),
|
|
459
|
-
(b) => emitter.event(b),
|
|
460
|
-
),
|
|
461
|
-
(cause) => emitter.error(cause),
|
|
462
|
-
),
|
|
463
|
-
),
|
|
464
|
-
);
|
|
409
|
+
return <R, E>(self: Push<R, E, A>): Push<R | R1, E | E1, B> => new MapIO(self, f);
|
|
465
410
|
}
|
|
466
411
|
|
|
467
412
|
/**
|
|
468
|
-
* @tsplus pipeable fncts.io.Push
|
|
413
|
+
* @tsplus pipeable fncts.io.Push mapIOWithStrategy
|
|
469
414
|
*/
|
|
470
|
-
export function
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
415
|
+
export function mapIOWithStrategy<A, R1, E1, B>(
|
|
416
|
+
f: (a: A) => IO<R1, E1, B>,
|
|
417
|
+
flattenStrategy: FlattenStrategy,
|
|
418
|
+
executionStrategy: ExecutionStrategy,
|
|
419
|
+
) {
|
|
420
|
+
return <R, E>(self: Push<R, E, A>): Push<R | R1, E | E1, B> =>
|
|
421
|
+
self.flatMapWithStrategy((a) => Push.fromIO(f(a)), flattenStrategy, executionStrategy);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
class MergeWithStrategy<Ps extends ReadonlyArray<Push<any, any, any>>> extends Push<
|
|
425
|
+
Push.EnvironmentOf<Ps[number]>,
|
|
426
|
+
Push.ErrorOf<Ps[number]>,
|
|
427
|
+
Push.ValueOf<Ps[number]>
|
|
428
|
+
> {
|
|
429
|
+
constructor(
|
|
430
|
+
readonly ps: Ps,
|
|
431
|
+
readonly mergeStrategy: MergeStrategy,
|
|
432
|
+
) {
|
|
433
|
+
super();
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
run<R1>(
|
|
437
|
+
sink: UnsafeSink<R1, Push.ErrorOf<Ps[number]>, Push.ValueOf<Ps[number]>>,
|
|
438
|
+
): IO<Push.EnvironmentOf<Ps[number]> | R1, never, void> {
|
|
439
|
+
return this.mergeStrategy.runMerge(this.ps, sink);
|
|
440
|
+
}
|
|
474
441
|
}
|
|
475
442
|
|
|
476
443
|
/**
|
|
477
|
-
* @tsplus static fncts.io.PushOps
|
|
444
|
+
* @tsplus static fncts.io.PushOps mergeWithStrategy
|
|
478
445
|
*/
|
|
479
|
-
export function
|
|
480
|
-
streams:
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
return Push((sink) =>
|
|
485
|
-
IO.foreachConcurrentDiscard(streams, (stream) =>
|
|
486
|
-
stream.run(Sink(sink.event, (cause) => (cause.isInterruptedOnly ? IO.unit : sink.error(cause)))),
|
|
487
|
-
),
|
|
488
|
-
);
|
|
446
|
+
export function mergeWithStrategy<Ps extends ReadonlyArray<Push<any, any, any>>>(
|
|
447
|
+
streams: Ps,
|
|
448
|
+
mergeStrategy: MergeStrategy,
|
|
449
|
+
): Push<Push.EnvironmentOf<Ps[number]>, Push.ErrorOf<Ps[number]>, Push.ValueOf<Ps[number]>> {
|
|
450
|
+
return new MergeWithStrategy(streams, mergeStrategy);
|
|
489
451
|
}
|
|
490
452
|
|
|
491
453
|
/**
|
|
492
454
|
* @tsplus pipeable fncts.io.Push observe
|
|
493
455
|
*/
|
|
494
|
-
export function observe<A, R1
|
|
495
|
-
return <R, E>(self: Push<R, E, A>): IO<R | R1
|
|
496
|
-
return
|
|
497
|
-
const future = Δ(Future.make<E | E1, void>());
|
|
498
|
-
const fiber = Δ(
|
|
499
|
-
self
|
|
500
|
-
.run(
|
|
501
|
-
Sink(
|
|
502
|
-
(a) => f(a).catchAllCause((cause) => future.failCause(cause)),
|
|
503
|
-
(cause) => future.failCause(cause),
|
|
504
|
-
),
|
|
505
|
-
)
|
|
506
|
-
.flatMap(() => future.succeed(undefined)).forkScoped,
|
|
507
|
-
);
|
|
508
|
-
|
|
509
|
-
Δ(future.await);
|
|
510
|
-
Δ(fiber.interruptFork);
|
|
511
|
-
});
|
|
456
|
+
export function observe<A, R1>(f: (a: A) => IO<R1, never, void>) {
|
|
457
|
+
return <R, E>(self: Push<R, E, A>): IO<R | R1, never, void> => {
|
|
458
|
+
return self.run(Sink.unsafeMake(f, (cause) => IO.failCause(cause).orHalt));
|
|
512
459
|
};
|
|
513
460
|
}
|
|
514
461
|
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
/**
|
|
527
|
-
* @tsplus getter fncts.io.Push runCollect
|
|
528
|
-
*/
|
|
529
|
-
export function runCollect<R, E, A>(self: Push<R, E, A>): IO<R | Scope, E, Conc<A>> {
|
|
530
|
-
return IO.defer(() => {
|
|
531
|
-
const out: Array<A> = [];
|
|
532
|
-
return self.observe((a) => IO(out.push(a))).as(Conc.fromArray(out));
|
|
533
|
-
});
|
|
462
|
+
class OrElseCause<R, E, A, R1, E1, B> extends Push<R | R1, E | E1, A | B> {
|
|
463
|
+
constructor(
|
|
464
|
+
readonly self: Push<R, E, A>,
|
|
465
|
+
readonly that: (cause: Cause<E>) => Push<R1, E1, B>,
|
|
466
|
+
) {
|
|
467
|
+
super();
|
|
468
|
+
}
|
|
469
|
+
run<R2>(sink: UnsafeSink<R2, E | E1, A | B>): IO<R | R1 | R2, never, void> {
|
|
470
|
+
return this.self.run(Sink.unsafeMake(sink.onSuccess, (cause) => this.that(cause).run(sink)));
|
|
471
|
+
}
|
|
534
472
|
}
|
|
535
473
|
|
|
536
474
|
/**
|
|
537
|
-
* @tsplus
|
|
475
|
+
* @tsplus pipeable fncts.io.Push orElseCause
|
|
538
476
|
*/
|
|
539
|
-
export function
|
|
540
|
-
return self
|
|
477
|
+
export function orElseCause<E, R1, E1, B>(that: (cause: Cause<E>) => Push<R1, E1, B>) {
|
|
478
|
+
return <R, A>(self: Push<R, E, A>): Push<R | R1, E | E1, A | B> => new OrElseCause(self, that);
|
|
541
479
|
}
|
|
542
480
|
|
|
543
481
|
/**
|
|
544
|
-
* @tsplus
|
|
482
|
+
* @tsplus pipeable fncts.io.Push provideEnvironment
|
|
545
483
|
*/
|
|
546
|
-
export function
|
|
547
|
-
return Push
|
|
548
|
-
IO.defer(io).scoped.matchCauseIO(
|
|
549
|
-
(cause) => emitter.error(cause),
|
|
550
|
-
(value) => emitter.event(value),
|
|
551
|
-
),
|
|
552
|
-
);
|
|
484
|
+
export function provideEnvironment<R>(environment: Environment<R>) {
|
|
485
|
+
return <E, A>(self: Push<R, E, A>): Push<never, E, A> => self.provideSomeEnvironment(environment);
|
|
553
486
|
}
|
|
554
487
|
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
488
|
+
class ProvideLayer<R, E, A, R1, E1, R2> extends Push<Exclude<R, R2> | R1, E | E1, A> {
|
|
489
|
+
constructor(
|
|
490
|
+
readonly self: Push<R, E, A>,
|
|
491
|
+
readonly layer: Layer<R1, E1, R2>,
|
|
492
|
+
) {
|
|
493
|
+
super();
|
|
494
|
+
}
|
|
495
|
+
run<R3>(sink: UnsafeSink<R3, E | E1, A>): IO<R1 | Exclude<R, R2> | R3, never, void> {
|
|
496
|
+
return IO.bracketExit(
|
|
497
|
+
Scope.make,
|
|
498
|
+
(scope) =>
|
|
499
|
+
this.layer
|
|
500
|
+
.build(scope)
|
|
501
|
+
.matchCauseIO(sink.onFailure, (environment) => this.self.run(sink).provideSomeEnvironment(environment)),
|
|
502
|
+
(scope, exit) => scope.close(exit),
|
|
503
|
+
);
|
|
504
|
+
}
|
|
560
505
|
}
|
|
561
506
|
|
|
562
507
|
/**
|
|
563
|
-
* @tsplus pipeable fncts.io.Push
|
|
508
|
+
* @tsplus pipeable fncts.io.Push provideLayer
|
|
564
509
|
*/
|
|
565
|
-
export function
|
|
566
|
-
return <R, E>(self: Push<R, E, A>): Push<R | R1, E | E1,
|
|
567
|
-
return Push((sink) => withSwitch((fork) => self.run(Sink((a) => fork(f(a).run(sink)), sink.error))));
|
|
568
|
-
};
|
|
510
|
+
export function provideLayer<R1, E1, R2>(layer: Layer<R1, E1, R2>) {
|
|
511
|
+
return <R, E, A>(self: Push<R, E, A>): Push<Exclude<R, R2> | R1, E | E1, A> => new ProvideLayer(self, layer);
|
|
569
512
|
}
|
|
570
513
|
|
|
571
514
|
/**
|
|
572
|
-
* @tsplus pipeable fncts.io.Push
|
|
515
|
+
* @tsplus pipeable fncts.io.Push provideSomeEnvironment
|
|
573
516
|
*/
|
|
574
|
-
export function
|
|
575
|
-
return <R, E>(self: Push<R, E, A>): Push<R
|
|
576
|
-
|
|
577
|
-
};
|
|
517
|
+
export function provideSomeEnvironment<R1>(environment: Environment<R1>) {
|
|
518
|
+
return <R, E, A>(self: Push<R, E, A>): Push<Exclude<R, R1>, E, A> =>
|
|
519
|
+
self.contramapEnvironment((r) => r.union(environment));
|
|
578
520
|
}
|
|
579
521
|
|
|
580
522
|
/**
|
|
581
|
-
* @tsplus
|
|
523
|
+
* @tsplus static fncts.io.PushOps schedule
|
|
582
524
|
*/
|
|
583
|
-
export function
|
|
584
|
-
return
|
|
585
|
-
return Push((sink) => self.run(Sink((a) => f(a).matchCauseIO(sink.error, () => sink.event(a)), sink.error)));
|
|
586
|
-
};
|
|
525
|
+
export function schedule<R, E, A, R1, O>(io: IO<R, E, A>, schedule: Schedule<R1, unknown, O>): Push<R | R1, E, A> {
|
|
526
|
+
return Push.fromIOProducer(new Scheduled(io, schedule));
|
|
587
527
|
}
|
|
588
528
|
|
|
589
529
|
/**
|
|
590
|
-
* @tsplus
|
|
530
|
+
* @tsplus static fncts.io.PushOps succeed
|
|
591
531
|
*/
|
|
592
|
-
export function
|
|
593
|
-
return
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
function unfoldLoop<S, A, R1>(
|
|
597
|
-
s: S,
|
|
598
|
-
f: (s: S) => Maybe<readonly [A, S]>,
|
|
599
|
-
emitter: Sink<R1, never, A>,
|
|
600
|
-
): IO<R1, never, void> {
|
|
601
|
-
return f(s).match(
|
|
602
|
-
() => IO.unit,
|
|
603
|
-
([a, s]) => emitter.event(a) > unfoldLoop(s, f, emitter),
|
|
604
|
-
);
|
|
532
|
+
export function succeed<A>(value: Lazy<A>): Push<never, never, A> {
|
|
533
|
+
return Push.fromSyncProducer(SyncProducer.fromSync(value));
|
|
605
534
|
}
|
|
606
535
|
|
|
607
536
|
/**
|
|
608
|
-
* @tsplus static fncts.io.PushOps
|
|
537
|
+
* @tsplus static fncts.io.PushOps succeedNow
|
|
609
538
|
*/
|
|
610
|
-
export function
|
|
611
|
-
return Push((
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
function unfoldIOLoop<S, R, E, A, R1>(
|
|
615
|
-
s: S,
|
|
616
|
-
f: (s: S) => IO<R, E, Maybe<readonly [A, S]>>,
|
|
617
|
-
emitter: Sink<R1, E, A>,
|
|
618
|
-
): IO<R | R1, never, void> {
|
|
619
|
-
return f(s)
|
|
620
|
-
.flatMap((result) =>
|
|
621
|
-
result.match(
|
|
622
|
-
() => IO.unit,
|
|
623
|
-
([a, s]) => emitter.event(a) > unfoldIOLoop(s, f, emitter),
|
|
624
|
-
),
|
|
625
|
-
)
|
|
626
|
-
.catchAllCause((cause) => emitter.error(cause));
|
|
539
|
+
export function succeedNow<A>(value: A): Push<never, never, A> {
|
|
540
|
+
return Push.fromSyncProducer(SyncProducer.Success(value));
|
|
627
541
|
}
|
|
628
542
|
|
|
629
543
|
/**
|
|
630
|
-
* @tsplus
|
|
544
|
+
* @tsplus pipeable fncts.io.Push switchMap
|
|
631
545
|
*/
|
|
632
|
-
export function
|
|
633
|
-
return Push
|
|
546
|
+
export function switchMap<A, R1, E1, B>(f: (a: A) => Push<R1, E1, B>, executionStrategy?: ExecutionStrategy) {
|
|
547
|
+
return <R, E>(self: Push<R, E, A>): Push<R | R1, E | E1, B> =>
|
|
548
|
+
self.flatMapWithStrategy(f, FlattenStrategy.Switch, executionStrategy ?? ExecutionStrategy.sequential);
|
|
634
549
|
}
|
|
635
550
|
|
|
636
551
|
/**
|
|
637
|
-
* @tsplus pipeable fncts.io.Push
|
|
552
|
+
* @tsplus pipeable fncts.io.Push transform
|
|
638
553
|
*/
|
|
639
|
-
export function
|
|
640
|
-
return <
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
const streamFiber = Δ(self.run(sink).fork);
|
|
646
|
-
const futureFiber = Δ(
|
|
647
|
-
future.await
|
|
648
|
-
.matchCauseIO(
|
|
649
|
-
(cause) => sink.error(cause),
|
|
650
|
-
() => IO.unit,
|
|
651
|
-
)
|
|
652
|
-
.zipRight(exit).fork,
|
|
653
|
-
);
|
|
654
|
-
Δ(Fiber.joinAll([streamFiber, futureFiber]));
|
|
655
|
-
});
|
|
656
|
-
}),
|
|
657
|
-
);
|
|
554
|
+
export function transform<R, R1>(f: (io: IO<R, never, void>) => IO<R1, never, void>) {
|
|
555
|
+
return <E, A>(self: Push<R, E, A>): Push<R | R1, E, A> => {
|
|
556
|
+
const op = new PushPrimitive(PushTag.Transform);
|
|
557
|
+
op.i0 = self;
|
|
558
|
+
op.i1 = f;
|
|
559
|
+
return op;
|
|
658
560
|
};
|
|
659
561
|
}
|
|
660
562
|
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
return
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
return Do((Δ) => {
|
|
670
|
-
const signalFiber = Δ(
|
|
671
|
-
signal.run(
|
|
672
|
-
Sink(
|
|
673
|
-
() => exit,
|
|
674
|
-
(cause) => sink.error(cause),
|
|
675
|
-
),
|
|
676
|
-
).fork,
|
|
677
|
-
);
|
|
678
|
-
const streamFiber = Δ(self.run(sink).fork);
|
|
679
|
-
Δ(Fiber.joinAll([signalFiber, streamFiber]));
|
|
680
|
-
});
|
|
681
|
-
}),
|
|
563
|
+
class Unwrap<R, E, R1, E1, A> extends Push<R | R1, E | E1, A> {
|
|
564
|
+
constructor(readonly io: IO<R, E, Push<R1, E1, A>>) {
|
|
565
|
+
super();
|
|
566
|
+
}
|
|
567
|
+
run<R2>(sink: UnsafeSink<R2, E | E1, A>): IO<R | R1 | R2, never, void> {
|
|
568
|
+
return this.io.matchCauseIO(
|
|
569
|
+
(cause) => sink.onFailure(cause),
|
|
570
|
+
(stream) => stream.run(sink),
|
|
682
571
|
);
|
|
683
|
-
}
|
|
572
|
+
}
|
|
684
573
|
}
|
|
685
574
|
|
|
686
575
|
/**
|
|
687
576
|
* @tsplus static fncts.io.PushOps unwrap
|
|
688
577
|
*/
|
|
689
578
|
export function unwrap<R, E, R1, E1, A>(io: IO<R, E, Push<R1, E1, A>>): Push<R | R1, E | E1, A> {
|
|
690
|
-
return
|
|
691
|
-
}
|
|
692
|
-
|
|
693
|
-
/**
|
|
694
|
-
* @tsplus static fncts.io.PushOps unwrapScoped
|
|
695
|
-
*/
|
|
696
|
-
export function unwrapScoped<R, E, R1, E1, A>(
|
|
697
|
-
self: IO<R, E, Push<R1, E1, A>>,
|
|
698
|
-
__tsplusTrace?: string,
|
|
699
|
-
): Push<R1 | Exclude<R, Scope>, E | E1, A> {
|
|
700
|
-
return Push.scoped(self).flatten;
|
|
579
|
+
return new Unwrap(io);
|
|
701
580
|
}
|
|
702
|
-
|
|
703
|
-
/**
|
|
704
|
-
* @tsplus static fncts.io.PushOps never
|
|
705
|
-
*/
|
|
706
|
-
export const never = Push.fromIO(IO.never);
|