@typed/fx 2.0.0-beta.4 → 2.0.0-beta.5
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/README.md +34 -20
- package/dist/Fx/Fx.d.ts +362 -10
- package/dist/Fx/Fx.d.ts.map +1 -1
- package/dist/Fx/Fx.js +32 -1
- package/dist/Fx/TypeId.d.ts +49 -3
- package/dist/Fx/TypeId.d.ts.map +1 -1
- package/dist/Fx/TypeId.js +39 -2
- package/dist/Fx/combinators/additive.d.ts +156 -5
- package/dist/Fx/combinators/additive.d.ts.map +1 -1
- package/dist/Fx/combinators/additive.js +156 -5
- package/dist/Fx/combinators/catch.d.ts +195 -22
- package/dist/Fx/combinators/catch.d.ts.map +1 -1
- package/dist/Fx/combinators/catch.js +186 -16
- package/dist/Fx/combinators/causes.d.ts +24 -1
- package/dist/Fx/combinators/causes.d.ts.map +1 -1
- package/dist/Fx/combinators/causes.js +24 -1
- package/dist/Fx/combinators/changesWithEffect.d.ts +20 -0
- package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/changesWithEffect.js +20 -0
- package/dist/Fx/combinators/compact.d.ts +17 -0
- package/dist/Fx/combinators/compact.d.ts.map +1 -1
- package/dist/Fx/combinators/compact.js +17 -0
- 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 +109 -1
- package/dist/Fx/combinators/continueWith.d.ts.map +1 -1
- package/dist/Fx/combinators/continueWith.js +109 -1
- 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 +34 -0
- package/dist/Fx/combinators/delay.d.ts.map +1 -0
- package/dist/Fx/combinators/delay.js +31 -0
- package/dist/Fx/combinators/dropUntil.d.ts +42 -0
- package/dist/Fx/combinators/dropUntil.d.ts.map +1 -1
- package/dist/Fx/combinators/dropUntil.js +42 -0
- package/dist/Fx/combinators/during.d.ts +38 -0
- package/dist/Fx/combinators/during.d.ts.map +1 -0
- package/dist/Fx/combinators/during.js +85 -0
- package/dist/Fx/combinators/ensuring.d.ts +33 -3
- package/dist/Fx/combinators/ensuring.d.ts.map +1 -1
- package/dist/Fx/combinators/ensuring.js +33 -3
- package/dist/Fx/combinators/exhaustLatestMap.d.ts +40 -4
- package/dist/Fx/combinators/exhaustLatestMap.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustLatestMap.js +40 -4
- package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts +39 -3
- package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustLatestMapEffect.js +39 -3
- package/dist/Fx/combinators/exhaustMap.d.ts +37 -0
- package/dist/Fx/combinators/exhaustMap.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustMap.js +37 -0
- package/dist/Fx/combinators/exhaustMapEffect.d.ts +32 -0
- package/dist/Fx/combinators/exhaustMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustMapEffect.js +32 -0
- package/dist/Fx/combinators/exit.d.ts +22 -1
- package/dist/Fx/combinators/exit.d.ts.map +1 -1
- package/dist/Fx/combinators/exit.js +22 -1
- package/dist/Fx/combinators/filter.d.ts +16 -0
- package/dist/Fx/combinators/filter.d.ts.map +1 -1
- package/dist/Fx/combinators/filter.js +16 -0
- package/dist/Fx/combinators/filterEffect.d.ts +21 -0
- package/dist/Fx/combinators/filterEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterEffect.js +21 -0
- package/dist/Fx/combinators/filterMap.d.ts +19 -0
- package/dist/Fx/combinators/filterMap.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMap.js +19 -0
- package/dist/Fx/combinators/filterMapEffect.d.ts +20 -0
- package/dist/Fx/combinators/filterMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapEffect.js +20 -0
- package/dist/Fx/combinators/filterMapLoop.d.ts +19 -0
- package/dist/Fx/combinators/filterMapLoop.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoop.js +19 -0
- package/dist/Fx/combinators/filterMapLoopCause.d.ts +20 -0
- package/dist/Fx/combinators/filterMapLoopCause.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoopCause.js +20 -0
- package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts +20 -0
- package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoopCauseEffect.js +20 -0
- package/dist/Fx/combinators/filterMapLoopEffect.d.ts +20 -0
- package/dist/Fx/combinators/filterMapLoopEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoopEffect.js +20 -0
- package/dist/Fx/combinators/flatMap.d.ts +48 -3
- package/dist/Fx/combinators/flatMap.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMap.js +35 -2
- package/dist/Fx/combinators/flatMapConcurrently.d.ts +50 -3
- package/dist/Fx/combinators/flatMapConcurrently.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMapConcurrently.js +47 -1
- package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts +47 -3
- package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMapConcurrentlyEffect.js +39 -1
- package/dist/Fx/combinators/flatMapEffect.d.ts +44 -2
- package/dist/Fx/combinators/flatMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMapEffect.js +31 -1
- package/dist/Fx/combinators/flip.d.ts +33 -1
- package/dist/Fx/combinators/flip.d.ts.map +1 -1
- package/dist/Fx/combinators/flip.js +33 -1
- package/dist/Fx/combinators/gen.d.ts +28 -9
- package/dist/Fx/combinators/gen.d.ts.map +1 -1
- package/dist/Fx/combinators/gen.js +27 -3
- package/dist/Fx/combinators/genScoped.d.ts +32 -9
- package/dist/Fx/combinators/genScoped.d.ts.map +1 -1
- package/dist/Fx/combinators/genScoped.js +30 -2
- 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 +121 -7
- package/dist/Fx/combinators/keyed.d.ts.map +1 -1
- package/dist/Fx/combinators/keyed.js +64 -6
- package/dist/Fx/combinators/loop.d.ts +16 -0
- package/dist/Fx/combinators/loop.d.ts.map +1 -1
- package/dist/Fx/combinators/loop.js +16 -0
- package/dist/Fx/combinators/loopCause.d.ts +17 -0
- package/dist/Fx/combinators/loopCause.d.ts.map +1 -1
- package/dist/Fx/combinators/loopCause.js +17 -0
- package/dist/Fx/combinators/loopCauseEffect.d.ts +18 -0
- package/dist/Fx/combinators/loopCauseEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/loopCauseEffect.js +18 -0
- package/dist/Fx/combinators/loopEffect.d.ts +23 -0
- package/dist/Fx/combinators/loopEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/loopEffect.js +23 -0
- package/dist/Fx/combinators/map.d.ts +45 -0
- package/dist/Fx/combinators/map.d.ts.map +1 -1
- package/dist/Fx/combinators/map.js +42 -0
- package/dist/Fx/combinators/mapBoth.d.ts +19 -0
- package/dist/Fx/combinators/mapBoth.d.ts.map +1 -1
- package/dist/Fx/combinators/mapBoth.js +19 -0
- package/dist/Fx/combinators/mapEffect.d.ts +24 -0
- package/dist/Fx/combinators/mapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/mapEffect.js +24 -0
- package/dist/Fx/combinators/mapError.d.ts +20 -4
- package/dist/Fx/combinators/mapError.d.ts.map +1 -1
- package/dist/Fx/combinators/mapError.js +20 -4
- package/dist/Fx/combinators/mergeAll.d.ts +34 -0
- package/dist/Fx/combinators/mergeAll.d.ts.map +1 -1
- package/dist/Fx/combinators/mergeAll.js +34 -0
- package/dist/Fx/combinators/mergeOrdered.d.ts +35 -3
- package/dist/Fx/combinators/mergeOrdered.d.ts.map +1 -1
- package/dist/Fx/combinators/mergeOrdered.js +35 -3
- package/dist/Fx/combinators/onError.d.ts +33 -3
- package/dist/Fx/combinators/onError.d.ts.map +1 -1
- package/dist/Fx/combinators/onError.js +33 -3
- package/dist/Fx/combinators/onExit.d.ts +28 -2
- package/dist/Fx/combinators/onExit.d.ts.map +1 -1
- package/dist/Fx/combinators/onExit.js +28 -2
- package/dist/Fx/combinators/onInterrupt.d.ts +48 -3
- package/dist/Fx/combinators/onInterrupt.d.ts.map +1 -1
- package/dist/Fx/combinators/onInterrupt.js +48 -3
- 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 +130 -9
- package/dist/Fx/combinators/provide.d.ts.map +1 -1
- package/dist/Fx/combinators/provide.js +130 -9
- 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 +22 -0
- package/dist/Fx/combinators/result.d.ts.map +1 -1
- package/dist/Fx/combinators/result.js +26 -12
- 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 +39 -0
- package/dist/Fx/combinators/scan.d.ts.map +1 -1
- package/dist/Fx/combinators/scan.js +39 -0
- package/dist/Fx/combinators/since.d.ts +30 -0
- package/dist/Fx/combinators/since.d.ts.map +1 -0
- package/dist/Fx/combinators/since.js +39 -0
- package/dist/Fx/combinators/skip.d.ts +31 -0
- package/dist/Fx/combinators/skip.d.ts.map +1 -1
- package/dist/Fx/combinators/skip.js +31 -0
- package/dist/Fx/combinators/skipRepeats.d.ts +16 -0
- package/dist/Fx/combinators/skipRepeats.d.ts.map +1 -1
- package/dist/Fx/combinators/skipRepeats.js +16 -0
- package/dist/Fx/combinators/skipRepeatsWith.d.ts +17 -0
- package/dist/Fx/combinators/skipRepeatsWith.d.ts.map +1 -1
- package/dist/Fx/combinators/skipRepeatsWith.js +17 -0
- package/dist/Fx/combinators/skipWhile.d.ts +68 -0
- package/dist/Fx/combinators/skipWhile.d.ts.map +1 -1
- package/dist/Fx/combinators/skipWhile.js +68 -0
- package/dist/Fx/combinators/slice.d.ts +82 -0
- package/dist/Fx/combinators/slice.d.ts.map +1 -1
- package/dist/Fx/combinators/slice.js +33 -0
- package/dist/Fx/combinators/switchMap.d.ts +38 -0
- package/dist/Fx/combinators/switchMap.d.ts.map +1 -1
- package/dist/Fx/combinators/switchMap.js +38 -0
- package/dist/Fx/combinators/switchMapEffect.d.ts +37 -0
- package/dist/Fx/combinators/switchMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/switchMapEffect.js +37 -0
- package/dist/Fx/combinators/take.d.ts +32 -0
- package/dist/Fx/combinators/take.d.ts.map +1 -1
- package/dist/Fx/combinators/take.js +32 -0
- package/dist/Fx/combinators/takeUntil.d.ts +46 -0
- package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
- package/dist/Fx/combinators/takeUntil.js +46 -0
- package/dist/Fx/combinators/takeWhile.d.ts +31 -0
- package/dist/Fx/combinators/takeWhile.d.ts.map +1 -1
- package/dist/Fx/combinators/takeWhile.js +31 -0
- package/dist/Fx/combinators/tapEffect.d.ts +16 -0
- package/dist/Fx/combinators/tapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/tapEffect.js +16 -0
- 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 +30 -0
- package/dist/Fx/combinators/tuple.d.ts.map +1 -1
- package/dist/Fx/combinators/tuple.js +34 -3
- 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 +29 -0
- package/dist/Fx/combinators/unwrap.d.ts.map +1 -1
- package/dist/Fx/combinators/unwrap.js +29 -0
- package/dist/Fx/combinators/unwrapScoped.d.ts +33 -0
- package/dist/Fx/combinators/unwrapScoped.d.ts.map +1 -1
- package/dist/Fx/combinators/unwrapScoped.js +33 -0
- package/dist/Fx/combinators/when.d.ts +35 -0
- package/dist/Fx/combinators/when.d.ts.map +1 -1
- package/dist/Fx/combinators/when.js +36 -1
- 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 +60 -0
- package/dist/Fx/combinators/zip.d.ts.map +1 -1
- package/dist/Fx/combinators/zip.js +60 -0
- package/dist/Fx/constructors/at.d.ts +20 -0
- package/dist/Fx/constructors/at.d.ts.map +1 -1
- package/dist/Fx/constructors/at.js +20 -0
- package/dist/Fx/constructors/die.d.ts +21 -0
- package/dist/Fx/constructors/die.d.ts.map +1 -1
- package/dist/Fx/constructors/die.js +21 -0
- package/dist/Fx/constructors/empty.d.ts +18 -0
- package/dist/Fx/constructors/empty.d.ts.map +1 -1
- package/dist/Fx/constructors/empty.js +18 -0
- package/dist/Fx/constructors/fail.d.ts +21 -0
- package/dist/Fx/constructors/fail.d.ts.map +1 -1
- package/dist/Fx/constructors/fail.js +21 -0
- package/dist/Fx/constructors/failCause.d.ts +22 -0
- package/dist/Fx/constructors/failCause.d.ts.map +1 -1
- package/dist/Fx/constructors/failCause.js +22 -0
- package/dist/Fx/constructors/fn.d.ts +113 -13
- 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 +43 -1
- package/dist/Fx/constructors/fromEffect.d.ts.map +1 -1
- package/dist/Fx/constructors/fromEffect.js +43 -1
- package/dist/Fx/constructors/fromFailures.d.ts +24 -0
- package/dist/Fx/constructors/fromFailures.d.ts.map +1 -1
- package/dist/Fx/constructors/fromFailures.js +24 -0
- package/dist/Fx/constructors/fromIterable.d.ts +22 -0
- package/dist/Fx/constructors/fromIterable.d.ts.map +1 -1
- package/dist/Fx/constructors/fromIterable.js +22 -0
- package/dist/Fx/constructors/fromSchedule.d.ts +23 -0
- package/dist/Fx/constructors/fromSchedule.d.ts.map +1 -1
- package/dist/Fx/constructors/fromSchedule.js +25 -2
- 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 +21 -1
- package/dist/Fx/constructors/interrupt.d.ts.map +1 -1
- package/dist/Fx/constructors/interrupt.js +21 -1
- package/dist/Fx/constructors/make.d.ts +146 -1
- package/dist/Fx/constructors/make.d.ts.map +1 -1
- package/dist/Fx/constructors/make.js +54 -3
- package/dist/Fx/constructors/periodic.d.ts +29 -0
- package/dist/Fx/constructors/periodic.d.ts.map +1 -1
- package/dist/Fx/constructors/periodic.js +29 -0
- package/dist/Fx/constructors/succeed.d.ts +75 -3
- package/dist/Fx/constructors/succeed.d.ts.map +1 -1
- package/dist/Fx/constructors/succeed.js +75 -3
- 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 +89 -0
- package/dist/Fx/run/collect.d.ts.map +1 -1
- package/dist/Fx/run/collect.js +90 -1
- package/dist/Fx/run/first.d.ts +22 -0
- package/dist/Fx/run/first.d.ts.map +1 -1
- package/dist/Fx/run/first.js +22 -0
- package/dist/Fx/run/fork.d.ts +50 -0
- package/dist/Fx/run/fork.d.ts.map +1 -1
- package/dist/Fx/run/fork.js +50 -0
- package/dist/Fx/run/observe.d.ts +106 -0
- package/dist/Fx/run/observe.d.ts.map +1 -1
- package/dist/Fx/run/observe.js +106 -0
- package/dist/Fx/run/runPromise.d.ts +43 -0
- package/dist/Fx/run/runPromise.d.ts.map +1 -1
- package/dist/Fx/run/runPromise.js +43 -0
- 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 +1216 -91
- package/dist/Push/Push.d.ts.map +1 -1
- package/dist/Push/Push.js +1012 -83
- 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 +351 -4
- package/dist/RefSubject/RefArray.d.ts.map +1 -1
- package/dist/RefSubject/RefArray.js +339 -3
- package/dist/RefSubject/RefBigDecimal.d.ts +221 -1
- package/dist/RefSubject/RefBigDecimal.d.ts.map +1 -1
- package/dist/RefSubject/RefBigDecimal.js +210 -1
- package/dist/RefSubject/RefBigInt.d.ts +166 -1
- package/dist/RefSubject/RefBigInt.d.ts.map +1 -1
- package/dist/RefSubject/RefBigInt.js +155 -1
- package/dist/RefSubject/RefBoolean.d.ts +166 -1
- package/dist/RefSubject/RefBoolean.d.ts.map +1 -1
- package/dist/RefSubject/RefBoolean.js +155 -1
- package/dist/RefSubject/RefCause.d.ts +122 -1
- package/dist/RefSubject/RefCause.d.ts.map +1 -1
- package/dist/RefSubject/RefCause.js +111 -1
- package/dist/RefSubject/RefChunk.d.ts +406 -1
- package/dist/RefSubject/RefChunk.d.ts.map +1 -1
- package/dist/RefSubject/RefChunk.js +394 -0
- package/dist/RefSubject/RefDateTime.d.ts +122 -1
- package/dist/RefSubject/RefDateTime.d.ts.map +1 -1
- package/dist/RefSubject/RefDateTime.js +111 -1
- package/dist/RefSubject/RefDuration.d.ts +155 -1
- package/dist/RefSubject/RefDuration.d.ts.map +1 -1
- package/dist/RefSubject/RefDuration.js +144 -1
- package/dist/RefSubject/RefGraph.d.ts +320 -6
- package/dist/RefSubject/RefGraph.d.ts.map +1 -1
- package/dist/RefSubject/RefGraph.js +303 -0
- package/dist/RefSubject/RefHashMap.d.ts +296 -1
- package/dist/RefSubject/RefHashMap.d.ts.map +1 -1
- package/dist/RefSubject/RefHashMap.js +284 -0
- package/dist/RefSubject/RefHashRing.d.ts +146 -2
- package/dist/RefSubject/RefHashRing.d.ts.map +1 -1
- package/dist/RefSubject/RefHashRing.js +133 -0
- package/dist/RefSubject/RefHashSet.d.ts +230 -1
- package/dist/RefSubject/RefHashSet.d.ts.map +1 -1
- package/dist/RefSubject/RefHashSet.js +218 -0
- package/dist/RefSubject/RefIterable.d.ts +327 -1
- package/dist/RefSubject/RefIterable.d.ts.map +1 -1
- package/dist/RefSubject/RefIterable.js +315 -0
- package/dist/RefSubject/RefOption.d.ts +144 -1
- package/dist/RefSubject/RefOption.d.ts.map +1 -1
- package/dist/RefSubject/RefOption.js +133 -1
- package/dist/RefSubject/RefRecord.d.ts +339 -1
- package/dist/RefSubject/RefRecord.d.ts.map +1 -1
- package/dist/RefSubject/RefRecord.js +327 -0
- package/dist/RefSubject/RefResult.d.ts +155 -23
- package/dist/RefSubject/RefResult.d.ts.map +1 -1
- package/dist/RefSubject/RefResult.js +122 -1
- package/dist/RefSubject/RefString.d.ts +188 -1
- package/dist/RefSubject/RefString.d.ts.map +1 -1
- package/dist/RefSubject/RefString.js +177 -1
- package/dist/RefSubject/RefStruct.d.ts +156 -1
- package/dist/RefSubject/RefStruct.d.ts.map +1 -1
- package/dist/RefSubject/RefStruct.js +145 -1
- package/dist/RefSubject/RefSubject.d.ts +1166 -13
- package/dist/RefSubject/RefSubject.d.ts.map +1 -1
- package/dist/RefSubject/RefSubject.js +843 -51
- package/dist/RefSubject/RefTrie.d.ts +290 -4
- package/dist/RefSubject/RefTrie.d.ts.map +1 -1
- package/dist/RefSubject/RefTrie.js +278 -3
- package/dist/RefSubject/RefTuple.d.ts +117 -1
- package/dist/RefSubject/RefTuple.d.ts.map +1 -1
- package/dist/RefSubject/RefTuple.js +106 -1
- 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 +381 -10
- package/dist/Sink/Sink.d.ts.map +1 -1
- package/dist/Sink/Sink.js +49 -2
- package/dist/Sink/combinators.d.ts +731 -2
- package/dist/Sink/combinators.d.ts.map +1 -1
- package/dist/Sink/combinators.js +706 -4
- package/dist/Subject/Subject.d.ts +1013 -19
- package/dist/Subject/Subject.d.ts.map +1 -1
- package/dist/Subject/Subject.js +901 -36
- package/dist/Versioned/Versioned.d.ts +424 -7
- package/dist/Versioned/Versioned.d.ts.map +1 -1
- package/dist/Versioned/Versioned.js +238 -12
- package/dist/index.d.ts +22 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -3
- package/package.json +123 -14
- 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 -416
- 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 -1093
- 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 -516
- 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 -516
- package/src/RefSubject/RefDateTime.test.ts +0 -43
- package/src/RefSubject/RefDateTime.ts +0 -261
- package/src/RefSubject/RefDuration.test.ts +0 -49
- package/src/RefSubject/RefDuration.ts +0 -188
- package/src/RefSubject/RefGraph.ts +0 -649
- package/src/RefSubject/RefHashMap.ts +0 -474
- package/src/RefSubject/RefHashRing.ts +0 -262
- package/src/RefSubject/RefHashSet.ts +0 -308
- package/src/RefSubject/RefIterable.ts +0 -454
- package/src/RefSubject/RefOption.test.ts +0 -67
- package/src/RefSubject/RefOption.ts +0 -193
- package/src/RefSubject/RefRecord.ts +0 -621
- 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 -2642
- package/src/RefSubject/RefTrie.ts +0 -365
- 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 -440
- 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 -595
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/throttle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAOjD,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAK9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACzC,CAAC;AAsEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,QAAQ,EAAE;IACrB,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACpF,CAAC,OAAO,EAAE,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACpF,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAChF,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;CAoBjF,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Duration, Effect } from "effect";
|
|
2
|
+
import * as FiberHandle from "effect/FiberHandle";
|
|
3
|
+
import { dual } from "effect/Function";
|
|
4
|
+
import * as Option from "effect/Option";
|
|
5
|
+
import * as Ref from "effect/Ref";
|
|
6
|
+
import { make as makeSink } from "../../Sink/Sink.js";
|
|
7
|
+
import { make } from "../constructors/make.js";
|
|
8
|
+
import { isFx } from "../TypeId.js";
|
|
9
|
+
import { exhaustMap } from "./exhaustMap.js";
|
|
10
|
+
import { extendScope } from "../internal/scope.js";
|
|
11
|
+
const isOptions = (u) => typeof u === "object" && u !== null && "duration" in u && !Duration.isDuration(u);
|
|
12
|
+
const resolve = (durationOrOptions) => {
|
|
13
|
+
if (isOptions(durationOrOptions)) {
|
|
14
|
+
return {
|
|
15
|
+
duration: durationOrOptions.duration,
|
|
16
|
+
leading: durationOrOptions.leading ?? true,
|
|
17
|
+
trailing: durationOrOptions.trailing ?? false,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
return { duration: durationOrOptions, leading: true, trailing: false };
|
|
21
|
+
};
|
|
22
|
+
const throttleWindow = (fx, duration, leading, trailing) => make(Effect.fn(function* (sink) {
|
|
23
|
+
const open = yield* Ref.make(false);
|
|
24
|
+
const pending = yield* Ref.make(Option.none());
|
|
25
|
+
const extra = yield* Ref.make(false);
|
|
26
|
+
const window = yield* FiberHandle.make();
|
|
27
|
+
const closeWindow = Effect.gen(function* () {
|
|
28
|
+
const hadExtra = yield* Ref.get(extra);
|
|
29
|
+
const shouldEmit = trailing && (!leading || hadExtra) ? yield* Ref.get(pending) : Option.none();
|
|
30
|
+
yield* Ref.set(open, false);
|
|
31
|
+
yield* Ref.set(pending, Option.none());
|
|
32
|
+
yield* Ref.set(extra, false);
|
|
33
|
+
if (Option.isSome(shouldEmit)) {
|
|
34
|
+
yield* sink.onSuccess(shouldEmit.value);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
yield* fx.run(makeSink(sink.onFailure, (a) => Effect.gen(function* () {
|
|
38
|
+
const isOpen = yield* Ref.get(open);
|
|
39
|
+
if (!isOpen) {
|
|
40
|
+
yield* Ref.set(open, true);
|
|
41
|
+
yield* Ref.set(pending, Option.some(a));
|
|
42
|
+
yield* Ref.set(extra, false);
|
|
43
|
+
if (leading) {
|
|
44
|
+
yield* sink.onSuccess(a);
|
|
45
|
+
}
|
|
46
|
+
yield* FiberHandle.run(window, Effect.sleep(duration).pipe(Effect.andThen(closeWindow)));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
yield* Ref.set(pending, Option.some(a));
|
|
50
|
+
yield* Ref.set(extra, true);
|
|
51
|
+
})));
|
|
52
|
+
yield* FiberHandle.awaitEmpty(window);
|
|
53
|
+
}, extendScope));
|
|
54
|
+
/**
|
|
55
|
+
* Limits emissions to configured leading and trailing edges of fixed windows.
|
|
56
|
+
*
|
|
57
|
+
* Pass `{ duration, leading, trailing }` for trailing or both-edge behavior.
|
|
58
|
+
* A duration alone defaults to `{ leading: true, trailing: false }`.
|
|
59
|
+
*
|
|
60
|
+
* @remarks
|
|
61
|
+
* ## Why
|
|
62
|
+
*
|
|
63
|
+
* Throttling bounds push frequency while allowing immediate feedback, a final
|
|
64
|
+
* settled value, or both, without moving timing state outside the Fx graph.
|
|
65
|
+
*
|
|
66
|
+
* ## Ownership and lifetime
|
|
67
|
+
*
|
|
68
|
+
* The first value opens a window. Leading mode emits it immediately. Values
|
|
69
|
+
* arriving while open replace one pending latest value; trailing mode emits
|
|
70
|
+
* that value when the timer closes, except that both-edge mode does not repeat
|
|
71
|
+
* the first value unless another arrived. Windows never overlap. Source errors
|
|
72
|
+
* propagate, source completion waits for the active window, and interruption
|
|
73
|
+
* stops the scoped timer and discards pending state.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```ts
|
|
77
|
+
* import { throttle } from "@typed/fx/Fx"
|
|
78
|
+
* import { fromIterable } from "@typed/fx/Fx"
|
|
79
|
+
*
|
|
80
|
+
* const bounded = throttle(fromIterable([1, 2, 3]), {
|
|
81
|
+
* duration: "250 millis",
|
|
82
|
+
* leading: true,
|
|
83
|
+
* trailing: true
|
|
84
|
+
* })
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @since 1.0.0
|
|
88
|
+
* @category combinators
|
|
89
|
+
*/
|
|
90
|
+
export const throttle = dual((args) => isFx(args[0]), (fx, durationOrOptions) => {
|
|
91
|
+
const { duration, leading, trailing } = resolve(durationOrOptions);
|
|
92
|
+
if (leading && !trailing) {
|
|
93
|
+
return exhaustMap(fx, (a) => make(Effect.fn(function* (sink) {
|
|
94
|
+
yield* sink.onSuccess(a);
|
|
95
|
+
yield* Effect.sleep(duration);
|
|
96
|
+
})));
|
|
97
|
+
}
|
|
98
|
+
return throttleWindow(fx, duration, leading, trailing);
|
|
99
|
+
});
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as Duration from "effect/Duration";
|
|
2
|
+
import type * as Scope from "effect/Scope";
|
|
3
|
+
import type { Fx } from "../Fx.js";
|
|
4
|
+
/**
|
|
5
|
+
* Completes the stream if it does not produce a value (or complete) within
|
|
6
|
+
* `duration` of the previous event. Matches Effect `Stream.timeout`.
|
|
7
|
+
*
|
|
8
|
+
* The timeout is reset after each emission. An infinite duration is a no-op;
|
|
9
|
+
* a zero duration completes immediately.
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* ## Why
|
|
13
|
+
*
|
|
14
|
+
* Silence is meaningful in push systems. This operator turns an idle period
|
|
15
|
+
* into normal completion without inventing an error type.
|
|
16
|
+
*
|
|
17
|
+
* ## Ownership and lifetime
|
|
18
|
+
*
|
|
19
|
+
* Subscription starts the source and one scoped timer. Each delivered value
|
|
20
|
+
* forwards immediately and rearms the timer. If the timer wins, it interrupts
|
|
21
|
+
* the source and the result completes; the interrupt caused by that timeout is
|
|
22
|
+
* not forwarded. Source failure before the deadline propagates. Interruption
|
|
23
|
+
* clears both source fiber and timer. Infinite duration returns the source;
|
|
24
|
+
* zero duration never starts it.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { timeout } from "@typed/fx/Fx"
|
|
29
|
+
* import { periodic } from "@typed/fx/Fx"
|
|
30
|
+
*
|
|
31
|
+
* const bounded = timeout(periodic("1 second"), "250 millis")
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @since 1.0.0
|
|
35
|
+
* @category combinators
|
|
36
|
+
*/
|
|
37
|
+
export declare const timeout: {
|
|
38
|
+
(duration: Duration.Input): <A, E, R>(self: Fx<A, E, R>) => Fx<A, E, R | Scope.Scope>;
|
|
39
|
+
<A, E, R>(self: Fx<A, E, R>, duration: Duration.Input): Fx<A, E, R | Scope.Scope>;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Switches to `fallback` if the source does not produce a value within
|
|
43
|
+
* `duration` of the previous event. Matches Effect `Stream.timeoutOrElse`
|
|
44
|
+
* and RxJS `timeoutTo`.
|
|
45
|
+
*
|
|
46
|
+
* @remarks
|
|
47
|
+
* ## Why
|
|
48
|
+
*
|
|
49
|
+
* A fallback lets an idle producer hand ownership to another push source while
|
|
50
|
+
* preserving both sources' precise values, failures, and services.
|
|
51
|
+
*
|
|
52
|
+
* ## Ownership and lifetime
|
|
53
|
+
*
|
|
54
|
+
* The source and resettable timer start first. On timeout the source is
|
|
55
|
+
* interrupted, then one fallback subscription starts; the two producers never
|
|
56
|
+
* overlap. A source failure before timeout propagates and does not start the
|
|
57
|
+
* fallback. Interruption stops the active producer and timer. Infinite duration
|
|
58
|
+
* returns the source unchanged; zero duration returns the fallback without
|
|
59
|
+
* starting the source.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* import { timeoutTo } from "@typed/fx/Fx"
|
|
64
|
+
* import { periodic, succeed } from "@typed/fx/Fx"
|
|
65
|
+
*
|
|
66
|
+
* const available = timeoutTo(periodic("1 second"), "250 millis", succeed("offline"))
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @since 1.0.0
|
|
70
|
+
* @category combinators
|
|
71
|
+
*/
|
|
72
|
+
export declare const timeoutTo: {
|
|
73
|
+
<B, E2, R2>(duration: Duration.Input, fallback: Fx<B, E2, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A | B, E | E2, R | R2 | Scope.Scope>;
|
|
74
|
+
<A, E, R, B, E2, R2>(self: Fx<A, E, R>, duration: Duration.Input, fallback: Fx<B, E2, R2>): Fx<A | B, E | E2, R | R2 | Scope.Scope>;
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=timeout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAM5C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAI3C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AA6CnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,OAAO,EAAE;IACpB,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;CAMlF,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,SAAS,EAAE;IACtB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EACR,QAAQ,EAAE,QAAQ,CAAC,KAAK,EACxB,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GACtB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3E,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,KAAK,EACxB,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GACtB,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;CAa5C,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import * as Duration from "effect/Duration";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Fiber from "effect/Fiber";
|
|
4
|
+
import * as FiberHandle from "effect/FiberHandle";
|
|
5
|
+
import { dual } from "effect/Function";
|
|
6
|
+
import * as Ref from "effect/Ref";
|
|
7
|
+
import { make as makeSink } from "../../Sink/Sink.js";
|
|
8
|
+
import { empty } from "../constructors/empty.js";
|
|
9
|
+
import { make } from "../constructors/make.js";
|
|
10
|
+
import { extendScope } from "../internal/scope.js";
|
|
11
|
+
const runTimed = (self, duration, fallback) => make(Effect.fn(function* (sink) {
|
|
12
|
+
const timedOut = yield* Ref.make(false);
|
|
13
|
+
const sourceFiber = yield* Ref.make(null);
|
|
14
|
+
const timer = yield* FiberHandle.make();
|
|
15
|
+
const onTimeout = Effect.gen(function* () {
|
|
16
|
+
yield* Ref.set(timedOut, true);
|
|
17
|
+
const fiber = yield* Ref.get(sourceFiber);
|
|
18
|
+
if (fiber)
|
|
19
|
+
yield* Fiber.interrupt(fiber);
|
|
20
|
+
});
|
|
21
|
+
const arm = FiberHandle.run(timer, Effect.sleep(duration).pipe(Effect.andThen(onTimeout)));
|
|
22
|
+
const fiber = yield* Effect.forkChild(self.run(makeSink((cause) => Effect.flatMap(Ref.get(timedOut), (didTimeout) => didTimeout ? Effect.void : sink.onFailure(cause)), (a) => sink.onSuccess(a).pipe(Effect.andThen(arm)))));
|
|
23
|
+
yield* Ref.set(sourceFiber, fiber);
|
|
24
|
+
yield* arm;
|
|
25
|
+
yield* Fiber.join(fiber).pipe(Effect.catchCause(() => Effect.void));
|
|
26
|
+
yield* FiberHandle.clear(timer);
|
|
27
|
+
if ((yield* Ref.get(timedOut)) && fallback !== undefined) {
|
|
28
|
+
yield* fallback.run(sink);
|
|
29
|
+
}
|
|
30
|
+
}, extendScope));
|
|
31
|
+
/**
|
|
32
|
+
* Completes the stream if it does not produce a value (or complete) within
|
|
33
|
+
* `duration` of the previous event. Matches Effect `Stream.timeout`.
|
|
34
|
+
*
|
|
35
|
+
* The timeout is reset after each emission. An infinite duration is a no-op;
|
|
36
|
+
* a zero duration completes immediately.
|
|
37
|
+
*
|
|
38
|
+
* @remarks
|
|
39
|
+
* ## Why
|
|
40
|
+
*
|
|
41
|
+
* Silence is meaningful in push systems. This operator turns an idle period
|
|
42
|
+
* into normal completion without inventing an error type.
|
|
43
|
+
*
|
|
44
|
+
* ## Ownership and lifetime
|
|
45
|
+
*
|
|
46
|
+
* Subscription starts the source and one scoped timer. Each delivered value
|
|
47
|
+
* forwards immediately and rearms the timer. If the timer wins, it interrupts
|
|
48
|
+
* the source and the result completes; the interrupt caused by that timeout is
|
|
49
|
+
* not forwarded. Source failure before the deadline propagates. Interruption
|
|
50
|
+
* clears both source fiber and timer. Infinite duration returns the source;
|
|
51
|
+
* zero duration never starts it.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* import { timeout } from "@typed/fx/Fx"
|
|
56
|
+
* import { periodic } from "@typed/fx/Fx"
|
|
57
|
+
*
|
|
58
|
+
* const bounded = timeout(periodic("1 second"), "250 millis")
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @since 1.0.0
|
|
62
|
+
* @category combinators
|
|
63
|
+
*/
|
|
64
|
+
export const timeout = dual(2, (self, duration) => {
|
|
65
|
+
const d = Duration.fromInputUnsafe(duration);
|
|
66
|
+
if (!Duration.isFinite(d))
|
|
67
|
+
return self;
|
|
68
|
+
if (Duration.isZero(d))
|
|
69
|
+
return empty;
|
|
70
|
+
return runTimed(self, d, undefined);
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Switches to `fallback` if the source does not produce a value within
|
|
74
|
+
* `duration` of the previous event. Matches Effect `Stream.timeoutOrElse`
|
|
75
|
+
* and RxJS `timeoutTo`.
|
|
76
|
+
*
|
|
77
|
+
* @remarks
|
|
78
|
+
* ## Why
|
|
79
|
+
*
|
|
80
|
+
* A fallback lets an idle producer hand ownership to another push source while
|
|
81
|
+
* preserving both sources' precise values, failures, and services.
|
|
82
|
+
*
|
|
83
|
+
* ## Ownership and lifetime
|
|
84
|
+
*
|
|
85
|
+
* The source and resettable timer start first. On timeout the source is
|
|
86
|
+
* interrupted, then one fallback subscription starts; the two producers never
|
|
87
|
+
* overlap. A source failure before timeout propagates and does not start the
|
|
88
|
+
* fallback. Interruption stops the active producer and timer. Infinite duration
|
|
89
|
+
* returns the source unchanged; zero duration returns the fallback without
|
|
90
|
+
* starting the source.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* import { timeoutTo } from "@typed/fx/Fx"
|
|
95
|
+
* import { periodic, succeed } from "@typed/fx/Fx"
|
|
96
|
+
*
|
|
97
|
+
* const available = timeoutTo(periodic("1 second"), "250 millis", succeed("offline"))
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* @since 1.0.0
|
|
101
|
+
* @category combinators
|
|
102
|
+
*/
|
|
103
|
+
export const timeoutTo = dual(3, (self, duration, fallback) => {
|
|
104
|
+
const d = Duration.fromInputUnsafe(duration);
|
|
105
|
+
if (!Duration.isFinite(d))
|
|
106
|
+
return self;
|
|
107
|
+
if (Duration.isZero(d))
|
|
108
|
+
return fallback;
|
|
109
|
+
return runTimed(self, d, fallback);
|
|
110
|
+
});
|
|
@@ -4,6 +4,21 @@ import type { Fx } from "../Fx.js";
|
|
|
4
4
|
* The resulting Fx waits for all input streams to emit at least once before emitting the first tuple.
|
|
5
5
|
* Afterwards, it emits a new tuple whenever any input stream emits a new value.
|
|
6
6
|
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* ## Why
|
|
9
|
+
* `tuple` combines independent push sources by latest value while retaining their positional types.
|
|
10
|
+
* It emits nothing until every source has produced once, then emits a snapshot after any update.
|
|
11
|
+
*
|
|
12
|
+
* ## Ownership and lifetime
|
|
13
|
+
* All inputs run concurrently as children of the consumer and one latest value per input is retained
|
|
14
|
+
* for that run. Failure/interruption stops the group; normal completion waits for every input.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { Fx } from "@typed/fx"
|
|
19
|
+
* const point = Fx.tuple(Fx.succeed(10), Fx.succeed(20))
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
7
22
|
* @param fxs - The Fx streams to combine.
|
|
8
23
|
* @returns An `Fx` emitting tuples of values.
|
|
9
24
|
* @since 1.0.0
|
|
@@ -16,6 +31,21 @@ export declare function tuple<FX extends ReadonlyArray<Fx<any, any, any>>>(...fx
|
|
|
16
31
|
* Combines a record of Fx streams into a single Fx that emits a record of the latest values.
|
|
17
32
|
* Similar to `tuple`, but for objects.
|
|
18
33
|
*
|
|
34
|
+
* @remarks
|
|
35
|
+
* ## Why
|
|
36
|
+
* `struct` gives latest-value combination stable field names. It waits for every field once and
|
|
37
|
+
* then emits a new immutable record when any field source updates.
|
|
38
|
+
*
|
|
39
|
+
* ## Ownership and lifetime
|
|
40
|
+
* It delegates concurrent ownership and retained latest values to `tuple`. Input failures and
|
|
41
|
+
* services are unioned, and all runs end with the consuming Fx.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* import { Fx } from "@typed/fx"
|
|
46
|
+
* const user = Fx.struct({ name: Fx.succeed("Ada"), online: Fx.succeed(true) })
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
19
49
|
* @param fxs - A record of Fx streams.
|
|
20
50
|
* @returns An `Fx` emitting records of values.
|
|
21
51
|
* @since 1.0.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/tuple.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAGnC
|
|
1
|
+
{"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/tuple.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAGnC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAC/D,GAAG,GAAG,EAAE,EAAE,GACT,EAAE,CACH;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAAE,EAC/C,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EACpB,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CACxB,CAiCA;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,MAAM,CAAC,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAC5E,GAAG,EAAE,GAAG,GACP,EAAE,CACH;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,EACjD,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EACxB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAC5B,CAOA"}
|
|
@@ -8,6 +8,21 @@ import { map } from "./map.js";
|
|
|
8
8
|
* The resulting Fx waits for all input streams to emit at least once before emitting the first tuple.
|
|
9
9
|
* Afterwards, it emits a new tuple whenever any input stream emits a new value.
|
|
10
10
|
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* ## Why
|
|
13
|
+
* `tuple` combines independent push sources by latest value while retaining their positional types.
|
|
14
|
+
* It emits nothing until every source has produced once, then emits a snapshot after any update.
|
|
15
|
+
*
|
|
16
|
+
* ## Ownership and lifetime
|
|
17
|
+
* All inputs run concurrently as children of the consumer and one latest value per input is retained
|
|
18
|
+
* for that run. Failure/interruption stops the group; normal completion waits for every input.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* import { Fx } from "@typed/fx"
|
|
23
|
+
* const point = Fx.tuple(Fx.succeed(10), Fx.succeed(20))
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
11
26
|
* @param fxs - The Fx streams to combine.
|
|
12
27
|
* @returns An `Fx` emitting tuples of values.
|
|
13
28
|
* @since 1.0.0
|
|
@@ -16,8 +31,9 @@ import { map } from "./map.js";
|
|
|
16
31
|
export function tuple(...fxs) {
|
|
17
32
|
if (fxs.length === 0)
|
|
18
33
|
return succeed([]);
|
|
19
|
-
if (fxs.length === 1)
|
|
20
|
-
return fxs[0];
|
|
34
|
+
if (fxs.length === 1) {
|
|
35
|
+
return map(fxs[0], (value) => [value]);
|
|
36
|
+
}
|
|
21
37
|
return make(Effect.fn(function* (sink) {
|
|
22
38
|
const len = fxs.length;
|
|
23
39
|
// oxlint-disable-next-line unicorn/no-new-array
|
|
@@ -27,7 +43,7 @@ export function tuple(...fxs) {
|
|
|
27
43
|
result[i] = value;
|
|
28
44
|
filled.add(i);
|
|
29
45
|
if (filled.size === len) {
|
|
30
|
-
yield* sink.onSuccess(result);
|
|
46
|
+
yield* sink.onSuccess(result.slice(0));
|
|
31
47
|
}
|
|
32
48
|
}))), { concurrency: "unbounded", discard: true });
|
|
33
49
|
}));
|
|
@@ -36,6 +52,21 @@ export function tuple(...fxs) {
|
|
|
36
52
|
* Combines a record of Fx streams into a single Fx that emits a record of the latest values.
|
|
37
53
|
* Similar to `tuple`, but for objects.
|
|
38
54
|
*
|
|
55
|
+
* @remarks
|
|
56
|
+
* ## Why
|
|
57
|
+
* `struct` gives latest-value combination stable field names. It waits for every field once and
|
|
58
|
+
* then emits a new immutable record when any field source updates.
|
|
59
|
+
*
|
|
60
|
+
* ## Ownership and lifetime
|
|
61
|
+
* It delegates concurrent ownership and retained latest values to `tuple`. Input failures and
|
|
62
|
+
* services are unioned, and all runs end with the consuming Fx.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* import { Fx } from "@typed/fx"
|
|
67
|
+
* const user = Fx.struct({ name: Fx.succeed("Ada"), online: Fx.succeed(true) })
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
39
70
|
* @param fxs - A record of Fx streams.
|
|
40
71
|
* @returns An `Fx` emitting records of values.
|
|
41
72
|
* @since 1.0.0
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Fx } from "../Fx.js";
|
|
2
|
+
/**
|
|
3
|
+
* Forwards `events` until `signal` emits, then interrupts `events`.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* ## Why
|
|
7
|
+
* `until` gives an event source an external stop boundary. Event values retain their order until
|
|
8
|
+
* the first signal; the signal itself is not emitted and the event run then completes by interruption.
|
|
9
|
+
*
|
|
10
|
+
* ## Ownership and lifetime
|
|
11
|
+
* Both sources start behind one gate in a private Scope. Event completion cancels the signal;
|
|
12
|
+
* signaling cancels events; failures are forwarded unless they are the expected cancellation.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { Fx } from "@typed/fx"
|
|
17
|
+
* const bounded = Fx.until(Fx.fromIterable([1, 2, 3]), Fx.succeed("stop"))
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @since 1.0.0
|
|
21
|
+
* @category combinators
|
|
22
|
+
*/
|
|
23
|
+
export declare const until: {
|
|
24
|
+
<B, E2, R2>(signal: Fx<B, E2, R2>): <A, E, R>(events: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
|
|
25
|
+
<A, E, R, B, E2, R2>(events: Fx<A, E, R>, signal: Fx<B, E2, R2>): Fx<A, E | E2, R | R2>;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=until.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"until.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/until.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAInC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,KAAK,EAAE;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5F,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAmEzF,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Cause, Deferred, Effect, Exit, Fiber, Ref, Scope } from "effect";
|
|
2
|
+
import { dual } from "effect/Function";
|
|
3
|
+
import { make } from "../constructors/make.js";
|
|
4
|
+
import { observe } from "../run/observe.js";
|
|
5
|
+
import { take } from "./take.js";
|
|
6
|
+
/**
|
|
7
|
+
* Forwards `events` until `signal` emits, then interrupts `events`.
|
|
8
|
+
*
|
|
9
|
+
* @remarks
|
|
10
|
+
* ## Why
|
|
11
|
+
* `until` gives an event source an external stop boundary. Event values retain their order until
|
|
12
|
+
* the first signal; the signal itself is not emitted and the event run then completes by interruption.
|
|
13
|
+
*
|
|
14
|
+
* ## Ownership and lifetime
|
|
15
|
+
* Both sources start behind one gate in a private Scope. Event completion cancels the signal;
|
|
16
|
+
* signaling cancels events; failures are forwarded unless they are the expected cancellation.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { Fx } from "@typed/fx"
|
|
21
|
+
* const bounded = Fx.until(Fx.fromIterable([1, 2, 3]), Fx.succeed("stop"))
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @since 1.0.0
|
|
25
|
+
* @category combinators
|
|
26
|
+
*/
|
|
27
|
+
export const until = dual(2, (events, signal) => make(Effect.fn(function* (sink) {
|
|
28
|
+
const scope = yield* Scope.make();
|
|
29
|
+
const cancellingSignal = yield* Ref.make(false);
|
|
30
|
+
yield* Effect.gen(function* () {
|
|
31
|
+
const startupGate = yield* Deferred.make();
|
|
32
|
+
const eventsFiberRef = yield* Ref.make(null);
|
|
33
|
+
const signaled = yield* Ref.make(false);
|
|
34
|
+
const stopEvents = Effect.uninterruptible(Effect.gen(function* () {
|
|
35
|
+
yield* Ref.set(signaled, true);
|
|
36
|
+
const eventsFiber = yield* Ref.get(eventsFiberRef);
|
|
37
|
+
if (eventsFiber !== null)
|
|
38
|
+
yield* Fiber.interrupt(eventsFiber);
|
|
39
|
+
}));
|
|
40
|
+
const signalFiber = yield* Effect.forkIn(Deferred.await(startupGate).pipe(Effect.andThen(signal.pipe(take(1), observe(() => stopEvents))), Effect.catchCause((cause) => Effect.flatMap(Ref.get(cancellingSignal), (didCancelSignal) => didCancelSignal
|
|
41
|
+
? Effect.failCause(cause)
|
|
42
|
+
: Effect.uninterruptible(sink.onFailure(cause).pipe(Effect.andThen(stopEvents)))))), scope);
|
|
43
|
+
const eventsFiber = yield* Effect.forkIn(Deferred.await(startupGate).pipe(Effect.andThen(events.run(sink))), scope);
|
|
44
|
+
yield* Ref.set(eventsFiberRef, eventsFiber);
|
|
45
|
+
yield* Deferred.succeed(startupGate, undefined);
|
|
46
|
+
const eventsExit = yield* Fiber.await(eventsFiber);
|
|
47
|
+
yield* Ref.set(cancellingSignal, true);
|
|
48
|
+
yield* Fiber.interrupt(signalFiber);
|
|
49
|
+
if (Exit.isFailure(eventsExit)) {
|
|
50
|
+
const didSignal = yield* Ref.get(signaled);
|
|
51
|
+
if (!(didSignal && Cause.hasInterruptsOnly(eventsExit.cause))) {
|
|
52
|
+
return yield* Effect.failCause(eventsExit.cause);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}).pipe(Effect.onExit((exit) => Ref.set(cancellingSignal, true).pipe(Effect.andThen(Scope.close(scope, exit)))));
|
|
56
|
+
})));
|
|
@@ -3,6 +3,35 @@ import type { Fx } from "../Fx.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* Unwraps an Effect that produces an Fx into a single Fx.
|
|
5
5
|
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* ## Why
|
|
8
|
+
*
|
|
9
|
+
* `unwrap` defers choosing or acquiring a producer until observation, while
|
|
10
|
+
* keeping the Effect and the selected Fx in one typed push pipeline.
|
|
11
|
+
*
|
|
12
|
+
* ## Execution and cardinality
|
|
13
|
+
*
|
|
14
|
+
* Each observation runs `effect` once. On success, the produced Fx is observed
|
|
15
|
+
* and all of its values are forwarded in order. The acquisition Effect itself
|
|
16
|
+
* emits no value, and the inner is never started if acquisition fails.
|
|
17
|
+
*
|
|
18
|
+
* ## Ownership and lifetime
|
|
19
|
+
*
|
|
20
|
+
* Acquisition and inner failures are forwarded and both environments remain in
|
|
21
|
+
* the returned type. `unwrap` does not create a Scope or hide one: interruption
|
|
22
|
+
* stops whichever phase is active, and any resourceful Effect or inner Fx must
|
|
23
|
+
* expose and receive its own `Scope` requirement.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* import { Fx } from "@typed/fx"
|
|
28
|
+
* import { Effect } from "effect"
|
|
29
|
+
*
|
|
30
|
+
* const selected = Fx.unwrap(
|
|
31
|
+
* Effect.succeed(Fx.fromIterable(["ready", "running"]))
|
|
32
|
+
* )
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
6
35
|
* @param effect - An `Effect` that produces an `Fx`.
|
|
7
36
|
* @returns An `Fx` that runs the effect and then the produced Fx.
|
|
8
37
|
* @since 1.0.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unwrap.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/unwrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC
|
|
1
|
+
{"version":3,"file":"unwrap.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/unwrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,UACpE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,KACzC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAMpB,CAAC"}
|
|
@@ -3,6 +3,35 @@ import { make } from "../constructors/make.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* Unwraps an Effect that produces an Fx into a single Fx.
|
|
5
5
|
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* ## Why
|
|
8
|
+
*
|
|
9
|
+
* `unwrap` defers choosing or acquiring a producer until observation, while
|
|
10
|
+
* keeping the Effect and the selected Fx in one typed push pipeline.
|
|
11
|
+
*
|
|
12
|
+
* ## Execution and cardinality
|
|
13
|
+
*
|
|
14
|
+
* Each observation runs `effect` once. On success, the produced Fx is observed
|
|
15
|
+
* and all of its values are forwarded in order. The acquisition Effect itself
|
|
16
|
+
* emits no value, and the inner is never started if acquisition fails.
|
|
17
|
+
*
|
|
18
|
+
* ## Ownership and lifetime
|
|
19
|
+
*
|
|
20
|
+
* Acquisition and inner failures are forwarded and both environments remain in
|
|
21
|
+
* the returned type. `unwrap` does not create a Scope or hide one: interruption
|
|
22
|
+
* stops whichever phase is active, and any resourceful Effect or inner Fx must
|
|
23
|
+
* expose and receive its own `Scope` requirement.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* import { Fx } from "@typed/fx"
|
|
28
|
+
* import { Effect } from "effect"
|
|
29
|
+
*
|
|
30
|
+
* const selected = Fx.unwrap(
|
|
31
|
+
* Effect.succeed(Fx.fromIterable(["ready", "running"]))
|
|
32
|
+
* )
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
6
35
|
* @param effect - An `Effect` that produces an `Fx`.
|
|
7
36
|
* @returns An `Fx` that runs the effect and then the produced Fx.
|
|
8
37
|
* @since 1.0.0
|
|
@@ -6,6 +6,39 @@ import type { Fx } from "../Fx.js";
|
|
|
6
6
|
*
|
|
7
7
|
* The scope of the effect is closed when the Fx completes or is interrupted.
|
|
8
8
|
*
|
|
9
|
+
* @remarks
|
|
10
|
+
* ## Why
|
|
11
|
+
*
|
|
12
|
+
* `unwrapScoped` is the safe boundary for an Effect that acquires resources
|
|
13
|
+
* while choosing an Fx. It discharges the inner `Scope` requirement instead of
|
|
14
|
+
* leaking acquisition lifetime to every consumer.
|
|
15
|
+
*
|
|
16
|
+
* ## Execution and cardinality
|
|
17
|
+
*
|
|
18
|
+
* Each observation opens one Scope, runs `effect` once, then forwards every
|
|
19
|
+
* value from the produced Fx in order. The inner never starts if acquisition
|
|
20
|
+
* fails, and the acquisition Effect adds no output value.
|
|
21
|
+
*
|
|
22
|
+
* ## Ownership and lifetime
|
|
23
|
+
*
|
|
24
|
+
* Acquisition and inner failures are forwarded. Non-Scope services from both
|
|
25
|
+
* phases remain required. The opened Scope owns resources acquired by both the
|
|
26
|
+
* Effect and produced Fx; it closes after normal completion, failure, or
|
|
27
|
+
* interruption, running finalizers exactly at the observation boundary.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* import { Fx } from "@typed/fx"
|
|
32
|
+
* import { Effect } from "effect"
|
|
33
|
+
*
|
|
34
|
+
* const scoped = Fx.unwrapScoped(
|
|
35
|
+
* Effect.acquireRelease(
|
|
36
|
+
* Effect.succeed(Fx.succeed("connected")),
|
|
37
|
+
* () => Effect.void
|
|
38
|
+
* )
|
|
39
|
+
* )
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
9
42
|
* @param effect - An `Effect` that produces an `Fx`.
|
|
10
43
|
* @returns An `Fx` that runs the effect and then the produced Fx.
|
|
11
44
|
* @since 1.0.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unwrapScoped.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/unwrapScoped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC
|
|
1
|
+
{"version":3,"file":"unwrapScoped.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/unwrapScoped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,UAClC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,KACvD,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAQ1C,CAAC"}
|
|
@@ -5,6 +5,39 @@ import { make } from "../constructors/make.js";
|
|
|
5
5
|
*
|
|
6
6
|
* The scope of the effect is closed when the Fx completes or is interrupted.
|
|
7
7
|
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* ## Why
|
|
10
|
+
*
|
|
11
|
+
* `unwrapScoped` is the safe boundary for an Effect that acquires resources
|
|
12
|
+
* while choosing an Fx. It discharges the inner `Scope` requirement instead of
|
|
13
|
+
* leaking acquisition lifetime to every consumer.
|
|
14
|
+
*
|
|
15
|
+
* ## Execution and cardinality
|
|
16
|
+
*
|
|
17
|
+
* Each observation opens one Scope, runs `effect` once, then forwards every
|
|
18
|
+
* value from the produced Fx in order. The inner never starts if acquisition
|
|
19
|
+
* fails, and the acquisition Effect adds no output value.
|
|
20
|
+
*
|
|
21
|
+
* ## Ownership and lifetime
|
|
22
|
+
*
|
|
23
|
+
* Acquisition and inner failures are forwarded. Non-Scope services from both
|
|
24
|
+
* phases remain required. The opened Scope owns resources acquired by both the
|
|
25
|
+
* Effect and produced Fx; it closes after normal completion, failure, or
|
|
26
|
+
* interruption, running finalizers exactly at the observation boundary.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* import { Fx } from "@typed/fx"
|
|
31
|
+
* import { Effect } from "effect"
|
|
32
|
+
*
|
|
33
|
+
* const scoped = Fx.unwrapScoped(
|
|
34
|
+
* Effect.acquireRelease(
|
|
35
|
+
* Effect.succeed(Fx.succeed("connected")),
|
|
36
|
+
* () => Effect.void
|
|
37
|
+
* )
|
|
38
|
+
* )
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
8
41
|
* @param effect - An `Effect` that produces an `Fx`.
|
|
9
42
|
* @returns An `Fx` that runs the effect and then the produced Fx.
|
|
10
43
|
* @since 1.0.0
|