@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
@@ -1,4 +1,4 @@
1
- import { Either } from 'hkt-ts/Either'
1
+ import { Either, Left, Right } from 'hkt-ts/Either'
2
2
  import { Maybe } from 'hkt-ts/Maybe'
3
3
  import { Lazy, flow } from 'hkt-ts/function'
4
4
  import { NonNegativeInteger } from 'hkt-ts/number'
@@ -9,6 +9,7 @@ import { Cause } from '@/Cause/Cause.js'
9
9
  import type { Env } from '@/Env/Env.js'
10
10
  import type { Live } from '@/Fiber/Fiber.js'
11
11
  import type { FiberContext } from '@/FiberContext/FiberContext.js'
12
+ import { FiberId } from '@/FiberId/FiberId.js'
12
13
  import type { FiberRef } from '@/FiberRef/FiberRef.js'
13
14
  import type { Future } from '@/Future/index.js'
14
15
  import type { Layer } from '@/Layer/Layer.js'
@@ -16,28 +17,29 @@ import { Service } from '@/Service/Service.js'
16
17
  import { Trace } from '@/Trace/Trace.js'
17
18
 
18
19
  export type Instruction<R, E, A> =
19
- | Access<R, R, E, A>
20
20
  | AddTrace<R, E, A>
21
- | BothFx<R, E, any, R, E, any>
21
+ | BothFx<R, E, A>
22
22
  | DeleteFiberRef<R, E, any, A>
23
- | EitherFx<R, E, any, R, E, any>
23
+ | EitherFx<R, E, A>
24
24
  | FiberRefLocally<any, any, any, R, E, A>
25
25
  | FlatMap<R, E, any, R, E, A>
26
- | Fork<R, any, A>
26
+ | Fork<R, E, A>
27
27
  | FromCause<E>
28
28
  | FromLazy<A>
29
+ | GetEnv<R, E, A>
29
30
  | GetFiberContext
30
31
  | GetFiberRef<R, E, A>
31
32
  | GetInterruptStatus
32
33
  | GetTrace
33
34
  | LazyFx<R, E, A>
34
35
  | MapFx<R, E, any, A>
35
- | Match<R, E, any, R, E, A, R, E, A>
36
+ | Match<R, any, any, R, E, A, R, E, A>
36
37
  | ModifyFiberRef<R, E, any, A>
37
38
  | Now<A>
38
39
  | Provide<any, E, A>
39
- | ProvideService<R, E, A, any>
40
+ | Provide<never, E, A>
40
41
  | ProvideLayer<R, E, A, R, E, any>
42
+ | ProvideService<R, E, A, any>
41
43
  | SetConcurrencyLevel<R, E, A>
42
44
  | SetInterruptStatus<R, E, A>
43
45
  | Wait<R, E, A>
@@ -48,7 +50,7 @@ export type AnyInstruction =
48
50
  | Instruction<never, any, any>
49
51
  | Instruction<any, never, any>
50
52
 
