@typed/fx 0.0.4 → 0.0.8
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/.eslintcache +1 -1
- package/cjs/Cause/Cause.d.ts +10 -0
- package/cjs/Cause/Cause.d.ts.map +1 -1
- package/cjs/Cause/Cause.js +37 -2
- package/cjs/Cause/Cause.js.map +1 -1
- package/cjs/Cause/Renderer.js +1 -1
- package/cjs/Cause/Renderer.js.map +1 -1
- package/cjs/Env/Env.d.ts +9 -1
- package/cjs/Env/Env.d.ts.map +1 -1
- package/cjs/Env/Env.js +32 -5
- package/cjs/Env/Env.js.map +1 -1
- package/cjs/Fiber/fromScope.d.ts +5 -0
- package/cjs/Fiber/fromScope.d.ts.map +1 -0
- package/cjs/Fiber/fromScope.js +17 -0
- package/cjs/Fiber/fromScope.js.map +1 -0
- package/cjs/FiberRef/builtins.d.ts +4 -1
- package/cjs/FiberRef/builtins.d.ts.map +1 -1
- package/cjs/FiberRef/builtins.js +40 -13
- package/cjs/FiberRef/builtins.js.map +1 -1
- package/cjs/FiberRuntime/FiberRuntime.d.ts.map +1 -1
- package/cjs/FiberRuntime/FiberRuntime.js +23 -14
- package/cjs/FiberRuntime/FiberRuntime.js.map +1 -1
- package/cjs/Fx/Fx.d.ts +4 -3
- package/cjs/Fx/Fx.d.ts.map +1 -1
- package/cjs/Fx/Fx.js +25 -24
- package/cjs/Fx/Fx.js.map +1 -1
- package/cjs/Fx/join.d.ts +1 -1
- package/cjs/Fx/join.d.ts.map +1 -1
- package/cjs/Fx/join.js +1 -1
- package/cjs/Fx/join.js.map +1 -1
- package/cjs/Schedule/ScheduleState.d.ts +3 -0
- package/cjs/Schedule/ScheduleState.d.ts.map +1 -1
- package/cjs/Schedule/ScheduleState.js +3 -0
- package/cjs/Schedule/ScheduleState.js.map +1 -1
- package/cjs/Scheduler/RootScheduler.d.ts.map +1 -1
- package/cjs/Scheduler/RootScheduler.js +4 -5
- package/cjs/Scheduler/RootScheduler.js.map +1 -1
- package/cjs/Scheduler/Scheduler.d.ts +2 -2
- package/cjs/Scheduler/Scheduler.d.ts.map +1 -1
- package/cjs/Scheduler/Scheduler.js.map +1 -1
- package/cjs/Scheduler/callbackScheduler.d.ts.map +1 -1
- package/cjs/Scheduler/callbackScheduler.js +1 -0
- package/cjs/Scheduler/callbackScheduler.js.map +1 -1
- package/cjs/Scheduler/runSchedule.d.ts +1 -1
- package/cjs/Scheduler/runSchedule.d.ts.map +1 -1
- package/cjs/Scheduler/runSchedule.js +3 -2
- package/cjs/Scheduler/runSchedule.js.map +1 -1
- package/cjs/Scope/LocalScope.d.ts.map +1 -1
- package/cjs/Scope/LocalScope.js +8 -8
- package/cjs/Scope/LocalScope.js.map +1 -1
- package/cjs/Semaphore/Semaphore.d.ts +9 -9
- package/cjs/Semaphore/Semaphore.d.ts.map +1 -1
- package/cjs/Semaphore/Semaphore.js +34 -15
- package/cjs/Semaphore/Semaphore.js.map +1 -1
- package/cjs/Sink/Sink.d.ts +1 -0
- package/cjs/Sink/Sink.d.ts.map +1 -1
- package/cjs/Sink/Sink.js +11 -1
- package/cjs/Sink/Sink.js.map +1 -1
- package/cjs/Stream/Stream.d.ts +5 -14
- package/cjs/Stream/Stream.d.ts.map +1 -1
- package/cjs/Stream/Stream.js.map +1 -1
- package/cjs/Stream/acquirePermit.d.ts +15 -0
- package/cjs/Stream/acquirePermit.d.ts.map +1 -0
- package/cjs/Stream/acquirePermit.js +43 -0
- package/cjs/Stream/acquirePermit.js.map +1 -0
- package/cjs/Stream/bimap.d.ts +33 -4
- package/cjs/Stream/bimap.d.ts.map +1 -1
- package/cjs/Stream/bimap.js +109 -12
- package/cjs/Stream/bimap.js.map +1 -1
- package/cjs/Stream/continueWith.d.ts +4 -3
- package/cjs/Stream/continueWith.d.ts.map +1 -1
- package/cjs/Stream/continueWith.js +9 -6
- package/cjs/Stream/continueWith.js.map +1 -1
- package/cjs/Stream/delay.d.ts +4 -0
- package/cjs/Stream/delay.d.ts.map +1 -0
- package/cjs/Stream/delay.js +30 -0
- package/cjs/Stream/delay.js.map +1 -0
- package/cjs/Stream/drain.d.ts +2 -2
- package/cjs/Stream/drain.d.ts.map +1 -1
- package/cjs/Stream/drain.js +5 -5
- package/cjs/Stream/drain.js.map +1 -1
- package/cjs/Stream/empty.d.ts.map +1 -1
- package/cjs/Stream/empty.js +1 -2
- package/cjs/Stream/empty.js.map +1 -1
- package/cjs/Stream/flatMap.d.ts +7 -5
- package/cjs/Stream/flatMap.d.ts.map +1 -1
- package/cjs/Stream/flatMap.js +33 -19
- package/cjs/Stream/flatMap.js.map +1 -1
- package/cjs/Stream/flatMapConcurrently.d.ts +6 -0
- package/cjs/Stream/flatMapConcurrently.d.ts.map +1 -0
- package/cjs/Stream/flatMapConcurrently.js +25 -0
- package/cjs/Stream/flatMapConcurrently.js.map +1 -0
- package/cjs/Stream/flatMapFx.d.ts +5 -1
- package/cjs/Stream/flatMapFx.d.ts.map +1 -1
- package/cjs/Stream/flatMapFx.js +18 -3
- package/cjs/Stream/flatMapFx.js.map +1 -1
- package/cjs/Stream/foldMap.d.ts +11 -0
- package/cjs/Stream/foldMap.d.ts.map +1 -0
- package/cjs/Stream/foldMap.js +67 -0
- package/cjs/Stream/foldMap.js.map +1 -0
- package/cjs/Stream/fromArray.d.ts +2 -0
- package/cjs/Stream/fromArray.d.ts.map +1 -0
- package/cjs/Stream/fromArray.js +12 -0
- package/cjs/Stream/fromArray.js.map +1 -0
- package/cjs/Stream/fromCallback.d.ts +4 -3
- package/cjs/Stream/fromCallback.d.ts.map +1 -1
- package/cjs/Stream/fromCallback.js +26 -26
- package/cjs/Stream/fromCallback.js.map +1 -1
- package/cjs/Stream/fromFx.d.ts +23 -8
- package/cjs/Stream/fromFx.d.ts.map +1 -1
- package/cjs/Stream/fromFx.js +36 -16
- package/cjs/Stream/fromFx.js.map +1 -1
- package/cjs/Stream/hkt.d.ts +24 -1
- package/cjs/Stream/hkt.d.ts.map +1 -1
- package/cjs/Stream/hkt.js +43 -5
- package/cjs/Stream/hkt.js.map +1 -1
- package/cjs/Stream/hold.d.ts +27 -0
- package/cjs/Stream/hold.d.ts.map +1 -0
- package/cjs/Stream/hold.js +94 -0
- package/cjs/Stream/hold.js.map +1 -0
- package/cjs/Stream/index.d.ts +14 -1
- package/cjs/Stream/index.d.ts.map +1 -1
- package/cjs/Stream/index.js +14 -1
- package/cjs/Stream/index.js.map +1 -1
- package/cjs/Stream/lazy.d.ts +3 -0
- package/cjs/Stream/lazy.d.ts.map +1 -0
- package/cjs/Stream/lazy.js +9 -0
- package/cjs/Stream/lazy.js.map +1 -0
- package/cjs/Stream/merge.d.ts +18 -0
- package/cjs/Stream/merge.d.ts.map +1 -0
- package/cjs/Stream/merge.js +84 -0
- package/cjs/Stream/merge.js.map +1 -0
- package/cjs/Stream/multicast.d.ts +27 -0
- package/cjs/Stream/multicast.d.ts.map +1 -0
- package/cjs/Stream/multicast.js +83 -0
- package/cjs/Stream/multicast.js.map +1 -0
- package/cjs/Stream/orElse.d.ts +17 -0
- package/cjs/Stream/orElse.d.ts.map +1 -0
- package/cjs/Stream/orElse.js +105 -0
- package/cjs/Stream/orElse.js.map +1 -0
- package/cjs/Stream/periodic.d.ts +1 -1
- package/cjs/Stream/periodic.d.ts.map +1 -1
- package/cjs/Stream/periodic.js +1 -1
- package/cjs/Stream/periodic.js.map +1 -1
- package/cjs/Stream/provide.d.ts +8 -0
- package/cjs/Stream/provide.d.ts.map +1 -0
- package/cjs/Stream/provide.js +42 -0
- package/cjs/Stream/provide.js.map +1 -0
- package/cjs/Stream/run.d.ts +2 -2
- package/cjs/Stream/run.d.ts.map +1 -1
- package/cjs/Stream/run.js +1 -1
- package/cjs/Stream/run.js.map +1 -1
- package/cjs/Stream/scan.d.ts +17 -0
- package/cjs/Stream/scan.d.ts.map +1 -0
- package/cjs/Stream/scan.js +32 -0
- package/cjs/Stream/scan.js.map +1 -0
- package/cjs/Stream/scheduled.d.ts +12 -3
- package/cjs/Stream/scheduled.d.ts.map +1 -1
- package/cjs/Stream/scheduled.js +23 -5
- package/cjs/Stream/scheduled.js.map +1 -1
- package/cjs/Stream/setFiberRefLocally.d.ts +15 -0
- package/cjs/Stream/setFiberRefLocally.d.ts.map +1 -0
- package/cjs/Stream/setFiberRefLocally.js +53 -0
- package/cjs/Stream/setFiberRefLocally.js.map +1 -0
- package/cjs/Stream/skipRepeats.d.ts +5 -0
- package/cjs/Stream/skipRepeats.d.ts.map +1 -0
- package/cjs/Stream/skipRepeats.js +36 -0
- package/cjs/Stream/skipRepeats.js.map +1 -0
- package/cjs/Stream/switchMap.d.ts +18 -0
- package/cjs/Stream/switchMap.d.ts.map +1 -0
- package/cjs/Stream/switchMap.js +124 -0
- package/cjs/Stream/switchMap.js.map +1 -0
- package/cjs/Stream/tap.d.ts +2 -1
- package/cjs/Stream/tap.d.ts.map +1 -1
- package/cjs/Stream/tap.js +4 -2
- package/cjs/Stream/tap.js.map +1 -1
- package/cjs/Supervisor/index.d.ts +2 -0
- package/cjs/Supervisor/index.d.ts.map +1 -1
- package/cjs/Supervisor/index.js +2 -0
- package/cjs/Supervisor/index.js.map +1 -1
- package/cjs/Supervisor/inheritFiberRefs.d.ts +2 -0
- package/cjs/Supervisor/inheritFiberRefs.d.ts.map +1 -0
- package/cjs/Supervisor/inheritFiberRefs.js +17 -0
- package/cjs/Supervisor/inheritFiberRefs.js.map +1 -0
- package/cjs/Timeline/index.js.map +1 -1
- package/esm/Cause/Cause.d.ts +10 -0
- package/esm/Cause/Cause.d.ts.map +1 -1
- package/esm/Cause/Cause.js +27 -0
- package/esm/Cause/Cause.js.map +1 -1
- package/esm/Cause/Renderer.js +1 -1
- package/esm/Cause/Renderer.js.map +1 -1
- package/esm/Env/Env.d.ts +9 -1
- package/esm/Env/Env.d.ts.map +1 -1
- package/esm/Env/Env.js +8 -5
- package/esm/Env/Env.js.map +1 -1
- package/esm/Fiber/fromScope.d.ts +5 -0
- package/esm/Fiber/fromScope.d.ts.map +1 -0
- package/esm/Fiber/fromScope.js +13 -0
- package/esm/Fiber/fromScope.js.map +1 -0
- package/esm/FiberRef/builtins.d.ts +4 -1
- package/esm/FiberRef/builtins.d.ts.map +1 -1
- package/esm/FiberRef/builtins.js +36 -12
- package/esm/FiberRef/builtins.js.map +1 -1
- package/esm/FiberRuntime/FiberRuntime.d.ts.map +1 -1
- package/esm/FiberRuntime/FiberRuntime.js +23 -14
- package/esm/FiberRuntime/FiberRuntime.js.map +1 -1
- package/esm/Fx/Fx.d.ts +4 -3
- package/esm/Fx/Fx.d.ts.map +1 -1
- package/esm/Fx/Fx.js +22 -22
- package/esm/Fx/Fx.js.map +1 -1
- package/esm/Fx/join.d.ts +1 -1
- package/esm/Fx/join.d.ts.map +1 -1
- package/esm/Fx/join.js +1 -1
- package/esm/Fx/join.js.map +1 -1
- package/esm/Schedule/ScheduleState.d.ts +3 -0
- package/esm/Schedule/ScheduleState.d.ts.map +1 -1
- package/esm/Schedule/ScheduleState.js +3 -0
- package/esm/Schedule/ScheduleState.js.map +1 -1
- package/esm/Scheduler/RootScheduler.d.ts.map +1 -1
- package/esm/Scheduler/RootScheduler.js +4 -5
- package/esm/Scheduler/RootScheduler.js.map +1 -1
- package/esm/Scheduler/Scheduler.d.ts +2 -2
- package/esm/Scheduler/Scheduler.d.ts.map +1 -1
- package/esm/Scheduler/Scheduler.js.map +1 -1
- package/esm/Scheduler/callbackScheduler.d.ts.map +1 -1
- package/esm/Scheduler/callbackScheduler.js +1 -0
- package/esm/Scheduler/callbackScheduler.js.map +1 -1
- package/esm/Scheduler/runSchedule.d.ts +1 -1
- package/esm/Scheduler/runSchedule.d.ts.map +1 -1
- package/esm/Scheduler/runSchedule.js +4 -3
- package/esm/Scheduler/runSchedule.js.map +1 -1
- package/esm/Scope/LocalScope.d.ts.map +1 -1
- package/esm/Scope/LocalScope.js +8 -8
- package/esm/Scope/LocalScope.js.map +1 -1
- package/esm/Semaphore/Semaphore.d.ts +9 -9
- package/esm/Semaphore/Semaphore.d.ts.map +1 -1
- package/esm/Semaphore/Semaphore.js +11 -15
- package/esm/Semaphore/Semaphore.js.map +1 -1
- package/esm/Sink/Sink.d.ts +1 -0
- package/esm/Sink/Sink.d.ts.map +1 -1
- package/esm/Sink/Sink.js +10 -1
- package/esm/Sink/Sink.js.map +1 -1
- package/esm/Stream/Stream.d.ts +5 -14
- package/esm/Stream/Stream.d.ts.map +1 -1
- package/esm/Stream/Stream.js.map +1 -1
- package/esm/Stream/acquirePermit.d.ts +15 -0
- package/esm/Stream/acquirePermit.d.ts.map +1 -0
- package/esm/Stream/acquirePermit.js +15 -0
- package/esm/Stream/acquirePermit.js.map +1 -0
- package/esm/Stream/bimap.d.ts +33 -4
- package/esm/Stream/bimap.d.ts.map +1 -1
- package/esm/Stream/bimap.js +102 -11
- package/esm/Stream/bimap.js.map +1 -1
- package/esm/Stream/continueWith.d.ts +4 -3
- package/esm/Stream/continueWith.d.ts.map +1 -1
- package/esm/Stream/continueWith.js +9 -6
- package/esm/Stream/continueWith.js.map +1 -1
- package/esm/Stream/delay.d.ts +4 -0
- package/esm/Stream/delay.d.ts.map +1 -0
- package/esm/Stream/delay.js +26 -0
- package/esm/Stream/delay.js.map +1 -0
- package/esm/Stream/drain.d.ts +2 -2
- package/esm/Stream/drain.d.ts.map +1 -1
- package/esm/Stream/drain.js +6 -6
- package/esm/Stream/drain.js.map +1 -1
- package/esm/Stream/empty.d.ts.map +1 -1
- package/esm/Stream/empty.js +1 -2
- package/esm/Stream/empty.js.map +1 -1
- package/esm/Stream/flatMap.d.ts +7 -5
- package/esm/Stream/flatMap.d.ts.map +1 -1
- package/esm/Stream/flatMap.js +32 -19
- package/esm/Stream/flatMap.js.map +1 -1
- package/esm/Stream/flatMapConcurrently.d.ts +6 -0
- package/esm/Stream/flatMapConcurrently.d.ts.map +1 -0
- package/esm/Stream/flatMapConcurrently.js +19 -0
- package/esm/Stream/flatMapConcurrently.js.map +1 -0
- package/esm/Stream/flatMapFx.d.ts +5 -1
- package/esm/Stream/flatMapFx.d.ts.map +1 -1
- package/esm/Stream/flatMapFx.js +16 -4
- package/esm/Stream/flatMapFx.js.map +1 -1
- package/esm/Stream/foldMap.d.ts +11 -0
- package/esm/Stream/foldMap.d.ts.map +1 -0
- package/esm/Stream/foldMap.js +38 -0
- package/esm/Stream/foldMap.js.map +1 -0
- package/esm/Stream/fromArray.d.ts +2 -0
- package/esm/Stream/fromArray.d.ts.map +1 -0
- package/esm/Stream/fromArray.js +8 -0
- package/esm/Stream/fromArray.js.map +1 -0
- package/esm/Stream/fromCallback.d.ts +4 -3
- package/esm/Stream/fromCallback.d.ts.map +1 -1
- package/esm/Stream/fromCallback.js +26 -26
- package/esm/Stream/fromCallback.js.map +1 -1
- package/esm/Stream/fromFx.d.ts +23 -8
- package/esm/Stream/fromFx.d.ts.map +1 -1
- package/esm/Stream/fromFx.js +24 -14
- package/esm/Stream/fromFx.js.map +1 -1
- package/esm/Stream/hkt.d.ts +24 -1
- package/esm/Stream/hkt.d.ts.map +1 -1
- package/esm/Stream/hkt.js +41 -4
- package/esm/Stream/hkt.js.map +1 -1
- package/esm/Stream/hold.d.ts +27 -0
- package/esm/Stream/hold.d.ts.map +1 -0
- package/esm/Stream/hold.js +66 -0
- package/esm/Stream/hold.js.map +1 -0
- package/esm/Stream/index.d.ts +14 -1
- package/esm/Stream/index.d.ts.map +1 -1
- package/esm/Stream/index.js +14 -1
- package/esm/Stream/index.js.map +1 -1
- package/esm/Stream/lazy.d.ts +3 -0
- package/esm/Stream/lazy.d.ts.map +1 -0
- package/esm/Stream/lazy.js +5 -0
- package/esm/Stream/lazy.js.map +1 -0
- package/esm/Stream/merge.d.ts +18 -0
- package/esm/Stream/merge.d.ts.map +1 -0
- package/esm/Stream/merge.js +55 -0
- package/esm/Stream/merge.js.map +1 -0
- package/esm/Stream/multicast.d.ts +27 -0
- package/esm/Stream/multicast.d.ts.map +1 -0
- package/esm/Stream/multicast.js +55 -0
- package/esm/Stream/multicast.js.map +1 -0
- package/esm/Stream/orElse.d.ts +17 -0
- package/esm/Stream/orElse.d.ts.map +1 -0
- package/esm/Stream/orElse.js +77 -0
- package/esm/Stream/orElse.js.map +1 -0
- package/esm/Stream/periodic.d.ts +1 -1
- package/esm/Stream/periodic.d.ts.map +1 -1
- package/esm/Stream/periodic.js +1 -1
- package/esm/Stream/periodic.js.map +1 -1
- package/esm/Stream/provide.d.ts +8 -0
- package/esm/Stream/provide.d.ts.map +1 -0
- package/esm/Stream/provide.js +13 -0
- package/esm/Stream/provide.js.map +1 -0
- package/esm/Stream/run.d.ts +2 -2
- package/esm/Stream/run.d.ts.map +1 -1
- package/esm/Stream/run.js +2 -2
- package/esm/Stream/run.js.map +1 -1
- package/esm/Stream/scan.d.ts +17 -0
- package/esm/Stream/scan.d.ts.map +1 -0
- package/esm/Stream/scan.js +27 -0
- package/esm/Stream/scan.js.map +1 -0
- package/esm/Stream/scheduled.d.ts +12 -3
- package/esm/Stream/scheduled.d.ts.map +1 -1
- package/esm/Stream/scheduled.js +16 -4
- package/esm/Stream/scheduled.js.map +1 -1
- package/esm/Stream/setFiberRefLocally.d.ts +15 -0
- package/esm/Stream/setFiberRefLocally.d.ts.map +1 -0
- package/esm/Stream/setFiberRefLocally.js +25 -0
- package/esm/Stream/setFiberRefLocally.js.map +1 -0
- package/esm/Stream/skipRepeats.d.ts +5 -0
- package/esm/Stream/skipRepeats.d.ts.map +1 -0
- package/esm/Stream/skipRepeats.js +31 -0
- package/esm/Stream/skipRepeats.js.map +1 -0
- package/esm/Stream/switchMap.d.ts +18 -0
- package/esm/Stream/switchMap.d.ts.map +1 -0
- package/esm/Stream/switchMap.js +95 -0
- package/esm/Stream/switchMap.js.map +1 -0
- package/esm/Stream/tap.d.ts +2 -1
- package/esm/Stream/tap.d.ts.map +1 -1
- package/esm/Stream/tap.js +3 -2
- package/esm/Stream/tap.js.map +1 -1
- package/esm/Supervisor/index.d.ts +2 -0
- package/esm/Supervisor/index.d.ts.map +1 -1
- package/esm/Supervisor/index.js +2 -0
- package/esm/Supervisor/index.js.map +1 -1
- package/esm/Supervisor/inheritFiberRefs.d.ts +2 -0
- package/esm/Supervisor/inheritFiberRefs.d.ts.map +1 -0
- package/esm/Supervisor/inheritFiberRefs.js +14 -0
- package/esm/Supervisor/inheritFiberRefs.js.map +1 -0
- package/esm/Timeline/index.js.map +1 -1
- package/package.json +173 -37
- package/perf/Stream-filter-map-reduce.test.ts +103 -0
- package/readme.md +1 -1
- package/src/Cause/Cause.ts +63 -0
- package/src/Cause/Renderer.ts +1 -1
- package/src/Env/Env.ts +15 -5
- package/src/Fiber/fromScope.ts +19 -0
- package/src/FiberRef/builtins.ts +63 -11
- package/src/FiberRuntime/FiberRuntime.ts +35 -28
- package/src/Fx/Fx.test.ts +2 -2
- package/src/Fx/Fx.ts +11 -10
- package/src/Fx/join.ts +4 -4
- package/src/Schedule/ScheduleState.ts +3 -0
- package/src/Scheduler/RootScheduler.ts +7 -9
- package/src/Scheduler/Scheduler.ts +5 -6
- package/src/Scheduler/callbackScheduler.ts +1 -0
- package/src/Scheduler/runSchedule.ts +5 -2
- package/src/Scope/LocalScope.ts +8 -6
- package/src/Semaphore/Semaphore.ts +12 -19
- package/src/Sink/Sink.ts +11 -1
- package/src/Stream/Stream.ts +9 -15
- package/src/Stream/acquirePermit.ts +32 -0
- package/src/Stream/bimap.ts +164 -12
- package/src/Stream/continueWith.ts +11 -7
- package/src/Stream/delay.ts +43 -0
- package/src/Stream/drain.ts +8 -7
- package/src/Stream/empty.ts +1 -2
- package/src/Stream/flatMap.test.ts +8 -21
- package/src/Stream/flatMap.ts +46 -24
- package/src/Stream/flatMapConcurrently.test.ts +77 -0
- package/src/Stream/flatMapConcurrently.ts +34 -0
- package/src/Stream/flatMapFx.ts +37 -4
- package/src/Stream/foldMap.ts +88 -0
- package/src/Stream/fromArray.ts +8 -0
- package/src/Stream/fromCallback.test.ts +3 -16
- package/src/Stream/fromCallback.ts +48 -29
- package/src/Stream/fromFx.test.ts +3 -24
- package/src/Stream/fromFx.ts +54 -28
- package/src/Stream/hkt.ts +59 -10
- package/src/Stream/hold.test.ts +52 -0
- package/src/Stream/hold.ts +117 -0
- package/src/Stream/index.ts +14 -1
- package/src/Stream/lazy.ts +5 -0
- package/src/Stream/logging.test.ts +8 -3
- package/src/Stream/merge.test.ts +31 -0
- package/src/Stream/merge.ts +76 -0
- package/src/Stream/multicast.test.ts +32 -0
- package/src/Stream/multicast.ts +114 -0
- package/src/Stream/orElse.ts +107 -0
- package/src/Stream/periodic.ts +2 -2
- package/src/Stream/provide.test.ts +78 -0
- package/src/Stream/provide.ts +34 -0
- package/src/Stream/run.ts +6 -3
- package/src/Stream/scan.test.ts +28 -0
- package/src/Stream/scan.ts +46 -0
- package/src/Stream/scheduled.test.ts +9 -1
- package/src/Stream/scheduled.ts +46 -12
- package/src/Stream/setFiberRefLocally.ts +38 -0
- package/src/Stream/skipRepeats.ts +41 -0
- package/src/Stream/switchMap.test.ts +43 -0
- package/src/Stream/switchMap.ts +145 -0
- package/src/Stream/tap.ts +6 -3
- package/src/Supervisor/index.ts +2 -0
- package/src/Supervisor/inheritFiberRefs.ts +17 -0
- package/src/Timeline/index.ts +1 -0
- package/cjs/Effect/Effect.d.ts +0 -199
- package/cjs/Effect/Effect.d.ts.map +0 -1
- package/cjs/Effect/Effect.js +0 -66
- package/cjs/Effect/Effect.js.map +0 -1
- package/cjs/Stream/map.d.ts +0 -14
- package/cjs/Stream/map.d.ts.map +0 -1
- package/cjs/Stream/map.js +0 -30
- package/cjs/Stream/map.js.map +0 -1
- package/cjs/test.d.ts +0 -1
- package/cjs/test.d.ts.map +0 -1
- package/cjs/test.js +0 -2
- package/cjs/test.js.map +0 -1
- package/esm/Effect/Effect.d.ts +0 -199
- package/esm/Effect/Effect.d.ts.map +0 -1
- package/esm/Effect/Effect.js +0 -50
- package/esm/Effect/Effect.js.map +0 -1
- package/esm/Stream/map.d.ts +0 -14
- package/esm/Stream/map.d.ts.map +0 -1
- package/esm/Stream/map.js +0 -25
- package/esm/Stream/map.js.map +0 -1
- package/esm/test.d.ts +0 -1
- package/esm/test.d.ts.map +0 -1
- package/esm/test.js +0 -2
- package/esm/test.js.map +0 -1
- package/src/Effect/Effect.ts +0 -109
- package/src/Stream/map.ts +0 -35
- package/src/test.ts +0 -0
package/src/Cause/Cause.ts
CHANGED
|
@@ -85,6 +85,16 @@ export const traced =
|
|
|
85
85
|
<E>(cause: Cause<E>): Cause<E> =>
|
|
86
86
|
new Traced(cause, trace)
|
|
87
87
|
|
|
88
|
+
export const isEmpty = <E>(cause: Cause<E>): cause is Empty => cause.tag === Empty.tag
|
|
89
|
+
export const isInterrupted = <E>(cause: Cause<E>): cause is Interrupted =>
|
|
90
|
+
cause.tag === 'Interrupted'
|
|
91
|
+
export const isUnexpected = <E>(cause: Cause<E>): cause is Unexpected => cause.tag === 'Unexpected'
|
|
92
|
+
export const isExpected = <E>(cause: Cause<E>): cause is Expected<E> => cause.tag === 'Expected'
|
|
93
|
+
export const isSequential = <E>(cause: Cause<E>): cause is Sequential<E, E> =>
|
|
94
|
+
cause.tag === 'Sequential'
|
|
95
|
+
export const isParallel = <E>(cause: Cause<E>): cause is Parallel<E, E> => cause.tag === 'Parallel'
|
|
96
|
+
export const isTraced = <E>(cause: Cause<E>): cause is Traced<E> => cause.tag === 'Traced'
|
|
97
|
+
|
|
88
98
|
export const makeParallelAssociative = <E>(): Associative.Associative<Cause<E>> => ({
|
|
89
99
|
concat: (left, right) =>
|
|
90
100
|
left.tag === Empty.tag ? right : right.tag === Empty.tag ? left : new Parallel(left, right),
|
|
@@ -423,3 +433,56 @@ export const makeDebug = <E>(renderer: Renderer<E> = defaultRenderer): D.Debug<C
|
|
|
423
433
|
D.Debug((cause) => prettyPrint(cause, renderer))
|
|
424
434
|
|
|
425
435
|
export const Debug = makeDebug()
|
|
436
|
+
|
|
437
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
438
|
+
export const findExpected = find(<E>(_e: E): _e is E => true)
|
|
439
|
+
|
|
440
|
+
export function findType<T extends Cause<any>['tag']>(tag: T) {
|
|
441
|
+
return <E>(cause: Cause<E>): Maybe.Maybe<Cause<E>> => {
|
|
442
|
+
if (cause.tag === tag) {
|
|
443
|
+
return Maybe.Just(cause)
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
if (cause.tag === 'Sequential') {
|
|
447
|
+
return pipe(
|
|
448
|
+
findType(tag)(cause.left),
|
|
449
|
+
Maybe.match(
|
|
450
|
+
() => findType(tag)(cause.right),
|
|
451
|
+
(a) =>
|
|
452
|
+
pipe(
|
|
453
|
+
findType(tag)(cause.right),
|
|
454
|
+
Maybe.match(
|
|
455
|
+
() => Maybe.Just(a),
|
|
456
|
+
(b) => Maybe.Just(sequential(a, b)),
|
|
457
|
+
),
|
|
458
|
+
),
|
|
459
|
+
),
|
|
460
|
+
)
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
if (cause.tag === 'Parallel') {
|
|
464
|
+
return pipe(
|
|
465
|
+
findType(tag)(cause.left),
|
|
466
|
+
Maybe.match(
|
|
467
|
+
() => findType(tag)(cause.right),
|
|
468
|
+
(a) =>
|
|
469
|
+
pipe(
|
|
470
|
+
findType(tag)(cause.right),
|
|
471
|
+
Maybe.match(
|
|
472
|
+
() => Maybe.Just(a),
|
|
473
|
+
(b) => Maybe.Just(parallel(a, b)),
|
|
474
|
+
),
|
|
475
|
+
),
|
|
476
|
+
),
|
|
477
|
+
)
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
if (cause.tag === 'Traced') {
|
|
481
|
+
return findType(tag)(cause.cause)
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
return Maybe.Nothing
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
export const findInterrupted = findType('Interrupted')
|
package/src/Cause/Renderer.ts
CHANGED
|
@@ -67,7 +67,7 @@ export function renderInterrupted<E>(
|
|
|
67
67
|
): Sequential {
|
|
68
68
|
return Sequential([
|
|
69
69
|
Failure([
|
|
70
|
-
`Interrupted by
|
|
70
|
+
`Interrupted by ${FiberIdDebug.debug(cause.fiberId)}.`,
|
|
71
71
|
'',
|
|
72
72
|
...renderTrace(trace, renderer),
|
|
73
73
|
]),
|
package/src/Env/Env.ts
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { makeEnvFromFiberRefs } from '@/FiberRef/builtins.js'
|
|
2
2
|
import * as FiberRefs from '@/FiberRefs/FiberRefs.js'
|
|
3
3
|
import { Of } from '@/Fx/Fx.js'
|
|
4
4
|
import { Service } from '@/Service/Service.js'
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Env is an abstraction over FiberRefs which keeps track of services and joining them back together.
|
|
8
|
+
*/
|
|
6
9
|
export interface Env<R> {
|
|
10
|
+
readonly fiberRefs: FiberRefs.FiberRefs
|
|
7
11
|
readonly get: <S extends R>(service: Service<S>) => Of<S>
|
|
12
|
+
readonly addService: <S, I extends S>(service: Service<S>, impl: I) => Env<R | S>
|
|
13
|
+
readonly join: <S>(other: Env<S>) => Env<R | S>
|
|
8
14
|
}
|
|
9
15
|
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
export const Empty = makeEnvFromFiberRefs<never>(FiberRefs.FiberRefs())
|
|
17
|
+
|
|
18
|
+
export function Env<S, I extends S>(service: Service<S>, impl: I): Env<S> {
|
|
19
|
+
return Empty.addService(service, impl)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function fromFiberRefs<R>(fiberRefs: FiberRefs.FiberRefs): Env<R> {
|
|
23
|
+
return makeEnvFromFiberRefs(fiberRefs)
|
|
14
24
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { pipe } from 'hkt-ts'
|
|
2
|
+
|
|
3
|
+
import { Synthetic } from './Fiber.js'
|
|
4
|
+
|
|
5
|
+
import { FiberId } from '@/FiberId/FiberId.js'
|
|
6
|
+
import { Closeable, closeOrWait, wait } from '@/Scope/Closeable.js'
|
|
7
|
+
import { Exit, FiberRefs, Fx } from '@/index.js'
|
|
8
|
+
|
|
9
|
+
export function fromScope(id: FiberId, fiberRefs: FiberRefs.FiberRefs, scope: Closeable) {
|
|
10
|
+
return Synthetic({
|
|
11
|
+
id,
|
|
12
|
+
exit: wait(scope),
|
|
13
|
+
inheritFiberRefs: pipe(
|
|
14
|
+
Fx.getFiberRefs,
|
|
15
|
+
Fx.flatMap((refs) => Fx.fromLazy(() => FiberRefs.join(refs, fiberRefs))),
|
|
16
|
+
),
|
|
17
|
+
interruptAs: (id) => closeOrWait(scope)(Exit.interrupt(id)),
|
|
18
|
+
})
|
|
19
|
+
}
|
package/src/FiberRef/builtins.ts
CHANGED
|
@@ -19,8 +19,7 @@ import { Trace } from '@/Trace/Trace.js'
|
|
|
19
19
|
export const CurrentEnv = make(
|
|
20
20
|
pipe(
|
|
21
21
|
Fx.getFiberContext,
|
|
22
|
-
|
|
23
|
-
Fx.map((c): Env<any> => ({ get: getServiceFromFiberRefs(c.fiberRefs) })),
|
|
22
|
+
Fx.map((c) => makeEnvFromFiberRefs(c.fiberRefs)),
|
|
24
23
|
),
|
|
25
24
|
{
|
|
26
25
|
fork: constant(Nothing), // Always create a new Env for each Fiber.
|
|
@@ -28,6 +27,18 @@ export const CurrentEnv = make(
|
|
|
28
27
|
},
|
|
29
28
|
)
|
|
30
29
|
|
|
30
|
+
export function makeEnvFromFiberRefs<R>(fiberRefs: FiberRefs.FiberRefs): Env<R> {
|
|
31
|
+
// Always use a snapshot of the FiberRefs to avoid mutability problems.
|
|
32
|
+
const forked = FiberRefs.fork(fiberRefs)
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
fiberRefs: forked,
|
|
36
|
+
get: getServiceFromFiberRefs(forked),
|
|
37
|
+
addService: addServiceFromFiberRefs(forked),
|
|
38
|
+
join: joinEnvFromFiberRefs(forked),
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
31
42
|
export const CurrentConcurrencyLevel = make(
|
|
32
43
|
Fx.fromLazy(() => new Semaphore(NonNegativeInteger(Infinity))),
|
|
33
44
|
{
|
|
@@ -55,17 +66,26 @@ export const Layers = FiberRef.make(
|
|
|
55
66
|
},
|
|
56
67
|
)
|
|
57
68
|
|
|
58
|
-
export const Services = FiberRef.make(
|
|
59
|
-
|
|
60
|
-
|
|
69
|
+
export const Services = FiberRef.make(
|
|
70
|
+
Fx.fromLazy(() => ImmutableMap<Service<any>, any>()),
|
|
71
|
+
{
|
|
72
|
+
join: identity, // Always keep the parent Fiber's services
|
|
73
|
+
},
|
|
74
|
+
)
|
|
61
75
|
|
|
62
|
-
export const CurrentLogSpans = FiberRef.make(
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
export const CurrentLogSpans = FiberRef.make(
|
|
77
|
+
Fx.fromLazy(() => ImmutableMap<string, LogSpan>()),
|
|
78
|
+
{
|
|
79
|
+
join: identity,
|
|
80
|
+
},
|
|
81
|
+
)
|
|
65
82
|
|
|
66
|
-
export const CurrentLogAnnotations = FiberRef.make(
|
|
67
|
-
|
|
68
|
-
|
|
83
|
+
export const CurrentLogAnnotations = FiberRef.make(
|
|
84
|
+
Fx.fromLazy(() => ImmutableMap<string, LogAnnotation>()),
|
|
85
|
+
{
|
|
86
|
+
join: identity,
|
|
87
|
+
},
|
|
88
|
+
)
|
|
69
89
|
|
|
70
90
|
export function getServiceFromFiberRefs(fiberRefs: FiberRefs.FiberRefs) {
|
|
71
91
|
return <S>(id: Service<S>): Fx.Of<S> => {
|
|
@@ -112,3 +132,35 @@ const getLayerFromFiberRefs = <S>(id: Service<S>, fiberRefs: FiberRefs.FiberRefs
|
|
|
112
132
|
|
|
113
133
|
return join(fiber)
|
|
114
134
|
})
|
|
135
|
+
|
|
136
|
+
export function addServiceFromFiberRefs<R>(fiberRefs: FiberRefs.FiberRefs): Env<R>['addService'] {
|
|
137
|
+
return (id, impl) => {
|
|
138
|
+
const forked = fiberRefs.fork()
|
|
139
|
+
|
|
140
|
+
// AddService
|
|
141
|
+
FiberRefs.setFiberRef(
|
|
142
|
+
Services,
|
|
143
|
+
pipe(
|
|
144
|
+
forked,
|
|
145
|
+
FiberRefs.maybeGetFiberRefValue(Services),
|
|
146
|
+
Maybe.match(
|
|
147
|
+
() => ImmutableMap<Service<any>, any>().set(id, impl),
|
|
148
|
+
(s) => s.set(id, impl),
|
|
149
|
+
),
|
|
150
|
+
),
|
|
151
|
+
)(forked)
|
|
152
|
+
|
|
153
|
+
return makeEnvFromFiberRefs(forked)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export function joinEnvFromFiberRefs<R>(fiberRefs: FiberRefs.FiberRefs): Env<R>['join'] {
|
|
158
|
+
return (other) => {
|
|
159
|
+
const forked = other.fiberRefs.fork()
|
|
160
|
+
|
|
161
|
+
// Reverse the order to ensure incoming values take precedence for Services + Layers
|
|
162
|
+
FiberRefs.join(forked, fiberRefs)
|
|
163
|
+
|
|
164
|
+
return makeEnvFromFiberRefs(forked)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
@@ -119,6 +119,11 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
119
119
|
readonly addObserver = (
|
|
120
120
|
observer: (exit: Exit.Exit<Fx.ErrorsOf<F>, Fx.OutputOf<F>>) => void,
|
|
121
121
|
): Disposable => {
|
|
122
|
+
if (this._status.tag === 'Done') {
|
|
123
|
+
const exit = this._status.exit
|
|
124
|
+
return this.setTimer(() => observer(exit))
|
|
125
|
+
}
|
|
126
|
+
|
|
122
127
|
this._observers.push(observer)
|
|
123
128
|
|
|
124
129
|
return Disposable(() => {
|
|
@@ -137,10 +142,7 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
137
142
|
this._disposable.dispose()
|
|
138
143
|
this._disposable = settable()
|
|
139
144
|
this._current = Maybe.Just(Fx.interrupted(id).instr)
|
|
140
|
-
|
|
141
|
-
if (this._status.tag === 'Suspended') {
|
|
142
|
-
this.setTimer(() => this.loop())
|
|
143
|
-
}
|
|
145
|
+
this.loop()
|
|
144
146
|
} else {
|
|
145
147
|
// Record the interrupting FiberId for if/when the interrupt status becomes true again.
|
|
146
148
|
this._interruptedBy.add(id)
|
|
@@ -207,6 +209,7 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
207
209
|
|
|
208
210
|
protected addCustomTrace(trace?: string) {
|
|
209
211
|
if (trace) {
|
|
212
|
+
this.pushPopFiberRef(Builtin.CurrentTrace, this.getRuntimeTrace())
|
|
210
213
|
this.pushPopFiberRef(Builtin.CurrentTrace, Trace.Trace.custom(trace))
|
|
211
214
|
}
|
|
212
215
|
}
|
|
@@ -225,14 +228,8 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
225
228
|
this.withFiberRef(Builtin.CurrentConcurrencyLevel, (semaphore) => {
|
|
226
229
|
const withConcurrency = acquireFiber(semaphore.value)
|
|
227
230
|
|
|
228
|
-
const f = new FiberRuntime(
|
|
229
|
-
|
|
230
|
-
this.context.fork({ fiberRefs: this.context.fiberRefs }),
|
|
231
|
-
)
|
|
232
|
-
const s = new FiberRuntime(
|
|
233
|
-
withConcurrency(instr.second),
|
|
234
|
-
this.context.fork({ fiberRefs: this.context.fiberRefs }),
|
|
235
|
-
)
|
|
231
|
+
const f = new FiberRuntime(withConcurrency(instr.first), this.context.fork())
|
|
232
|
+
const s = new FiberRuntime(withConcurrency(instr.second), this.context.fork())
|
|
236
233
|
|
|
237
234
|
const [future, onExit] = bothFuture(f, s)
|
|
238
235
|
|
|
@@ -247,7 +244,14 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
247
244
|
|
|
248
245
|
return pipe(
|
|
249
246
|
wait(future),
|
|
250
|
-
Fx.ensuring(() =>
|
|
247
|
+
Fx.ensuring(() =>
|
|
248
|
+
Fx.fromLazy(() => {
|
|
249
|
+
FiberRefs.join(this.context.fiberRefs, f.context.fiberRefs)
|
|
250
|
+
FiberRefs.join(this.context.fiberRefs, s.context.fiberRefs)
|
|
251
|
+
|
|
252
|
+
inner.dispose()
|
|
253
|
+
}),
|
|
254
|
+
),
|
|
251
255
|
)
|
|
252
256
|
})
|
|
253
257
|
}
|
|
@@ -267,14 +271,8 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
267
271
|
protected processEither(instr: Extract<AnyInstruction, { readonly tag: 'Either' }>) {
|
|
268
272
|
this.withFiberRef(Builtin.CurrentConcurrencyLevel, (semaphore) => {
|
|
269
273
|
const withConcurrency = acquireFiber(semaphore.value)
|
|
270
|
-
const f = new FiberRuntime(
|
|
271
|
-
|
|
272
|
-
this.context.fork({ fiberRefs: this.context.fiberRefs }),
|
|
273
|
-
)
|
|
274
|
-
const s = new FiberRuntime(
|
|
275
|
-
withConcurrency(instr.second),
|
|
276
|
-
this.context.fork({ fiberRefs: this.context.fiberRefs }),
|
|
277
|
-
)
|
|
274
|
+
const f = new FiberRuntime(withConcurrency(instr.first), this.context.fork())
|
|
275
|
+
const s = new FiberRuntime(withConcurrency(instr.second), this.context.fork())
|
|
278
276
|
|
|
279
277
|
const inner = settable()
|
|
280
278
|
const future = Pending<never, any, any>()
|
|
@@ -283,10 +281,19 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
283
281
|
pipe(
|
|
284
282
|
Fx.fromExit(exit),
|
|
285
283
|
Fx.ensuring(() =>
|
|
286
|
-
index === 0
|
|
284
|
+
index === 0
|
|
285
|
+
? pipe(
|
|
286
|
+
s.interruptAs(f.context.id),
|
|
287
|
+
Fx.tapLazy(() => FiberRefs.join(this.context.fiberRefs, f.context.fiberRefs)),
|
|
288
|
+
)
|
|
289
|
+
: pipe(
|
|
290
|
+
f.interruptAs(s.context.id),
|
|
291
|
+
Fx.tapLazy(() => FiberRefs.join(this.context.fiberRefs, s.context.fiberRefs)),
|
|
292
|
+
),
|
|
287
293
|
),
|
|
288
294
|
),
|
|
289
295
|
)
|
|
296
|
+
|
|
290
297
|
inner.dispose()
|
|
291
298
|
}
|
|
292
299
|
|
|
@@ -335,9 +342,9 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
335
342
|
}
|
|
336
343
|
|
|
337
344
|
protected processFromCause(instr: Extract<AnyInstruction, { readonly tag: 'FromCause' }>) {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
const interrupts = this._children.map((c) => c.interruptAs(
|
|
345
|
+
const interruptedCause = Cause.findInterrupted(instr.cause)
|
|
346
|
+
if (Maybe.isJust(interruptedCause) && this._children.length > 0) {
|
|
347
|
+
const interrupts = this._children.map((c) => c.interruptAs(this.id))
|
|
341
348
|
this._children = []
|
|
342
349
|
|
|
343
350
|
// Cancel all Child Fibers and then continue with the Cause
|
|
@@ -449,12 +456,12 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
449
456
|
protected processProvideService(
|
|
450
457
|
instr: Extract<AnyInstruction, { readonly tag: 'ProvideService' }>,
|
|
451
458
|
) {
|
|
452
|
-
this.withFiberRef(Builtin.
|
|
459
|
+
this.withFiberRef(Builtin.CurrentEnv, (env) =>
|
|
453
460
|
pipe(
|
|
454
461
|
instr.fx,
|
|
455
462
|
Fx.fiberRefLocally(
|
|
456
|
-
Builtin.
|
|
457
|
-
|
|
463
|
+
Builtin.CurrentEnv,
|
|
464
|
+
env.value.addService(instr.service, instr.implementation),
|
|
458
465
|
),
|
|
459
466
|
),
|
|
460
467
|
)
|
package/src/Fx/Fx.test.ts
CHANGED
|
@@ -107,14 +107,14 @@ describe(new URL(import.meta.url).pathname, () => {
|
|
|
107
107
|
console.time('Fx: Fib25 Construction')
|
|
108
108
|
const program = fib(25)
|
|
109
109
|
console.timeEnd('Fx: Fib25 Construction')
|
|
110
|
-
for (let i = 0; i <
|
|
110
|
+
for (let i = 0; i < 5; i++) {
|
|
111
111
|
console.time('Fib25')
|
|
112
112
|
await runMain(program)
|
|
113
113
|
console.timeEnd('Fib25')
|
|
114
114
|
}
|
|
115
115
|
})
|
|
116
116
|
|
|
117
|
-
it('runs Fib w/ generators', async () => {
|
|
117
|
+
it.skip('runs Fib w/ generators', async () => {
|
|
118
118
|
const fib = (n: number): Fx.Of<number> =>
|
|
119
119
|
Fx.Fx(function* () {
|
|
120
120
|
if (n < 2) {
|
package/src/Fx/Fx.ts
CHANGED
|
@@ -206,6 +206,9 @@ export const tap =
|
|
|
206
206
|
__trace,
|
|
207
207
|
)
|
|
208
208
|
|
|
209
|
+
export const tapLazy = <A, B>(f: (a: A) => B, __trace?: string) =>
|
|
210
|
+
tap((a: A) => fromLazy(() => f(a)), __trace)
|
|
211
|
+
|
|
209
212
|
export const mapTo =
|
|
210
213
|
<B>(b: B, __trace?: string) =>
|
|
211
214
|
<R, E, A>(fx: Fx<R, E, A>): Fx<R, E, B> =>
|
|
@@ -227,13 +230,7 @@ export const match =
|
|
|
227
230
|
__trace?: string,
|
|
228
231
|
) =>
|
|
229
232
|
<R>(fx: Fx<R, E, A>): Fx<R | R2 | R3, E2 | E3, B | C> =>
|
|
230
|
-
Match.make(
|
|
231
|
-
fx,
|
|
232
|
-
(cause) =>
|
|
233
|
-
cause.tag === 'Expected' ? onLeft(cause.error) : (fromCause(cause) as Fx<R2, E2, B>),
|
|
234
|
-
onRight,
|
|
235
|
-
__trace,
|
|
236
|
-
)
|
|
233
|
+
Match.make(fx, flow(findExpectedCause, Either.match(onLeft, fromCause)), onRight, __trace)
|
|
237
234
|
|
|
238
235
|
export const orElseCause =
|
|
239
236
|
<E, R2, E2, B>(onLeft: (cause: Cause.Cause<E>) => Fx<R2, E2, B>, __trace?: string) =>
|
|
@@ -530,7 +527,7 @@ export const Top: T.Top3REC<FxHKT, never, never> = {
|
|
|
530
527
|
top: now<unknown>([]),
|
|
531
528
|
}
|
|
532
529
|
|
|
533
|
-
export const top =
|
|
530
|
+
export const top = Top.top
|
|
534
531
|
|
|
535
532
|
export const never = async<never, never, never>(() => Either.Left(unit))
|
|
536
533
|
|
|
@@ -601,8 +598,12 @@ export const CommutativeBoth: CB.CommutativeBoth3<FxHKT> = {
|
|
|
601
598
|
both,
|
|
602
599
|
}
|
|
603
600
|
|
|
604
|
-
export const zipLeft = AB.zipLeft<FxHKT>({ ...CommutativeBoth, ...Covariant })
|
|
605
|
-
|
|
601
|
+
export const zipLeft = AB.zipLeft<FxHKT>({ ...CommutativeBoth, ...Covariant }) as <R2, E2, B>(
|
|
602
|
+
second: Fx<R2, E2, B>,
|
|
603
|
+
) => <R, E, A>(first: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
|
|
604
|
+
export const zipRight = AB.zipRight<FxHKT>({ ...CommutativeBoth, ...Covariant }) as <R2, E2, B>(
|
|
605
|
+
second: Fx<R2, E2, B>,
|
|
606
|
+
) => <R, E, A>(first: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
|
|
606
607
|
|
|
607
608
|
export const IdentityBothPar: IB.IdentityBoth3<FxHKT> = {
|
|
608
609
|
...CommutativeBoth,
|
package/src/Fx/join.ts
CHANGED
|
@@ -18,10 +18,10 @@ export const join = <E, A>(fiber: Fiber.Fiber<E, A>) =>
|
|
|
18
18
|
),
|
|
19
19
|
)
|
|
20
20
|
|
|
21
|
-
export const forkJoinInContext =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
export const forkJoinInContext =
|
|
22
|
+
(context: FiberContext<FiberId.Live>) =>
|
|
23
|
+
<R, E, A>(fx: Fx.Fx<R, E, A>): Fx.Fx<R, E, A> =>
|
|
24
|
+
pipe(fx, Fx.forkInContext(context), Fx.flatMap(join))
|
|
25
25
|
|
|
26
26
|
export const forkJoinIn = <R, E, A>(fx: Fx.Fx<R, E, A>, scope: Scope): Fx.Fx<R, E, A> =>
|
|
27
27
|
pipe(fx, Fx.forkIn(scope), Fx.flatMap(join))
|
|
@@ -20,6 +20,9 @@ const maxTimeAssociative = Time.makeAssociative({
|
|
|
20
20
|
})
|
|
21
21
|
const maybeMaxTimeAssociative = makeAssociative(maxTimeAssociative)
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* TODO: ScheduleState should track Exit values to allow exiting early w/ custom logic
|
|
25
|
+
*/
|
|
23
26
|
export class ScheduleState {
|
|
24
27
|
constructor(
|
|
25
28
|
/**
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { identity } from 'hkt-ts'
|
|
2
|
-
|
|
3
1
|
import { Scheduler } from './Scheduler.js'
|
|
4
2
|
import { callbackScheduler } from './callbackScheduler.js'
|
|
5
3
|
import { runSchedule } from './runSchedule.js'
|
|
@@ -18,6 +16,7 @@ import { complete } from '@/Future/complete.js'
|
|
|
18
16
|
import { wait } from '@/Future/wait.js'
|
|
19
17
|
import { Fx } from '@/Fx/Fx.js'
|
|
20
18
|
import { Schedule } from '@/Schedule/Schedule.js'
|
|
19
|
+
import { ScheduleState } from '@/Schedule/ScheduleState.js'
|
|
21
20
|
import { Delay } from '@/Time/index.js'
|
|
22
21
|
import { SetTimeoutTimer } from '@/Timer/SetTimeoutTimer.js'
|
|
23
22
|
import { Timer } from '@/Timer/Timer.js'
|
|
@@ -45,15 +44,14 @@ class RootSchedulerImpl implements Scheduler {
|
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
46
|
|
|
48
|
-
readonly asap: Scheduler['asap'] = <R, E, A
|
|
47
|
+
readonly asap: Scheduler['asap'] = <R, E, A>(
|
|
49
48
|
fx: Fx<R, E, A>,
|
|
50
49
|
env: Env<R>,
|
|
51
50
|
context: FiberContext<FiberId.Live>,
|
|
52
|
-
|
|
53
|
-
): Live<E2, B> => {
|
|
51
|
+
): Live<E, A> => {
|
|
54
52
|
setFiberRef(CurrentEnv, env)(context.fiberRefs)
|
|
55
53
|
|
|
56
|
-
const runtime = new FiberRuntime(this.runAt(
|
|
54
|
+
const runtime = new FiberRuntime(this.runAt(fx, Delay(0)), context)
|
|
57
55
|
|
|
58
56
|
// Safe to call sync since it will be run by the Timeline.
|
|
59
57
|
runtime.startSync()
|
|
@@ -61,17 +59,17 @@ class RootSchedulerImpl implements Scheduler {
|
|
|
61
59
|
return runtime
|
|
62
60
|
}
|
|
63
61
|
|
|
64
|
-
readonly schedule: Scheduler['schedule'] = <R, E, A,
|
|
62
|
+
readonly schedule: Scheduler['schedule'] = <R, E, A, B>(
|
|
65
63
|
fx: Fx<R, E, A>,
|
|
66
64
|
env: Env<R>,
|
|
67
65
|
schedule: Schedule,
|
|
68
66
|
context: FiberContext<FiberId.Live>,
|
|
69
|
-
|
|
67
|
+
onEnd?: (state: ScheduleState) => Fx<R, E, B>,
|
|
70
68
|
) => {
|
|
71
69
|
setFiberRef(CurrentEnv, env)(context.fiberRefs)
|
|
72
70
|
|
|
73
71
|
const runtime = new FiberRuntime(
|
|
74
|
-
runSchedule(
|
|
72
|
+
runSchedule(fx, schedule, this.timer, this.runAt, onEnd),
|
|
75
73
|
context,
|
|
76
74
|
)
|
|
77
75
|
|
|
@@ -9,20 +9,19 @@ import { ScheduleState } from '@/Schedule/ScheduleState.js'
|
|
|
9
9
|
import { Service } from '@/Service/Service.js'
|
|
10
10
|
|
|
11
11
|
export interface Scheduler extends Disposable {
|
|
12
|
-
readonly asap: <R, E, A
|
|
12
|
+
readonly asap: <R, E, A>(
|
|
13
13
|
fx: Fx<R, E, A>,
|
|
14
14
|
env: Env<R>,
|
|
15
15
|
context: FiberContext<FiberId.Live>,
|
|
16
|
-
|
|
17
|
-
) => Live<E2, B>
|
|
16
|
+
) => Live<E, A>
|
|
18
17
|
|
|
19
|
-
readonly schedule: <R, E, A,
|
|
18
|
+
readonly schedule: <R, E, A, B>(
|
|
20
19
|
fx: Fx<R, E, A>,
|
|
21
20
|
env: Env<R>,
|
|
22
21
|
schedule: Schedule,
|
|
23
22
|
context: FiberContext<FiberId.Live>,
|
|
24
|
-
|
|
25
|
-
) => Live<
|
|
23
|
+
onEnd?: (state: ScheduleState) => Fx<R, E, B>,
|
|
24
|
+
) => Live<E, ScheduleState>
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
export const Scheduler = Service<Scheduler>('Scheduler')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as Clock from '@/Clock/Clock.js'
|
|
2
|
-
import { Fx } from '@/Fx/Fx.js'
|
|
2
|
+
import { Fx, unit } from '@/Fx/Fx.js'
|
|
3
3
|
import { Schedule } from '@/Schedule/Schedule.js'
|
|
4
4
|
import { ScheduleState } from '@/Schedule/ScheduleState.js'
|
|
5
5
|
import { Delay } from '@/Time/index.js'
|
|
@@ -7,11 +7,12 @@ import { Delay } from '@/Time/index.js'
|
|
|
7
7
|
/**
|
|
8
8
|
* Runs an Fx on a given Schedule
|
|
9
9
|
*/
|
|
10
|
-
export function runSchedule<R, E, A>(
|
|
10
|
+
export function runSchedule<R, E, A, B>(
|
|
11
11
|
fx: Fx<R, E, A>,
|
|
12
12
|
schedule: Schedule,
|
|
13
13
|
clock: Clock.Clock,
|
|
14
14
|
runAt: (fx: Fx<R, E, A>, delay: Delay) => Fx<R, E, A>,
|
|
15
|
+
onEnd?: (state: ScheduleState) => Fx<R, E, B>,
|
|
15
16
|
): Fx<R, E, ScheduleState> {
|
|
16
17
|
return Fx(function* () {
|
|
17
18
|
let [state, decision] = schedule.step(clock.getCurrentTime(), new ScheduleState())
|
|
@@ -26,6 +27,8 @@ export function runSchedule<R, E, A>(
|
|
|
26
27
|
decision = nextDecision
|
|
27
28
|
}
|
|
28
29
|
|
|
30
|
+
yield* onEnd?.(state) ?? unit
|
|
31
|
+
|
|
29
32
|
// Return the final state
|
|
30
33
|
return state
|
|
31
34
|
})
|
package/src/Scope/LocalScope.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { mapTo } from 'hkt-ts/Either'
|
|
|
2
2
|
import * as Maybe from 'hkt-ts/Maybe'
|
|
3
3
|
import { First } from 'hkt-ts/Typeclass/Associative'
|
|
4
4
|
import { pipe } from 'hkt-ts/function'
|
|
5
|
-
import { NonNegativeInteger } from 'hkt-ts/number'
|
|
6
5
|
|
|
7
6
|
import { Closeable } from './Closeable.js'
|
|
8
7
|
import { ReleaseMap } from './ReleaseMap.js'
|
|
@@ -18,7 +17,7 @@ const { concat: concatExits } = makeSequentialAssociative<any, any>(First)
|
|
|
18
17
|
export class LocalScope implements Closeable {
|
|
19
18
|
protected _state: ScopeState = Open
|
|
20
19
|
protected _releaseMap = new ReleaseMap(this.strategy)
|
|
21
|
-
protected _refCount = AtomicCounter(
|
|
20
|
+
protected _refCount = AtomicCounter()
|
|
22
21
|
protected _exit: Maybe.Maybe<Exit<any, any>> = Maybe.Nothing
|
|
23
22
|
|
|
24
23
|
constructor(readonly strategy: FinalizationStrategy) {}
|
|
@@ -44,9 +43,12 @@ export class LocalScope implements Closeable {
|
|
|
44
43
|
|
|
45
44
|
const extended = new LocalScope(strategy)
|
|
46
45
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
extended.ensuring(() => {
|
|
47
|
+
decrement(this._refCount)
|
|
48
|
+
|
|
49
|
+
return this.release
|
|
50
|
+
})
|
|
51
|
+
|
|
50
52
|
increment(this._refCount)
|
|
51
53
|
|
|
52
54
|
return extended
|
|
@@ -64,7 +66,7 @@ export class LocalScope implements Closeable {
|
|
|
64
66
|
// Internals
|
|
65
67
|
|
|
66
68
|
protected release = lazy(() => {
|
|
67
|
-
if (
|
|
69
|
+
if (this._refCount.get() > 0 || Maybe.isNothing(this._exit) || this.isClosed) {
|
|
68
70
|
return success(false)
|
|
69
71
|
}
|
|
70
72
|
|