@typed/fx 2.0.0-beta.0 → 2.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +58 -21
- package/dist/Fx/Fx.d.ts +371 -19
- package/dist/Fx/Fx.d.ts.map +1 -1
- package/dist/Fx/Fx.js +37 -6
- package/dist/Fx/TypeId.d.ts +52 -6
- package/dist/Fx/TypeId.d.ts.map +1 -1
- package/dist/Fx/TypeId.js +41 -4
- package/dist/Fx/combinators/additive.d.ts +245 -0
- package/dist/Fx/combinators/additive.d.ts.map +1 -0
- package/dist/Fx/combinators/additive.js +243 -0
- package/dist/Fx/combinators/catch.d.ts +246 -12
- package/dist/Fx/combinators/catch.d.ts.map +1 -1
- package/dist/Fx/combinators/catch.js +236 -12
- package/dist/Fx/combinators/causes.d.ts +25 -2
- package/dist/Fx/combinators/causes.d.ts.map +1 -1
- package/dist/Fx/combinators/causes.js +25 -2
- package/dist/Fx/combinators/changesWithEffect.d.ts +40 -0
- package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -0
- package/dist/Fx/combinators/changesWithEffect.js +48 -0
- package/dist/Fx/combinators/compact.d.ts +18 -1
- package/dist/Fx/combinators/compact.d.ts.map +1 -1
- package/dist/Fx/combinators/compact.js +18 -1
- package/dist/Fx/combinators/concatMap.d.ts +86 -0
- package/dist/Fx/combinators/concatMap.d.ts.map +1 -0
- package/dist/Fx/combinators/concatMap.js +86 -0
- package/dist/Fx/combinators/continueWith.d.ts +113 -5
- package/dist/Fx/combinators/continueWith.d.ts.map +1 -1
- package/dist/Fx/combinators/continueWith.js +113 -5
- package/dist/Fx/combinators/debounce.d.ts +34 -0
- package/dist/Fx/combinators/debounce.d.ts.map +1 -0
- package/dist/Fx/combinators/debounce.js +35 -0
- package/dist/Fx/combinators/delay.d.ts +36 -0
- package/dist/Fx/combinators/delay.d.ts.map +1 -0
- package/dist/Fx/combinators/delay.js +33 -0
- package/dist/Fx/combinators/dropUntil.d.ts +71 -0
- package/dist/Fx/combinators/dropUntil.d.ts.map +1 -0
- package/dist/Fx/combinators/dropUntil.js +65 -0
- package/dist/Fx/combinators/during.d.ts +38 -0
- package/dist/Fx/combinators/during.d.ts.map +1 -0
- package/dist/Fx/combinators/during.js +85 -0
- package/dist/Fx/combinators/ensuring.d.ts +34 -4
- package/dist/Fx/combinators/ensuring.d.ts.map +1 -1
- package/dist/Fx/combinators/ensuring.js +34 -4
- package/dist/Fx/combinators/exhaustLatestMap.d.ts +41 -5
- package/dist/Fx/combinators/exhaustLatestMap.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustLatestMap.js +41 -5
- package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts +40 -4
- package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustLatestMapEffect.js +40 -4
- package/dist/Fx/combinators/exhaustMap.d.ts +38 -1
- package/dist/Fx/combinators/exhaustMap.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustMap.js +38 -1
- package/dist/Fx/combinators/exhaustMapEffect.d.ts +33 -1
- package/dist/Fx/combinators/exhaustMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/exhaustMapEffect.js +33 -1
- package/dist/Fx/combinators/exit.d.ts +23 -2
- package/dist/Fx/combinators/exit.d.ts.map +1 -1
- package/dist/Fx/combinators/exit.js +23 -2
- package/dist/Fx/combinators/filter.d.ts +17 -1
- package/dist/Fx/combinators/filter.d.ts.map +1 -1
- package/dist/Fx/combinators/filter.js +17 -1
- package/dist/Fx/combinators/filterEffect.d.ts +22 -1
- package/dist/Fx/combinators/filterEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterEffect.js +22 -1
- package/dist/Fx/combinators/filterMap.d.ts +20 -1
- package/dist/Fx/combinators/filterMap.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMap.js +20 -1
- package/dist/Fx/combinators/filterMapEffect.d.ts +21 -1
- package/dist/Fx/combinators/filterMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapEffect.js +21 -1
- package/dist/Fx/combinators/filterMapLoop.d.ts +20 -1
- package/dist/Fx/combinators/filterMapLoop.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoop.js +20 -1
- package/dist/Fx/combinators/filterMapLoopCause.d.ts +21 -1
- package/dist/Fx/combinators/filterMapLoopCause.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoopCause.js +21 -1
- package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts +21 -1
- package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoopCauseEffect.js +21 -1
- package/dist/Fx/combinators/filterMapLoopEffect.d.ts +21 -1
- package/dist/Fx/combinators/filterMapLoopEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/filterMapLoopEffect.js +21 -1
- package/dist/Fx/combinators/flatMap.d.ts +50 -5
- package/dist/Fx/combinators/flatMap.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMap.js +36 -3
- package/dist/Fx/combinators/flatMapConcurrently.d.ts +51 -4
- package/dist/Fx/combinators/flatMapConcurrently.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMapConcurrently.js +51 -4
- package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts +48 -4
- package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMapConcurrentlyEffect.js +40 -2
- package/dist/Fx/combinators/flatMapEffect.d.ts +46 -4
- package/dist/Fx/combinators/flatMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMapEffect.js +32 -2
- package/dist/Fx/combinators/flip.d.ts +34 -2
- package/dist/Fx/combinators/flip.d.ts.map +1 -1
- package/dist/Fx/combinators/flip.js +34 -2
- package/dist/Fx/combinators/gen.d.ts +29 -10
- package/dist/Fx/combinators/gen.d.ts.map +1 -1
- package/dist/Fx/combinators/gen.js +28 -4
- package/dist/Fx/combinators/genScoped.d.ts +33 -10
- package/dist/Fx/combinators/genScoped.d.ts.map +1 -1
- package/dist/Fx/combinators/genScoped.js +31 -3
- package/dist/Fx/combinators/grouped.d.ts +89 -0
- package/dist/Fx/combinators/grouped.d.ts.map +1 -0
- package/dist/Fx/combinators/grouped.js +146 -0
- package/dist/Fx/combinators/index.d.ts +45 -0
- package/dist/Fx/combinators/index.d.ts.map +1 -1
- package/dist/Fx/combinators/index.js +45 -0
- package/dist/Fx/combinators/keyed.d.ts +124 -10
- package/dist/Fx/combinators/keyed.d.ts.map +1 -1
- package/dist/Fx/combinators/keyed.js +69 -11
- package/dist/Fx/combinators/loop.d.ts +17 -1
- package/dist/Fx/combinators/loop.d.ts.map +1 -1
- package/dist/Fx/combinators/loop.js +17 -1
- package/dist/Fx/combinators/loopCause.d.ts +18 -1
- package/dist/Fx/combinators/loopCause.d.ts.map +1 -1
- package/dist/Fx/combinators/loopCause.js +18 -1
- package/dist/Fx/combinators/loopCauseEffect.d.ts +19 -1
- package/dist/Fx/combinators/loopCauseEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/loopCauseEffect.js +19 -1
- package/dist/Fx/combinators/loopEffect.d.ts +24 -1
- package/dist/Fx/combinators/loopEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/loopEffect.js +24 -1
- package/dist/Fx/combinators/map.d.ts +46 -1
- package/dist/Fx/combinators/map.d.ts.map +1 -1
- package/dist/Fx/combinators/map.js +43 -1
- package/dist/Fx/combinators/mapBoth.d.ts +40 -0
- package/dist/Fx/combinators/mapBoth.d.ts.map +1 -0
- package/dist/Fx/combinators/mapBoth.js +33 -0
- package/dist/Fx/combinators/mapEffect.d.ts +25 -1
- package/dist/Fx/combinators/mapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/mapEffect.js +25 -1
- package/dist/Fx/combinators/mapError.d.ts +33 -0
- package/dist/Fx/combinators/mapError.d.ts.map +1 -0
- package/dist/Fx/combinators/mapError.js +32 -0
- package/dist/Fx/combinators/mergeAll.d.ts +35 -1
- package/dist/Fx/combinators/mergeAll.d.ts.map +1 -1
- package/dist/Fx/combinators/mergeAll.js +35 -1
- package/dist/Fx/combinators/mergeOrdered.d.ts +36 -4
- package/dist/Fx/combinators/mergeOrdered.d.ts.map +1 -1
- package/dist/Fx/combinators/mergeOrdered.js +68 -14
- package/dist/Fx/combinators/onError.d.ts +34 -4
- package/dist/Fx/combinators/onError.d.ts.map +1 -1
- package/dist/Fx/combinators/onError.js +34 -4
- package/dist/Fx/combinators/onExit.d.ts +29 -3
- package/dist/Fx/combinators/onExit.d.ts.map +1 -1
- package/dist/Fx/combinators/onExit.js +29 -3
- package/dist/Fx/combinators/onInterrupt.d.ts +49 -4
- package/dist/Fx/combinators/onInterrupt.d.ts.map +1 -1
- package/dist/Fx/combinators/onInterrupt.js +49 -4
- package/dist/Fx/combinators/pairwise.d.ts +28 -0
- package/dist/Fx/combinators/pairwise.d.ts.map +1 -0
- package/dist/Fx/combinators/pairwise.js +31 -0
- package/dist/Fx/combinators/provide.d.ts +162 -8
- package/dist/Fx/combinators/provide.d.ts.map +1 -1
- package/dist/Fx/combinators/provide.js +154 -6
- package/dist/Fx/combinators/race.d.ts +92 -0
- package/dist/Fx/combinators/race.d.ts.map +1 -0
- package/dist/Fx/combinators/race.js +149 -0
- package/dist/Fx/combinators/repeat.d.ts +41 -0
- package/dist/Fx/combinators/repeat.d.ts.map +1 -0
- package/dist/Fx/combinators/repeat.js +57 -0
- package/dist/Fx/combinators/result.d.ts +45 -0
- package/dist/Fx/combinators/result.d.ts.map +1 -0
- package/dist/Fx/combinators/result.js +46 -0
- package/dist/Fx/combinators/retry.d.ts +53 -0
- package/dist/Fx/combinators/retry.d.ts.map +1 -0
- package/dist/Fx/combinators/retry.js +71 -0
- package/dist/Fx/combinators/sample.d.ts +31 -0
- package/dist/Fx/combinators/sample.d.ts.map +1 -0
- package/dist/Fx/combinators/sample.js +42 -0
- package/dist/Fx/combinators/scan.d.ts +72 -0
- package/dist/Fx/combinators/scan.d.ts.map +1 -0
- package/dist/Fx/combinators/scan.js +77 -0
- package/dist/Fx/combinators/since.d.ts +30 -0
- package/dist/Fx/combinators/since.d.ts.map +1 -0
- package/dist/Fx/combinators/since.js +39 -0
- package/dist/Fx/combinators/skip.d.ts +45 -1
- package/dist/Fx/combinators/skip.d.ts.map +1 -1
- package/dist/Fx/combinators/skip.js +43 -1
- package/dist/Fx/combinators/skipRepeats.d.ts +17 -1
- package/dist/Fx/combinators/skipRepeats.d.ts.map +1 -1
- package/dist/Fx/combinators/skipRepeats.js +17 -1
- package/dist/Fx/combinators/skipRepeatsWith.d.ts +18 -1
- package/dist/Fx/combinators/skipRepeatsWith.d.ts.map +1 -1
- package/dist/Fx/combinators/skipRepeatsWith.js +18 -1
- package/dist/Fx/combinators/skipWhile.d.ts +117 -0
- package/dist/Fx/combinators/skipWhile.d.ts.map +1 -0
- package/dist/Fx/combinators/skipWhile.js +134 -0
- package/dist/Fx/combinators/slice.d.ts +97 -2
- package/dist/Fx/combinators/slice.d.ts.map +1 -1
- package/dist/Fx/combinators/slice.js +45 -1
- package/dist/Fx/combinators/switchMap.d.ts +39 -1
- package/dist/Fx/combinators/switchMap.d.ts.map +1 -1
- package/dist/Fx/combinators/switchMap.js +43 -5
- package/dist/Fx/combinators/switchMapEffect.d.ts +38 -1
- package/dist/Fx/combinators/switchMapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/switchMapEffect.js +38 -1
- package/dist/Fx/combinators/take.d.ts +46 -1
- package/dist/Fx/combinators/take.d.ts.map +1 -1
- package/dist/Fx/combinators/take.js +44 -1
- package/dist/Fx/combinators/takeUntil.d.ts +62 -2
- package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
- package/dist/Fx/combinators/takeUntil.js +62 -2
- package/dist/Fx/combinators/takeWhile.d.ts +60 -0
- package/dist/Fx/combinators/takeWhile.d.ts.map +1 -0
- package/dist/Fx/combinators/takeWhile.js +54 -0
- package/dist/Fx/combinators/tapEffect.d.ts +17 -1
- package/dist/Fx/combinators/tapEffect.d.ts.map +1 -1
- package/dist/Fx/combinators/tapEffect.js +17 -1
- package/dist/Fx/combinators/throttle.d.ts +79 -0
- package/dist/Fx/combinators/throttle.d.ts.map +1 -0
- package/dist/Fx/combinators/throttle.js +99 -0
- package/dist/Fx/combinators/timeout.d.ts +76 -0
- package/dist/Fx/combinators/timeout.d.ts.map +1 -0
- package/dist/Fx/combinators/timeout.js +110 -0
- package/dist/Fx/combinators/tuple.d.ts +32 -2
- package/dist/Fx/combinators/tuple.d.ts.map +1 -1
- package/dist/Fx/combinators/tuple.js +36 -5
- package/dist/Fx/combinators/until.d.ts +27 -0
- package/dist/Fx/combinators/until.d.ts.map +1 -0
- package/dist/Fx/combinators/until.js +56 -0
- package/dist/Fx/combinators/unwrap.d.ts +31 -2
- package/dist/Fx/combinators/unwrap.d.ts.map +1 -1
- package/dist/Fx/combinators/unwrap.js +30 -1
- package/dist/Fx/combinators/unwrapScoped.d.ts +34 -1
- package/dist/Fx/combinators/unwrapScoped.d.ts.map +1 -1
- package/dist/Fx/combinators/unwrapScoped.js +34 -1
- package/dist/Fx/combinators/when.d.ts +37 -2
- package/dist/Fx/combinators/when.d.ts.map +1 -1
- package/dist/Fx/combinators/when.js +38 -3
- package/dist/Fx/combinators/withLatestFrom.d.ts +58 -0
- package/dist/Fx/combinators/withLatestFrom.d.ts.map +1 -0
- package/dist/Fx/combinators/withLatestFrom.js +68 -0
- package/dist/Fx/combinators/withSpan.d.ts +35 -1
- package/dist/Fx/combinators/withSpan.d.ts.map +1 -1
- package/dist/Fx/combinators/withSpan.js +34 -3
- package/dist/Fx/combinators/zip.d.ts +135 -0
- package/dist/Fx/combinators/zip.d.ts.map +1 -0
- package/dist/Fx/combinators/zip.js +160 -0
- package/dist/Fx/constructors/at.d.ts +23 -3
- package/dist/Fx/constructors/at.d.ts.map +1 -1
- package/dist/Fx/constructors/at.js +21 -1
- package/dist/Fx/constructors/die.d.ts +22 -1
- package/dist/Fx/constructors/die.d.ts.map +1 -1
- package/dist/Fx/constructors/die.js +22 -1
- package/dist/Fx/constructors/empty.d.ts +19 -1
- package/dist/Fx/constructors/empty.d.ts.map +1 -1
- package/dist/Fx/constructors/empty.js +19 -1
- package/dist/Fx/constructors/fail.d.ts +22 -1
- package/dist/Fx/constructors/fail.d.ts.map +1 -1
- package/dist/Fx/constructors/fail.js +22 -1
- package/dist/Fx/constructors/failCause.d.ts +23 -1
- package/dist/Fx/constructors/failCause.d.ts.map +1 -1
- package/dist/Fx/constructors/failCause.js +23 -1
- package/dist/Fx/constructors/fn.d.ts +116 -16
- package/dist/Fx/constructors/fn.d.ts.map +1 -1
- package/dist/Fx/constructors/fn.js +36 -0
- package/dist/Fx/constructors/fromEffect.d.ts +45 -3
- package/dist/Fx/constructors/fromEffect.d.ts.map +1 -1
- package/dist/Fx/constructors/fromEffect.js +45 -3
- package/dist/Fx/constructors/fromFailures.d.ts +25 -1
- package/dist/Fx/constructors/fromFailures.d.ts.map +1 -1
- package/dist/Fx/constructors/fromFailures.js +25 -1
- package/dist/Fx/constructors/fromIterable.d.ts +23 -1
- package/dist/Fx/constructors/fromIterable.d.ts.map +1 -1
- package/dist/Fx/constructors/fromIterable.js +23 -1
- package/dist/Fx/constructors/fromSchedule.d.ts +26 -1
- package/dist/Fx/constructors/fromSchedule.d.ts.map +1 -1
- package/dist/Fx/constructors/fromSchedule.js +28 -3
- package/dist/Fx/constructors/index.d.ts +2 -1
- package/dist/Fx/constructors/index.d.ts.map +1 -1
- package/dist/Fx/constructors/index.js +2 -1
- package/dist/Fx/constructors/interrupt.d.ts +22 -2
- package/dist/Fx/constructors/interrupt.d.ts.map +1 -1
- package/dist/Fx/constructors/interrupt.js +22 -2
- package/dist/Fx/constructors/make.d.ts +151 -4
- package/dist/Fx/constructors/make.d.ts.map +1 -1
- package/dist/Fx/constructors/make.js +60 -7
- package/dist/Fx/constructors/periodic.d.ts +31 -2
- package/dist/Fx/constructors/periodic.d.ts.map +1 -1
- package/dist/Fx/constructors/periodic.js +30 -1
- package/dist/Fx/constructors/succeed.d.ts +79 -7
- package/dist/Fx/constructors/succeed.d.ts.map +1 -1
- package/dist/Fx/constructors/succeed.js +79 -7
- package/dist/Fx/constructors/suspend.d.ts +28 -0
- package/dist/Fx/constructors/suspend.d.ts.map +1 -1
- package/dist/Fx/constructors/suspend.js +28 -0
- package/dist/Fx/constructors/sync.d.ts +32 -0
- package/dist/Fx/constructors/sync.d.ts.map +1 -0
- package/dist/Fx/constructors/sync.js +32 -0
- package/dist/Fx/internal/DeferredRef.d.ts +259 -7
- package/dist/Fx/internal/DeferredRef.d.ts.map +1 -1
- package/dist/Fx/internal/DeferredRef.js +260 -9
- package/dist/Fx/internal/UnionToTuple.d.ts +22 -0
- package/dist/Fx/internal/UnionToTuple.d.ts.map +1 -1
- package/dist/Fx/internal/diff.d.ts +586 -0
- package/dist/Fx/internal/diff.d.ts.map +1 -1
- package/dist/Fx/internal/diff.js +120 -9
- package/dist/Fx/internal/effectableEvaluateKey.d.ts +30 -0
- package/dist/Fx/internal/effectableEvaluateKey.d.ts.map +1 -0
- package/dist/Fx/internal/effectableEvaluateKey.js +29 -0
- package/dist/Fx/internal/effectableWithOverride.d.ts +55 -0
- package/dist/Fx/internal/effectableWithOverride.d.ts.map +1 -0
- package/dist/Fx/internal/effectableWithOverride.js +46 -0
- package/dist/Fx/internal/equivalence.d.ts +29 -0
- package/dist/Fx/internal/equivalence.d.ts.map +1 -1
- package/dist/Fx/internal/equivalence.js +29 -0
- package/dist/Fx/internal/multicast.d.ts +145 -2
- package/dist/Fx/internal/multicast.d.ts.map +1 -1
- package/dist/Fx/internal/multicast.js +146 -4
- package/dist/Fx/internal/ring-buffer.d.ts +149 -0
- package/dist/Fx/internal/ring-buffer.d.ts.map +1 -1
- package/dist/Fx/internal/ring-buffer.js +155 -0
- package/dist/Fx/internal/scope.d.ts +184 -0
- package/dist/Fx/internal/scope.d.ts.map +1 -1
- package/dist/Fx/internal/scope.js +150 -0
- package/dist/Fx/internal/yieldable.d.ts +117 -2
- package/dist/Fx/internal/yieldable.d.ts.map +1 -1
- package/dist/Fx/internal/yieldable.js +86 -3
- package/dist/Fx/run/collect.d.ts +93 -4
- package/dist/Fx/run/collect.d.ts.map +1 -1
- package/dist/Fx/run/collect.js +94 -5
- package/dist/Fx/run/first.d.ts +23 -1
- package/dist/Fx/run/first.d.ts.map +1 -1
- package/dist/Fx/run/first.js +23 -1
- package/dist/Fx/run/fork.d.ts +52 -2
- package/dist/Fx/run/fork.d.ts.map +1 -1
- package/dist/Fx/run/fork.js +52 -2
- package/dist/Fx/run/observe.d.ts +112 -4
- package/dist/Fx/run/observe.d.ts.map +1 -1
- package/dist/Fx/run/observe.js +137 -16
- package/dist/Fx/run/runPromise.d.ts +45 -2
- package/dist/Fx/run/runPromise.d.ts.map +1 -1
- package/dist/Fx/run/runPromise.js +45 -2
- package/dist/Fx/stream.d.ts +92 -0
- package/dist/Fx/stream.d.ts.map +1 -1
- package/dist/Fx/stream.js +60 -1
- package/dist/Push/Push.d.ts +1286 -98
- package/dist/Push/Push.d.ts.map +1 -1
- package/dist/Push/Push.js +1074 -88
- package/dist/RefArray.d.ts +2 -0
- package/dist/RefArray.d.ts.map +1 -0
- package/dist/RefArray.js +1 -0
- package/dist/RefBigDecimal.d.ts +2 -0
- package/dist/RefBigDecimal.d.ts.map +1 -0
- package/dist/RefBigDecimal.js +1 -0
- package/dist/RefBigInt.d.ts +2 -0
- package/dist/RefBigInt.d.ts.map +1 -0
- package/dist/RefBigInt.js +1 -0
- package/dist/RefBoolean.d.ts +2 -0
- package/dist/RefBoolean.d.ts.map +1 -0
- package/dist/RefBoolean.js +1 -0
- package/dist/RefCause.d.ts +2 -0
- package/dist/RefCause.d.ts.map +1 -0
- package/dist/RefCause.js +1 -0
- package/dist/RefChunk.d.ts +2 -0
- package/dist/RefChunk.d.ts.map +1 -0
- package/dist/RefChunk.js +1 -0
- package/dist/RefDateTime.d.ts +2 -0
- package/dist/RefDateTime.d.ts.map +1 -0
- package/dist/RefDateTime.js +1 -0
- package/dist/RefDuration.d.ts +2 -0
- package/dist/RefDuration.d.ts.map +1 -0
- package/dist/RefDuration.js +1 -0
- package/dist/RefGraph.d.ts +2 -0
- package/dist/RefGraph.d.ts.map +1 -0
- package/dist/RefGraph.js +1 -0
- package/dist/RefHashMap.d.ts +2 -0
- package/dist/RefHashMap.d.ts.map +1 -0
- package/dist/RefHashMap.js +1 -0
- package/dist/RefHashRing.d.ts +2 -0
- package/dist/RefHashRing.d.ts.map +1 -0
- package/dist/RefHashRing.js +1 -0
- package/dist/RefHashSet.d.ts +2 -0
- package/dist/RefHashSet.d.ts.map +1 -0
- package/dist/RefHashSet.js +1 -0
- package/dist/RefIterable.d.ts +2 -0
- package/dist/RefIterable.d.ts.map +1 -0
- package/dist/RefIterable.js +1 -0
- package/dist/RefOption.d.ts +2 -0
- package/dist/RefOption.d.ts.map +1 -0
- package/dist/RefOption.js +1 -0
- package/dist/RefRecord.d.ts +2 -0
- package/dist/RefRecord.d.ts.map +1 -0
- package/dist/RefRecord.js +1 -0
- package/dist/RefResult.d.ts +2 -0
- package/dist/RefResult.d.ts.map +1 -0
- package/dist/RefResult.js +1 -0
- package/dist/RefString.d.ts +2 -0
- package/dist/RefString.d.ts.map +1 -0
- package/dist/RefString.js +1 -0
- package/dist/RefStruct.d.ts +2 -0
- package/dist/RefStruct.d.ts.map +1 -0
- package/dist/RefStruct.js +1 -0
- package/dist/RefSubject/Hydration.d.ts +504 -0
- package/dist/RefSubject/Hydration.d.ts.map +1 -0
- package/dist/RefSubject/Hydration.js +300 -0
- package/dist/RefSubject/RefArray.d.ts +382 -35
- package/dist/RefSubject/RefArray.d.ts.map +1 -1
- package/dist/RefSubject/RefArray.js +374 -40
- package/dist/RefSubject/RefBigDecimal.d.ts +241 -21
- package/dist/RefSubject/RefBigDecimal.d.ts.map +1 -1
- package/dist/RefSubject/RefBigDecimal.js +229 -20
- package/dist/RefSubject/RefBigInt.d.ts +181 -16
- package/dist/RefSubject/RefBigInt.d.ts.map +1 -1
- package/dist/RefSubject/RefBigInt.js +169 -15
- package/dist/RefSubject/RefBoolean.d.ts +181 -16
- package/dist/RefSubject/RefBoolean.d.ts.map +1 -1
- package/dist/RefSubject/RefBoolean.js +169 -15
- package/dist/RefSubject/RefCause.d.ts +133 -12
- package/dist/RefSubject/RefCause.d.ts.map +1 -1
- package/dist/RefSubject/RefCause.js +121 -11
- package/dist/RefSubject/RefChunk.d.ts +481 -76
- package/dist/RefSubject/RefChunk.d.ts.map +1 -1
- package/dist/RefSubject/RefChunk.js +471 -75
- package/dist/RefSubject/RefDateTime.d.ts +137 -16
- package/dist/RefSubject/RefDateTime.d.ts.map +1 -1
- package/dist/RefSubject/RefDateTime.js +122 -12
- package/dist/RefSubject/RefDuration.d.ts +169 -15
- package/dist/RefSubject/RefDuration.d.ts.map +1 -1
- package/dist/RefSubject/RefDuration.js +157 -14
- package/dist/RefSubject/RefGraph.d.ts +349 -35
- package/dist/RefSubject/RefGraph.d.ts.map +1 -1
- package/dist/RefSubject/RefGraph.js +334 -32
- package/dist/RefSubject/RefHashMap.d.ts +323 -28
- package/dist/RefSubject/RefHashMap.d.ts.map +1 -1
- package/dist/RefSubject/RefHashMap.js +317 -29
- package/dist/RefSubject/RefHashRing.d.ts +159 -15
- package/dist/RefSubject/RefHashRing.d.ts.map +1 -1
- package/dist/RefSubject/RefHashRing.js +145 -12
- package/dist/RefSubject/RefHashSet.d.ts +251 -22
- package/dist/RefSubject/RefHashSet.d.ts.map +1 -1
- package/dist/RefSubject/RefHashSet.js +238 -20
- package/dist/RefSubject/RefIterable.d.ts +358 -32
- package/dist/RefSubject/RefIterable.d.ts.map +1 -1
- package/dist/RefSubject/RefIterable.js +350 -30
- package/dist/RefSubject/RefOption.d.ts +157 -14
- package/dist/RefSubject/RefOption.d.ts.map +1 -1
- package/dist/RefSubject/RefOption.js +145 -13
- package/dist/RefSubject/RefRecord.d.ts +402 -64
- package/dist/RefSubject/RefRecord.d.ts.map +1 -1
- package/dist/RefSubject/RefRecord.js +364 -39
- package/dist/RefSubject/RefResult.d.ts +167 -35
- package/dist/RefSubject/RefResult.d.ts.map +1 -1
- package/dist/RefSubject/RefResult.js +133 -12
- package/dist/RefSubject/RefString.d.ts +205 -18
- package/dist/RefSubject/RefString.d.ts.map +1 -1
- package/dist/RefSubject/RefString.js +193 -17
- package/dist/RefSubject/RefStruct.d.ts +169 -14
- package/dist/RefSubject/RefStruct.d.ts.map +1 -1
- package/dist/RefSubject/RefStruct.js +157 -13
- package/dist/RefSubject/RefSubject.d.ts +1242 -43
- package/dist/RefSubject/RefSubject.d.ts.map +1 -1
- package/dist/RefSubject/RefSubject.js +1012 -86
- package/dist/RefSubject/RefTrie.d.ts +323 -37
- package/dist/RefSubject/RefTrie.d.ts.map +1 -1
- package/dist/RefSubject/RefTrie.js +311 -31
- package/dist/RefSubject/RefTuple.d.ts +127 -11
- package/dist/RefSubject/RefTuple.d.ts.map +1 -1
- package/dist/RefSubject/RefTuple.js +114 -9
- package/dist/RefSubject/index.d.ts +1 -0
- package/dist/RefSubject/index.d.ts.map +1 -1
- package/dist/RefSubject/index.js +1 -0
- package/dist/RefSubject.d.ts +2 -1
- package/dist/RefSubject.d.ts.map +1 -1
- package/dist/RefSubject.js +2 -1
- package/dist/RefTrie.d.ts +2 -0
- package/dist/RefTrie.d.ts.map +1 -0
- package/dist/RefTrie.js +1 -0
- package/dist/RefTuple.d.ts +2 -0
- package/dist/RefTuple.d.ts.map +1 -0
- package/dist/RefTuple.js +1 -0
- package/dist/Sink/Sink.d.ts +396 -23
- package/dist/Sink/Sink.d.ts.map +1 -1
- package/dist/Sink/Sink.js +55 -7
- package/dist/Sink/combinators.d.ts +789 -3
- package/dist/Sink/combinators.d.ts.map +1 -1
- package/dist/Sink/combinators.js +812 -7
- package/dist/Subject/Subject.d.ts +1022 -27
- package/dist/Subject/Subject.d.ts.map +1 -1
- package/dist/Subject/Subject.js +909 -43
- package/dist/Versioned/Versioned.d.ts +475 -25
- package/dist/Versioned/Versioned.d.ts.map +1 -1
- package/dist/Versioned/Versioned.js +298 -46
- package/dist/index.d.ts +22 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -3
- package/package.json +125 -11
- package/dist/Fx/constructors/fromYieldable.d.ts +0 -12
- package/dist/Fx/constructors/fromYieldable.d.ts.map +0 -1
- package/dist/Fx/constructors/fromYieldable.js +0 -12
- package/src/Fx/Fx.ts +0 -164
- package/src/Fx/TypeId.ts +0 -25
- package/src/Fx/combinators/catch.ts +0 -165
- package/src/Fx/combinators/causes.ts +0 -23
- package/src/Fx/combinators/compact.ts +0 -15
- package/src/Fx/combinators/continueWith.ts +0 -78
- package/src/Fx/combinators/ensuring.ts +0 -23
- package/src/Fx/combinators/exhaustLatestMap.ts +0 -74
- package/src/Fx/combinators/exhaustLatestMapEffect.ts +0 -25
- package/src/Fx/combinators/exhaustMap.ts +0 -36
- package/src/Fx/combinators/exhaustMapEffect.ts +0 -23
- package/src/Fx/combinators/exit.ts +0 -15
- package/src/Fx/combinators/filter.ts +0 -22
- package/src/Fx/combinators/filterEffect.ts +0 -31
- package/src/Fx/combinators/filterMap.ts +0 -23
- package/src/Fx/combinators/filterMapEffect.ts +0 -32
- package/src/Fx/combinators/filterMapLoop.ts +0 -35
- package/src/Fx/combinators/filterMapLoopCause.ts +0 -36
- package/src/Fx/combinators/filterMapLoopCauseEffect.ts +0 -46
- package/src/Fx/combinators/filterMapLoopEffect.ts +0 -36
- package/src/Fx/combinators/flatMap.ts +0 -51
- package/src/Fx/combinators/flatMapConcurrently.ts +0 -36
- package/src/Fx/combinators/flatMapConcurrentlyEffect.ts +0 -26
- package/src/Fx/combinators/flatMapEffect.ts +0 -42
- package/src/Fx/combinators/flip.ts +0 -14
- package/src/Fx/combinators/gen.ts +0 -24
- package/src/Fx/combinators/genScoped.ts +0 -24
- package/src/Fx/combinators/index.ts +0 -51
- package/src/Fx/combinators/keyed.ts +0 -369
- package/src/Fx/combinators/loop.ts +0 -27
- package/src/Fx/combinators/loopCause.ts +0 -34
- package/src/Fx/combinators/loopCauseEffect.ts +0 -36
- package/src/Fx/combinators/loopEffect.ts +0 -34
- package/src/Fx/combinators/map.ts +0 -22
- package/src/Fx/combinators/mapEffect.ts +0 -32
- package/src/Fx/combinators/mergeAll.ts +0 -22
- package/src/Fx/combinators/mergeOrdered.ts +0 -123
- package/src/Fx/combinators/onError.ts +0 -40
- package/src/Fx/combinators/onExit.ts +0 -82
- package/src/Fx/combinators/onInterrupt.ts +0 -87
- package/src/Fx/combinators/provide.ts +0 -62
- package/src/Fx/combinators/skip.ts +0 -20
- package/src/Fx/combinators/skipRepeats.ts +0 -15
- package/src/Fx/combinators/skipRepeatsWith.ts +0 -40
- package/src/Fx/combinators/slice.ts +0 -32
- package/src/Fx/combinators/switchMap.ts +0 -55
- package/src/Fx/combinators/switchMapEffect.ts +0 -25
- package/src/Fx/combinators/take.ts +0 -17
- package/src/Fx/combinators/takeUntil.ts +0 -50
- package/src/Fx/combinators/tapEffect.ts +0 -39
- package/src/Fx/combinators/tuple.ts +0 -79
- package/src/Fx/combinators/unwrap.ts +0 -21
- package/src/Fx/combinators/unwrapScoped.ts +0 -26
- package/src/Fx/combinators/when.ts +0 -64
- package/src/Fx/combinators/withSpan.ts +0 -24
- package/src/Fx/constructors/at.ts +0 -23
- package/src/Fx/constructors/die.ts +0 -17
- package/src/Fx/constructors/empty.ts +0 -10
- package/src/Fx/constructors/fail.ts +0 -14
- package/src/Fx/constructors/failCause.ts +0 -14
- package/src/Fx/constructors/fn.ts +0 -245
- package/src/Fx/constructors/fromEffect.ts +0 -24
- package/src/Fx/constructors/fromFailures.ts +0 -19
- package/src/Fx/constructors/fromIterable.ts +0 -15
- package/src/Fx/constructors/fromSchedule.ts +0 -18
- package/src/Fx/constructors/fromYieldable.ts +0 -17
- package/src/Fx/constructors/index.ts +0 -15
- package/src/Fx/constructors/interrupt.ts +0 -13
- package/src/Fx/constructors/make.ts +0 -103
- package/src/Fx/constructors/periodic.ts +0 -15
- package/src/Fx/constructors/succeed.ts +0 -37
- package/src/Fx/constructors/suspend.ts +0 -6
- package/src/Fx/index.ts +0 -6
- package/src/Fx/internal/DeferredRef.ts +0 -87
- package/src/Fx/internal/UnionToTuple.ts +0 -12
- package/src/Fx/internal/diff.ts +0 -191
- package/src/Fx/internal/equivalence.ts +0 -12
- package/src/Fx/internal/multicast.ts +0 -51
- package/src/Fx/internal/ring-buffer.ts +0 -60
- package/src/Fx/internal/scope.ts +0 -58
- package/src/Fx/internal/yieldable.ts +0 -31
- package/src/Fx/run/collect.ts +0 -79
- package/src/Fx/run/first.ts +0 -20
- package/src/Fx/run/fork.ts +0 -40
- package/src/Fx/run/index.ts +0 -5
- package/src/Fx/run/observe.ts +0 -114
- package/src/Fx/run/runPromise.ts +0 -32
- package/src/Fx/stream.ts +0 -42
- package/src/Fx.catch.test.ts +0 -61
- package/src/Fx.fn.test.ts +0 -51
- package/src/Fx.lifecycle.test.ts +0 -80
- package/src/Fx.test.ts +0 -71
- package/src/Fx.ts +0 -1
- package/src/Push/Push.ts +0 -903
- package/src/Push/index.ts +0 -1
- package/src/Push.test.ts +0 -26
- package/src/Push.ts +0 -1
- package/src/RefSubject/RefArray.ts +0 -512
- package/src/RefSubject/RefBigDecimal.test.ts +0 -56
- package/src/RefSubject/RefBigDecimal.ts +0 -295
- package/src/RefSubject/RefBigInt.test.ts +0 -56
- package/src/RefSubject/RefBigInt.ts +0 -189
- package/src/RefSubject/RefBoolean.test.ts +0 -57
- package/src/RefSubject/RefBoolean.ts +0 -185
- package/src/RefSubject/RefCause.test.ts +0 -53
- package/src/RefSubject/RefCause.ts +0 -146
- package/src/RefSubject/RefChunk.ts +0 -510
- package/src/RefSubject/RefDateTime.test.ts +0 -43
- package/src/RefSubject/RefDateTime.ts +0 -264
- package/src/RefSubject/RefDuration.test.ts +0 -49
- package/src/RefSubject/RefDuration.ts +0 -188
- package/src/RefSubject/RefGraph.ts +0 -650
- package/src/RefSubject/RefHashMap.ts +0 -465
- package/src/RefSubject/RefHashRing.ts +0 -262
- package/src/RefSubject/RefHashSet.ts +0 -308
- package/src/RefSubject/RefIterable.ts +0 -445
- package/src/RefSubject/RefOption.test.ts +0 -67
- package/src/RefSubject/RefOption.ts +0 -193
- package/src/RefSubject/RefRecord.ts +0 -612
- package/src/RefSubject/RefResult.test.ts +0 -63
- package/src/RefSubject/RefResult.ts +0 -209
- package/src/RefSubject/RefString.test.ts +0 -61
- package/src/RefSubject/RefString.ts +0 -256
- package/src/RefSubject/RefStruct.test.ts +0 -60
- package/src/RefSubject/RefStruct.ts +0 -253
- package/src/RefSubject/RefSubject.ts +0 -2545
- package/src/RefSubject/RefTrie.ts +0 -356
- package/src/RefSubject/RefTuple.test.ts +0 -60
- package/src/RefSubject/RefTuple.ts +0 -231
- package/src/RefSubject/index.ts +0 -21
- package/src/RefSubject.test.ts +0 -65
- package/src/RefSubject.ts +0 -1
- package/src/Sink/Sink.ts +0 -159
- package/src/Sink/combinators.ts +0 -993
- package/src/Sink/index.ts +0 -2
- package/src/Sink.ts +0 -1
- package/src/Subject/Subject.ts +0 -441
- package/src/Subject/index.ts +0 -1
- package/src/Subject.test.ts +0 -47
- package/src/Subject.ts +0 -1
- package/src/Versioned/Versioned.ts +0 -521
- package/src/Versioned/index.ts +0 -1
- package/src/Versioned.test.ts +0 -23
- package/src/Versioned.ts +0 -1
- package/src/index.ts +0 -7
- package/tsconfig.json +0 -6
|
@@ -1,11 +1,43 @@
|
|
|
1
1
|
import type { Fx } from "../Fx.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Emits typed failures as values and fails with the first successful value.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* ## Why
|
|
7
|
+
*
|
|
8
|
+
* Channel inversion makes an error-producing computation composable through
|
|
9
|
+
* success operators, mirroring Effect's `flip` without erasing either type.
|
|
10
|
+
*
|
|
11
|
+
* ## Ownership and lifetime
|
|
12
|
+
*
|
|
13
|
+
* If a source Cause contains any Fail, the first typed error `e` is delivered
|
|
14
|
+
* as success and the entire Cause is discarded, including defects or interrupts
|
|
15
|
+
* composed beside that Fail. A Cause with no Fail propagates unchanged. A source
|
|
16
|
+
* success `a` terminates the returned Fx with typed failure `a`. The source
|
|
17
|
+
* subscription is the only lifetime and external interruption still stops it.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { flip } from "@typed/fx/Fx"
|
|
22
|
+
* import { fail } from "@typed/fx/Fx"
|
|
23
|
+
*
|
|
24
|
+
* const errorsAsValues = flip(fail("offline"))
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @example The first Fail wins over the rest of a composite Cause
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { Cause } from "effect"
|
|
30
|
+
* import { flip } from "@typed/fx/Fx"
|
|
31
|
+
* import { failCause } from "@typed/fx/Fx"
|
|
32
|
+
*
|
|
33
|
+
* const composite = Cause.combine(Cause.fail("offline"), Cause.die("decoder defect"))
|
|
34
|
+
* const errorValue = flip(failCause(composite))
|
|
35
|
+
* ```
|
|
4
36
|
*
|
|
5
37
|
* @param fx - The `Fx` stream.
|
|
6
38
|
* @returns An `Fx` where errors are successes and successes are errors.
|
|
7
39
|
* @since 1.0.0
|
|
8
|
-
* @category
|
|
40
|
+
* @category Errors and recovery
|
|
9
41
|
*/
|
|
10
42
|
export declare const flip: <A, E, R>(fx: Fx<A, E, R>) => Fx<E, A, R>;
|
|
11
43
|
//# sourceMappingURL=flip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flip.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/flip.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC
|
|
1
|
+
{"version":3,"file":"flip.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/flip.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACJ,CAAC"}
|
|
@@ -1,11 +1,43 @@
|
|
|
1
1
|
import * as sinkCore from "../../Sink/combinators.js";
|
|
2
2
|
import { make } from "../constructors/make.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Emits typed failures as values and fails with the first successful value.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* ## Why
|
|
8
|
+
*
|
|
9
|
+
* Channel inversion makes an error-producing computation composable through
|
|
10
|
+
* success operators, mirroring Effect's `flip` without erasing either type.
|
|
11
|
+
*
|
|
12
|
+
* ## Ownership and lifetime
|
|
13
|
+
*
|
|
14
|
+
* If a source Cause contains any Fail, the first typed error `e` is delivered
|
|
15
|
+
* as success and the entire Cause is discarded, including defects or interrupts
|
|
16
|
+
* composed beside that Fail. A Cause with no Fail propagates unchanged. A source
|
|
17
|
+
* success `a` terminates the returned Fx with typed failure `a`. The source
|
|
18
|
+
* subscription is the only lifetime and external interruption still stops it.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* import { flip } from "@typed/fx/Fx"
|
|
23
|
+
* import { fail } from "@typed/fx/Fx"
|
|
24
|
+
*
|
|
25
|
+
* const errorsAsValues = flip(fail("offline"))
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @example The first Fail wins over the rest of a composite Cause
|
|
29
|
+
* ```ts
|
|
30
|
+
* import { Cause } from "effect"
|
|
31
|
+
* import { flip } from "@typed/fx/Fx"
|
|
32
|
+
* import { failCause } from "@typed/fx/Fx"
|
|
33
|
+
*
|
|
34
|
+
* const composite = Cause.combine(Cause.fail("offline"), Cause.die("decoder defect"))
|
|
35
|
+
* const errorValue = flip(failCause(composite))
|
|
36
|
+
* ```
|
|
5
37
|
*
|
|
6
38
|
* @param fx - The `Fx` stream.
|
|
7
39
|
* @returns An `Fx` where errors are successes and successes are errors.
|
|
8
40
|
* @since 1.0.0
|
|
9
|
-
* @category
|
|
41
|
+
* @category Errors and recovery
|
|
10
42
|
*/
|
|
11
43
|
export const flip = (fx) => make((sink) => fx.run(sinkCore.flip(sink)));
|
|
@@ -1,20 +1,39 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
2
|
import type { Fx } from "../Fx.js";
|
|
3
|
-
/** Extract error type from Yieldable (Effect v4) */
|
|
4
|
-
type _YE<Y> = Y extends Effect.Yieldable<any, any, infer E, any> ? E : never;
|
|
5
|
-
/** Extract services type from Yieldable (Effect v4) */
|
|
6
|
-
type _YS<Y> = Y extends Effect.Yieldable<any, any, any, infer R> ? R : never;
|
|
7
3
|
/**
|
|
8
|
-
*
|
|
4
|
+
* Builds an Fx by yielding Effects and returning the Fx to run afterward.
|
|
9
5
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* ## Why
|
|
8
|
+
*
|
|
9
|
+
* Setup logic often needs Effect services or failures before it can choose a
|
|
10
|
+
* push producer. Generator notation keeps that dependency-aware setup linear
|
|
11
|
+
* while preserving the returned Fx's success, error, and service channels.
|
|
12
|
+
*
|
|
13
|
+
* ## Ownership and lifetime
|
|
14
|
+
*
|
|
15
|
+
* The generator is lazy: it runs for each subscription. Yielded Effects run
|
|
16
|
+
* first; only their returned Fx is then subscribed. A setup failure prevents
|
|
17
|
+
* the Fx from starting, and interruption cancels the active phase. Resources
|
|
18
|
+
* acquired by yielded Effects must not escape unless managed independently;
|
|
19
|
+
* use {@link genScoped} when setup and the returned Fx share a Scope.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { Effect } from "effect"
|
|
24
|
+
* import { gen } from "@typed/fx/Fx"
|
|
25
|
+
* import { succeed } from "@typed/fx/Fx"
|
|
26
|
+
*
|
|
27
|
+
* const greeting = gen(function* () {
|
|
28
|
+
* const name = yield* Effect.succeed("Typed")
|
|
29
|
+
* return succeed(`Hello, ${name}`)
|
|
30
|
+
* })
|
|
31
|
+
* ```
|
|
12
32
|
*
|
|
13
33
|
* @param f - The generator function.
|
|
14
34
|
* @returns An `Fx` representing the result of the generator.
|
|
15
35
|
* @since 1.0.0
|
|
16
|
-
* @category
|
|
36
|
+
* @category Generator composition
|
|
17
37
|
*/
|
|
18
|
-
export declare const gen: <Yield extends Effect.
|
|
19
|
-
export {};
|
|
38
|
+
export declare const gen: <Yield extends Effect.Effect<any, any, any>, Return extends Fx.Any>(f: () => Generator<Yield, Return, any>) => Fx<Fx.Success<Return>, Fx.Error<Return> | ([Yield] extends [never] ? never : Effect.Error<Yield>), Fx.Services<Return> | ([Yield] extends [never] ? never : Effect.Services<Yield>)>;
|
|
20
39
|
//# sourceMappingURL=gen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gen.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/gen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAGnC
|
|
1
|
+
{"version":3,"file":"gen.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/gen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAGnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,GAAG,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,SAAS,EAAE,CAAC,GAAG,KAChF,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,KACrC,EAAE,CACH,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAClB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAC1E,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACxD,CAAC"}
|
|
@@ -1,14 +1,38 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
2
|
import { unwrap } from "./unwrap.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Builds an Fx by yielding Effects and returning the Fx to run afterward.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* ## Why
|
|
8
|
+
*
|
|
9
|
+
* Setup logic often needs Effect services or failures before it can choose a
|
|
10
|
+
* push producer. Generator notation keeps that dependency-aware setup linear
|
|
11
|
+
* while preserving the returned Fx's success, error, and service channels.
|
|
12
|
+
*
|
|
13
|
+
* ## Ownership and lifetime
|
|
14
|
+
*
|
|
15
|
+
* The generator is lazy: it runs for each subscription. Yielded Effects run
|
|
16
|
+
* first; only their returned Fx is then subscribed. A setup failure prevents
|
|
17
|
+
* the Fx from starting, and interruption cancels the active phase. Resources
|
|
18
|
+
* acquired by yielded Effects must not escape unless managed independently;
|
|
19
|
+
* use {@link genScoped} when setup and the returned Fx share a Scope.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { Effect } from "effect"
|
|
24
|
+
* import { gen } from "@typed/fx/Fx"
|
|
25
|
+
* import { succeed } from "@typed/fx/Fx"
|
|
26
|
+
*
|
|
27
|
+
* const greeting = gen(function* () {
|
|
28
|
+
* const name = yield* Effect.succeed("Typed")
|
|
29
|
+
* return succeed(`Hello, ${name}`)
|
|
30
|
+
* })
|
|
31
|
+
* ```
|
|
8
32
|
*
|
|
9
33
|
* @param f - The generator function.
|
|
10
34
|
* @returns An `Fx` representing the result of the generator.
|
|
11
35
|
* @since 1.0.0
|
|
12
|
-
* @category
|
|
36
|
+
* @category Generator composition
|
|
13
37
|
*/
|
|
14
38
|
export const gen = (f) => unwrap(Effect.gen(f));
|
|
@@ -1,20 +1,43 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import type * as Scope from "effect/Scope";
|
|
3
2
|
import type { Fx } from "../Fx.js";
|
|
4
|
-
|
|
5
|
-
type _YE<Y> = Y extends Effect.Yieldable<any, any, infer E, any> ? E : never;
|
|
6
|
-
/** Extract services type from Yieldable (Effect v4) */
|
|
7
|
-
type _YS<Y> = Y extends Effect.Yieldable<any, any, any, infer R> ? R : never;
|
|
3
|
+
import { Scope } from "effect";
|
|
8
4
|
/**
|
|
9
|
-
*
|
|
5
|
+
* Builds an Fx with a subscription-owned Scope shared by setup and streaming.
|
|
10
6
|
*
|
|
11
|
-
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* ## Why
|
|
9
|
+
*
|
|
10
|
+
* Resourceful setup must remain alive while the returned producer runs and be
|
|
11
|
+
* released when that subscription ends. `genScoped` supplies that exact
|
|
12
|
+
* acquisition-to-stream lifetime while removing `Scope` from the public
|
|
13
|
+
* service requirement.
|
|
14
|
+
*
|
|
15
|
+
* ## Ownership and lifetime
|
|
16
|
+
*
|
|
17
|
+
* Every subscription creates one child Scope, runs the generator inside it,
|
|
18
|
+
* then runs the returned Fx in the same Scope. Normal completion, failure,
|
|
19
|
+
* defect, or interruption closes the Scope and its finalizers. Setup failures
|
|
20
|
+
* prevent streaming; all non-Scope errors and services remain in the result.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* import { Effect } from "effect"
|
|
25
|
+
* import { genScoped } from "@typed/fx/Fx"
|
|
26
|
+
* import { succeed } from "@typed/fx/Fx"
|
|
27
|
+
*
|
|
28
|
+
* const resourceful = genScoped(function* () {
|
|
29
|
+
* const handle = yield* Effect.acquireRelease(
|
|
30
|
+
* Effect.succeed({ open: true }),
|
|
31
|
+
* () => Effect.void
|
|
32
|
+
* )
|
|
33
|
+
* return succeed(handle.open)
|
|
34
|
+
* })
|
|
35
|
+
* ```
|
|
12
36
|
*
|
|
13
37
|
* @param f - The generator function.
|
|
14
38
|
* @returns An `Fx` representing the result of the generator.
|
|
15
39
|
* @since 1.0.0
|
|
16
|
-
* @category
|
|
40
|
+
* @category Generator composition
|
|
17
41
|
*/
|
|
18
|
-
export declare const genScoped: <Yield extends Effect.
|
|
19
|
-
export {};
|
|
42
|
+
export declare const genScoped: <Yield extends Effect.Effect<any, any, any>, Return extends Fx.Any>(f: () => Generator<Yield, Return, any>) => Fx<Fx.Success<Return>, Fx.Error<Return> | ([Yield] extends [never] ? never : Effect.Error<Yield>), Exclude<Fx.Services<Return> | ([Yield] extends [never] ? never : Effect.Services<Yield>), Scope.Scope>>;
|
|
20
43
|
//# sourceMappingURL=genScoped.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genScoped.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/genScoped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"genScoped.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/genScoped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,SAAS,EAAE,CAAC,GAAG,KACtF,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,KACrC,EAAE,CACH,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAClB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAC1E,OAAO,CACL,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAChF,KAAK,CAAC,KAAK,CACZ,CAC6B,CAAC"}
|
|
@@ -1,13 +1,41 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
2
|
import { unwrapScoped } from "./unwrapScoped.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Builds an Fx with a subscription-owned Scope shared by setup and streaming.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* ## Why
|
|
8
|
+
*
|
|
9
|
+
* Resourceful setup must remain alive while the returned producer runs and be
|
|
10
|
+
* released when that subscription ends. `genScoped` supplies that exact
|
|
11
|
+
* acquisition-to-stream lifetime while removing `Scope` from the public
|
|
12
|
+
* service requirement.
|
|
13
|
+
*
|
|
14
|
+
* ## Ownership and lifetime
|
|
15
|
+
*
|
|
16
|
+
* Every subscription creates one child Scope, runs the generator inside it,
|
|
17
|
+
* then runs the returned Fx in the same Scope. Normal completion, failure,
|
|
18
|
+
* defect, or interruption closes the Scope and its finalizers. Setup failures
|
|
19
|
+
* prevent streaming; all non-Scope errors and services remain in the result.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { Effect } from "effect"
|
|
24
|
+
* import { genScoped } from "@typed/fx/Fx"
|
|
25
|
+
* import { succeed } from "@typed/fx/Fx"
|
|
26
|
+
*
|
|
27
|
+
* const resourceful = genScoped(function* () {
|
|
28
|
+
* const handle = yield* Effect.acquireRelease(
|
|
29
|
+
* Effect.succeed({ open: true }),
|
|
30
|
+
* () => Effect.void
|
|
31
|
+
* )
|
|
32
|
+
* return succeed(handle.open)
|
|
33
|
+
* })
|
|
34
|
+
* ```
|
|
7
35
|
*
|
|
8
36
|
* @param f - The generator function.
|
|
9
37
|
* @returns An `Fx` representing the result of the generator.
|
|
10
38
|
* @since 1.0.0
|
|
11
|
-
* @category
|
|
39
|
+
* @category Generator composition
|
|
12
40
|
*/
|
|
13
41
|
export const genScoped = (f) => unwrapScoped(Effect.gen(f));
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { NonEmptyReadonlyArray } from "effect/Array";
|
|
2
|
+
import * as Cause from "effect/Cause";
|
|
3
|
+
import * as Duration from "effect/Duration";
|
|
4
|
+
import * as Scope from "effect/Scope";
|
|
5
|
+
import type { Fx } from "../Fx.js";
|
|
6
|
+
/**
|
|
7
|
+
* Partitions the stream into non-empty arrays of size `n`. The final array
|
|
8
|
+
* may be smaller if there are leftover elements.
|
|
9
|
+
* The size must be a positive safe integer. A group can retain up to `n`
|
|
10
|
+
* values, so callers own the memory policy for valid sizes. Invalid sizes
|
|
11
|
+
* fail with `Cause.IllegalArgumentError`.
|
|
12
|
+
*
|
|
13
|
+
* Matches Effect `Stream.grouped`.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* ## Why
|
|
17
|
+
* `grouped` exposes fixed-size batching without changing source order. Full groups contain exactly
|
|
18
|
+
* `n` values. Because failure is delivered to the Sink while `Fx.run` remains infallible, any
|
|
19
|
+
* partial group is flushed after the source run returns even if a failure was delivered first.
|
|
20
|
+
*
|
|
21
|
+
* ## Ownership and lifetime
|
|
22
|
+
* Each run retains at most `n` values and releases its buffer after the final flush or interruption.
|
|
23
|
+
* Invalid sizes deliver failure before source acquisition. A terminal observer may interrupt before
|
|
24
|
+
* the post-failure flush, but a Sink that handles the Cause can receive the partial group afterward.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { Cause, Effect, Ref } from "effect"
|
|
29
|
+
* import { Fx, Sink } from "@typed/fx"
|
|
30
|
+
* const program = Effect.gen(function* () {
|
|
31
|
+
* const deliveries = yield* Ref.make<Array<string>>([])
|
|
32
|
+
* const source = Fx.make<number, string>((sink) =>
|
|
33
|
+
* sink.onSuccess(1).pipe(Effect.andThen(sink.onFailure(Cause.fail("boom"))))
|
|
34
|
+
* )
|
|
35
|
+
* yield* Fx.grouped(source, 2).run(Sink.make(
|
|
36
|
+
* () => Ref.update(deliveries, (xs) => [...xs, "failure"]),
|
|
37
|
+
* (group) => Ref.update(deliveries, (xs) => [...xs, `group:${group.join(",")}`])
|
|
38
|
+
* ))
|
|
39
|
+
* return yield* Ref.get(deliveries) // ["failure", "group:1"]
|
|
40
|
+
* })
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @since 1.0.0
|
|
44
|
+
* @category Stateful transforms
|
|
45
|
+
*/
|
|
46
|
+
export declare const grouped: {
|
|
47
|
+
(n: number): <A, E, R>(self: Fx<A, E, R>) => Fx<NonEmptyReadonlyArray<A>, E | Cause.IllegalArgumentError, R>;
|
|
48
|
+
<A, E, R>(self: Fx<A, E, R>, n: number): Fx<NonEmptyReadonlyArray<A>, E | Cause.IllegalArgumentError, R>;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Partitions the stream into arrays, emitting when `n` is reached or `duration`
|
|
52
|
+
* elapses after the first element of the current group.
|
|
53
|
+
* The size must be a positive safe integer. A group can retain up to `n`
|
|
54
|
+
* values, so callers own the memory policy for valid sizes. Invalid sizes
|
|
55
|
+
* fail with `Cause.IllegalArgumentError`.
|
|
56
|
+
*
|
|
57
|
+
* Matches Effect `Stream.groupedWithin`.
|
|
58
|
+
*
|
|
59
|
+
* @remarks
|
|
60
|
+
* ## Why
|
|
61
|
+
* `groupedWithin` bounds a batch by both cardinality and time. The timer starts with the first value,
|
|
62
|
+
* and whichever boundary wins emits the ordered non-empty group and resets both buffer and timer.
|
|
63
|
+
* A partial group is also flushed when the source run returns, including after delivered failure.
|
|
64
|
+
*
|
|
65
|
+
* ## Ownership and lifetime
|
|
66
|
+
* Each run retains at most `n` values and at most one timer fiber in the required Scope. A source
|
|
67
|
+
* failure is Sink delivery, so `flushNow` still runs afterward unless the consumer interrupts the
|
|
68
|
+
* run. Flushing or interruption cancels the timer; invalid sizes fail before subscription.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* import { Cause, Effect } from "effect"
|
|
73
|
+
* import { Fx, Sink } from "@typed/fx"
|
|
74
|
+
* const source = Fx.make<number, string>((sink) =>
|
|
75
|
+
* sink.onSuccess(1).pipe(Effect.andThen(sink.onFailure(Cause.fail("boom"))))
|
|
76
|
+
* )
|
|
77
|
+
* const program = Fx.groupedWithin(source, 2, "1 hour").run(
|
|
78
|
+
* Sink.make(Effect.logError, (group) => Effect.log(group))
|
|
79
|
+
* ) // logs the failure, then flushes [1]
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* @since 1.0.0
|
|
83
|
+
* @category Time and rate
|
|
84
|
+
*/
|
|
85
|
+
export declare const groupedWithin: {
|
|
86
|
+
(n: number, duration: Duration.Input): <A, E, R>(self: Fx<A, E, R>) => Fx<NonEmptyReadonlyArray<A>, E | Cause.IllegalArgumentError, R | Scope.Scope>;
|
|
87
|
+
<A, E, R>(self: Fx<A, E, R>, n: number, duration: Duration.Input): Fx<NonEmptyReadonlyArray<A>, E | Cause.IllegalArgumentError, R | Scope.Scope>;
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=grouped.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouped.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/grouped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAK5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAOnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,OAAO,EAAE;IACpB,CACE,CAAC,EAAE,MAAM,GACR,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACd,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACN,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjB,CAAC,EAAE,MAAM,GACR,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;CA8BpE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,aAAa,EAAE;IAC1B,CACE,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,QAAQ,CAAC,KAAK,GACvB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACd,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACN,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjB,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,QAAQ,CAAC,KAAK,GACvB,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;CA8DlF,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import * as Cause from "effect/Cause";
|
|
2
|
+
import * as Context from "effect/Context";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Fiber from "effect/Fiber";
|
|
5
|
+
import { dual } from "effect/Function";
|
|
6
|
+
import * as Ref from "effect/Ref";
|
|
7
|
+
import * as Scope from "effect/Scope";
|
|
8
|
+
import { make as makeSink } from "../../Sink/Sink.js";
|
|
9
|
+
import { fail } from "../constructors/fail.js";
|
|
10
|
+
import { make } from "../constructors/make.js";
|
|
11
|
+
import { extendScope } from "../internal/scope.js";
|
|
12
|
+
const isGroupSize = (n) => Number.isSafeInteger(n) && n > 0;
|
|
13
|
+
const invalidGroupSize = () => new Cause.IllegalArgumentError("Group size must be a positive safe integer");
|
|
14
|
+
/**
|
|
15
|
+
* Partitions the stream into non-empty arrays of size `n`. The final array
|
|
16
|
+
* may be smaller if there are leftover elements.
|
|
17
|
+
* The size must be a positive safe integer. A group can retain up to `n`
|
|
18
|
+
* values, so callers own the memory policy for valid sizes. Invalid sizes
|
|
19
|
+
* fail with `Cause.IllegalArgumentError`.
|
|
20
|
+
*
|
|
21
|
+
* Matches Effect `Stream.grouped`.
|
|
22
|
+
*
|
|
23
|
+
* @remarks
|
|
24
|
+
* ## Why
|
|
25
|
+
* `grouped` exposes fixed-size batching without changing source order. Full groups contain exactly
|
|
26
|
+
* `n` values. Because failure is delivered to the Sink while `Fx.run` remains infallible, any
|
|
27
|
+
* partial group is flushed after the source run returns even if a failure was delivered first.
|
|
28
|
+
*
|
|
29
|
+
* ## Ownership and lifetime
|
|
30
|
+
* Each run retains at most `n` values and releases its buffer after the final flush or interruption.
|
|
31
|
+
* Invalid sizes deliver failure before source acquisition. A terminal observer may interrupt before
|
|
32
|
+
* the post-failure flush, but a Sink that handles the Cause can receive the partial group afterward.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* import { Cause, Effect, Ref } from "effect"
|
|
37
|
+
* import { Fx, Sink } from "@typed/fx"
|
|
38
|
+
* const program = Effect.gen(function* () {
|
|
39
|
+
* const deliveries = yield* Ref.make<Array<string>>([])
|
|
40
|
+
* const source = Fx.make<number, string>((sink) =>
|
|
41
|
+
* sink.onSuccess(1).pipe(Effect.andThen(sink.onFailure(Cause.fail("boom"))))
|
|
42
|
+
* )
|
|
43
|
+
* yield* Fx.grouped(source, 2).run(Sink.make(
|
|
44
|
+
* () => Ref.update(deliveries, (xs) => [...xs, "failure"]),
|
|
45
|
+
* (group) => Ref.update(deliveries, (xs) => [...xs, `group:${group.join(",")}`])
|
|
46
|
+
* ))
|
|
47
|
+
* return yield* Ref.get(deliveries) // ["failure", "group:1"]
|
|
48
|
+
* })
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @since 1.0.0
|
|
52
|
+
* @category Stateful transforms
|
|
53
|
+
*/
|
|
54
|
+
export const grouped = dual(2, (self, n) => {
|
|
55
|
+
if (!isGroupSize(n)) {
|
|
56
|
+
return fail(invalidGroupSize());
|
|
57
|
+
}
|
|
58
|
+
const size = n;
|
|
59
|
+
return make((sink) => Effect.gen(function* () {
|
|
60
|
+
const buffer = [];
|
|
61
|
+
yield* self.run(makeSink(sink.onFailure, (a) => {
|
|
62
|
+
buffer.push(a);
|
|
63
|
+
if (buffer.length >= size) {
|
|
64
|
+
const group = buffer.splice(0, size);
|
|
65
|
+
return sink.onSuccess(group);
|
|
66
|
+
}
|
|
67
|
+
return Effect.void;
|
|
68
|
+
}));
|
|
69
|
+
if (buffer.length > 0) {
|
|
70
|
+
yield* sink.onSuccess(buffer);
|
|
71
|
+
}
|
|
72
|
+
}));
|
|
73
|
+
});
|
|
74
|
+
/**
|
|
75
|
+
* Partitions the stream into arrays, emitting when `n` is reached or `duration`
|
|
76
|
+
* elapses after the first element of the current group.
|
|
77
|
+
* The size must be a positive safe integer. A group can retain up to `n`
|
|
78
|
+
* values, so callers own the memory policy for valid sizes. Invalid sizes
|
|
79
|
+
* fail with `Cause.IllegalArgumentError`.
|
|
80
|
+
*
|
|
81
|
+
* Matches Effect `Stream.groupedWithin`.
|
|
82
|
+
*
|
|
83
|
+
* @remarks
|
|
84
|
+
* ## Why
|
|
85
|
+
* `groupedWithin` bounds a batch by both cardinality and time. The timer starts with the first value,
|
|
86
|
+
* and whichever boundary wins emits the ordered non-empty group and resets both buffer and timer.
|
|
87
|
+
* A partial group is also flushed when the source run returns, including after delivered failure.
|
|
88
|
+
*
|
|
89
|
+
* ## Ownership and lifetime
|
|
90
|
+
* Each run retains at most `n` values and at most one timer fiber in the required Scope. A source
|
|
91
|
+
* failure is Sink delivery, so `flushNow` still runs afterward unless the consumer interrupts the
|
|
92
|
+
* run. Flushing or interruption cancels the timer; invalid sizes fail before subscription.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```ts
|
|
96
|
+
* import { Cause, Effect } from "effect"
|
|
97
|
+
* import { Fx, Sink } from "@typed/fx"
|
|
98
|
+
* const source = Fx.make<number, string>((sink) =>
|
|
99
|
+
* sink.onSuccess(1).pipe(Effect.andThen(sink.onFailure(Cause.fail("boom"))))
|
|
100
|
+
* )
|
|
101
|
+
* const program = Fx.groupedWithin(source, 2, "1 hour").run(
|
|
102
|
+
* Sink.make(Effect.logError, (group) => Effect.log(group))
|
|
103
|
+
* ) // logs the failure, then flushes [1]
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* @since 1.0.0
|
|
107
|
+
* @category Time and rate
|
|
108
|
+
*/
|
|
109
|
+
export const groupedWithin = dual(3, (self, n, duration) => {
|
|
110
|
+
if (!isGroupSize(n)) {
|
|
111
|
+
return fail(invalidGroupSize());
|
|
112
|
+
}
|
|
113
|
+
const size = n;
|
|
114
|
+
return make(Effect.fn(function* (sink) {
|
|
115
|
+
const ctx = yield* Effect.context();
|
|
116
|
+
const scope = Context.get(ctx, Scope.Scope);
|
|
117
|
+
const buffer = yield* Ref.make([]);
|
|
118
|
+
const timer = yield* Ref.make(null);
|
|
119
|
+
const clearTimer = Effect.flatMap(Ref.getAndSet(timer, null), (fiber) => fiber ? Fiber.interrupt(fiber) : Effect.void);
|
|
120
|
+
const emitBuffer = Effect.gen(function* () {
|
|
121
|
+
const group = yield* Ref.getAndSet(buffer, []);
|
|
122
|
+
if (group.length > 0) {
|
|
123
|
+
yield* sink.onSuccess(group);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
const flushNow = clearTimer.pipe(Effect.andThen(emitBuffer));
|
|
127
|
+
const flushFromTimer = Ref.set(timer, null).pipe(Effect.andThen(emitBuffer));
|
|
128
|
+
const arm = Effect.flatMap(Effect.forkIn(Effect.sleep(duration).pipe(Effect.andThen(flushFromTimer)), scope, {
|
|
129
|
+
startImmediately: true,
|
|
130
|
+
uninterruptible: false,
|
|
131
|
+
}), (fiber) => Ref.set(timer, fiber));
|
|
132
|
+
yield* self.run(makeSink(sink.onFailure, (a) => Effect.gen(function* () {
|
|
133
|
+
const nextLength = yield* Ref.modify(buffer, (current) => {
|
|
134
|
+
current.push(a);
|
|
135
|
+
return [current.length, current];
|
|
136
|
+
});
|
|
137
|
+
if (nextLength === 1) {
|
|
138
|
+
yield* arm;
|
|
139
|
+
}
|
|
140
|
+
if (nextLength >= size) {
|
|
141
|
+
yield* flushNow;
|
|
142
|
+
}
|
|
143
|
+
})));
|
|
144
|
+
yield* flushNow;
|
|
145
|
+
}, extendScope));
|
|
146
|
+
});
|
|
@@ -1,7 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-exports the complete public Fx combinator vocabulary.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Importing this module performs no work. Each operation remains lazy until its returned `Fx` is
|
|
6
|
+
* run, and its leaf declaration documents cardinality, ordering, state, failure, services, and
|
|
7
|
+
* interruption semantics.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { Fx } from "@typed/fx"
|
|
12
|
+
* import { map, take } from "@typed/fx/Fx"
|
|
13
|
+
*
|
|
14
|
+
* const firstLabel = Fx.fromIterable([1, 2]).pipe(map(String), take(1))
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
* @category combinators
|
|
19
|
+
*/
|
|
1
20
|
export * from "./catch.js";
|
|
21
|
+
export * from "./changesWithEffect.js";
|
|
2
22
|
export * from "./causes.js";
|
|
3
23
|
export * from "./compact.js";
|
|
24
|
+
export * from "./concatMap.js";
|
|
4
25
|
export * from "./continueWith.js";
|
|
26
|
+
export * from "./dropUntil.js";
|
|
27
|
+
export * from "./debounce.js";
|
|
28
|
+
export * from "./delay.js";
|
|
29
|
+
export * from "./during.js";
|
|
30
|
+
export * from "./additive.js";
|
|
5
31
|
export * from "./ensuring.js";
|
|
6
32
|
export * from "./exhaustLatestMap.js";
|
|
7
33
|
export * from "./exhaustLatestMapEffect.js";
|
|
@@ -23,30 +49,49 @@ export * from "./flatMapEffect.js";
|
|
|
23
49
|
export * from "./flip.js";
|
|
24
50
|
export * from "./gen.js";
|
|
25
51
|
export * from "./genScoped.js";
|
|
52
|
+
export * from "./grouped.js";
|
|
26
53
|
export * from "./keyed.js";
|
|
27
54
|
export * from "./loop.js";
|
|
28
55
|
export * from "./loopCause.js";
|
|
29
56
|
export * from "./loopCauseEffect.js";
|
|
30
57
|
export * from "./loopEffect.js";
|
|
31
58
|
export * from "./map.js";
|
|
59
|
+
export * from "./mapBoth.js";
|
|
32
60
|
export * from "./mapEffect.js";
|
|
61
|
+
export * from "./mapError.js";
|
|
33
62
|
export * from "./mergeAll.js";
|
|
34
63
|
export * from "./mergeOrdered.js";
|
|
35
64
|
export * from "./onError.js";
|
|
36
65
|
export * from "./onExit.js";
|
|
37
66
|
export * from "./onInterrupt.js";
|
|
67
|
+
export * from "./pairwise.js";
|
|
38
68
|
export * from "./provide.js";
|
|
69
|
+
export * from "./race.js";
|
|
70
|
+
export * from "./repeat.js";
|
|
71
|
+
export * from "./result.js";
|
|
72
|
+
export * from "./retry.js";
|
|
73
|
+
export * from "./sample.js";
|
|
74
|
+
export * from "./scan.js";
|
|
39
75
|
export * from "./skip.js";
|
|
40
76
|
export * from "./skipRepeats.js";
|
|
77
|
+
export * from "./skipWhile.js";
|
|
41
78
|
export * from "./skipRepeatsWith.js";
|
|
42
79
|
export * from "./slice.js";
|
|
80
|
+
export * from "./since.js";
|
|
43
81
|
export * from "./switchMap.js";
|
|
44
82
|
export * from "./switchMapEffect.js";
|
|
45
83
|
export * from "./take.js";
|
|
46
84
|
export * from "./takeUntil.js";
|
|
85
|
+
export * from "./takeWhile.js";
|
|
47
86
|
export * from "./tapEffect.js";
|
|
87
|
+
export * from "./throttle.js";
|
|
88
|
+
export * from "./timeout.js";
|
|
48
89
|
export * from "./tuple.js";
|
|
90
|
+
export * from "./until.js";
|
|
49
91
|
export * from "./unwrap.js";
|
|
50
92
|
export * from "./unwrapScoped.js";
|
|
51
93
|
export * from "./when.js";
|
|
94
|
+
export * from "./withLatestFrom.js";
|
|
95
|
+
export * from "./withSpan.js";
|
|
96
|
+
export * from "./zip.js";
|
|
52
97
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
|