51
- export abstract class Instr<R, E, A> {
53
+ export abstract class Instr<out R, out E, out A> {
52
54
  readonly _R!: () => R
53
55
  readonly _E!: () => E
54
56
  readonly _A!: () => A
@@ -59,12 +61,12 @@ export abstract class Instr<R, E, A> {
59
61
  this.instr = this
60
62
  }
61
63
 
62
- *[Symbol.iterator](): Generator<this, A, A> {
64
+ *[Symbol.iterator](): Generator<this, A, any> {
63
65
  return yield this
64
66
  }
65
67
  }
66
68
 
67
- export class Now<A> extends Instr<never, never, A> {
69
+ export class Now<out A> extends Instr<never, never, A> {
68
70
  readonly tag = 'Now'
69
71
  constructor(readonly value: A, readonly __trace?: string) {
70
72
  super(__trace)
@@ -75,7 +77,7 @@ export class Now<A> extends Instr<never, never, A> {
75
77
  }
76
78
  }
77
79
 
78
- export class FromLazy<A> extends Instr<never, never, A> {
80
+ export class FromLazy<out A> extends Instr<never, never, A> {
79
81
  readonly tag = 'FromLazy'
80
82
  constructor(readonly f: Lazy<A>, readonly __trace?: string) {
81
83
  super(__trace)
@@ -86,7 +88,7 @@ export class FromLazy<A> extends Instr<never, never, A> {
86
88
  }
87
89
  }
88
90
 
89
- export class FromCause<E> extends Instr<never, E, never> {
91
+ export class FromCause<out E> extends Instr<never, E, never> {
90
92
  readonly tag = 'FromCause'
91
93
  constructor(readonly cause: Cause<E>, readonly __trace?: string) {
92
94
  super(__trace)
@@ -97,7 +99,7 @@ export class FromCause<E> extends Instr<never, E, never> {
97
99
  }
98
100
  }
99
101
 
100
- export class MapFx<R, E, A, B> extends Instr<R, E, B> {
102
+ export class MapFx<out R, out E, in out A, out B> extends Instr<R, E, B> {
101
103
  readonly tag = 'Map'
102
104
 
103
105
  constructor(readonly fx: Fx<R, E, A>, readonly f: (a: A) => B, readonly __trace?: string) {
@@ -107,19 +109,30 @@ export class MapFx<R, E, A, B> extends Instr<R, E, B> {
107
109
  static make<R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => B, __trace?: string): Fx<R, E, B> {
108
110
  const prev = fx.instr
109
111
 
112
+ // Eagerly evaluate the function to runtime cost. Stack unsafe.
110
113
  if (prev.tag === 'Now') {
111
- return new Now(f(prev.value), __trace) as Fx<R, E, B>
114
+ return Now.make(f(prev.value), __trace)
115
+ }
116
+
117
+ // Map cannot process failures
118
+ if (prev.tag === 'FromCause') {
119
+ return prev
112
120
  }
113
121
 
122
+ // Fuse together multiple maps.
114
123
  if (prev.tag === 'Map') {
115
- return new MapFx(prev.fx as Fx<any, any, any>, flow(prev.f, f), __trace)
124
+ return MapFx.make(prev.fx, flow(prev.f, f), __trace)
116
125
  }
117
126
 
118
127
  return new MapFx(fx, f, __trace)
119
128
  }
120
129
  }
121
130
 
122
- export class FlatMap<R, E, A, R2, E2, B> extends Instr<R | R2, E | E2, B> {
131
+ export class FlatMap<out R, out E, in out A, out R2, out E2, out B> extends Instr<
132
+ R | R2,
133
+ E | E2,
134
+ B
135
+ > {
123
136
  readonly tag = 'FlatMap'
124
137
 
125
138
  constructor(
@@ -137,23 +150,31 @@ export class FlatMap<R, E, A, R2, E2, B> extends Instr<R | R2, E | E2, B> {
137
150
  ): Fx<R | R2, E | E2, B> {
138
151
  const prev = fx.instr
139
152
 
140
- if (prev.tag === 'Now') {
141
- return f(prev.value) as Fx<R | R2, E | E2, B>
153
+ // Flatmap cannot process failures
154
+ if (prev.tag === 'FromCause') {
155
+ return prev
142
156
  }
143
157
 
158
+ // Fuse together Map + FlatMap into a single FlatMap.
144
159
  if (prev.tag === 'Map') {
145
- return new FlatMap(prev.fx as Fx<any, any, any>, flow(prev.f, f), __trace) as Fx<
146
- R | R2,
147
- E | E2,
148
- B
149
- >
160
+ return FlatMap.make(prev.fx, flow(prev.f, f), __trace)
150
161
  }
151
162
 
152
- return new FlatMap(fx, f, __trace) as Fx<R | R2, E | E2, B>
163
+ return new FlatMap(fx, f, __trace)
153
164
  }
154
165
  }
155
166
 
156
- export class Match<R, E, A, R2, E2, B, R3, E3, C> extends Instr<R | R2 | R3, E2 | E3, B | C> {
167
+ export class Match<
168
+ out R,
169
+ in out E,
170
+ in out A,
171
+ out R2,
172
+ out E2,
173
+ out B,
174
+ out R3,
175
+ out E3,
176
+ out C,
177
+ > extends Instr<R | R2 | R3, E2 | E3, B | C> {
157
178
  readonly tag = 'Match'
158
179
 
159
180
  constructor(
@@ -173,35 +194,24 @@ export class Match<R, E, A, R2, E2, B, R3, E3, C> extends Instr<R | R2 | R3, E2
173
194
  ): Fx<R | R2 | R3, E2 | E3, B | C> {
174
195
  const prev = fx.instr
175
196
 
176
- if (prev.tag === 'Now') {
177
- return onRight(prev.value) as Fx<R | R2 | R3, E2 | E3, B | C>
178
- }
179
-
180
- if (prev.tag === 'FromCause') {
181
- return onLeft(prev.cause) as Fx<R | R2 | R3, E2 | E3, B | C>
182
- }
183
-
197
+ // Fuse together Map + Match
184
198
  if (prev.tag === 'Map') {
185
- return new Match(prev.fx as Fx<any, any, any>, onLeft, flow(prev.f, onRight), __trace) as any
199
+ return Match.make(prev.fx, onLeft, flow(prev.f, onRight), __trace)
186
200
  }
187
201
 
188
- return new Match(fx, onLeft, onRight, __trace) as any
202
+ return new Match(fx, onLeft, onRight, __trace)
189
203
  }
190
204
  }
191
205
 
192
- export class Access<R, R2, E, A> extends Instr<R | R2, E, A> {
193
- readonly tag = 'Access'
206
+ export class GetEnv<out R, out E, out A> extends Instr<R, E, A> {
207
+ readonly tag = 'GetEnv'
194
208
 
195
- constructor(readonly f: (r: Env<R>) => Fx<R2, E, A>, readonly __trace?: string) {
196
- super(__trace)
197
- }
198
-
199
- static make<R, R2, E, A>(f: (r: Env<R>) => Fx<R2, E, A>, __trace?: string): Fx<R | R2, E, A> {
200
- return new Access(f, __trace) as Fx<R | R2, E, A>
209
+ static make<R>(__trace?: string): Fx<R, never, Env<R>> {
210
+ return new GetEnv<R, never, Env<R>>(__trace)
201
211
  }
202
212
  }
203
213
 
204
- export class Provide<R, E, A> extends Instr<never, E, A> {
214
+ export class Provide<out R, out E, out A> extends Instr<never, E, A> {
205
215
  readonly tag = 'Provide'
206
216
 
207
217
  constructor(readonly fx: Fx<R, E, A>, readonly env: Env<R>, readonly __trace?: string) {
@@ -274,7 +284,7 @@ export class LazyFx<R, E, A> extends Instr<R, E, A> {
274
284
  export class Wait<R, E, A> extends Instr<R, E, A> {
275
285
  readonly tag = 'Wait'
276
286
 
277
- constructor(readonly future: Future<R, E, A>, readonly __trace?: string) {
287
+ constructor(readonly future: Future<any, any, any>, readonly __trace?: string) {
278
288
  super(__trace)
279
289
  }
280
290
 
@@ -313,10 +323,11 @@ export class SetInterruptStatus<R, E, A> extends Instr<R, E, A> {
313
323
  }
314
324
  }
315
325
 
316
- export class GetFiberContext extends Instr<never, never, FiberContext> {
326
+ export class GetFiberContext extends Instr<never, never, FiberContext<FiberId.Live>> {
317
327
  readonly tag = 'GetFiberContext'
318
328
 
319
- static make = (__trace?: string): Fx<never, never, FiberContext> => new GetFiberContext(__trace)
329
+ static make = (__trace?: string): Fx<never, never, FiberContext<FiberId.Live>> =>
330
+ new GetFiberContext(__trace)
320
331
  }
321
332
 
322
333
  export class GetInterruptStatus extends Instr<never, never, boolean> {
@@ -348,7 +359,7 @@ export class SetConcurrencyLevel<R, E, A> extends Instr<R, E, A> {
348
359
  export class GetFiberRef<R, E, A> extends Instr<R, E, A> {
349
360
  readonly tag = 'GetFiberRef'
350
361
 
351
- constructor(readonly fiberRef: FiberRef<R, E, A>, __trace?: string) {
362
+ constructor(readonly fiberRef: FiberRef<any, any, any>, __trace?: string) {
352
363
  super(__trace)
353
364
  }
354
365
 
@@ -411,28 +422,32 @@ export class FiberRefLocally<R, E, A, R2, E2, B> extends Instr<R2, E2, B> {
411
422
  }
412
423
  }
413
424
 
414
- export class Fork<R, E, A> extends Instr<R, never, Live<E, A>> {
425
+ export class Fork<R, E, A> extends Instr<R, E, A> {
415
426
  readonly tag = 'Fork'
416
427
 
417
- constructor(readonly fx: Fx<R, E, A>, readonly context: FiberContext, readonly __trace?: string) {
428
+ constructor(
429
+ readonly fx: Fx<any, any, any>,
430
+ readonly context: FiberContext<FiberId.Live>,
431
+ readonly __trace?: string,
432
+ ) {
418
433
  super(__trace)
419
434
  }
420
435
 
421
436
  static make<R, E, A>(
422
437
  fx: Fx<R, E, A>,
423
- context: FiberContext,
438
+ context: FiberContext<FiberId.Live>,
424
439
  __trace?: string,
425
440
  ): Fx<R, never, Live<E, A>> {
426
- return new Fork(fx, context, __trace) as any
441
+ return new Fork(fx, context, __trace)
427
442
  }
428
443
  }
429
444
 
430
- export class BothFx<R, E, A, R2, E2, B> extends Instr<R | R2, E | E2, readonly [A, B]> {
445
+ export class BothFx<R, E, A> extends Instr<R, E, A> {
431
446
  readonly tag = 'Both'
432
447
 
433
448
  constructor(
434
- readonly first: Fx<R, E, A>,
435
- readonly second: Fx<R2, E2, B>,
449
+ readonly first: Fx<any, any, any>,
450
+ readonly second: Fx<any, any, any>,
436
451
  readonly __trace?: string,
437
452
  ) {
438
453
  super(__trace)
@@ -443,16 +458,24 @@ export class BothFx<R, E, A, R2, E2, B> extends Instr<R | R2, E | E2, readonly [
443
458
  second: Fx<R2, E2, B>,
444
459
  __trace?: string,
445
460
  ): Fx<R | R2, E | E2, readonly [A, B]> {
446
- return new BothFx(first, second, __trace) as Fx<R | R2, E | E2, readonly [A, B]>
461
+ // Any Failures cannot be combined into a tuple of success values
462
+ if (first.instr.tag === 'FromCause') {
463
+ return first.instr
464
+ }
465
+ if (second.instr.tag === 'FromCause') {
466
+ return second.instr
467
+ }
468
+
469
+ return new BothFx(first, second, __trace)
447
470
  }
448
471
  }
449
472
 
450
- export class EitherFx<R, E, A, R2, E2, B> extends Instr<R | R2, E | E2, Either<A, B>> {
473
+ export class EitherFx<R, E, A> extends Instr<R, E, A> {
451
474
  readonly tag = 'Either'
452
475
 
453
476
  constructor(
454
- readonly first: Fx<R, E, A>,
455
- readonly second: Fx<R2, E2, B>,
477
+ readonly first: Fx<any, any, any>,
478
+ readonly second: Fx<any, any, any>,
456
479
  readonly __trace?: string,
457
480
  ) {
458
481
  super(__trace)
@@ -463,6 +486,26 @@ export class EitherFx<R, E, A, R2, E2, B> extends Instr<R | R2, E | E2, Either<A
463
486
  second: Fx<R2, E2, B>,
464
487
  __trace?: string,
465
488
  ): Fx<R | R2, E | E2, Either<A, B>> {
466
- return new EitherFx(first, second, __trace) as any
489
+ const fi = first.instr
490
+
491
+ if (fi.tag === 'Now') {
492
+ return Now.make(Left(fi.value), __trace)
493
+ }
494
+
495
+ const si = second.instr
496
+
497
+ if (si.tag === 'Now') {
498
+ return Now.make(Right(si.value), __trace)
499
+ }
500
+
501
+ if (fi.tag === 'FromCause') {
502
+ return fi
503
+ }
504
+
505
+ if (si.tag === 'FromCause') {
506
+ return si
507
+ }
508
+
509
+ return new EitherFx(first, second, __trace)
467
510
  }
468
511
  }
@@ -0,0 +1,8 @@
1
+ import * as Fx from './Fx.js'
2
+
3
+ import { Layer } from '@/Layer/Layer.js'
4
+ import { Scope } from '@/Scope/Scope.js'
5
+
6
+ export function fromLayer<R, E, A>(layer: Layer<R, E, A>): Fx.Fx<R | Scope, E, A> {
7
+ return Fx.flatMap(layer.build)(Fx.ask(Scope))
8
+ }
package/src/Fx/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './fromLayer.js'
1
2
  export * from './Fx.js'
2
3
  export * from './join.js'
3
4
  export * from './logging.js'
package/src/Fx/join.ts CHANGED
@@ -1,17 +1,30 @@
1
- import { Either } from 'hkt-ts'
1
+ import { pipe } from 'hkt-ts'
2
2
 
3
- import { Fx, fromExit } from './Fx.js'
3
+ import * as Fx from './Fx.js'
4
4
 
5
- // eslint-disable-next-line import/no-cycle
6
5
  import * as Fiber from '@/Fiber/Fiber.js'
6
+ import { FiberContext } from '@/FiberContext/FiberContext.js'
7
+ import { FiberId } from '@/FiberId/FiberId.js'
8
+ import { Scope } from '@/Scope/Scope.js'
7
9
 
8
10
  export const join = <E, A>(fiber: Fiber.Fiber<E, A>) =>
9
- Fx(function* () {
10
- const exit = yield* fiber.exit
11
+ pipe(
12
+ fiber.exit,
13
+ Fx.flatMap((exit) =>
14
+ pipe(
15
+ Fiber.inheritFiberRefs(fiber),
16
+ Fx.flatMap(() => Fx.fromExit(exit)),
17
+ ),
18
+ ),
19
+ )
11
20
 
12
- if (Either.isRight(exit)) {
13
- yield* Fiber.inheritFiberRefs(fiber)
14
- }
21
+ export const forkJoinInContext = <R, E, A>(
22
+ fx: Fx.Fx<R, E, A>,
23
+ context: FiberContext<FiberId.Live>,
24
+ ): Fx.Fx<R, E, A> => pipe(fx, Fx.forkInContext(context), Fx.flatMap(join))
15
25
 
16
- return yield* fromExit(exit)
17
- })
26
+ export const forkJoinIn = <R, E, A>(fx: Fx.Fx<R, E, A>, scope: Scope): Fx.Fx<R, E, A> =>
27
+ pipe(fx, Fx.forkIn(scope), Fx.flatMap(join))
28
+
29
+ export const forkJoin = <R, E, A>(fx: Fx.Fx<R, E, A>): Fx.Fx<R, E, A> =>
30
+ pipe(fx, Fx.fork, Fx.flatMap(join))
package/src/Fx/logging.ts CHANGED
@@ -2,10 +2,11 @@ import { pipe } from 'hkt-ts'
2
2
 
3
3
  import * as Fx from './Fx.js'
4
4
 
5
- import { CurrentLogAnnotations, CurrentLogSpans } from '@/FiberRef/FiberRef.js'
5
+ import { CurrentLogAnnotations, CurrentLogSpans } from '@/FiberRef/builtins.js'
6
6
  import { LogAnnotation } from '@/Logger/LogAnnotation.js'
7
7
  import { LogLevel } from '@/Logger/LogLevel.js'
8
8
  import { LogSpan } from '@/Logger/LogSpan.js'
9
+ import { EmptyTrace, Trace } from '@/Trace/Trace.js'
9
10
 
10
11
  const makeLogWithLevel = (level: LogLevel) => (msg: string, __trace?: string) =>
11
12
  pipe(
@@ -13,14 +14,16 @@ const makeLogWithLevel = (level: LogLevel) => (msg: string, __trace?: string) =>
13
14
  Fx.bind('context', () => Fx.getFiberContext),
14
15
  Fx.bind('spans', () => Fx.getFiberRef(CurrentLogSpans)),
15
16
  Fx.bind('annotations', () => Fx.getFiberRef(CurrentLogAnnotations)),
17
+ Fx.bind('trace', () => (level >= LogLevel.Trace ? Fx.getTrace : Fx.now<Trace>(EmptyTrace))),
16
18
  Fx.flatMap(
17
- ({ context, spans, annotations }) =>
19
+ ({ context, spans, annotations, trace }) =>
18
20
  context.logger.log(
19
21
  msg,
20
22
  level,
21
23
  context.id,
22
24
  Array.from(spans.values()),
23
25
  Array.from(annotations.values()),
26
+ trace,
24
27
  ),
25
28
  __trace,
26
29
  ),
package/src/Fx/run.ts CHANGED
@@ -2,18 +2,24 @@ import { pipe } from 'hkt-ts'
2
2
 
3
3
  import { Of, getFiberContext, map } from './Fx.js'
4
4
 
5
+ import { Atomic } from '@/Atomic/index.js'
6
+ import { AnyLiveFiber } from '@/Fiber/Fiber.js'
5
7
  import { FiberContext } from '@/FiberContext/FiberContext.js'
6
8
  import { FiberId } from '@/FiberId/FiberId.js'
7
9
  import { Platform } from '@/Platform/Platform.js'
8
10
  import { Runtime } from '@/Runtime/index.js'
9
11
  import { GlobalScope } from '@/Scope/GlobalScope.js'
12
+ import { trackIn } from '@/Supervisor/trackIn.js'
10
13
 
14
+ export const RootFibers = Atomic<ReadonlyMap<FiberId.Live, AnyLiveFiber>>(new Map())
15
+ export const MainSupervisor = trackIn(RootFibers)
11
16
  export const MainPlatform = Platform()
12
17
  export const MainRuntime = Runtime(
13
18
  FiberContext({
14
19
  platform: MainPlatform,
15
- id: FiberId.None as any,
20
+ id: FiberId.None,
16
21
  scope: GlobalScope,
22
+ supervisor: MainSupervisor,
17
23
  }),
18
24
  )
19
25
 
@@ -54,7 +54,7 @@ export function schedule(schedule: Schedule.Schedule) {
54
54
  Fx.bind('env', () => Fx.getEnv<R>()),
55
55
  Fx.bind('context', () => Fx.getFiberContext),
56
56
  Fx.map(({ scheduler, env, context }) =>
57
- scheduler.schedule(fx, schedule, env, context.fork()),
57
+ scheduler.schedule(fx, env, schedule, context.fork()),
58
58
  ),
59
59
  )
60
60
  }
package/src/Fx/scoped.ts CHANGED
@@ -1,15 +1,6 @@
1
1
  import { pipe } from 'hkt-ts/function'
2
2
 
3
- import {
4
- Fx,
5
- ask,
6
- ensuring,
7
- getEnv,
8
- getFiberContext,
9
- provide,
10
- provideService,
11
- uninterruptable,
12
- } from './Fx.js'
3
+ import * as Fx from './Fx.js'
13
4
 
14
5
  import { ConcurrentStrategy, FinalizationStrategy } from '@/Finalizer/Finalizer.js'
15
6
  import { Scope } from '@/Scope/Scope.js'
@@ -18,35 +9,36 @@ import { Scope } from '@/Scope/Scope.js'
18
9
  * Run a Scoped Fx within an isolated Scope, cleaning up those resources as soon as complete.
19
10
  */
20
11
  export function scoped<R, E, A>(
21
- scoped: Fx<R | Scope, E, A>,
12
+ scoped: Fx.Fx<R | Scope, E, A>,
22
13
  strategy: FinalizationStrategy = ConcurrentStrategy,
23
- ): Fx<Exclude<R, Scope>, E, A> {
24
- return Fx(function* () {
25
- const { scope: fiberScope } = yield* getFiberContext
26
- const scope = fiberScope.fork(strategy)
14
+ ): Fx.Fx<Exclude<R, Scope>, E, A> {
15
+ return pipe(
16
+ Fx.getFiberContext,
17
+ Fx.flatMap(({ scope: fiberScope }) => {
18
+ const scope = fiberScope.fork(strategy)
27
19
 
28
- return yield* pipe(scoped, provideService(Scope, scope), ensuring(scope.close))
29
- })
20
+ return pipe(scoped, Fx.provideService(Scope, scope), Fx.ensuring(scope.close))
21
+ }),
22
+ )
30
23
  }
31
24
 
32
25
  /**
33
26
  * Track a Resource within a given Scoped environment
34
27
  */
35
28
  export function managed<R, E, A, R2>(
36
- acquire: Fx<R, E, A>,
37
- release: (value: A) => Fx<R2, never, any>,
38
- ): Fx<R | R2 | Scope, E, A> {
39
- return uninterruptable(
40
- Fx(function* () {
41
- const scope = yield* ask(Scope)
42
- const env = yield* getEnv<R | R2>()
43
-
44
- const a = yield* acquire
45
-
46
- scope.ensuring(() => pipe(a, release, provide(env)))
47
-
48
- return a
49
- }),
29
+ acquire: Fx.Fx<R, E, A>,
30
+ release: (value: A) => Fx.Fx<R2, never, any>,
31
+ ): Fx.Fx<R | R2 | Scope, E, A> {
32
+ return pipe(
33
+ Fx.ask(Scope),
34
+ Fx.bindTo('scope'),
35
+ Fx.bind('env', () => Fx.getEnv<R | R2>()),
36
+ Fx.bind('a', () => acquire),
37
+ Fx.tap(({ scope, env, a }) =>
38
+ Fx.fromLazy(() => scope.ensuring(() => pipe(a, release, Fx.provide(env)))),
39
+ ),
40
+ Fx.map(({ a }) => a),
41
+ Fx.uninterruptable,
50
42
  )
51
43
  }
52
44
 
@@ -54,24 +46,21 @@ export function managed<R, E, A, R2>(
54
46
  * Perform an effect with an aquired resource with the release of that resource.
55
47
  */
56
48
  export function bracket<R, E, A, R2, E2, B, R3>(
57
- acquire: Fx<R, E, A>,
58
- withResource: (a: A) => Fx<R2, E2, B>,
59
- release: (a: A) => Fx<R3, never, unknown>,
60
- ): Fx<Scope | R | R2 | R3, E | E2, B> {
61
- return Fx(function* () {
62
- const a: A = yield* managed(acquire, release)
63
-
64
- return yield* withResource(a)
65
- })
49
+ acquire: Fx.Fx<R, E, A>,
50
+ withResource: (a: A) => Fx.Fx<R2, E2, B>,
51
+ release: (a: A) => Fx.Fx<R3, never, unknown>,
52
+ ): Fx.Fx<Scope | R | R2 | R3, E | E2, B> {
53
+ return pipe(managed(acquire, release), Fx.flatMap(withResource))
66
54
  }
67
55
 
68
56
  /**
69
57
  * Run a Scoped Fx within an isolated Scope, cleaning up those resources as soon as complete.
70
58
  */
71
- export function fiberScoped<R, E, A>(scoped: Fx<R | Scope, E, A>): Fx<Exclude<R, Scope>, E, A> {
72
- return Fx(function* () {
73
- const { scope } = yield* getFiberContext
74
-
75
- return yield* pipe(scoped, provideService(Scope, scope))
76
- })
59
+ export function fiberScoped<R, E, A>(
60
+ scoped: Fx.Fx<R | Scope, E, A>,
61
+ ): Fx.Fx<Exclude<R, Scope>, E, A> {
62
+ return pipe(
63
+ Fx.getFiberContext,
64
+ Fx.flatMap(({ scope }) => pipe(scoped, Fx.provideService(Scope, scope))),
65
+ )
77
66
  }
@@ -4,11 +4,6 @@ import * as Fx from '@/Fx/Fx.js'
4
4
  import { Scope } from '@/Scope/Scope.js'
5
5
  import { Service } from '@/Service/Service.js'
6
6
 
7
- // TODO: Global Layers
8
- // TODO: Refreshing
9
- // TODO: Combinators for providing fallbacks
10
- // TODO: Combinators for composing layers
11
-
12
7
  export interface Layer<R, E, A> {
13
8
  readonly service: Service<A>
14
9
  readonly build: (scope: Scope) => Fx.Fx<R, E, A>
@@ -42,3 +37,14 @@ export function fromFx<S, R, E, A extends S>(
42
37
  ): Layer<R, E, S> {
43
38
  return Layer(s, (scope) => pipe(fx, Fx.provideService(Scope, scope)))
44
39
  }
40
+
41
+ export function orElse<E, A, R2, E2, B extends A>(orElse: (e: E) => Layer<R2, E2, B>) {
42
+ return <R>(layer: Layer<R, E, A>): Layer<R | R2, E2, A> => {
43
+ return Layer(layer.service, (scope) =>
44
+ pipe(
45
+ layer.build(scope),
46
+ Fx.orElse((e) => orElse(e).build(scope)),
47
+ ),
48
+ )
49
+ }
50
+ }
@@ -1,10 +1,14 @@
1
- import { runTest } from '@/Fx/Fx.test.js'
2
- import { log, span } from '@/Fx/logging.js'
1
+ import { addCustomTrace } from '@/Fx/index.js'
2
+ import { annotate, logTrace, span } from '@/Fx/logging.js'
3
+ import { runMain } from '@/Fx/run.js'
4
+ import { testSuite } from '@/_internal/suite.js'
3
5
 
4
- describe(new URL(import.meta.url).pathname, () => {
6
+ testSuite(import.meta.url, () => {
5
7
  it('allows logging to the console', async () => {
6
- const test = span('foo')(log('test'))
8
+ const test = addCustomTrace('outer')(
9
+ span('foo')(annotate('bar', 'baz')(addCustomTrace('inner')(logTrace('test')))),
10
+ )
7
11
 
8
- await runTest(test)
12
+ await runMain(test)
9
13
  })
10
14
  })