@fncts/io 0.0.22 → 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (482) hide show
  1. package/Cached/definition.d.ts +6 -4
  2. package/Cached/internal.d.ts +4 -4
  3. package/Channel/api.d.ts +4 -4
  4. package/Channel/definition.d.ts +35 -14
  5. package/Channel/internal/ChannelExecutor.d.ts +1 -0
  6. package/Channel/internal/MergeDecision.d.ts +10 -6
  7. package/CountdownLatch.d.ts +1 -1
  8. package/Differ/definition.d.ts +2 -4
  9. package/Fiber/FiberRuntime.d.ts +9 -11
  10. package/Fiber/definition.d.ts +12 -6
  11. package/FiberRef/definition.d.ts +6 -2
  12. package/FiberRefs/api.d.ts +1 -1
  13. package/FiberRefs/definition.d.ts +1 -1
  14. package/Hub/definition.d.ts +29 -15
  15. package/IO/api/interrupt.d.ts +19 -19
  16. package/IO/api/onTermination.d.ts +0 -1
  17. package/IO/api/sequenceT.d.ts +19 -3
  18. package/IO/api.d.ts +17 -1
  19. package/IO/definition.d.ts +40 -26
  20. package/IO.d.ts +0 -1
  21. package/Layer/definition.d.ts +17 -13
  22. package/Logger/definition.d.ts +10 -6
  23. package/MVar/api.d.ts +101 -0
  24. package/MVar/definition.d.ts +43 -0
  25. package/MVar.d.ts +2 -0
  26. package/Push/api.d.ts +7 -4
  27. package/Push/definition.d.ts +10 -3
  28. package/Push/internal.d.ts +1 -1
  29. package/Queue/api/dimapIO.d.ts +17 -13
  30. package/Queue/definition.d.ts +26 -18
  31. package/Ref/Derived.d.ts +3 -1
  32. package/Ref/Synchronized/constructors.d.ts +6 -1
  33. package/Ref/Synchronized/definition.d.ts +4 -2
  34. package/Ref/definition.d.ts +36 -25
  35. package/Ref.d.ts +0 -1
  36. package/RefSubject/definition.d.ts +17 -11
  37. package/Reloadable/definition.d.ts +5 -1
  38. package/STM/api/atomically.d.ts +9 -0
  39. package/STM/api.d.ts +12 -6
  40. package/STM/definition.d.ts +28 -15
  41. package/STM/internal/Entry.d.ts +2 -2
  42. package/STM/internal/TryCommit.d.ts +2 -2
  43. package/STM/internal/Versioned.d.ts +1 -1
  44. package/STM.d.ts +1 -0
  45. package/Schedule/definition.d.ts +7 -3
  46. package/Scope/definition.d.ts +1 -1
  47. package/ScopedRef/definition.d.ts +1 -1
  48. package/State/api.d.ts +1 -1
  49. package/State/definition.d.ts +5 -2
  50. package/State/internal.d.ts +6 -2
  51. package/Stream/definition.d.ts +26 -5
  52. package/Stream/internal/Handoff.d.ts +21 -15
  53. package/Stream/internal/SinkEndReason.d.ts +2 -2
  54. package/Subject/Atomic.d.ts +8 -4
  55. package/SupervisorPatch.d.ts +1 -1
  56. package/TExit/definition.d.ts +5 -5
  57. package/TRef/definition.d.ts +16 -14
  58. package/TRef.d.ts +0 -1
  59. package/_cjs/Cached/definition.cjs +4 -2
  60. package/_cjs/Cached/definition.cjs.map +1 -1
  61. package/_cjs/Cached/internal.cjs +7 -6
  62. package/_cjs/Cached/internal.cjs.map +1 -1
  63. package/_cjs/Channel/api/mapOutConcurrentIO.cjs +1 -1
  64. package/_cjs/Channel/api/mergeAllWith.cjs +1 -1
  65. package/_cjs/Channel/api.cjs +20 -20
  66. package/_cjs/Channel/api.cjs.map +1 -1
  67. package/_cjs/Channel/definition.cjs +13 -3
  68. package/_cjs/Channel/definition.cjs.map +1 -1
  69. package/_cjs/Channel/internal/ChannelExecutor.cjs +11 -6
  70. package/_cjs/Channel/internal/ChannelExecutor.cjs.map +1 -1
  71. package/_cjs/Channel/internal/MergeDecision.cjs +7 -3
  72. package/_cjs/Channel/internal/MergeDecision.cjs.map +1 -1
  73. package/_cjs/CountdownLatch.cjs +4 -2
  74. package/_cjs/CountdownLatch.cjs.map +1 -1
  75. package/_cjs/Differ/definition.cjs +3 -1
  76. package/_cjs/Differ/definition.cjs.map +1 -1
  77. package/_cjs/Fiber/FiberRuntime.cjs +96 -89
  78. package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
  79. package/_cjs/Fiber/definition.cjs +8 -4
  80. package/_cjs/Fiber/definition.cjs.map +1 -1
  81. package/_cjs/FiberRef/definition.cjs +8 -4
  82. package/_cjs/FiberRef/definition.cjs.map +1 -1
  83. package/_cjs/Future/api.cjs +17 -6
  84. package/_cjs/Future/api.cjs.map +1 -1
  85. package/_cjs/Hub/api.cjs +5 -5
  86. package/_cjs/Hub/api.cjs.map +1 -1
  87. package/_cjs/Hub/definition.cjs +9 -7
  88. package/_cjs/Hub/definition.cjs.map +1 -1
  89. package/_cjs/Hub/internal.cjs +6 -6
  90. package/_cjs/Hub/internal.cjs.map +1 -1
  91. package/_cjs/IO/api/asyncIO.cjs +1 -1
  92. package/_cjs/IO/api/asyncIO.cjs.map +1 -1
  93. package/_cjs/IO/api/asyncInterrupt.cjs +2 -2
  94. package/_cjs/IO/api/asyncInterrupt.cjs.map +1 -1
  95. package/_cjs/IO/api/bracketExit.cjs +1 -1
  96. package/_cjs/IO/api/bracketExit.cjs.map +1 -1
  97. package/_cjs/IO/api/foreachConcurrent.cjs +2 -2
  98. package/_cjs/IO/api/foreachConcurrent.cjs.map +1 -1
  99. package/_cjs/IO/api/forkIn.cjs +1 -1
  100. package/_cjs/IO/api/forkIn.cjs.map +1 -1
  101. package/_cjs/IO/api/forkScoped.cjs +1 -1
  102. package/_cjs/IO/api/forkScoped.cjs.map +1 -1
  103. package/_cjs/IO/api/fulfill.cjs +1 -1
  104. package/_cjs/IO/api/fulfill.cjs.map +1 -1
  105. package/_cjs/IO/api/interrupt.cjs +52 -43
  106. package/_cjs/IO/api/interrupt.cjs.map +1 -1
  107. package/_cjs/IO/api/onTermination.cjs +7 -6
  108. package/_cjs/IO/api/onTermination.cjs.map +1 -1
  109. package/_cjs/IO/api/race.cjs +1 -1
  110. package/_cjs/IO/api/race.cjs.map +1 -1
  111. package/_cjs/IO/api/sequenceT.cjs +1 -1
  112. package/_cjs/IO/api/sequenceT.cjs.map +1 -1
  113. package/_cjs/IO/api/zipConcurrent.cjs +1 -1
  114. package/_cjs/IO/api/zipConcurrent.cjs.map +1 -1
  115. package/_cjs/IO/api.cjs +79 -53
  116. package/_cjs/IO/api.cjs.map +1 -1
  117. package/_cjs/IO/definition.cjs +26 -21
  118. package/_cjs/IO/definition.cjs.map +1 -1
  119. package/_cjs/IO.cjs +0 -11
  120. package/_cjs/IO.cjs.map +1 -1
  121. package/_cjs/Layer/MemoMap.cjs +30 -31
  122. package/_cjs/Layer/MemoMap.cjs.map +1 -1
  123. package/_cjs/Layer/api.cjs +1 -1
  124. package/_cjs/Layer/api.cjs.map +1 -1
  125. package/_cjs/Layer/definition.cjs +12 -10
  126. package/_cjs/Layer/definition.cjs.map +1 -1
  127. package/_cjs/Logger/definition.cjs +3 -1
  128. package/_cjs/Logger/definition.cjs.map +1 -1
  129. package/_cjs/MVar/api.cjs +170 -0
  130. package/_cjs/MVar/api.cjs.map +1 -0
  131. package/_cjs/MVar/definition.cjs +28 -0
  132. package/_cjs/MVar/definition.cjs.map +1 -0
  133. package/_cjs/MVar.cjs +28 -0
  134. package/_cjs/MVar.cjs.map +1 -0
  135. package/_cjs/Push/api.cjs +39 -36
  136. package/_cjs/Push/api.cjs.map +1 -1
  137. package/_cjs/Push/definition.cjs +9 -2
  138. package/_cjs/Push/definition.cjs.map +1 -1
  139. package/_cjs/Push/internal.cjs +4 -2
  140. package/_cjs/Push/internal.cjs.map +1 -1
  141. package/_cjs/Queue/api/dimapIO.cjs +10 -10
  142. package/_cjs/Queue/api/dimapIO.cjs.map +1 -1
  143. package/_cjs/Queue/api/filterInputIO.cjs +4 -4
  144. package/_cjs/Queue/api/filterInputIO.cjs.map +1 -1
  145. package/_cjs/Queue/api/filterOutputIO.cjs +7 -7
  146. package/_cjs/Queue/api/filterOutputIO.cjs.map +1 -1
  147. package/_cjs/Queue/definition.cjs +3 -1
  148. package/_cjs/Queue/definition.cjs.map +1 -1
  149. package/_cjs/Queue/internal.cjs +2 -2
  150. package/_cjs/Queue/internal.cjs.map +1 -1
  151. package/_cjs/Queue/strategy.cjs +2 -2
  152. package/_cjs/Queue/strategy.cjs.map +1 -1
  153. package/_cjs/Ref/Derived.cjs +8 -4
  154. package/_cjs/Ref/Derived.cjs.map +1 -1
  155. package/_cjs/Ref/Synchronized/constructors.cjs +16 -7
  156. package/_cjs/Ref/Synchronized/constructors.cjs.map +1 -1
  157. package/_cjs/Ref/Synchronized/definition.cjs +16 -12
  158. package/_cjs/Ref/Synchronized/definition.cjs.map +1 -1
  159. package/_cjs/Ref/definition.cjs +3 -2
  160. package/_cjs/Ref/definition.cjs.map +1 -1
  161. package/_cjs/Ref.cjs +0 -11
  162. package/_cjs/Ref.cjs.map +1 -1
  163. package/_cjs/RefSubject/Synchronized/api.cjs +1 -1
  164. package/_cjs/RefSubject/definition.cjs +9 -5
  165. package/_cjs/RefSubject/definition.cjs.map +1 -1
  166. package/_cjs/Reloadable/definition.cjs +4 -2
  167. package/_cjs/Reloadable/definition.cjs.map +1 -1
  168. package/_cjs/STM/api/atomically.cjs +55 -0
  169. package/_cjs/STM/api/atomically.cjs.map +1 -0
  170. package/_cjs/STM/api.cjs +65 -91
  171. package/_cjs/STM/api.cjs.map +1 -1
  172. package/_cjs/STM/definition.cjs +32 -19
  173. package/_cjs/STM/definition.cjs.map +1 -1
  174. package/_cjs/STM/driver.cjs +3 -3
  175. package/_cjs/STM/driver.cjs.map +1 -1
  176. package/_cjs/STM/internal/Entry.cjs +6 -3
  177. package/_cjs/STM/internal/Entry.cjs.map +1 -1
  178. package/_cjs/STM/internal/TryCommit.cjs +5 -2
  179. package/_cjs/STM/internal/TryCommit.cjs.map +1 -1
  180. package/_cjs/STM/internal/Versioned.cjs +3 -1
  181. package/_cjs/STM/internal/Versioned.cjs.map +1 -1
  182. package/_cjs/STM.cjs +11 -0
  183. package/_cjs/STM.cjs.map +1 -1
  184. package/_cjs/Schedule/definition.cjs +3 -1
  185. package/_cjs/Schedule/definition.cjs.map +1 -1
  186. package/_cjs/Scope/api.cjs +1 -2
  187. package/_cjs/Scope/api.cjs.map +1 -1
  188. package/_cjs/Scope/definition.cjs +5 -3
  189. package/_cjs/Scope/definition.cjs.map +1 -1
  190. package/_cjs/ScopedRef/api.cjs +2 -2
  191. package/_cjs/ScopedRef/api.cjs.map +1 -1
  192. package/_cjs/ScopedRef/definition.cjs +3 -1
  193. package/_cjs/ScopedRef/definition.cjs.map +1 -1
  194. package/_cjs/State/api.cjs +2 -2
  195. package/_cjs/State/api.cjs.map +1 -1
  196. package/_cjs/State/definition.cjs +4 -2
  197. package/_cjs/State/definition.cjs.map +1 -1
  198. package/_cjs/State/internal.cjs +7 -3
  199. package/_cjs/State/internal.cjs.map +1 -1
  200. package/_cjs/Stream/api.cjs +1 -1
  201. package/_cjs/Stream/definition.cjs +4 -2
  202. package/_cjs/Stream/definition.cjs.map +1 -1
  203. package/_cjs/Stream/internal/Handoff.cjs +37 -37
  204. package/_cjs/Stream/internal/Handoff.cjs.map +1 -1
  205. package/_cjs/Stream/internal/SinkEndReason.cjs +6 -3
  206. package/_cjs/Stream/internal/SinkEndReason.cjs.map +1 -1
  207. package/_cjs/Subject/Atomic.cjs +6 -4
  208. package/_cjs/Subject/Atomic.cjs.map +1 -1
  209. package/_cjs/SubscriptionRef.cjs +1 -1
  210. package/_cjs/SupervisorPatch.cjs +3 -1
  211. package/_cjs/SupervisorPatch.cjs.map +1 -1
  212. package/_cjs/TExit/definition.cjs +25 -24
  213. package/_cjs/TExit/definition.cjs.map +1 -1
  214. package/_cjs/TFuture/constructors.cjs +1 -1
  215. package/_cjs/TReentrantLock/api.cjs +10 -9
  216. package/_cjs/TReentrantLock/api.cjs.map +1 -1
  217. package/_cjs/TRef/constructors.cjs +1 -1
  218. package/_cjs/TRef/definition.cjs +21 -21
  219. package/_cjs/TRef/definition.cjs.map +1 -1
  220. package/_cjs/TRef.cjs +0 -11
  221. package/_cjs/TRef.cjs.map +1 -1
  222. package/_cjs/TSemaphore/api.cjs +2 -2
  223. package/_cjs/TSemaphore/api.cjs.map +1 -1
  224. package/_cjs/TSemaphore/constructors.cjs +1 -1
  225. package/_cjs/internal/IsFatal.cjs +3 -1
  226. package/_cjs/internal/IsFatal.cjs.map +1 -1
  227. package/_mjs/Cached/definition.mjs +4 -2
  228. package/_mjs/Cached/definition.mjs.map +1 -1
  229. package/_mjs/Cached/internal.mjs +3 -5
  230. package/_mjs/Cached/internal.mjs.map +1 -1
  231. package/_mjs/Channel/api/mapOutConcurrentIO.mjs +1 -1
  232. package/_mjs/Channel/api/mergeAllWith.mjs +1 -1
  233. package/_mjs/Channel/api.mjs +15 -14
  234. package/_mjs/Channel/api.mjs.map +1 -1
  235. package/_mjs/Channel/definition.mjs +9 -1
  236. package/_mjs/Channel/definition.mjs.map +1 -1
  237. package/_mjs/Channel/internal/ChannelExecutor.mjs +11 -6
  238. package/_mjs/Channel/internal/ChannelExecutor.mjs.map +1 -1
  239. package/_mjs/Channel/internal/MergeDecision.mjs +4 -1
  240. package/_mjs/Channel/internal/MergeDecision.mjs.map +1 -1
  241. package/_mjs/CountdownLatch.mjs +3 -1
  242. package/_mjs/CountdownLatch.mjs.map +1 -1
  243. package/_mjs/Differ/definition.mjs +3 -1
  244. package/_mjs/Differ/definition.mjs.map +1 -1
  245. package/_mjs/Fiber/FiberRuntime.mjs +97 -90
  246. package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
  247. package/_mjs/Fiber/definition.mjs +5 -2
  248. package/_mjs/Fiber/definition.mjs.map +1 -1
  249. package/_mjs/FiberRef/definition.mjs +6 -3
  250. package/_mjs/FiberRef/definition.mjs.map +1 -1
  251. package/_mjs/Future/api.mjs +17 -6
  252. package/_mjs/Future/api.mjs.map +1 -1
  253. package/_mjs/Hub/api.mjs +6 -6
  254. package/_mjs/Hub/api.mjs.map +1 -1
  255. package/_mjs/Hub/definition.mjs +5 -4
  256. package/_mjs/Hub/definition.mjs.map +1 -1
  257. package/_mjs/Hub/internal.mjs +6 -6
  258. package/_mjs/Hub/internal.mjs.map +1 -1
  259. package/_mjs/IO/api/asyncIO.mjs +1 -1
  260. package/_mjs/IO/api/asyncIO.mjs.map +1 -1
  261. package/_mjs/IO/api/asyncInterrupt.mjs +2 -2
  262. package/_mjs/IO/api/asyncInterrupt.mjs.map +1 -1
  263. package/_mjs/IO/api/bracketExit.mjs +1 -1
  264. package/_mjs/IO/api/bracketExit.mjs.map +1 -1
  265. package/_mjs/IO/api/foreachConcurrent.mjs +2 -2
  266. package/_mjs/IO/api/foreachConcurrent.mjs.map +1 -1
  267. package/_mjs/IO/api/forkIn.mjs +1 -1
  268. package/_mjs/IO/api/forkIn.mjs.map +1 -1
  269. package/_mjs/IO/api/forkScoped.mjs +1 -1
  270. package/_mjs/IO/api/forkScoped.mjs.map +1 -1
  271. package/_mjs/IO/api/fulfill.mjs +1 -1
  272. package/_mjs/IO/api/fulfill.mjs.map +1 -1
  273. package/_mjs/IO/api/interrupt.mjs +46 -38
  274. package/_mjs/IO/api/interrupt.mjs.map +1 -1
  275. package/_mjs/IO/api/onTermination.mjs +7 -6
  276. package/_mjs/IO/api/onTermination.mjs.map +1 -1
  277. package/_mjs/IO/api/race.mjs +1 -1
  278. package/_mjs/IO/api/race.mjs.map +1 -1
  279. package/_mjs/IO/api/sequenceT.mjs +1 -1
  280. package/_mjs/IO/api/sequenceT.mjs.map +1 -1
  281. package/_mjs/IO/api/zipConcurrent.mjs +1 -1
  282. package/_mjs/IO/api/zipConcurrent.mjs.map +1 -1
  283. package/_mjs/IO/api.mjs +73 -50
  284. package/_mjs/IO/api.mjs.map +1 -1
  285. package/_mjs/IO/definition.mjs +23 -19
  286. package/_mjs/IO/definition.mjs.map +1 -1
  287. package/_mjs/IO.mjs +0 -1
  288. package/_mjs/IO.mjs.map +1 -1
  289. package/_mjs/Layer/MemoMap.mjs +28 -29
  290. package/_mjs/Layer/MemoMap.mjs.map +1 -1
  291. package/_mjs/Layer/api.mjs +2 -2
  292. package/_mjs/Layer/api.mjs.map +1 -1
  293. package/_mjs/Layer/definition.mjs +9 -8
  294. package/_mjs/Layer/definition.mjs.map +1 -1
  295. package/_mjs/Logger/definition.mjs +1 -0
  296. package/_mjs/Logger/definition.mjs.map +1 -1
  297. package/_mjs/MVar/api.mjs +150 -0
  298. package/_mjs/MVar/api.mjs.map +1 -0
  299. package/_mjs/MVar/definition.mjs +18 -0
  300. package/_mjs/MVar/definition.mjs.map +1 -0
  301. package/_mjs/MVar.mjs +4 -0
  302. package/_mjs/MVar.mjs.map +1 -0
  303. package/_mjs/Push/api.mjs +39 -36
  304. package/_mjs/Push/api.mjs.map +1 -1
  305. package/_mjs/Push/definition.mjs +5 -0
  306. package/_mjs/Push/definition.mjs.map +1 -1
  307. package/_mjs/Push/internal.mjs +4 -2
  308. package/_mjs/Push/internal.mjs.map +1 -1
  309. package/_mjs/Queue/api/dimapIO.mjs +11 -11
  310. package/_mjs/Queue/api/dimapIO.mjs.map +1 -1
  311. package/_mjs/Queue/api/filterInputIO.mjs +5 -5
  312. package/_mjs/Queue/api/filterInputIO.mjs.map +1 -1
  313. package/_mjs/Queue/api/filterOutputIO.mjs +8 -8
  314. package/_mjs/Queue/api/filterOutputIO.mjs.map +1 -1
  315. package/_mjs/Queue/definition.mjs +1 -0
  316. package/_mjs/Queue/definition.mjs.map +1 -1
  317. package/_mjs/Queue/internal.mjs +2 -2
  318. package/_mjs/Queue/internal.mjs.map +1 -1
  319. package/_mjs/Queue/strategy.mjs +2 -2
  320. package/_mjs/Queue/strategy.mjs.map +1 -1
  321. package/_mjs/Ref/Derived.mjs +6 -3
  322. package/_mjs/Ref/Derived.mjs.map +1 -1
  323. package/_mjs/Ref/Synchronized/constructors.mjs +15 -7
  324. package/_mjs/Ref/Synchronized/constructors.mjs.map +1 -1
  325. package/_mjs/Ref/Synchronized/definition.mjs +13 -10
  326. package/_mjs/Ref/Synchronized/definition.mjs.map +1 -1
  327. package/_mjs/Ref/definition.mjs +1 -1
  328. package/_mjs/Ref/definition.mjs.map +1 -1
  329. package/_mjs/Ref.mjs +0 -1
  330. package/_mjs/Ref.mjs.map +1 -1
  331. package/_mjs/RefSubject/Synchronized/api.mjs +1 -1
  332. package/_mjs/RefSubject/definition.mjs +10 -3
  333. package/_mjs/RefSubject/definition.mjs.map +1 -1
  334. package/_mjs/Reloadable/definition.mjs +2 -1
  335. package/_mjs/Reloadable/definition.mjs.map +1 -1
  336. package/_mjs/STM/api/atomically.mjs +47 -0
  337. package/_mjs/STM/api/atomically.mjs.map +1 -0
  338. package/_mjs/STM/api.mjs +61 -88
  339. package/_mjs/STM/api.mjs.map +1 -1
  340. package/_mjs/STM/definition.mjs +27 -17
  341. package/_mjs/STM/definition.mjs.map +1 -1
  342. package/_mjs/STM/driver.mjs +3 -3
  343. package/_mjs/STM/driver.mjs.map +1 -1
  344. package/_mjs/STM/internal/Entry.mjs +5 -2
  345. package/_mjs/STM/internal/Entry.mjs.map +1 -1
  346. package/_mjs/STM/internal/TryCommit.mjs +6 -2
  347. package/_mjs/STM/internal/TryCommit.mjs.map +1 -1
  348. package/_mjs/STM/internal/Versioned.mjs +3 -1
  349. package/_mjs/STM/internal/Versioned.mjs.map +1 -1
  350. package/_mjs/STM.mjs +1 -0
  351. package/_mjs/STM.mjs.map +1 -1
  352. package/_mjs/Schedule/definition.mjs +1 -0
  353. package/_mjs/Schedule/definition.mjs.map +1 -1
  354. package/_mjs/Scope/api.mjs +1 -2
  355. package/_mjs/Scope/api.mjs.map +1 -1
  356. package/_mjs/Scope/definition.mjs +4 -2
  357. package/_mjs/Scope/definition.mjs.map +1 -1
  358. package/_mjs/ScopedRef/api.mjs +2 -2
  359. package/_mjs/ScopedRef/api.mjs.map +1 -1
  360. package/_mjs/ScopedRef/definition.mjs +3 -1
  361. package/_mjs/ScopedRef/definition.mjs.map +1 -1
  362. package/_mjs/State/api.mjs +1 -1
  363. package/_mjs/State/api.mjs.map +1 -1
  364. package/_mjs/State/definition.mjs +4 -1
  365. package/_mjs/State/definition.mjs.map +1 -1
  366. package/_mjs/State/internal.mjs +5 -2
  367. package/_mjs/State/internal.mjs.map +1 -1
  368. package/_mjs/Stream/api.mjs +1 -1
  369. package/_mjs/Stream/definition.mjs +2 -1
  370. package/_mjs/Stream/definition.mjs.map +1 -1
  371. package/_mjs/Stream/internal/Handoff.mjs +40 -32
  372. package/_mjs/Stream/internal/Handoff.mjs.map +1 -1
  373. package/_mjs/Stream/internal/SinkEndReason.mjs +6 -2
  374. package/_mjs/Stream/internal/SinkEndReason.mjs.map +1 -1
  375. package/_mjs/Subject/Atomic.mjs +4 -2
  376. package/_mjs/Subject/Atomic.mjs.map +1 -1
  377. package/_mjs/SubscriptionRef.mjs +1 -1
  378. package/_mjs/SupervisorPatch.mjs +3 -1
  379. package/_mjs/SupervisorPatch.mjs.map +1 -1
  380. package/_mjs/TExit/definition.mjs +25 -24
  381. package/_mjs/TExit/definition.mjs.map +1 -1
  382. package/_mjs/TFuture/constructors.mjs +1 -1
  383. package/_mjs/TReentrantLock/api.mjs +10 -9
  384. package/_mjs/TReentrantLock/api.mjs.map +1 -1
  385. package/_mjs/TRef/constructors.mjs +1 -1
  386. package/_mjs/TRef/definition.mjs +19 -20
  387. package/_mjs/TRef/definition.mjs.map +1 -1
  388. package/_mjs/TRef.mjs +0 -1
  389. package/_mjs/TRef.mjs.map +1 -1
  390. package/_mjs/TSemaphore/api.mjs +2 -2
  391. package/_mjs/TSemaphore/api.mjs.map +1 -1
  392. package/_mjs/TSemaphore/constructors.mjs +1 -1
  393. package/_mjs/internal/IsFatal.mjs +3 -1
  394. package/_mjs/internal/IsFatal.mjs.map +1 -1
  395. package/_src/Cached/definition.ts +6 -4
  396. package/_src/Cached/internal.ts +4 -4
  397. package/_src/Channel/api.ts +14 -15
  398. package/_src/Channel/definition.ts +37 -14
  399. package/_src/Channel/internal/ChannelExecutor.ts +14 -3
  400. package/_src/Channel/internal/MergeDecision.ts +11 -6
  401. package/_src/CountdownLatch.ts +1 -1
  402. package/_src/Differ/definition.ts +2 -4
  403. package/_src/Fiber/FiberRuntime.ts +54 -50
  404. package/_src/Fiber/definition.ts +15 -8
  405. package/_src/FiberRef/definition.ts +9 -4
  406. package/_src/FiberRefs/api.ts +1 -1
  407. package/_src/FiberRefs/definition.ts +1 -1
  408. package/_src/Future/api.ts +14 -5
  409. package/_src/Hub/api.ts +9 -7
  410. package/_src/Hub/definition.ts +30 -15
  411. package/_src/IO/api/interrupt.ts +72 -55
  412. package/_src/IO/api/onTermination.ts +8 -7
  413. package/_src/IO/api/sequenceT.ts +4 -6
  414. package/_src/IO/api.ts +23 -1
  415. package/_src/IO/definition.ts +36 -27
  416. package/_src/IO.ts +0 -1
  417. package/_src/Layer/MemoMap.ts +1 -1
  418. package/_src/Layer/api.ts +2 -2
  419. package/_src/Layer/definition.ts +18 -13
  420. package/_src/Logger/definition.ts +9 -4
  421. package/_src/MVar/api.ts +185 -0
  422. package/_src/MVar/definition.ts +45 -0
  423. package/_src/MVar.ts +4 -0
  424. package/_src/Push/api.ts +7 -4
  425. package/_src/Push/definition.ts +12 -3
  426. package/_src/Push/internal.ts +2 -2
  427. package/_src/Queue/api/dimapIO.ts +24 -13
  428. package/_src/Queue/api/filterInputIO.ts +9 -7
  429. package/_src/Queue/api/filterOutputIO.ts +9 -7
  430. package/_src/Queue/definition.ts +27 -18
  431. package/_src/Ref/Derived.ts +4 -1
  432. package/_src/Ref/Synchronized/constructors.ts +9 -0
  433. package/_src/Ref/Synchronized/definition.ts +5 -2
  434. package/_src/Ref/definition.ts +36 -25
  435. package/_src/Ref.ts +0 -1
  436. package/_src/RefSubject/definition.ts +19 -12
  437. package/_src/Reloadable/definition.ts +6 -1
  438. package/_src/STM/api/atomically.ts +43 -0
  439. package/_src/STM/api.ts +20 -38
  440. package/_src/STM/definition.ts +33 -20
  441. package/_src/STM/driver.ts +3 -3
  442. package/_src/STM/internal/Entry.ts +2 -2
  443. package/_src/STM/internal/TryCommit.ts +4 -4
  444. package/_src/STM/internal/Versioned.ts +1 -1
  445. package/_src/STM.ts +1 -0
  446. package/_src/Schedule/definition.ts +8 -3
  447. package/_src/Scope/definition.ts +2 -2
  448. package/_src/ScopedRef/definition.ts +1 -1
  449. package/_src/State/api.ts +1 -1
  450. package/_src/State/definition.ts +6 -3
  451. package/_src/State/internal.ts +8 -3
  452. package/_src/Stream/definition.ts +17 -5
  453. package/_src/Stream/internal/Handoff.ts +31 -24
  454. package/_src/Stream/internal/SinkEndReason.ts +2 -2
  455. package/_src/Subject/Atomic.ts +8 -4
  456. package/_src/SupervisorPatch.ts +1 -1
  457. package/_src/TExit/definition.ts +11 -12
  458. package/_src/TRef/definition.ts +18 -14
  459. package/_src/TRef.ts +0 -1
  460. package/_src/global.ts +4 -0
  461. package/_src/internal/IsFatal.ts +1 -1
  462. package/global.d.ts +4 -0
  463. package/internal/IsFatal.d.ts +1 -1
  464. package/package.json +2 -2
  465. package/IO/api/onExit.d.ts +0 -7
  466. package/Ref/symbols.d.ts +0 -30
  467. package/TRef/symbols.d.ts +0 -20
  468. package/_cjs/IO/api/onExit.cjs +0 -19
  469. package/_cjs/IO/api/onExit.cjs.map +0 -1
  470. package/_cjs/Ref/symbols.cjs +0 -37
  471. package/_cjs/Ref/symbols.cjs.map +0 -1
  472. package/_cjs/TRef/symbols.cjs +0 -27
  473. package/_cjs/TRef/symbols.cjs.map +0 -1
  474. package/_mjs/IO/api/onExit.mjs +0 -11
  475. package/_mjs/IO/api/onExit.mjs.map +0 -1
  476. package/_mjs/Ref/symbols.mjs +0 -25
  477. package/_mjs/Ref/symbols.mjs.map +0 -1
  478. package/_mjs/TRef/symbols.mjs +0 -17
  479. package/_mjs/TRef/symbols.mjs.map +0 -1
  480. package/_src/IO/api/onExit.ts +0 -11
  481. package/_src/Ref/symbols.ts +0 -29
  482. package/_src/TRef/symbols.ts +0 -19
