@typed/fx 2.0.0-beta.0 → 2.0.0-beta.10
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/LICENSE +21 -0
- package/README.md +58 -21
- package/dist/Fx/Fx.d.ts +371 -19
- package/dist/Fx/Fx.d.ts.map +1 -1
- package/dist/Fx/Fx.js +37 -6
- package/dist/Fx/TypeId.d.ts +52 -6
- package/dist/Fx/TypeId.d.ts.map +1 -1
- package/dist/Fx/TypeId.js +41 -4
- package/dist/Fx/combinators/additive.d.ts +245 -0
- package/dist/Fx/combinators/additive.d.ts.map +1 -0
- package/dist/Fx/combinators/additive.js +243 -0
- package/dist/Fx/combinators/catch.d.ts +246 -12
- package/dist/Fx/combinators/catch.d.ts.map +1 -1
- package/dist/Fx/combinators/catch.js +236 -12
- package/dist/Fx/combinators/causes.d.ts +25 -2
- package/dist/Fx/combinators/causes.d.ts.map +1 -1
- package/dist/Fx/combinators/causes.js +25 -2
- package/dist/Fx/combinators/changesWithEffect.d.ts +40 -0
- package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -0
- package/dist/Fx/combinators/changesWithEffect.js +48 -0
- package/dist/Fx/combinators/compact.d.ts +18 -1
- package/dist/Fx/combinators/compact.d.ts.map +1 -1
- package/dist/Fx/combinators/compact.js +18 -1
- package/dist/Fx/combinators/concatMap.d.ts +86 -0
- package/dist/Fx/combinators/concatMap.d.ts.map +1 -0
- package/dist/Fx/combinators/concatMap.js +86 -0
- package/dist/Fx/combinators/continueWith.d.ts +113 -5
- package/dist/Fx/combinators/continueWith.d.ts.map +1 -1
- package/dist/Fx/combinators/continueWith.js +113 -5
- package/dist/Fx/combinators/debounce.d.ts +34 -0
- package/dist/Fx/combinators/debounce.d.ts.map +1 -0
- package/dist/Fx/combinators/debounce.js +35 -0
- package/dist/Fx/combinators/delay.d.ts +36 -0
- package/dist/Fx/combinators/delay.d.ts.map +1 -0
- package/dist/Fx/combinators/delay.js +33 -0
- package/dist/Fx/combinators/dropUntil.d.ts +71 -0
- package/dist/Fx/combinators/dropUntil.d.ts.map +1 -0
- package/dist/Fx/combinators/dropUntil.js +65 -0
- package/dist/Fx/combinators/during.d.ts +38 -0
- package/dist/Fx/combinators/during.d.ts.map +1 -0
- package/dist/Fx/combinators/during.js +85 -0
- package/dist/Fx/combinators/ensuring.d.ts +34 -4
- package/dist/Fx/combinators/ensuring.d.ts.map +1 -1
- package/dist/Fx/combinators/ensuring.js +34 -4
- package/dist/Fx/combinators/exhaustLatestMap.d.ts +41 -5
- package/dist/Fx/combinators/exhaustLatestMap.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustLatestMap.js +41 -5
- package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts +40 -4
- package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustLatestMapEffect.js +40 -4
- package/dist/Fx/combinators/exhaustMap.d.ts +38 -1
- package/dist/Fx/combinators/exhaustMap.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustMap.js +38 -1
- package/dist/Fx/combinators/exhaustMapEffect.d.ts +33 -1
- package/dist/Fx/combinators/exhaustMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustMapEffect.js +33 -1
- package/dist/Fx/combinators/exit.d.ts +23 -2
- package/dist/Fx/combinators/exit.d.ts.map +1 -1
- package/dist/Fx/combinators/exit.js +23 -2
- package/dist/Fx/combinators/filter.d.ts +17 -1
- package/dist/Fx/combinators/filter.d.ts.map +1 -1
- package/dist/Fx/combinators/filter.js +17 -1
- package/dist/Fx/combinators/filterEffect.d.ts +22 -1
- package/dist/Fx/combinators/filterEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterEffect.js +22 -1
- package/dist/Fx/combinators/filterMap.d.ts +20 -1
- package/dist/Fx/combinators/filterMap.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMap.js +20 -1
- package/dist/Fx/combinators/filterMapEffect.d.ts +21 -1
- package/dist/Fx/combinators/filterMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapEffect.js +21 -1
- package/dist/Fx/combinators/filterMapLoop.d.ts +20 -1
- package/dist/Fx/combinators/filterMapLoop.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoop.js +20 -1
- package/dist/Fx/combinators/filterMapLoopCause.d.ts +21 -1
- package/dist/Fx/combinators/filterMapLoopCause.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoopCause.js +21 -1
- package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts +21 -1
- package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoopCauseEffect.js +21 -1
- package/dist/Fx/combinators/filterMapLoopEffect.d.ts +21 -1
- package/dist/Fx/combinators/filterMapLoopEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoopEffect.js +21 -1
- package/dist/Fx/combinators/flatMap.d.ts +50 -5
- package/dist/Fx/combinators/flatMap.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMap.js +36 -3
- package/dist/Fx/combinators/flatMapConcurrently.d.ts +51 -4
- package/dist/Fx/combinators/flatMapConcurrently.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMapConcurrently.js +51 -4
- package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts +48 -4
- package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMapConcurrentlyEffect.js +40 -2
- package/dist/Fx/combinators/flatMapEffect.d.ts +46 -4
- package/dist/Fx/combinators/flatMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMapEffect.js +32 -2
- package/dist/Fx/combinators/flip.d.ts +34 -2
- package/dist/Fx/combinators/flip.d.ts.map +1 -1
- package/dist/Fx/combinators/flip.js +34 -2
- package/dist/Fx/combinators/gen.d.ts +29 -10
- package/dist/Fx/combinators/gen.d.ts.map +1 -1
- package/dist/Fx/combinators/gen.js +28 -4
- package/dist/Fx/combinators/genScoped.d.ts +33 -10
- package/dist/Fx/combinators/genScoped.d.ts.map +1 -1
- package/dist/Fx/combinators/genScoped.js +31 -3
- package/dist/Fx/combinators/grouped.d.ts +89 -0
- package/dist/Fx/combinators/grouped.d.ts.map +1 -0
- package/dist/Fx/combinators/grouped.js +146 -0
- package/dist/Fx/combinators/index.d.ts +45 -0
- package/dist/Fx/combinators/index.d.ts.map +1 -1
- package/dist/Fx/combinators/index.js +45 -0
- package/dist/Fx/combinators/keyed.d.ts +124 -10
- package/dist/Fx/combinators/keyed.d.ts.map +1 -1
- package/dist/Fx/combinators/keyed.js +69 -11
- package/dist/Fx/combinators/loop.d.ts +17 -1
- package/dist/Fx/combinators/loop.d.ts.map +1 -1
- package/dist/Fx/combinators/loop.js +17 -1
- package/dist/Fx/combinators/loopCause.d.ts +18 -1
- package/dist/Fx/combinators/loopCause.d.ts.map +1 -1
- package/dist/Fx/combinators/loopCause.js +18 -1
- package/dist/Fx/combinators/loopCauseEffect.d.ts +19 -1
- package/dist/Fx/combinators/loopCauseEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/loopCauseEffect.js +19 -1
- package/dist/Fx/combinators/loopEffect.d.ts +24 -1
- package/dist/Fx/combinators/loopEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/loopEffect.js +24 -1
- package/dist/Fx/combinators/map.d.ts +46 -1
- package/dist/Fx/combinators/map.d.ts.map +1 -1
- package/dist/Fx/combinators/map.js +43 -1
- package/dist/Fx/combinators/mapBoth.d.ts +40 -0
- package/dist/Fx/combinators/mapBoth.d.ts.map +1 -0
- package/dist/Fx/combinators/mapBoth.js +33 -0
- package/dist/Fx/combinators/mapEffect.d.ts +25 -1
- package/dist/Fx/combinators/mapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/mapEffect.js +25 -1
- package/dist/Fx/combinators/mapError.d.ts +33 -0
- package/dist/Fx/combinators/mapError.d.ts.map +1 -0
- package/dist/Fx/combinators/mapError.js +32 -0
- package/dist/Fx/combinators/mergeAll.d.ts +35 -1
- package/dist/Fx/combinators/mergeAll.d.ts.map +1 -1
- package/dist/Fx/combinators/mergeAll.js +35 -1
- package/dist/Fx/combinators/mergeOrdered.d.ts +36 -4
- package/dist/Fx/combinators/mergeOrdered.d.ts.map +1 -1
- package/dist/Fx/combinators/mergeOrdered.js +68 -14
- package/dist/Fx/combinators/onError.d.ts +34 -4
- package/dist/Fx/combinators/onError.d.ts.map +1 -1
- package/dist/Fx/combinators/onError.js +34 -4
- package/dist/Fx/combinators/onExit.d.ts +29 -3
- package/dist/Fx/combinators/onExit.d.ts.map +1 -1
- package/dist/Fx/combinators/onExit.js +29 -3
- package/dist/Fx/combinators/onInterrupt.d.ts +49 -4
- package/dist/Fx/combinators/onInterrupt.d.ts.map +1 -1
- package/dist/Fx/combinators/onInterrupt.js +49 -4
- package/dist/Fx/combinators/pairwise.d.ts +28 -0
- package/dist/Fx/combinators/pairwise.d.ts.map +1 -0
- package/dist/Fx/combinators/pairwise.js +31 -0
- package/dist/Fx/combinators/provide.d.ts +162 -8
- package/dist/Fx/combinators/provide.d.ts.map +1 -1
- package/dist/Fx/combinators/provide.js +154 -6
- package/dist/Fx/combinators/race.d.ts +92 -0
- package/dist/Fx/combinators/race.d.ts.map +1 -0
- package/dist/Fx/combinators/race.js +149 -0
- package/dist/Fx/combinators/repeat.d.ts +41 -0
- package/dist/Fx/combinators/repeat.d.ts.map +1 -0
- package/dist/Fx/combinators/repeat.js +57 -0
- package/dist/Fx/combinators/result.d.ts +45 -0
- package/dist/Fx/combinators/result.d.ts.map +1 -0
- package/dist/Fx/combinators/result.js +46 -0
- package/dist/Fx/combinators/retry.d.ts +53 -0
- package/dist/Fx/combinators/retry.d.ts.map +1 -0
- package/dist/Fx/combinators/retry.js +71 -0
- package/dist/Fx/combinators/sample.d.ts +31 -0
- package/dist/Fx/combinators/sample.d.ts.map +1 -0
- package/dist/Fx/combinators/sample.js +42 -0
- package/dist/Fx/combinators/scan.d.ts +72 -0
- package/dist/Fx/combinators/scan.d.ts.map +1 -0
- package/dist/Fx/combinators/scan.js +77 -0
- package/dist/Fx/combinators/since.d.ts +30 -0
- package/dist/Fx/combinators/since.d.ts.map +1 -0
- package/dist/Fx/combinators/since.js +39 -0
- package/dist/Fx/combinators/skip.d.ts +45 -1
- package/dist/Fx/combinators/skip.d.ts.map +1 -1
- package/dist/Fx/combinators/skip.js +43 -1
- package/dist/Fx/combinators/skipRepeats.d.ts +17 -1
- package/dist/Fx/combinators/skipRepeats.d.ts.map +1 -1
- package/dist/Fx/combinators/skipRepeats.js +17 -1
- package/dist/Fx/combinators/skipRepeatsWith.d.ts +18 -1
- package/dist/Fx/combinators/skipRepeatsWith.d.ts.map +1 -1
- package/dist/Fx/combinators/skipRepeatsWith.js +18 -1
- package/dist/Fx/combinators/skipWhile.d.ts +117 -0
- package/dist/Fx/combinators/skipWhile.d.ts.map +1 -0
- package/dist/Fx/combinators/skipWhile.js +134 -0
- package/dist/Fx/combinators/slice.d.ts +97 -2
- package/dist/Fx/combinators/slice.d.ts.map +1 -1
- package/dist/Fx/combinators/slice.js +45 -1
- package/dist/Fx/combinators/switchMap.d.ts +39 -1
- package/dist/Fx/combinators/switchMap.d.ts.map +1 -1
- package/dist/Fx/combinators/switchMap.js +43 -5
- package/dist/Fx/combinators/switchMapEffect.d.ts +38 -1
- package/dist/Fx/combinators/switchMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/switchMapEffect.js +38 -1
- package/dist/Fx/combinators/take.d.ts +46 -1
- package/dist/Fx/combinators/take.d.ts.map +1 -1
- package/dist/Fx/combinators/take.js +44 -1
- package/dist/Fx/combinators/takeUntil.d.ts +62 -2
- package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
- package/dist/Fx/combinators/takeUntil.js +62 -2
- package/dist/Fx/combinators/takeWhile.d.ts +60 -0
- package/dist/Fx/combinators/takeWhile.d.ts.map +1 -0
- package/dist/Fx/combinators/takeWhile.js +54 -0
- package/dist/Fx/combinators/tapEffect.d.ts +17 -1
- package/dist/Fx/combinators/tapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/tapEffect.js +17 -1
- package/dist/Fx/combinators/throttle.d.ts +79 -0
- package/dist/Fx/combinators/throttle.d.ts.map +1 -0
- package/dist/Fx/combinators/throttle.js +99 -0
- package/dist/Fx/combinators/timeout.d.ts +76 -0
- package/dist/Fx/combinators/timeout.d.ts.map +1 -0
- package/dist/Fx/combinators/timeout.js +110 -0
- package/dist/Fx/combinators/tuple.d.ts +32 -2
- package/dist/Fx/combinators/tuple.d.ts.map +1 -1
- package/dist/Fx/combinators/tuple.js +36 -5
- package/dist/Fx/combinators/until.d.ts +27 -0
- package/dist/Fx/combinators/until.d.ts.map +1 -0
- package/dist/Fx/combinators/until.js +56 -0
- package/dist/Fx/combinators/unwrap.d.ts +31 -2
- package/dist/Fx/combinators/unwrap.d.ts.map +1 -1
- package/dist/Fx/combinators/unwrap.js +30 -1
- package/dist/Fx/combinators/unwrapScoped.d.ts +34 -1
- package/dist/Fx/combinators/unwrapScoped.d.ts.map +1 -1
- package/dist/Fx/combinators/unwrapScoped.js +34 -1
- package/dist/Fx/combinators/when.d.ts +37 -2
- package/dist/Fx/combinators/when.d.ts.map +1 -1
- package/dist/Fx/combinators/when.js +38 -3
- package/dist/Fx/combinators/withLatestFrom.d.ts +58 -0
- package/dist/Fx/combinators/withLatestFrom.d.ts.map +1 -0
- package/dist/Fx/combinators/withLatestFrom.js +68 -0
- package/dist/Fx/combinators/withSpan.d.ts +35 -1
- package/dist/Fx/combinators/withSpan.d.ts.map +1 -1
- package/dist/Fx/combinators/withSpan.js +34 -3
- package/dist/Fx/combinators/zip.d.ts +135 -0
- package/dist/Fx/combinators/zip.d.ts.map +1 -0
- package/dist/Fx/combinators/zip.js +160 -0
- package/dist/Fx/constructors/at.d.ts +23 -3
- package/dist/Fx/constructors/at.d.ts.map +1 -1
- package/dist/Fx/constructors/at.js +21 -1
- package/dist/Fx/constructors/die.d.ts +22 -1
- package/dist/Fx/constructors/die.d.ts.map +1 -1
- package/dist/Fx/constructors/die.js +22 -1
- package/dist/Fx/constructors/empty.d.ts +19 -1
- package/dist/Fx/constructors/empty.d.ts.map +1 -1
- package/dist/Fx/constructors/empty.js +19 -1
- package/dist/Fx/constructors/fail.d.ts +22 -1
- package/dist/Fx/constructors/fail.d.ts.map +1 -1
- package/dist/Fx/constructors/fail.js +22 -1
- package/dist/Fx/constructors/failCause.d.ts +23 -1
- package/dist/Fx/constructors/failCause.d.ts.map +1 -1
- package/dist/Fx/constructors/failCause.js +23 -1
- package/dist/Fx/constructors/fn.d.ts +116 -16
- package/dist/Fx/constructors/fn.d.ts.map +1 -1
- package/dist/Fx/constructors/fn.js +36 -0
- package/dist/Fx/constructors/fromEffect.d.ts +45 -3
- package/dist/Fx/constructors/fromEffect.d.ts.map +1 -1
- package/dist/Fx/constructors/fromEffect.js +45 -3
- package/dist/Fx/constructors/fromFailures.d.ts +25 -1
- package/dist/Fx/constructors/fromFailures.d.ts.map +1 -1
- package/dist/Fx/constructors/fromFailures.js +25 -1
- package/dist/Fx/constructors/fromIterable.d.ts +23 -1
- package/dist/Fx/constructors/fromIterable.d.ts.map +1 -1
- package/dist/Fx/constructors/fromIterable.js +23 -1
- package/dist/Fx/constructors/fromSchedule.d.ts +26 -1
- package/dist/Fx/constructors/fromSchedule.d.ts.map +1 -1
- package/dist/Fx/constructors/fromSchedule.js +28 -3
- package/dist/Fx/constructors/index.d.ts +2 -1
- package/dist/Fx/constructors/index.d.ts.map +1 -1
- package/dist/Fx/constructors/index.js +2 -1
- package/dist/Fx/constructors/interrupt.d.ts +22 -2
- package/dist/Fx/constructors/interrupt.d.ts.map +1 -1
- package/dist/Fx/constructors/interrupt.js +22 -2
- package/dist/Fx/constructors/make.d.ts +151 -4
- package/dist/Fx/constructors/make.d.ts.map +1 -1
- package/dist/Fx/constructors/make.js +60 -7
- package/dist/Fx/constructors/periodic.d.ts +31 -2
- package/dist/Fx/constructors/periodic.d.ts.map +1 -1
- package/dist/Fx/constructors/periodic.js +30 -1
- package/dist/Fx/constructors/succeed.d.ts +79 -7
- package/dist/Fx/constructors/succeed.d.ts.map +1 -1
- package/dist/Fx/constructors/succeed.js +79 -7
- package/dist/Fx/constructors/suspend.d.ts +28 -0
- package/dist/Fx/constructors/suspend.d.ts.map +1 -1
- package/dist/Fx/constructors/suspend.js +28 -0
- package/dist/Fx/constructors/sync.d.ts +32 -0
- package/dist/Fx/constructors/sync.d.ts.map +1 -0
- package/dist/Fx/constructors/sync.js +32 -0
- package/dist/Fx/internal/DeferredRef.d.ts +259 -7
- package/dist/Fx/internal/DeferredRef.d.ts.map +1 -1
- package/dist/Fx/internal/DeferredRef.js +260 -9
- package/dist/Fx/internal/UnionToTuple.d.ts +22 -0
- package/dist/Fx/internal/UnionToTuple.d.ts.map +1 -1
- package/dist/Fx/internal/diff.d.ts +586 -0
- package/dist/Fx/internal/diff.d.ts.map +1 -1
- package/dist/Fx/internal/diff.js +120 -9
- package/dist/Fx/internal/effectableEvaluateKey.d.ts +30 -0
- package/dist/Fx/internal/effectableEvaluateKey.d.ts.map +1 -0
- package/dist/Fx/internal/effectableEvaluateKey.js +29 -0
- package/dist/Fx/internal/effectableWithOverride.d.ts +55 -0
- package/dist/Fx/internal/effectableWithOverride.d.ts.map +1 -0
- package/dist/Fx/internal/effectableWithOverride.js +46 -0
- package/dist/Fx/internal/equivalence.d.ts +29 -0
- package/dist/Fx/internal/equivalence.d.ts.map +1 -1
- package/dist/Fx/internal/equivalence.js +29 -0
- package/dist/Fx/internal/multicast.d.ts +145 -2
- package/dist/Fx/internal/multicast.d.ts.map +1 -1
- package/dist/Fx/internal/multicast.js +146 -4
- package/dist/Fx/internal/ring-buffer.d.ts +149 -0
- package/dist/Fx/internal/ring-buffer.d.ts.map +1 -1
- package/dist/Fx/internal/ring-buffer.js +155 -0
- package/dist/Fx/internal/scope.d.ts +184 -0
- package/dist/Fx/internal/scope.d.ts.map +1 -1
- package/dist/Fx/internal/scope.js +150 -0
- package/dist/Fx/internal/yieldable.d.ts +117 -2
- package/dist/Fx/internal/yieldable.d.ts.map +1 -1
- package/dist/Fx/internal/yieldable.js +86 -3
- package/dist/Fx/run/collect.d.ts +93 -4
- package/dist/Fx/run/collect.d.ts.map +1 -1
- package/dist/Fx/run/collect.js +94 -5
- package/dist/Fx/run/first.d.ts +23 -1
- package/dist/Fx/run/first.d.ts.map +1 -1
- package/dist/Fx/run/first.js +23 -1
- package/dist/Fx/run/fork.d.ts +52 -2
- package/dist/Fx/run/fork.d.ts.map +1 -1
- package/dist/Fx/run/fork.js +52 -2
- package/dist/Fx/run/observe.d.ts +112 -4
- package/dist/Fx/run/observe.d.ts.map +1 -1
- package/dist/Fx/run/observe.js +137 -16
- package/dist/Fx/run/runPromise.d.ts +45 -2
- package/dist/Fx/run/runPromise.d.ts.map +1 -1
- package/dist/Fx/run/runPromise.js +45 -2
- package/dist/Fx/stream.d.ts +92 -0
- package/dist/Fx/stream.d.ts.map +1 -1
- package/dist/Fx/stream.js +60 -1
- package/dist/Push/Push.d.ts +1286 -98
- package/dist/Push/Push.d.ts.map +1 -1
- package/dist/Push/Push.js +1074 -88
- package/dist/RefArray.d.ts +2 -0
- package/dist/RefArray.d.ts.map +1 -0
- package/dist/RefArray.js +1 -0
- package/dist/RefBigDecimal.d.ts +2 -0
- package/dist/RefBigDecimal.d.ts.map +1 -0
- package/dist/RefBigDecimal.js +1 -0
- package/dist/RefBigInt.d.ts +2 -0
- package/dist/RefBigInt.d.ts.map +1 -0
- package/dist/RefBigInt.js +1 -0
- package/dist/RefBoolean.d.ts +2 -0
- package/dist/RefBoolean.d.ts.map +1 -0
- package/dist/RefBoolean.js +1 -0
- package/dist/RefCause.d.ts +2 -0
- package/dist/RefCause.d.ts.map +1 -0
- package/dist/RefCause.js +1 -0
- package/dist/RefChunk.d.ts +2 -0
- package/dist/RefChunk.d.ts.map +1 -0
- package/dist/RefChunk.js +1 -0
- package/dist/RefDateTime.d.ts +2 -0
- package/dist/RefDateTime.d.ts.map +1 -0
- package/dist/RefDateTime.js +1 -0
- package/dist/RefDuration.d.ts +2 -0
- package/dist/RefDuration.d.ts.map +1 -0
- package/dist/RefDuration.js +1 -0
- package/dist/RefGraph.d.ts +2 -0
- package/dist/RefGraph.d.ts.map +1 -0
- package/dist/RefGraph.js +1 -0
- package/dist/RefHashMap.d.ts +2 -0
- package/dist/RefHashMap.d.ts.map +1 -0
- package/dist/RefHashMap.js +1 -0
- package/dist/RefHashRing.d.ts +2 -0
- package/dist/RefHashRing.d.ts.map +1 -0
- package/dist/RefHashRing.js +1 -0
- package/dist/RefHashSet.d.ts +2 -0
- package/dist/RefHashSet.d.ts.map +1 -0
- package/dist/RefHashSet.js +1 -0
- package/dist/RefIterable.d.ts +2 -0
- package/dist/RefIterable.d.ts.map +1 -0
- package/dist/RefIterable.js +1 -0
- package/dist/RefOption.d.ts +2 -0
- package/dist/RefOption.d.ts.map +1 -0
- package/dist/RefOption.js +1 -0
- package/dist/RefRecord.d.ts +2 -0
- package/dist/RefRecord.d.ts.map +1 -0
- package/dist/RefRecord.js +1 -0
- package/dist/RefResult.d.ts +2 -0
- package/dist/RefResult.d.ts.map +1 -0
- package/dist/RefResult.js +1 -0
- package/dist/RefString.d.ts +2 -0
- package/dist/RefString.d.ts.map +1 -0
- package/dist/RefString.js +1 -0
- package/dist/RefStruct.d.ts +2 -0
- package/dist/RefStruct.d.ts.map +1 -0
- package/dist/RefStruct.js +1 -0
- package/dist/RefSubject/Hydration.d.ts +504 -0
- package/dist/RefSubject/Hydration.d.ts.map +1 -0
- package/dist/RefSubject/Hydration.js +300 -0
- package/dist/RefSubject/RefArray.d.ts +382 -35
- package/dist/RefSubject/RefArray.d.ts.map +1 -1
- package/dist/RefSubject/RefArray.js +374 -40
- package/dist/RefSubject/RefBigDecimal.d.ts +241 -21
- package/dist/RefSubject/RefBigDecimal.d.ts.map +1 -1
- package/dist/RefSubject/RefBigDecimal.js +229 -20
- package/dist/RefSubject/RefBigInt.d.ts +181 -16
- package/dist/RefSubject/RefBigInt.d.ts.map +1 -1
- package/dist/RefSubject/RefBigInt.js +169 -15
- package/dist/RefSubject/RefBoolean.d.ts +181 -16
- package/dist/RefSubject/RefBoolean.d.ts.map +1 -1
- package/dist/RefSubject/RefBoolean.js +169 -15
- package/dist/RefSubject/RefCause.d.ts +133 -12
- package/dist/RefSubject/RefCause.d.ts.map +1 -1
- package/dist/RefSubject/RefCause.js +121 -11
- package/dist/RefSubject/RefChunk.d.ts +481 -76
- package/dist/RefSubject/RefChunk.d.ts.map +1 -1
- package/dist/RefSubject/RefChunk.js +471 -75
- package/dist/RefSubject/RefDateTime.d.ts +137 -16
- package/dist/RefSubject/RefDateTime.d.ts.map +1 -1
- package/dist/RefSubject/RefDateTime.js +122 -12
- package/dist/RefSubject/RefDuration.d.ts +169 -15
- package/dist/RefSubject/RefDuration.d.ts.map +1 -1
- package/dist/RefSubject/RefDuration.js +157 -14
- package/dist/RefSubject/RefGraph.d.ts +349 -35
- package/dist/RefSubject/RefGraph.d.ts.map +1 -1
- package/dist/RefSubject/RefGraph.js +334 -32
- package/dist/RefSubject/RefHashMap.d.ts +323 -28
- package/dist/RefSubject/RefHashMap.d.ts.map +1 -1
- package/dist/RefSubject/RefHashMap.js +317 -29
- package/dist/RefSubject/RefHashRing.d.ts +159 -15
- package/dist/RefSubject/RefHashRing.d.ts.map +1 -1
- package/dist/RefSubject/RefHashRing.js +145 -12
- package/dist/RefSubject/RefHashSet.d.ts +251 -22
- package/dist/RefSubject/RefHashSet.d.ts.map +1 -1
- package/dist/RefSubject/RefHashSet.js +238 -20
- package/dist/RefSubject/RefIterable.d.ts +358 -32
- package/dist/RefSubject/RefIterable.d.ts.map +1 -1
- package/dist/RefSubject/RefIterable.js +350 -30
- package/dist/RefSubject/RefOption.d.ts +157 -14
- package/dist/RefSubject/RefOption.d.ts.map +1 -1
- package/dist/RefSubject/RefOption.js +145 -13
- package/dist/RefSubject/RefRecord.d.ts +402 -64
- package/dist/RefSubject/RefRecord.d.ts.map +1 -1
- package/dist/RefSubject/RefRecord.js +364 -39
- package/dist/RefSubject/RefResult.d.ts +167 -35
- package/dist/RefSubject/RefResult.d.ts.map +1 -1
- package/dist/RefSubject/RefResult.js +133 -12
- package/dist/RefSubject/RefString.d.ts +205 -18
- package/dist/RefSubject/RefString.d.ts.map +1 -1
- package/dist/RefSubject/RefString.js +193 -17
- package/dist/RefSubject/RefStruct.d.ts +169 -14
- package/dist/RefSubject/RefStruct.d.ts.map +1 -1
- package/dist/RefSubject/RefStruct.js +157 -13
- package/dist/RefSubject/RefSubject.d.ts +1242 -43
- package/dist/RefSubject/RefSubject.d.ts.map +1 -1
- package/dist/RefSubject/RefSubject.js +1012 -86
- package/dist/RefSubject/RefTrie.d.ts +323 -37
- package/dist/RefSubject/RefTrie.d.ts.map +1 -1
- package/dist/RefSubject/RefTrie.js +311 -31
- package/dist/RefSubject/RefTuple.d.ts +127 -11
- package/dist/RefSubject/RefTuple.d.ts.map +1 -1
- package/dist/RefSubject/RefTuple.js +114 -9
- package/dist/RefSubject/index.d.ts +1 -0
- package/dist/RefSubject/index.d.ts.map +1 -1
- package/dist/RefSubject/index.js +1 -0
- package/dist/RefSubject.d.ts +2 -1
- package/dist/RefSubject.d.ts.map +1 -1
- package/dist/RefSubject.js +2 -1
- package/dist/RefTrie.d.ts +2 -0
- package/dist/RefTrie.d.ts.map +1 -0
- package/dist/RefTrie.js +1 -0
- package/dist/RefTuple.d.ts +2 -0
- package/dist/RefTuple.d.ts.map +1 -0
- package/dist/RefTuple.js +1 -0
- package/dist/Sink/Sink.d.ts +396 -23
- package/dist/Sink/Sink.d.ts.map +1 -1
- package/dist/Sink/Sink.js +55 -7
- package/dist/Sink/combinators.d.ts +789 -3
- package/dist/Sink/combinators.d.ts.map +1 -1
- package/dist/Sink/combinators.js +812 -7
- package/dist/Subject/Subject.d.ts +1022 -27
- package/dist/Subject/Subject.d.ts.map +1 -1
- package/dist/Subject/Subject.js +909 -43
- package/dist/Versioned/Versioned.d.ts +475 -25
- package/dist/Versioned/Versioned.d.ts.map +1 -1
- package/dist/Versioned/Versioned.js +298 -46
- package/dist/index.d.ts +22 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -3
- package/package.json +125 -11
- package/dist/Fx/constructors/fromYieldable.d.ts +0 -12
- package/dist/Fx/constructors/fromYieldable.d.ts.map +0 -1
- package/dist/Fx/constructors/fromYieldable.js +0 -12
- package/src/Fx/Fx.ts +0 -164
- package/src/Fx/TypeId.ts +0 -25
- package/src/Fx/combinators/catch.ts +0 -165
- package/src/Fx/combinators/causes.ts +0 -23
- package/src/Fx/combinators/compact.ts +0 -15
- package/src/Fx/combinators/continueWith.ts +0 -78
- package/src/Fx/combinators/ensuring.ts +0 -23
- package/src/Fx/combinators/exhaustLatestMap.ts +0 -74
- package/src/Fx/combinators/exhaustLatestMapEffect.ts +0 -25
- package/src/Fx/combinators/exhaustMap.ts +0 -36
- package/src/Fx/combinators/exhaustMapEffect.ts +0 -23
- package/src/Fx/combinators/exit.ts +0 -15
- package/src/Fx/combinators/filter.ts +0 -22
- package/src/Fx/combinators/filterEffect.ts +0 -31
- package/src/Fx/combinators/filterMap.ts +0 -23
- package/src/Fx/combinators/filterMapEffect.ts +0 -32
- package/src/Fx/combinators/filterMapLoop.ts +0 -35
- package/src/Fx/combinators/filterMapLoopCause.ts +0 -36
- package/src/Fx/combinators/filterMapLoopCauseEffect.ts +0 -46
- package/src/Fx/combinators/filterMapLoopEffect.ts +0 -36
- package/src/Fx/combinators/flatMap.ts +0 -51
- package/src/Fx/combinators/flatMapConcurrently.ts +0 -36
- package/src/Fx/combinators/flatMapConcurrentlyEffect.ts +0 -26
- package/src/Fx/combinators/flatMapEffect.ts +0 -42
- package/src/Fx/combinators/flip.ts +0 -14
- package/src/Fx/combinators/gen.ts +0 -24
- package/src/Fx/combinators/genScoped.ts +0 -24
- package/src/Fx/combinators/index.ts +0 -51
- package/src/Fx/combinators/keyed.ts +0 -369
- package/src/Fx/combinators/loop.ts +0 -27
- package/src/Fx/combinators/loopCause.ts +0 -34
- package/src/Fx/combinators/loopCauseEffect.ts +0 -36
- package/src/Fx/combinators/loopEffect.ts +0 -34
- package/src/Fx/combinators/map.ts +0 -22
- package/src/Fx/combinators/mapEffect.ts +0 -32
- package/src/Fx/combinators/mergeAll.ts +0 -22
- package/src/Fx/combinators/mergeOrdered.ts +0 -123
- package/src/Fx/combinators/onError.ts +0 -40
- package/src/Fx/combinators/onExit.ts +0 -82
- package/src/Fx/combinators/onInterrupt.ts +0 -87
- package/src/Fx/combinators/provide.ts +0 -62
- package/src/Fx/combinators/skip.ts +0 -20
- package/src/Fx/combinators/skipRepeats.ts +0 -15
- package/src/Fx/combinators/skipRepeatsWith.ts +0 -40
- package/src/Fx/combinators/slice.ts +0 -32
- package/src/Fx/combinators/switchMap.ts +0 -55
- package/src/Fx/combinators/switchMapEffect.ts +0 -25
- package/src/Fx/combinators/take.ts +0 -17
- package/src/Fx/combinators/takeUntil.ts +0 -50
- package/src/Fx/combinators/tapEffect.ts +0 -39
- package/src/Fx/combinators/tuple.ts +0 -79
- package/src/Fx/combinators/unwrap.ts +0 -21
- package/src/Fx/combinators/unwrapScoped.ts +0 -26
- package/src/Fx/combinators/when.ts +0 -64
- package/src/Fx/combinators/withSpan.ts +0 -24
- package/src/Fx/constructors/at.ts +0 -23
- package/src/Fx/constructors/die.ts +0 -17
- package/src/Fx/constructors/empty.ts +0 -10
- package/src/Fx/constructors/fail.ts +0 -14
- package/src/Fx/constructors/failCause.ts +0 -14
- package/src/Fx/constructors/fn.ts +0 -245
- package/src/Fx/constructors/fromEffect.ts +0 -24
- package/src/Fx/constructors/fromFailures.ts +0 -19
- package/src/Fx/constructors/fromIterable.ts +0 -15
- package/src/Fx/constructors/fromSchedule.ts +0 -18
- package/src/Fx/constructors/fromYieldable.ts +0 -17
- package/src/Fx/constructors/index.ts +0 -15
- package/src/Fx/constructors/interrupt.ts +0 -13
- package/src/Fx/constructors/make.ts +0 -103
- package/src/Fx/constructors/periodic.ts +0 -15
- package/src/Fx/constructors/succeed.ts +0 -37
- package/src/Fx/constructors/suspend.ts +0 -6
- package/src/Fx/index.ts +0 -6
- package/src/Fx/internal/DeferredRef.ts +0 -87
- package/src/Fx/internal/UnionToTuple.ts +0 -12
- package/src/Fx/internal/diff.ts +0 -191
- package/src/Fx/internal/equivalence.ts +0 -12
- package/src/Fx/internal/multicast.ts +0 -51
- package/src/Fx/internal/ring-buffer.ts +0 -60
- package/src/Fx/internal/scope.ts +0 -58
- package/src/Fx/internal/yieldable.ts +0 -31
- package/src/Fx/run/collect.ts +0 -79
- package/src/Fx/run/first.ts +0 -20
- package/src/Fx/run/fork.ts +0 -40
- package/src/Fx/run/index.ts +0 -5
- package/src/Fx/run/observe.ts +0 -114
- package/src/Fx/run/runPromise.ts +0 -32
- package/src/Fx/stream.ts +0 -42
- package/src/Fx.catch.test.ts +0 -61
- package/src/Fx.fn.test.ts +0 -51
- package/src/Fx.lifecycle.test.ts +0 -80
- package/src/Fx.test.ts +0 -71
- package/src/Fx.ts +0 -1
- package/src/Push/Push.ts +0 -903
- package/src/Push/index.ts +0 -1
- package/src/Push.test.ts +0 -26
- package/src/Push.ts +0 -1
- package/src/RefSubject/RefArray.ts +0 -512
- package/src/RefSubject/RefBigDecimal.test.ts +0 -56
- package/src/RefSubject/RefBigDecimal.ts +0 -295
- package/src/RefSubject/RefBigInt.test.ts +0 -56
- package/src/RefSubject/RefBigInt.ts +0 -189
- package/src/RefSubject/RefBoolean.test.ts +0 -57
- package/src/RefSubject/RefBoolean.ts +0 -185
- package/src/RefSubject/RefCause.test.ts +0 -53
- package/src/RefSubject/RefCause.ts +0 -146
- package/src/RefSubject/RefChunk.ts +0 -510
- package/src/RefSubject/RefDateTime.test.ts +0 -43
- package/src/RefSubject/RefDateTime.ts +0 -264
- package/src/RefSubject/RefDuration.test.ts +0 -49
- package/src/RefSubject/RefDuration.ts +0 -188
- package/src/RefSubject/RefGraph.ts +0 -650
- package/src/RefSubject/RefHashMap.ts +0 -465
- package/src/RefSubject/RefHashRing.ts +0 -262
- package/src/RefSubject/RefHashSet.ts +0 -308
- package/src/RefSubject/RefIterable.ts +0 -445
- package/src/RefSubject/RefOption.test.ts +0 -67
- package/src/RefSubject/RefOption.ts +0 -193
- package/src/RefSubject/RefRecord.ts +0 -612
- package/src/RefSubject/RefResult.test.ts +0 -63
- package/src/RefSubject/RefResult.ts +0 -209
- package/src/RefSubject/RefString.test.ts +0 -61
- package/src/RefSubject/RefString.ts +0 -256
- package/src/RefSubject/RefStruct.test.ts +0 -60
- package/src/RefSubject/RefStruct.ts +0 -253
- package/src/RefSubject/RefSubject.ts +0 -2545
- package/src/RefSubject/RefTrie.ts +0 -356
- package/src/RefSubject/RefTuple.test.ts +0 -60
- package/src/RefSubject/RefTuple.ts +0 -231
- package/src/RefSubject/index.ts +0 -21
- package/src/RefSubject.test.ts +0 -65
- package/src/RefSubject.ts +0 -1
- package/src/Sink/Sink.ts +0 -159
- package/src/Sink/combinators.ts +0 -993
- package/src/Sink/index.ts +0 -2
- package/src/Sink.ts +0 -1
- package/src/Subject/Subject.ts +0 -441
- package/src/Subject/index.ts +0 -1
- package/src/Subject.test.ts +0 -47
- package/src/Subject.ts +0 -1
- package/src/Versioned/Versioned.ts +0 -521
- package/src/Versioned/index.ts +0 -1
- package/src/Versioned.test.ts +0 -23
- package/src/Versioned.ts +0 -1
- package/src/index.ts +0 -7
- package/tsconfig.json +0 -6
|
@@ -3,11 +3,21 @@ import * as Effect from "effect/Effect";
|
|
|
3
3
|
import * as Exit from "effect/Exit";
|
|
4
4
|
import * as Option from "effect/Option";
|
|
5
5
|
import type { Predicate } from "effect/Predicate";
|
|
6
|
+
import * as Ref from "effect/Ref";
|
|
6
7
|
import type { Scheduler } from "effect/Scheduler";
|
|
7
8
|
import type { Sink } from "./Sink.js";
|
|
8
9
|
/**
|
|
9
10
|
* Transforms values before they reach the sink using a pure function.
|
|
10
11
|
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* ## Why
|
|
14
|
+
* Contramapping adapts a consumer to a new input without changing the producer or allocating an
|
|
15
|
+
* intermediate Fx.
|
|
16
|
+
*
|
|
17
|
+
* ## Ownership and lifetime
|
|
18
|
+
* Mapping is synchronous, preserves one-for-one input order, and acquires no resources. Thrown
|
|
19
|
+
* exceptions are defects. The wrapped sink still owns its callback effects and service needs.
|
|
20
|
+
*
|
|
11
21
|
* @example
|
|
12
22
|
* ```ts
|
|
13
23
|
* import { Effect } from "effect"
|
|
@@ -30,12 +40,67 @@ import type { Sink } from "./Sink.js";
|
|
|
30
40
|
* ```
|
|
31
41
|
*
|
|
32
42
|
* @since 1.0.0
|
|
33
|
-
* @category
|
|
43
|
+
* @category Transforming inputs
|
|
34
44
|
*/
|
|
35
45
|
export declare function map<A, E, R, B>(sink: Sink<A, E, R>, f: (b: B) => A): Sink<B, E, R>;
|
|
46
|
+
/**
|
|
47
|
+
* Alias for `map`, named for the input-side direction of the transformation.
|
|
48
|
+
*
|
|
49
|
+
* @remarks
|
|
50
|
+
* ## Why
|
|
51
|
+
* `mapInput` makes contravariant Sink pipelines easier to read beside output-mapping APIs.
|
|
52
|
+
*
|
|
53
|
+
* ## Ownership and lifetime
|
|
54
|
+
* It is exactly `map`: synchronous, one-for-one, ordered, and resource-free.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* import { Effect } from "effect"
|
|
59
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
60
|
+
* const numbers = Sink.make(Effect.logError, (value: number) => Effect.log(value))
|
|
61
|
+
* const strings = Sink.mapInput(numbers, Number)
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* @since 1.0.0
|
|
65
|
+
* @category Transforming inputs
|
|
66
|
+
*/
|
|
67
|
+
export declare const mapInput: typeof map;
|
|
68
|
+
/**
|
|
69
|
+
* Maps the error channel of a sink using the provided function.
|
|
70
|
+
* Failures are mapped via `Cause.map`; defects and interrupts are preserved.
|
|
71
|
+
*
|
|
72
|
+
* @remarks
|
|
73
|
+
* ## Why
|
|
74
|
+
* A producer's typed error can be translated into the vocabulary expected by an existing consumer
|
|
75
|
+
* without losing Cause structure.
|
|
76
|
+
*
|
|
77
|
+
* ## Ownership and lifetime
|
|
78
|
+
* Mapping is synchronous and resource-free. Success order is unchanged; only `Fail` reasons are
|
|
79
|
+
* mapped, while defects and interruption reasons pass through untouched.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```ts
|
|
83
|
+
* import { Effect } from "effect"
|
|
84
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
85
|
+
* const target: Sink.Sink<number, string> = Sink.make(Effect.logError, Effect.log)
|
|
86
|
+
* const acceptsNumbers = Sink.mapError(target, (error: number) => `code:${error}`)
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* @since 1.0.0
|
|
90
|
+
* @category Failure handling
|
|
91
|
+
*/
|
|
92
|
+
export declare function mapError<A, E, E2, R>(sink: Sink<A, E2, R>, f: (e: E) => E2): Sink<A, E, R>;
|
|
36
93
|
/**
|
|
37
94
|
* Filters and transforms values before they reach the sink using a function that returns an `Option`.
|
|
38
95
|
*
|
|
96
|
+
* @remarks
|
|
97
|
+
* ## Why
|
|
98
|
+
* Selection and transformation happen at the consumer boundary without constructing another Fx.
|
|
99
|
+
*
|
|
100
|
+
* ## Ownership and lifetime
|
|
101
|
+
* Inputs are inspected synchronously in arrival order. `Some` invokes the wrapped sink once;
|
|
102
|
+
* `None` invokes it zero times. The adapter acquires no resources and failures pass through.
|
|
103
|
+
*
|
|
39
104
|
* @example
|
|
40
105
|
* ```ts
|
|
41
106
|
* import { Effect, Option } from "effect"
|
|
@@ -59,13 +124,43 @@ export declare function map<A, E, R, B>(sink: Sink<A, E, R>, f: (b: B) => A): Si
|
|
|
59
124
|
* ```
|
|
60
125
|
*
|
|
61
126
|
* @since 1.0.0
|
|
62
|
-
* @category
|
|
127
|
+
* @category Selecting inputs
|
|
63
128
|
*/
|
|
64
129
|
export declare function filterMap<A, E, R, B>(sink: Sink<A, E, R>, f: (b: B) => Option.Option<A>): Sink<B, E, R>;
|
|
130
|
+
/**
|
|
131
|
+
* Forwards `Some` values and discards `None` values.
|
|
132
|
+
*
|
|
133
|
+
* @remarks
|
|
134
|
+
* ## Why
|
|
135
|
+
* `compact` consumes optional producer output with the same zero-or-one cardinality as `filterMap`.
|
|
136
|
+
*
|
|
137
|
+
* ## Ownership and lifetime
|
|
138
|
+
* Option inspection is synchronous and resource-free. Present values retain arrival order; failure
|
|
139
|
+
* causes pass through unchanged.
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```ts
|
|
143
|
+
* import { Effect, Option } from "effect"
|
|
144
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
145
|
+
* const sink = Sink.compact(Sink.make(Effect.logError, (n: number) => Effect.log(n)))
|
|
146
|
+
* sink.onSuccess(Option.some(1))
|
|
147
|
+
* ```
|
|
148
|
+
*
|
|
149
|
+
* @since 1.0.0
|
|
150
|
+
* @category Selecting inputs
|
|
151
|
+
*/
|
|
65
152
|
export declare function compact<A, E, R>(sink: Sink<A, E, R>): Sink<Option.Option<A>, E, R>;
|
|
66
153
|
/**
|
|
67
154
|
* Filters values before they reach the sink using a predicate function.
|
|
68
155
|
*
|
|
156
|
+
* @remarks
|
|
157
|
+
* ## Why
|
|
158
|
+
* Predicate filtering narrows consumer traffic without changing the producer.
|
|
159
|
+
*
|
|
160
|
+
* ## Ownership and lifetime
|
|
161
|
+
* The predicate runs synchronously in arrival order. Matching values invoke the wrapped sink once;
|
|
162
|
+
* non-matches invoke it zero times. The adapter acquires no resources.
|
|
163
|
+
*
|
|
69
164
|
* @example
|
|
70
165
|
* ```ts
|
|
71
166
|
* import { Effect } from "effect"
|
|
@@ -87,75 +182,577 @@ export declare function compact<A, E, R>(sink: Sink<A, E, R>): Sink<Option.Optio
|
|
|
87
182
|
* ```
|
|
88
183
|
*
|
|
89
184
|
* @since 1.0.0
|
|
90
|
-
* @category
|
|
185
|
+
* @category Selecting inputs
|
|
91
186
|
*/
|
|
92
187
|
export declare function filter<A, E, R>(sink: Sink<A, E, R>, f: (a: A) => boolean): Sink<A, E, R>;
|
|
188
|
+
/**
|
|
189
|
+
* Runs a producer-style callback with a sink that can complete the surrounding Effect early.
|
|
190
|
+
*
|
|
191
|
+
* @remarks
|
|
192
|
+
* ## Why
|
|
193
|
+
* Consumer combinators can stop upstream work after a bound or predicate without representing
|
|
194
|
+
* normal completion as failure.
|
|
195
|
+
*
|
|
196
|
+
* ## Ownership and lifetime
|
|
197
|
+
* The returned Effect owns the callback fiber. Completion, `earlyExit`, or interruption aborts that
|
|
198
|
+
* fiber through the supplied signal; deliveries after exit are ignored. The callback's services are
|
|
199
|
+
* combined with the wrapped sink's services.
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```ts
|
|
203
|
+
* import { Effect } from "effect"
|
|
204
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
205
|
+
* const base = Sink.make(Effect.logError, Effect.log)
|
|
206
|
+
* const program = Sink.withEarlyExit(base, (sink) => sink.onSuccess("done").pipe(Effect.andThen(sink.earlyExit)))
|
|
207
|
+
* ```
|
|
208
|
+
*
|
|
209
|
+
* @since 1.0.0
|
|
210
|
+
* @category Stopping delivery
|
|
211
|
+
*/
|
|
93
212
|
export declare function withEarlyExit<A, E, R, R2>(sink: Sink<A, E, R>, f: (sink: Sink.WithEarlyExit<A, E, R>, params: {
|
|
94
213
|
signal: AbortSignal;
|
|
95
214
|
scheduler: Scheduler;
|
|
96
215
|
}) => Effect.Effect<unknown, never, R2>): Effect.Effect<void, never, R | R2>;
|
|
216
|
+
/**
|
|
217
|
+
* Runs a callback with an early-exit sink and a private Effect `Ref` initialized to `state`.
|
|
218
|
+
*
|
|
219
|
+
* @remarks
|
|
220
|
+
* ## Why
|
|
221
|
+
* It supports stateful consumer protocols while keeping their state local to one run.
|
|
222
|
+
*
|
|
223
|
+
* ## Ownership and lifetime
|
|
224
|
+
* Each execution creates one Ref and owns it until exit or interruption. Ref operations are lazy
|
|
225
|
+
* atomic Effects: serialized callback execution preserves producer order, while concurrent execution
|
|
226
|
+
* is ordered by scheduling. No state is shared across `withState` executions.
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```ts
|
|
230
|
+
* import { Effect, Ref } from "effect"
|
|
231
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
232
|
+
* const base = Sink.make(Effect.logError, Effect.log)
|
|
233
|
+
* const program = Sink.withState(base, 0, ({ state, earlyExit }) => Ref.set(state, 1).pipe(Effect.andThen(earlyExit)))
|
|
234
|
+
* ```
|
|
235
|
+
*
|
|
236
|
+
* @since 1.0.0
|
|
237
|
+
* @category Stateful delivery
|
|
238
|
+
*/
|
|
97
239
|
export declare function withState<A, E, R, B, R2>(sink: Sink<A, E, R>, state: B, f: (sink: Sink.WithState<A, E, R, B>, params: {
|
|
98
240
|
signal: AbortSignal;
|
|
99
241
|
scheduler: Scheduler;
|
|
100
242
|
}) => Effect.Effect<unknown, never, R2>): Effect.Effect<void, never, R | R2>;
|
|
243
|
+
/**
|
|
244
|
+
* Runs a callback with private state whose effectful reads and writes are serialized.
|
|
245
|
+
*
|
|
246
|
+
* @remarks
|
|
247
|
+
* ## Why
|
|
248
|
+
* Overlapping asynchronous callbacks need a lock to prevent multiple updates from reading the same
|
|
249
|
+
* prior state.
|
|
250
|
+
*
|
|
251
|
+
* ## Ownership and lifetime
|
|
252
|
+
* Each execution owns one mutable cell and one single-permit semaphore. Modify Effects serialize in
|
|
253
|
+
* semaphore-acquisition order, release the permit on completion or interruption, and expose their
|
|
254
|
+
* typed errors and services. Constructing an Effect does not acquire the permit; running it does.
|
|
255
|
+
* Exit aborts the surrounding callback fiber.
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* ```ts
|
|
259
|
+
* import { Effect } from "effect"
|
|
260
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
261
|
+
* const base = Sink.make(Effect.logError, Effect.log)
|
|
262
|
+
* const program = Sink.withStateSemaphore(base, 0, (state) =>
|
|
263
|
+
* state.updateEffect((n) => Effect.succeed(n + 1)).pipe(Effect.andThen(state.earlyExit)))
|
|
264
|
+
* ```
|
|
265
|
+
*
|
|
266
|
+
* @since 1.0.0
|
|
267
|
+
* @category Stateful delivery
|
|
268
|
+
*/
|
|
101
269
|
export declare function withStateSemaphore<A, E, R, B, R2>(sink: Sink<A, E, R>, state: B, f: (sink: Sink.WithStateSemaphore<A, E, R, B>, params: {
|
|
102
270
|
signal: AbortSignal;
|
|
103
271
|
scheduler: Scheduler;
|
|
104
272
|
}) => Effect.Effect<unknown, never, R2>): Effect.Effect<void, never, R | R2>;
|
|
273
|
+
/**
|
|
274
|
+
* Threads pure state through successful inputs and forwards one derived value per input.
|
|
275
|
+
*
|
|
276
|
+
* @remarks
|
|
277
|
+
* ## Why
|
|
278
|
+
* `loop` implements an ordered consumer-side state machine without exposing mutable state to the
|
|
279
|
+
* producer.
|
|
280
|
+
*
|
|
281
|
+
* ## Ownership and lifetime
|
|
282
|
+
* Each adapted sink owns its seed. Updates are synchronous and follow callback invocation order;
|
|
283
|
+
* every input produces exactly one downstream success. Failures bypass the state machine. Reusing
|
|
284
|
+
* the same sink for another producer run continues from its retained seed; create a new sink to reset.
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* ```ts
|
|
288
|
+
* import { Effect } from "effect"
|
|
289
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
290
|
+
* const totals = Sink.loop(Sink.make(Effect.logError, Effect.log), 0, (sum, n: number) => [sum + n, sum + n])
|
|
291
|
+
* ```
|
|
292
|
+
*
|
|
293
|
+
* @since 1.0.0
|
|
294
|
+
* @category Stateful delivery
|
|
295
|
+
*/
|
|
105
296
|
export declare const loop: {
|
|
106
297
|
<B, A, C>(seed: B, f: (acc: B, a: A) => readonly [C, B]): <E, R>(sink: Sink<C, E, R>) => Sink<A, E, R>;
|
|
107
298
|
<A, E, R, B, C>(sink: Sink<C, E, R>, seed: B, f: (acc: B, a: A) => readonly [C, B]): Sink<A, E, R>;
|
|
108
299
|
};
|
|
300
|
+
/**
|
|
301
|
+
* Threads pure state through failure causes and forwards one transformed cause per failure.
|
|
302
|
+
*
|
|
303
|
+
* @remarks
|
|
304
|
+
* ## Why
|
|
305
|
+
* Stateful error translation can retain retry or protocol context while preserving full Cause
|
|
306
|
+
* information.
|
|
307
|
+
*
|
|
308
|
+
* ## Ownership and lifetime
|
|
309
|
+
* Each adapted sink owns its seed. Failure callbacks update it synchronously in invocation order;
|
|
310
|
+
* successes pass through unchanged. Reusing the sink continues from its retained seed; create a new
|
|
311
|
+
* sink to reset. No resources are acquired.
|
|
312
|
+
*
|
|
313
|
+
* @example
|
|
314
|
+
* ```ts
|
|
315
|
+
* import { Cause, Effect } from "effect"
|
|
316
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
317
|
+
* const target: Sink.Sink<number, string> = Sink.make(Effect.logError, Effect.log)
|
|
318
|
+
* const counted = Sink.loopCause(target, 0, (n, cause: Cause.Cause<string>) => [cause, n + 1])
|
|
319
|
+
* ```
|
|
320
|
+
*
|
|
321
|
+
* @since 1.0.0
|
|
322
|
+
* @category Stateful failure handling
|
|
323
|
+
*/
|
|
109
324
|
export declare const loopCause: {
|
|
110
325
|
<B, A, C>(seed: B, f: (acc: B, a: Cause.Cause<A>) => readonly [Cause.Cause<C>, B]): <E, R>(sink: Sink<A, C, R>) => Sink<A, E, R>;
|
|
111
326
|
<A, E, R, B, C>(sink: Sink<A, C, R>, seed: B, f: (acc: B, a: Cause.Cause<E>) => readonly [Cause.Cause<C>, B]): Sink<A, E, R>;
|
|
112
327
|
};
|
|
328
|
+
/**
|
|
329
|
+
* Threads pure state through successes and optionally forwards a derived value.
|
|
330
|
+
*
|
|
331
|
+
* @remarks
|
|
332
|
+
* ## Why
|
|
333
|
+
* It combines consumer-side state, filtering, and mapping in one ordered transition.
|
|
334
|
+
*
|
|
335
|
+
* ## Ownership and lifetime
|
|
336
|
+
* Each adapted sink owns its seed. Every input updates state synchronously; `Some` emits once and
|
|
337
|
+
* `None` emits nothing. Failures pass through. Reusing the sink continues from its retained seed;
|
|
338
|
+
* create a new sink to reset. The adapter acquires no resources.
|
|
339
|
+
*
|
|
340
|
+
* @example
|
|
341
|
+
* ```ts
|
|
342
|
+
* import { Effect, Option } from "effect"
|
|
343
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
344
|
+
* const target = Sink.make(Effect.logError, Effect.log)
|
|
345
|
+
* const everyOther = Sink.filterMapLoop(target, false, (skip, n: number) => [skip ? Option.none() : Option.some(n), !skip])
|
|
346
|
+
* ```
|
|
347
|
+
*
|
|
348
|
+
* @since 1.0.0
|
|
349
|
+
* @category Stateful delivery
|
|
350
|
+
*/
|
|
113
351
|
export declare const filterMapLoop: {
|
|
114
352
|
<B, A, C>(seed: B, f: (acc: B, a: A) => readonly [Option.Option<C>, B]): <E, R>(sink: Sink<C, E, R>) => Sink<A, E, R>;
|
|
115
353
|
<A, E, R, B, C>(sink: Sink<C, E, R>, seed: B, f: (acc: B, a: A) => readonly [Option.Option<C>, B]): Sink<A, E, R>;
|
|
116
354
|
};
|
|
355
|
+
/**
|
|
356
|
+
* Threads pure state through failures and optionally forwards a transformed cause.
|
|
357
|
+
*
|
|
358
|
+
* @remarks
|
|
359
|
+
* ## Why
|
|
360
|
+
* Stateful failure suppression and translation can be expressed without discarding Cause structure.
|
|
361
|
+
*
|
|
362
|
+
* ## Ownership and lifetime
|
|
363
|
+
* Each adapted sink owns its seed. Failure callbacks update state synchronously in invocation order;
|
|
364
|
+
* `Some` forwards once and `None` suppresses the failure. Successes pass through unchanged. Reusing
|
|
365
|
+
* the sink continues from its retained seed; create a new sink to reset.
|
|
366
|
+
*
|
|
367
|
+
* @example
|
|
368
|
+
* ```ts
|
|
369
|
+
* import { Cause, Effect, Option } from "effect"
|
|
370
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
371
|
+
* const target: Sink.Sink<number, string> = Sink.make(Effect.logError, Effect.log)
|
|
372
|
+
* const first = Sink.filterMapLoopCause(target, true, (keep, cause: Cause.Cause<string>) => [keep ? Option.some(cause) : Option.none(), false])
|
|
373
|
+
* ```
|
|
374
|
+
*
|
|
375
|
+
* @since 1.0.0
|
|
376
|
+
* @category Stateful failure handling
|
|
377
|
+
*/
|
|
117
378
|
export declare const filterMapLoopCause: {
|
|
118
379
|
<B, A, C>(seed: B, f: (acc: B, a: Cause.Cause<A>) => readonly [Option.Option<Cause.Cause<C>>, B]): <E, R>(sink: Sink<A, C, R>) => Sink<A, E, R>;
|
|
119
380
|
<A, E, R, B, C>(sink: Sink<A, C, R>, seed: B, f: (acc: B, a: Cause.Cause<E>) => readonly [Option.Option<Cause.Cause<C>>, B]): Sink<A, E, R>;
|
|
120
381
|
};
|
|
382
|
+
/**
|
|
383
|
+
* Threads state through an effectful success transformation and forwards one value on success.
|
|
384
|
+
*
|
|
385
|
+
* @remarks
|
|
386
|
+
* ## Why
|
|
387
|
+
* Stateful consumer transitions can consult Effect services or fail without moving the state
|
|
388
|
+
* machine into the producer.
|
|
389
|
+
*
|
|
390
|
+
* ## Ownership and lifetime
|
|
391
|
+
* Callback invocation constructs a transition Effect from the seed visible at that moment. The
|
|
392
|
+
* adapter does not serialize those Effects: overlapping callbacks can read the same seed, and
|
|
393
|
+
* successful transitions commit in completion order. A failure is sent to the wrapped sink and does
|
|
394
|
+
* not commit. The sink instance retains its last committed seed when reused by another producer run;
|
|
395
|
+
* construct a new adapted sink to reset it. Transition services and interruption remain typed.
|
|
396
|
+
*
|
|
397
|
+
* @example
|
|
398
|
+
* ```ts
|
|
399
|
+
* import { Effect } from "effect"
|
|
400
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
401
|
+
* const target = Sink.make(Effect.logError, Effect.log)
|
|
402
|
+
* const totals = Sink.loopEffect(target, 0, (sum, n: number) => Effect.succeed([sum + n, sum + n] as const))
|
|
403
|
+
* ```
|
|
404
|
+
*
|
|
405
|
+
* @since 1.0.0
|
|
406
|
+
* @category Stateful delivery
|
|
407
|
+
*/
|
|
121
408
|
export declare const loopEffect: {
|
|
122
409
|
<B, A, E2, R2, C>(seed: B, f: (acc: B, a: A) => Effect.Effect<readonly [C, B], E2, R2>): <E, R>(sink: Sink<C, E | E2, R>) => Sink<A, E | E2, R | R2>;
|
|
123
410
|
<A, E, R, B, C>(sink: Sink<C, E, R>, seed: B, f: (acc: B, a: A) => Effect.Effect<readonly [C, B], E, R>): Sink<A, E, R>;
|
|
124
411
|
};
|
|
412
|
+
/**
|
|
413
|
+
* Threads state through an effectful success transition and optionally forwards its value.
|
|
414
|
+
*
|
|
415
|
+
* @remarks
|
|
416
|
+
* ## Why
|
|
417
|
+
* One transition can perform service-backed work, update state, and decide whether the consumer
|
|
418
|
+
* should observe a value.
|
|
419
|
+
*
|
|
420
|
+
* ## Ownership and lifetime
|
|
421
|
+
* Callback invocation constructs a transition Effect from the seed visible at that moment. The
|
|
422
|
+
* adapter does not serialize those Effects: overlapping callbacks can read the same seed, and
|
|
423
|
+
* successful transitions commit in completion order. `Some` then invokes the wrapped sink once,
|
|
424
|
+
* `None` not at all, and failure invokes its failure callback without committing. The sink instance
|
|
425
|
+
* retains its seed across producer runs; construct a new one to reset it.
|
|
426
|
+
*
|
|
427
|
+
* @example
|
|
428
|
+
* ```ts
|
|
429
|
+
* import { Effect, Option } from "effect"
|
|
430
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
431
|
+
* const target = Sink.make(Effect.logError, Effect.log)
|
|
432
|
+
* const sink = Sink.filterMapLoopEffect(target, 0, (count, n: number) => Effect.succeed([Option.some(n), count + 1] as const))
|
|
433
|
+
* ```
|
|
434
|
+
*
|
|
435
|
+
* @since 1.0.0
|
|
436
|
+
* @category Stateful delivery
|
|
437
|
+
*/
|
|
125
438
|
export declare const filterMapLoopEffect: {
|
|
126
439
|
<B, A, E2, R2, C>(seed: B, f: (acc: B, a: A) => Effect.Effect<readonly [Option.Option<C>, B], E2, R2>): <E, R>(sink: Sink<C, E, R>) => Sink<A, E | E2, R | R2>;
|
|
127
440
|
<A, E, R, B, R2, C>(sink: Sink<C, E, R>, seed: B, f: (acc: B, a: A) => Effect.Effect<readonly [Option.Option<C>, B], E, R2>): Sink<A, E, R | R2>;
|
|
128
441
|
};
|
|
442
|
+
/**
|
|
443
|
+
* Threads state through an effectful failure transformation.
|
|
444
|
+
*
|
|
445
|
+
* @remarks
|
|
446
|
+
* ## Why
|
|
447
|
+
* Failure handling can consult services and retain state while preserving the original Cause when
|
|
448
|
+
* the handler itself fails.
|
|
449
|
+
*
|
|
450
|
+
* ## Ownership and lifetime
|
|
451
|
+
* Callback invocation constructs a transition Effect from the seed visible at that moment. The
|
|
452
|
+
* adapter does not serialize those Effects: overlapping failures can read the same seed, and
|
|
453
|
+
* successful transitions commit in completion order. A transition failure is combined with the
|
|
454
|
+
* original cause and does not commit. Success values bypass the state machine. The sink instance
|
|
455
|
+
* retains its seed across producer runs; construct a new one to reset it.
|
|
456
|
+
*
|
|
457
|
+
* @example
|
|
458
|
+
* ```ts
|
|
459
|
+
* import { Effect } from "effect"
|
|
460
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
461
|
+
* const target = Sink.make(Effect.logError, Effect.log)
|
|
462
|
+
* const sink = Sink.loopCauseEffect(target, 0, (count, cause) => Effect.succeed([cause, count + 1] as const))
|
|
463
|
+
* ```
|
|
464
|
+
*
|
|
465
|
+
* @since 1.0.0
|
|
466
|
+
* @category Stateful failure handling
|
|
467
|
+
*/
|
|
129
468
|
export declare const loopCauseEffect: {
|
|
130
469
|
<A, E, R2, B, C>(seed: B, f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<readonly [Cause.Cause<C>, B], E, R2>): <R>(sink: Sink<A, E | C, R>) => Sink<A, E, R | R2>;
|
|
131
470
|
<A, E, R, B, C, R2>(sink: Sink<A, E | C, R>, seed: B, f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<readonly [Cause.Cause<C>, B], E, R2>): Sink<A, E, R | R2>;
|
|
132
471
|
};
|
|
472
|
+
/**
|
|
473
|
+
* Threads state through an effectful failure transition and optionally forwards a cause.
|
|
474
|
+
*
|
|
475
|
+
* @remarks
|
|
476
|
+
* ## Why
|
|
477
|
+
* It supports service-backed, stateful failure suppression or translation at the consumer boundary.
|
|
478
|
+
*
|
|
479
|
+
* ## Ownership and lifetime
|
|
480
|
+
* Callback invocation constructs a transition Effect from the seed visible at that moment. The
|
|
481
|
+
* adapter does not serialize those Effects: overlapping failures can read the same seed, and
|
|
482
|
+
* successful transitions commit in completion order. `Some` forwards one cause, `None` suppresses
|
|
483
|
+
* it, and transition failure is forwarded without committing. Successes pass through. The sink
|
|
484
|
+
* instance retains its seed across producer runs; construct a new one to reset it.
|
|
485
|
+
*
|
|
486
|
+
* @example
|
|
487
|
+
* ```ts
|
|
488
|
+
* import { Cause, Effect, Option } from "effect"
|
|
489
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
490
|
+
* const target: Sink.Sink<number, string> = Sink.make(Effect.logError, Effect.log)
|
|
491
|
+
* const sink = Sink.filterMapLoopCauseEffect(target, false, (seen, cause: Cause.Cause<string>) =>
|
|
492
|
+
* Effect.succeed([seen ? Option.none() : Option.some(cause), true] as const))
|
|
493
|
+
* ```
|
|
494
|
+
*
|
|
495
|
+
* @since 1.0.0
|
|
496
|
+
* @category Stateful failure handling
|
|
497
|
+
*/
|
|
133
498
|
export declare function filterMapLoopCauseEffect<A, E, R, B, E2, R2, C>(sink: Sink<A, E2 | C, R>, seed: B, f: (acc: B, a: Cause.Cause<E>) => Effect.Effect<readonly [Option.Option<Cause.Cause<C>>, B], E2, R2>): Sink<A, E, R | R2>;
|
|
499
|
+
/**
|
|
500
|
+
* Zero-based skip count and maximum take count used by `slice`.
|
|
501
|
+
*
|
|
502
|
+
* @remarks
|
|
503
|
+
* ## Why
|
|
504
|
+
* A named bound makes the consumer's two independent limits explicit.
|
|
505
|
+
*
|
|
506
|
+
* ## Ownership and lifetime
|
|
507
|
+
* Bounds are immutable values and acquire no resources. Each `slice` execution copies their counts
|
|
508
|
+
* into private mutable counters.
|
|
509
|
+
*
|
|
510
|
+
* @example
|
|
511
|
+
* ```ts
|
|
512
|
+
* import type { Bounds } from "@typed/fx/Sink"
|
|
513
|
+
* const secondAndThird: Bounds = { skip: 1, take: 2 }
|
|
514
|
+
* ```
|
|
515
|
+
*
|
|
516
|
+
* @since 1.0.0
|
|
517
|
+
* @category Operator options
|
|
518
|
+
*/
|
|
134
519
|
export interface Bounds {
|
|
520
|
+
/**
|
|
521
|
+
* Number of initial successful values to discard.
|
|
522
|
+
*
|
|
523
|
+
* @remarks
|
|
524
|
+
* ## Why
|
|
525
|
+
* A separate skip count allows bounded windows to begin after an ignored prefix.
|
|
526
|
+
*
|
|
527
|
+
* ## Ownership and lifetime
|
|
528
|
+
* This immutable number acquires no resources; `slice` copies it into invocation-local state.
|
|
529
|
+
*
|
|
530
|
+
* @since 1.0.0
|
|
531
|
+
* @category bounds
|
|
532
|
+
*/
|
|
135
533
|
readonly skip: number;
|
|
534
|
+
/**
|
|
535
|
+
* Maximum number of later successful values to forward before early exit.
|
|
536
|
+
*
|
|
537
|
+
* @remarks
|
|
538
|
+
* ## Why
|
|
539
|
+
* A take count bounds downstream work and gives `slice` its normal completion point.
|
|
540
|
+
*
|
|
541
|
+
* ## Ownership and lifetime
|
|
542
|
+
* This immutable number acquires no resources; `slice` copies it into invocation-local state.
|
|
543
|
+
*
|
|
544
|
+
* @since 1.0.0
|
|
545
|
+
* @category bounds
|
|
546
|
+
*/
|
|
136
547
|
readonly take: number;
|
|
137
548
|
}
|
|
549
|
+
/**
|
|
550
|
+
* Runs a producer callback through a bounded view of a sink.
|
|
551
|
+
*
|
|
552
|
+
* @remarks
|
|
553
|
+
* ## Why
|
|
554
|
+
* Consumers can skip an initial prefix and stop after a fixed number of values, allowing the
|
|
555
|
+
* surrounding producer work to finish early.
|
|
556
|
+
*
|
|
557
|
+
* ## Ownership and lifetime
|
|
558
|
+
* Each execution owns fresh counters and an early-exit callback. Successes remain ordered; at most
|
|
559
|
+
* `take` values are delivered after `skip` values. Failures always pass through. Reaching the bound
|
|
560
|
+
* completes and aborts the callback fiber; negative bounds are not normalized.
|
|
561
|
+
*
|
|
562
|
+
* @example
|
|
563
|
+
* ```ts
|
|
564
|
+
* import { Effect } from "effect"
|
|
565
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
566
|
+
* const target = Sink.make(Effect.logError, Effect.log)
|
|
567
|
+
* const program = Sink.slice(target, { skip: 1, take: 2 }, (bounded) => bounded.onSuccess("kept"))
|
|
568
|
+
* ```
|
|
569
|
+
*
|
|
570
|
+
* @since 1.0.0
|
|
571
|
+
* @category Stopping delivery
|
|
572
|
+
*/
|
|
138
573
|
export declare const slice: {
|
|
139
574
|
<A, E, R, R2>(bounds: Bounds, f: (sink: Sink<A, E, R>) => Effect.Effect<unknown, never, R2>): (sink: Sink<A, E, R>) => Effect.Effect<void, never, R | R2>;
|
|
140
575
|
<A, E, R, R2>(sink: Sink<A, E, R>, bounds: Bounds, f: (sink: Sink<A, E, R>) => Effect.Effect<unknown, never, R2>): Effect.Effect<void, never, R | R2>;
|
|
141
576
|
};
|
|
577
|
+
/**
|
|
578
|
+
* Runs an Effect for each input and forwards its successful value to the sink.
|
|
579
|
+
*
|
|
580
|
+
* @remarks
|
|
581
|
+
* ## Why
|
|
582
|
+
* Consumer-side adaptation can use services and typed failure without creating an intermediate Fx.
|
|
583
|
+
*
|
|
584
|
+
* ## Ownership and lifetime
|
|
585
|
+
* One transition Effect runs per callback invocation. Its success is forwarded once; its complete
|
|
586
|
+
* failure Cause is sent to `onFailure`. Calls themselves are not serialized by this adapter, so
|
|
587
|
+
* ordering follows the invoking producer. Services join the sink requirements; interruption is local
|
|
588
|
+
* to each callback Effect.
|
|
589
|
+
*
|
|
590
|
+
* @example
|
|
591
|
+
* ```ts
|
|
592
|
+
* import { Effect } from "effect"
|
|
593
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
594
|
+
* const numbers = Sink.mapEffect(Sink.make(Effect.logError, Effect.log), (text: string) =>
|
|
595
|
+
* Effect.succeed(Number(text)))
|
|
596
|
+
* ```
|
|
597
|
+
*
|
|
598
|
+
* @since 1.0.0
|
|
599
|
+
* @category Transforming inputs
|
|
600
|
+
*/
|
|
142
601
|
export declare const mapEffect: {
|
|
143
602
|
<B, A, E2, R2>(f: (b: B) => Effect.Effect<A, E2, R2>): <E, R>(sink: Sink<A, E | E2, R>) => Sink<B, E | E2, R | R2>;
|
|
144
603
|
<A, E, R, B, E2, R2>(sink: Sink<A, E | E2, R>, f: (b: B) => Effect.Effect<A, E2, R2>): Sink<B, E | E2, R | R2>;
|
|
145
604
|
};
|
|
605
|
+
/**
|
|
606
|
+
* Alias for `mapEffect`, named for the input-side direction of the effectful transformation.
|
|
607
|
+
*
|
|
608
|
+
* @remarks
|
|
609
|
+
* ## Why
|
|
610
|
+
* The name highlights that Sink composition is contravariant in successful input.
|
|
611
|
+
*
|
|
612
|
+
* ## Ownership and lifetime
|
|
613
|
+
* It is exactly `mapEffect`: one Effect per input, with the same failures, services, ordering, and
|
|
614
|
+
* interruption behavior.
|
|
615
|
+
*
|
|
616
|
+
* @example
|
|
617
|
+
* ```ts
|
|
618
|
+
* import { Effect } from "effect"
|
|
619
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
620
|
+
* const sink = Sink.mapInputEffect(Sink.make(Effect.logError, Effect.log), (n: number) => Effect.succeed(String(n)))
|
|
621
|
+
* ```
|
|
622
|
+
*
|
|
623
|
+
* @since 1.0.0
|
|
624
|
+
* @category Transforming inputs
|
|
625
|
+
*/
|
|
626
|
+
export declare const mapInputEffect: {
|
|
627
|
+
<B, A, E2, R2>(f: (b: B) => Effect.Effect<A, E2, R2>): <E, R>(sink: Sink<A, E | E2, R>) => Sink<B, E | E2, R | R2>;
|
|
628
|
+
<A, E, R, B, E2, R2>(sink: Sink<A, E | E2, R>, f: (b: B) => Effect.Effect<A, E2, R2>): Sink<B, E | E2, R | R2>;
|
|
629
|
+
};
|
|
630
|
+
/**
|
|
631
|
+
* Runs an Effect for each input and forwards its optional successful value.
|
|
632
|
+
*
|
|
633
|
+
* @remarks
|
|
634
|
+
* ## Why
|
|
635
|
+
* Service-backed validation, selection, and transformation can happen in one consumer adapter.
|
|
636
|
+
*
|
|
637
|
+
* ## Ownership and lifetime
|
|
638
|
+
* Each input runs one Effect. `Some` invokes the sink once, `None` zero times, and failure is routed
|
|
639
|
+
* as a Cause. Invocation order and concurrency are controlled by the producer; services and
|
|
640
|
+
* interruption remain explicit in the returned sink.
|
|
641
|
+
*
|
|
642
|
+
* @example
|
|
643
|
+
* ```ts
|
|
644
|
+
* import { Effect, Option } from "effect"
|
|
645
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
646
|
+
* const sink = Sink.filterMapEffect(Sink.make(Effect.logError, Effect.log), (n: number) =>
|
|
647
|
+
* Effect.succeed(n > 0 ? Option.some(n) : Option.none()))
|
|
648
|
+
* ```
|
|
649
|
+
*
|
|
650
|
+
* @since 1.0.0
|
|
651
|
+
* @category Selecting inputs
|
|
652
|
+
*/
|
|
146
653
|
export declare const filterMapEffect: {
|
|
147
654
|
<B, A, E2, R2>(f: (b: B) => Effect.Effect<Option.Option<A>, E2, R2>): <E, R>(sink: Sink<A, E | E2, R>) => Sink<B, E | E2, R | R2>;
|
|
148
655
|
<A, E, R, B, E2, R2>(sink: Sink<A, E | E2, R>, f: (b: B) => Effect.Effect<Option.Option<A>, E2, R2>): Sink<B, E | E2, R | R2>;
|
|
149
656
|
};
|
|
657
|
+
/**
|
|
658
|
+
* Runs an effectful predicate and forwards inputs for which it succeeds with `true`.
|
|
659
|
+
*
|
|
660
|
+
* @remarks
|
|
661
|
+
* ## Why
|
|
662
|
+
* A consumer can filter using service-backed or asynchronous policy without changing the producer.
|
|
663
|
+
*
|
|
664
|
+
* ## Ownership and lifetime
|
|
665
|
+
* Each input runs one predicate Effect. `true` forwards once, `false` not at all, and predicate
|
|
666
|
+
* failure reaches the sink's failure callback. The producer controls callback ordering and
|
|
667
|
+
* concurrency; predicate services and interruption remain typed.
|
|
668
|
+
*
|
|
669
|
+
* @example
|
|
670
|
+
* ```ts
|
|
671
|
+
* import { Effect } from "effect"
|
|
672
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
673
|
+
* const positive = Sink.filterEffect(Sink.make(Effect.logError, Effect.log), (n: number) => Effect.succeed(n > 0))
|
|
674
|
+
* ```
|
|
675
|
+
*
|
|
676
|
+
* @since 1.0.0
|
|
677
|
+
* @category Selecting inputs
|
|
678
|
+
*/
|
|
150
679
|
export declare const filterEffect: {
|
|
151
680
|
<A, E2, R2>(f: (a: A) => Effect.Effect<boolean, E2, R2>): <E, R>(sink: Sink<A, E | E2, R>) => Sink<A, E | E2, R | R2>;
|
|
152
681
|
<A, E, R>(sink: Sink<A, E, R>, f: (a: A) => Effect.Effect<boolean, E, R>): Sink<A, E, R>;
|
|
153
682
|
};
|
|
683
|
+
/**
|
|
684
|
+
* Runs an effectful observation before forwarding each successful input unchanged.
|
|
685
|
+
*
|
|
686
|
+
* @remarks
|
|
687
|
+
* ## Why
|
|
688
|
+
* Logging, metrics, and other observations can be attached at the consumer boundary without
|
|
689
|
+
* changing the value type.
|
|
690
|
+
*
|
|
691
|
+
* ## Ownership and lifetime
|
|
692
|
+
* The tap Effect completes before the value is forwarded. If it fails, its Cause is delivered and
|
|
693
|
+
* the value is not forwarded. The producer controls call order and concurrency; tap services and
|
|
694
|
+
* interruption are reflected by the returned sink.
|
|
695
|
+
*
|
|
696
|
+
* @example
|
|
697
|
+
* ```ts
|
|
698
|
+
* import { Effect } from "effect"
|
|
699
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
700
|
+
* const observed = Sink.tapEffect(Sink.make(Effect.logError, Effect.log), (n: number) => Effect.log(`saw ${n}`))
|
|
701
|
+
* ```
|
|
702
|
+
*
|
|
703
|
+
* @since 1.0.0
|
|
704
|
+
* @category Transforming inputs
|
|
705
|
+
*/
|
|
154
706
|
export declare const tapEffect: {
|
|
155
707
|
<A, E2, R2>(f: (a: A) => Effect.Effect<unknown, E2, R2>): <E, R>(sink: Sink<A, E | E2, R>) => Sink<A, E | E2, R | R2>;
|
|
156
708
|
<A, E, R, E2, R2>(sink: Sink<A, E | E2, R>, f: (a: A) => Effect.Effect<unknown, E2, R2>): Sink<A, E | E2, R | R2>;
|
|
157
709
|
};
|
|
710
|
+
/**
|
|
711
|
+
* Exchanges a sink's typed success and failure channels.
|
|
712
|
+
*
|
|
713
|
+
* @remarks
|
|
714
|
+
* ## Why
|
|
715
|
+
* Error-oriented consumers can be reused as value consumers, and vice versa, without changing the
|
|
716
|
+
* producer-side protocol.
|
|
717
|
+
*
|
|
718
|
+
* ## Ownership and lifetime
|
|
719
|
+
* A successful input becomes `Cause.fail` downstream. For an incoming Cause, the first typed `Fail`
|
|
720
|
+
* reason becomes a success and every remaining reason is discarded, including later failures,
|
|
721
|
+
* defects, or interruption reasons. A Cause with no typed failure passes through intact. The adapter
|
|
722
|
+
* is synchronous, ordered, and resource-free; use `exit` when the whole Cause must remain observable.
|
|
723
|
+
*
|
|
724
|
+
* @example
|
|
725
|
+
* ```ts
|
|
726
|
+
* import { Effect } from "effect"
|
|
727
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
728
|
+
* const errorsAsValues = Sink.flip(Sink.make(Effect.logError, (value: number) => Effect.log(value)))
|
|
729
|
+
* ```
|
|
730
|
+
*
|
|
731
|
+
* @since 1.0.0
|
|
732
|
+
* @category Failure handling
|
|
733
|
+
*/
|
|
158
734
|
export declare const flip: <A, E, R>(sink: Sink<A, E, R>) => Sink<E, A, R>;
|
|
735
|
+
/**
|
|
736
|
+
* Materializes both sink channels as successful Effect `Exit` values.
|
|
737
|
+
*
|
|
738
|
+
* @remarks
|
|
739
|
+
* ## Why
|
|
740
|
+
* A single infallible consumer can record or inspect success and the complete failure Cause as data.
|
|
741
|
+
*
|
|
742
|
+
* ## Ownership and lifetime
|
|
743
|
+
* Every input produces exactly one downstream success: `Exit.succeed` for values or
|
|
744
|
+
* `Exit.failCause` for failures. Order is preserved and the adapter acquires no resources.
|
|
745
|
+
*
|
|
746
|
+
* @example
|
|
747
|
+
* ```ts
|
|
748
|
+
* import { Effect } from "effect"
|
|
749
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
750
|
+
* const exits = Sink.exit(Sink.make(Effect.logError, Effect.log))
|
|
751
|
+
* ```
|
|
752
|
+
*
|
|
753
|
+
* @since 1.0.0
|
|
754
|
+
* @category Failure handling
|
|
755
|
+
*/
|
|
159
756
|
export declare const exit: <A, E, R>(sink: Sink<Exit.Exit<A, E>, never, R>) => ExitSink<A, E, R>;
|
|
160
757
|
declare class ExitSink<A, E, R> implements Sink<A, E, R> {
|
|
161
758
|
readonly sink: Sink<Exit.Exit<A, E>, never, R>;
|
|
@@ -163,9 +760,198 @@ declare class ExitSink<A, E, R> implements Sink<A, E, R> {
|
|
|
163
760
|
onSuccess(value: A): Effect.Effect<unknown, never, R>;
|
|
164
761
|
onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R>;
|
|
165
762
|
}
|
|
763
|
+
/**
|
|
764
|
+
* Runs a producer callback until the first matching value has been forwarded.
|
|
765
|
+
*
|
|
766
|
+
* @remarks
|
|
767
|
+
* ## Why
|
|
768
|
+
* Unlike a filtering operation, `dropAfter` includes the boundary value and then terminates
|
|
769
|
+
* producer work normally.
|
|
770
|
+
*
|
|
771
|
+
* ## Ownership and lifetime
|
|
772
|
+
* Values are forwarded in order through the first predicate match, then early exit completes and
|
|
773
|
+
* aborts the callback fiber. Callback failure is caught and sent to the original sink. The predicate
|
|
774
|
+
* is synchronous; thrown exceptions are defects.
|
|
775
|
+
*
|
|
776
|
+
* @example
|
|
777
|
+
* ```ts
|
|
778
|
+
* import { Effect } from "effect"
|
|
779
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
780
|
+
* const target = Sink.make(Effect.logError, Effect.log)
|
|
781
|
+
* const program = Sink.dropAfter(target, (n: number) => n >= 10, (limited) => limited.onSuccess(10))
|
|
782
|
+
* ```
|
|
783
|
+
*
|
|
784
|
+
* @since 1.0.0
|
|
785
|
+
* @category Stopping delivery
|
|
786
|
+
*/
|
|
166
787
|
export declare const dropAfter: {
|
|
167
788
|
<A, E, R, R2>(sink: Sink<A, E, R>, predicate: Predicate<A>, f: (sink: Sink<A, E, R>) => Effect.Effect<unknown, E, R2>): Effect.Effect<void, never, R | R2>;
|
|
168
789
|
};
|
|
790
|
+
/**
|
|
791
|
+
* Suppresses failure causes made entirely of interruption reasons.
|
|
792
|
+
*
|
|
793
|
+
* @remarks
|
|
794
|
+
* ## Why
|
|
795
|
+
* Some terminal consumers treat expected cancellation as silent completion while still needing
|
|
796
|
+
* typed failures and defects.
|
|
797
|
+
*
|
|
798
|
+
* ## Ownership and lifetime
|
|
799
|
+
* Successes pass through unchanged. A pure interruption Cause invokes no downstream callback;
|
|
800
|
+
* mixed or non-interruption causes are preserved. The adapter does not change fiber ownership or
|
|
801
|
+
* cleanup and acquires no resources.
|
|
802
|
+
*
|
|
803
|
+
* @example
|
|
804
|
+
* ```ts
|
|
805
|
+
* import { Effect } from "effect"
|
|
806
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
807
|
+
* const quietCancellation = Sink.skipInterrupt(Sink.make(Effect.logError, Effect.log))
|
|
808
|
+
* ```
|
|
809
|
+
*
|
|
810
|
+
* @since 1.0.0
|
|
811
|
+
* @category Failure handling
|
|
812
|
+
*/
|
|
169
813
|
export declare const skipInterrupt: <A, E, R>(sink: Sink<A, E, R>) => Sink<A, E, R>;
|
|
814
|
+
/**
|
|
815
|
+
* Reduces values into a single result using a pure function. Pass a `Ref<B>`
|
|
816
|
+
* (e.g. from `Ref.make(initial)`); after running, read the result with `Ref.get(ref)`.
|
|
817
|
+
*
|
|
818
|
+
* @remarks
|
|
819
|
+
* ## Why
|
|
820
|
+
* An existing Ref provides an explicit, independently readable result location for consumer-side
|
|
821
|
+
* aggregation.
|
|
822
|
+
*
|
|
823
|
+
* ## Ownership and lifetime
|
|
824
|
+
* The caller owns the Ref. Each success returns a lazy atomic `Ref.update`; invoking `onSuccess`
|
|
825
|
+
* does not update immediately. If the producer executes callback Effects serially, values reduce in
|
|
826
|
+
* that execution order. Concurrent execution is still atomic but may be scheduled in a different
|
|
827
|
+
* order than callback invocation. Failures are ignored and a thrown reducer exception is a defect.
|
|
828
|
+
*
|
|
829
|
+
* @example
|
|
830
|
+
* ```ts
|
|
831
|
+
* import { Effect, Ref } from "effect"
|
|
832
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
833
|
+
* const program = Effect.gen(function* () {
|
|
834
|
+
* const total = yield* Ref.make(0)
|
|
835
|
+
* return Sink.reduce(total, (sum, n: number) => sum + n)
|
|
836
|
+
* })
|
|
837
|
+
* ```
|
|
838
|
+
*
|
|
839
|
+
* @since 1.0.0
|
|
840
|
+
* @category Collecting values
|
|
841
|
+
*/
|
|
842
|
+
export declare function reduce<A, B, E>(ref: Ref.Ref<B>, f: (b: B, a: A) => B): Sink<A, E, never>;
|
|
843
|
+
/**
|
|
844
|
+
* Reduces values into a single result using an effectful function. Pass a `Ref<B>`;
|
|
845
|
+
* after running, read the result with `Ref.get(ref)`. If the reducer effect fails,
|
|
846
|
+
* the ref is left unchanged (Sink onSuccess is typed as never failing).
|
|
847
|
+
*
|
|
848
|
+
* @remarks
|
|
849
|
+
* ## Why
|
|
850
|
+
* Aggregation may require Effect services or asynchronous work while the result remains explicitly
|
|
851
|
+
* available through a caller-owned Ref.
|
|
852
|
+
*
|
|
853
|
+
* ## Ownership and lifetime
|
|
854
|
+
* The caller owns the Ref. Each success returns a lazy read/reduce/write Effect; invocation alone does
|
|
855
|
+
* no work. The three steps are not one atomic operation. Serialized producers preserve execution
|
|
856
|
+
* order, while overlapping executions can read the same value and commit in completion order.
|
|
857
|
+
* Reducer failures, producer failures, and interrupted writes are ignored. Use
|
|
858
|
+
* `withStateSemaphore` when the whole effectful transition must be serialized.
|
|
859
|
+
*
|
|
860
|
+
* @example
|
|
861
|
+
* ```ts
|
|
862
|
+
* import { Effect, Ref } from "effect"
|
|
863
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
864
|
+
* const program = Effect.gen(function* () {
|
|
865
|
+
* const total = yield* Ref.make(0)
|
|
866
|
+
* return Sink.reduceEffect(total, (sum, n: number) => Effect.succeed(sum + n))
|
|
867
|
+
* })
|
|
868
|
+
* ```
|
|
869
|
+
*
|
|
870
|
+
* @since 1.0.0
|
|
871
|
+
* @category Collecting values
|
|
872
|
+
*/
|
|
873
|
+
export declare function reduceEffect<A, B, E, E2, R2>(ref: Ref.Ref<B>, f: (b: B, a: A) => Effect.Effect<B, E2, R2>): Sink<A, E | E2, R2>;
|
|
874
|
+
/**
|
|
875
|
+
* Collects all values into an array. Pass a `Ref<ReadonlyArray<A>>` (e.g. `Ref.make([])`);
|
|
876
|
+
* after running, read the result with `Ref.get(ref)`.
|
|
877
|
+
*
|
|
878
|
+
* @remarks
|
|
879
|
+
* ## Why
|
|
880
|
+
* Collection remains an explicit consumer concern and the accumulated result can be read without
|
|
881
|
+
* changing the producer.
|
|
882
|
+
*
|
|
883
|
+
* ## Ownership and lifetime
|
|
884
|
+
* The caller owns the Ref. Each success returns a lazy atomic `Ref.update` that allocates a new array.
|
|
885
|
+
* Serialized producers collect in callback-Effect execution order. Concurrent updates remain atomic,
|
|
886
|
+
* but execution scheduling—not invocation order—determines array order. Failures are ignored.
|
|
887
|
+
*
|
|
888
|
+
* @example
|
|
889
|
+
* ```ts
|
|
890
|
+
* import { Effect, Ref } from "effect"
|
|
891
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
892
|
+
* const program = Effect.gen(function* () {
|
|
893
|
+
* const values = yield* Ref.make<ReadonlyArray<number>>([])
|
|
894
|
+
* return Sink.collect(values)
|
|
895
|
+
* })
|
|
896
|
+
* ```
|
|
897
|
+
*
|
|
898
|
+
* @since 1.0.0
|
|
899
|
+
* @category Collecting values
|
|
900
|
+
*/
|
|
901
|
+
export declare function collect<A, E>(ref: Ref.Ref<ReadonlyArray<A>>): Sink<A, E, never>;
|
|
902
|
+
/**
|
|
903
|
+
* Keeps only the first value. Pass a `Ref<Option.Option<A>>` (e.g. `Ref.make(Option.none())`);
|
|
904
|
+
* after running, read the result with `Ref.get(ref)`.
|
|
905
|
+
*
|
|
906
|
+
* @remarks
|
|
907
|
+
* ## Why
|
|
908
|
+
* The first observed value can be retained in a caller-owned location without stopping the producer.
|
|
909
|
+
*
|
|
910
|
+
* ## Ownership and lifetime
|
|
911
|
+
* The caller owns the Ref. Each success returns a lazy atomic update. The first update Effect to
|
|
912
|
+
* execute while the Ref is `None` stores its value; that is the first callback only when the producer
|
|
913
|
+
* executes callback Effects serially. Later updates leave `Some` unchanged. Failures are ignored.
|
|
914
|
+
*
|
|
915
|
+
* @example
|
|
916
|
+
* ```ts
|
|
917
|
+
* import { Effect, Option, Ref } from "effect"
|
|
918
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
919
|
+
* const program = Effect.gen(function* () {
|
|
920
|
+
* const first = yield* Ref.make<Option.Option<number>>(Option.none())
|
|
921
|
+
* return Sink.head(first)
|
|
922
|
+
* })
|
|
923
|
+
* ```
|
|
924
|
+
*
|
|
925
|
+
* @since 1.0.0
|
|
926
|
+
* @category Collecting values
|
|
927
|
+
*/
|
|
928
|
+
export declare function head<A, E>(ref: Ref.Ref<Option.Option<A>>): Sink<A, E, never>;
|
|
929
|
+
/**
|
|
930
|
+
* Keeps only the last value. Pass a `Ref<Option.Option<A>>` (e.g. `Ref.make(Option.none())`);
|
|
931
|
+
* after running, read the result with `Ref.get(ref)`.
|
|
932
|
+
*
|
|
933
|
+
* @remarks
|
|
934
|
+
* ## Why
|
|
935
|
+
* The latest observed value can be retained independently of producer completion.
|
|
936
|
+
*
|
|
937
|
+
* ## Ownership and lifetime
|
|
938
|
+
* The caller owns the Ref. Each success returns a lazy atomic `Ref.set`. With serialized callback
|
|
939
|
+
* Effects the last callback wins; with concurrent execution the last set to execute wins, which may
|
|
940
|
+
* differ from invocation order. Failures are ignored and the sink acquires no resources.
|
|
941
|
+
*
|
|
942
|
+
* @example
|
|
943
|
+
* ```ts
|
|
944
|
+
* import { Effect, Option, Ref } from "effect"
|
|
945
|
+
* import * as Sink from "@typed/fx/Sink"
|
|
946
|
+
* const program = Effect.gen(function* () {
|
|
947
|
+
* const latest = yield* Ref.make<Option.Option<number>>(Option.none())
|
|
948
|
+
* return Sink.last(latest)
|
|
949
|
+
* })
|
|
950
|
+
* ```
|
|
951
|
+
*
|
|
952
|
+
* @since 1.0.0
|
|
953
|
+
* @category Collecting values
|
|
954
|
+
*/
|
|
955
|
+
export declare function last<A, E>(ref: Ref.Ref<Option.Option<A>>): Sink<A, E, never>;
|
|
170
956
|
export {};
|
|
171
957
|
//# sourceMappingURL=combinators.d.ts.map
|