@typed/fx 0.0.3 → 0.0.6

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