@typed/fx 0.0.3 → 0.0.4
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/.tracing-plugin/plugin.cjs +30 -0
- package/.tracing-plugin/plugin.d.ts.map +1 -1
- package/.tracing-plugin/plugin.js.map +1 -1
- package/cjs/Atomic/Atomic.d.ts +2 -2
- package/cjs/Atomic/Atomic.d.ts.map +1 -1
- package/cjs/Atomic/Atomic.js +1 -1
- package/cjs/Atomic/Atomic.js.map +1 -1
- package/cjs/Effect/Effect.d.ts +199 -0
- package/cjs/Effect/Effect.d.ts.map +1 -0
- package/cjs/Effect/Effect.js +66 -0
- package/cjs/Effect/Effect.js.map +1 -0
- package/cjs/Env/Env.d.ts.map +1 -1
- package/cjs/Env/Env.js +2 -55
- package/cjs/Env/Env.js.map +1 -1
- package/cjs/Exit/hkt.d.ts +11 -1
- package/cjs/Exit/hkt.d.ts.map +1 -1
- package/cjs/Exit/hkt.js +9 -3
- package/cjs/Exit/hkt.js.map +1 -1
- package/cjs/Fiber/Fiber.d.ts +8 -8
- package/cjs/Fiber/Fiber.d.ts.map +1 -1
- package/cjs/Fiber/Fiber.js +2 -9
- package/cjs/Fiber/Fiber.js.map +1 -1
- package/cjs/Fiber/fromExit.d.ts +4 -0
- package/cjs/Fiber/fromExit.d.ts.map +1 -0
- package/cjs/Fiber/fromExit.js +16 -0
- package/cjs/Fiber/fromExit.js.map +1 -0
- package/cjs/Fiber/hkt.d.ts +40 -0
- package/cjs/Fiber/hkt.d.ts.map +1 -0
- package/cjs/Fiber/hkt.js +101 -0
- package/cjs/Fiber/hkt.js.map +1 -0
- package/cjs/Fiber/index.d.ts +1 -0
- package/cjs/Fiber/index.d.ts.map +1 -1
- package/cjs/Fiber/index.js +1 -0
- package/cjs/Fiber/index.js.map +1 -1
- package/cjs/FiberContext/FiberContext.d.ts +5 -7
- package/cjs/FiberContext/FiberContext.d.ts.map +1 -1
- package/cjs/FiberContext/FiberContext.js +3 -5
- package/cjs/FiberContext/FiberContext.js.map +1 -1
- package/cjs/FiberId/FiberId.d.ts +1 -1
- package/cjs/FiberId/FiberId.d.ts.map +1 -1
- package/cjs/FiberRef/FiberRef.d.ts +2 -18
- package/cjs/FiberRef/FiberRef.d.ts.map +1 -1
- package/cjs/FiberRef/FiberRef.js +1 -34
- package/cjs/FiberRef/FiberRef.js.map +1 -1
- package/cjs/FiberRef/builtins.d.ts +22 -0
- package/cjs/FiberRef/builtins.d.ts.map +1 -0
- package/cjs/FiberRef/builtins.js +94 -0
- package/cjs/FiberRef/builtins.js.map +1 -0
- package/cjs/FiberRef/index.d.ts.map +1 -1
- package/cjs/FiberRef/index.js +0 -1
- package/cjs/FiberRef/index.js.map +1 -1
- package/cjs/FiberRefs/FiberRefs.d.ts +3 -1
- package/cjs/FiberRefs/FiberRefs.d.ts.map +1 -1
- package/cjs/FiberRefs/FiberRefs.js +5 -18
- package/cjs/FiberRefs/FiberRefs.js.map +1 -1
- package/cjs/FiberRuntime/FiberRuntime.d.ts +14 -14
- package/cjs/FiberRuntime/FiberRuntime.d.ts.map +1 -1
- package/cjs/FiberRuntime/FiberRuntime.js +159 -152
- package/cjs/FiberRuntime/FiberRuntime.js.map +1 -1
- package/cjs/Fx/Fx.d.ts +13 -12
- package/cjs/Fx/Fx.d.ts.map +1 -1
- package/cjs/Fx/Fx.js +52 -37
- package/cjs/Fx/Fx.js.map +1 -1
- package/cjs/Fx/Instruction.d.ts +33 -35
- package/cjs/Fx/Instruction.d.ts.map +1 -1
- package/cjs/Fx/Instruction.js +44 -26
- package/cjs/Fx/Instruction.js.map +1 -1
- package/cjs/Fx/fromLayer.d.ts +5 -0
- package/cjs/Fx/fromLayer.d.ts.map +1 -0
- package/cjs/Fx/fromLayer.js +33 -0
- package/cjs/Fx/fromLayer.js.map +1 -0
- package/cjs/Fx/index.d.ts +1 -0
- package/cjs/Fx/index.d.ts.map +1 -1
- package/cjs/Fx/index.js +1 -0
- package/cjs/Fx/index.js.map +1 -1
- package/cjs/Fx/join.d.ts +8 -2
- package/cjs/Fx/join.d.ts.map +1 -1
- package/cjs/Fx/join.js +9 -10
- package/cjs/Fx/join.js.map +1 -1
- package/cjs/Fx/logging.d.ts.map +1 -1
- package/cjs/Fx/logging.js +5 -4
- package/cjs/Fx/logging.js.map +1 -1
- package/cjs/Fx/run.d.ts +7 -2
- package/cjs/Fx/run.d.ts.map +1 -1
- package/cjs/Fx/run.js +9 -4
- package/cjs/Fx/run.js.map +1 -1
- package/cjs/Fx/scheduler.js +1 -1
- package/cjs/Fx/scheduler.js.map +1 -1
- package/cjs/Fx/scoped.d.ts +5 -5
- package/cjs/Fx/scoped.d.ts.map +1 -1
- package/cjs/Fx/scoped.js +30 -20
- package/cjs/Fx/scoped.js.map +1 -1
- package/cjs/Layer/Layer.d.ts +1 -0
- package/cjs/Layer/Layer.d.ts.map +1 -1
- package/cjs/Layer/Layer.js +7 -1
- package/cjs/Layer/Layer.js.map +1 -1
- package/cjs/Logger/Console.d.ts.map +1 -1
- package/cjs/Logger/Console.js +45 -17
- package/cjs/Logger/Console.js.map +1 -1
- package/cjs/Logger/Logger.d.ts +2 -1
- package/cjs/Logger/Logger.d.ts.map +1 -1
- package/cjs/Logger/Logger.js +2 -2
- package/cjs/Logger/Logger.js.map +1 -1
- package/cjs/Node/Runtime.d.ts +9 -0
- package/cjs/Node/Runtime.d.ts.map +1 -0
- package/cjs/Node/Runtime.js +20 -0
- package/cjs/Node/Runtime.js.map +1 -0
- package/cjs/Node/gracefulShutdown.d.ts +5 -0
- package/cjs/Node/gracefulShutdown.d.ts.map +1 -0
- package/cjs/Node/gracefulShutdown.js +66 -0
- package/cjs/Node/gracefulShutdown.js.map +1 -0
- package/cjs/Node/index.d.ts +3 -0
- package/cjs/Node/index.d.ts.map +1 -0
- package/cjs/{Ref → Node}/index.js +2 -2
- package/cjs/Node/index.js.map +1 -0
- package/cjs/Platform/Platform.d.ts +4 -2
- package/cjs/Platform/Platform.d.ts.map +1 -1
- package/cjs/Platform/Platform.js +5 -3
- package/cjs/Platform/Platform.js.map +1 -1
- package/cjs/Runtime/Runtime.d.ts +4 -4
- package/cjs/Runtime/Runtime.d.ts.map +1 -1
- package/cjs/Runtime/Runtime.js +1 -1
- package/cjs/Runtime/Runtime.js.map +1 -1
- package/cjs/Scheduler/RootScheduler.d.ts.map +1 -1
- package/cjs/Scheduler/RootScheduler.js +9 -8
- package/cjs/Scheduler/RootScheduler.js.map +1 -1
- package/cjs/Scheduler/Scheduler.d.ts +3 -2
- package/cjs/Scheduler/Scheduler.d.ts.map +1 -1
- package/cjs/Scheduler/Scheduler.js.map +1 -1
- package/cjs/Scheduler/index.d.ts +2 -0
- package/cjs/Scheduler/index.d.ts.map +1 -1
- package/cjs/Scheduler/index.js +17 -0
- package/cjs/Scheduler/index.js.map +1 -1
- package/cjs/Scheduler/{scheduled.d.ts → runSchedule.d.ts} +2 -2
- package/cjs/Scheduler/runSchedule.d.ts.map +1 -0
- package/cjs/Scheduler/{scheduled.js → runSchedule.js} +5 -5
- package/cjs/Scheduler/runSchedule.js.map +1 -0
- package/cjs/Scope/LocalScope.d.ts.map +1 -1
- package/cjs/Scope/LocalScope.js +4 -10
- package/cjs/Scope/LocalScope.js.map +1 -1
- package/cjs/Scope/ReleaseMap.d.ts +3 -3
- package/cjs/Scope/ReleaseMap.d.ts.map +1 -1
- package/cjs/Scope/ReleaseMap.js +45 -8
- package/cjs/Scope/ReleaseMap.js.map +1 -1
- package/cjs/Semaphore/Semaphore.d.ts +2 -1
- package/cjs/Semaphore/Semaphore.d.ts.map +1 -1
- package/cjs/Semaphore/Semaphore.js +14 -23
- package/cjs/Semaphore/Semaphore.js.map +1 -1
- package/cjs/Service/Id.d.ts +12 -1
- package/cjs/Service/Id.d.ts.map +1 -1
- package/cjs/Service/Id.js +11 -1
- package/cjs/Service/Id.js.map +1 -1
- package/cjs/Service/fn.d.ts +47 -0
- package/cjs/Service/fn.d.ts.map +1 -0
- package/cjs/Service/fn.js +19 -0
- package/cjs/Service/fn.js.map +1 -0
- package/cjs/Service/index.d.ts +1 -0
- package/cjs/Service/index.d.ts.map +1 -1
- package/cjs/Service/index.js +1 -0
- package/cjs/Service/index.js.map +1 -1
- package/cjs/Service/tagged.d.ts +10 -2
- package/cjs/Service/tagged.d.ts.map +1 -1
- package/cjs/Sink/Sink.d.ts +5 -5
- package/cjs/Sink/Sink.d.ts.map +1 -1
- package/cjs/Sink/Sink.js +11 -7
- package/cjs/Sink/Sink.js.map +1 -1
- package/cjs/Stream/Stream.d.ts +39 -6
- package/cjs/Stream/Stream.d.ts.map +1 -1
- package/cjs/Stream/Stream.js.map +1 -1
- package/cjs/Stream/bimap.d.ts +15 -0
- package/cjs/Stream/bimap.d.ts.map +1 -0
- package/cjs/Stream/bimap.js +74 -0
- package/cjs/Stream/bimap.js.map +1 -0
- package/cjs/Stream/continueWith.d.ts +27 -0
- package/cjs/Stream/continueWith.d.ts.map +1 -0
- package/cjs/Stream/continueWith.js +66 -0
- package/cjs/Stream/continueWith.js.map +1 -0
- package/cjs/Stream/drain.d.ts +3 -2
- package/cjs/Stream/drain.d.ts.map +1 -1
- package/cjs/Stream/drain.js +6 -6
- package/cjs/Stream/drain.js.map +1 -1
- package/cjs/Stream/empty.d.ts +3 -0
- package/cjs/Stream/empty.d.ts.map +1 -0
- package/cjs/Stream/empty.js +31 -0
- package/cjs/Stream/empty.js.map +1 -0
- package/cjs/Stream/flatMap.d.ts +15 -0
- package/cjs/Stream/flatMap.d.ts.map +1 -0
- package/cjs/Stream/flatMap.js +102 -0
- package/cjs/Stream/flatMap.js.map +1 -0
- package/cjs/Stream/flatMapFx.d.ts +4 -0
- package/cjs/Stream/flatMapFx.d.ts.map +1 -0
- package/cjs/Stream/flatMapFx.js +11 -0
- package/cjs/Stream/flatMapFx.js.map +1 -0
- package/cjs/Stream/fromCallback.d.ts +21 -0
- package/cjs/Stream/fromCallback.d.ts.map +1 -0
- package/cjs/Stream/fromCallback.js +65 -0
- package/cjs/Stream/fromCallback.js.map +1 -0
- package/cjs/Stream/fromFx.d.ts +12 -1
- package/cjs/Stream/fromFx.d.ts.map +1 -1
- package/cjs/Stream/fromFx.js +18 -4
- package/cjs/Stream/fromFx.js.map +1 -1
- package/cjs/Stream/hkt.d.ts +15 -0
- package/cjs/Stream/hkt.d.ts.map +1 -0
- package/cjs/Stream/hkt.js +42 -0
- package/cjs/Stream/hkt.js.map +1 -0
- package/cjs/Stream/index.d.ts +11 -0
- package/cjs/Stream/index.d.ts.map +1 -1
- package/cjs/Stream/index.js +11 -0
- package/cjs/Stream/index.js.map +1 -1
- package/cjs/Stream/map.d.ts +14 -0
- package/cjs/Stream/map.d.ts.map +1 -0
- package/cjs/Stream/map.js +30 -0
- package/cjs/Stream/map.js.map +1 -0
- package/cjs/Stream/periodic.d.ts +4 -0
- package/cjs/Stream/periodic.d.ts.map +1 -0
- package/cjs/Stream/periodic.js +32 -0
- package/cjs/Stream/periodic.js.map +1 -0
- package/cjs/Stream/run.d.ts +6 -0
- package/cjs/Stream/run.d.ts.map +1 -0
- package/cjs/{Ref/Ref.js → Stream/run.js} +10 -30
- package/cjs/Stream/run.js.map +1 -0
- package/cjs/Stream/scheduled.d.ts +5 -0
- package/cjs/Stream/scheduled.d.ts.map +1 -0
- package/cjs/Stream/scheduled.js +34 -0
- package/cjs/Stream/scheduled.js.map +1 -0
- package/cjs/Stream/tap.d.ts +4 -0
- package/cjs/Stream/tap.d.ts.map +1 -0
- package/cjs/Stream/tap.js +9 -0
- package/cjs/Stream/tap.js.map +1 -0
- package/cjs/Supervisor/Supervisor.d.ts +507 -0
- package/cjs/Supervisor/Supervisor.d.ts.map +1 -1
- package/cjs/Supervisor/Supervisor.js +2 -1
- package/cjs/Supervisor/Supervisor.js.map +1 -1
- package/cjs/Supervisor/index.d.ts +1 -0
- package/cjs/Supervisor/index.d.ts.map +1 -1
- package/cjs/Supervisor/index.js +1 -0
- package/cjs/Supervisor/index.js.map +1 -1
- package/cjs/Supervisor/maxFailures.d.ts +18 -0
- package/cjs/Supervisor/maxFailures.d.ts.map +1 -0
- package/cjs/Supervisor/maxFailures.js +72 -0
- package/cjs/Supervisor/maxFailures.js.map +1 -0
- package/cjs/Supervisor/trackIn.d.ts +6 -0
- package/cjs/Supervisor/trackIn.d.ts.map +1 -0
- package/cjs/Supervisor/trackIn.js +16 -0
- package/cjs/Supervisor/trackIn.js.map +1 -0
- package/cjs/Trace/Trace.d.ts +1 -1
- package/cjs/Trace/Trace.d.ts.map +1 -1
- package/cjs/Trace/Trace.js +8 -35
- package/cjs/Trace/Trace.js.map +1 -1
- package/cjs/Tracing/plugin.d.ts.map +1 -1
- package/cjs/Tracing/plugin.js +30 -0
- package/cjs/Tracing/plugin.js.map +1 -1
- package/cjs/_internal/suite.d.ts +12 -0
- package/cjs/_internal/suite.d.ts.map +1 -0
- package/cjs/_internal/suite.js +13 -0
- package/cjs/_internal/suite.js.map +1 -0
- package/cjs/index.d.ts +3 -1
- package/cjs/index.d.ts.map +1 -1
- package/cjs/index.js +4 -2
- package/cjs/index.js.map +1 -1
- package/coverage/tmp/coverage-14409-1663382601663-0.json +1 -0
- package/coverage/tmp/coverage-14414-1663382601571-0.json +1 -0
- package/coverage/tmp/coverage-14432-1663382601494-0.json +1 -0
- package/esm/Atomic/Atomic.d.ts +2 -2
- package/esm/Atomic/Atomic.d.ts.map +1 -1
- package/esm/Atomic/Atomic.js +1 -1
- package/esm/Atomic/Atomic.js.map +1 -1
- package/esm/Effect/Effect.d.ts +199 -0
- package/esm/Effect/Effect.d.ts.map +1 -0
- package/esm/Effect/Effect.js +50 -0
- package/esm/Effect/Effect.js.map +1 -0
- package/esm/Env/Env.d.ts.map +1 -1
- package/esm/Env/Env.js +2 -32
- package/esm/Env/Env.js.map +1 -1
- package/esm/Exit/hkt.d.ts +11 -1
- package/esm/Exit/hkt.d.ts.map +1 -1
- package/esm/Exit/hkt.js +9 -3
- package/esm/Exit/hkt.js.map +1 -1
- package/esm/Fiber/Fiber.d.ts +8 -8
- package/esm/Fiber/Fiber.d.ts.map +1 -1
- package/esm/Fiber/Fiber.js +3 -10
- package/esm/Fiber/Fiber.js.map +1 -1
- package/esm/Fiber/fromExit.d.ts +4 -0
- package/esm/Fiber/fromExit.d.ts.map +1 -0
- package/esm/Fiber/fromExit.js +12 -0
- package/esm/Fiber/fromExit.js.map +1 -0
- package/esm/Fiber/hkt.d.ts +40 -0
- package/esm/Fiber/hkt.d.ts.map +1 -0
- package/esm/Fiber/hkt.js +75 -0
- package/esm/Fiber/hkt.js.map +1 -0
- package/esm/Fiber/index.d.ts +1 -0
- package/esm/Fiber/index.d.ts.map +1 -1
- package/esm/Fiber/index.js +1 -0
- package/esm/Fiber/index.js.map +1 -1
- package/esm/FiberContext/FiberContext.d.ts +5 -7
- package/esm/FiberContext/FiberContext.d.ts.map +1 -1
- package/esm/FiberContext/FiberContext.js +3 -5
- package/esm/FiberContext/FiberContext.js.map +1 -1
- package/esm/FiberId/FiberId.d.ts +1 -1
- package/esm/FiberId/FiberId.d.ts.map +1 -1
- package/esm/FiberRef/FiberRef.d.ts +2 -18
- package/esm/FiberRef/FiberRef.d.ts.map +1 -1
- package/esm/FiberRef/FiberRef.js +1 -34
- package/esm/FiberRef/FiberRef.js.map +1 -1
- package/esm/FiberRef/builtins.d.ts +22 -0
- package/esm/FiberRef/builtins.d.ts.map +1 -0
- package/esm/FiberRef/builtins.js +67 -0
- package/esm/FiberRef/builtins.js.map +1 -0
- package/esm/FiberRef/index.d.ts.map +1 -1
- package/esm/FiberRef/index.js +0 -1
- package/esm/FiberRef/index.js.map +1 -1
- package/esm/FiberRefs/FiberRefs.d.ts +3 -1
- package/esm/FiberRefs/FiberRefs.d.ts.map +1 -1
- package/esm/FiberRefs/FiberRefs.js +5 -18
- package/esm/FiberRefs/FiberRefs.js.map +1 -1
- package/esm/FiberRuntime/FiberRuntime.d.ts +14 -14
- package/esm/FiberRuntime/FiberRuntime.d.ts.map +1 -1
- package/esm/FiberRuntime/FiberRuntime.js +160 -153
- package/esm/FiberRuntime/FiberRuntime.js.map +1 -1
- package/esm/Fx/Fx.d.ts +13 -12
- package/esm/Fx/Fx.d.ts.map +1 -1
- package/esm/Fx/Fx.js +49 -35
- package/esm/Fx/Fx.js.map +1 -1
- package/esm/Fx/Instruction.d.ts +33 -35
- package/esm/Fx/Instruction.d.ts.map +1 -1
- package/esm/Fx/Instruction.js +42 -24
- package/esm/Fx/Instruction.js.map +1 -1
- package/esm/Fx/fromLayer.d.ts +5 -0
- package/esm/Fx/fromLayer.d.ts.map +1 -0
- package/esm/Fx/fromLayer.js +6 -0
- package/esm/Fx/fromLayer.js.map +1 -0
- package/esm/Fx/index.d.ts +1 -0
- package/esm/Fx/index.d.ts.map +1 -1
- package/esm/Fx/index.js +1 -0
- package/esm/Fx/index.js.map +1 -1
- package/esm/Fx/join.d.ts +8 -2
- package/esm/Fx/join.d.ts.map +1 -1
- package/esm/Fx/join.js +6 -10
- package/esm/Fx/join.js.map +1 -1
- package/esm/Fx/logging.d.ts.map +1 -1
- package/esm/Fx/logging.js +3 -2
- package/esm/Fx/logging.js.map +1 -1
- package/esm/Fx/run.d.ts +7 -2
- package/esm/Fx/run.d.ts.map +1 -1
- package/esm/Fx/run.js +5 -0
- package/esm/Fx/run.js.map +1 -1
- package/esm/Fx/scheduler.js +1 -1
- package/esm/Fx/scheduler.js.map +1 -1
- package/esm/Fx/scoped.d.ts +5 -5
- package/esm/Fx/scoped.d.ts.map +1 -1
- package/esm/Fx/scoped.js +7 -20
- package/esm/Fx/scoped.js.map +1 -1
- package/esm/Layer/Layer.d.ts +1 -0
- package/esm/Layer/Layer.d.ts.map +1 -1
- package/esm/Layer/Layer.js +5 -0
- package/esm/Layer/Layer.js.map +1 -1
- package/esm/Logger/Console.d.ts.map +1 -1
- package/esm/Logger/Console.js +22 -17
- package/esm/Logger/Console.js.map +1 -1
- package/esm/Logger/Logger.d.ts +2 -1
- package/esm/Logger/Logger.d.ts.map +1 -1
- package/esm/Logger/Logger.js +2 -2
- package/esm/Logger/Logger.js.map +1 -1
- package/esm/Node/Runtime.d.ts +9 -0
- package/esm/Node/Runtime.d.ts.map +1 -0
- package/esm/Node/Runtime.js +17 -0
- package/esm/Node/Runtime.js.map +1 -0
- package/esm/Node/gracefulShutdown.d.ts +5 -0
- package/esm/Node/gracefulShutdown.d.ts.map +1 -0
- package/esm/Node/gracefulShutdown.js +36 -0
- package/esm/Node/gracefulShutdown.js.map +1 -0
- package/esm/Node/index.d.ts +3 -0
- package/esm/Node/index.d.ts.map +1 -0
- package/esm/Node/index.js +3 -0
- package/esm/Node/index.js.map +1 -0
- package/esm/Platform/Platform.d.ts +4 -2
- package/esm/Platform/Platform.d.ts.map +1 -1
- package/esm/Platform/Platform.js +5 -3
- package/esm/Platform/Platform.js.map +1 -1
- package/esm/Runtime/Runtime.d.ts +4 -4
- package/esm/Runtime/Runtime.d.ts.map +1 -1
- package/esm/Runtime/Runtime.js +1 -1
- package/esm/Runtime/Runtime.js.map +1 -1
- package/esm/Scheduler/RootScheduler.d.ts.map +1 -1
- package/esm/Scheduler/RootScheduler.js +7 -6
- package/esm/Scheduler/RootScheduler.js.map +1 -1
- package/esm/Scheduler/Scheduler.d.ts +3 -2
- package/esm/Scheduler/Scheduler.d.ts.map +1 -1
- package/esm/Scheduler/Scheduler.js.map +1 -1
- package/esm/Scheduler/index.d.ts +2 -0
- package/esm/Scheduler/index.d.ts.map +1 -1
- package/esm/Scheduler/index.js +2 -1
- package/esm/Scheduler/index.js.map +1 -1
- package/esm/Scheduler/{scheduled.d.ts → runSchedule.d.ts} +2 -2
- package/esm/Scheduler/runSchedule.d.ts.map +1 -0
- package/esm/Scheduler/{scheduled.js → runSchedule.js} +3 -3
- package/esm/Scheduler/runSchedule.js.map +1 -0
- package/esm/Scope/LocalScope.d.ts.map +1 -1
- package/esm/Scope/LocalScope.js +5 -11
- package/esm/Scope/LocalScope.js.map +1 -1
- package/esm/Scope/ReleaseMap.d.ts +3 -3
- package/esm/Scope/ReleaseMap.d.ts.map +1 -1
- package/esm/Scope/ReleaseMap.js +23 -9
- package/esm/Scope/ReleaseMap.js.map +1 -1
- package/esm/Semaphore/Semaphore.d.ts +2 -1
- package/esm/Semaphore/Semaphore.d.ts.map +1 -1
- package/esm/Semaphore/Semaphore.js +16 -25
- package/esm/Semaphore/Semaphore.js.map +1 -1
- package/esm/Service/Id.d.ts +12 -1
- package/esm/Service/Id.d.ts.map +1 -1
- package/esm/Service/Id.js +12 -2
- package/esm/Service/Id.js.map +1 -1
- package/esm/Service/fn.d.ts +47 -0
- package/esm/Service/fn.d.ts.map +1 -0
- package/esm/Service/fn.js +15 -0
- package/esm/Service/fn.js.map +1 -0
- package/esm/Service/index.d.ts +1 -0
- package/esm/Service/index.d.ts.map +1 -1
- package/esm/Service/index.js +1 -0
- package/esm/Service/index.js.map +1 -1
- package/esm/Service/tagged.d.ts +10 -2
- package/esm/Service/tagged.d.ts.map +1 -1
- package/esm/Sink/Sink.d.ts +5 -5
- package/esm/Sink/Sink.d.ts.map +1 -1
- package/esm/Sink/Sink.js +12 -8
- package/esm/Sink/Sink.js.map +1 -1
- package/esm/Stream/Stream.d.ts +39 -6
- package/esm/Stream/Stream.d.ts.map +1 -1
- package/esm/Stream/Stream.js.map +1 -1
- package/esm/Stream/bimap.d.ts +15 -0
- package/esm/Stream/bimap.d.ts.map +1 -0
- package/esm/Stream/bimap.js +46 -0
- package/esm/Stream/bimap.js.map +1 -0
- package/esm/Stream/continueWith.d.ts +27 -0
- package/esm/Stream/continueWith.d.ts.map +1 -0
- package/esm/Stream/continueWith.js +36 -0
- package/esm/Stream/continueWith.js.map +1 -0
- package/esm/Stream/drain.d.ts +3 -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 +3 -0
- package/esm/Stream/empty.d.ts.map +1 -0
- package/esm/Stream/empty.js +5 -0
- package/esm/Stream/empty.js.map +1 -0
- package/esm/Stream/flatMap.d.ts +15 -0
- package/esm/Stream/flatMap.d.ts.map +1 -0
- package/esm/Stream/flatMap.js +74 -0
- package/esm/Stream/flatMap.js.map +1 -0
- package/esm/Stream/flatMapFx.d.ts +4 -0
- package/esm/Stream/flatMapFx.d.ts.map +1 -0
- package/esm/Stream/flatMapFx.js +7 -0
- package/esm/Stream/flatMapFx.js.map +1 -0
- package/esm/Stream/fromCallback.d.ts +21 -0
- package/esm/Stream/fromCallback.d.ts.map +1 -0
- package/esm/Stream/fromCallback.js +37 -0
- package/esm/Stream/fromCallback.js.map +1 -0
- package/esm/Stream/fromFx.d.ts +12 -1
- package/esm/Stream/fromFx.d.ts.map +1 -1
- package/esm/Stream/fromFx.js +16 -2
- package/esm/Stream/fromFx.js.map +1 -1
- package/esm/Stream/hkt.d.ts +15 -0
- package/esm/Stream/hkt.d.ts.map +1 -0
- package/esm/Stream/hkt.js +16 -0
- package/esm/Stream/hkt.js.map +1 -0
- package/esm/Stream/index.d.ts +11 -0
- package/esm/Stream/index.d.ts.map +1 -1
- package/esm/Stream/index.js +11 -0
- package/esm/Stream/index.js.map +1 -1
- package/esm/Stream/map.d.ts +14 -0
- package/esm/Stream/map.d.ts.map +1 -0
- package/esm/Stream/map.js +25 -0
- package/esm/Stream/map.js.map +1 -0
- package/esm/Stream/periodic.d.ts +4 -0
- package/esm/Stream/periodic.d.ts.map +1 -0
- package/esm/Stream/periodic.js +5 -0
- package/esm/Stream/periodic.js.map +1 -0
- package/esm/Stream/run.d.ts +6 -0
- package/esm/Stream/run.d.ts.map +1 -0
- package/esm/Stream/run.js +9 -0
- package/esm/Stream/run.js.map +1 -0
- package/esm/Stream/scheduled.d.ts +5 -0
- package/esm/Stream/scheduled.d.ts.map +1 -0
- package/esm/Stream/scheduled.js +7 -0
- package/esm/Stream/scheduled.js.map +1 -0
- package/esm/Stream/tap.d.ts +4 -0
- package/esm/Stream/tap.d.ts.map +1 -0
- package/esm/Stream/tap.js +5 -0
- package/esm/Stream/tap.js.map +1 -0
- package/esm/Supervisor/Supervisor.d.ts +507 -0
- package/esm/Supervisor/Supervisor.d.ts.map +1 -1
- package/esm/Supervisor/Supervisor.js +2 -1
- package/esm/Supervisor/Supervisor.js.map +1 -1
- package/esm/Supervisor/index.d.ts +1 -0
- package/esm/Supervisor/index.d.ts.map +1 -1
- package/esm/Supervisor/index.js +1 -0
- package/esm/Supervisor/index.js.map +1 -1
- package/esm/Supervisor/maxFailures.d.ts +18 -0
- package/esm/Supervisor/maxFailures.d.ts.map +1 -0
- package/esm/Supervisor/maxFailures.js +45 -0
- package/esm/Supervisor/maxFailures.js.map +1 -0
- package/esm/Supervisor/trackIn.d.ts +6 -0
- package/esm/Supervisor/trackIn.d.ts.map +1 -0
- package/esm/Supervisor/trackIn.js +12 -0
- package/esm/Supervisor/trackIn.js.map +1 -0
- package/esm/Trace/Trace.d.ts +1 -1
- package/esm/Trace/Trace.d.ts.map +1 -1
- package/esm/Trace/Trace.js +8 -35
- package/esm/Trace/Trace.js.map +1 -1
- package/esm/Tracing/plugin.d.ts.map +1 -1
- package/esm/Tracing/plugin.js +30 -0
- package/esm/Tracing/plugin.js.map +1 -1
- package/esm/_internal/suite.d.ts +12 -0
- package/esm/_internal/suite.d.ts.map +1 -0
- package/esm/_internal/suite.js +8 -0
- package/esm/_internal/suite.js.map +1 -0
- package/esm/index.d.ts +3 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +6 -2
- package/esm/index.js.map +1 -1
- package/package.json +269 -38
- package/readme.md +1 -2
- package/src/Atomic/Atomic.test.ts +33 -0
- package/src/Atomic/Atomic.ts +3 -3
- package/src/Effect/Effect.ts +109 -0
- package/src/Env/Env.ts +3 -51
- package/src/Exit/hkt.ts +18 -3
- package/src/Fiber/Fiber.ts +17 -16
- package/src/Fiber/fromExit.ts +14 -0
- package/src/Fiber/hkt.ts +125 -0
- package/src/Fiber/index.ts +1 -0
- package/src/FiberContext/FiberContext.ts +17 -16
- package/src/FiberId/FiberId.ts +1 -1
- package/src/FiberRef/FiberRef.ts +3 -63
- package/src/FiberRef/builtins.ts +114 -0
- package/src/FiberRef/index.ts +0 -1
- package/src/FiberRefs/FiberRefs.ts +11 -26
- package/src/FiberRuntime/FiberRuntime.ts +263 -245
- package/src/Fx/Fx.test.ts +52 -31
- package/src/Fx/Fx.ts +58 -34
- package/src/Fx/Instruction.ts +103 -60
- package/src/Fx/fromLayer.ts +8 -0
- package/src/Fx/index.ts +1 -0
- package/src/Fx/join.ts +23 -10
- package/src/Fx/logging.ts +5 -2
- package/src/Fx/run.ts +7 -1
- package/src/Fx/scheduler.ts +1 -1
- package/src/Fx/scoped.ts +35 -46
- package/src/Layer/Layer.ts +11 -5
- package/src/Logger/Console.test.ts +9 -5
- package/src/Logger/Console.ts +32 -17
- package/src/Logger/Logger.ts +4 -2
- package/src/Node/Runtime.ts +26 -0
- package/src/Node/gracefulShutdown.ts +54 -0
- package/src/Node/index.ts +2 -0
- package/src/Platform/Platform.ts +11 -5
- package/src/Runtime/Runtime.ts +7 -5
- package/src/Scheduler/RootScheduler.ts +18 -10
- package/src/Scheduler/Scheduler.ts +12 -5
- package/src/Scheduler/index.ts +2 -0
- package/src/Scheduler/{scheduled.ts → runSchedule.ts} +1 -1
- package/src/Scope/Closeable.test.ts +5 -1
- package/src/Scope/LocalScope.ts +13 -12
- package/src/Scope/ReleaseMap.ts +27 -9
- package/src/Semaphore/Semaphore.ts +28 -29
- package/src/Service/Id.ts +34 -2
- package/src/Service/fn.ts +41 -0
- package/src/Service/index.ts +1 -0
- package/src/Sink/Sink.ts +35 -21
- package/src/Stream/Stream.ts +43 -7
- package/src/Stream/_internal.test.ts +12 -0
- package/src/Stream/bimap.ts +59 -0
- package/src/Stream/continueWith.test.ts +23 -0
- package/src/Stream/continueWith.ts +65 -0
- package/src/Stream/drain.ts +15 -29
- package/src/Stream/empty.ts +8 -0
- package/src/Stream/flatMap.test.ts +43 -0
- package/src/Stream/flatMap.ts +102 -0
- package/src/Stream/flatMapFx.ts +12 -0
- package/src/Stream/fromCallback.test.ts +35 -0
- package/src/Stream/fromCallback.ts +65 -0
- package/src/Stream/fromFx.test.ts +3 -4
- package/src/Stream/fromFx.ts +34 -16
- package/src/Stream/hkt.ts +36 -0
- package/src/Stream/index.ts +11 -0
- package/src/Stream/logging.test.ts +24 -0
- package/src/Stream/map.ts +35 -0
- package/src/Stream/periodic.ts +9 -0
- package/src/Stream/run.ts +14 -0
- package/src/Stream/scheduled.test.ts +34 -0
- package/src/Stream/scheduled.ts +21 -0
- package/src/Stream/tap.ts +21 -0
- package/src/Supervisor/Supervisor.ts +14 -0
- package/src/Supervisor/index.ts +1 -0
- package/src/Supervisor/maxFailures.ts +86 -0
- package/src/Supervisor/trackIn.ts +33 -0
- package/src/Trace/Trace.ts +11 -45
- package/src/Tracing/plugin.ts +44 -0
- package/src/_internal/suite.ts +24 -0
- package/src/index.ts +3 -1
- package/cjs/Ref/Ref.d.ts +0 -40
- package/cjs/Ref/Ref.d.ts.map +0 -1
- package/cjs/Ref/Ref.js.map +0 -1
- package/cjs/Ref/atomic.d.ts +0 -5
- package/cjs/Ref/atomic.d.ts.map +0 -1
- package/cjs/Ref/atomic.js +0 -20
- package/cjs/Ref/atomic.js.map +0 -1
- package/cjs/Ref/index.d.ts +0 -3
- package/cjs/Ref/index.d.ts.map +0 -1
- package/cjs/Ref/index.js.map +0 -1
- package/cjs/Scheduler/scheduled.d.ts.map +0 -1
- package/cjs/Scheduler/scheduled.js.map +0 -1
- package/cjs/internal.d.ts +0 -18
- package/cjs/internal.d.ts.map +0 -1
- package/cjs/internal.js +0 -3
- package/cjs/internal.js.map +0 -1
- package/coverage/tmp/coverage-74826-1660784295157-0.json +0 -1
- package/coverage/tmp/coverage-74830-1660784295115-0.json +0 -1
- package/coverage/tmp/coverage-74836-1660784295074-0.json +0 -1
- package/esm/Ref/Ref.d.ts +0 -40
- package/esm/Ref/Ref.d.ts.map +0 -1
- package/esm/Ref/Ref.js +0 -30
- package/esm/Ref/Ref.js.map +0 -1
- package/esm/Ref/atomic.d.ts +0 -5
- package/esm/Ref/atomic.d.ts.map +0 -1
- package/esm/Ref/atomic.js +0 -16
- package/esm/Ref/atomic.js.map +0 -1
- package/esm/Ref/index.d.ts +0 -3
- package/esm/Ref/index.d.ts.map +0 -1
- package/esm/Ref/index.js +0 -3
- package/esm/Ref/index.js.map +0 -1
- package/esm/Scheduler/scheduled.d.ts.map +0 -1
- package/esm/Scheduler/scheduled.js.map +0 -1
- package/esm/internal.d.ts +0 -18
- package/esm/internal.d.ts.map +0 -1
- package/esm/internal.js +0 -2
- package/esm/internal.js.map +0 -1
- package/src/Ref/Ref.test.ts +0 -34
- package/src/Ref/Ref.ts +0 -76
- package/src/Ref/atomic.ts +0 -33
- package/src/Ref/index.ts +0 -2
- package/src/internal.ts +0 -33
|
@@ -10,18 +10,19 @@ import { AtomicCounter, decrement } from '@/Atomic/AtomicCounter.js'
|
|
|
10
10
|
import * as Cause from '@/Cause/Cause.js'
|
|
11
11
|
import { prettyPrint } from '@/Cause/Renderer.js'
|
|
12
12
|
import { Disposable, Settable, settable } from '@/Disposable/Disposable.js'
|
|
13
|
-
import * as Env from '@/Env/Env.js'
|
|
14
13
|
import * as Exit from '@/Exit/Exit.js'
|
|
15
14
|
import * as Fiber from '@/Fiber/Fiber.js'
|
|
16
15
|
import { FiberContext } from '@/FiberContext/FiberContext.js'
|
|
17
16
|
import * as FiberId from '@/FiberId/FiberId.js'
|
|
18
17
|
import * as FiberRef from '@/FiberRef/FiberRef.js'
|
|
18
|
+
import * as Builtin from '@/FiberRef/builtins.js'
|
|
19
19
|
import * as FiberRefs from '@/FiberRefs/FiberRefs.js'
|
|
20
20
|
import { Done, FiberStatus, Running, Suspended } from '@/FiberStatus/index.js'
|
|
21
21
|
import { Pending, addObserver, complete, wait } from '@/Future/index.js'
|
|
22
22
|
import * as Fx from '@/Fx/Fx.js'
|
|
23
23
|
import { AnyInstruction } from '@/Fx/Instruction.js'
|
|
24
|
-
import {
|
|
24
|
+
import { join } from '@/Fx/join.js'
|
|
25
|
+
import { closeOrWait } from '@/Scope/Closeable.js'
|
|
25
26
|
import { Semaphore, acquireFiber } from '@/Semaphore/Semaphore.js'
|
|
26
27
|
import { Stack } from '@/Stack/index.js'
|
|
27
28
|
import { Supervisor, isNone } from '@/Supervisor/Supervisor.js'
|
|
@@ -53,7 +54,6 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
53
54
|
protected _frames: Array<Frame> = []
|
|
54
55
|
|
|
55
56
|
protected _processors: Processors = {
|
|
56
|
-
Access: this.processAccess.bind(this),
|
|
57
57
|
AddTrace: this.processAddTrace.bind(this),
|
|
58
58
|
Both: this.processBoth.bind(this),
|
|
59
59
|
DeleteFiberRef: this.processDeleteFiberRef.bind(this),
|
|
@@ -63,6 +63,7 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
63
63
|
Fork: this.processFork.bind(this),
|
|
64
64
|
FromCause: this.processFromCause.bind(this),
|
|
65
65
|
FromLazy: this.processFromLazy.bind(this),
|
|
66
|
+
GetEnv: this.processGetEnv.bind(this),
|
|
66
67
|
GetFiberContext: () => this.continueWith(this.context),
|
|
67
68
|
GetFiberRef: this.processGetFiberRef.bind(this),
|
|
68
69
|
GetInterruptStatus: this.processGetInterruptStatus.bind(this),
|
|
@@ -80,7 +81,7 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
80
81
|
Wait: this.processWait.bind(this),
|
|
81
82
|
}
|
|
82
83
|
|
|
83
|
-
constructor(readonly fx: F, readonly context: FiberContext = FiberContext()) {
|
|
84
|
+
constructor(readonly fx: F, readonly context: FiberContext<FiberId.Live> = FiberContext()) {
|
|
84
85
|
// All Fibers start Suspended
|
|
85
86
|
this._status = Suspended(this.getInterruptStatus)
|
|
86
87
|
|
|
@@ -92,7 +93,15 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
92
93
|
readonly id: FiberId.Live = this.context.id
|
|
93
94
|
readonly status = Fx.fromLazy(() => this._status)
|
|
94
95
|
readonly trace = Fx.fromLazy(() => this.getCurrentTrace())
|
|
95
|
-
readonly exit = Fx.lazy(() =>
|
|
96
|
+
readonly exit = Fx.lazy(() => {
|
|
97
|
+
if (this._status.tag === 'Done') {
|
|
98
|
+
return Fx.now(this._status.exit)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const future = Pending<never, never, Exit.Exit<Fx.ErrorsOf<F>, Fx.OutputOf<F>>>()
|
|
102
|
+
this.addObserver(flow(Fx.now, complete(future)))
|
|
103
|
+
return wait(future)
|
|
104
|
+
})
|
|
96
105
|
|
|
97
106
|
/**
|
|
98
107
|
* Start running this Fiber synchronously. It can potentially exit BEFORE being able to cancel it.
|
|
@@ -123,24 +132,21 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
123
132
|
|
|
124
133
|
readonly interruptAs = (id: FiberId.FiberId): Fx.Of<Exit.Exit<Fx.ErrorsOf<F>, Fx.OutputOf<F>>> =>
|
|
125
134
|
Fx.lazy(() => {
|
|
126
|
-
if (this._status.tag === 'Done') {
|
|
127
|
-
return Fx.now(this._status.exit)
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
const future = Pending<never, never, Exit.Exit<Fx.ErrorsOf<F>, Fx.OutputOf<F>>>()
|
|
131
|
-
this.addObserver((exit) => complete(future)(Fx.now(exit)))
|
|
132
|
-
|
|
133
135
|
if (this.getInterruptStatus()) {
|
|
134
136
|
// Immediately interrupt the Fiber
|
|
135
137
|
this._disposable.dispose()
|
|
136
138
|
this._disposable = settable()
|
|
137
|
-
this.
|
|
139
|
+
this._current = Maybe.Just(Fx.interrupted(id).instr)
|
|
140
|
+
|
|
141
|
+
if (this._status.tag === 'Suspended') {
|
|
142
|
+
this.setTimer(() => this.loop())
|
|
143
|
+
}
|
|
138
144
|
} else {
|
|
139
145
|
// Record the interrupting FiberId for if/when the interrupt status becomes true again.
|
|
140
146
|
this._interruptedBy.add(id)
|
|
141
147
|
}
|
|
142
148
|
|
|
143
|
-
return
|
|
149
|
+
return this.exit
|
|
144
150
|
})
|
|
145
151
|
|
|
146
152
|
// Start of Internals
|
|
@@ -169,7 +175,7 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
169
175
|
|
|
170
176
|
while (Maybe.isJust(this._current)) {
|
|
171
177
|
try {
|
|
172
|
-
this.
|
|
178
|
+
this.step(this._current.value)
|
|
173
179
|
} catch (e) {
|
|
174
180
|
this.uncaughtException(e)
|
|
175
181
|
}
|
|
@@ -178,63 +184,72 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
178
184
|
this.suspended()
|
|
179
185
|
}
|
|
180
186
|
|
|
181
|
-
protected
|
|
187
|
+
protected step(instr: AnyInstruction) {
|
|
182
188
|
// Yield when too many synchronous operations have occurred
|
|
183
189
|
if (decrement(this._opCountRemaining) === 0) {
|
|
184
|
-
this.
|
|
185
|
-
this._current = Maybe.Nothing
|
|
186
|
-
|
|
187
|
-
return this.setTimer(() => {
|
|
188
|
-
this._current = Maybe.Just(instr)
|
|
189
|
-
this.loop()
|
|
190
|
-
})
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
if (instr.__trace) {
|
|
194
|
-
this.pushPopFiberRef(FiberRef.CurrentTrace, Trace.Trace.custom(instr.__trace))
|
|
190
|
+
return this.yieldNow(instr)
|
|
195
191
|
}
|
|
196
192
|
|
|
193
|
+
this.addCustomTrace(instr.__trace)
|
|
197
194
|
this.withSupervisor((s) => s.onInstruction(this, instr))
|
|
198
195
|
;(this._processors[instr.tag] as (i: typeof instr) => void)(instr)
|
|
199
196
|
}
|
|
200
197
|
|
|
201
|
-
protected
|
|
202
|
-
this.
|
|
198
|
+
protected yieldNow(instr: AnyInstruction) {
|
|
199
|
+
this._opCountRemaining.set(this._opCountRemaining.initial)
|
|
200
|
+
this._current = Maybe.Nothing
|
|
201
|
+
|
|
202
|
+
return this.setTimer(() => {
|
|
203
|
+
this._current = Maybe.Just(instr)
|
|
204
|
+
this.loop()
|
|
205
|
+
})
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
protected addCustomTrace(trace?: string) {
|
|
209
|
+
if (trace) {
|
|
210
|
+
this.pushPopFiberRef(Builtin.CurrentTrace, Trace.Trace.custom(trace))
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
215
|
+
protected processGetEnv(_: Extract<AnyInstruction, { readonly tag: 'GetEnv' }>) {
|
|
216
|
+
this.withFiberRef(Builtin.CurrentEnv, (stack) => Fx.now(stack.value))
|
|
203
217
|
}
|
|
204
218
|
|
|
205
219
|
protected processAddTrace(instr: Extract<AnyInstruction, { readonly tag: 'AddTrace' }>) {
|
|
206
|
-
this.pushPopFiberRef(
|
|
220
|
+
this.pushPopFiberRef(Builtin.CurrentTrace, Trace.concat(instr.trace, this.getRuntimeTrace()))
|
|
207
221
|
this._current = Maybe.Just(instr.fx.instr)
|
|
208
222
|
}
|
|
209
223
|
|
|
210
224
|
protected processBoth(instr: Extract<AnyInstruction, { readonly tag: 'Both' }>) {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
)
|
|
214
|
-
const f = new FiberRuntime(
|
|
215
|
-
withConcurrency(instr.first),
|
|
216
|
-
this.context.fork({ fiberRefs: this.context.fiberRefs }),
|
|
217
|
-
)
|
|
218
|
-
const s = new FiberRuntime(
|
|
219
|
-
withConcurrency(instr.second),
|
|
220
|
-
this.context.fork({ fiberRefs: this.context.fiberRefs }),
|
|
221
|
-
)
|
|
225
|
+
this.withFiberRef(Builtin.CurrentConcurrencyLevel, (semaphore) => {
|
|
226
|
+
const withConcurrency = acquireFiber(semaphore.value)
|
|
222
227
|
|
|
223
|
-
|
|
228
|
+
const f = new FiberRuntime(
|
|
229
|
+
withConcurrency(instr.first),
|
|
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
|
+
)
|
|
224
236
|
|
|
225
|
-
|
|
226
|
-
inner.add(this._disposable.add(f.addObserver((exit) => onExit(exit, 0))))
|
|
227
|
-
inner.add(this._disposable.add(s.addObserver((exit) => onExit(exit, 1))))
|
|
237
|
+
const [future, onExit] = bothFuture(f, s)
|
|
228
238
|
|
|
229
|
-
|
|
230
|
-
|
|
239
|
+
const inner = settable()
|
|
240
|
+
|
|
241
|
+
inner.add(f.addObserver((exit) => onExit(exit, 0)))
|
|
242
|
+
inner.add(s.addObserver((exit) => onExit(exit, 1)))
|
|
243
|
+
inner.add(this._disposable.add(inner))
|
|
244
|
+
|
|
245
|
+
f.startSync()
|
|
246
|
+
s.startSync()
|
|
247
|
+
|
|
248
|
+
return pipe(
|
|
231
249
|
wait(future),
|
|
232
250
|
Fx.ensuring(() => Fx.fromLazy(() => inner.dispose())),
|
|
233
|
-
)
|
|
234
|
-
)
|
|
235
|
-
|
|
236
|
-
f.startSync()
|
|
237
|
-
s.startSync()
|
|
251
|
+
)
|
|
252
|
+
})
|
|
238
253
|
}
|
|
239
254
|
|
|
240
255
|
protected processDeleteFiberRef(
|
|
@@ -250,36 +265,40 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
250
265
|
}
|
|
251
266
|
|
|
252
267
|
protected processEither(instr: Extract<AnyInstruction, { readonly tag: 'Either' }>) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
268
|
+
this.withFiberRef(Builtin.CurrentConcurrencyLevel, (semaphore) => {
|
|
269
|
+
const withConcurrency = acquireFiber(semaphore.value)
|
|
270
|
+
const f = new FiberRuntime(
|
|
271
|
+
withConcurrency(instr.first),
|
|
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
|
+
)
|
|
261
278
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
279
|
+
const inner = settable()
|
|
280
|
+
const future = Pending<never, any, any>()
|
|
281
|
+
const onExit = (exit: Exit.Exit<Fx.ErrorsOf<F>, any>, index: 0 | 1) => {
|
|
282
|
+
complete(future)(
|
|
283
|
+
pipe(
|
|
284
|
+
Fx.fromExit(exit),
|
|
285
|
+
Fx.ensuring(() =>
|
|
286
|
+
index === 0 ? s.interruptAs(f.context.id) : f.interruptAs(s.context.id),
|
|
287
|
+
),
|
|
270
288
|
),
|
|
271
|
-
)
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
}
|
|
289
|
+
)
|
|
290
|
+
inner.dispose()
|
|
291
|
+
}
|
|
275
292
|
|
|
276
|
-
|
|
277
|
-
|
|
293
|
+
inner.add(f.addObserver((exit) => onExit(pipe(exit, Either.map(Either.Left)), 0)))
|
|
294
|
+
inner.add(s.addObserver((exit) => onExit(pipe(exit, Either.map(Either.Right)), 1)))
|
|
295
|
+
inner.add(this._disposable.add(inner))
|
|
278
296
|
|
|
279
|
-
|
|
297
|
+
f.startSync()
|
|
298
|
+
s.startSync()
|
|
280
299
|
|
|
281
|
-
|
|
282
|
-
|
|
300
|
+
return wait(future)
|
|
301
|
+
})
|
|
283
302
|
}
|
|
284
303
|
|
|
285
304
|
protected processFiberRefLocally(
|
|
@@ -295,22 +314,39 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
295
314
|
}
|
|
296
315
|
|
|
297
316
|
protected processFork(instr: Extract<AnyInstruction, { readonly tag: 'Fork' }>) {
|
|
298
|
-
const
|
|
317
|
+
const child = new FiberRuntime(instr.fx, instr.context)
|
|
299
318
|
|
|
300
|
-
this._children.push(
|
|
301
|
-
|
|
302
|
-
|
|
319
|
+
this._children.push(child)
|
|
320
|
+
|
|
321
|
+
child._disposable.add(
|
|
322
|
+
Disposable(() => {
|
|
323
|
+
const i = this._children.indexOf(child)
|
|
324
|
+
if (i > -1) {
|
|
325
|
+
this._children.splice(i, 1)
|
|
326
|
+
}
|
|
327
|
+
}),
|
|
303
328
|
)
|
|
304
329
|
|
|
305
330
|
// All Child fibers should be started asynchronously to ensure they are capable of
|
|
306
331
|
// being interrupted *before* any work has been started and could steal the thread.
|
|
307
|
-
|
|
332
|
+
child.startAsync()
|
|
308
333
|
|
|
309
|
-
this.continueWith(
|
|
334
|
+
this.continueWith(child)
|
|
310
335
|
}
|
|
311
336
|
|
|
312
337
|
protected processFromCause(instr: Extract<AnyInstruction, { readonly tag: 'FromCause' }>) {
|
|
313
|
-
|
|
338
|
+
if (instr.cause.tag === 'Interrupted' && this._children.length > 0) {
|
|
339
|
+
const fiberId = instr.cause.fiberId
|
|
340
|
+
const interrupts = this._children.map((c) => c.interruptAs(fiberId))
|
|
341
|
+
this._children = []
|
|
342
|
+
|
|
343
|
+
// Cancel all Child Fibers and then continue with the Cause
|
|
344
|
+
this._current = Maybe.Just(
|
|
345
|
+
Fx.flatMap(() => Fx.fromCause(instr.cause))(Fx.fork(Fx.zipAll(interrupts))).instr,
|
|
346
|
+
)
|
|
347
|
+
} else {
|
|
348
|
+
this.unwindStack(instr.cause)
|
|
349
|
+
}
|
|
314
350
|
}
|
|
315
351
|
|
|
316
352
|
protected processFromLazy(instr: Extract<AnyInstruction, { readonly tag: 'FromLazy' }>) {
|
|
@@ -318,28 +354,7 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
318
354
|
}
|
|
319
355
|
|
|
320
356
|
protected processGetFiberRef(instr: Extract<AnyInstruction, { readonly tag: 'GetFiberRef' }>) {
|
|
321
|
-
|
|
322
|
-
instr.fiberRef as FiberRef.FiberRef<any, any, any>,
|
|
323
|
-
)(this.context.fiberRefs)
|
|
324
|
-
|
|
325
|
-
if (Maybe.isJust(current)) {
|
|
326
|
-
return this.continueWith(current.value)
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
this.pushFrame(
|
|
330
|
-
ValueFrame((a) =>
|
|
331
|
-
Fx.fromLazy(() => {
|
|
332
|
-
FiberRefs.setFiberRef(
|
|
333
|
-
instr.fiberRef as FiberRef.FiberRef<any, any, any>,
|
|
334
|
-
a,
|
|
335
|
-
)(this.context.fiberRefs)
|
|
336
|
-
|
|
337
|
-
return a
|
|
338
|
-
}),
|
|
339
|
-
),
|
|
340
|
-
)
|
|
341
|
-
|
|
342
|
-
this._current = Maybe.Just(instr.fiberRef.initial.instr)
|
|
357
|
+
this.withFiberRef(instr.fiberRef, (s) => Fx.now(s.value))
|
|
343
358
|
}
|
|
344
359
|
|
|
345
360
|
protected processGetInterruptStatus(
|
|
@@ -351,6 +366,7 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
351
366
|
|
|
352
367
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
353
368
|
protected processGetTrace(_: Extract<AnyInstruction, { readonly tag: 'GetTrace' }>) {
|
|
369
|
+
this.pushPopFiberRef(Builtin.CurrentTrace, this.getRuntimeTrace())
|
|
354
370
|
this.continueWith(this.getCurrentTrace())
|
|
355
371
|
}
|
|
356
372
|
|
|
@@ -359,47 +375,25 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
359
375
|
}
|
|
360
376
|
|
|
361
377
|
protected processMap(instr: Extract<AnyInstruction, { readonly tag: 'Map' }>) {
|
|
362
|
-
this.pushFrame(ValueFrame((
|
|
378
|
+
this.pushFrame(ValueFrame(flow(instr.f, Fx.now)))
|
|
363
379
|
this._current = Maybe.Just(instr.fx.instr)
|
|
364
380
|
}
|
|
365
381
|
|
|
366
382
|
protected processMatch(instr: Extract<AnyInstruction, { readonly tag: 'Match' }>) {
|
|
367
|
-
this.pushFrame(ExitFrame(Either.match(instr.onLeft
|
|
383
|
+
this.pushFrame(ExitFrame(Either.match(instr.onLeft, instr.onRight)))
|
|
368
384
|
this._current = Maybe.Just(instr.fx.instr)
|
|
369
385
|
}
|
|
370
386
|
|
|
371
387
|
protected processModifyFiberRef(
|
|
372
388
|
instr: Extract<AnyInstruction, { readonly tag: 'ModifyFiberRef' }>,
|
|
373
389
|
) {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
if (Maybe.isJust(current)) {
|
|
378
|
-
const [b, a] = instr.modify(current.value)
|
|
379
|
-
|
|
380
|
-
FiberRefs.setFiberRef(ref, a)(this.context.fiberRefs)
|
|
390
|
+
this.withFiberRef(instr.fiberRef, (stack) => {
|
|
391
|
+
const [b, a] = instr.modify(stack.value)
|
|
381
392
|
|
|
382
|
-
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
this.pushFrame(
|
|
386
|
-
ValueFrame((i) =>
|
|
387
|
-
Fx.fromLazy(() => {
|
|
388
|
-
const [b, a] = instr.modify(i)
|
|
393
|
+
FiberRefs.setFiberRef(instr.fiberRef, a)(this.context.fiberRefs)
|
|
389
394
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
return b
|
|
393
|
-
}),
|
|
394
|
-
),
|
|
395
|
-
)
|
|
396
|
-
|
|
397
|
-
this._current = Maybe.Just(
|
|
398
|
-
pipe(
|
|
399
|
-
FiberRefs.maybeGetFiberRefValue(ref)(this.context.fiberRefs),
|
|
400
|
-
Maybe.match(() => instr.fiberRef.initial, Fx.now),
|
|
401
|
-
).instr,
|
|
402
|
-
)
|
|
395
|
+
return Fx.now(b)
|
|
396
|
+
})
|
|
403
397
|
}
|
|
404
398
|
|
|
405
399
|
protected processNow(instr: Extract<AnyInstruction, { readonly tag: 'Now' }>) {
|
|
@@ -407,98 +401,91 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
407
401
|
}
|
|
408
402
|
|
|
409
403
|
protected processProvide(instr: Extract<AnyInstruction, { readonly tag: 'Provide' }>) {
|
|
410
|
-
this.pushPopFiberRef(
|
|
404
|
+
this.pushPopFiberRef(Builtin.CurrentEnv, instr.env)
|
|
411
405
|
this._current = Maybe.Just(instr.fx.instr)
|
|
412
406
|
}
|
|
413
407
|
|
|
414
408
|
protected processProvideLayer(instr: Extract<AnyInstruction, { readonly tag: 'ProvideLayer' }>) {
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
yield* unwindStack(cause)
|
|
438
|
-
|
|
439
|
-
return yield* Fx.never
|
|
440
|
-
}
|
|
409
|
+
this.withFiberRef(Builtin.Layers, (layers) => {
|
|
410
|
+
const layer = instr.layer
|
|
411
|
+
const context = this.context
|
|
412
|
+
|
|
413
|
+
const unwindStack = (cause: Cause.AnyCause): Fx.Of<any> =>
|
|
414
|
+
this._status.tag === 'Done'
|
|
415
|
+
? context.scope.state.tag === 'Open'
|
|
416
|
+
? context.scope.close(Either.Left(cause))
|
|
417
|
+
: Fx.fromLazy(() => this.reportFailure(cause))
|
|
418
|
+
: Fx.fromLazy(() => this.unwindStack(cause))
|
|
419
|
+
|
|
420
|
+
const provider = pipe(
|
|
421
|
+
Fx.uninterruptable(layer.build(context.scope)),
|
|
422
|
+
Fx.orElseCause((cause) =>
|
|
423
|
+
cause.tag === 'Expected'
|
|
424
|
+
? pipe(
|
|
425
|
+
unwindStack(cause),
|
|
426
|
+
Fx.flatMap(() => Fx.never),
|
|
427
|
+
)
|
|
428
|
+
: Fx.fromCause(cause),
|
|
429
|
+
),
|
|
430
|
+
)
|
|
441
431
|
|
|
442
|
-
|
|
443
|
-
|
|
432
|
+
return pipe(
|
|
433
|
+
instr.fx,
|
|
434
|
+
Fx.fiberRefLocally(
|
|
435
|
+
Builtin.Layers,
|
|
436
|
+
layers.value.set(layer.service, [
|
|
437
|
+
() => {
|
|
438
|
+
const fiber = new FiberRuntime(provider, this.context.fork())
|
|
439
|
+
fiber.startSync()
|
|
440
|
+
return fiber as Fiber.Live<never, any>
|
|
441
|
+
},
|
|
442
|
+
Maybe.Nothing,
|
|
443
|
+
]),
|
|
444
|
+
),
|
|
445
|
+
)
|
|
444
446
|
})
|
|
445
|
-
|
|
446
|
-
FiberRefs.setFiberRefLocally(
|
|
447
|
-
FiberRef.Layers,
|
|
448
|
-
layers.set(layer.service, [
|
|
449
|
-
() => {
|
|
450
|
-
const fiber = new FiberRuntime(provider, this.context.fork())
|
|
451
|
-
fiber.startSync()
|
|
452
|
-
return fiber as Fiber.Live<never, any>
|
|
453
|
-
},
|
|
454
|
-
Maybe.Nothing,
|
|
455
|
-
]),
|
|
456
|
-
)(context.fiberRefs)
|
|
457
|
-
|
|
458
|
-
this.popFiberRef(FiberRef.Layers)
|
|
459
|
-
|
|
460
|
-
this._current = Maybe.Just(instr.fx.instr)
|
|
461
447
|
}
|
|
462
448
|
|
|
463
449
|
protected processProvideService(
|
|
464
450
|
instr: Extract<AnyInstruction, { readonly tag: 'ProvideService' }>,
|
|
465
451
|
) {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
452
|
+
this.withFiberRef(Builtin.Services, (services) =>
|
|
453
|
+
pipe(
|
|
454
|
+
instr.fx,
|
|
455
|
+
Fx.fiberRefLocally(
|
|
456
|
+
Builtin.Services,
|
|
457
|
+
services.value.set(instr.service, instr.implementation),
|
|
458
|
+
),
|
|
459
|
+
),
|
|
460
|
+
)
|
|
474
461
|
}
|
|
475
462
|
|
|
476
463
|
protected processSetConcurrencyLevel(
|
|
477
464
|
instr: Extract<AnyInstruction, { readonly tag: 'SetConcurrencyLevel' }>,
|
|
478
465
|
) {
|
|
479
|
-
this.pushPopFiberRef(
|
|
466
|
+
this.pushPopFiberRef(Builtin.CurrentConcurrencyLevel, new Semaphore(instr.concurrencyLevel))
|
|
480
467
|
this._current = Maybe.Just(instr.fx.instr)
|
|
481
468
|
}
|
|
482
469
|
|
|
483
470
|
protected processSetInterruptStatus(
|
|
484
471
|
instr: Extract<AnyInstruction, { readonly tag: 'SetInterruptStatus' }>,
|
|
485
472
|
) {
|
|
486
|
-
const
|
|
473
|
+
const currentlyInterruptable = this.getInterruptStatus()
|
|
487
474
|
|
|
488
475
|
FiberRefs.setFiberRefLocally(
|
|
489
|
-
|
|
476
|
+
Builtin.CurrentInterruptStatus,
|
|
490
477
|
instr.interruptStatus,
|
|
491
478
|
)(this.context.fiberRefs)
|
|
492
479
|
|
|
493
480
|
this.pushFrame(
|
|
494
481
|
ExitFrame((exit) =>
|
|
495
482
|
Fx.lazy(() => {
|
|
496
|
-
FiberRefs.popLocalFiberRef(
|
|
483
|
+
FiberRefs.popLocalFiberRef(Builtin.CurrentInterruptStatus)(this.context.fiberRefs)
|
|
497
484
|
|
|
498
|
-
if (
|
|
485
|
+
if (currentlyInterruptable && this._interruptedBy.size > 0) {
|
|
499
486
|
return Fx.fromExit(
|
|
500
487
|
Array.from(this._interruptedBy).reduce(
|
|
501
|
-
(e, id) => concatExitSeq(e,
|
|
488
|
+
(e, id) => concatExitSeq(e, Exit.interrupt(id)),
|
|
502
489
|
exit,
|
|
503
490
|
),
|
|
504
491
|
)
|
|
@@ -519,10 +506,13 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
519
506
|
return (this._current = Maybe.Just(state.fx.instr))
|
|
520
507
|
}
|
|
521
508
|
|
|
509
|
+
// Add Stack trace before asynchrony occurs
|
|
510
|
+
this.pushPopFiberRef(Builtin.CurrentTrace, this.getRuntimeTrace())
|
|
511
|
+
|
|
522
512
|
const inner = settable()
|
|
523
513
|
|
|
524
514
|
inner.add(
|
|
525
|
-
addObserver(instr.future
|
|
515
|
+
addObserver(instr.future, (fx) => {
|
|
526
516
|
if (!inner.isDisposed()) {
|
|
527
517
|
inner.dispose()
|
|
528
518
|
this._current = Maybe.Just(fx.instr)
|
|
@@ -537,15 +527,16 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
537
527
|
}
|
|
538
528
|
|
|
539
529
|
protected uncaughtException(error: unknown) {
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
530
|
+
this.withFiberRef(Builtin.CurrentTrace, (stackTrace) => {
|
|
531
|
+
const trimmed = Trace.getTrimmedTrace(Cause.unexpected(error), stackTrace)
|
|
532
|
+
const current = Trace.getTraceUpTo(
|
|
533
|
+
stackTrace.push(trimmed),
|
|
534
|
+
this.context.platform.maxTraceCount,
|
|
535
|
+
)
|
|
536
|
+
const cause = Cause.traced(Trace.concat(trimmed, current))(Cause.unexpected(error))
|
|
547
537
|
|
|
548
|
-
|
|
538
|
+
return Fx.fromCause(cause)
|
|
539
|
+
})
|
|
549
540
|
}
|
|
550
541
|
|
|
551
542
|
protected pushFrame(frame: Frame) {
|
|
@@ -624,7 +615,7 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
624
615
|
|
|
625
616
|
protected reportFailure(cause: Cause.AnyCause) {
|
|
626
617
|
this.context.platform.reportFailure(
|
|
627
|
-
[FiberId.debug(this.id), prettyPrint(cause, this.context.renderer)].join('\n'),
|
|
618
|
+
[FiberId.debug(this.id), prettyPrint(cause, this.context.platform.renderer)].join('\n'),
|
|
628
619
|
)
|
|
629
620
|
}
|
|
630
621
|
|
|
@@ -632,31 +623,31 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
632
623
|
const inner = settable()
|
|
633
624
|
|
|
634
625
|
inner.add(
|
|
635
|
-
this.
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
}, Delay(0)),
|
|
640
|
-
),
|
|
626
|
+
this.context.platform.timer.setTimer((time) => {
|
|
627
|
+
inner.dispose()
|
|
628
|
+
f(time)
|
|
629
|
+
}, Delay(0)),
|
|
641
630
|
)
|
|
642
631
|
|
|
632
|
+
inner.add(this._disposable.add(inner))
|
|
633
|
+
|
|
643
634
|
return inner
|
|
644
635
|
}
|
|
645
636
|
|
|
646
637
|
protected getInterruptStatus = (): boolean =>
|
|
647
|
-
|
|
638
|
+
pipe(
|
|
639
|
+
this.context.fiberRefs,
|
|
640
|
+
FiberRefs.maybeGetFiberRefValue(Builtin.CurrentInterruptStatus),
|
|
641
|
+
Maybe.getOrElse(() => true),
|
|
642
|
+
)
|
|
648
643
|
|
|
649
644
|
protected pushPopFiberRef = (ref: FiberRef.AnyFiberRef, value: any) => {
|
|
650
|
-
FiberRefs.setFiberRefLocally(ref
|
|
651
|
-
|
|
652
|
-
this.popFiberRef(ref)
|
|
653
|
-
}
|
|
645
|
+
FiberRefs.setFiberRefLocally(ref, value)(this.context.fiberRefs)
|
|
654
646
|
|
|
655
|
-
protected popFiberRef = (ref: FiberRef.AnyFiberRef) => {
|
|
656
647
|
this.pushFrame(
|
|
657
648
|
ExitFrame((exit) =>
|
|
658
649
|
Fx.lazy(() => {
|
|
659
|
-
FiberRefs.popLocalFiberRef(ref
|
|
650
|
+
FiberRefs.popLocalFiberRef(ref)(this.context.fiberRefs)
|
|
660
651
|
|
|
661
652
|
return Fx.fromExit(exit)
|
|
662
653
|
}),
|
|
@@ -664,45 +655,72 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
664
655
|
)
|
|
665
656
|
}
|
|
666
657
|
|
|
667
|
-
protected
|
|
668
|
-
|
|
669
|
-
|
|
658
|
+
protected withFiberRef<R, E, A, R2, E2, B>(
|
|
659
|
+
ref: FiberRef.FiberRef<R, E, A>,
|
|
660
|
+
f: (a: Stack<A>) => Fx.Fx<R2, E2, B>,
|
|
661
|
+
): void {
|
|
662
|
+
const fiberRefs = this.context.fiberRefs
|
|
663
|
+
const currentValue = fiberRefs.locals.get().get(ref)
|
|
670
664
|
|
|
671
|
-
if (
|
|
672
|
-
|
|
665
|
+
if (Maybe.isJust(currentValue)) {
|
|
666
|
+
this._current = Maybe.Just(f(currentValue.value).instr)
|
|
667
|
+
return
|
|
673
668
|
}
|
|
674
669
|
|
|
675
|
-
const
|
|
676
|
-
|
|
677
|
-
locals.set(FiberRef.CurrentEnv, new Stack(env))
|
|
678
|
-
|
|
679
|
-
return env
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
protected getInternalFiberRef<R, E, A>(ref: FiberRef.FiberRef<R, E, A>): Stack<A> {
|
|
683
|
-
const maybe = this.context.fiberRefs.locals.get().get(ref)
|
|
670
|
+
const initializing = fiberRefs.initializing.get()
|
|
671
|
+
const initializingFiber = initializing.get(ref)
|
|
684
672
|
|
|
685
|
-
if (
|
|
686
|
-
|
|
673
|
+
if (Maybe.isJust(initializingFiber)) {
|
|
674
|
+
this._current = Maybe.Just(
|
|
675
|
+
pipe(
|
|
676
|
+
(initializingFiber.value as Fiber.Live<E, A>).exit,
|
|
677
|
+
Fx.flatMap(Fx.fromExit),
|
|
678
|
+
Fx.flatMap((a) => f(new Stack(a))),
|
|
679
|
+
).instr,
|
|
680
|
+
)
|
|
681
|
+
return
|
|
687
682
|
}
|
|
688
683
|
|
|
689
|
-
|
|
690
|
-
|
|
684
|
+
this._current = Maybe.Just(
|
|
685
|
+
pipe(
|
|
686
|
+
Fx.forkInContext(this.context.fork({ fiberRefs: this.context.fiberRefs }))(ref.initial),
|
|
687
|
+
Fx.tap((fiber) =>
|
|
688
|
+
Fx.fromLazy(() => fiberRefs.initializing.modify((a) => [null, a.set(ref, fiber)])),
|
|
689
|
+
),
|
|
690
|
+
Fx.flatMap(join),
|
|
691
|
+
Fx.ensuring((exit) =>
|
|
692
|
+
Fx.fromLazy(() => {
|
|
693
|
+
fiberRefs.initializing.modify((a) => [null, a.remove(ref)])
|
|
694
|
+
|
|
695
|
+
if (Either.isRight(exit)) {
|
|
696
|
+
FiberRefs.setFiberRef(ref, exit.right)(this.context.fiberRefs)
|
|
697
|
+
}
|
|
698
|
+
}),
|
|
699
|
+
),
|
|
700
|
+
Fx.flatMap((a) => f(new Stack(a))),
|
|
701
|
+
).instr,
|
|
691
702
|
)
|
|
692
703
|
}
|
|
693
704
|
|
|
694
705
|
protected getCurrentTrace(): Trace.Trace {
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
this.context.platform.maxTraceCount,
|
|
701
|
-
)
|
|
702
|
-
|
|
706
|
+
return pipe(
|
|
707
|
+
this.context.fiberRefs,
|
|
708
|
+
FiberRefs.maybeGetFiberRefStack(Builtin.CurrentTrace),
|
|
709
|
+
Maybe.match(
|
|
710
|
+
() => Trace.Trace.runtime(new Error()),
|
|
711
|
+
(stackTrace) => Trace.getTraceUpTo(stackTrace, this.context.platform.maxTraceCount),
|
|
712
|
+
),
|
|
713
|
+
)
|
|
714
|
+
}
|
|
703
715
|
|
|
704
|
-
|
|
705
|
-
|
|
716
|
+
protected getRuntimeTrace(): Trace.Trace {
|
|
717
|
+
return pipe(
|
|
718
|
+
this.context.fiberRefs,
|
|
719
|
+
FiberRefs.maybeGetFiberRefStack(Builtin.CurrentTrace),
|
|
720
|
+
Maybe.match(
|
|
721
|
+
() => Trace.Trace.runtime(new Error()),
|
|
722
|
+
(stackTrace) => Trace.getTrimmedTrace(Cause.Empty, stackTrace),
|
|
723
|
+
),
|
|
706
724
|
)
|
|
707
725
|
}
|
|
708
726
|
|