@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
package/src/Env/Env.ts CHANGED
@@ -1,13 +1,6 @@
1
- import { pipe } from 'hkt-ts'
2
- import * as Maybe from 'hkt-ts/Maybe'
3
-
4
- // eslint-disable-next-line import/no-cycle
5
- import * as FiberRef from '@/FiberRef/index.js'
6
- // eslint-disable-next-line import/no-cycle
1
+ import { getServiceFromFiberRefs } from '@/FiberRef/builtins.js'
7
2
  import * as FiberRefs from '@/FiberRefs/FiberRefs.js'
8
- import { Fx, Of, fromExit } from '@/Fx/Fx.js'
9
- // eslint-disable-next-line import/no-cycle
10
- import { join } from '@/Fx/join.js'
3
+ import { Of } from '@/Fx/Fx.js'
11
4
  import { Service } from '@/Service/Service.js'
12
5
 
13
6
  export interface Env<R> {
@@ -16,47 +9,6 @@ export interface Env<R> {
16
9
 
17
10
  export function Env<R>(fiberRefs: FiberRefs.FiberRefs): Env<R> {
18
11
  return {
19
- get: get(fiberRefs), // Always use a snapshot of the FiberRefs to avoid mutability problems.
20
- }
21
- }
22
-
23
- function get(fiberRefs: FiberRefs.FiberRefs) {
24
- return <S>(id: Service<S>): Of<S> => {
25
- return Fx(function* () {
26
- const service = pipe(
27
- fiberRefs,
28
- FiberRefs.maybeGetFiberRefStack(FiberRef.Services),
29
- Maybe.flatMap((s) => s.value.get(id)),
30
- )
31
-
32
- if (Maybe.isJust(service)) {
33
- return service.value as S
34
- }
35
-
36
- const layers = FiberRefs.maybeGetFiberRefStack(FiberRef.Layers)(fiberRefs)
37
- const layer = pipe(
38
- layers,
39
- Maybe.flatMap((s) => s.value.get(id)),
40
- )
41
-
42
- if (Maybe.isNothing(layers) || Maybe.isNothing(layer)) {
43
- throw new Error(`Unable to find Layer or Service for ${id.description}`)
44
- }
45
-
46
- const [makeFiber, currentFiber] = layer.value
47
-
48
- if (Maybe.isJust(currentFiber)) {
49
- return (yield* fromExit(yield* currentFiber.value.exit)) as S
50
- }
51
-
52
- const fiber = makeFiber()
53
-
54
- FiberRefs.setFiberRef(
55
- FiberRef.Layers,
56
- layers.value.value.set(id, [makeFiber, Maybe.Just(fiber)]),
57
- )(fiberRefs)
58
-
59
- return (yield* join(fiber)) as S
60
- })
12
+ get: getServiceFromFiberRefs(fiberRefs),
61
13
  }
62
14
  }
package/src/Exit/hkt.ts CHANGED
@@ -1,7 +1,9 @@
1
- import { HKT2, Params, flow, pipe } from 'hkt-ts'
2
- import { Left, Right, match } from 'hkt-ts/Either'
1
+ import { HKT2, Params, Variance, flow, pipe } from 'hkt-ts'
2
+ import * as Either from 'hkt-ts/Either'
3
3
  import * as B from 'hkt-ts/Typeclass/Bicovariant'
4
+ import { Bottom2 } from 'hkt-ts/Typeclass/Bottom'
4
5
  import * as C from 'hkt-ts/Typeclass/Covariant'
6
+ import { Top2 } from 'hkt-ts/Typeclass/Top'
5
7
 
6
8
  import { Exit } from './Exit.js'
7
9
 
@@ -9,10 +11,15 @@ import * as Cause from '@/Cause/index.js'
9
11
 
10
12
  export interface ExitHKT extends HKT2 {
11
13
  readonly type: Exit<this[Params.E], this[Params.A]>
14
+ readonly defaults: {
15
+ readonly [Params.E]: Variance.Covariant<unknown>
16
+ readonly [Params.A]: Variance.Covariant<unknown>
17
+ }
12
18
  }
13
19
 
14
20
  export const Bicovariant: B.Bicovariant2<ExitHKT> = {
15
- bimap: (f, g) => (exit) => pipe(exit, match(flow(Cause.map(f), Left), flow(g, Right))),
21
+ bimap: (f, g) => (exit) =>
22
+ pipe(exit, Either.match(flow(Cause.map(f), Either.Left), flow(g, Either.Right))),
16
23
  }
17
24
 
18
25
  export const bimap = Bicovariant.bimap
@@ -27,3 +34,11 @@ export const bindTo = C.bindTo(Covariant)
27
34
  export const flap = C.flap(Covariant)
28
35
  export const mapTo = C.mapTo(Covariant)
29
36
  export const tupled = C.tupled(Covariant)
37
+
38
+ export const Top = Either.Top as Top2<ExitHKT>
39
+ export const top = Top.top
40
+
41
+ export const Bottom: Bottom2<ExitHKT> = {
42
+ bottom: Either.Left(Cause.Empty),
43
+ }
44
+ export const bottom = Bottom.bottom
@@ -3,10 +3,9 @@ import { flow, pipe } from 'hkt-ts/function'
3
3
  import type { Exit } from '@/Exit/Exit.js'
4
4
  import type { FiberContext } from '@/FiberContext/FiberContext.js'
5
5
  import type { FiberId } from '@/FiberId/FiberId.js'
6
- // eslint-disable-next-line import/no-cycle
7
6
  import { join } from '@/FiberRefs/FiberRefs.js'
8
7
  import type { FiberStatus } from '@/FiberStatus/index.js'
9
- import { Fx, Of, flatMap, fork, fromLazy, getFiberContext } from '@/Fx/Fx.js'
8
+ import { Of, flatMap, fork, fromExit, getFiberContext, map } from '@/Fx/Fx.js'
10
9
  import type { Trace } from '@/Trace/Trace.js'
11
10
 
12
11
  export type Fiber<E, A> = Live<E, A> | Synthetic<E, A>
@@ -31,20 +30,20 @@ export interface Live<E, A> {
31
30
 
32
31
  export type AnyLiveFiber = Live<any, any> | Live<never, never> | Live<any, never> | Live<never, any>
33
32
 
34
- export const Live = <E, A>(params: Omit<Live<E, A>, 'tag'>): Live<E, A> => ({
33
+ export const Live = <E, A>(params: Omit<Live<E, A>, 'tag'>): Fiber<E, A> => ({
35
34
  tag: 'Live',
36
35
  ...params,
37
36
  })
38
37
 
39
38
  export interface Synthetic<E, A> {
40
39
  readonly tag: 'Synthetic'
41
- readonly id: FiberId.Synthetic
40
+ readonly id: FiberId
42
41
  readonly exit: Of<Exit<E, A>>
43
42
  readonly inheritFiberRefs: Of<void>
44
43
  readonly interruptAs: (id: FiberId) => Of<Exit<E, A>>
45
44
  }
46
45
 
47
- export const Synthetic = <E, A>(params: Omit<Synthetic<E, A>, 'tag'>): Synthetic<E, A> => ({
46
+ export const Synthetic = <E, A>(params: Omit<Synthetic<E, A>, 'tag'>): Fiber<E, A> => ({
48
47
  tag: 'Synthetic',
49
48
  ...params,
50
49
  })
@@ -54,23 +53,25 @@ export const match =
54
53
  (fiber: Fiber<E, A>) =>
55
54
  fiber.tag === 'Live' ? onLive(fiber) : onSynthetic(fiber)
56
55
 
57
- export const inheritFiberRefs = <E, A>(fiber: Fiber<E, A>) =>
58
- Fx(function* () {
59
- if (fiber.tag === 'Synthetic') {
60
- return yield* fiber.inheritFiberRefs
61
- }
62
-
63
- const { fiberRefs } = yield* getFiberContext
64
-
65
- yield* fromLazy(() => join(fiberRefs, fiber.context.fiberRefs))
66
- })
56
+ export const inheritFiberRefs = <E, A>(fiber: Fiber<E, A>): Of<void> =>
57
+ pipe(
58
+ fiber,
59
+ match(
60
+ (l) =>
61
+ pipe(
62
+ getFiberContext,
63
+ map((c) => join(c.fiberRefs, l.context.fiberRefs)),
64
+ ),
65
+ (s) => s.inheritFiberRefs,
66
+ ),
67
+ )
67
68
 
68
69
  export const interruptAs =
69
70
  (id: FiberId) =>
70
71
  <E, A>(fiber: Fiber<E, A>) =>
71
72
  fiber.interruptAs(id)
72
73
 
73
- export const interruptAsFork = (id: FiberId) => flow(interruptAs(id), fork)
74
+ export const interruptAsFork = (id: FiberId) => flow(interruptAs(id), flatMap(fromExit), fork)
74
75
 
75
76
  export const interrupt = <E, A>(fiber: Fiber<E, A>) =>
76
77
  pipe(
@@ -0,0 +1,14 @@
1
+ import { Fiber, Synthetic } from './Fiber.js'
2
+
3
+ import { Exit } from '@/Exit/Exit.js'
4
+ import { FiberId } from '@/FiberId/FiberId.js'
5
+ import { now, unit } from '@/Fx/index.js'
6
+
7
+ export function fromExit<E, A>(exit: Exit<E, A>): Fiber<E, A> {
8
+ return Synthetic({
9
+ id: new FiberId.Synthetic([]),
10
+ exit: now(exit),
11
+ inheritFiberRefs: unit,
12
+ interruptAs: () => now(exit),
13
+ })
14
+ }
@@ -0,0 +1,125 @@
1
+ import { makeAssociative } from 'hkt-ts/Array'
2
+ import { HKT2, Params } from 'hkt-ts/HKT'
3
+ import * as AB from 'hkt-ts/Typeclass/AssociativeBoth'
4
+ import * as B from 'hkt-ts/Typeclass/Bicovariant'
5
+ import { Bottom2 } from 'hkt-ts/Typeclass/Bottom'
6
+ import { CommutativeBoth2 } from 'hkt-ts/Typeclass/CommutativeBoth'
7
+ import * as C from 'hkt-ts/Typeclass/Covariant'
8
+ import * as IB from 'hkt-ts/Typeclass/IdentityBoth'
9
+ import { Top2 } from 'hkt-ts/Typeclass/Top'
10
+ import { flow, pipe } from 'hkt-ts/function'
11
+
12
+ import { Fiber, Synthetic, inheritFiberRefs } from './Fiber.js'
13
+ import { fromExit } from './fromExit.js'
14
+
15
+ import * as Exit from '@/Exit/index.js'
16
+ import * as FiberId from '@/FiberId/FiberId.js'
17
+ import * as Fx from '@/Fx/Fx.js'
18
+
19
+ export interface FiberHKT extends HKT2 {
20
+ readonly type: Fiber<this[Params.E], this[Params.A]>
21
+ }
22
+
23
+ export const Bicovariant: B.Bicovariant2<FiberHKT> = {
24
+ bimap: (f, g) => (fiber) =>
25
+ Synthetic({
26
+ id: FiberId.Synthetic([fiber.id]),
27
+ exit: pipe(fiber.exit, Fx.map(Exit.bimap(f, g))),
28
+ inheritFiberRefs: inheritFiberRefs(fiber),
29
+ interruptAs: flow(fiber.interruptAs, Fx.map(Exit.bimap(f, g))),
30
+ }),
31
+ }
32
+
33
+ export const bimap = Bicovariant.bimap
34
+ export const mapLeft = B.mapLeft(Bicovariant)
35
+ export const map = B.map(Bicovariant)
36
+
37
+ export const Covariant: C.Covariant2<FiberHKT> = {
38
+ map,
39
+ }
40
+
41
+ export const bindTo = C.bindTo(Covariant)
42
+ export const flap = C.flap(Covariant)
43
+ export const mapTo = C.mapTo(Covariant)
44
+ export const tupled = C.tupled(Covariant)
45
+
46
+ export const Top: Top2<FiberHKT> = {
47
+ top: fromExit(Exit.top),
48
+ }
49
+ export const top = Top.top
50
+
51
+ export const Bottom: Bottom2<FiberHKT> = {
52
+ bottom: fromExit(Exit.bottom),
53
+ }
54
+ export const bottom = Bottom.bottom
55
+
56
+ const concatExitSeq = Exit.makeSequentialAssociative<any, any>(makeAssociative<any>()).concat
57
+
58
+ export const AssociativeBoth: AB.AssociativeBoth2<FiberHKT> = {
59
+ both: (fb) => (fa) =>
60
+ Synthetic({
61
+ id: FiberId.Synthetic([fa.id, fb.id]),
62
+ exit: pipe(
63
+ Fx.zipAllSeq([fa.exit, fb.exit]),
64
+ Fx.flatMap(([ea, eb]) => Fx.now(concatExitSeq(Exit.tupled(ea), Exit.tupled(eb)))),
65
+ ),
66
+ inheritFiberRefs: pipe(
67
+ inheritFiberRefs(fa),
68
+ Fx.flatMap(() => inheritFiberRefs(fb)),
69
+ ),
70
+ interruptAs: (id) =>
71
+ pipe(
72
+ Fx.zipAllSeq([fa.interruptAs(id), fb.interruptAs(id)]),
73
+ Fx.map(([ea, eb]) => concatExitSeq(Exit.tupled(ea), Exit.tupled(eb))),
74
+ ),
75
+ }),
76
+ }
77
+
78
+ export const bothSeq = AssociativeBoth.both
79
+
80
+ export const zipLeftSeq = AB.zipLeft<FiberHKT>({ ...AssociativeBoth, ...Covariant })
81
+ export const zipRightSeq = AB.zipRight<FiberHKT>({ ...AssociativeBoth, ...Covariant })
82
+
83
+ const concatExitPar = Exit.makeParallelAssociative<any, any>(makeAssociative<any>()).concat
84
+
85
+ export const CommutativeBoth: CommutativeBoth2<FiberHKT> = {
86
+ both: (fb) => (fa) =>
87
+ Synthetic({
88
+ id: FiberId.Synthetic([fa.id, fb.id]),
89
+ exit: pipe(
90
+ Fx.zipAll([fa.exit, fb.exit]),
91
+ Fx.flatMap(([ea, eb]) => Fx.now(concatExitPar(Exit.tupled(ea), Exit.tupled(eb)))),
92
+ ),
93
+ inheritFiberRefs: pipe(
94
+ inheritFiberRefs(fa),
95
+ Fx.flatMap(() => inheritFiberRefs(fb)),
96
+ ),
97
+ interruptAs: (id) =>
98
+ pipe(
99
+ Fx.zipAll([fa.interruptAs(id), fb.interruptAs(id)]),
100
+ Fx.map(([ea, eb]) => concatExitPar(Exit.tupled(ea), Exit.tupled(eb))),
101
+ ),
102
+ }),
103
+ }
104
+
105
+ export const both = CommutativeBoth.both
106
+ export const zipLeft = AB.zipLeft<FiberHKT>({ ...CommutativeBoth, ...Covariant })
107
+ export const zipRight = AB.zipRight<FiberHKT>({ ...CommutativeBoth, ...Covariant })
108
+
109
+ export const IdentityBothSeq: IB.IdentityBoth2<FiberHKT> = {
110
+ ...AssociativeBoth,
111
+ ...Top,
112
+ }
113
+
114
+ export const tupleSeq = IB.tuple<FiberHKT>({ ...IdentityBothSeq, ...Covariant })
115
+ export const structSeq = IB.struct<FiberHKT>({ ...IdentityBothSeq, ...Covariant })
116
+
117
+ export const IdentityBothPar: IB.IdentityBoth2<FiberHKT> = {
118
+ ...CommutativeBoth,
119
+ ...Top,
120
+ }
121
+
122
+ export const tuple = IB.tuple<FiberHKT>({ ...IdentityBothPar, ...Covariant })
123
+ export const struct = IB.struct<FiberHKT>({ ...IdentityBothPar, ...Covariant })
124
+
125
+ // TODO: More Typeclass instances
@@ -1 +1,2 @@
1
1
  export * from './Fiber.js'
2
+ export * from './hkt.js'
@@ -1,6 +1,5 @@
1
1
  import { Just, Maybe, Nothing } from 'hkt-ts/Maybe'
2
2
 
3
- import { Renderer, defaultRenderer } from '@/Cause/Renderer.js'
4
3
  import * as FiberId from '@/FiberId/FiberId.js'
5
4
  import { FiberRefs } from '@/FiberRefs/FiberRefs.js'
6
5
  import { SequentialStrategy } from '@/Finalizer/Finalizer.js'
@@ -11,52 +10,54 @@ import { Closeable } from '@/Scope/Closeable.js'
11
10
  import { LocalScope } from '@/Scope/LocalScope.js'
12
11
  import { None, Supervisor } from '@/Supervisor/Supervisor.js'
13
12
 
14
- export interface FiberContext {
15
- readonly id: FiberId.Live
13
+ export interface FiberContext<Id extends FiberId.FiberId = FiberId.FiberId> {
14
+ readonly id: Id
16
15
  readonly platform: Platform
17
16
  readonly fiberRefs: FiberRefs
18
17
  readonly scope: Closeable
19
18
  readonly supervisor: Supervisor<any>
20
19
  readonly logger: Logger<string, any>
21
- readonly renderer: Renderer<any>
22
20
  readonly parent: Maybe<FiberContext>
23
21
 
24
- readonly fork: (overrides?: Partial<FiberContext>) => FiberContext
22
+ readonly fork: <Id2 extends FiberId.FiberId = FiberId.Live>(
23
+ overrides?: Partial<FiberContext<Id2>>,
24
+ ) => FiberContext<Id2>
25
25
  }
26
26
 
27
- export function FiberContext(params: Partial<Omit<FiberContext, 'fork'>> = {}): FiberContext {
27
+ export function FiberContext<Id extends FiberId.FiberId = FiberId.Live>(
28
+ params: Partial<Omit<FiberContext<Id>, 'fork'>> = {},
29
+ ): FiberContext<Id> {
28
30
  const {
29
31
  platform = Platform(),
30
- id = FiberId.Live(platform),
32
+ id = FiberId.Live(platform) as Id,
31
33
  fiberRefs = FiberRefs(),
32
34
  scope = new LocalScope(SequentialStrategy),
33
35
  supervisor = None,
34
36
  logger = Console,
35
- renderer = defaultRenderer,
36
37
  parent = Nothing,
37
38
  } = params
38
39
 
39
- const context: FiberContext = {
40
+ const context: FiberContext<Id> = {
40
41
  id,
41
42
  platform,
42
43
  fiberRefs,
43
44
  scope,
44
45
  supervisor,
45
46
  logger,
46
- renderer,
47
47
  parent,
48
- fork: (overrides?: Partial<FiberContext>) => fork(context, overrides),
48
+ fork: ((overrides?: Partial<FiberContext>) =>
49
+ fork(context, overrides)) as FiberContext<Id>['fork'],
49
50
  }
50
51
 
51
52
  return context
52
53
  }
53
54
 
54
- export function fork(
55
- context: FiberContext,
56
- overrides?: Partial<Omit<FiberContext, 'fork'>>,
57
- ): FiberContext {
55
+ export function fork<Id extends FiberId.FiberId = FiberId.Live, Id2 extends FiberId.FiberId = Id>(
56
+ context: FiberContext<Id>,
57
+ overrides?: Partial<Omit<FiberContext<Id2>, 'fork'>>,
58
+ ): FiberContext<Id2> {
58
59
  return FiberContext({
59
- id: overrides?.id ?? FiberId.Live(context.platform),
60
+ id: (overrides?.id ?? FiberId.Live(context.platform)) as Id2,
60
61
  platform: overrides?.platform ?? context.platform.fork(),
61
62
  fiberRefs: overrides?.fiberRefs ?? context.fiberRefs.fork(),
62
63
  scope: overrides?.scope ?? context.scope.fork(),
@@ -10,7 +10,7 @@ import * as S from 'hkt-ts/string'
10
10
 
11
11
  import { increment } from '@/Atomic/AtomicCounter.js'
12
12
  import { Clock, timeToDate } from '@/Clock/Clock.js'
13
- import { Platform } from '@/Platform/Platform.js'
13
+ import type { Platform } from '@/Platform/Platform.js'
14
14
  import { Time } from '@/Time/index.js'
15
15
 
16
16
  export type FiberId = FiberId.None | FiberId.Live | FiberId.Synthetic
@@ -1,19 +1,8 @@
1
- import { constant, identity, pipe } from 'hkt-ts'
2
- import { Just, Maybe, Nothing } from 'hkt-ts/Maybe'
1
+ import { Just, Maybe } from 'hkt-ts/Maybe'
3
2
  import { Second } from 'hkt-ts/Typeclass/Concat'
4
3
  import { DeepEquals, Eq } from 'hkt-ts/Typeclass/Eq'
5
- import { NonNegativeInteger } from 'hkt-ts/number'
6
4
 
7
- // eslint-disable-next-line import/no-cycle
8
- import { Env } from '@/Env/Env.js'
9
- import type { Live } from '@/Fiber/Fiber.js'
10
- import { Fx, getFiberContext, map, now } from '@/Fx/Fx.js'
11
- import { ImmutableMap } from '@/ImmutableMap/ImmutableMap.js'
12
- import { LogAnnotation } from '@/Logger/LogAnnotation.js'
13
- import { LogSpan } from '@/Logger/LogSpan.js'
14
- import { Semaphore } from '@/Semaphore/Semaphore.js'
15
- import { Service } from '@/Service/Service.js'
16
- import { EmptyTrace, Trace } from '@/Trace/Trace.js'
5
+ import { type Fx } from '@/Fx/Fx.js'
17
6
 
18
7
  export class FiberRef<R, E, A> {
19
8
  constructor(
@@ -32,11 +21,7 @@ export type ErrorsOf<T> = T extends FiberRef<infer _R, infer _E, infer _A> ? _E
32
21
  export type OutputOf<T> = T extends FiberRef<infer _R, infer _E, infer _A> ? _A : never
33
22
  /* eslint-enable @typescript-eslint/no-unused-vars */
34
23
 
35
- export type AnyFiberRef =
36
- | FiberRef<any, any, any>
37
- | FiberRef<never, never, any>
38
- | FiberRef<never, any, any>
39
- | FiberRef<any, never, any>
24
+ export type AnyFiberRef = FiberRef<any, any, any>
40
25
 
41
26
  export function make<R, E, A>(initial: Fx<R, E, A>, params: Params<A> = {}): FiberRef<R, E, A> {
42
27
  return new FiberRef(initial, params.fork, params.join, params.Eq)
@@ -47,48 +32,3 @@ export type Params<A> = {
47
32
  readonly join?: (current: A, incoming: A) => A
48
33
  readonly Eq?: Eq<A>
49
34
  }
50
-
51
- export const CurrentEnv = make(
52
- pipe(
53
- getFiberContext,
54
- map((c) => Env<any>(c.fiberRefs)),
55
- ),
56
- {
57
- fork: constant(Nothing), // Always create a new Env for each Fiber.
58
- join: identity, // Always keep the parent Fiber's Env
59
- },
60
- )
61
-
62
- export const CurrentConcurrencyLevel = make(
63
- now<Semaphore>(new Semaphore(NonNegativeInteger(Infinity))),
64
- {
65
- join: identity, // Always keep the parent Fiber's concurrency level
66
- },
67
- )
68
-
69
- export const CurrentInterruptStatus = make(now<boolean>(true), {
70
- join: identity, // Always keep the parent Fiber's interrupt status
71
- })
72
-
73
- export const CurrentTrace = make(now<Trace>(EmptyTrace), {
74
- join: identity, // Always keep the parent Fiber's trace
75
- })
76
-
77
- export const Layers = FiberRef.make(
78
- now(ImmutableMap<Service<any>, readonly [() => Live<never, any>, Maybe<Live<never, any>>]>()),
79
- {
80
- join: identity, // Always keep the parent Fiber's layers
81
- },
82
- )
83
-
84
- export const Services = FiberRef.make(now(ImmutableMap<Service<any>, any>()), {
85
- join: identity, // Always keep the parent Fiber's services
86
- })
87
-
88
- export const CurrentLogSpans = FiberRef.make(now(ImmutableMap<string, LogSpan>()), {
89
- join: identity,
90
- })
91
-
92
- export const CurrentLogAnnotations = FiberRef.make(now(ImmutableMap<string, LogAnnotation>()), {
93
- join: identity,
94
- })
@@ -0,0 +1,114 @@
1
+ import { Maybe, constant, identity, pipe } from 'hkt-ts'
2
+ import { Nothing } from 'hkt-ts/Maybe'
3
+ import { NonNegativeInteger } from 'hkt-ts/number'
4
+
5
+ import { FiberRef, make } from './FiberRef.js'
6
+
7
+ import type { Env } from '@/Env/Env.js'
8
+ import { Live } from '@/Fiber/Fiber.js'
9
+ import * as FiberRefs from '@/FiberRefs/FiberRefs.js'
10
+ import * as Fx from '@/Fx/Fx.js'
11
+ import { join } from '@/Fx/join.js'
12
+ import { ImmutableMap } from '@/ImmutableMap/ImmutableMap.js'
13
+ import { LogAnnotation } from '@/Logger/LogAnnotation.js'
14
+ import { LogSpan } from '@/Logger/LogSpan.js'
15
+ import { Semaphore } from '@/Semaphore/Semaphore.js'
16
+ import { Service } from '@/Service/Service.js'
17
+ import { Trace } from '@/Trace/Trace.js'
18
+
19
+ export const CurrentEnv = make(
20
+ pipe(
21
+ Fx.getFiberContext,
22
+ // Always use a snapshot of the FiberRefs to avoid mutability problems.
23
+ Fx.map((c): Env<any> => ({ get: getServiceFromFiberRefs(c.fiberRefs) })),
24
+ ),
25
+ {
26
+ fork: constant(Nothing), // Always create a new Env for each Fiber.
27
+ join: identity, // Always keep the parent Fiber's Env
28
+ },
29
+ )
30
+
31
+ export const CurrentConcurrencyLevel = make(
32
+ Fx.fromLazy(() => new Semaphore(NonNegativeInteger(Infinity))),
33
+ {
34
+ join: identity, // Always keep the parent Fiber's concurrency level
35
+ },
36
+ )
37
+
38
+ export const CurrentInterruptStatus = make(Fx.now(true), {
39
+ join: identity, // Always keep the parent Fiber's interrupt status
40
+ })
41
+
42
+ export const CurrentTrace = make(
43
+ Fx.fromLazy<Trace>(() => Trace.runtime(new Error())),
44
+ {
45
+ join: identity, // Always keep the parent Fiber's trace
46
+ },
47
+ )
48
+
49
+ export const Layers = FiberRef.make(
50
+ Fx.fromLazy(() =>
51
+ ImmutableMap<Service<any>, readonly [() => Live<never, any>, Maybe.Maybe<Live<never, any>>]>(),
52
+ ),
53
+ {
54
+ join: identity, // Always keep the parent Fiber's layers
55
+ },
56
+ )
57
+
58
+ export const Services = FiberRef.make(Fx.now(ImmutableMap<Service<any>, any>()), {
59
+ join: identity, // Always keep the parent Fiber's services
60
+ })
61
+
62
+ export const CurrentLogSpans = FiberRef.make(Fx.now(ImmutableMap<string, LogSpan>()), {
63
+ join: identity,
64
+ })
65
+
66
+ export const CurrentLogAnnotations = FiberRef.make(Fx.now(ImmutableMap<string, LogAnnotation>()), {
67
+ join: identity,
68
+ })
69
+
70
+ export function getServiceFromFiberRefs(fiberRefs: FiberRefs.FiberRefs) {
71
+ return <S>(id: Service<S>): Fx.Of<S> => {
72
+ return Fx.lazy(() => {
73
+ const service = pipe(
74
+ fiberRefs,
75
+ FiberRefs.maybeGetFiberRefValue(Services),
76
+ Maybe.flatMap((s) => s.get(id)),
77
+ )
78
+
79
+ if (Maybe.isJust(service)) {
80
+ return Fx.success(service.value as S)
81
+ }
82
+
83
+ return getLayerFromFiberRefs(id, fiberRefs)
84
+ })
85
+ }
86
+ }
87
+
88
+ const getLayerFromFiberRefs = <S>(id: Service<S>, fiberRefs: FiberRefs.FiberRefs) =>
89
+ Fx.lazy(() => {
90
+ const layers = FiberRefs.maybeGetFiberRefValue(Layers)(fiberRefs)
91
+
92
+ // Add Layers if it is missing
93
+ if (Maybe.isNothing(layers)) {
94
+ throw new Error(`Unable to find Layer or Service for ${id.description}`)
95
+ }
96
+
97
+ const layer = layers.value.get(id)
98
+
99
+ if (Maybe.isNothing(layer)) {
100
+ throw new Error(`Unable to find Layer or Service for ${id.description}`)
101
+ }
102
+
103
+ const [makeFiber, currentFiber] = layer.value
104
+
105
+ if (Maybe.isJust(currentFiber)) {
106
+ return pipe(currentFiber.value.exit, Fx.flatMap(Fx.fromExit))
107
+ }
108
+
109
+ const fiber = makeFiber()
110
+
111
+ FiberRefs.setFiberRef(Layers, layers.value.set(id, [makeFiber, Maybe.Just(fiber)]))(fiberRefs)
112
+
113
+ return join(fiber)
114
+ })
@@ -1,3 +1,2 @@
1
- // eslint-disable-next-line import/no-cycle
2
1
  export * from './FiberRef.js'
3
2
  export * from './operations.js'