@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,14 +1,93 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
2
|
import * as Fiber from "effect/Fiber";
|
|
3
|
-
|
|
3
|
+
import { EffectableWithOverride } from "./effectableWithOverride.js";
|
|
4
|
+
/** An Effect-compatible wrapper that joins the currently recorded detached execution.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* ## Why
|
|
8
|
+
*
|
|
9
|
+
* Some sampled state computations are expensive but may be requested concurrently. The wrapper
|
|
10
|
+
* lets later callers join the same in-flight fiber, preserving one result, typed failure, and Cause
|
|
11
|
+
* for that run. After completion the recorded fiber is cleared and a later call starts fresh work.
|
|
12
|
+
*
|
|
13
|
+
* ## Ownership and lifetime
|
|
14
|
+
*
|
|
15
|
+
* The first caller starts `effect` in a detached fiber using that caller's services. Interrupting a
|
|
16
|
+
* joining caller stops only its wait; the detached computation continues until completion or an
|
|
17
|
+
* explicit `interrupt`. A directly constructed instance has no automatic finalizer. Prefer
|
|
18
|
+
* `makeMulticastEffect` when a Scope should interrupt remaining work.
|
|
19
|
+
*
|
|
20
|
+
* ## Concurrency and interruption
|
|
21
|
+
*
|
|
22
|
+
* Calls made after `_fiber` is recorded join that fiber. Recording uses mutable instance state
|
|
23
|
+
* rather than a semaphore, so this is a low-level primitive whose callers must not assume a stronger
|
|
24
|
+
* atomic-start guarantee than the implementation provides. Completion or explicit interruption
|
|
25
|
+
* clears the matching record; all joiners observe the fiber's exact success, typed error, defect,
|
|
26
|
+
* or interruption.
|
|
27
|
+
*
|
|
28
|
+
* This path is published for advanced state implementations and may change between prereleases.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* import { MulticastEffect } from "@typed/fx/Fx/internal/multicast"
|
|
33
|
+
* import * as Effect from "effect/Effect"
|
|
34
|
+
*
|
|
35
|
+
* const sharedWhileRunning = new MulticastEffect(Effect.succeed("ready"))
|
|
36
|
+
* const value = Effect.runSync(sharedWhileRunning)
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @since 1.0.0
|
|
40
|
+
* @category advanced
|
|
41
|
+
* @stability internal-but-published
|
|
42
|
+
*/
|
|
43
|
+
export class MulticastEffect extends EffectableWithOverride {
|
|
4
44
|
_fiber = null;
|
|
45
|
+
/** Underlying computation started when no recorded fiber is running.
|
|
46
|
+
*
|
|
47
|
+
* @remarks
|
|
48
|
+
* ## Why
|
|
49
|
+
*
|
|
50
|
+
* Keeping the source Effect visible lets advanced implementations inspect or compose the exact
|
|
51
|
+
* work whose in-flight execution is shared.
|
|
52
|
+
*
|
|
53
|
+
* ## Ownership and lifetime
|
|
54
|
+
*
|
|
55
|
+
* The wrapper retains this immutable Effect description; resources begin only when it is run.
|
|
56
|
+
*
|
|
57
|
+
* @since 1.0.0
|
|
58
|
+
* @category effects
|
|
59
|
+
*/
|
|
5
60
|
effect;
|
|
61
|
+
/** Creates a wrapper without attaching its future detached fiber to a Scope.
|
|
62
|
+
*
|
|
63
|
+
* @remarks
|
|
64
|
+
* ## Why
|
|
65
|
+
*
|
|
66
|
+
* Direct construction supports owners such as Versioned that already expose an explicit
|
|
67
|
+
* interruption boundary and do not need acquisition itself to require Scope.
|
|
68
|
+
*
|
|
69
|
+
* ## Ownership and lifetime
|
|
70
|
+
*
|
|
71
|
+
* Construction retains only the Effect description and starts no work. The first evaluation may
|
|
72
|
+
* start a detached fiber, which remains this instance's responsibility until it completes or
|
|
73
|
+
* `interrupt` is run. Use `makeMulticastEffect` when Scope closure should provide that cleanup.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```ts
|
|
77
|
+
* import { MulticastEffect } from "@typed/fx/Fx/internal/multicast"
|
|
78
|
+
* import * as Effect from "effect/Effect"
|
|
79
|
+
*
|
|
80
|
+
* const shared = new MulticastEffect(Effect.succeed("ready"))
|
|
81
|
+
* const result = Effect.runSync(shared)
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @since 1.0.0
|
|
85
|
+
* @category constructors
|
|
86
|
+
*/
|
|
6
87
|
constructor(effect) {
|
|
7
88
|
super();
|
|
8
89
|
this.effect = effect;
|
|
9
|
-
|
|
10
|
-
asEffect() {
|
|
11
|
-
return Effect.suspend(() => {
|
|
90
|
+
this.override = Effect.suspend(() => {
|
|
12
91
|
if (this._fiber) {
|
|
13
92
|
return Fiber.join(this._fiber);
|
|
14
93
|
}
|
|
@@ -17,6 +96,38 @@ export class MulticastEffect extends Effect.YieldableClass {
|
|
|
17
96
|
}
|
|
18
97
|
});
|
|
19
98
|
}
|
|
99
|
+
/** Effect view that joins the recorded fiber or starts and records a detached one.
|
|
100
|
+
*
|
|
101
|
+
* @remarks
|
|
102
|
+
* ## Why
|
|
103
|
+
*
|
|
104
|
+
* Effect evaluation is the common entry point through which concurrent callers share work.
|
|
105
|
+
*
|
|
106
|
+
* ## Ownership and lifetime
|
|
107
|
+
*
|
|
108
|
+
* A newly started fiber is detached from the joining caller and remains recorded until completion
|
|
109
|
+
* or explicit interruption.
|
|
110
|
+
*
|
|
111
|
+
* @since 1.0.0
|
|
112
|
+
* @category effects
|
|
113
|
+
*/
|
|
114
|
+
override;
|
|
115
|
+
/** Interrupts the currently recorded fiber as the calling fiber and clears the record.
|
|
116
|
+
*
|
|
117
|
+
* @remarks
|
|
118
|
+
* ## Why
|
|
119
|
+
*
|
|
120
|
+
* If no fiber is recorded, the Effect succeeds immediately. Interruption of the child is awaited,
|
|
121
|
+
* and cleanup clears the field even when interruption observation itself is interrupted.
|
|
122
|
+
*
|
|
123
|
+
* ## Ownership and lifetime
|
|
124
|
+
*
|
|
125
|
+
* The Effect owns only this interruption action; it does not prevent a later execution from
|
|
126
|
+
* starting a fresh fiber.
|
|
127
|
+
*
|
|
128
|
+
* @since 1.0.0
|
|
129
|
+
* @category lifecycle
|
|
130
|
+
*/
|
|
20
131
|
interrupt() {
|
|
21
132
|
return Effect.withFiber((fiber) => {
|
|
22
133
|
if (this._fiber) {
|
|
@@ -29,4 +140,35 @@ export class MulticastEffect extends Effect.YieldableClass {
|
|
|
29
140
|
});
|
|
30
141
|
}
|
|
31
142
|
}
|
|
143
|
+
/** Acquires a scoped `MulticastEffect` whose finalizer interrupts recorded work.
|
|
144
|
+
*
|
|
145
|
+
* @remarks
|
|
146
|
+
* ## Why
|
|
147
|
+
*
|
|
148
|
+
* The scoped constructor makes the detached-fiber lifetime explicit and prevents a computation
|
|
149
|
+
* from surviving the application lifetime that requested sharing.
|
|
150
|
+
*
|
|
151
|
+
* ## Ownership and lifetime
|
|
152
|
+
*
|
|
153
|
+
* Acquisition allocates the wrapper but does not start `effect`. The first execution starts work;
|
|
154
|
+
* closing the required Scope calls `interrupt` and waits for the recorded fiber to terminate. The
|
|
155
|
+
* original effect's `E` and `R` channels are preserved when the wrapper is executed.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```ts
|
|
159
|
+
* import { makeMulticastEffect } from "@typed/fx/Fx/internal/multicast"
|
|
160
|
+
* import * as Effect from "effect/Effect"
|
|
161
|
+
*
|
|
162
|
+
* const program = Effect.gen(function* () {
|
|
163
|
+
* const shared = yield* makeMulticastEffect(Effect.succeed("ready"))
|
|
164
|
+
* return yield* shared
|
|
165
|
+
* })
|
|
166
|
+
*
|
|
167
|
+
* Effect.runSync(Effect.scoped(program))
|
|
168
|
+
* ```
|
|
169
|
+
*
|
|
170
|
+
* @since 1.0.0
|
|
171
|
+
* @category constructors
|
|
172
|
+
* @stability internal-but-published
|
|
173
|
+
*/
|
|
32
174
|
export const makeMulticastEffect = (effect) => Effect.acquireRelease(Effect.sync(() => new MulticastEffect(effect)), (multicastEffect) => multicastEffect.interrupt());
|
|
@@ -1,14 +1,163 @@
|
|
|
1
1
|
import { type Effect } from "effect/Effect";
|
|
2
|
+
/** A fixed-capacity FIFO buffer that overwrites its oldest value when full.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* ## Why
|
|
6
|
+
*
|
|
7
|
+
* Replay subjects need bounded history with O(1) append cost and deterministic oldest-to-newest
|
|
8
|
+
* replay, without shifting an array on every publication.
|
|
9
|
+
*
|
|
10
|
+
* ## Ownership and lifetime
|
|
11
|
+
*
|
|
12
|
+
* The instance exclusively owns an array of `capacity` slots and retains at most that many values.
|
|
13
|
+
* It acquires no Scope. `clear` replaces the backing array so retained values can be collected;
|
|
14
|
+
* callers decide when that cleanup occurs.
|
|
15
|
+
*
|
|
16
|
+
* ## Errors and complexity
|
|
17
|
+
*
|
|
18
|
+
* Construction throws `Cause.IllegalArgumentError` synchronously unless capacity is an integer from
|
|
19
|
+
* 1 through 4,294,967,295. `push`, `size`, and indexed access are O(1). `forEach` builds and executes
|
|
20
|
+
* an O(size) sequential Effect chain. This published implementation utility may change between
|
|
21
|
+
* prereleases.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* import { RingBuffer } from "@typed/fx/Fx/internal/ring-buffer"
|
|
26
|
+
* import * as Effect from "effect/Effect"
|
|
27
|
+
*
|
|
28
|
+
* const buffer = new RingBuffer<number>(2)
|
|
29
|
+
* buffer.push(1)
|
|
30
|
+
* buffer.push(2)
|
|
31
|
+
* buffer.push(3)
|
|
32
|
+
* Effect.runSync(buffer.forEach((value) => Effect.sync(() => console.log(value)))) // 2, 3
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @since 1.0.0
|
|
36
|
+
* @category advanced
|
|
37
|
+
* @stability internal-but-published
|
|
38
|
+
*/
|
|
2
39
|
export declare class RingBuffer<A> {
|
|
40
|
+
/** Maximum number of values retained by this buffer.
|
|
41
|
+
*
|
|
42
|
+
* @remarks
|
|
43
|
+
* ## Why
|
|
44
|
+
*
|
|
45
|
+
* A fixed bound makes replay retention and overwrite behavior predictable.
|
|
46
|
+
*
|
|
47
|
+
* ## Ownership and lifetime
|
|
48
|
+
*
|
|
49
|
+
* Immutable scalar metadata retained for the instance lifetime.
|
|
50
|
+
*
|
|
51
|
+
* @since 1.0.0
|
|
52
|
+
* @category state
|
|
53
|
+
*/
|
|
3
54
|
readonly capacity: number;
|
|
55
|
+
/** Allocates an empty backing array for a validated capacity.
|
|
56
|
+
*
|
|
57
|
+
* @remarks
|
|
58
|
+
* ## Why
|
|
59
|
+
*
|
|
60
|
+
* Validating at the allocation boundary prevents modulo-by-zero behavior, impossible array
|
|
61
|
+
* lengths, and an unbounded replay contract before any value can be retained.
|
|
62
|
+
*
|
|
63
|
+
* ## Ownership and lifetime
|
|
64
|
+
*
|
|
65
|
+
* Construction allocates and exclusively owns one sparse array of `capacity` slots. No Scope or
|
|
66
|
+
* Effect is acquired. Invalid capacity is thrown synchronously as `Cause.IllegalArgumentError`,
|
|
67
|
+
* not returned through an Effect error channel.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* import { RingBuffer } from "@typed/fx/Fx/internal/ring-buffer"
|
|
72
|
+
* import * as Cause from "effect/Cause"
|
|
73
|
+
*
|
|
74
|
+
* const buffer = new RingBuffer<string>(2)
|
|
75
|
+
* buffer.capacity // 2
|
|
76
|
+
*
|
|
77
|
+
* try {
|
|
78
|
+
* new RingBuffer(0)
|
|
79
|
+
* } catch (error) {
|
|
80
|
+
* Cause.isIllegalArgumentError(error) // true
|
|
81
|
+
* }
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @since 1.0.0
|
|
85
|
+
* @category constructors
|
|
86
|
+
*/
|
|
4
87
|
constructor(capacity: number);
|
|
5
88
|
private _buffer;
|
|
6
89
|
private _size;
|
|
7
90
|
private _head;
|
|
91
|
+
/** Current number of retained values, from zero through `capacity`.
|
|
92
|
+
*
|
|
93
|
+
* @remarks
|
|
94
|
+
* ## Why
|
|
95
|
+
*
|
|
96
|
+
* Callers can inspect occupancy without exposing backing-array indices.
|
|
97
|
+
*
|
|
98
|
+
* ## Ownership and lifetime
|
|
99
|
+
*
|
|
100
|
+
* Reading the counter is O(1) and acquires no resources.
|
|
101
|
+
*
|
|
102
|
+
* @since 1.0.0
|
|
103
|
+
* @category state
|
|
104
|
+
*/
|
|
8
105
|
get size(): number;
|
|
106
|
+
/** Appends one value, overwriting the oldest value when the buffer is full.
|
|
107
|
+
*
|
|
108
|
+
* @remarks
|
|
109
|
+
* ## Why
|
|
110
|
+
*
|
|
111
|
+
* The operation mutates this buffer in O(1) time and performs no Effect or cleanup action.
|
|
112
|
+
*
|
|
113
|
+
* ## Ownership and lifetime
|
|
114
|
+
*
|
|
115
|
+
* The buffer retains `a` until overwrite, `clear`, or collection; an overwritten value is released.
|
|
116
|
+
*
|
|
117
|
+
* @since 1.0.0
|
|
118
|
+
* @category mutations
|
|
119
|
+
*/
|
|
9
120
|
push(a: A): void;
|
|
10
121
|
private at;
|
|
122
|
+
/** Runs an Effect for each retained value in oldest-to-newest order.
|
|
123
|
+
*
|
|
124
|
+
* @remarks
|
|
125
|
+
* ## Why
|
|
126
|
+
*
|
|
127
|
+
* Effects are sequenced with `flatMap`; failure, defect, or interruption stops later values. The
|
|
128
|
+
* callback receives a zero-based replay index rather than the backing-array index. The method
|
|
129
|
+
* preserves callback errors and services and does not clear the buffer.
|
|
130
|
+
*
|
|
131
|
+
* `_size` and the first callback invocation are captured eagerly when `forEach` is called. For
|
|
132
|
+
* sizes greater than one, later slots are read and their callbacks are invoked lazily as the
|
|
133
|
+
* returned Effect executes. This is deliberately not a snapshot: mutating or clearing the buffer
|
|
134
|
+
* between construction and execution can combine the earlier first Effect with later values from
|
|
135
|
+
* the mutated buffer. Callers that require one coherent replay must not mutate the buffer until
|
|
136
|
+
* the Effect completes.
|
|
137
|
+
*
|
|
138
|
+
* ## Ownership and lifetime
|
|
139
|
+
*
|
|
140
|
+
* The returned Effect borrows the current retained values while executing and owns no additional
|
|
141
|
+
* lifetime after completion.
|
|
142
|
+
*
|
|
143
|
+
* @since 1.0.0
|
|
144
|
+
* @category effects
|
|
145
|
+
*/
|
|
11
146
|
forEach<B, E2, R2>(f: (a: A, i: number) => Effect<B, E2, R2>): Effect<unknown, E2, R2>;
|
|
147
|
+
/** Drops all retained values and resets insertion to the start of a fresh backing array.
|
|
148
|
+
*
|
|
149
|
+
* @remarks
|
|
150
|
+
* ## Why
|
|
151
|
+
*
|
|
152
|
+
* Capacity is unchanged. The operation acquires no Scope and runs synchronously.
|
|
153
|
+
*
|
|
154
|
+
* ## Ownership and lifetime
|
|
155
|
+
*
|
|
156
|
+
* Replacing the array releases every retained value from this instance at once.
|
|
157
|
+
*
|
|
158
|
+
* @since 1.0.0
|
|
159
|
+
* @category mutations
|
|
160
|
+
*/
|
|
12
161
|
clear(): void;
|
|
13
162
|
}
|
|
14
163
|
//# sourceMappingURL=ring-buffer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ring-buffer.d.ts","sourceRoot":"","sources":["../../../src/Fx/internal/ring-buffer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ring-buffer.d.ts","sourceRoot":"","sources":["../../../src/Fx/internal/ring-buffer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAA0B,MAAM,eAAe,CAAC;AAMpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,UAAU,CAAC,CAAC;IACvB;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,YAAY,QAAQ,EAAE,MAAM,EAM3B;IAED,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAK;IAElB;;;;;;;;;;;;;OAaG;IACH,IAAI,IAAI,WAEP;IAED;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,CAAC,EAAE,CAAC,QAMR;IAED,OAAO,CAAC,EAAE;IAOV;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,2BAmB3D;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,SAIJ;CACF"}
|
|
@@ -1,16 +1,133 @@
|
|
|
1
|
+
import * as Cause from "effect/Cause";
|
|
1
2
|
import { flatMap, void as void_ } from "effect/Effect";
|
|
3
|
+
const MAX_ARRAY_LENGTH = 4294967295;
|
|
4
|
+
const INVALID_CAPACITY_MESSAGE = "Ring buffer capacity must be an integer from 1 through 4294967295";
|
|
5
|
+
/** A fixed-capacity FIFO buffer that overwrites its oldest value when full.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* ## Why
|
|
9
|
+
*
|
|
10
|
+
* Replay subjects need bounded history with O(1) append cost and deterministic oldest-to-newest
|
|
11
|
+
* replay, without shifting an array on every publication.
|
|
12
|
+
*
|
|
13
|
+
* ## Ownership and lifetime
|
|
14
|
+
*
|
|
15
|
+
* The instance exclusively owns an array of `capacity` slots and retains at most that many values.
|
|
16
|
+
* It acquires no Scope. `clear` replaces the backing array so retained values can be collected;
|
|
17
|
+
* callers decide when that cleanup occurs.
|
|
18
|
+
*
|
|
19
|
+
* ## Errors and complexity
|
|
20
|
+
*
|
|
21
|
+
* Construction throws `Cause.IllegalArgumentError` synchronously unless capacity is an integer from
|
|
22
|
+
* 1 through 4,294,967,295. `push`, `size`, and indexed access are O(1). `forEach` builds and executes
|
|
23
|
+
* an O(size) sequential Effect chain. This published implementation utility may change between
|
|
24
|
+
* prereleases.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { RingBuffer } from "@typed/fx/Fx/internal/ring-buffer"
|
|
29
|
+
* import * as Effect from "effect/Effect"
|
|
30
|
+
*
|
|
31
|
+
* const buffer = new RingBuffer<number>(2)
|
|
32
|
+
* buffer.push(1)
|
|
33
|
+
* buffer.push(2)
|
|
34
|
+
* buffer.push(3)
|
|
35
|
+
* Effect.runSync(buffer.forEach((value) => Effect.sync(() => console.log(value)))) // 2, 3
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @since 1.0.0
|
|
39
|
+
* @category advanced
|
|
40
|
+
* @stability internal-but-published
|
|
41
|
+
*/
|
|
2
42
|
export class RingBuffer {
|
|
43
|
+
/** Maximum number of values retained by this buffer.
|
|
44
|
+
*
|
|
45
|
+
* @remarks
|
|
46
|
+
* ## Why
|
|
47
|
+
*
|
|
48
|
+
* A fixed bound makes replay retention and overwrite behavior predictable.
|
|
49
|
+
*
|
|
50
|
+
* ## Ownership and lifetime
|
|
51
|
+
*
|
|
52
|
+
* Immutable scalar metadata retained for the instance lifetime.
|
|
53
|
+
*
|
|
54
|
+
* @since 1.0.0
|
|
55
|
+
* @category state
|
|
56
|
+
*/
|
|
3
57
|
capacity;
|
|
58
|
+
/** Allocates an empty backing array for a validated capacity.
|
|
59
|
+
*
|
|
60
|
+
* @remarks
|
|
61
|
+
* ## Why
|
|
62
|
+
*
|
|
63
|
+
* Validating at the allocation boundary prevents modulo-by-zero behavior, impossible array
|
|
64
|
+
* lengths, and an unbounded replay contract before any value can be retained.
|
|
65
|
+
*
|
|
66
|
+
* ## Ownership and lifetime
|
|
67
|
+
*
|
|
68
|
+
* Construction allocates and exclusively owns one sparse array of `capacity` slots. No Scope or
|
|
69
|
+
* Effect is acquired. Invalid capacity is thrown synchronously as `Cause.IllegalArgumentError`,
|
|
70
|
+
* not returned through an Effect error channel.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* import { RingBuffer } from "@typed/fx/Fx/internal/ring-buffer"
|
|
75
|
+
* import * as Cause from "effect/Cause"
|
|
76
|
+
*
|
|
77
|
+
* const buffer = new RingBuffer<string>(2)
|
|
78
|
+
* buffer.capacity // 2
|
|
79
|
+
*
|
|
80
|
+
* try {
|
|
81
|
+
* new RingBuffer(0)
|
|
82
|
+
* } catch (error) {
|
|
83
|
+
* Cause.isIllegalArgumentError(error) // true
|
|
84
|
+
* }
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @since 1.0.0
|
|
88
|
+
* @category constructors
|
|
89
|
+
*/
|
|
4
90
|
constructor(capacity) {
|
|
91
|
+
if (!Number.isInteger(capacity) || capacity < 1 || capacity > MAX_ARRAY_LENGTH) {
|
|
92
|
+
throw new Cause.IllegalArgumentError(INVALID_CAPACITY_MESSAGE);
|
|
93
|
+
}
|
|
5
94
|
this.capacity = capacity;
|
|
6
95
|
this._buffer = Array(this.capacity);
|
|
7
96
|
}
|
|
8
97
|
_buffer;
|
|
9
98
|
_size = 0;
|
|
10
99
|
_head = 0;
|
|
100
|
+
/** Current number of retained values, from zero through `capacity`.
|
|
101
|
+
*
|
|
102
|
+
* @remarks
|
|
103
|
+
* ## Why
|
|
104
|
+
*
|
|
105
|
+
* Callers can inspect occupancy without exposing backing-array indices.
|
|
106
|
+
*
|
|
107
|
+
* ## Ownership and lifetime
|
|
108
|
+
*
|
|
109
|
+
* Reading the counter is O(1) and acquires no resources.
|
|
110
|
+
*
|
|
111
|
+
* @since 1.0.0
|
|
112
|
+
* @category state
|
|
113
|
+
*/
|
|
11
114
|
get size() {
|
|
12
115
|
return this._size;
|
|
13
116
|
}
|
|
117
|
+
/** Appends one value, overwriting the oldest value when the buffer is full.
|
|
118
|
+
*
|
|
119
|
+
* @remarks
|
|
120
|
+
* ## Why
|
|
121
|
+
*
|
|
122
|
+
* The operation mutates this buffer in O(1) time and performs no Effect or cleanup action.
|
|
123
|
+
*
|
|
124
|
+
* ## Ownership and lifetime
|
|
125
|
+
*
|
|
126
|
+
* The buffer retains `a` until overwrite, `clear`, or collection; an overwritten value is released.
|
|
127
|
+
*
|
|
128
|
+
* @since 1.0.0
|
|
129
|
+
* @category mutations
|
|
130
|
+
*/
|
|
14
131
|
push(a) {
|
|
15
132
|
this._buffer[this._head] = a;
|
|
16
133
|
this._head = (this._head + 1) % this.capacity;
|
|
@@ -24,6 +141,30 @@ export class RingBuffer {
|
|
|
24
141
|
}
|
|
25
142
|
return this._buffer[(this._head + index) % this.capacity];
|
|
26
143
|
}
|
|
144
|
+
/** Runs an Effect for each retained value in oldest-to-newest order.
|
|
145
|
+
*
|
|
146
|
+
* @remarks
|
|
147
|
+
* ## Why
|
|
148
|
+
*
|
|
149
|
+
* Effects are sequenced with `flatMap`; failure, defect, or interruption stops later values. The
|
|
150
|
+
* callback receives a zero-based replay index rather than the backing-array index. The method
|
|
151
|
+
* preserves callback errors and services and does not clear the buffer.
|
|
152
|
+
*
|
|
153
|
+
* `_size` and the first callback invocation are captured eagerly when `forEach` is called. For
|
|
154
|
+
* sizes greater than one, later slots are read and their callbacks are invoked lazily as the
|
|
155
|
+
* returned Effect executes. This is deliberately not a snapshot: mutating or clearing the buffer
|
|
156
|
+
* between construction and execution can combine the earlier first Effect with later values from
|
|
157
|
+
* the mutated buffer. Callers that require one coherent replay must not mutate the buffer until
|
|
158
|
+
* the Effect completes.
|
|
159
|
+
*
|
|
160
|
+
* ## Ownership and lifetime
|
|
161
|
+
*
|
|
162
|
+
* The returned Effect borrows the current retained values while executing and owns no additional
|
|
163
|
+
* lifetime after completion.
|
|
164
|
+
*
|
|
165
|
+
* @since 1.0.0
|
|
166
|
+
* @category effects
|
|
167
|
+
*/
|
|
27
168
|
forEach(f) {
|
|
28
169
|
switch (this._size) {
|
|
29
170
|
case 0:
|
|
@@ -44,6 +185,20 @@ export class RingBuffer {
|
|
|
44
185
|
}
|
|
45
186
|
}
|
|
46
187
|
}
|
|
188
|
+
/** Drops all retained values and resets insertion to the start of a fresh backing array.
|
|
189
|
+
*
|
|
190
|
+
* @remarks
|
|
191
|
+
* ## Why
|
|
192
|
+
*
|
|
193
|
+
* Capacity is unchanged. The operation acquires no Scope and runs synchronously.
|
|
194
|
+
*
|
|
195
|
+
* ## Ownership and lifetime
|
|
196
|
+
*
|
|
197
|
+
* Replacing the array releases every retained value from this instance at once.
|
|
198
|
+
*
|
|
199
|
+
* @since 1.0.0
|
|
200
|
+
* @category mutations
|
|
201
|
+
*/
|
|
47
202
|
clear() {
|
|
48
203
|
this._buffer = Array(this.capacity);
|
|
49
204
|
this._size = 0;
|