@@ -81,6 +81,6 @@ export function remove(self: FiberRefs, fiberRef: FiberRef<any>): FiberRefs {
81
81
  * @tsplus getter fncts.io.FiberRefs unFiberRefs
82
82
  * @tsplus macro identity
83
83
  */
84
- export function unFiberRefs(self: FiberRefs): HashMap<FiberRef<unknown>, Cons<readonly [FiberId.Runtime, unknown]>> {
84
+ export function unFiberRefs(self: FiberRefs): HashMap<FiberRef<any>, Cons<readonly [FiberId.Runtime, unknown]>> {
85
85
  return FiberRefs.reverseGet(self);
86
86
  }
@@ -8,7 +8,7 @@ export interface FiberRefsN extends HKT {
8
8
  export interface FiberRefs
9
9
  extends Newtype<
10
10
  { readonly FiberRefs: unique symbol },
11
- HashMap<FiberRef<unknown>, Cons<readonly [FiberId.Runtime, unknown]>>
11
+ HashMap<FiberRef<any>, Cons<readonly [FiberId.Runtime, unknown]>>
12
12
  > {}
13
13
 
14
14
  /**
@@ -194,17 +194,26 @@ export function unsafeSucceed<A>(a: A, __tsplusTrace?: string) {
194
194
  * @tsplus getter fncts.io.Future await
195
195
  */
196
196
  export function wait<E, A>(future: Future<E, A>, __tsplusTrace?: string): IO<never, E, A> {
197
- return IO.asyncInterrupt<never, E, A>((k) => {
197
+ return IO.defer(() => {
198
198
  switch (future.state._tag) {
199
199
  case FutureStateTag.Done: {
200
- return Either.right(future.state.value);
200
+ return future.state.value;
201
201
  }
202
202
  case FutureStateTag.Pending: {
203
- future.state = new Pending(future.state.joiners.prepend(k));
204
- return Either.left(interruptJoiner(future, k));
203
+ return IO.asyncInterrupt<never, E, A>((k) => {
204
+ switch (future.state._tag) {
205
+ case FutureStateTag.Done: {
206
+ return Either.right(future.state.value);
207
+ }
208
+ case FutureStateTag.Pending: {
209
+ future.state = new Pending(future.state.joiners.prepend(k));
210
+ return Either.left(interruptJoiner(future, k));
211
+ }
212
+ }
213
+ }, future.blockingOn);
205
214
  }
206
215
  }
207
- }, future.blockingOn);
216
+ });
208
217
  }
209
218
 
210
219
  function interruptJoiner<E, A>(
package/_src/Hub/api.ts CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  unsafeMakeHub,
12
12
  } from "@fncts/io/Hub/internal";
13
13
  import { Hub as HubInternal } from "@fncts/io/internal/Hub";
14
- import { EnqueueTypeId, QueueTypeId } from "@fncts/io/Queue";
14
+ import { EnqueueTypeId, QueueTypeId , QueueVariance } from "@fncts/io/Queue";
15
15
 
16
16
  /**
17
17
  * Waits for the hub to be shut down.
@@ -275,12 +275,14 @@ export function mapIO<B, RC, EC, C>(f: (b: B) => IO<RC, EC, C>, __tsplusTrace?:
275
275
  class ToQueue<RA, RB, EA, EB, A, B> implements PEnqueue<RA, RB, EA, EB, A, B> {
276
276
  readonly [QueueTypeId]: QueueTypeId = QueueTypeId;
277
277
  readonly [EnqueueTypeId]: EnqueueTypeId = EnqueueTypeId;
278
- declare _RA: () => RA;
279
- declare _RB: () => RB;
280
- declare _EA: () => EA;
281
- declare _EB: () => EB;
282
- declare _A: (_: A) => void;
283
- declare _B: () => B;
278
+ declare [QueueVariance]: {
279
+ readonly _RA: (_: never) => RA;
280
+ readonly _RB: (_: never) => RB;
281
+ readonly _EA: (_: never) => EA;
282
+ readonly _EB: (_: never) => EB;
283
+ readonly _A: (_: A) => void;
284
+ readonly _B: (_: never) => B;
285
+ };
284
286
  constructor(readonly source: PHubInternal<RA, RB, EA, EB, A, B>) {}
285
287
  awaitShutdown = this.source.awaitShutdown;
286
288
  capacity = this.source.capacity;
@@ -1,7 +1,10 @@
1
1
  import type { IO } from "@fncts/io/IO";
2
2
  import type { PDequeue, PEnqueue, PEnqueueInternal } from "@fncts/io/Queue";
3
3
 
4
- import { EnqueueTypeId, QueueTypeId } from "@fncts/io/Queue";
4
+ import { EnqueueTypeId, QueueTypeId, QueueVariance } from "@fncts/io/Queue/definition";
5
+
6
+ export const HubVariance = Symbol.for("fncts.io.Hub.Variance");
7
+ export type HubVariance = typeof HubVariance;
5
8
 
6
9
  export const HubTypeId = Symbol.for("fncts.io.Hub");
7
10
  export type HubTypeId = typeof HubTypeId;
@@ -17,13 +20,15 @@ export type HubTypeId = typeof HubTypeId;
17
20
  * @tsplus type fncts.io.Hub
18
21
  */
19
22
  export interface PHub<RA, RB, EA, EB, A, B> extends PEnqueue<RA, RB, EA, EB, A, B> {
20
- readonly _typeId: HubTypeId;
21
- readonly _RA: () => RA;
22
- readonly _RB: () => RB;
23
- readonly _EA: () => EA;
24
- readonly _EB: () => EB;
25
- readonly _A: (_: A) => void;
26
- readonly _B: () => B;
23
+ readonly [HubTypeId]: HubTypeId;
24
+ readonly [HubVariance]: {
25
+ readonly _RA: (_: never) => RA;
26
+ readonly _RB: (_: never) => RB;
27
+ readonly _EA: (_: never) => EA;
28
+ readonly _EB: (_: never) => EB;
29
+ readonly _A: (_: A) => void;
30
+ readonly _B: (_: never) => B;
31
+ };
27
32
  }
28
33
 
29
34
  /**
@@ -46,13 +51,23 @@ export abstract class PHubInternal<RA, RB, EA, EB, A, B>
46
51
  {
47
52
  readonly [QueueTypeId]: QueueTypeId = QueueTypeId;
48
53
  readonly [EnqueueTypeId]: EnqueueTypeId = EnqueueTypeId;
49
- _typeId: HubTypeId = HubTypeId;
50
- readonly _RA!: () => RA;
51
- readonly _RB!: () => RB;
52
- readonly _EA!: () => EA;
53
- readonly _EB!: () => EB;
54
- readonly _A!: (_: A) => void;
55
- readonly _B!: () => B;
54
+ readonly [HubTypeId]: HubTypeId = HubTypeId;
55
+ declare [HubVariance]: {
56
+ readonly _RA: (_: never) => RA;
57
+ readonly _RB: (_: never) => RB;
58
+ readonly _EA: (_: never) => EA;
59
+ readonly _EB: (_: never) => EB;
60
+ readonly _A: (_: A) => void;
61
+ readonly _B: (_: never) => B;
62
+ };
63
+ declare [QueueVariance]: {
64
+ readonly _RA: (_: never) => RA;
65
+ readonly _RB: (_: never) => RB;
66
+ readonly _EA: (_: never) => EA;
67
+ readonly _EB: (_: never) => EB;
68
+ readonly _A: (_: A) => void;
69
+ readonly _B: (_: never) => B;
70
+ };
56
71
 
57
72
  /**
58
73
  * Waits for the hub to be shut down.
@@ -2,6 +2,21 @@ import { Dynamic, Interruptible, Uninterruptible } from "@fncts/io/IO/definition
2
2
  import { RuntimeFlag } from "@fncts/io/RuntimeFlag";
3
3
  import { RuntimeFlags } from "@fncts/io/RuntimeFlags";
4
4
 
5
+ export interface InterruptibilityRestorer {
6
+ readonly restore: <R, E, A>(io: IO<R, E, A>, __tsplusTrace?: string) => IO<R, E, A>;
7
+ readonly force: <R, E, A>(io: IO<R, E, A>, __tsplusTrace?: string) => IO<R, E, A>;
8
+ }
9
+
10
+ const RestoreInterruptible: InterruptibilityRestorer = {
11
+ restore: (io, __tsplusTrace) => io.interruptible,
12
+ force: (io, __tsplusTrace) => io.interruptible,
13
+ };
14
+
15
+ const RestoreUninterruptible: InterruptibilityRestorer = {
16
+ restore: (io, __tsplusTrace) => io.uninterruptible,
17
+ force: (io, __tsplusTrace) => io.uninterruptible.disconnect.interruptible,
18
+ };
19
+
5
20
  /**
6
21
  * Returns an effect that is interrupted as if by the specified fiber.
7
22
  *
@@ -51,7 +66,6 @@ export const interrupt: IO<never, never, never> = IO.fiberId.flatMap(IO.interrup
51
66
  */
52
67
  export function interruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
53
68
  return new Interruptible(self, __tsplusTrace);
54
- // return self.setInterruptStatus(InterruptStatus.interruptible);
55
69
  }
56
70
 
57
71
  /**
@@ -67,7 +81,6 @@ export function interruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string
67
81
  */
68
82
  export function uninterruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
69
83
  return new Uninterruptible(self, __tsplusTrace);
70
- // return self.setInterruptStatus(InterruptStatus.uninterruptible);
71
84
  }
72
85
 
73
86
  /**
@@ -77,9 +90,9 @@ export function uninterruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: stri
77
90
  *
78
91
  * @tsplus static fncts.io.IOOps uninterruptibleMask
79
92
  */
80
- export function uninterruptibleMask<R, E, A>(f: (restore: InterruptStatusRestore) => IO<R, E, A>): IO<R, E, A> {
93
+ export function uninterruptibleMask<R, E, A>(f: (restore: InterruptibilityRestorer) => IO<R, E, A>): IO<R, E, A> {
81
94
  return new Dynamic(RuntimeFlags.disable(RuntimeFlag.Interruption), (oldFlags) =>
82
- f(new InterruptStatusRestore(InterruptStatus.fromBoolean(oldFlags.interruption))),
95
+ f(oldFlags.interruption ? RestoreInterruptible : RestoreUninterruptible),
83
96
  );
84
97
  }
85
98
 
@@ -109,52 +122,72 @@ export function ensuring<R1>(finalizer: IO<R1, never, any>, __tsplusTrace?: stri
109
122
  * @tsplus static fncts.io.IOOps interruptibleMask
110
123
  */
111
124
  export function interruptibleMask<R, E, A>(
112
- k: (restore: InterruptStatusRestore) => IO<R, E, A>,
125
+ k: (restore: InterruptibilityRestorer) => IO<R, E, A>,
113
126
  __tsplusTrace?: string,
114
127
  ): IO<R, E, A> {
115
- return IO.checkInterruptible((flag) => k(new InterruptStatusRestore(flag)).interruptible);
128
+ return IO.checkInterruptible(
129
+ (flag) => k(flag.isInterruptible ? RestoreInterruptible : RestoreUninterruptible).interruptible,
130
+ );
116
131
  }
117
132
 
118
133
  /**
119
134
  * Calls the specified function, and runs the effect it returns, if this
120
135
  * effect is interrupted.
121
136
  *
122
- * @tsplus fluent fncts.io.IO onInterrupt
137
+ * @tsplus pipeable fncts.io.IO onInterrupt
123
138
  */
124
- export function onInterrupt_<R, E, A, R1>(
125
- ma: IO<R, E, A>,
126
- cleanup: (interruptors: HashSet<FiberId>) => IO<R1, never, any>,
127
- __tsplusTrace?: string,
128
- ): IO<R | R1, E, A> {
129
- return uninterruptibleMask(({ restore }) =>
130
- restore(ma).matchCauseIO(
131
- (cause) =>
132
- cause.interrupted ? cleanup(cause.interruptors).zipRight(IO.failCauseNow(cause)) : IO.failCauseNow(cause),
133
- IO.succeedNow,
134
- ),
135
- );
139
+ export function onInterrupt<R1, E1>(cleanup: Lazy<IO<R1, E1, any>>, __tsplusTrace?: string) {
140
+ return <R, E, A>(ma: IO<R, E, A>): IO<R | R1, E | E1, A> => {
141
+ return ma.onExit((exit) =>
142
+ exit.match(
143
+ (cause) => (cause.isInterruptedOnly ? cleanup() : IO.unit),
144
+ () => IO.unit,
145
+ ),
146
+ );
147
+ };
136
148
  }
137
149
 
138
150
  /**
139
151
  * Calls the specified function, and runs the effect it returns, if this
140
- * effect is interrupted (allows for expanding error).
152
+ * effect is interrupted.
141
153
  *
142
- * @tsplus fluent fncts.io.IO onInterruptExtended
154
+ * @tsplus pipeable fncts.io.IO onInterrupt
143
155
  */
144
- export function onInterruptExtended_<R, E, A, R2, E2>(
145
- self: IO<R, E, A>,
146
- cleanup: Lazy<IO<R2, E2, any>>,
156
+ export function onInterruptWith<R1, E1>(
157
+ cleanup: (interruptors: HashSet<FiberId>) => IO<R1, E1, any>,
147
158
  __tsplusTrace?: string,
148
- ): IO<R | R2, E | E2, A> {
149
- return uninterruptibleMask(({ restore }) =>
150
- restore(self).matchCauseIO(
151
- (cause) =>
152
- cause.interrupted
153
- ? cleanup().matchCauseIO(IO.failCauseNow, () => IO.failCauseNow(cause))
154
- : IO.failCauseNow(cause),
155
- IO.succeedNow,
156
- ),
157
- );
159
+ ) {
160
+ return <R, E, A>(ma: IO<R, E, A>): IO<R | R1, E | E1, A> => {
161
+ return ma.onExit((exit) =>
162
+ exit.match(
163
+ (cause) => (cause.isInterruptedOnly ? cleanup(cause.interruptors) : IO.unit),
164
+ () => IO.unit,
165
+ ),
166
+ );
167
+ };
168
+ }
169
+
170
+ /**
171
+ * @tsplus pipeable fncts.io.IO onExit
172
+ */
173
+ export function onExit<E, A, R1, E1>(cleanup: (exit: Exit<E, A>) => IO<R1, E1, any>, __tsplusTrace?: string) {
174
+ return <R>(self: IO<R, E, A>): IO<R | R1, E | E1, A> => {
175
+ return IO.uninterruptibleMask(({ restore }) =>
176
+ restore(self).matchCauseIO(
177
+ (failure1) => {
178
+ const result = Exit.failCause(failure1);
179
+ return cleanup(result).matchCauseIO(
180
+ (failure2) => IO.failCauseNow(Cause.then(failure1, failure2)),
181
+ () => IO.fromExitNow(result),
182
+ );
183
+ },
184
+ (success) => {
185
+ const result = Exit.succeed(success);
186
+ return cleanup(result) > IO.fromExitNow(result);
187
+ },
188
+ ),
189
+ );
190
+ };
158
191
  }
159
192
 
160
193
  /**
@@ -174,27 +207,11 @@ export function onInterruptExtended_<R, E, A, R2, E2>(
174
207
  */
175
208
  export function disconnect<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
176
209
  return uninterruptibleMask(({ restore }) =>
177
- IO.fiberId.flatMap((id) =>
178
- restore(self).forkDaemon.flatMap((fiber) =>
179
- restore(fiber.join).onInterrupt(() => fiber.interruptAs(id).forkDaemon),
180
- ),
210
+ IO.fiberId.flatMap((fiberId) =>
211
+ Do((Δ) => {
212
+ const fiber = Δ(restore(self).forkDaemon);
213
+ return Δ(restore(fiber.join).onInterrupt(fiber.interruptAsFork(fiberId)));
214
+ }),
181
215
  ),
182
216
  );
183
217
  }
184
-
185
- /**
186
- * Used to restore the inherited interruptibility
187
- */
188
- export class InterruptStatusRestore {
189
- constructor(readonly flag: InterruptStatus) {}
190
-
191
- restore = <R, E, A>(io: IO<R, E, A>): IO<R, E, A> =>
192
- this.flag.isInterruptible ? io.interruptible : io.uninterruptible;
193
-
194
- force = <R, E, A>(io: IO<R, E, A>): IO<R, E, A> => {
195
- if (this.flag.isUninteruptible) {
196
- return io.uninterruptible.disconnect.interruptible;
197
- }
198
- return io.interruptible;
199
- };
200
- }
@@ -3,13 +3,14 @@
3
3
  */
4
4
  export function onTermination<R1>(cleanup: (cause: Cause<never>) => URIO<R1, any>, __tsplusTrace?: string) {
5
5
  return <R, E, A>(self: Lazy<IO<R, E, A>>): IO<R | R1, E, A> => {
6
- return IO.unit.bracketExit(
7
- () => self(),
8
- (_, exit: Exit<E, A>) =>
9
- exit.match(
10
- (cause) => cause.failureOrCause.match(() => IO.unit, cleanup),
11
- () => IO.unit,
12
- ),
6
+ return IO.defer(self).onExit((exit) =>
7
+ exit.match(
8
+ (cause) => {
9
+ if (cause.isFailure) return IO.unit;
10
+ else return cleanup(cause as Cause<never>);
11
+ },
12
+ () => IO.unit,
13
+ ),
13
14
  );
14
15
  };
15
16
  }
@@ -1,4 +1,4 @@
1
- import type { _A, _E, _R } from "@fncts/base/types";
1
+ import type { IOVariance } from "@fncts/io/IO/definition";
2
2
 
3
3
  import { identity, unsafeCoerce } from "@fncts/base/data/function";
4
4
 
@@ -8,11 +8,9 @@ import { identity, unsafeCoerce } from "@fncts/base/data/function";
8
8
  export function sequenceT<T extends ReadonlyNonEmptyArray<IO<any, any, any>>>(
9
9
  ...ios: T
10
10
  ): IO<
11
- _R<T[number]>,
12
- _E<T[number]>,
13
- {
14
- [K in keyof T]: _A<T[K]>;
15
- }
11
+ [T[number]] extends [{ [IOVariance]: { _R: () => infer R } }] ? R : never,
12
+ [T[number]] extends [{ [IOVariance]: { _E: () => infer E } }] ? E : never,
13
+ { [K in keyof T]: T[K] extends { [IOVariance]: { _A: () => infer A } } ? A : never }
16
14
  > {
17
15
  return unsafeCoerce(IO.foreach(ios, identity));
18
16
  }
package/_src/IO/api.ts CHANGED
@@ -410,6 +410,21 @@ export function deferTryCatch<R, E, A, E1>(
410
410
  });
411
411
  }
412
412
 
413
+ /**
414
+ * @tsplus static fncts.io.IOOps descriptorWith
415
+ */
416
+ export function descriptorWith<R, E, A>(f: (descriptor: FiberDescriptor) => IO<R, E, A>): IO<R, E, A> {
417
+ return IO.withFiberRuntime((fiber, status) => {
418
+ const descriptor = new FiberDescriptor(fiber.id, status, fiber.getFiberRef(FiberRef.interruptedCause).interruptors);
419
+ return f(descriptor);
420
+ });
421
+ }
422
+
423
+ /**
424
+ * @tsplus static fncts.io.IOOps descriptor
425
+ */
426
+ export const descriptor: UIO<FiberDescriptor> = IO.descriptorWith((descriptor) => IO.succeedNow(descriptor));
427
+
413
428
  /**
414
429
  * Folds an `IO` that may fail with `E` or succeed with `A` into one that never fails but succeeds with `Either<E, A>`
415
430
  *
@@ -488,7 +503,14 @@ export function failCause<E = never, A = never>(cause: Lazy<Cause<E>>, __tsplusT
488
503
  *
489
504
  * @tsplus static fncts.io.IOOps fiberId
490
505
  */
491
- export const fiberId: IO<never, never, FiberId> = IO.withFiberRuntime((fiber) => IO.succeed(fiber.id));
506
+ export const fiberId: IO<never, never, FiberId> = IO.fiberIdWith((id) => IO.succeedNow(id));
507
+
508
+ /**
509
+ * @tsplus static fncts.io.IOOps fiberIdWith
510
+ */
511
+ export function fiberIdWith<R, E, A>(f: (id: FiberId.Runtime) => IO<R, E, A>): IO<R, E, A> {
512
+ return IO.withFiberRuntime((fiber) => f(fiber.id));
513
+ }
492
514
 
493
515
  /**
494
516
  * Filters the collection using the specified effectual predicate.
@@ -6,6 +6,9 @@ import type { Trace } from "@fncts/base/data/Trace";
6
6
  import { RuntimeFlag } from "../RuntimeFlag.js";
7
7
  import { RuntimeFlags } from "../RuntimeFlags.js";
8
8
 
9
+ export const IOVariance = Symbol.for("fncts.io.IO.Variance");
10
+ export type IOVariance = typeof IOVariance;
11
+
9
12
  export const IOTypeId = Symbol.for("fncts.io.IO");
10
13
  export type IOTypeId = typeof IOTypeId;
11
14
 
@@ -23,10 +26,12 @@ export interface IOF extends HKT {
23
26
  * @tsplus companion fncts.io.IOOps
24
27
  */
25
28
  export abstract class IO<R, E, A> {
26
- readonly _typeId: IOTypeId = IOTypeId;
27
- declare _R: () => R;
28
- declare _E: () => E;
29
- declare _A: () => A;
29
+ readonly [IOTypeId]: IOTypeId = IOTypeId;
30
+ declare [IOVariance]: {
31
+ _R: () => R;
32
+ _E: () => E;
33
+ _A: () => A;
34
+ };
30
35
  }
31
36
 
32
37
  /**
@@ -45,9 +50,9 @@ export const IOAspects: IOAspects = {};
45
50
  export function unifyIO<X extends IO<any, any, any>>(
46
51
  self: X,
47
52
  ): IO<
48
- [X] extends [{ _R: () => infer R }] ? R : never,
49
- [X] extends [{ _E: () => infer E }] ? E : never,
50
- [X] extends [{ _A: () => infer A }] ? A : never
53
+ [X] extends [{ [IOVariance]: { _R: () => infer R } }] ? R : never,
54
+ [X] extends [{ [IOVariance]: { _E: () => infer E } }] ? E : never,
55
+ [X] extends [{ [IOVariance]: { _A: () => infer A } }] ? A : never
51
56
  > {
52
57
  return self;
53
58
  }
@@ -58,7 +63,7 @@ export type URIO<R, A> = IO<R, never, A>;
58
63
 
59
64
  export type FIO<E, A> = IO<never, E, A>;
60
65
 
61
- export const enum IOTag {
66
+ export const enum IOOpCode {
62
67
  SucceedNow,
63
68
  Fail,
64
69
  Sync,
@@ -72,21 +77,24 @@ export const enum IOTag {
72
77
  Stateful,
73
78
  WhileLoop,
74
79
  YieldNow,
80
+ Commit,
81
+ RevertFlags,
82
+ UpdateTrace,
75
83
  }
76
84
 
77
85
  export function isIO(u: unknown): u is IO<any, any, any> {
78
- return hasTypeId(u, IOTypeId);
86
+ return isObject(u) && IOTypeId in u;
79
87
  }
80
88
 
81
89
  export class Sync<A> extends IO<never, never, A> {
82
- readonly _tag = IOTag.Sync;
90
+ readonly ioOpCode = IOOpCode.Sync;
83
91
  constructor(readonly evaluate: () => A, readonly trace?: string) {
84
92
  super();
85
93
  }
86
94
  }
87
95
 
88
96
  export class Async<R, E, A> extends IO<R, E, A> {
89
- readonly _tag = IOTag.Async;
97
+ readonly ioOpCode = IOOpCode.Async;
90
98
  constructor(
91
99
  readonly registerCallback: (f: (_: IO<R, E, A>) => void) => any,
92
100
  readonly blockingOn: () => FiberId,
@@ -100,7 +108,7 @@ export class Async<R, E, A> extends IO<R, E, A> {
100
108
  * @internal
101
109
  */
102
110
  export class OnSuccessAndFailure<R, E, A, R1, E1, B, R2, E2, C> extends IO<R | R1 | R2, E1 | E2, B | C> {
103
- readonly _tag = IOTag.OnSuccessAndFailure;
111
+ readonly ioOpCode = IOOpCode.OnSuccessAndFailure;
104
112
 
105
113
  constructor(
106
114
  readonly first: IO<R, E, A>,
@@ -120,7 +128,7 @@ export class OnSuccessAndFailure<R, E, A, R1, E1, B, R2, E2, C> extends IO<R | R
120
128
  }
121
129
 
122
130
  export class OnFailure<R, E, A, R1, E1, B> extends IO<R | R1, E1, A | B> {
123
- readonly _tag = IOTag.OnFailure;
131
+ readonly ioOpCode = IOOpCode.OnFailure;
124
132
  constructor(
125
133
  readonly first: IO<R, E, A>,
126
134
  readonly failureK: (cause: Cause<E>) => IO<R1, E1, B>,
@@ -141,7 +149,7 @@ export class OnFailure<R, E, A, R1, E1, B> extends IO<R | R1, E1, A | B> {
141
149
  * @internal
142
150
  */
143
151
  export class OnSuccess<R, R1, E, E1, A, A1> extends IO<R | R1, E | E1, A1> {
144
- readonly _tag = IOTag.OnSuccess;
152
+ readonly ioOpCode = IOOpCode.OnSuccess;
145
153
  constructor(readonly first: IO<R, E, A>, readonly successK: (a: A) => IO<R1, E1, A1>, readonly trace?: string) {
146
154
  super();
147
155
  }
@@ -157,21 +165,21 @@ export class OnSuccess<R, R1, E, E1, A, A1> extends IO<R | R1, E | E1, A1> {
157
165
  * @internal
158
166
  */
159
167
  export class SucceedNow<A> extends IO<never, never, A> {
160
- readonly _tag = IOTag.SucceedNow;
168
+ readonly ioOpCode = IOOpCode.SucceedNow;
161
169
  constructor(readonly value: A, readonly trace?: string) {
162
170
  super();
163
171
  }
164
172
  }
165
173
 
166
174
  export class UpdateRuntimeFlags extends IO<never, never, void> {
167
- readonly _tag = IOTag.UpdateRuntimeFlags;
175
+ readonly ioOpCode = IOOpCode.UpdateRuntimeFlags;
168
176
  constructor(readonly update: RuntimeFlags.Patch, readonly trace?: string) {
169
177
  super();
170
178
  }
171
179
  }
172
180
 
173
181
  export class Interruptible<R, E, A> extends IO<R, E, A> {
174
- readonly _tag = IOTag.UpdateRuntimeFlagsWithin;
182
+ readonly ioOpCode = IOOpCode.UpdateRuntimeFlagsWithin;
175
183
  constructor(readonly effect: IO<R, E, A>, readonly trace?: string) {
176
184
  super();
177
185
  }
@@ -183,7 +191,7 @@ export class Interruptible<R, E, A> extends IO<R, E, A> {
183
191
  }
184
192
 
185
193
  export class Uninterruptible<R, E, A> extends IO<R, E, A> {
186
- readonly _tag = IOTag.UpdateRuntimeFlagsWithin;
194
+ readonly ioOpCode = IOOpCode.UpdateRuntimeFlagsWithin;
187
195
  constructor(readonly effect: IO<R, E, A>, readonly trace?: string) {
188
196
  super();
189
197
  }
@@ -195,7 +203,7 @@ export class Uninterruptible<R, E, A> extends IO<R, E, A> {
195
203
  }
196
204
 
197
205
  export class Dynamic<R, E, A> extends IO<R, E, A> {
198
- readonly _tag = IOTag.UpdateRuntimeFlagsWithin;
206
+ readonly ioOpCode = IOOpCode.UpdateRuntimeFlagsWithin;
199
207
  constructor(
200
208
  readonly update: RuntimeFlagsPatch,
201
209
  readonly f: (oldRuntimeFlags: RuntimeFlags) => IO<R, E, A>,
@@ -210,21 +218,21 @@ export class Dynamic<R, E, A> extends IO<R, E, A> {
210
218
  }
211
219
 
212
220
  export class GenerateStackTrace extends IO<never, never, Trace> {
213
- readonly _tag = IOTag.GenerateStackTrace;
221
+ readonly ioOpCode = IOOpCode.GenerateStackTrace;
214
222
  constructor(readonly trace?: string) {
215
223
  super();
216
224
  }
217
225
  }
218
226
 
219
227
  export class Stateful<R, E, A> extends IO<R, E, A> {
220
- readonly _tag = IOTag.Stateful;
228
+ readonly ioOpCode = IOOpCode.Stateful;
221
229
  constructor(readonly onState: (fiber: FiberRuntime<E, A>, status: Running) => IO<R, E, A>, readonly trace?: string) {
222
230
  super();
223
231
  }
224
232
  }
225
233
 
226
234
  export class WhileLoop<R, E, A> extends IO<R, E, void> {
227
- readonly _tag = IOTag.WhileLoop;
235
+ readonly ioOpCode = IOOpCode.WhileLoop;
228
236
  constructor(
229
237
  readonly check: () => boolean,
230
238
  readonly body: () => IO<R, E, A>,
@@ -236,7 +244,7 @@ export class WhileLoop<R, E, A> extends IO<R, E, void> {
236
244
  }
237
245
 
238
246
  export class YieldNow extends IO<never, never, void> {
239
- readonly _tag = IOTag.YieldNow;
247
+ readonly ioOpCode = IOOpCode.YieldNow;
240
248
  constructor(readonly trace?: string) {
241
249
  super();
242
250
  }
@@ -246,7 +254,7 @@ export class YieldNow extends IO<never, never, void> {
246
254
  * @internal
247
255
  */
248
256
  export class Fail<E> extends IO<never, E, never> {
249
- readonly _tag = IOTag.Fail;
257
+ readonly ioOpCode = IOOpCode.Fail;
250
258
 
251
259
  constructor(readonly cause: Lazy<Cause<E>>, readonly trace?: string) {
252
260
  super();
@@ -266,7 +274,8 @@ export type Concrete =
266
274
  | Stateful<any, any, any>
267
275
  | WhileLoop<any, any, any>
268
276
  | YieldNow
269
- | Fail<any>;
277
+ | Fail<any>
278
+ | STM<any, any, any>;
270
279
 
271
280
  /**
272
281
  * @tsplus static fncts.io.IOOps concrete
@@ -292,10 +301,10 @@ export const IOErrorTypeId = Symbol.for("fncts.io.IO.IOError");
292
301
  export type IOErrorTypeId = typeof IOErrorTypeId;
293
302
 
294
303
  export class IOError<E> {
295
- readonly _typeId: IOErrorTypeId = IOErrorTypeId;
304
+ readonly [IOErrorTypeId]: IOErrorTypeId = IOErrorTypeId;
296
305
  constructor(readonly cause: Cause<E>) {}
297
306
  }
298
307
 
299
308
  export function isIOError(u: unknown): u is IOError<unknown> {
300
- return hasTypeId(u, IOErrorTypeId);
309
+ return isObject(u) && IOErrorTypeId in u;
301
310
  }
package/_src/IO.ts CHANGED
@@ -33,7 +33,6 @@ export * from "./IO/api/fulfill.js";
33
33
  export * from "./IO/api/interrupt.js";
34
34
  export * from "./IO/api/memoize.js";
35
35
  export * from "./IO/api/once.js";
36
- export * from "./IO/api/onExit.js";
37
36
  export * from "./IO/api/onTermination.js";
38
37
  export * from "./IO/api/provideLayer.js";
39
38
  export * from "./IO/api/provideSomeLayer.js";
@@ -162,7 +162,7 @@ export function scope(scope: Scope, __tsplusTrace?: string) {
162
162
  .zipWith(memoMap.getOrElseMemoize(scope, layer.that, layer.trace), layer.f, layer.trace),
163
163
  );
164
164
  }
165
- case LayerTag.ZipWithC: {
165
+ case LayerTag.ZipWithConcurrent: {
166
166
  return IO.succeed(
167
167
  () => (memoMap: MemoMap) =>
168
168
  memoMap
package/_src/Layer/api.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { Spreadable } from "@fncts/base/types";
2
2
  import type { Erase } from "@fncts/typelevel/Intersection";
3
3
 
4
- import { Fold, Fresh, FromScoped, Layer, To, ZipWithC } from "@fncts/io/Layer/definition";
4
+ import { Fold, Fresh, FromScoped, Layer, To, ZipWithConcurrent } from "@fncts/io/Layer/definition";
5
5
  import { DecisionTag } from "@fncts/io/Schedule";
6
6
 
7
7
  /**
@@ -9,7 +9,7 @@ import { DecisionTag } from "@fncts/io/Schedule";
9
9
  */
10
10
  export function and<RIn1, E1, ROut1>(that: Layer<RIn1, E1, ROut1>, __tsplusTrace?: string) {
11
11
  return <RIn, E, ROut>(self: Layer<RIn, E, ROut>): Layer<RIn | RIn1, E | E1, ROut | ROut1> => {
12
- return new ZipWithC(self, that, (a, b) => a.union(b), __tsplusTrace);
12
+ return new ZipWithConcurrent(self, that, (a, b) => a.union(b), __tsplusTrace);
13
13
  };
14
14
  }
15
15