@typed/fx 2.0.0-beta.1 → 2.0.0-beta.11
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 +35 -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 +162 -11
- package/dist/Fx/combinators/additive.d.ts.map +1 -1
- package/dist/Fx/combinators/additive.js +162 -11
- package/dist/Fx/combinators/catch.d.ts +202 -29
- package/dist/Fx/combinators/catch.d.ts.map +1 -1
- package/dist/Fx/combinators/catch.js +193 -23
- 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 +21 -1
- package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/changesWithEffect.js +21 -1
- 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 +44 -2
- package/dist/Fx/combinators/dropUntil.d.ts.map +1 -1
- package/dist/Fx/combinators/dropUntil.js +44 -2
- 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 +48 -2
- 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 +35 -0
- package/dist/Fx/combinators/index.d.ts.map +1 -1
- package/dist/Fx/combinators/index.js +35 -0
- package/dist/Fx/combinators/keyed.d.ts +123 -9
- 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 +20 -1
- package/dist/Fx/combinators/mapBoth.d.ts.map +1 -1
- package/dist/Fx/combinators/mapBoth.js +20 -1
- 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 +21 -5
- package/dist/Fx/combinators/mapError.d.ts.map +1 -1
- package/dist/Fx/combinators/mapError.js +21 -5
- 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 +141 -20
- package/dist/Fx/combinators/provide.d.ts.map +1 -1
- package/dist/Fx/combinators/provide.js +137 -16
- 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 +23 -1
- package/dist/Fx/combinators/result.d.ts.map +1 -1
- package/dist/Fx/combinators/result.js +27 -13
- 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 +41 -2
- package/dist/Fx/combinators/scan.d.ts.map +1 -1
- package/dist/Fx/combinators/scan.js +43 -4
- 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 +33 -2
- package/dist/Fx/combinators/skip.d.ts.map +1 -1
- package/dist/Fx/combinators/skip.js +33 -2
- 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 +72 -4
- package/dist/Fx/combinators/skipWhile.d.ts.map +1 -1
- package/dist/Fx/combinators/skipWhile.js +72 -4
- package/dist/Fx/combinators/slice.d.ts +85 -3
- package/dist/Fx/combinators/slice.d.ts.map +1 -1
- package/dist/Fx/combinators/slice.js +35 -2
- 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 +34 -2
- package/dist/Fx/combinators/take.d.ts.map +1 -1
- package/dist/Fx/combinators/take.js +34 -2
- package/dist/Fx/combinators/takeUntil.d.ts +49 -3
- package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
- package/dist/Fx/combinators/takeUntil.js +49 -3
- package/dist/Fx/combinators/takeWhile.d.ts +33 -2
- package/dist/Fx/combinators/takeWhile.d.ts.map +1 -1
- package/dist/Fx/combinators/takeWhile.js +33 -2
- 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 +64 -4
- package/dist/Fx/combinators/zip.d.ts.map +1 -1
- package/dist/Fx/combinators/zip.js +64 -4
- package/dist/Fx/constructors/at.d.ts +21 -1
- 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 +30 -1
- 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 +70 -0
- package/dist/Fx/internal/effectableWithOverride.d.ts.map +1 -0
- package/dist/Fx/internal/effectableWithOverride.js +54 -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 +1229 -104
- package/dist/Push/Push.d.ts.map +1 -1
- package/dist/Push/Push.js +1024 -95
- 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 +133 -12
- 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 +1197 -45
- package/dist/RefSubject/RefSubject.d.ts.map +1 -1
- package/dist/RefSubject/RefSubject.js +935 -88
- 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 +740 -11
- package/dist/Sink/combinators.d.ts.map +1 -1
- package/dist/Sink/combinators.js +716 -14
- 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 +447 -27
- package/dist/Versioned/Versioned.d.ts.map +1 -1
- package/dist/Versioned/Versioned.js +282 -48
- package/dist/index.d.ts +22 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -3
- package/package.json +126 -16
- 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/additive.ts +0 -142
- package/src/Fx/combinators/catch.ts +0 -421
- package/src/Fx/combinators/causes.ts +0 -23
- package/src/Fx/combinators/changesWithEffect.ts +0 -66
- package/src/Fx/combinators/compact.ts +0 -15
- package/src/Fx/combinators/continueWith.ts +0 -78
- package/src/Fx/combinators/dropUntil.ts +0 -47
- 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 -39
- 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 -61
- 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/mapBoth.ts +0 -40
- package/src/Fx/combinators/mapEffect.ts +0 -32
- package/src/Fx/combinators/mapError.ts +0 -28
- 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 -124
- package/src/Fx/combinators/result.ts +0 -39
- package/src/Fx/combinators/scan.ts +0 -82
- package/src/Fx/combinators/skip.ts +0 -41
- package/src/Fx/combinators/skipRepeats.ts +0 -15
- package/src/Fx/combinators/skipRepeatsWith.ts +0 -40
- package/src/Fx/combinators/skipWhile.ts +0 -100
- package/src/Fx/combinators/slice.ts +0 -55
- package/src/Fx/combinators/switchMap.ts +0 -55
- package/src/Fx/combinators/switchMapEffect.ts +0 -25
- package/src/Fx/combinators/take.ts +0 -38
- package/src/Fx/combinators/takeUntil.ts +0 -88
- package/src/Fx/combinators/takeWhile.ts +0 -47
- 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/combinators/zip.ts +0 -175
- 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.additive-combinators.test.ts +0 -126
- package/src/Fx.catch-additive.test.ts +0 -206
- package/src/Fx.catch.test.ts +0 -60
- package/src/Fx.dropUntil.test.ts +0 -61
- package/src/Fx.fn.test.ts +0 -51
- package/src/Fx.lifecycle.test.ts +0 -79
- package/src/Fx.mapError-mapBoth.test.ts +0 -101
- package/src/Fx.provide-combinators.test.ts +0 -94
- package/src/Fx.result-changesWithEffect.test.ts +0 -112
- package/src/Fx.scan.test.ts +0 -73
- package/src/Fx.takeWhile-skipWhile.test.ts +0 -84
- package/src/Fx.test.ts +0 -71
- package/src/Fx.ts +0 -1
- package/src/Fx.zip-merge-additive.test.ts +0 -171
- package/src/Fx.zip.test.ts +0 -133
- package/src/Push/Push.ts +0 -1072
- package/src/Push/index.ts +0 -1
- package/src/Push.additive.test.ts +0 -256
- 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 -2646
- 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.additive-parity.test.ts +0 -101
- 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 -1115
- package/src/Sink/index.ts +0 -2
- package/src/Sink.combinators.test.ts +0 -88
- package/src/Sink.reduce-collect-head-last.test.ts +0 -107
- 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 -597
- package/src/Versioned/index.ts +0 -1
- package/src/Versioned.filterMap.test.ts +0 -91
- package/src/Versioned.test.ts +0 -23
- package/src/Versioned.ts +0 -1
- package/src/index.ts +0 -7
|
@@ -9,6 +9,15 @@ import type { Sink } from "./Sink.js";
|
|
|
9
9
|
/**
|
|
10
10
|
* Transforms values before they reach the sink using a pure function.
|
|
11
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
|
+
*
|
|
12
21
|
* @example
|
|
13
22
|
* ```ts
|
|
14
23
|
* import { Effect } from "effect"
|
|
@@ -31,22 +40,67 @@ import type { Sink } from "./Sink.js";
|
|
|
31
40
|
* ```
|
|
32
41
|
*
|
|
33
42
|
* @since 1.0.0
|
|
34
|
-
* @category
|
|
43
|
+
* @category Transforming inputs
|
|
35
44
|
*/
|
|
36
45
|
export declare function map<A, E, R, B>(sink: Sink<A, E, R>, f: (b: B) => A): Sink<B, E, R>;
|
|
37
|
-
/**
|
|
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
|
+
*/
|
|
38
67
|
export declare const mapInput: typeof map;
|
|
39
68
|
/**
|
|
40
69
|
* Maps the error channel of a sink using the provided function.
|
|
41
70
|
* Failures are mapped via `Cause.map`; defects and interrupts are preserved.
|
|
42
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
|
+
*
|
|
43
89
|
* @since 1.0.0
|
|
44
|
-
* @category
|
|
90
|
+
* @category Failure handling
|
|
45
91
|
*/
|
|
46
92
|
export declare function mapError<A, E, E2, R>(sink: Sink<A, E2, R>, f: (e: E) => E2): Sink<A, E, R>;
|
|
47
93
|
/**
|
|
48
94
|
* Filters and transforms values before they reach the sink using a function that returns an `Option`.
|
|
49
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
|
+
*
|
|
50
104
|
* @example
|
|
51
105
|
* ```ts
|
|
52
106
|
* import { Effect, Option } from "effect"
|
|
@@ -70,13 +124,43 @@ export declare function mapError<A, E, E2, R>(sink: Sink<A, E2, R>, f: (e: E) =>
|
|
|
70
124
|
* ```
|
|
71
125
|
*
|
|
72
126
|
* @since 1.0.0
|
|
73
|
-
* @category
|
|
127
|
+
* @category Selecting inputs
|
|
74
128
|
*/
|
|
75
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
|
+
*/
|
|
76
152
|
export declare function compact<A, E, R>(sink: Sink<A, E, R>): Sink<Option.Option<A>, E, R>;
|
|
77
153
|
/**
|
|
78
154
|
* Filters values before they reach the sink using a predicate function.
|
|
79
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
|
+
*
|
|
80
164
|
* @example
|
|
81
165
|
* ```ts
|
|
82
166
|
* import { Effect } from "effect"
|
|
@@ -98,80 +182,577 @@ export declare function compact<A, E, R>(sink: Sink<A, E, R>): Sink<Option.Optio
|
|
|
98
182
|
* ```
|
|
99
183
|
*
|
|
100
184
|
* @since 1.0.0
|
|
101
|
-
* @category
|
|
185
|
+
* @category Selecting inputs
|
|
102
186
|
*/
|
|
103
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
|
+
*/
|
|
104
212
|
export declare function withEarlyExit<A, E, R, R2>(sink: Sink<A, E, R>, f: (sink: Sink.WithEarlyExit<A, E, R>, params: {
|
|
105
213
|
signal: AbortSignal;
|
|
106
214
|
scheduler: Scheduler;
|
|
107
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
|
+
*/
|
|
108
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: {
|
|
109
240
|
signal: AbortSignal;
|
|
110
241
|
scheduler: Scheduler;
|
|
111
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
|
+
*/
|
|
112
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: {
|
|
113
270
|
signal: AbortSignal;
|
|
114
271
|
scheduler: Scheduler;
|
|
115
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
|
+
*/
|
|
116
296
|
export declare const loop: {
|
|
117
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>;
|
|
118
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>;
|
|
119
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
|
+
*/
|
|
120
324
|
export declare const loopCause: {
|
|
121
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>;
|
|
122
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>;
|
|
123
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
|
+
*/
|
|
124
351
|
export declare const filterMapLoop: {
|
|
125
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>;
|
|
126
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>;
|
|
127
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
|
+
*/
|
|
128
378
|
export declare const filterMapLoopCause: {
|
|
129
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>;
|
|
130
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>;
|
|
131
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
|
+
*/
|
|
132
408
|
export declare const loopEffect: {
|
|
133
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>;
|
|
134
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>;
|
|
135
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
|
+
*/
|
|
136
438
|
export declare const filterMapLoopEffect: {
|
|
137
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>;
|
|
138
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>;
|
|
139
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
|
+
*/
|
|
140
468
|
export declare const loopCauseEffect: {
|
|
141
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>;
|
|
142
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>;
|
|
143
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
|
+
*/
|
|
144
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
|
+
*/
|
|
145
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
|
+
*/
|
|
146
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
|
+
*/
|
|
147
547
|
readonly take: number;
|
|
148
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
|
+
*/
|
|
149
573
|
export declare const slice: {
|
|
150
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>;
|
|
151
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>;
|
|
152
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
|
+
*/
|
|
153
601
|
export declare const mapEffect: {
|
|
154
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>;
|
|
155
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>;
|
|
156
604
|
};
|
|
157
|
-
/**
|
|
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
|
+
*/
|
|
158
626
|
export declare const mapInputEffect: {
|
|
159
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>;
|
|
160
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>;
|
|
161
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
|
+
*/
|
|
162
653
|
export declare const filterMapEffect: {
|
|
163
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>;
|
|
164
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>;
|
|
165
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
|
+
*/
|
|
166
679
|
export declare const filterEffect: {
|
|
167
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>;
|
|
168
681
|
<A, E, R>(sink: Sink<A, E, R>, f: (a: A) => Effect.Effect<boolean, E, R>): Sink<A, E, R>;
|
|
169
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
|
+
*/
|
|
170
706
|
export declare const tapEffect: {
|
|
171
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>;
|
|
172
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>;
|
|
173
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
|
+
*/
|
|
174
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
|
+
*/
|
|
175
756
|
export declare const exit: <A, E, R>(sink: Sink<Exit.Exit<A, E>, never, R>) => ExitSink<A, E, R>;
|
|
176
757
|
declare class ExitSink<A, E, R> implements Sink<A, E, R> {
|
|
177
758
|
readonly sink: Sink<Exit.Exit<A, E>, never, R>;
|
|
@@ -179,16 +760,84 @@ declare class ExitSink<A, E, R> implements Sink<A, E, R> {
|
|
|
179
760
|
onSuccess(value: A): Effect.Effect<unknown, never, R>;
|
|
180
761
|
onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, R>;
|
|
181
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
|
+
*/
|
|
182
787
|
export declare const dropAfter: {
|
|
183
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>;
|
|
184
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
|
+
*/
|
|
185
813
|
export declare const skipInterrupt: <A, E, R>(sink: Sink<A, E, R>) => Sink<A, E, R>;
|
|
186
814
|
/**
|
|
187
815
|
* Reduces values into a single result using a pure function. Pass a `Ref<B>`
|
|
188
816
|
* (e.g. from `Ref.make(initial)`); after running, read the result with `Ref.get(ref)`.
|
|
189
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
|
+
*
|
|
190
839
|
* @since 1.0.0
|
|
191
|
-
* @category
|
|
840
|
+
* @category Collecting values
|
|
192
841
|
*/
|
|
193
842
|
export declare function reduce<A, B, E>(ref: Ref.Ref<B>, f: (b: B, a: A) => B): Sink<A, E, never>;
|
|
194
843
|
/**
|
|
@@ -196,32 +845,112 @@ export declare function reduce<A, B, E>(ref: Ref.Ref<B>, f: (b: B, a: A) => B):
|
|
|
196
845
|
* after running, read the result with `Ref.get(ref)`. If the reducer effect fails,
|
|
197
846
|
* the ref is left unchanged (Sink onSuccess is typed as never failing).
|
|
198
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
|
+
*
|
|
199
870
|
* @since 1.0.0
|
|
200
|
-
* @category
|
|
871
|
+
* @category Collecting values
|
|
201
872
|
*/
|
|
202
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>;
|
|
203
874
|
/**
|
|
204
875
|
* Collects all values into an array. Pass a `Ref<ReadonlyArray<A>>` (e.g. `Ref.make([])`);
|
|
205
876
|
* after running, read the result with `Ref.get(ref)`.
|
|
206
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
|
+
*
|
|
207
898
|
* @since 1.0.0
|
|
208
|
-
* @category
|
|
899
|
+
* @category Collecting values
|
|
209
900
|
*/
|
|
210
901
|
export declare function collect<A, E>(ref: Ref.Ref<ReadonlyArray<A>>): Sink<A, E, never>;
|
|
211
902
|
/**
|
|
212
903
|
* Keeps only the first value. Pass a `Ref<Option.Option<A>>` (e.g. `Ref.make(Option.none())`);
|
|
213
904
|
* after running, read the result with `Ref.get(ref)`.
|
|
214
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
|
+
*
|
|
215
925
|
* @since 1.0.0
|
|
216
|
-
* @category
|
|
926
|
+
* @category Collecting values
|
|
217
927
|
*/
|
|
218
928
|
export declare function head<A, E>(ref: Ref.Ref<Option.Option<A>>): Sink<A, E, never>;
|
|
219
929
|
/**
|
|
220
930
|
* Keeps only the last value. Pass a `Ref<Option.Option<A>>` (e.g. `Ref.make(Option.none())`);
|
|
221
931
|
* after running, read the result with `Ref.get(ref)`.
|
|
222
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
|
+
*
|
|
223
952
|
* @since 1.0.0
|
|
224
|
-
* @category
|
|
953
|
+
* @category Collecting values
|
|
225
954
|
*/
|
|
226
955
|
export declare function last<A, E>(ref: Ref.Ref<Option.Option<A>>): Sink<A, E, never>;
|
|
227
956
|
export {};
|