@typed/fx 2.0.0-beta.1 → 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 +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 +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 +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
|
@@ -3,18 +3,42 @@ import * as Exit from "effect/Exit";
|
|
|
3
3
|
import { dual } from "effect/Function";
|
|
4
4
|
import * as Layer from "effect/Layer";
|
|
5
5
|
import * as Scope from "effect/Scope";
|
|
6
|
-
import * as
|
|
6
|
+
import * as Context from "effect/Context";
|
|
7
7
|
import { make } from "../constructors/make.js";
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Builds a Layer for each subscription and provides it to the entire Fx run.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* ## Why
|
|
13
|
+
*
|
|
14
|
+
* Fx preserves Effect service requirements in `R`; providing a Layer closes
|
|
15
|
+
* those requirements while retaining acquisition failures and dependencies in
|
|
16
|
+
* the resulting type.
|
|
17
|
+
*
|
|
18
|
+
* ## Ownership and lifetime
|
|
19
|
+
*
|
|
20
|
+
* Each subscription creates a private Scope and builds the Layer inside it
|
|
21
|
+
* before the source starts. A build failure is sent to the sink and the source
|
|
22
|
+
* never runs. Otherwise the built Context is available to every source Effect,
|
|
23
|
+
* and the Scope closes with the source's success, failure, defect, or
|
|
24
|
+
* interruption. Provided services are removed from `R`; Layer dependencies and
|
|
25
|
+
* errors are added.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { Context, Effect, Layer } from "effect"
|
|
30
|
+
* import { provide } from "@typed/fx/Fx"
|
|
31
|
+
* import { fromEffect } from "@typed/fx/Fx"
|
|
32
|
+
*
|
|
33
|
+
* class Config extends Context.Service<Config, { readonly url: string }>()("Config") {}
|
|
34
|
+
* const request = fromEffect(Effect.map(Config, ({ url }) => url))
|
|
35
|
+
* const runnable = provide(request, Layer.succeed(Config, { url: "/api" }))
|
|
36
|
+
* ```
|
|
13
37
|
*
|
|
14
38
|
* @param layer - The Layer to provide.
|
|
15
39
|
* @returns An `Fx` with the required context provided.
|
|
16
40
|
* @since 1.0.0
|
|
17
|
-
* @category
|
|
41
|
+
* @category Providing services
|
|
18
42
|
*/
|
|
19
43
|
export const provide = dual(2, (fx, layer) => make(Effect.fnUntraced(function* (sink) {
|
|
20
44
|
const scope = yield* Scope.make();
|
|
@@ -23,32 +47,129 @@ export const provide = dual(2, (fx, layer) => make(Effect.fnUntraced(function* (
|
|
|
23
47
|
yield* Scope.close(scope, servicesExit);
|
|
24
48
|
return yield* sink.onFailure(servicesExit.cause);
|
|
25
49
|
}
|
|
26
|
-
return yield* fx.run(sink).pipe(Effect.
|
|
50
|
+
return yield* fx.run(sink).pipe(Effect.provideContext(servicesExit.value), Effect.onExit((exit) => Scope.close(scope, exit)));
|
|
27
51
|
})));
|
|
28
|
-
export const provideServices = dual(2, (fx, services) => provide(fx, Layer.succeedServices(services)));
|
|
29
52
|
/**
|
|
30
|
-
* Provides
|
|
53
|
+
* Provides an already-built Effect Context to the entire Fx run.
|
|
54
|
+
*
|
|
55
|
+
* @remarks
|
|
56
|
+
* ## Why
|
|
57
|
+
*
|
|
58
|
+
* Callers that already own service instances should not rebuild them through a
|
|
59
|
+
* resourceful Layer merely to satisfy an Fx's environment.
|
|
31
60
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
61
|
+
* ## Ownership and lifetime
|
|
62
|
+
*
|
|
63
|
+
* The Context is captured when this combinator is created and reused for each
|
|
64
|
+
* subscription. Its services are available to all source Effects and removed
|
|
65
|
+
* from `R`. This function does not acquire or release those service values;
|
|
66
|
+
* their owner must keep them valid for every subscription that uses the result.
|
|
67
|
+
* Source completion, failure, and interruption are unchanged.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* import { Context, Effect } from "effect"
|
|
72
|
+
* import { provideContext } from "@typed/fx/Fx"
|
|
73
|
+
* import { fromEffect } from "@typed/fx/Fx"
|
|
74
|
+
*
|
|
75
|
+
* class Config extends Context.Service<Config, { readonly url: string }>()("Config") {}
|
|
76
|
+
* const context = Context.make(Config, { url: "/api" })
|
|
77
|
+
* const runnable = provideContext(fromEffect(Effect.map(Config, (x) => x.url)), context)
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* @since 1.0.0
|
|
81
|
+
* @category Providing services
|
|
82
|
+
*/
|
|
83
|
+
export const provideContext = dual(2, (fx, services) => provide(fx, Layer.succeedContext(services)));
|
|
84
|
+
/**
|
|
85
|
+
* Provides one existing service value to the entire Fx run.
|
|
86
|
+
*
|
|
87
|
+
* @remarks
|
|
88
|
+
* ## Why
|
|
89
|
+
*
|
|
90
|
+
* This is the precise single-service form of {@link provideContext}, useful for
|
|
91
|
+
* tests and application edges where the instance is already owned.
|
|
92
|
+
*
|
|
93
|
+
* ## Ownership and lifetime
|
|
94
|
+
*
|
|
95
|
+
* The service value is captured and reused for every subscription. It is not
|
|
96
|
+
* acquired or finalized here; its caller owns its lifetime. The matching
|
|
97
|
+
* service identifier is removed from `R`, while values, errors, ordering, and
|
|
98
|
+
* interruption remain those of the source.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts
|
|
102
|
+
* import { Context, Effect } from "effect"
|
|
103
|
+
* import { provideService } from "@typed/fx/Fx"
|
|
104
|
+
* import { fromEffect } from "@typed/fx/Fx"
|
|
105
|
+
*
|
|
106
|
+
* class Config extends Context.Service<Config, { readonly url: string }>()("Config") {}
|
|
107
|
+
* const runnable = provideService(
|
|
108
|
+
* fromEffect(Effect.map(Config, (x) => x.url)),
|
|
109
|
+
* Config,
|
|
110
|
+
* { url: "/api" }
|
|
111
|
+
* )
|
|
112
|
+
* ```
|
|
34
113
|
*
|
|
35
114
|
* @param tag - The service tag (identifier).
|
|
36
115
|
* @param service - The service implementation.
|
|
37
116
|
* @returns An `Fx` with the required service provided.
|
|
38
117
|
* @since 1.0.0
|
|
39
|
-
* @category
|
|
118
|
+
* @category Providing services
|
|
40
119
|
*/
|
|
41
|
-
export const provideService = dual(3, (fx, tag, service) =>
|
|
120
|
+
export const provideService = dual(3, (fx, tag, service) => provideContext(fx, Context.make(tag, service)));
|
|
42
121
|
/**
|
|
43
|
-
*
|
|
122
|
+
* Acquires one service with an Effect before running the Fx.
|
|
123
|
+
*
|
|
124
|
+
* @remarks
|
|
125
|
+
* ## Why
|
|
126
|
+
*
|
|
127
|
+
* Some service instances require effectful configuration but do not warrant a
|
|
128
|
+
* separately named Layer. This keeps acquisition failure and dependencies
|
|
129
|
+
* explicit in the returned Fx type.
|
|
130
|
+
*
|
|
131
|
+
* ## Ownership and lifetime
|
|
132
|
+
*
|
|
133
|
+
* The service Effect runs once per subscription while {@link provide} builds
|
|
134
|
+
* its Layer. A failure prevents the source from starting. On success, the
|
|
135
|
+
* service is available for the whole source run and its identifier is removed
|
|
136
|
+
* from `R`; acquisition errors and every requirement in `R2` are added. In
|
|
137
|
+
* particular, an `Effect.acquireRelease` service Effect still leaves
|
|
138
|
+
* `Scope.Scope` in the returned Fx requirements—the private Layer Scope does
|
|
139
|
+
* not erase that public requirement. The caller must provide that Scope.
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```ts
|
|
143
|
+
* import { Context, Effect } from "effect"
|
|
144
|
+
* import { provideServiceEffect } from "@typed/fx/Fx"
|
|
145
|
+
* import { fromEffect } from "@typed/fx/Fx"
|
|
146
|
+
*
|
|
147
|
+
* class Config extends Context.Service<Config, { readonly url: string }>()("Config") {}
|
|
148
|
+
* const request = fromEffect(Effect.map(Config, (x) => x.url))
|
|
149
|
+
* const runnable = provideServiceEffect(request, Config, Effect.succeed({ url: "/api" }))
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
* @example Scoped acquisition keeps `Scope` in the returned Fx requirements
|
|
153
|
+
* ```ts
|
|
154
|
+
* import { Context, Effect } from "effect"
|
|
155
|
+
* import { provideServiceEffect } from "@typed/fx/Fx"
|
|
156
|
+
* import { fromEffect } from "@typed/fx/Fx"
|
|
157
|
+
* import { collectAll } from "@typed/fx/Fx"
|
|
44
158
|
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
159
|
+
* class Config extends Context.Service<Config, { readonly url: string }>()("Config") {}
|
|
160
|
+
* const request = fromEffect(Effect.map(Config, (x) => x.url))
|
|
161
|
+
* const acquired = Effect.acquireRelease(
|
|
162
|
+
* Effect.succeed({ url: "/api" }),
|
|
163
|
+
* () => Effect.void
|
|
164
|
+
* )
|
|
165
|
+
* const scopedFx = provideServiceEffect(request, Config, acquired)
|
|
166
|
+
* const program = Effect.scoped(collectAll(scopedFx))
|
|
167
|
+
* ```
|
|
47
168
|
*
|
|
48
169
|
* @param tag - The service tag (identifier).
|
|
49
170
|
* @param serviceEffect - Effect that produces the service (may have its own requirements).
|
|
50
171
|
* @returns An `Fx` with the required service provided.
|
|
51
172
|
* @since 1.0.0
|
|
52
|
-
* @category
|
|
173
|
+
* @category Providing services
|
|
53
174
|
*/
|
|
54
175
|
export const provideServiceEffect = dual(3, (fx, tag, serviceEffect) => provide(fx, Layer.effect(tag, serviceEffect)));
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { Fx } from "../Fx.js";
|
|
2
|
+
/**
|
|
3
|
+
* Runs two streams concurrently until one emits, then mirrors the winner and
|
|
4
|
+
* interrupts the other.
|
|
5
|
+
*
|
|
6
|
+
* A failure or completion from one side before the other emits does **not**
|
|
7
|
+
* win unless every side ends without emitting. After a winner is chosen, that
|
|
8
|
+
* stream's later failures are propagated.
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* ## Why
|
|
12
|
+
*
|
|
13
|
+
* `race` selects a live producer by its first useful value rather than by setup,
|
|
14
|
+
* completion, or a fast failure. This is suitable for redundant sources where a
|
|
15
|
+
* producer that ends silently should not prevent another from becoming useful.
|
|
16
|
+
*
|
|
17
|
+
* ## Selection, ordering, and cardinality
|
|
18
|
+
*
|
|
19
|
+
* Both inputs start concurrently. The first emitted value atomically selects its
|
|
20
|
+
* producer; that value and all later values from the winner are forwarded in
|
|
21
|
+
* order. The loser emits nothing after selection and is interrupted. There is no
|
|
22
|
+
* buffering or replay.
|
|
23
|
+
*
|
|
24
|
+
* ## Ownership and lifetime
|
|
25
|
+
*
|
|
26
|
+
* Before a winner, a non-interruption failure is remembered but does not win; it
|
|
27
|
+
* is reported only if both inputs end without a value. After selection, winner
|
|
28
|
+
* failures are forwarded. Both environments remain required. The observing
|
|
29
|
+
* fiber owns both child fibers and interruption cancels the race and finalizers.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { Fx } from "@typed/fx"
|
|
34
|
+
* import { Effect } from "effect"
|
|
35
|
+
*
|
|
36
|
+
* const response = Fx.race(
|
|
37
|
+
* Fx.ensuring(Fx.at("slow", "50 millis"), Effect.log("slow closed")),
|
|
38
|
+
* Fx.ensuring(Fx.at("fast", "5 millis"), Effect.log("fast closed"))
|
|
39
|
+
* )
|
|
40
|
+
* Effect.runPromise(Fx.collectAll(response)).then(console.log)
|
|
41
|
+
* // "slow closed" proves loser cleanup; the winning finalizer also runs
|
|
42
|
+
* // resolves ["fast"]
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @since 1.0.0
|
|
46
|
+
* @category Concurrent work
|
|
47
|
+
*/
|
|
48
|
+
export declare const race: {
|
|
49
|
+
<AR, ER, RR>(that: Fx<AR, ER, RR>): <AL, EL, RL>(self: Fx<AL, EL, RL>) => Fx<AL | AR, EL | ER, RL | RR>;
|
|
50
|
+
<AL, EL, RL, AR, ER, RR>(self: Fx<AL, EL, RL>, that: Fx<AR, ER, RR>): Fx<AL | AR, EL | ER, RL | RR>;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Races many streams: the first to emit wins and the rest are interrupted.
|
|
54
|
+
*
|
|
55
|
+
* @remarks
|
|
56
|
+
* ## Why
|
|
57
|
+
*
|
|
58
|
+
* `raceAll` extends {@link race} to a runtime-sized set while preserving the
|
|
59
|
+
* first-value selection rule.
|
|
60
|
+
*
|
|
61
|
+
* ## Selection, ordering, and cardinality
|
|
62
|
+
*
|
|
63
|
+
* All inputs start concurrently. The first emitted value selects one input and
|
|
64
|
+
* only that input's values are forwarded afterward. Zero inputs produce the
|
|
65
|
+
* empty Fx; one input is returned unchanged. No result buffer is retained.
|
|
66
|
+
*
|
|
67
|
+
* ## Ownership and lifetime
|
|
68
|
+
*
|
|
69
|
+
* Before selection, the first non-interruption failure is retained and reported
|
|
70
|
+
* only if every input ends without emitting. After selection, winner failures
|
|
71
|
+
* are forwarded. All environments are required. Losers are interrupted and the
|
|
72
|
+
* observing fiber owns cleanup for every child.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* import { Fx } from "@typed/fx"
|
|
77
|
+
* import { Effect } from "effect"
|
|
78
|
+
*
|
|
79
|
+
* const response = Fx.raceAll(
|
|
80
|
+
* Fx.at("cache", "30 millis"),
|
|
81
|
+
* Fx.at("primary", "5 millis"),
|
|
82
|
+
* Fx.at("replica", "20 millis")
|
|
83
|
+
* )
|
|
84
|
+
* Effect.runPromise(Fx.collectAll(response)).then(console.log)
|
|
85
|
+
* // ["primary"]
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* @since 1.0.0
|
|
89
|
+
* @category Concurrent work
|
|
90
|
+
*/
|
|
91
|
+
export declare const raceAll: <FX extends ReadonlyArray<Fx<any, any, any>>>(...fxs: FX) => Fx<Fx.Success<FX[number]>, Fx.Error<FX[number]>, Fx.Services<FX[number]>>;
|
|
92
|
+
//# sourceMappingURL=race.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"race.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/race.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,eAAO,MAAM,IAAI,EAAE;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACxG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EACrB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACpB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GACnB,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;CAOlC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,eAAO,MAAM,OAAO,GAAI,EAAE,SAAS,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,UACzD,EAAE,KACT,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAwF1E,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import * as Cause from "effect/Cause";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Fiber from "effect/Fiber";
|
|
4
|
+
import { dual } from "effect/Function";
|
|
5
|
+
import * as Ref from "effect/Ref";
|
|
6
|
+
import * as SynchronizedRef from "effect/SynchronizedRef";
|
|
7
|
+
import { make as makeSink } from "../../Sink/Sink.js";
|
|
8
|
+
import { empty } from "../constructors/empty.js";
|
|
9
|
+
import { make } from "../constructors/make.js";
|
|
10
|
+
/**
|
|
11
|
+
* Runs two streams concurrently until one emits, then mirrors the winner and
|
|
12
|
+
* interrupts the other.
|
|
13
|
+
*
|
|
14
|
+
* A failure or completion from one side before the other emits does **not**
|
|
15
|
+
* win unless every side ends without emitting. After a winner is chosen, that
|
|
16
|
+
* stream's later failures are propagated.
|
|
17
|
+
*
|
|
18
|
+
* @remarks
|
|
19
|
+
* ## Why
|
|
20
|
+
*
|
|
21
|
+
* `race` selects a live producer by its first useful value rather than by setup,
|
|
22
|
+
* completion, or a fast failure. This is suitable for redundant sources where a
|
|
23
|
+
* producer that ends silently should not prevent another from becoming useful.
|
|
24
|
+
*
|
|
25
|
+
* ## Selection, ordering, and cardinality
|
|
26
|
+
*
|
|
27
|
+
* Both inputs start concurrently. The first emitted value atomically selects its
|
|
28
|
+
* producer; that value and all later values from the winner are forwarded in
|
|
29
|
+
* order. The loser emits nothing after selection and is interrupted. There is no
|
|
30
|
+
* buffering or replay.
|
|
31
|
+
*
|
|
32
|
+
* ## Ownership and lifetime
|
|
33
|
+
*
|
|
34
|
+
* Before a winner, a non-interruption failure is remembered but does not win; it
|
|
35
|
+
* is reported only if both inputs end without a value. After selection, winner
|
|
36
|
+
* failures are forwarded. Both environments remain required. The observing
|
|
37
|
+
* fiber owns both child fibers and interruption cancels the race and finalizers.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* import { Fx } from "@typed/fx"
|
|
42
|
+
* import { Effect } from "effect"
|
|
43
|
+
*
|
|
44
|
+
* const response = Fx.race(
|
|
45
|
+
* Fx.ensuring(Fx.at("slow", "50 millis"), Effect.log("slow closed")),
|
|
46
|
+
* Fx.ensuring(Fx.at("fast", "5 millis"), Effect.log("fast closed"))
|
|
47
|
+
* )
|
|
48
|
+
* Effect.runPromise(Fx.collectAll(response)).then(console.log)
|
|
49
|
+
* // "slow closed" proves loser cleanup; the winning finalizer also runs
|
|
50
|
+
* // resolves ["fast"]
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @since 1.0.0
|
|
54
|
+
* @category Concurrent work
|
|
55
|
+
*/
|
|
56
|
+
export const race = dual(2, (self, that) => raceAll(self, that));
|
|
57
|
+
/**
|
|
58
|
+
* Races many streams: the first to emit wins and the rest are interrupted.
|
|
59
|
+
*
|
|
60
|
+
* @remarks
|
|
61
|
+
* ## Why
|
|
62
|
+
*
|
|
63
|
+
* `raceAll` extends {@link race} to a runtime-sized set while preserving the
|
|
64
|
+
* first-value selection rule.
|
|
65
|
+
*
|
|
66
|
+
* ## Selection, ordering, and cardinality
|
|
67
|
+
*
|
|
68
|
+
* All inputs start concurrently. The first emitted value selects one input and
|
|
69
|
+
* only that input's values are forwarded afterward. Zero inputs produce the
|
|
70
|
+
* empty Fx; one input is returned unchanged. No result buffer is retained.
|
|
71
|
+
*
|
|
72
|
+
* ## Ownership and lifetime
|
|
73
|
+
*
|
|
74
|
+
* Before selection, the first non-interruption failure is retained and reported
|
|
75
|
+
* only if every input ends without emitting. After selection, winner failures
|
|
76
|
+
* are forwarded. All environments are required. Losers are interrupted and the
|
|
77
|
+
* observing fiber owns cleanup for every child.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```ts
|
|
81
|
+
* import { Fx } from "@typed/fx"
|
|
82
|
+
* import { Effect } from "effect"
|
|
83
|
+
*
|
|
84
|
+
* const response = Fx.raceAll(
|
|
85
|
+
* Fx.at("cache", "30 millis"),
|
|
86
|
+
* Fx.at("primary", "5 millis"),
|
|
87
|
+
* Fx.at("replica", "20 millis")
|
|
88
|
+
* )
|
|
89
|
+
* Effect.runPromise(Fx.collectAll(response)).then(console.log)
|
|
90
|
+
* // ["primary"]
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @since 1.0.0
|
|
94
|
+
* @category Concurrent work
|
|
95
|
+
*/
|
|
96
|
+
export const raceAll = (...fxs) => {
|
|
97
|
+
if (fxs.length === 0) {
|
|
98
|
+
return empty;
|
|
99
|
+
}
|
|
100
|
+
if (fxs.length === 1) {
|
|
101
|
+
return fxs[0];
|
|
102
|
+
}
|
|
103
|
+
return make((sink) => Effect.gen(function* () {
|
|
104
|
+
const winner = yield* SynchronizedRef.make(null);
|
|
105
|
+
const ended = yield* Ref.make(0);
|
|
106
|
+
const firstFail = yield* Ref.make(null);
|
|
107
|
+
const fibersRef = yield* Ref.make([]);
|
|
108
|
+
const interruptOthers = (except) => Effect.flatMap(Ref.get(fibersRef), (fibers) => Effect.forEach(fibers, (fiber, i) => (i === except ? Effect.void : Fiber.interrupt(fiber)), { discard: true }));
|
|
109
|
+
const markEnded = Effect.gen(function* () {
|
|
110
|
+
const current = yield* SynchronizedRef.get(winner);
|
|
111
|
+
if (current !== null)
|
|
112
|
+
return;
|
|
113
|
+
const n = yield* Ref.updateAndGet(ended, (count) => count + 1);
|
|
114
|
+
if (n === fxs.length) {
|
|
115
|
+
const cause = yield* Ref.get(firstFail);
|
|
116
|
+
if (cause !== null) {
|
|
117
|
+
yield* sink.onFailure(cause);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
const fibers = [];
|
|
122
|
+
for (let i = 0; i < fxs.length; i++) {
|
|
123
|
+
const fx = fxs[i];
|
|
124
|
+
const fiber = yield* Effect.forkChild(Effect.flatMap(SynchronizedRef.get(winner), (already) => already !== null
|
|
125
|
+
? Effect.void
|
|
126
|
+
: fx
|
|
127
|
+
.run(makeSink((cause) => Effect.flatMap(SynchronizedRef.get(winner), (w) => {
|
|
128
|
+
if (w === i)
|
|
129
|
+
return sink.onFailure(cause);
|
|
130
|
+
if (w === null && !Cause.hasInterruptsOnly(cause)) {
|
|
131
|
+
return Ref.update(firstFail, (prev) => prev ?? cause);
|
|
132
|
+
}
|
|
133
|
+
return Effect.void;
|
|
134
|
+
}), (a) => SynchronizedRef.updateEffect(winner, (w) => {
|
|
135
|
+
if (w === null) {
|
|
136
|
+
return interruptOthers(i).pipe(Effect.andThen(sink.onSuccess(a)), Effect.as(i));
|
|
137
|
+
}
|
|
138
|
+
if (w === i) {
|
|
139
|
+
return sink.onSuccess(a).pipe(Effect.as(w));
|
|
140
|
+
}
|
|
141
|
+
return Effect.succeed(w);
|
|
142
|
+
})))
|
|
143
|
+
.pipe(Effect.ensuring(markEnded))), { startImmediately: true, uninterruptible: false });
|
|
144
|
+
fibers.push(fiber);
|
|
145
|
+
}
|
|
146
|
+
yield* Ref.set(fibersRef, fibers);
|
|
147
|
+
yield* Effect.forEach(fibers, (fiber) => Fiber.join(fiber).pipe(Effect.catchCause(() => Effect.void)), { concurrency: "unbounded", discard: true });
|
|
148
|
+
}));
|
|
149
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as Schedule from "effect/Schedule";
|
|
2
|
+
import type { Fx } from "../Fx.js";
|
|
3
|
+
/**
|
|
4
|
+
* Repeats the entire stream according to `schedule` after each successful
|
|
5
|
+
* completion. Failures are not repeated.
|
|
6
|
+
*
|
|
7
|
+
* `Schedule.recurs(n)` runs the stream `n + 1` times (the original plus `n`
|
|
8
|
+
* repeats), matching Effect `Stream.repeat`.
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* ## Why
|
|
12
|
+
*
|
|
13
|
+
* Repetition is a subscription-level decision: after one producer completes,
|
|
14
|
+
* a Schedule decides whether and when a fresh run should begin. Keeping that
|
|
15
|
+
* decision in Effect's Schedule preserves typed timing services and failures.
|
|
16
|
+
*
|
|
17
|
+
* ## Ownership and lifetime
|
|
18
|
+
*
|
|
19
|
+
* Runs are strictly sequential. Every source value is forwarded before the
|
|
20
|
+
* Schedule is stepped with `void`; a successful step sleeps as configured and
|
|
21
|
+
* starts a new source run. A source failure stops immediately and is never
|
|
22
|
+
* repeated. Schedule failure is forwarded; Schedule completion ends normally.
|
|
23
|
+
* Interruption cancels the active source or schedule sleep. No runs overlap.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* import { Schedule } from "effect"
|
|
28
|
+
* import { repeat } from "@typed/fx/Fx"
|
|
29
|
+
* import { succeed } from "@typed/fx/Fx"
|
|
30
|
+
*
|
|
31
|
+
* const threeTicks = repeat(succeed("tick"), Schedule.recurs(2))
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @since 1.0.0
|
|
35
|
+
* @category Time and rate
|
|
36
|
+
*/
|
|
37
|
+
export declare const repeat: {
|
|
38
|
+
<X, E2, R2>(schedule: Schedule.Schedule<X, void, E2, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
|
|
39
|
+
<A, E, R, X, E2, R2>(self: Fx<A, E, R>, schedule: Schedule.Schedule<X, void, E2, R2>): Fx<A, E | E2, R | R2>;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=repeat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repeat.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/repeat.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAG5C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,MAAM,EAAE;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EACR,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,GAC3C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACjB,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,GAC3C,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAoC1B,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { dual } from "effect/Function";
|
|
3
|
+
import * as Pull from "effect/Pull";
|
|
4
|
+
import * as Ref from "effect/Ref";
|
|
5
|
+
import * as Schedule from "effect/Schedule";
|
|
6
|
+
import { make as makeSink } from "../../Sink/Sink.js";
|
|
7
|
+
import { make } from "../constructors/make.js";
|
|
8
|
+
/**
|
|
9
|
+
* Repeats the entire stream according to `schedule` after each successful
|
|
10
|
+
* completion. Failures are not repeated.
|
|
11
|
+
*
|
|
12
|
+
* `Schedule.recurs(n)` runs the stream `n + 1` times (the original plus `n`
|
|
13
|
+
* repeats), matching Effect `Stream.repeat`.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* ## Why
|
|
17
|
+
*
|
|
18
|
+
* Repetition is a subscription-level decision: after one producer completes,
|
|
19
|
+
* a Schedule decides whether and when a fresh run should begin. Keeping that
|
|
20
|
+
* decision in Effect's Schedule preserves typed timing services and failures.
|
|
21
|
+
*
|
|
22
|
+
* ## Ownership and lifetime
|
|
23
|
+
*
|
|
24
|
+
* Runs are strictly sequential. Every source value is forwarded before the
|
|
25
|
+
* Schedule is stepped with `void`; a successful step sleeps as configured and
|
|
26
|
+
* starts a new source run. A source failure stops immediately and is never
|
|
27
|
+
* repeated. Schedule failure is forwarded; Schedule completion ends normally.
|
|
28
|
+
* Interruption cancels the active source or schedule sleep. No runs overlap.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* import { Schedule } from "effect"
|
|
33
|
+
* import { repeat } from "@typed/fx/Fx"
|
|
34
|
+
* import { succeed } from "@typed/fx/Fx"
|
|
35
|
+
*
|
|
36
|
+
* const threeTicks = repeat(succeed("tick"), Schedule.recurs(2))
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @since 1.0.0
|
|
40
|
+
* @category Time and rate
|
|
41
|
+
*/
|
|
42
|
+
export const repeat = dual(2, (self, schedule) => make((sink) => Effect.gen(function* () {
|
|
43
|
+
const step = yield* Schedule.toStepWithSleep(schedule);
|
|
44
|
+
const failed = yield* Ref.make(false);
|
|
45
|
+
const run = () => self
|
|
46
|
+
.run(makeSink((cause) => Ref.set(failed, true).pipe(Effect.andThen(sink.onFailure(cause))), sink.onSuccess))
|
|
47
|
+
.pipe(Effect.flatMap(() => Effect.flatMap(Ref.get(failed), (didFail) => {
|
|
48
|
+
if (didFail)
|
|
49
|
+
return Effect.void;
|
|
50
|
+
return Pull.matchEffect(step(undefined), {
|
|
51
|
+
onSuccess: run,
|
|
52
|
+
onFailure: sink.onFailure,
|
|
53
|
+
onDone: () => Effect.void,
|
|
54
|
+
});
|
|
55
|
+
})));
|
|
56
|
+
yield* run();
|
|
57
|
+
})));
|
|
@@ -14,10 +14,32 @@ import type { Fx } from "../Fx.js";
|
|
|
14
14
|
* `Result<A, Cause<E>>`. Consumers can use `Result.match` or `Result.isSuccess` /
|
|
15
15
|
* `Result.isFailure` to handle success vs failure (including defect/interrupt).
|
|
16
16
|
*
|
|
17
|
+
* @remarks
|
|
18
|
+
* ## Why
|
|
19
|
+
*
|
|
20
|
+
* `Result` is convenient when success and failure should travel through one
|
|
21
|
+
* data channel, while retaining the complete Cause rather than flattening it
|
|
22
|
+
* into the typed error alone.
|
|
23
|
+
*
|
|
24
|
+
* ## Ownership and lifetime
|
|
25
|
+
*
|
|
26
|
+
* Each source value emits one successful Result in order. A terminal cause
|
|
27
|
+
* emits one failed Result and ends normally. The source is subscribed once;
|
|
28
|
+
* no resource is acquired and an interrupt reported by the source becomes
|
|
29
|
+
* data, although interrupting the outer running fiber still stops the run.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { result } from "@typed/fx/Fx"
|
|
34
|
+
* import { fail } from "@typed/fx/Fx"
|
|
35
|
+
*
|
|
36
|
+
* const outcomes = result(fail("offline"))
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
17
39
|
* @param fx - The `Fx` stream.
|
|
18
40
|
* @returns An `Fx` emitting `Result<A, Cause<E>>`.
|
|
19
41
|
* @since 1.0.0
|
|
20
|
-
* @category
|
|
42
|
+
* @category Errors and recovery
|
|
21
43
|
*/
|
|
22
44
|
export declare const result: <A, E, R>(fx: Fx<A, E, R>) => Fx<Result.Result<A, Cause.Cause<E>>, never, R>;
|
|
23
45
|
//# sourceMappingURL=result.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAM5F,CAAC"}
|
|
@@ -13,20 +13,34 @@ import { make } from "../constructors/make.js";
|
|
|
13
13
|
* `Result<A, Cause<E>>`. Consumers can use `Result.match` or `Result.isSuccess` /
|
|
14
14
|
* `Result.isFailure` to handle success vs failure (including defect/interrupt).
|
|
15
15
|
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* ## Why
|
|
18
|
+
*
|
|
19
|
+
* `Result` is convenient when success and failure should travel through one
|
|
20
|
+
* data channel, while retaining the complete Cause rather than flattening it
|
|
21
|
+
* into the typed error alone.
|
|
22
|
+
*
|
|
23
|
+
* ## Ownership and lifetime
|
|
24
|
+
*
|
|
25
|
+
* Each source value emits one successful Result in order. A terminal cause
|
|
26
|
+
* emits one failed Result and ends normally. The source is subscribed once;
|
|
27
|
+
* no resource is acquired and an interrupt reported by the source becomes
|
|
28
|
+
* data, although interrupting the outer running fiber still stops the run.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* import { result } from "@typed/fx/Fx"
|
|
33
|
+
* import { fail } from "@typed/fx/Fx"
|
|
34
|
+
*
|
|
35
|
+
* const outcomes = result(fail("offline"))
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
16
38
|
* @param fx - The `Fx` stream.
|
|
17
39
|
* @returns An `Fx` emitting `Result<A, Cause<E>>`.
|
|
18
40
|
* @since 1.0.0
|
|
19
|
-
* @category
|
|
41
|
+
* @category Errors and recovery
|
|
20
42
|
*/
|
|
21
|
-
export const result = (fx) => make((sink) => fx.run(
|
|
22
|
-
|
|
23
|
-
sink
|
|
24
|
-
|
|
25
|
-
onFailure;
|
|
26
|
-
constructor(sink) {
|
|
27
|
-
this.sink = sink;
|
|
28
|
-
const s = sink;
|
|
29
|
-
this.onSuccess = (value) => s.onSuccess(Result.succeed(value));
|
|
30
|
-
this.onFailure = (cause) => s.onSuccess(Result.fail(cause));
|
|
31
|
-
}
|
|
32
|
-
}
|
|
43
|
+
export const result = (fx) => make((sink) => fx.run({
|
|
44
|
+
onSuccess: (value) => sink.onSuccess(Result.succeed(value)),
|
|
45
|
+
onFailure: (cause) => sink.onSuccess(Result.fail(cause)),
|
|
46
|
+
}));
|