@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.
Files changed (643) hide show
  1. package/.eslintcache +1 -1
  2. package/.tracing-plugin/plugin.cjs +30 -0
  3. package/.tracing-plugin/plugin.d.ts.map +1 -1
  4. package/.tracing-plugin/plugin.js.map +1 -1
  5. package/cjs/Atomic/Atomic.d.ts +2 -2
  6. package/cjs/Atomic/Atomic.d.ts.map +1 -1
  7. package/cjs/Atomic/Atomic.js +1 -1
  8. package/cjs/Atomic/Atomic.js.map +1 -1
  9. package/cjs/Effect/Effect.d.ts +199 -0
  10. package/cjs/Effect/Effect.d.ts.map +1 -0
  11. package/cjs/Effect/Effect.js +66 -0
  12. package/cjs/Effect/Effect.js.map +1 -0
  13. package/cjs/Env/Env.d.ts.map +1 -1
  14. package/cjs/Env/Env.js +2 -55
  15. package/cjs/Env/Env.js.map +1 -1
  16. package/cjs/Exit/hkt.d.ts +11 -1
  17. package/cjs/Exit/hkt.d.ts.map +1 -1
  18. package/cjs/Exit/hkt.js +9 -3
  19. package/cjs/Exit/hkt.js.map +1 -1
  20. package/cjs/Fiber/Fiber.d.ts +8 -8
  21. package/cjs/Fiber/Fiber.d.ts.map +1 -1
  22. package/cjs/Fiber/Fiber.js +2 -9
  23. package/cjs/Fiber/Fiber.js.map +1 -1
  24. package/cjs/Fiber/fromExit.d.ts +4 -0
  25. package/cjs/Fiber/fromExit.d.ts.map +1 -0
  26. package/cjs/Fiber/fromExit.js +16 -0
  27. package/cjs/Fiber/fromExit.js.map +1 -0
  28. package/cjs/Fiber/hkt.d.ts +40 -0
  29. package/cjs/Fiber/hkt.d.ts.map +1 -0
  30. package/cjs/Fiber/hkt.js +101 -0
  31. package/cjs/Fiber/hkt.js.map +1 -0
  32. package/cjs/Fiber/index.d.ts +1 -0
  33. package/cjs/Fiber/index.d.ts.map +1 -1
  34. package/cjs/Fiber/index.js +1 -0
  35. package/cjs/Fiber/index.js.map +1 -1
  36. package/cjs/FiberContext/FiberContext.d.ts +5 -7
  37. package/cjs/FiberContext/FiberContext.d.ts.map +1 -1
  38. package/cjs/FiberContext/FiberContext.js +3 -5
  39. package/cjs/FiberContext/FiberContext.js.map +1 -1
  40. package/cjs/FiberId/FiberId.d.ts +1 -1
  41. package/cjs/FiberId/FiberId.d.ts.map +1 -1
  42. package/cjs/FiberRef/FiberRef.d.ts +2 -18
  43. package/cjs/FiberRef/FiberRef.d.ts.map +1 -1
  44. package/cjs/FiberRef/FiberRef.js +1 -34
  45. package/cjs/FiberRef/FiberRef.js.map +1 -1
  46. package/cjs/FiberRef/builtins.d.ts +22 -0
  47. package/cjs/FiberRef/builtins.d.ts.map +1 -0
  48. package/cjs/FiberRef/builtins.js +94 -0
  49. package/cjs/FiberRef/builtins.js.map +1 -0
  50. package/cjs/FiberRef/index.d.ts.map +1 -1
  51. package/cjs/FiberRef/index.js +0 -1
  52. package/cjs/FiberRef/index.js.map +1 -1
  53. package/cjs/FiberRefs/FiberRefs.d.ts +3 -1
  54. package/cjs/FiberRefs/FiberRefs.d.ts.map +1 -1
  55. package/cjs/FiberRefs/FiberRefs.js +5 -18
  56. package/cjs/FiberRefs/FiberRefs.js.map +1 -1
  57. package/cjs/FiberRuntime/FiberRuntime.d.ts +14 -14
  58. package/cjs/FiberRuntime/FiberRuntime.d.ts.map +1 -1
  59. package/cjs/FiberRuntime/FiberRuntime.js +159 -152
  60. package/cjs/FiberRuntime/FiberRuntime.js.map +1 -1
  61. package/cjs/Fx/Fx.d.ts +13 -12
  62. package/cjs/Fx/Fx.d.ts.map +1 -1
  63. package/cjs/Fx/Fx.js +52 -37
  64. package/cjs/Fx/Fx.js.map +1 -1
  65. package/cjs/Fx/Instruction.d.ts +33 -35
  66. package/cjs/Fx/Instruction.d.ts.map +1 -1
  67. package/cjs/Fx/Instruction.js +44 -26
  68. package/cjs/Fx/Instruction.js.map +1 -1
  69. package/cjs/Fx/fromLayer.d.ts +5 -0
  70. package/cjs/Fx/fromLayer.d.ts.map +1 -0
  71. package/cjs/Fx/fromLayer.js +33 -0
  72. package/cjs/Fx/fromLayer.js.map +1 -0
  73. package/cjs/Fx/index.d.ts +1 -0
  74. package/cjs/Fx/index.d.ts.map +1 -1
  75. package/cjs/Fx/index.js +1 -0
  76. package/cjs/Fx/index.js.map +1 -1
  77. package/cjs/Fx/join.d.ts +8 -2
  78. package/cjs/Fx/join.d.ts.map +1 -1
  79. package/cjs/Fx/join.js +9 -10
  80. package/cjs/Fx/join.js.map +1 -1
  81. package/cjs/Fx/logging.d.ts.map +1 -1
  82. package/cjs/Fx/logging.js +5 -4
  83. package/cjs/Fx/logging.js.map +1 -1
  84. package/cjs/Fx/run.d.ts +7 -2
  85. package/cjs/Fx/run.d.ts.map +1 -1
  86. package/cjs/Fx/run.js +9 -4
  87. package/cjs/Fx/run.js.map +1 -1
  88. package/cjs/Fx/scheduler.js +1 -1
  89. package/cjs/Fx/scheduler.js.map +1 -1
  90. package/cjs/Fx/scoped.d.ts +5 -5
  91. package/cjs/Fx/scoped.d.ts.map +1 -1
  92. package/cjs/Fx/scoped.js +30 -20
  93. package/cjs/Fx/scoped.js.map +1 -1
  94. package/cjs/Layer/Layer.d.ts +1 -0
  95. package/cjs/Layer/Layer.d.ts.map +1 -1
  96. package/cjs/Layer/Layer.js +7 -1
  97. package/cjs/Layer/Layer.js.map +1 -1
  98. package/cjs/Logger/Console.d.ts.map +1 -1
  99. package/cjs/Logger/Console.js +45 -17
  100. package/cjs/Logger/Console.js.map +1 -1
  101. package/cjs/Logger/Logger.d.ts +2 -1
  102. package/cjs/Logger/Logger.d.ts.map +1 -1
  103. package/cjs/Logger/Logger.js +2 -2
  104. package/cjs/Logger/Logger.js.map +1 -1
  105. package/cjs/Node/Runtime.d.ts +9 -0
  106. package/cjs/Node/Runtime.d.ts.map +1 -0
  107. package/cjs/Node/Runtime.js +20 -0
  108. package/cjs/Node/Runtime.js.map +1 -0
  109. package/cjs/Node/gracefulShutdown.d.ts +5 -0
  110. package/cjs/Node/gracefulShutdown.d.ts.map +1 -0
  111. package/cjs/Node/gracefulShutdown.js +66 -0
  112. package/cjs/Node/gracefulShutdown.js.map +1 -0
  113. package/cjs/Node/index.d.ts +3 -0
  114. package/cjs/Node/index.d.ts.map +1 -0
  115. package/cjs/{Ref → Node}/index.js +2 -2
  116. package/cjs/Node/index.js.map +1 -0
  117. package/cjs/Platform/Platform.d.ts +4 -2
  118. package/cjs/Platform/Platform.d.ts.map +1 -1
  119. package/cjs/Platform/Platform.js +5 -3
  120. package/cjs/Platform/Platform.js.map +1 -1
  121. package/cjs/Runtime/Runtime.d.ts +4 -4
  122. package/cjs/Runtime/Runtime.d.ts.map +1 -1
  123. package/cjs/Runtime/Runtime.js +1 -1
  124. package/cjs/Runtime/Runtime.js.map +1 -1
  125. package/cjs/Scheduler/RootScheduler.d.ts.map +1 -1
  126. package/cjs/Scheduler/RootScheduler.js +9 -8
  127. package/cjs/Scheduler/RootScheduler.js.map +1 -1
  128. package/cjs/Scheduler/Scheduler.d.ts +3 -2
  129. package/cjs/Scheduler/Scheduler.d.ts.map +1 -1
  130. package/cjs/Scheduler/Scheduler.js.map +1 -1
  131. package/cjs/Scheduler/index.d.ts +2 -0
  132. package/cjs/Scheduler/index.d.ts.map +1 -1
  133. package/cjs/Scheduler/index.js +17 -0
  134. package/cjs/Scheduler/index.js.map +1 -1
  135. package/cjs/Scheduler/{scheduled.d.ts → runSchedule.d.ts} +2 -2
  136. package/cjs/Scheduler/runSchedule.d.ts.map +1 -0
  137. package/cjs/Scheduler/{scheduled.js → runSchedule.js} +5 -5
  138. package/cjs/Scheduler/runSchedule.js.map +1 -0
  139. package/cjs/Scope/LocalScope.d.ts.map +1 -1
  140. package/cjs/Scope/LocalScope.js +4 -10
  141. package/cjs/Scope/LocalScope.js.map +1 -1
  142. package/cjs/Scope/ReleaseMap.d.ts +3 -3
  143. package/cjs/Scope/ReleaseMap.d.ts.map +1 -1
  144. package/cjs/Scope/ReleaseMap.js +45 -8
  145. package/cjs/Scope/ReleaseMap.js.map +1 -1
  146. package/cjs/Semaphore/Semaphore.d.ts +2 -1
  147. package/cjs/Semaphore/Semaphore.d.ts.map +1 -1
  148. package/cjs/Semaphore/Semaphore.js +14 -23
  149. package/cjs/Semaphore/Semaphore.js.map +1 -1
  150. package/cjs/Service/Id.d.ts +12 -1
  151. package/cjs/Service/Id.d.ts.map +1 -1
  152. package/cjs/Service/Id.js +11 -1
  153. package/cjs/Service/Id.js.map +1 -1
  154. package/cjs/Service/fn.d.ts +47 -0
  155. package/cjs/Service/fn.d.ts.map +1 -0
  156. package/cjs/Service/fn.js +19 -0
  157. package/cjs/Service/fn.js.map +1 -0
  158. package/cjs/Service/index.d.ts +1 -0
  159. package/cjs/Service/index.d.ts.map +1 -1
  160. package/cjs/Service/index.js +1 -0
  161. package/cjs/Service/index.js.map +1 -1
  162. package/cjs/Service/tagged.d.ts +10 -2
  163. package/cjs/Service/tagged.d.ts.map +1 -1
  164. package/cjs/Sink/Sink.d.ts +5 -5
  165. package/cjs/Sink/Sink.d.ts.map +1 -1
  166. package/cjs/Sink/Sink.js +11 -7
  167. package/cjs/Sink/Sink.js.map +1 -1
  168. package/cjs/Stream/Stream.d.ts +39 -6
  169. package/cjs/Stream/Stream.d.ts.map +1 -1
  170. package/cjs/Stream/Stream.js.map +1 -1
  171. package/cjs/Stream/bimap.d.ts +15 -0
  172. package/cjs/Stream/bimap.d.ts.map +1 -0
  173. package/cjs/Stream/bimap.js +74 -0
  174. package/cjs/Stream/bimap.js.map +1 -0
  175. package/cjs/Stream/continueWith.d.ts +27 -0
  176. package/cjs/Stream/continueWith.d.ts.map +1 -0
  177. package/cjs/Stream/continueWith.js +66 -0
  178. package/cjs/Stream/continueWith.js.map +1 -0
  179. package/cjs/Stream/drain.d.ts +3 -2
  180. package/cjs/Stream/drain.d.ts.map +1 -1
  181. package/cjs/Stream/drain.js +6 -6
  182. package/cjs/Stream/drain.js.map +1 -1
  183. package/cjs/Stream/empty.d.ts +3 -0
  184. package/cjs/Stream/empty.d.ts.map +1 -0
  185. package/cjs/Stream/empty.js +31 -0
  186. package/cjs/Stream/empty.js.map +1 -0
  187. package/cjs/Stream/flatMap.d.ts +15 -0
  188. package/cjs/Stream/flatMap.d.ts.map +1 -0
  189. package/cjs/Stream/flatMap.js +102 -0
  190. package/cjs/Stream/flatMap.js.map +1 -0
  191. package/cjs/Stream/flatMapFx.d.ts +4 -0
  192. package/cjs/Stream/flatMapFx.d.ts.map +1 -0
  193. package/cjs/Stream/flatMapFx.js +11 -0
  194. package/cjs/Stream/flatMapFx.js.map +1 -0
  195. package/cjs/Stream/fromCallback.d.ts +21 -0
  196. package/cjs/Stream/fromCallback.d.ts.map +1 -0
  197. package/cjs/Stream/fromCallback.js +65 -0
  198. package/cjs/Stream/fromCallback.js.map +1 -0
  199. package/cjs/Stream/fromFx.d.ts +12 -1
  200. package/cjs/Stream/fromFx.d.ts.map +1 -1
  201. package/cjs/Stream/fromFx.js +18 -4
  202. package/cjs/Stream/fromFx.js.map +1 -1
  203. package/cjs/Stream/hkt.d.ts +15 -0
  204. package/cjs/Stream/hkt.d.ts.map +1 -0
  205. package/cjs/Stream/hkt.js +42 -0
  206. package/cjs/Stream/hkt.js.map +1 -0
  207. package/cjs/Stream/index.d.ts +11 -0
  208. package/cjs/Stream/index.d.ts.map +1 -1
  209. package/cjs/Stream/index.js +11 -0
  210. package/cjs/Stream/index.js.map +1 -1
  211. package/cjs/Stream/map.d.ts +14 -0
  212. package/cjs/Stream/map.d.ts.map +1 -0
  213. package/cjs/Stream/map.js +30 -0
  214. package/cjs/Stream/map.js.map +1 -0
  215. package/cjs/Stream/periodic.d.ts +4 -0
  216. package/cjs/Stream/periodic.d.ts.map +1 -0
  217. package/cjs/Stream/periodic.js +32 -0
  218. package/cjs/Stream/periodic.js.map +1 -0
  219. package/cjs/Stream/run.d.ts +6 -0
  220. package/cjs/Stream/run.d.ts.map +1 -0
  221. package/cjs/{Ref/Ref.js → Stream/run.js} +10 -30
  222. package/cjs/Stream/run.js.map +1 -0
  223. package/cjs/Stream/scheduled.d.ts +5 -0
  224. package/cjs/Stream/scheduled.d.ts.map +1 -0
  225. package/cjs/Stream/scheduled.js +34 -0
  226. package/cjs/Stream/scheduled.js.map +1 -0
  227. package/cjs/Stream/tap.d.ts +4 -0
  228. package/cjs/Stream/tap.d.ts.map +1 -0
  229. package/cjs/Stream/tap.js +9 -0
  230. package/cjs/Stream/tap.js.map +1 -0
  231. package/cjs/Supervisor/Supervisor.d.ts +507 -0
  232. package/cjs/Supervisor/Supervisor.d.ts.map +1 -1
  233. package/cjs/Supervisor/Supervisor.js +2 -1
  234. package/cjs/Supervisor/Supervisor.js.map +1 -1
  235. package/cjs/Supervisor/index.d.ts +1 -0
  236. package/cjs/Supervisor/index.d.ts.map +1 -1
  237. package/cjs/Supervisor/index.js +1 -0
  238. package/cjs/Supervisor/index.js.map +1 -1
  239. package/cjs/Supervisor/maxFailures.d.ts +18 -0
  240. package/cjs/Supervisor/maxFailures.d.ts.map +1 -0
  241. package/cjs/Supervisor/maxFailures.js +72 -0
  242. package/cjs/Supervisor/maxFailures.js.map +1 -0
  243. package/cjs/Supervisor/trackIn.d.ts +6 -0
  244. package/cjs/Supervisor/trackIn.d.ts.map +1 -0
  245. package/cjs/Supervisor/trackIn.js +16 -0
  246. package/cjs/Supervisor/trackIn.js.map +1 -0
  247. package/cjs/Trace/Trace.d.ts +1 -1
  248. package/cjs/Trace/Trace.d.ts.map +1 -1
  249. package/cjs/Trace/Trace.js +8 -35
  250. package/cjs/Trace/Trace.js.map +1 -1
  251. package/cjs/Tracing/plugin.d.ts.map +1 -1
  252. package/cjs/Tracing/plugin.js +30 -0
  253. package/cjs/Tracing/plugin.js.map +1 -1
  254. package/cjs/_internal/suite.d.ts +12 -0
  255. package/cjs/_internal/suite.d.ts.map +1 -0
  256. package/cjs/_internal/suite.js +13 -0
  257. package/cjs/_internal/suite.js.map +1 -0
  258. package/cjs/index.d.ts +3 -1
  259. package/cjs/index.d.ts.map +1 -1
  260. package/cjs/index.js +4 -2
  261. package/cjs/index.js.map +1 -1
  262. package/coverage/tmp/coverage-14409-1663382601663-0.json +1 -0
  263. package/coverage/tmp/coverage-14414-1663382601571-0.json +1 -0
  264. package/coverage/tmp/coverage-14432-1663382601494-0.json +1 -0
  265. package/esm/Atomic/Atomic.d.ts +2 -2
  266. package/esm/Atomic/Atomic.d.ts.map +1 -1
  267. package/esm/Atomic/Atomic.js +1 -1
  268. package/esm/Atomic/Atomic.js.map +1 -1
  269. package/esm/Effect/Effect.d.ts +199 -0
  270. package/esm/Effect/Effect.d.ts.map +1 -0
  271. package/esm/Effect/Effect.js +50 -0
  272. package/esm/Effect/Effect.js.map +1 -0
  273. package/esm/Env/Env.d.ts.map +1 -1
  274. package/esm/Env/Env.js +2 -32
  275. package/esm/Env/Env.js.map +1 -1
  276. package/esm/Exit/hkt.d.ts +11 -1
  277. package/esm/Exit/hkt.d.ts.map +1 -1
  278. package/esm/Exit/hkt.js +9 -3
  279. package/esm/Exit/hkt.js.map +1 -1
  280. package/esm/Fiber/Fiber.d.ts +8 -8
  281. package/esm/Fiber/Fiber.d.ts.map +1 -1
  282. package/esm/Fiber/Fiber.js +3 -10
  283. package/esm/Fiber/Fiber.js.map +1 -1
  284. package/esm/Fiber/fromExit.d.ts +4 -0
  285. package/esm/Fiber/fromExit.d.ts.map +1 -0
  286. package/esm/Fiber/fromExit.js +12 -0
  287. package/esm/Fiber/fromExit.js.map +1 -0
  288. package/esm/Fiber/hkt.d.ts +40 -0
  289. package/esm/Fiber/hkt.d.ts.map +1 -0
  290. package/esm/Fiber/hkt.js +75 -0
  291. package/esm/Fiber/hkt.js.map +1 -0
  292. package/esm/Fiber/index.d.ts +1 -0
  293. package/esm/Fiber/index.d.ts.map +1 -1
  294. package/esm/Fiber/index.js +1 -0
  295. package/esm/Fiber/index.js.map +1 -1
  296. package/esm/FiberContext/FiberContext.d.ts +5 -7
  297. package/esm/FiberContext/FiberContext.d.ts.map +1 -1
  298. package/esm/FiberContext/FiberContext.js +3 -5
  299. package/esm/FiberContext/FiberContext.js.map +1 -1
  300. package/esm/FiberId/FiberId.d.ts +1 -1
  301. package/esm/FiberId/FiberId.d.ts.map +1 -1
  302. package/esm/FiberRef/FiberRef.d.ts +2 -18
  303. package/esm/FiberRef/FiberRef.d.ts.map +1 -1
  304. package/esm/FiberRef/FiberRef.js +1 -34
  305. package/esm/FiberRef/FiberRef.js.map +1 -1
  306. package/esm/FiberRef/builtins.d.ts +22 -0
  307. package/esm/FiberRef/builtins.d.ts.map +1 -0
  308. package/esm/FiberRef/builtins.js +67 -0
  309. package/esm/FiberRef/builtins.js.map +1 -0
  310. package/esm/FiberRef/index.d.ts.map +1 -1
  311. package/esm/FiberRef/index.js +0 -1
  312. package/esm/FiberRef/index.js.map +1 -1
  313. package/esm/FiberRefs/FiberRefs.d.ts +3 -1
  314. package/esm/FiberRefs/FiberRefs.d.ts.map +1 -1
  315. package/esm/FiberRefs/FiberRefs.js +5 -18
  316. package/esm/FiberRefs/FiberRefs.js.map +1 -1
  317. package/esm/FiberRuntime/FiberRuntime.d.ts +14 -14
  318. package/esm/FiberRuntime/FiberRuntime.d.ts.map +1 -1
  319. package/esm/FiberRuntime/FiberRuntime.js +160 -153
  320. package/esm/FiberRuntime/FiberRuntime.js.map +1 -1
  321. package/esm/Fx/Fx.d.ts +13 -12
  322. package/esm/Fx/Fx.d.ts.map +1 -1
  323. package/esm/Fx/Fx.js +49 -35
  324. package/esm/Fx/Fx.js.map +1 -1
  325. package/esm/Fx/Instruction.d.ts +33 -35
  326. package/esm/Fx/Instruction.d.ts.map +1 -1
  327. package/esm/Fx/Instruction.js +42 -24
  328. package/esm/Fx/Instruction.js.map +1 -1
  329. package/esm/Fx/fromLayer.d.ts +5 -0
  330. package/esm/Fx/fromLayer.d.ts.map +1 -0
  331. package/esm/Fx/fromLayer.js +6 -0
  332. package/esm/Fx/fromLayer.js.map +1 -0
  333. package/esm/Fx/index.d.ts +1 -0
  334. package/esm/Fx/index.d.ts.map +1 -1
  335. package/esm/Fx/index.js +1 -0
  336. package/esm/Fx/index.js.map +1 -1
  337. package/esm/Fx/join.d.ts +8 -2
  338. package/esm/Fx/join.d.ts.map +1 -1
  339. package/esm/Fx/join.js +6 -10
  340. package/esm/Fx/join.js.map +1 -1
  341. package/esm/Fx/logging.d.ts.map +1 -1
  342. package/esm/Fx/logging.js +3 -2
  343. package/esm/Fx/logging.js.map +1 -1
  344. package/esm/Fx/run.d.ts +7 -2
  345. package/esm/Fx/run.d.ts.map +1 -1
  346. package/esm/Fx/run.js +5 -0
  347. package/esm/Fx/run.js.map +1 -1
  348. package/esm/Fx/scheduler.js +1 -1
  349. package/esm/Fx/scheduler.js.map +1 -1
  350. package/esm/Fx/scoped.d.ts +5 -5
  351. package/esm/Fx/scoped.d.ts.map +1 -1
  352. package/esm/Fx/scoped.js +7 -20
  353. package/esm/Fx/scoped.js.map +1 -1
  354. package/esm/Layer/Layer.d.ts +1 -0
  355. package/esm/Layer/Layer.d.ts.map +1 -1
  356. package/esm/Layer/Layer.js +5 -0
  357. package/esm/Layer/Layer.js.map +1 -1
  358. package/esm/Logger/Console.d.ts.map +1 -1
  359. package/esm/Logger/Console.js +22 -17
  360. package/esm/Logger/Console.js.map +1 -1
  361. package/esm/Logger/Logger.d.ts +2 -1
  362. package/esm/Logger/Logger.d.ts.map +1 -1
  363. package/esm/Logger/Logger.js +2 -2
  364. package/esm/Logger/Logger.js.map +1 -1
  365. package/esm/Node/Runtime.d.ts +9 -0
  366. package/esm/Node/Runtime.d.ts.map +1 -0
  367. package/esm/Node/Runtime.js +17 -0
  368. package/esm/Node/Runtime.js.map +1 -0
  369. package/esm/Node/gracefulShutdown.d.ts +5 -0
  370. package/esm/Node/gracefulShutdown.d.ts.map +1 -0
  371. package/esm/Node/gracefulShutdown.js +36 -0
  372. package/esm/Node/gracefulShutdown.js.map +1 -0
  373. package/esm/Node/index.d.ts +3 -0
  374. package/esm/Node/index.d.ts.map +1 -0
  375. package/esm/Node/index.js +3 -0
  376. package/esm/Node/index.js.map +1 -0
  377. package/esm/Platform/Platform.d.ts +4 -2
  378. package/esm/Platform/Platform.d.ts.map +1 -1
  379. package/esm/Platform/Platform.js +5 -3
  380. package/esm/Platform/Platform.js.map +1 -1
  381. package/esm/Runtime/Runtime.d.ts +4 -4
  382. package/esm/Runtime/Runtime.d.ts.map +1 -1
  383. package/esm/Runtime/Runtime.js +1 -1
  384. package/esm/Runtime/Runtime.js.map +1 -1
  385. package/esm/Scheduler/RootScheduler.d.ts.map +1 -1
  386. package/esm/Scheduler/RootScheduler.js +7 -6
  387. package/esm/Scheduler/RootScheduler.js.map +1 -1
  388. package/esm/Scheduler/Scheduler.d.ts +3 -2
  389. package/esm/Scheduler/Scheduler.d.ts.map +1 -1
  390. package/esm/Scheduler/Scheduler.js.map +1 -1
  391. package/esm/Scheduler/index.d.ts +2 -0
  392. package/esm/Scheduler/index.d.ts.map +1 -1
  393. package/esm/Scheduler/index.js +2 -1
  394. package/esm/Scheduler/index.js.map +1 -1
  395. package/esm/Scheduler/{scheduled.d.ts → runSchedule.d.ts} +2 -2
  396. package/esm/Scheduler/runSchedule.d.ts.map +1 -0
  397. package/esm/Scheduler/{scheduled.js → runSchedule.js} +3 -3
  398. package/esm/Scheduler/runSchedule.js.map +1 -0
  399. package/esm/Scope/LocalScope.d.ts.map +1 -1
  400. package/esm/Scope/LocalScope.js +5 -11
  401. package/esm/Scope/LocalScope.js.map +1 -1
  402. package/esm/Scope/ReleaseMap.d.ts +3 -3
  403. package/esm/Scope/ReleaseMap.d.ts.map +1 -1
  404. package/esm/Scope/ReleaseMap.js +23 -9
  405. package/esm/Scope/ReleaseMap.js.map +1 -1
  406. package/esm/Semaphore/Semaphore.d.ts +2 -1
  407. package/esm/Semaphore/Semaphore.d.ts.map +1 -1
  408. package/esm/Semaphore/Semaphore.js +16 -25
  409. package/esm/Semaphore/Semaphore.js.map +1 -1
  410. package/esm/Service/Id.d.ts +12 -1
  411. package/esm/Service/Id.d.ts.map +1 -1
  412. package/esm/Service/Id.js +12 -2
  413. package/esm/Service/Id.js.map +1 -1
  414. package/esm/Service/fn.d.ts +47 -0
  415. package/esm/Service/fn.d.ts.map +1 -0
  416. package/esm/Service/fn.js +15 -0
  417. package/esm/Service/fn.js.map +1 -0
  418. package/esm/Service/index.d.ts +1 -0
  419. package/esm/Service/index.d.ts.map +1 -1
  420. package/esm/Service/index.js +1 -0
  421. package/esm/Service/index.js.map +1 -1
  422. package/esm/Service/tagged.d.ts +10 -2
  423. package/esm/Service/tagged.d.ts.map +1 -1
  424. package/esm/Sink/Sink.d.ts +5 -5
  425. package/esm/Sink/Sink.d.ts.map +1 -1
  426. package/esm/Sink/Sink.js +12 -8
  427. package/esm/Sink/Sink.js.map +1 -1
  428. package/esm/Stream/Stream.d.ts +39 -6
  429. package/esm/Stream/Stream.d.ts.map +1 -1
  430. package/esm/Stream/Stream.js.map +1 -1
  431. package/esm/Stream/bimap.d.ts +15 -0
  432. package/esm/Stream/bimap.d.ts.map +1 -0
  433. package/esm/Stream/bimap.js +46 -0
  434. package/esm/Stream/bimap.js.map +1 -0
  435. package/esm/Stream/continueWith.d.ts +27 -0
  436. package/esm/Stream/continueWith.d.ts.map +1 -0
  437. package/esm/Stream/continueWith.js +36 -0
  438. package/esm/Stream/continueWith.js.map +1 -0
  439. package/esm/Stream/drain.d.ts +3 -2
  440. package/esm/Stream/drain.d.ts.map +1 -1
  441. package/esm/Stream/drain.js +6 -6
  442. package/esm/Stream/drain.js.map +1 -1
  443. package/esm/Stream/empty.d.ts +3 -0
  444. package/esm/Stream/empty.d.ts.map +1 -0
  445. package/esm/Stream/empty.js +5 -0
  446. package/esm/Stream/empty.js.map +1 -0
  447. package/esm/Stream/flatMap.d.ts +15 -0
  448. package/esm/Stream/flatMap.d.ts.map +1 -0
  449. package/esm/Stream/flatMap.js +74 -0
  450. package/esm/Stream/flatMap.js.map +1 -0
  451. package/esm/Stream/flatMapFx.d.ts +4 -0
  452. package/esm/Stream/flatMapFx.d.ts.map +1 -0
  453. package/esm/Stream/flatMapFx.js +7 -0
  454. package/esm/Stream/flatMapFx.js.map +1 -0
  455. package/esm/Stream/fromCallback.d.ts +21 -0
  456. package/esm/Stream/fromCallback.d.ts.map +1 -0
  457. package/esm/Stream/fromCallback.js +37 -0
  458. package/esm/Stream/fromCallback.js.map +1 -0
  459. package/esm/Stream/fromFx.d.ts +12 -1
  460. package/esm/Stream/fromFx.d.ts.map +1 -1
  461. package/esm/Stream/fromFx.js +16 -2
  462. package/esm/Stream/fromFx.js.map +1 -1
  463. package/esm/Stream/hkt.d.ts +15 -0
  464. package/esm/Stream/hkt.d.ts.map +1 -0
  465. package/esm/Stream/hkt.js +16 -0
  466. package/esm/Stream/hkt.js.map +1 -0
  467. package/esm/Stream/index.d.ts +11 -0
  468. package/esm/Stream/index.d.ts.map +1 -1
  469. package/esm/Stream/index.js +11 -0
  470. package/esm/Stream/index.js.map +1 -1
  471. package/esm/Stream/map.d.ts +14 -0
  472. package/esm/Stream/map.d.ts.map +1 -0
  473. package/esm/Stream/map.js +25 -0
  474. package/esm/Stream/map.js.map +1 -0
  475. package/esm/Stream/periodic.d.ts +4 -0
  476. package/esm/Stream/periodic.d.ts.map +1 -0
  477. package/esm/Stream/periodic.js +5 -0
  478. package/esm/Stream/periodic.js.map +1 -0
  479. package/esm/Stream/run.d.ts +6 -0
  480. package/esm/Stream/run.d.ts.map +1 -0
  481. package/esm/Stream/run.js +9 -0
  482. package/esm/Stream/run.js.map +1 -0
  483. package/esm/Stream/scheduled.d.ts +5 -0
  484. package/esm/Stream/scheduled.d.ts.map +1 -0
  485. package/esm/Stream/scheduled.js +7 -0
  486. package/esm/Stream/scheduled.js.map +1 -0
  487. package/esm/Stream/tap.d.ts +4 -0
  488. package/esm/Stream/tap.d.ts.map +1 -0
  489. package/esm/Stream/tap.js +5 -0
  490. package/esm/Stream/tap.js.map +1 -0
  491. package/esm/Supervisor/Supervisor.d.ts +507 -0
  492. package/esm/Supervisor/Supervisor.d.ts.map +1 -1
  493. package/esm/Supervisor/Supervisor.js +2 -1
  494. package/esm/Supervisor/Supervisor.js.map +1 -1
  495. package/esm/Supervisor/index.d.ts +1 -0
  496. package/esm/Supervisor/index.d.ts.map +1 -1
  497. package/esm/Supervisor/index.js +1 -0
  498. package/esm/Supervisor/index.js.map +1 -1
  499. package/esm/Supervisor/maxFailures.d.ts +18 -0
  500. package/esm/Supervisor/maxFailures.d.ts.map +1 -0
  501. package/esm/Supervisor/maxFailures.js +45 -0
  502. package/esm/Supervisor/maxFailures.js.map +1 -0
  503. package/esm/Supervisor/trackIn.d.ts +6 -0
  504. package/esm/Supervisor/trackIn.d.ts.map +1 -0
  505. package/esm/Supervisor/trackIn.js +12 -0
  506. package/esm/Supervisor/trackIn.js.map +1 -0
  507. package/esm/Trace/Trace.d.ts +1 -1
  508. package/esm/Trace/Trace.d.ts.map +1 -1
  509. package/esm/Trace/Trace.js +8 -35
  510. package/esm/Trace/Trace.js.map +1 -1
  511. package/esm/Tracing/plugin.d.ts.map +1 -1
  512. package/esm/Tracing/plugin.js +30 -0
  513. package/esm/Tracing/plugin.js.map +1 -1
  514. package/esm/_internal/suite.d.ts +12 -0
  515. package/esm/_internal/suite.d.ts.map +1 -0
  516. package/esm/_internal/suite.js +8 -0
  517. package/esm/_internal/suite.js.map +1 -0
  518. package/esm/index.d.ts +3 -1
  519. package/esm/index.d.ts.map +1 -1
  520. package/esm/index.js +6 -2
  521. package/esm/index.js.map +1 -1
  522. package/package.json +269 -38
  523. package/readme.md +1 -2
  524. package/src/Atomic/Atomic.test.ts +33 -0
  525. package/src/Atomic/Atomic.ts +3 -3
  526. package/src/Effect/Effect.ts +109 -0
  527. package/src/Env/Env.ts +3 -51
  528. package/src/Exit/hkt.ts +18 -3
  529. package/src/Fiber/Fiber.ts +17 -16
  530. package/src/Fiber/fromExit.ts +14 -0
  531. package/src/Fiber/hkt.ts +125 -0
  532. package/src/Fiber/index.ts +1 -0
  533. package/src/FiberContext/FiberContext.ts +17 -16
  534. package/src/FiberId/FiberId.ts +1 -1
  535. package/src/FiberRef/FiberRef.ts +3 -63
  536. package/src/FiberRef/builtins.ts +114 -0
  537. package/src/FiberRef/index.ts +0 -1
  538. package/src/FiberRefs/FiberRefs.ts +11 -26
  539. package/src/FiberRuntime/FiberRuntime.ts +263 -245
  540. package/src/Fx/Fx.test.ts +52 -31
  541. package/src/Fx/Fx.ts +58 -34
  542. package/src/Fx/Instruction.ts +103 -60
  543. package/src/Fx/fromLayer.ts +8 -0
  544. package/src/Fx/index.ts +1 -0
  545. package/src/Fx/join.ts +23 -10
  546. package/src/Fx/logging.ts +5 -2
  547. package/src/Fx/run.ts +7 -1
  548. package/src/Fx/scheduler.ts +1 -1
  549. package/src/Fx/scoped.ts +35 -46
  550. package/src/Layer/Layer.ts +11 -5
  551. package/src/Logger/Console.test.ts +9 -5
  552. package/src/Logger/Console.ts +32 -17
  553. package/src/Logger/Logger.ts +4 -2
  554. package/src/Node/Runtime.ts +26 -0
  555. package/src/Node/gracefulShutdown.ts +54 -0
  556. package/src/Node/index.ts +2 -0
  557. package/src/Platform/Platform.ts +11 -5
  558. package/src/Runtime/Runtime.ts +7 -5
  559. package/src/Scheduler/RootScheduler.ts +18 -10
  560. package/src/Scheduler/Scheduler.ts +12 -5
  561. package/src/Scheduler/index.ts +2 -0
  562. package/src/Scheduler/{scheduled.ts → runSchedule.ts} +1 -1
  563. package/src/Scope/Closeable.test.ts +5 -1
  564. package/src/Scope/LocalScope.ts +13 -12
  565. package/src/Scope/ReleaseMap.ts +27 -9
  566. package/src/Semaphore/Semaphore.ts +28 -29
  567. package/src/Service/Id.ts +34 -2
  568. package/src/Service/fn.ts +41 -0
  569. package/src/Service/index.ts +1 -0
  570. package/src/Sink/Sink.ts +35 -21
  571. package/src/Stream/Stream.ts +43 -7
  572. package/src/Stream/_internal.test.ts +12 -0
  573. package/src/Stream/bimap.ts +59 -0
  574. package/src/Stream/continueWith.test.ts +23 -0
  575. package/src/Stream/continueWith.ts +65 -0
  576. package/src/Stream/drain.ts +15 -29
  577. package/src/Stream/empty.ts +8 -0
  578. package/src/Stream/flatMap.test.ts +43 -0
  579. package/src/Stream/flatMap.ts +102 -0
  580. package/src/Stream/flatMapFx.ts +12 -0
  581. package/src/Stream/fromCallback.test.ts +35 -0
  582. package/src/Stream/fromCallback.ts +65 -0
  583. package/src/Stream/fromFx.test.ts +3 -4
  584. package/src/Stream/fromFx.ts +34 -16
  585. package/src/Stream/hkt.ts +36 -0
  586. package/src/Stream/index.ts +11 -0
  587. package/src/Stream/logging.test.ts +24 -0
  588. package/src/Stream/map.ts +35 -0
  589. package/src/Stream/periodic.ts +9 -0
  590. package/src/Stream/run.ts +14 -0
  591. package/src/Stream/scheduled.test.ts +34 -0
  592. package/src/Stream/scheduled.ts +21 -0
  593. package/src/Stream/tap.ts +21 -0
  594. package/src/Supervisor/Supervisor.ts +14 -0
  595. package/src/Supervisor/index.ts +1 -0
  596. package/src/Supervisor/maxFailures.ts +86 -0
  597. package/src/Supervisor/trackIn.ts +33 -0
  598. package/src/Trace/Trace.ts +11 -45
  599. package/src/Tracing/plugin.ts +44 -0
  600. package/src/_internal/suite.ts +24 -0
  601. package/src/index.ts +3 -1
  602. package/cjs/Ref/Ref.d.ts +0 -40
  603. package/cjs/Ref/Ref.d.ts.map +0 -1
  604. package/cjs/Ref/Ref.js.map +0 -1
  605. package/cjs/Ref/atomic.d.ts +0 -5
  606. package/cjs/Ref/atomic.d.ts.map +0 -1
  607. package/cjs/Ref/atomic.js +0 -20
  608. package/cjs/Ref/atomic.js.map +0 -1
  609. package/cjs/Ref/index.d.ts +0 -3
  610. package/cjs/Ref/index.d.ts.map +0 -1
  611. package/cjs/Ref/index.js.map +0 -1
  612. package/cjs/Scheduler/scheduled.d.ts.map +0 -1
  613. package/cjs/Scheduler/scheduled.js.map +0 -1
  614. package/cjs/internal.d.ts +0 -18
  615. package/cjs/internal.d.ts.map +0 -1
  616. package/cjs/internal.js +0 -3
  617. package/cjs/internal.js.map +0 -1
  618. package/coverage/tmp/coverage-74826-1660784295157-0.json +0 -1
  619. package/coverage/tmp/coverage-74830-1660784295115-0.json +0 -1
  620. package/coverage/tmp/coverage-74836-1660784295074-0.json +0 -1
  621. package/esm/Ref/Ref.d.ts +0 -40
  622. package/esm/Ref/Ref.d.ts.map +0 -1
  623. package/esm/Ref/Ref.js +0 -30
  624. package/esm/Ref/Ref.js.map +0 -1
  625. package/esm/Ref/atomic.d.ts +0 -5
  626. package/esm/Ref/atomic.d.ts.map +0 -1
  627. package/esm/Ref/atomic.js +0 -16
  628. package/esm/Ref/atomic.js.map +0 -1
  629. package/esm/Ref/index.d.ts +0 -3
  630. package/esm/Ref/index.d.ts.map +0 -1
  631. package/esm/Ref/index.js +0 -3
  632. package/esm/Ref/index.js.map +0 -1
  633. package/esm/Scheduler/scheduled.d.ts.map +0 -1
  634. package/esm/Scheduler/scheduled.js.map +0 -1
  635. package/esm/internal.d.ts +0 -18
  636. package/esm/internal.d.ts.map +0 -1
  637. package/esm/internal.js +0 -2
  638. package/esm/internal.js.map +0 -1
  639. package/src/Ref/Ref.test.ts +0 -34
  640. package/src/Ref/Ref.ts +0 -76
  641. package/src/Ref/atomic.ts +0 -33
  642. package/src/Ref/index.ts +0 -2
  643. 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 { closeOrWait, wait as waitForScope } from '@/Scope/Closeable.js'
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(() => waitForScope(this.context.scope))
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.unwindStack(Cause.interrupted(id))
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 wait(future)
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.run(this._current.value)
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 run(instr: AnyInstruction) {
187
+ protected step(instr: AnyInstruction) {
182
188
  // Yield when too many synchronous operations have occurred
183
189
  if (decrement(this._opCountRemaining) === 0) {
184
- this._opCountRemaining.set(this._opCountRemaining.id)
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 processAccess(instr: Extract<AnyInstruction, { readonly tag: 'Access' }>) {
202
- this._current = Maybe.Just(instr.f(this.getOrCreateCurrentEnv()).instr)
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(FiberRef.CurrentTrace, instr.trace)
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
- const withConcurrency = acquireFiber(
212
- this.getInternalFiberRef(FiberRef.CurrentConcurrencyLevel).value,
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
- const [future, onExit] = bothFuture(f, s)
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
- const inner = settable()
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
- this._current = Maybe.Just(
230
- pipe(
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
- ).instr,
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
- const f = new FiberRuntime(
254
- instr.first,
255
- this.context.fork({ fiberRefs: this.context.fiberRefs }),
256
- )
257
- const s = new FiberRuntime(
258
- instr.first,
259
- this.context.fork({ fiberRefs: this.context.fiberRefs }),
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
- const inner = settable()
263
- const future = Pending<never, any, any>()
264
- const onExit = (exit: Exit.Exit<Fx.ErrorsOf<F>, any>, index: 0 | 1) => {
265
- complete(future)(
266
- pipe(
267
- Fx.fromExit(exit),
268
- Fx.ensuring(() =>
269
- index === 0 ? s.interruptAs(f.context.id) : f.interruptAs(s.context.id),
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
- inner.dispose()
274
- }
289
+ )
290
+ inner.dispose()
291
+ }
275
292
 
276
- inner.add(this._disposable.add(f.addObserver((exit) => onExit(exit, 0))))
277
- inner.add(this._disposable.add(s.addObserver((exit) => onExit(exit, 1))))
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
- this._current = Maybe.Just(wait(future).instr)
297
+ f.startSync()
298
+ s.startSync()
280
299
 
281
- f.startSync()
282
- s.startSync()
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 runtime = new FiberRuntime(instr.fx, instr.context)
317
+ const child = new FiberRuntime(instr.fx, instr.context)
299
318
 
300
- this._children.push(runtime)
301
- instr.context.scope.ensuring(() =>
302
- Fx.fromLazy(() => this._children.splice(this._children.indexOf(runtime), 1)),
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
- runtime.startAsync()
332
+ child.startAsync()
308
333
 
309
- this.continueWith(runtime)
334
+ this.continueWith(child)
310
335
  }
311
336
 
312
337
  protected processFromCause(instr: Extract<AnyInstruction, { readonly tag: 'FromCause' }>) {
313
- this.unwindStack(instr.cause)
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
- const current = FiberRefs.maybeGetFiberRefValue(
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((a) => Fx.now(instr.f(a))))
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 as any, instr.onRight as any)))
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
- const ref = instr.fiberRef as FiberRef.FiberRef<any, any, any>
375
- const current = FiberRefs.maybeGetFiberRefValue(ref)(this.context.fiberRefs)
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
- return this.continueWith(b)
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
- FiberRefs.setFiberRef(ref, a)(this.context.fiberRefs)
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(FiberRef.CurrentEnv, instr.env)
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
- const layers = this.getInternalFiberRef(FiberRef.Layers).value
416
- const layer = instr.layer
417
- const context = this.context
418
-
419
- const unwindStack = (cause: Cause.AnyCause) =>
420
- this._status.tag === 'Done'
421
- ? context.scope.state.tag === 'Open'
422
- ? context.scope.close(Either.Left(cause))
423
- : Fx.fromLazy(() => this.reportFailure(cause))
424
- : Fx.fromLazy(() => this.unwindStack(cause))
425
-
426
- const provider = Fx.Fx(function* () {
427
- const exit = yield* Fx.attempt(Fx.uninterruptable(layer.build(context.scope)))
428
-
429
- if (Either.isRight(exit)) {
430
- return exit.right
431
- }
432
-
433
- const cause = exit.left
434
-
435
- // Expected errors are not likely to match the calling Fiber.
436
- if (cause.tag === 'Expected') {
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
- // Unexpected errors should be fine to pass along
443
- return yield* Fx.fromCause(cause)
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
- FiberRefs.setFiberRefLocally(
467
- FiberRef.Services,
468
- this.getInternalFiberRef(FiberRef.Services).value.set(instr.service, instr.implementation),
469
- )(this.context.fiberRefs)
470
-
471
- this.popFiberRef(FiberRef.Services)
472
-
473
- this._current = Maybe.Just(instr.fx.instr)
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(FiberRef.CurrentConcurrencyLevel, new Semaphore(instr.concurrencyLevel))
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 current = this.getInterruptStatus()
473
+ const currentlyInterruptable = this.getInterruptStatus()
487
474
 
488
475
  FiberRefs.setFiberRefLocally(
489
- FiberRef.CurrentInterruptStatus,
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(FiberRef.CurrentInterruptStatus)(this.context.fiberRefs)
483
+ FiberRefs.popLocalFiberRef(Builtin.CurrentInterruptStatus)(this.context.fiberRefs)
497
484
 
498
- if (current && this._interruptedBy.size > 0) {
485
+ if (currentlyInterruptable && this._interruptedBy.size > 0) {
499
486
  return Fx.fromExit(
500
487
  Array.from(this._interruptedBy).reduce(
501
- (e, id) => concatExitSeq(e, Either.Left(Cause.interrupted(id))),
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 as any, (fx) => {
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
- const stackTrace = this.getInternalFiberRef(FiberRef.CurrentTrace)
541
- const trimmed = Trace.getTrimmedTrace(Cause.unexpected(error), stackTrace)
542
- const current = Trace.getTraceUpTo(
543
- stackTrace.push(trimmed),
544
- this.context.platform.maxTraceCount,
545
- )
546
- const cause = Cause.traced(Trace.concat(trimmed, current))(Cause.unexpected(error))
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
- this.unwindStack(cause)
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._disposable.add(
636
- this.context.platform.timer.setTimer((time) => {
637
- inner.dispose()
638
- f(time)
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
- this.getInternalFiberRef(FiberRef.CurrentInterruptStatus).value
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 as any, value)(this.context.fiberRefs)
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 as any)(this.context.fiberRefs)
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 getOrCreateCurrentEnv(): Env.Env<any> {
668
- const locals = this.context.fiberRefs.locals.get()
669
- const maybe = locals.get(FiberRef.CurrentEnv)
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 (maybe.tag === 'Just') {
672
- return maybe.value.value
665
+ if (Maybe.isJust(currentValue)) {
666
+ this._current = Maybe.Just(f(currentValue.value).instr)
667
+ return
673
668
  }
674
669
 
675
- const env = Env.Env(this.context.fiberRefs)
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 (maybe.tag === 'Just') {
686
- return maybe.value
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
- throw new Error(
690
- `There is a bug in @typed/Fx's FiberRuntime not having access to expected FiberRef`,
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
- const maybe = this.context.fiberRefs.locals.get().get(FiberRef.CurrentTrace)
696
-
697
- if (maybe.tag === 'Just') {
698
- return Trace.getTraceUpTo(
699
- this.getInternalFiberRef(FiberRef.CurrentTrace),
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
- throw new Error(
705
- `There is a bug in @typed/Fx's FiberRuntime not having access to the StackTrace`,
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