@fncts/io 0.0.49 → 0.0.51

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 (635) hide show
  1. package/Channel/internal/SingleProducerAsyncInput.d.ts +1 -1
  2. package/CountdownLatch.d.ts +5 -5
  3. package/Fiber/FiberRuntime.d.ts +1 -1
  4. package/Hub/api.d.ts +7 -7
  5. package/IO/api/foreachExec.d.ts +18 -0
  6. package/IO/api.d.ts +1 -1
  7. package/Push/Bounds.d.ts +4 -0
  8. package/Push/FlattenStrategy.d.ts +47 -0
  9. package/Push/IndexedBuffer.d.ts +19 -0
  10. package/Push/MergeStrategy.d.ts +19 -0
  11. package/Push/Operator/IOLoopOperator.d.ts +61 -0
  12. package/Push/Operator/IOOperator.d.ts +63 -0
  13. package/Push/Operator/LoopOperator.d.ts +50 -0
  14. package/Push/Operator/SyncOperator.d.ts +41 -0
  15. package/Push/Operator.d.ts +4 -0
  16. package/Push/Producer/IOProducer.d.ts +41 -0
  17. package/Push/Producer/SyncProducer.d.ts +61 -0
  18. package/Push/Producer.d.ts +1 -0
  19. package/Push/Sink.d.ts +65 -0
  20. package/Push/api.d.ts +80 -163
  21. package/Push/definition.d.ts +92 -19
  22. package/Push/internal.d.ts +3 -0
  23. package/Push.d.ts +6 -0
  24. package/Queue/api/dimapIO.d.ts +12 -12
  25. package/Ref/Synchronized/definition.d.ts +32 -9
  26. package/Ref/definition.d.ts +12 -0
  27. package/STM/api.d.ts +1 -1
  28. package/Scope/api.d.ts +16 -1
  29. package/Semaphore/definition.d.ts +1 -1
  30. package/Sink/definition.d.ts +5 -6
  31. package/Subject/Atomic.d.ts +19 -9
  32. package/Subject/DeferredRef.d.ts +17 -0
  33. package/Subject/Hold.d.ts +19 -0
  34. package/Subject/RefSubject/Atomic.d.ts +43 -0
  35. package/Subject/RefSubject/Derived.d.ts +43 -0
  36. package/Subject/RefSubject/RefSubject.d.ts +37 -0
  37. package/Subject/RefSubject/constructors.d.ts +15 -0
  38. package/Subject/RefSubject.d.ts +4 -0
  39. package/Subject/definition.d.ts +14 -2
  40. package/Subject.d.ts +3 -0
  41. package/SubscriptionRef.d.ts +0 -1
  42. package/Supervisor/definition.d.ts +1 -1
  43. package/_cjs/Cached/api.cjs +8 -2
  44. package/_cjs/Cached/api.cjs.map +1 -1
  45. package/_cjs/Cached/definition.cjs +2 -6
  46. package/_cjs/Cached/definition.cjs.map +1 -1
  47. package/_cjs/CancellerState.cjs +4 -7
  48. package/_cjs/CancellerState.cjs.map +1 -1
  49. package/_cjs/Channel/UpstreamPullRequest/definition.cjs +4 -2
  50. package/_cjs/Channel/UpstreamPullRequest/definition.cjs.map +1 -1
  51. package/_cjs/Channel/api.cjs +2 -3
  52. package/_cjs/Channel/api.cjs.map +1 -1
  53. package/_cjs/Channel/definition.cjs +22 -16
  54. package/_cjs/Channel/definition.cjs.map +1 -1
  55. package/_cjs/Channel/internal/ChannelExecutor.cjs +35 -11
  56. package/_cjs/Channel/internal/ChannelExecutor.cjs.map +1 -1
  57. package/_cjs/Channel/internal/ChannelState.cjs +15 -8
  58. package/_cjs/Channel/internal/ChannelState.cjs.map +1 -1
  59. package/_cjs/Channel/internal/MergeDecision.cjs +6 -8
  60. package/_cjs/Channel/internal/MergeDecision.cjs.map +1 -1
  61. package/_cjs/Channel/internal/MergeState.cjs +7 -3
  62. package/_cjs/Channel/internal/MergeState.cjs.map +1 -1
  63. package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs +49 -42
  64. package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs.map +1 -1
  65. package/_cjs/Clock/live.cjs +1 -4
  66. package/_cjs/Clock/live.cjs.map +1 -1
  67. package/_cjs/CountdownLatch.cjs +22 -12
  68. package/_cjs/CountdownLatch.cjs.map +1 -1
  69. package/_cjs/Differ/api.cjs +3 -12
  70. package/_cjs/Differ/api.cjs.map +1 -1
  71. package/_cjs/Differ/definition.cjs +1 -5
  72. package/_cjs/Differ/definition.cjs.map +1 -1
  73. package/_cjs/Fiber/FiberMessage.cjs +6 -3
  74. package/_cjs/Fiber/FiberMessage.cjs.map +1 -1
  75. package/_cjs/Fiber/FiberRuntime.cjs +66 -61
  76. package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
  77. package/_cjs/Fiber/definition.cjs +10 -6
  78. package/_cjs/Fiber/definition.cjs.map +1 -1
  79. package/_cjs/FiberDescriptor.cjs +3 -0
  80. package/_cjs/FiberDescriptor.cjs.map +1 -1
  81. package/_cjs/FiberRef/definition.cjs +9 -6
  82. package/_cjs/FiberRef/definition.cjs.map +1 -1
  83. package/_cjs/FiberRefs/Patch.cjs +13 -13
  84. package/_cjs/FiberRefs/Patch.cjs.map +1 -1
  85. package/_cjs/FiberScope/definition.cjs +2 -0
  86. package/_cjs/FiberScope/definition.cjs.map +1 -1
  87. package/_cjs/FiberSet.cjs +4 -3
  88. package/_cjs/FiberSet.cjs.map +1 -1
  89. package/_cjs/FiberStatus/definition.cjs +12 -9
  90. package/_cjs/FiberStatus/definition.cjs.map +1 -1
  91. package/_cjs/Future/State.cjs +8 -7
  92. package/_cjs/Future/State.cjs.map +1 -1
  93. package/_cjs/Future/definition.cjs +3 -3
  94. package/_cjs/Future/definition.cjs.map +1 -1
  95. package/_cjs/Hub/api.cjs +61 -44
  96. package/_cjs/Hub/api.cjs.map +1 -1
  97. package/_cjs/Hub/definition.cjs +4 -8
  98. package/_cjs/Hub/definition.cjs.map +1 -1
  99. package/_cjs/Hub/internal.cjs +130 -110
  100. package/_cjs/Hub/internal.cjs.map +1 -1
  101. package/_cjs/IO/api/foreachExec.cjs +29 -4
  102. package/_cjs/IO/api/foreachExec.cjs.map +1 -1
  103. package/_cjs/IO/api/transplant.cjs +8 -7
  104. package/_cjs/IO/api/transplant.cjs.map +1 -1
  105. package/_cjs/IO/api.cjs +9 -4
  106. package/_cjs/IO/api.cjs.map +1 -1
  107. package/_cjs/IO/definition.cjs +8 -12
  108. package/_cjs/IO/definition.cjs.map +1 -1
  109. package/_cjs/IO/runtime.cjs +64 -61
  110. package/_cjs/IO/runtime.cjs.map +1 -1
  111. package/_cjs/InterruptStatus/definition.cjs +1 -0
  112. package/_cjs/InterruptStatus/definition.cjs.map +1 -1
  113. package/_cjs/Layer/MemoMap.cjs +25 -24
  114. package/_cjs/Layer/MemoMap.cjs.map +1 -1
  115. package/_cjs/Layer/definition.cjs +30 -13
  116. package/_cjs/Layer/definition.cjs.map +1 -1
  117. package/_cjs/LogLevel.cjs +3 -0
  118. package/_cjs/LogLevel.cjs.map +1 -1
  119. package/_cjs/LogSpan.cjs +2 -0
  120. package/_cjs/LogSpan.cjs.map +1 -1
  121. package/_cjs/Logger/definition.cjs +1 -0
  122. package/_cjs/Logger/definition.cjs.map +1 -1
  123. package/_cjs/MVar/definition.cjs +3 -4
  124. package/_cjs/MVar/definition.cjs.map +1 -1
  125. package/_cjs/Push/Bounds.cjs +2 -0
  126. package/_cjs/Push/Bounds.cjs.map +1 -0
  127. package/_cjs/Push/FlattenStrategy.cjs +96 -0
  128. package/_cjs/Push/FlattenStrategy.cjs.map +1 -0
  129. package/_cjs/Push/IndexedBuffer.cjs +74 -0
  130. package/_cjs/Push/IndexedBuffer.cjs.map +1 -0
  131. package/_cjs/Push/MergeStrategy.cjs +47 -0
  132. package/_cjs/Push/MergeStrategy.cjs.map +1 -0
  133. package/_cjs/Push/Operator/IOLoopOperator.cjs +225 -0
  134. package/_cjs/Push/Operator/IOLoopOperator.cjs.map +1 -0
  135. package/_cjs/Push/Operator/IOOperator.cjs +104 -0
  136. package/_cjs/Push/Operator/IOOperator.cjs.map +1 -0
  137. package/_cjs/Push/Operator/LoopOperator.cjs +165 -0
  138. package/_cjs/Push/Operator/LoopOperator.cjs.map +1 -0
  139. package/_cjs/Push/Operator/SyncOperator.cjs +78 -0
  140. package/_cjs/Push/Operator/SyncOperator.cjs.map +1 -0
  141. package/_cjs/Push/Operator.cjs +2 -0
  142. package/_cjs/Push/Operator.cjs.map +1 -0
  143. package/_cjs/Push/Producer/IOProducer.cjs +72 -0
  144. package/_cjs/Push/Producer/IOProducer.cjs.map +1 -0
  145. package/_cjs/Push/Producer/SyncProducer.cjs +111 -0
  146. package/_cjs/Push/Producer/SyncProducer.cjs.map +1 -0
  147. package/_cjs/Push/Producer.cjs +2 -0
  148. package/_cjs/Push/Producer.cjs.map +1 -0
  149. package/_cjs/Push/Sink.cjs +238 -0
  150. package/_cjs/Push/Sink.cjs.map +1 -0
  151. package/_cjs/Push/api.cjs +369 -387
  152. package/_cjs/Push/api.cjs.map +1 -1
  153. package/_cjs/Push/definition.cjs +82 -26
  154. package/_cjs/Push/definition.cjs.map +1 -1
  155. package/_cjs/Push/internal.cjs +31 -26
  156. package/_cjs/Push/internal.cjs.map +1 -1
  157. package/_cjs/Push.cjs +66 -0
  158. package/_cjs/Push.cjs.map +1 -1
  159. package/_cjs/Queue/api/dimapIO.cjs +74 -32
  160. package/_cjs/Queue/api/dimapIO.cjs.map +1 -1
  161. package/_cjs/Queue/api/filterInputIO.cjs +51 -25
  162. package/_cjs/Queue/api/filterInputIO.cjs.map +1 -1
  163. package/_cjs/Queue/api/filterOutputIO.cjs +60 -30
  164. package/_cjs/Queue/api/filterOutputIO.cjs.map +1 -1
  165. package/_cjs/Queue/api/zipWithIO.cjs +27 -10
  166. package/_cjs/Queue/api/zipWithIO.cjs.map +1 -1
  167. package/_cjs/Queue/definition.cjs +3 -7
  168. package/_cjs/Queue/definition.cjs.map +1 -1
  169. package/_cjs/Queue/internal.cjs +73 -62
  170. package/_cjs/Queue/internal.cjs.map +1 -1
  171. package/_cjs/Queue/strategy.cjs +1 -3
  172. package/_cjs/Queue/strategy.cjs.map +1 -1
  173. package/_cjs/Random/live.cjs +4 -3
  174. package/_cjs/Random/live.cjs.map +1 -1
  175. package/_cjs/Ref/Atomic.cjs +2 -3
  176. package/_cjs/Ref/Atomic.cjs.map +1 -1
  177. package/_cjs/Ref/Derived.cjs +2 -3
  178. package/_cjs/Ref/Derived.cjs.map +1 -1
  179. package/_cjs/Ref/DerivedAll.cjs +2 -3
  180. package/_cjs/Ref/DerivedAll.cjs.map +1 -1
  181. package/_cjs/Ref/Synchronized/definition.cjs +17 -16
  182. package/_cjs/Ref/Synchronized/definition.cjs.map +1 -1
  183. package/_cjs/Ref/definition.cjs +2 -6
  184. package/_cjs/Ref/definition.cjs.map +1 -1
  185. package/_cjs/Reloadable/definition.cjs +2 -0
  186. package/_cjs/Reloadable/definition.cjs.map +1 -1
  187. package/_cjs/STM/definition.cjs +30 -25
  188. package/_cjs/STM/definition.cjs.map +1 -1
  189. package/_cjs/STM/driver.cjs +5 -0
  190. package/_cjs/STM/driver.cjs.map +1 -1
  191. package/_cjs/STM/internal/Entry.cjs +9 -6
  192. package/_cjs/STM/internal/Entry.cjs.map +1 -1
  193. package/_cjs/STM/internal/TryCommit.cjs +6 -7
  194. package/_cjs/STM/internal/TryCommit.cjs.map +1 -1
  195. package/_cjs/STM/internal/Versioned.cjs +2 -3
  196. package/_cjs/STM/internal/Versioned.cjs.map +1 -1
  197. package/_cjs/Schedule/Decision.cjs +3 -4
  198. package/_cjs/Schedule/Decision.cjs.map +1 -1
  199. package/_cjs/Schedule/Driver.cjs +4 -0
  200. package/_cjs/Schedule/Driver.cjs.map +1 -1
  201. package/_cjs/Schedule/api.cjs +2 -5
  202. package/_cjs/Schedule/api.cjs.map +1 -1
  203. package/_cjs/Schedule/definition.cjs +3 -1
  204. package/_cjs/Schedule/definition.cjs.map +1 -1
  205. package/_cjs/Scope/ReleaseMap/definition.cjs +8 -2
  206. package/_cjs/Scope/ReleaseMap/definition.cjs.map +1 -1
  207. package/_cjs/Scope/api.cjs +29 -11
  208. package/_cjs/Scope/api.cjs.map +1 -1
  209. package/_cjs/Scope/definition.cjs +3 -7
  210. package/_cjs/Scope/definition.cjs.map +1 -1
  211. package/_cjs/ScopedRef/api.cjs +8 -3
  212. package/_cjs/ScopedRef/api.cjs.map +1 -1
  213. package/_cjs/ScopedRef/definition.cjs +1 -5
  214. package/_cjs/ScopedRef/definition.cjs.map +1 -1
  215. package/_cjs/Semaphore/Reservation.cjs +2 -0
  216. package/_cjs/Semaphore/Reservation.cjs.map +1 -1
  217. package/_cjs/Semaphore/definition.cjs +42 -38
  218. package/_cjs/Semaphore/definition.cjs.map +1 -1
  219. package/_cjs/Sink/definition.cjs +3 -3
  220. package/_cjs/Sink/definition.cjs.map +1 -1
  221. package/_cjs/State/api.cjs +1 -4
  222. package/_cjs/State/api.cjs.map +1 -1
  223. package/_cjs/State/definition.cjs +2 -6
  224. package/_cjs/State/definition.cjs.map +1 -1
  225. package/_cjs/State/internal.cjs +1 -5
  226. package/_cjs/State/internal.cjs.map +1 -1
  227. package/_cjs/Stream/api/zipAllWith.cjs +7 -11
  228. package/_cjs/Stream/api/zipAllWith.cjs.map +1 -1
  229. package/_cjs/Stream/api/zipWithChunks.cjs +5 -5
  230. package/_cjs/Stream/api/zipWithChunks.cjs.map +1 -1
  231. package/_cjs/Stream/api.cjs +8 -7
  232. package/_cjs/Stream/api.cjs.map +1 -1
  233. package/_cjs/Stream/definition.cjs +3 -4
  234. package/_cjs/Stream/definition.cjs.map +1 -1
  235. package/_cjs/Stream/internal/DebounceState.cjs +5 -5
  236. package/_cjs/Stream/internal/DebounceState.cjs.map +1 -1
  237. package/_cjs/Stream/internal/Handoff.cjs +18 -17
  238. package/_cjs/Stream/internal/Handoff.cjs.map +1 -1
  239. package/_cjs/Stream/internal/SinkEndReason.cjs +5 -12
  240. package/_cjs/Stream/internal/SinkEndReason.cjs.map +1 -1
  241. package/_cjs/Stream/internal/Take.cjs +3 -0
  242. package/_cjs/Stream/internal/Take.cjs.map +1 -1
  243. package/_cjs/Subject/Atomic.cjs +45 -15
  244. package/_cjs/Subject/Atomic.cjs.map +1 -1
  245. package/_cjs/Subject/DeferredRef.cjs +56 -0
  246. package/_cjs/Subject/DeferredRef.cjs.map +1 -0
  247. package/_cjs/Subject/Hold.cjs +38 -0
  248. package/_cjs/Subject/Hold.cjs.map +1 -0
  249. package/_cjs/Subject/RefSubject/Atomic.cjs +171 -0
  250. package/_cjs/Subject/RefSubject/Atomic.cjs.map +1 -0
  251. package/_cjs/Subject/RefSubject/Derived.cjs +103 -0
  252. package/_cjs/Subject/RefSubject/Derived.cjs.map +1 -0
  253. package/_cjs/Subject/RefSubject/RefSubject.cjs +18 -0
  254. package/_cjs/Subject/RefSubject/RefSubject.cjs.map +1 -0
  255. package/_cjs/Subject/RefSubject/constructors.cjs +30 -0
  256. package/_cjs/Subject/RefSubject/constructors.cjs.map +1 -0
  257. package/_cjs/Subject/RefSubject.cjs +2 -0
  258. package/_cjs/Subject/RefSubject.cjs.map +1 -0
  259. package/_cjs/Subject/definition.cjs +11 -1
  260. package/_cjs/Subject/definition.cjs.map +1 -1
  261. package/_cjs/Subject.cjs +33 -0
  262. package/_cjs/Subject.cjs.map +1 -1
  263. package/_cjs/SubscriptionRef.cjs +4 -5
  264. package/_cjs/SubscriptionRef.cjs.map +1 -1
  265. package/_cjs/Supervisor/constructors.cjs +3 -11
  266. package/_cjs/Supervisor/constructors.cjs.map +1 -1
  267. package/_cjs/Supervisor/definition.cjs +10 -4
  268. package/_cjs/Supervisor/definition.cjs.map +1 -1
  269. package/_cjs/SupervisorPatch.cjs +9 -12
  270. package/_cjs/SupervisorPatch.cjs.map +1 -1
  271. package/_cjs/TExit/definition.cjs +19 -18
  272. package/_cjs/TExit/definition.cjs.map +1 -1
  273. package/_cjs/TReentrantLock/definition.cjs +8 -3
  274. package/_cjs/TReentrantLock/definition.cjs.map +1 -1
  275. package/_cjs/TRef/definition.cjs +6 -6
  276. package/_cjs/TRef/definition.cjs.map +1 -1
  277. package/_cjs/internal/BackgroundScheduler.cjs +16 -16
  278. package/_cjs/internal/BackgroundScheduler.cjs.map +1 -1
  279. package/_cjs/internal/HashedPair.cjs +2 -0
  280. package/_cjs/internal/HashedPair.cjs.map +1 -1
  281. package/_cjs/internal/Hub.cjs +39 -15
  282. package/_cjs/internal/Hub.cjs.map +1 -1
  283. package/_cjs/internal/IsFatal.cjs +7 -11
  284. package/_cjs/internal/IsFatal.cjs.map +1 -1
  285. package/_cjs/internal/MutableQueue.cjs +14 -11
  286. package/_cjs/internal/MutableQueue.cjs.map +1 -1
  287. package/_cjs/internal/Scheduler.cjs +4 -8
  288. package/_cjs/internal/Scheduler.cjs.map +1 -1
  289. package/_cjs/internal/StackTraceBuilder.cjs +2 -4
  290. package/_cjs/internal/StackTraceBuilder.cjs.map +1 -1
  291. package/_mjs/Cached/api.mjs +8 -2
  292. package/_mjs/Cached/api.mjs.map +1 -1
  293. package/_mjs/Cached/definition.mjs +1 -5
  294. package/_mjs/Cached/definition.mjs.map +1 -1
  295. package/_mjs/CancellerState.mjs +4 -7
  296. package/_mjs/CancellerState.mjs.map +1 -1
  297. package/_mjs/Channel/UpstreamPullRequest/definition.mjs +4 -2
  298. package/_mjs/Channel/UpstreamPullRequest/definition.mjs.map +1 -1
  299. package/_mjs/Channel/api.mjs +2 -3
  300. package/_mjs/Channel/api.mjs.map +1 -1
  301. package/_mjs/Channel/definition.mjs +21 -15
  302. package/_mjs/Channel/definition.mjs.map +1 -1
  303. package/_mjs/Channel/internal/ChannelExecutor.mjs +35 -11
  304. package/_mjs/Channel/internal/ChannelExecutor.mjs.map +1 -1
  305. package/_mjs/Channel/internal/ChannelState.mjs +15 -8
  306. package/_mjs/Channel/internal/ChannelState.mjs.map +1 -1
  307. package/_mjs/Channel/internal/MergeDecision.mjs +5 -7
  308. package/_mjs/Channel/internal/MergeDecision.mjs.map +1 -1
  309. package/_mjs/Channel/internal/MergeState.mjs +7 -3
  310. package/_mjs/Channel/internal/MergeState.mjs.map +1 -1
  311. package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs +49 -42
  312. package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs.map +1 -1
  313. package/_mjs/Clock/live.mjs +1 -4
  314. package/_mjs/Clock/live.mjs.map +1 -1
  315. package/_mjs/CountdownLatch.mjs +21 -11
  316. package/_mjs/CountdownLatch.mjs.map +1 -1
  317. package/_mjs/Differ/api.mjs +3 -12
  318. package/_mjs/Differ/api.mjs.map +1 -1
  319. package/_mjs/Differ/definition.mjs +1 -5
  320. package/_mjs/Differ/definition.mjs.map +1 -1
  321. package/_mjs/Fiber/FiberMessage.mjs +6 -3
  322. package/_mjs/Fiber/FiberMessage.mjs.map +1 -1
  323. package/_mjs/Fiber/FiberRuntime.mjs +66 -61
  324. package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
  325. package/_mjs/Fiber/definition.mjs +9 -5
  326. package/_mjs/Fiber/definition.mjs.map +1 -1
  327. package/_mjs/FiberDescriptor.mjs +3 -0
  328. package/_mjs/FiberDescriptor.mjs.map +1 -1
  329. package/_mjs/FiberRef/definition.mjs +9 -6
  330. package/_mjs/FiberRef/definition.mjs.map +1 -1
  331. package/_mjs/FiberRefs/Patch.mjs +13 -13
  332. package/_mjs/FiberRefs/Patch.mjs.map +1 -1
  333. package/_mjs/FiberScope/definition.mjs +2 -0
  334. package/_mjs/FiberScope/definition.mjs.map +1 -1
  335. package/_mjs/FiberSet.mjs +4 -3
  336. package/_mjs/FiberSet.mjs.map +1 -1
  337. package/_mjs/FiberStatus/definition.mjs +12 -9
  338. package/_mjs/FiberStatus/definition.mjs.map +1 -1
  339. package/_mjs/Future/State.mjs +8 -7
  340. package/_mjs/Future/State.mjs.map +1 -1
  341. package/_mjs/Future/definition.mjs +3 -3
  342. package/_mjs/Future/definition.mjs.map +1 -1
  343. package/_mjs/Hub/api.mjs +61 -44
  344. package/_mjs/Hub/api.mjs.map +1 -1
  345. package/_mjs/Hub/definition.mjs +3 -7
  346. package/_mjs/Hub/definition.mjs.map +1 -1
  347. package/_mjs/Hub/internal.mjs +130 -110
  348. package/_mjs/Hub/internal.mjs.map +1 -1
  349. package/_mjs/IO/api/foreachExec.mjs +27 -4
  350. package/_mjs/IO/api/foreachExec.mjs.map +1 -1
  351. package/_mjs/IO/api/transplant.mjs +8 -7
  352. package/_mjs/IO/api/transplant.mjs.map +1 -1
  353. package/_mjs/IO/api.mjs +9 -4
  354. package/_mjs/IO/api.mjs.map +1 -1
  355. package/_mjs/IO/definition.mjs +7 -11
  356. package/_mjs/IO/definition.mjs.map +1 -1
  357. package/_mjs/IO/runtime.mjs +64 -61
  358. package/_mjs/IO/runtime.mjs.map +1 -1
  359. package/_mjs/InterruptStatus/definition.mjs +1 -0
  360. package/_mjs/InterruptStatus/definition.mjs.map +1 -1
  361. package/_mjs/Layer/MemoMap.mjs +25 -24
  362. package/_mjs/Layer/MemoMap.mjs.map +1 -1
  363. package/_mjs/Layer/definition.mjs +29 -12
  364. package/_mjs/Layer/definition.mjs.map +1 -1
  365. package/_mjs/LogLevel.mjs +3 -0
  366. package/_mjs/LogLevel.mjs.map +1 -1
  367. package/_mjs/LogSpan.mjs +2 -0
  368. package/_mjs/LogSpan.mjs.map +1 -1
  369. package/_mjs/Logger/definition.mjs +1 -0
  370. package/_mjs/Logger/definition.mjs.map +1 -1
  371. package/_mjs/MVar/definition.mjs +2 -3
  372. package/_mjs/MVar/definition.mjs.map +1 -1
  373. package/_mjs/Push/Bounds.mjs +2 -0
  374. package/_mjs/Push/Bounds.mjs.map +1 -0
  375. package/_mjs/Push/FlattenStrategy.mjs +87 -0
  376. package/_mjs/Push/FlattenStrategy.mjs.map +1 -0
  377. package/_mjs/Push/IndexedBuffer.mjs +65 -0
  378. package/_mjs/Push/IndexedBuffer.mjs.map +1 -0
  379. package/_mjs/Push/MergeStrategy.mjs +36 -0
  380. package/_mjs/Push/MergeStrategy.mjs.map +1 -0
  381. package/_mjs/Push/Operator/IOLoopOperator.mjs +208 -0
  382. package/_mjs/Push/Operator/IOLoopOperator.mjs.map +1 -0
  383. package/_mjs/Push/Operator/IOOperator.mjs +91 -0
  384. package/_mjs/Push/Operator/IOOperator.mjs.map +1 -0
  385. package/_mjs/Push/Operator/LoopOperator.mjs +151 -0
  386. package/_mjs/Push/Operator/LoopOperator.mjs.map +1 -0
  387. package/_mjs/Push/Operator/SyncOperator.mjs +67 -0
  388. package/_mjs/Push/Operator/SyncOperator.mjs.map +1 -0
  389. package/_mjs/Push/Operator.mjs +2 -0
  390. package/_mjs/Push/Operator.mjs.map +1 -0
  391. package/_mjs/Push/Producer/IOProducer.mjs +60 -0
  392. package/_mjs/Push/Producer/IOProducer.mjs.map +1 -0
  393. package/_mjs/Push/Producer/SyncProducer.mjs +94 -0
  394. package/_mjs/Push/Producer/SyncProducer.mjs.map +1 -0
  395. package/_mjs/Push/Producer.mjs +2 -0
  396. package/_mjs/Push/Producer.mjs.map +1 -0
  397. package/_mjs/Push/Sink.mjs +225 -0
  398. package/_mjs/Push/Sink.mjs.map +1 -0
  399. package/_mjs/Push/api.mjs +340 -348
  400. package/_mjs/Push/api.mjs.map +1 -1
  401. package/_mjs/Push/definition.mjs +75 -21
  402. package/_mjs/Push/definition.mjs.map +1 -1
  403. package/_mjs/Push/internal.mjs +30 -26
  404. package/_mjs/Push/internal.mjs.map +1 -1
  405. package/_mjs/Push.mjs +7 -1
  406. package/_mjs/Push.mjs.map +1 -1
  407. package/_mjs/Queue/api/dimapIO.mjs +74 -32
  408. package/_mjs/Queue/api/dimapIO.mjs.map +1 -1
  409. package/_mjs/Queue/api/filterInputIO.mjs +51 -25
  410. package/_mjs/Queue/api/filterInputIO.mjs.map +1 -1
  411. package/_mjs/Queue/api/filterOutputIO.mjs +60 -30
  412. package/_mjs/Queue/api/filterOutputIO.mjs.map +1 -1
  413. package/_mjs/Queue/api/zipWithIO.mjs +27 -10
  414. package/_mjs/Queue/api/zipWithIO.mjs.map +1 -1
  415. package/_mjs/Queue/definition.mjs +3 -7
  416. package/_mjs/Queue/definition.mjs.map +1 -1
  417. package/_mjs/Queue/internal.mjs +73 -62
  418. package/_mjs/Queue/internal.mjs.map +1 -1
  419. package/_mjs/Queue/strategy.mjs +1 -3
  420. package/_mjs/Queue/strategy.mjs.map +1 -1
  421. package/_mjs/Random/live.mjs +4 -3
  422. package/_mjs/Random/live.mjs.map +1 -1
  423. package/_mjs/Ref/Atomic.mjs +2 -3
  424. package/_mjs/Ref/Atomic.mjs.map +1 -1
  425. package/_mjs/Ref/Derived.mjs +2 -3
  426. package/_mjs/Ref/Derived.mjs.map +1 -1
  427. package/_mjs/Ref/DerivedAll.mjs +2 -3
  428. package/_mjs/Ref/DerivedAll.mjs.map +1 -1
  429. package/_mjs/Ref/Synchronized/definition.mjs +16 -15
  430. package/_mjs/Ref/Synchronized/definition.mjs.map +1 -1
  431. package/_mjs/Ref/definition.mjs +1 -5
  432. package/_mjs/Ref/definition.mjs.map +1 -1
  433. package/_mjs/Reloadable/definition.mjs +2 -0
  434. package/_mjs/Reloadable/definition.mjs.map +1 -1
  435. package/_mjs/STM/definition.mjs +29 -24
  436. package/_mjs/STM/definition.mjs.map +1 -1
  437. package/_mjs/STM/driver.mjs +5 -0
  438. package/_mjs/STM/driver.mjs.map +1 -1
  439. package/_mjs/STM/internal/Entry.mjs +8 -5
  440. package/_mjs/STM/internal/Entry.mjs.map +1 -1
  441. package/_mjs/STM/internal/TryCommit.mjs +6 -7
  442. package/_mjs/STM/internal/TryCommit.mjs.map +1 -1
  443. package/_mjs/STM/internal/Versioned.mjs +2 -3
  444. package/_mjs/STM/internal/Versioned.mjs.map +1 -1
  445. package/_mjs/Schedule/Decision.mjs +3 -4
  446. package/_mjs/Schedule/Decision.mjs.map +1 -1
  447. package/_mjs/Schedule/Driver.mjs +4 -0
  448. package/_mjs/Schedule/Driver.mjs.map +1 -1
  449. package/_mjs/Schedule/api.mjs +2 -5
  450. package/_mjs/Schedule/api.mjs.map +1 -1
  451. package/_mjs/Schedule/definition.mjs +3 -1
  452. package/_mjs/Schedule/definition.mjs.map +1 -1
  453. package/_mjs/Scope/ReleaseMap/definition.mjs +8 -2
  454. package/_mjs/Scope/ReleaseMap/definition.mjs.map +1 -1
  455. package/_mjs/Scope/api.mjs +23 -8
  456. package/_mjs/Scope/api.mjs.map +1 -1
  457. package/_mjs/Scope/definition.mjs +2 -6
  458. package/_mjs/Scope/definition.mjs.map +1 -1
  459. package/_mjs/ScopedRef/api.mjs +8 -3
  460. package/_mjs/ScopedRef/api.mjs.map +1 -1
  461. package/_mjs/ScopedRef/definition.mjs +1 -5
  462. package/_mjs/ScopedRef/definition.mjs.map +1 -1
  463. package/_mjs/Semaphore/Reservation.mjs +2 -0
  464. package/_mjs/Semaphore/Reservation.mjs.map +1 -1
  465. package/_mjs/Semaphore/definition.mjs +42 -38
  466. package/_mjs/Semaphore/definition.mjs.map +1 -1
  467. package/_mjs/Sink/definition.mjs +3 -3
  468. package/_mjs/Sink/definition.mjs.map +1 -1
  469. package/_mjs/State/api.mjs +1 -4
  470. package/_mjs/State/api.mjs.map +1 -1
  471. package/_mjs/State/definition.mjs +1 -5
  472. package/_mjs/State/definition.mjs.map +1 -1
  473. package/_mjs/State/internal.mjs +1 -5
  474. package/_mjs/State/internal.mjs.map +1 -1
  475. package/_mjs/Stream/api/zipAllWith.mjs +7 -11
  476. package/_mjs/Stream/api/zipAllWith.mjs.map +1 -1
  477. package/_mjs/Stream/api/zipWithChunks.mjs +5 -5
  478. package/_mjs/Stream/api/zipWithChunks.mjs.map +1 -1
  479. package/_mjs/Stream/api.mjs +8 -7
  480. package/_mjs/Stream/api.mjs.map +1 -1
  481. package/_mjs/Stream/definition.mjs +2 -3
  482. package/_mjs/Stream/definition.mjs.map +1 -1
  483. package/_mjs/Stream/internal/DebounceState.mjs +5 -5
  484. package/_mjs/Stream/internal/DebounceState.mjs.map +1 -1
  485. package/_mjs/Stream/internal/Handoff.mjs +17 -16
  486. package/_mjs/Stream/internal/Handoff.mjs.map +1 -1
  487. package/_mjs/Stream/internal/SinkEndReason.mjs +4 -11
  488. package/_mjs/Stream/internal/SinkEndReason.mjs.map +1 -1
  489. package/_mjs/Stream/internal/Take.mjs +3 -0
  490. package/_mjs/Stream/internal/Take.mjs.map +1 -1
  491. package/_mjs/Subject/Atomic.mjs +46 -15
  492. package/_mjs/Subject/Atomic.mjs.map +1 -1
  493. package/_mjs/Subject/DeferredRef.mjs +48 -0
  494. package/_mjs/Subject/DeferredRef.mjs.map +1 -0
  495. package/_mjs/Subject/Hold.mjs +30 -0
  496. package/_mjs/Subject/Hold.mjs.map +1 -0
  497. package/_mjs/Subject/RefSubject/Atomic.mjs +163 -0
  498. package/_mjs/Subject/RefSubject/Atomic.mjs.map +1 -0
  499. package/_mjs/Subject/RefSubject/Derived.mjs +95 -0
  500. package/_mjs/Subject/RefSubject/Derived.mjs.map +1 -0
  501. package/_mjs/Subject/RefSubject/RefSubject.mjs +11 -0
  502. package/_mjs/Subject/RefSubject/RefSubject.mjs.map +1 -0
  503. package/_mjs/Subject/RefSubject/constructors.mjs +23 -0
  504. package/_mjs/Subject/RefSubject/constructors.mjs.map +1 -0
  505. package/_mjs/Subject/RefSubject.mjs +2 -0
  506. package/_mjs/Subject/RefSubject.mjs.map +1 -0
  507. package/_mjs/Subject/definition.mjs +9 -0
  508. package/_mjs/Subject/definition.mjs.map +1 -1
  509. package/_mjs/Subject.mjs +3 -0
  510. package/_mjs/Subject.mjs.map +1 -1
  511. package/_mjs/SubscriptionRef.mjs +4 -5
  512. package/_mjs/SubscriptionRef.mjs.map +1 -1
  513. package/_mjs/Supervisor/constructors.mjs +3 -11
  514. package/_mjs/Supervisor/constructors.mjs.map +1 -1
  515. package/_mjs/Supervisor/definition.mjs +10 -4
  516. package/_mjs/Supervisor/definition.mjs.map +1 -1
  517. package/_mjs/SupervisorPatch.mjs +9 -12
  518. package/_mjs/SupervisorPatch.mjs.map +1 -1
  519. package/_mjs/TExit/definition.mjs +19 -18
  520. package/_mjs/TExit/definition.mjs.map +1 -1
  521. package/_mjs/TReentrantLock/definition.mjs +8 -3
  522. package/_mjs/TReentrantLock/definition.mjs.map +1 -1
  523. package/_mjs/TRef/definition.mjs +6 -6
  524. package/_mjs/TRef/definition.mjs.map +1 -1
  525. package/_mjs/internal/BackgroundScheduler.mjs +16 -16
  526. package/_mjs/internal/BackgroundScheduler.mjs.map +1 -1
  527. package/_mjs/internal/HashedPair.mjs +2 -0
  528. package/_mjs/internal/HashedPair.mjs.map +1 -1
  529. package/_mjs/internal/Hub.mjs +39 -15
  530. package/_mjs/internal/Hub.mjs.map +1 -1
  531. package/_mjs/internal/IsFatal.mjs +7 -11
  532. package/_mjs/internal/IsFatal.mjs.map +1 -1
  533. package/_mjs/internal/MutableQueue.mjs +14 -11
  534. package/_mjs/internal/MutableQueue.mjs.map +1 -1
  535. package/_mjs/internal/Scheduler.mjs +4 -8
  536. package/_mjs/internal/Scheduler.mjs.map +1 -1
  537. package/_mjs/internal/StackTraceBuilder.mjs +2 -4
  538. package/_mjs/internal/StackTraceBuilder.mjs.map +1 -1
  539. package/_src/Cached/api.ts +8 -2
  540. package/_src/Channel/internal/SingleProducerAsyncInput.ts +6 -4
  541. package/_src/CountdownLatch.ts +24 -13
  542. package/_src/Fiber/FiberRuntime.ts +4 -2
  543. package/_src/FiberRef/definition.ts +1 -1
  544. package/_src/Hub/api.ts +85 -54
  545. package/_src/Hub/internal.ts +36 -20
  546. package/_src/IO/api/foreachExec.ts +47 -0
  547. package/_src/IO/api.ts +0 -5
  548. package/_src/Push/Bounds.ts +4 -0
  549. package/_src/Push/FlattenStrategy.ts +137 -0
  550. package/_src/Push/IndexedBuffer.ts +79 -0
  551. package/_src/Push/MergeStrategy.ts +59 -0
  552. package/_src/Push/Operator/IOLoopOperator.ts +413 -0
  553. package/_src/Push/Operator/IOOperator.ts +173 -0
  554. package/_src/Push/Operator/LoopOperator.ts +242 -0
  555. package/_src/Push/Operator/SyncOperator.ts +107 -0
  556. package/_src/Push/Operator.ts +7 -0
  557. package/_src/Push/Producer/IOProducer.ts +83 -0
  558. package/_src/Push/Producer/SyncProducer.ts +105 -0
  559. package/_src/Push/Producer.ts +0 -0
  560. package/_src/Push/Sink.ts +302 -0
  561. package/_src/Push/api.ts +389 -515
  562. package/_src/Push/definition.ts +216 -23
  563. package/_src/Push/internal.ts +11 -0
  564. package/_src/Push.ts +7 -1
  565. package/_src/Queue/api/dimapIO.ts +57 -19
  566. package/_src/Queue/api/filterInputIO.ts +36 -12
  567. package/_src/Queue/api/filterOutputIO.ts +42 -18
  568. package/_src/Queue/api/zipWithIO.ts +23 -11
  569. package/_src/Queue/internal.ts +9 -3
  570. package/_src/Ref/Synchronized/definition.ts +81 -37
  571. package/_src/Ref/definition.ts +26 -0
  572. package/_src/Schedule/api.ts +1 -1
  573. package/_src/Scope/api.ts +22 -0
  574. package/_src/ScopedRef/api.ts +6 -2
  575. package/_src/Semaphore/definition.ts +4 -2
  576. package/_src/Sink/definition.ts +4 -5
  577. package/_src/Stream/api.ts +0 -2
  578. package/_src/Stream/definition.ts +0 -1
  579. package/_src/Subject/Atomic.ts +68 -11
  580. package/_src/Subject/DeferredRef.ts +44 -0
  581. package/_src/Subject/Hold.ts +48 -0
  582. package/_src/Subject/RefSubject/Atomic.ts +233 -0
  583. package/_src/Subject/RefSubject/Derived.ts +184 -0
  584. package/_src/Subject/RefSubject/RefSubject.ts +100 -0
  585. package/_src/Subject/RefSubject/constructors.ts +27 -0
  586. package/_src/Subject/RefSubject.ts +7 -0
  587. package/_src/Subject/definition.ts +21 -3
  588. package/_src/Subject.ts +6 -3
  589. package/_src/SubscriptionRef.ts +1 -1
  590. package/_src/Supervisor/constructors.ts +0 -2
  591. package/_src/Supervisor/definition.ts +2 -1
  592. package/_src/TReentrantLock/api.ts +1 -1
  593. package/_src/global.ts +8 -0
  594. package/_src/index.ts +49 -50
  595. package/_src/internal/MutableQueue.ts +5 -3
  596. package/global.d.ts +8 -0
  597. package/index.d.ts +0 -1
  598. package/internal/MutableQueue.d.ts +2 -2
  599. package/package.json +4 -4
  600. package/RefSubject/Atomic.d.ts +0 -34
  601. package/RefSubject/Synchronized/api.d.ts +0 -9
  602. package/RefSubject/Synchronized/definition.d.ts +0 -39
  603. package/RefSubject/api.d.ts +0 -120
  604. package/RefSubject/definition.d.ts +0 -52
  605. package/RefSubject.d.ts +0 -3
  606. package/_cjs/RefSubject/Atomic.cjs +0 -107
  607. package/_cjs/RefSubject/Atomic.cjs.map +0 -1
  608. package/_cjs/RefSubject/Synchronized/api.cjs +0 -22
  609. package/_cjs/RefSubject/Synchronized/api.cjs.map +0 -1
  610. package/_cjs/RefSubject/Synchronized/definition.cjs +0 -55
  611. package/_cjs/RefSubject/Synchronized/definition.cjs.map +0 -1
  612. package/_cjs/RefSubject/api.cjs +0 -251
  613. package/_cjs/RefSubject/api.cjs.map +0 -1
  614. package/_cjs/RefSubject/definition.cjs +0 -26
  615. package/_cjs/RefSubject/definition.cjs.map +0 -1
  616. package/_cjs/RefSubject.cjs +0 -39
  617. package/_cjs/RefSubject.cjs.map +0 -1
  618. package/_mjs/RefSubject/Atomic.mjs +0 -99
  619. package/_mjs/RefSubject/Atomic.mjs.map +0 -1
  620. package/_mjs/RefSubject/Synchronized/api.mjs +0 -15
  621. package/_mjs/RefSubject/Synchronized/api.mjs.map +0 -1
  622. package/_mjs/RefSubject/Synchronized/definition.mjs +0 -47
  623. package/_mjs/RefSubject/Synchronized/definition.mjs.map +0 -1
  624. package/_mjs/RefSubject/api.mjs +0 -229
  625. package/_mjs/RefSubject/api.mjs.map +0 -1
  626. package/_mjs/RefSubject/definition.mjs +0 -19
  627. package/_mjs/RefSubject/definition.mjs.map +0 -1
  628. package/_mjs/RefSubject.mjs +0 -5
  629. package/_mjs/RefSubject.mjs.map +0 -1
  630. package/_src/RefSubject/Atomic.ts +0 -129
  631. package/_src/RefSubject/Synchronized/api.ts +0 -14
  632. package/_src/RefSubject/Synchronized/definition.ts +0 -76
  633. package/_src/RefSubject/api.ts +0 -253
  634. package/_src/RefSubject/definition.ts +0 -70
  635. package/_src/RefSubject.ts +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"StackTraceBuilder.mjs","names":["StackTraceBuilder","constructor","last","undefined","builder","tsplus_module_1","append","trace","tsplus_module_2","NoLocation","result"],"sources":["../../_src/internal/StackTraceBuilder.ts"],"sourcesContent":[null],"mappings":";;AAAA,OAAM,MAAOA,iBAAiB;EAA9BC,YAAA;IACU,KAAAC,IAAI,GAAiCC,SAAS;IAC9C,KAAAC,OAAO,GAA8BC,eAAA,CAAAD,OAAA,EAAc;EAY7D;EAVEE,MAAMA,CAACC,KAA+B;IACpC,IAAIA,KAAK,IAAI,IAAI,IAAIA,KAAK,KAAK,IAAI,CAACL,IAAI,IAAIK,KAAK,KAAAC,eAAA,CAAAC,UAA4B,EAAE;MAC7E,IAAI,CAACL,OAAO,CAACE,MAAM,CAACC,KAAK,CAAC;MAC1B,IAAI,CAACL,IAAI,GAAGK,KAAK;IACnB;EACF;EAEAG,MAAMA,CAAA;IACJ,OAAO,IAAI,CAACN,OAAO,CAACM,MAAM,EAAE;EAC9B","ignoreList":[]}
1
+ {"version":3,"file":"StackTraceBuilder.mjs","names":["StackTraceBuilder","last","undefined","builder","tsplus_module_1","append","trace","tsplus_module_2","NoLocation","result"],"sources":["../../_src/internal/StackTraceBuilder.ts"],"sourcesContent":[null],"mappings":";;AAAA,OAAM,MAAOA,iBAAiB;EACpBC,IAAI,GAAiCC,SAAS;EAC9CC,OAAO,gBAA8BC,eAAA,CAAAD,OAAA,EAAc;EAE3DE,MAAMA,CAACC,KAA+B;IACpC,IAAIA,KAAK,IAAI,IAAI,IAAIA,KAAK,KAAK,IAAI,CAACL,IAAI,IAAIK,KAAK,KAAAC,eAAA,CAAAC,UAA4B,EAAE;MAC7E,IAAI,CAACL,OAAO,CAACE,MAAM,CAACC,KAAK,CAAC;MAC1B,IAAI,CAACL,IAAI,GAAGK,KAAK;IACnB;EACF;EAEAG,MAAMA,CAAA;IACJ,OAAO,IAAI,CAACN,OAAO,CAACM,MAAM,EAAE;EAC9B","ignoreList":[]}
@@ -45,8 +45,14 @@ class Manual<Error, Resource> extends CachedInternal<Error, Resource> {
45
45
  ) {
46
46
  super();
47
47
  }
48
- get: FIO<Error, Resource> = this.ref.get.flatMap(IO.fromExitNow);
49
- refresh: FIO<Error, void> = this.ref.set(this.acquire.map(Exit.succeed));
48
+
49
+ get get(): FIO<Error, Resource> {
50
+ return this.ref.get.flatMap(IO.fromExitNow);
51
+ }
52
+
53
+ get refresh(): FIO<Error, void> {
54
+ return this.ref.set(this.acquire.map(Exit.succeed));
55
+ }
50
56
  }
51
57
 
52
58
  /**
@@ -56,6 +56,10 @@ export class SingleProducerAsyncInput<Err, Elem, Done>
56
56
  {
57
57
  constructor(readonly ref: Ref<State<Err, Elem, Done>>) {}
58
58
 
59
+ get awaitRead(): UIO<void> {
60
+ return this.ref.modify((s) => (s._stateTag === StateTag.Empty ? [s.notifyProducer.await, s] : [IO.unit, s]));
61
+ }
62
+
59
63
  emit(el: Elem): UIO<unknown> {
60
64
  return Future.make<never, void>().flatMap(
61
65
  (p) =>
@@ -167,10 +171,8 @@ export class SingleProducerAsyncInput<Err, Elem, Done>
167
171
  (el) => Exit.succeed(el),
168
172
  (d) => Exit.fail(Either.right(d)),
169
173
  );
170
- close = IO.fiberId.flatMap((id) => this.error(Cause.interrupt(id)));
171
- awaitRead: UIO<void> = this.ref.modify((s) =>
172
- s._stateTag === StateTag.Empty ? [s.notifyProducer.await, s] : [IO.unit, s],
173
- );
174
+
175
+ close = IO.fiberId.flatMap((id) => this.error(Cause.interrupt(id)));
174
176
  }
175
177
 
176
178
  /**
@@ -7,28 +7,39 @@ export type CountdownLatchTypeId = typeof CountdownLatchTypeId;
7
7
  */
8
8
  export class CountdownLatch {
9
9
  readonly [CountdownLatchTypeId]: CountdownLatchTypeId = CountdownLatchTypeId;
10
+
10
11
  constructor(
11
12
  private _count: Ref<number>,
12
13
  private _waiters: Future<never, void>,
13
14
  ) {}
14
15
 
15
- readonly await: UIO<void> = this._waiters.await;
16
+ get await(): UIO<void> {
17
+ return this._waiters.await;
18
+ }
16
19
 
17
- readonly countDown: UIO<void> = this._count.modify((n) => {
18
- if (n === 0) {
19
- return [IO.unit, 0];
20
- } else if (n === 1) {
21
- return [this._waiters.succeed(undefined), 0];
22
- } else {
23
- return [IO.unit, n - 1];
24
- }
25
- }).flatten.asUnit;
20
+ get countDown(): UIO<void> {
21
+ return this._count.modify((n) => {
22
+ if (n === 0) {
23
+ return [IO.unit, 0];
24
+ } else if (n === 1) {
25
+ return [this._waiters.succeed(undefined), 0];
26
+ } else {
27
+ return [IO.unit, n - 1];
28
+ }
29
+ }).flatten.asUnit;
30
+ }
26
31
 
27
- readonly count: UIO<number> = this._count.get;
32
+ get count(): UIO<number> {
33
+ return this._count.get;
34
+ }
28
35
 
29
- readonly increment: UIO<void> = this._count.update((n) => n + 1);
36
+ get increment(): UIO<void> {
37
+ return this._count.update((n) => n + 1);
38
+ }
30
39
 
31
- readonly isOpen: UIO<boolean> = this._count.get.map((count) => count === 0);
40
+ get isOpen(): UIO<boolean> {
41
+ return this._count.get.map((count) => count === 0);
42
+ }
32
43
  }
33
44
 
34
45
  /**
@@ -42,8 +42,6 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
42
42
  readonly _A: (_: never) => A;
43
43
  };
44
44
 
45
- location = this.fiberId.location;
46
-
47
45
  get await(): UIO<Exit<E, A>> {
48
46
  return IO.defer(this.awaitUnsafe());
49
47
  }
@@ -82,6 +80,10 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
82
80
  });
83
81
  }
84
82
 
83
+ get location(): string | undefined {
84
+ return this.fiberId.location;
85
+ }
86
+
85
87
  get poll(): UIO<Maybe<Exit<E, A>>> {
86
88
  return IO.succeed(Maybe.fromNullable(this.exitValue()));
87
89
  }
@@ -33,7 +33,7 @@ const fiberRefCounter = globalValue(FiberRefCounterId, () => new AtomicNumber(0)
33
33
  * @tsplus type fncts.io.FiberRef
34
34
  */
35
35
  export class FiberRefInternal<Value, Patch> extends FiberRef<Value> implements Hashable, Equatable {
36
- readonly _Patch!: Patch;
36
+ declare readonly _Patch: Patch;
37
37
  private readonly id = fiberRefCounter.getAndIncrement();
38
38
  constructor(
39
39
  readonly _initial: Value,
package/_src/Hub/api.ts CHANGED
@@ -63,6 +63,18 @@ export function dimap<A, B, C, D>(f: (c: C) => A, g: (b: B) => D, __tsplusTrace?
63
63
  };
64
64
  }
65
65
 
66
+ /**
67
+ * Transforms messages taken from the hub using the specified effectual
68
+ * function.
69
+ *
70
+ * @tsplus pipeable fncts.io.Hub mapIO
71
+ */
72
+ export function mapIO<B, RC, EC, C>(f: (b: B) => IO<RC, EC, C>, __tsplusTrace?: string) {
73
+ return <RA, RB, EA, EB, A>(self: PHub<RA, RB, EA, EB, A, B>): PHub<RA, RC | RB, EA, EB | EC, A, C> => {
74
+ return self.dimapIO(IO.succeedNow, f);
75
+ };
76
+ }
77
+
66
78
  class DimapIO<RA, RB, RC, RD, EA, EB, EC, ED, A, B, C, D> extends PHubInternal<
67
79
  RC | RA,
68
80
  RD | RB,
@@ -71,24 +83,31 @@ class DimapIO<RA, RB, RC, RD, EA, EB, EC, ED, A, B, C, D> extends PHubInternal<
71
83
  C,
72
84
  D
73
85
  > {
86
+ declare readonly awaitShutdown;
87
+ declare readonly capacity;
88
+ declare readonly isShutdown;
89
+ declare readonly shutdown;
90
+ declare readonly size;
91
+
74
92
  constructor(
75
93
  readonly source: PHubInternal<RA, RB, EA, EB, A, B>,
76
94
  readonly f: (c: C) => IO<RC, EC, A>,
77
95
  readonly g: (b: B) => IO<RD, ED, D>,
78
96
  ) {
79
97
  super();
98
+ this.awaitShutdown = this.source.awaitShutdown;
99
+ this.capacity = this.source.capacity;
100
+ this.isShutdown = this.source.isShutdown;
101
+ this.shutdown = this.source.shutdown;
102
+ this.size = this.source.size;
80
103
  }
81
- awaitShutdown = this.source.awaitShutdown;
82
- capacity = this.source.capacity;
83
- isShutdown = this.source.isShutdown;
84
- shutdown = this.source.shutdown;
85
- size = this.source.size;
104
+
86
105
  get unsafeSize() {
87
106
  return this.source.unsafeSize;
88
107
  }
89
- subscribe: IO<Scope, never, PDequeue<RA | RC, RB | RD, EA | EC, EB | ED, C, D>> = unsafeCoerce(
90
- this.source.subscribe.map((queue) => queue.mapIO(this.g)),
91
- );
108
+ get subscribe(): IO<Scope, never, PDequeue<RA | RC, RB | RD, EA | EC, EB | ED, C, D>> {
109
+ return unsafeCoerce(this.source.subscribe.map((queue) => queue.mapIO(this.g)));
110
+ }
92
111
  publish = (c: C) => this.f(c).flatMap((a) => this.source.publish(a));
93
112
  publishAll = (cs: Iterable<C>) => IO.foreach(cs, this.f).flatMap((as) => this.source.publishAll(as));
94
113
  }
@@ -122,21 +141,29 @@ export function filterInput<A>(f: (a: A) => boolean, __tsplusTrace?: string) {
122
141
  }
123
142
 
124
143
  class FilterInputIO<RA, RA1, RB, EA, EA1, EB, A, B> extends PHubInternal<RA | RA1, RB, EA | EA1, EB, A, B> {
144
+ declare readonly awaitShutdown;
145
+ declare readonly capacity;
146
+ declare readonly isShutdown;
147
+ declare readonly shutdown;
148
+ declare readonly size;
149
+
125
150
  constructor(
126
151
  readonly source: PHubInternal<RA, RB, EA, EB, A, B>,
127
152
  readonly f: (a: A) => IO<RA1, EA1, boolean>,
128
153
  ) {
129
154
  super();
155
+ this.awaitShutdown = this.source.awaitShutdown;
156
+ this.capacity = this.source.capacity;
157
+ this.isShutdown = this.source.isShutdown;
158
+ this.shutdown = this.source.shutdown;
159
+ this.size = this.source.size;
130
160
  }
131
- awaitShutdown = this.source.awaitShutdown;
132
- capacity = this.source.capacity;
133
- isShutdown = this.source.isShutdown;
134
- shutdown = this.source.shutdown;
135
- size = this.source.size;
136
161
  get unsafeSize() {
137
162
  return this.source.unsafeSize;
138
163
  }
139
- subscribe = this.source.subscribe;
164
+ get subscribe() {
165
+ return this.source.subscribe;
166
+ }
140
167
  publish = (a: A) => this.f(a).flatMap((b) => (b ? this.source.publish(a) : IO.succeedNow(false)));
141
168
  publishAll = (as: Iterable<A>) =>
142
169
  IO.filter(as, this.f).flatMap((as) => (as.isNonEmpty ? this.source.publishAll(as) : IO.succeedNow(false)));
@@ -166,39 +193,46 @@ export function filterOutput<B>(f: (b: B) => boolean, __tsplusTrace?: string) {
166
193
  };
167
194
  }
168
195
 
196
+ /**
197
+ * Filters messages taken from the hub using the specified effectual
198
+ * function.
199
+ *
200
+ * @tsplus pipeable fncts.io.Hub filterOutputIO
201
+ */
202
+ export function filterOutputIO<B, R1, E1>(f: (a: B) => IO<R1, E1, boolean>, __tsplusTrace?: string) {
203
+ return <RA, RB, EA, EB, A>(source: PHub<RA, RB, EA, EB, A, B>): PHub<RA, RB | R1, EA, EB | E1, A, B> => {
204
+ concrete(source);
205
+ return new FilterOutputIO(source, f);
206
+ };
207
+ }
208
+
169
209
  class FilterOutputIO<RA, RB, RB1, EA, EB, EB1, A, B> extends PHubInternal<RA, RB | RB1, EA, EB | EB1, A, B> {
210
+ declare readonly awaitShutdown;
211
+ declare readonly capacity;
212
+ declare readonly isShutdown;
213
+ declare readonly shutdown;
214
+ declare readonly size;
170
215
  constructor(
171
216
  readonly source: PHubInternal<RA, RB, EA, EB, A, B>,
172
217
  readonly f: (a: B) => IO<RB1, EB1, boolean>,
173
218
  ) {
174
219
  super();
220
+ this.awaitShutdown = this.source.awaitShutdown;
221
+ this.capacity = this.source.capacity;
222
+ this.isShutdown = this.source.isShutdown;
223
+ this.shutdown = this.source.shutdown;
224
+ this.size = this.source.size;
175
225
  }
176
- awaitShutdown = this.source.awaitShutdown;
177
- capacity = this.source.capacity;
178
- isShutdown = this.source.isShutdown;
179
- shutdown = this.source.shutdown;
180
- size = this.source.size;
181
226
  get unsafeSize() {
182
227
  return this.source.unsafeSize;
183
228
  }
184
- subscribe = this.source.subscribe.map((queue) => queue.filterOutputIO(this.f));
229
+ get subscribe() {
230
+ return this.source.subscribe.map((queue) => queue.filterOutputIO(this.f));
231
+ }
185
232
  publish = (a: A) => this.source.publish(a);
186
233
  publishAll = (as: Iterable<A>) => this.source.publishAll(as);
187
234
  }
188
235
 
189
- /**
190
- * Filters messages taken from the hub using the specified effectual
191
- * function.
192
- *
193
- * @tsplus pipeable fncts.io.Hub filterOutputIO
194
- */
195
- export function filterOutputIO<B, R1, E1>(f: (a: B) => IO<R1, E1, boolean>, __tsplusTrace?: string) {
196
- return <RA, RB, EA, EB, A>(source: PHub<RA, RB, EA, EB, A, B>): PHub<RA, RB | R1, EA, EB | E1, A, B> => {
197
- concrete(source);
198
- return new FilterOutputIO(source, f);
199
- };
200
- }
201
-
202
236
  /**
203
237
  * Checks whether the hub is shut down.
204
238
  *
@@ -275,18 +309,6 @@ export function map<B, C>(f: (b: B) => C, __tsplusTrace?: string) {
275
309
  };
276
310
  }
277
311
 
278
- /**
279
- * Transforms messages taken from the hub using the specified effectual
280
- * function.
281
- *
282
- * @tsplus pipeable fncts.io.Hub mapIO
283
- */
284
- export function mapIO<B, RC, EC, C>(f: (b: B) => IO<RC, EC, C>, __tsplusTrace?: string) {
285
- return <RA, RB, EA, EB, A>(self: PHub<RA, RB, EA, EB, A, B>): PHub<RA, RC | RB, EA, EB | EC, A, C> => {
286
- return self.dimapIO(IO.succeedNow, f);
287
- };
288
- }
289
-
290
312
  /**
291
313
  * Publishes a message to the hub, returning whether the message was
292
314
  * published to the hub.
@@ -359,15 +381,24 @@ class ToQueue<RA, RB, EA, EB, A, B> implements PEnqueue<RA, RB, EA, EB, A, B> {
359
381
  readonly _A: (_: A) => void;
360
382
  readonly _B: (_: never) => B;
361
383
  };
362
- constructor(readonly source: PHubInternal<RA, RB, EA, EB, A, B>) {}
363
- awaitShutdown = this.source.awaitShutdown;
364
- capacity = this.source.capacity;
365
- isShutdown = this.source.isShutdown;
366
- shutdown = this.source.shutdown;
367
- size = this.source.size;
368
- offer = (a: A): IO<RA, EA, boolean> => this.source.publish(a);
369
- offerAll = (as: Iterable<A>): IO<RA, EA, boolean> => this.source.publishAll(as);
370
- takeUpTo = (): IO<never, never, Conc<never>> => IO.succeedNow(Conc.empty());
384
+
385
+ readonly awaitShutdown;
386
+ readonly capacity;
387
+ readonly isShutdown;
388
+ readonly shutdown;
389
+ readonly size;
390
+
391
+ constructor(readonly source: PHubInternal<RA, RB, EA, EB, A, B>) {
392
+ this.awaitShutdown = this.source.awaitShutdown;
393
+ this.capacity = this.source.capacity;
394
+ this.isShutdown = this.source.isShutdown;
395
+ this.shutdown = this.source.shutdown;
396
+ this.size = this.source.size;
397
+ }
398
+
399
+ offer = (a: A): IO<RA, EA, boolean> => this.source.publish(a);
400
+ offerAll = (as: Iterable<A>): IO<RA, EA, boolean> => this.source.publishAll(as);
401
+ takeUpTo = (): IO<never, never, Conc<never>> => IO.succeedNow(Conc.empty());
371
402
  }
372
403
 
373
404
  /**
@@ -267,20 +267,28 @@ class UnsafeSubscription<A> extends QueueInternal<never, never, never, never, A,
267
267
  super();
268
268
  }
269
269
 
270
- awaitShutdown: UIO<void> = this.shutdownHook.await;
270
+ get awaitShutdown(): UIO<void> {
271
+ return this.shutdownHook.await;
272
+ }
271
273
 
272
- capacity: number = this.hub.capacity;
274
+ get capacity(): number {
275
+ return this.hub.capacity;
276
+ }
273
277
 
274
- isShutdown: UIO<boolean> = IO.succeed(() => this.shutdownFlag.get);
278
+ get isShutdown(): UIO<boolean> {
279
+ return IO.succeed(() => this.shutdownFlag.get);
280
+ }
275
281
 
276
- shutdown: UIO<void> = IO.fiberId.flatMap((fiberId) =>
277
- IO.defer(() => {
278
- this.shutdownFlag.set(true);
279
- return IO.foreachConcurrent(this.pollers.unsafeDequeueAll, (fiber) => fiber.interruptAs(fiberId))
280
- .zipRight(IO.succeed(this.subscription.unsubscribe()))
281
- .whenIO(this.shutdownHook.succeed(undefined));
282
- }),
283
- );
282
+ get shutdown(): UIO<void> {
283
+ return IO.fiberId.flatMap((fiberId) =>
284
+ IO.defer(() => {
285
+ this.shutdownFlag.set(true);
286
+ return IO.foreachConcurrent(this.pollers.unsafeDequeueAll, (fiber) => fiber.interruptAs(fiberId))
287
+ .zipRight(IO.succeed(this.subscription.unsubscribe()))
288
+ .whenIO(this.shutdownHook.succeed(undefined));
289
+ }),
290
+ );
291
+ }
284
292
 
285
293
  get unsafeSize(): Maybe<number> {
286
294
  if (this.shutdownFlag.get) {
@@ -418,11 +426,17 @@ class UnsafeHub<A> extends PHubInternal<never, never, never, never, A, A> {
418
426
  super();
419
427
  }
420
428
 
421
- awaitShutdown = this.shutdownHook.await;
429
+ get awaitShutdown() {
430
+ return this.shutdownHook.await;
431
+ }
422
432
 
423
- capacity = this.hub.capacity;
433
+ get capacity() {
434
+ return this.hub.capacity;
435
+ }
424
436
 
425
- isShutdown = IO.succeed(this.shutdownFlag.get);
437
+ get isShutdown() {
438
+ return IO.succeed(this.shutdownFlag.get);
439
+ }
426
440
 
427
441
  shutdown = IO.fiberId.flatMap((fiberId) =>
428
442
  IO.defer(() => {
@@ -449,12 +463,14 @@ class UnsafeHub<A> extends PHubInternal<never, never, never, never, A, A> {
449
463
  return IO.succeed(this.hub.size());
450
464
  });
451
465
 
452
- subscribe: IO<Scope, never, Queue.Dequeue<A>> = IO.acquireRelease(
453
- makeSubscription(this.hub, this.subscribers, this.strategy).tap((dequeue) =>
454
- this.scope.addFinalizer(dequeue.shutdown),
455
- ),
456
- (dequeue) => dequeue.shutdown,
457
- );
466
+ get subscribe(): IO<Scope, never, Queue.Dequeue<A>> {
467
+ return IO.acquireRelease(
468
+ makeSubscription(this.hub, this.subscribers, this.strategy).tap((dequeue) =>
469
+ this.scope.addFinalizer(dequeue.shutdown),
470
+ ),
471
+ (dequeue) => dequeue.shutdown,
472
+ );
473
+ }
458
474
 
459
475
  publish = (a: A): IO<never, never, boolean> =>
460
476
  IO.defer(() => {
@@ -1,3 +1,28 @@
1
+ /**
2
+ * Applies the function `f` to each element of the `Iterable<A>` in parallel,
3
+ * and returns the results in a new `Conc<B>`.
4
+ *
5
+ * For a sequential version of this method, see `foreach`.
6
+ *
7
+ * @tsplus static fncts.io.IOOps foreachWithIndexDiscardExec
8
+ */
9
+ export function foreachWithIndexDiscardExec<R, E, A, B>(
10
+ as: Iterable<A>,
11
+ es: ExecutionStrategy,
12
+ f: (index: number, a: A) => IO<R, E, B>,
13
+ __tsplusTrace?: string,
14
+ ): IO<R, E, void> {
15
+ return es.match(
16
+ () => IO.foreachWithIndexDiscard(as, f),
17
+ () =>
18
+ IO.withConcurrencyUnboundedMask((restore) => IO.foreachConcurrent(as.zipWithIndex, ([i, a]) => restore(f(i, a)))),
19
+ (fiberBound) =>
20
+ IO.withConcurrencyMask(fiberBound, (restore) =>
21
+ IO.foreachConcurrent(as.zipWithIndex, ([i, a]) => restore(f(i, a))),
22
+ ),
23
+ );
24
+ }
25
+
1
26
  /**
2
27
  * Applies the function `f` to each element of the `Iterable<A>` in parallel,
3
28
  * and returns the results in a new `Conc<B>`.
@@ -18,3 +43,25 @@ export function foreachExec<R, E, A, B>(
18
43
  (fiberBound) => IO.withConcurrencyMask(fiberBound, (restore) => IO.foreachConcurrent(as, (a) => restore(f(a)))),
19
44
  );
20
45
  }
46
+
47
+ /**
48
+ * Applies the function `f` to each element of the `Iterable<A>` in parallel,
49
+ * and returns the results in a new `Conc<B>`.
50
+ *
51
+ * For a sequential version of this method, see `foreach`.
52
+ *
53
+ * @tsplus static fncts.io.IOOps foreachExecDiscard
54
+ */
55
+ export function foreachDiscardExec<R, E, A, B>(
56
+ as: Iterable<A>,
57
+ es: ExecutionStrategy,
58
+ f: (a: A) => IO<R, E, B>,
59
+ __tsplusTrace?: string,
60
+ ): IO<R, E, void> {
61
+ return es.match(
62
+ () => IO.foreachDiscard(as, f),
63
+ () => IO.withConcurrencyUnboundedMask((restore) => IO.foreachConcurrentDiscard(as, (a) => restore(f(a)))),
64
+ (fiberBound) =>
65
+ IO.withConcurrencyMask(fiberBound, (restore) => IO.foreachConcurrentDiscard(as, (a) => restore(f(a)))),
66
+ );
67
+ }
package/_src/IO/api.ts CHANGED
@@ -518,13 +518,11 @@ export function filterOrElse<A, B extends A, R1, E1, A1>(
518
518
  or: (a: Exclude<A, B>) => IO<R1, E1, A1>,
519
519
  __tsplusTrace?: string,
520
520
  ): <R, E>(fa: IO<R, E, A>) => IO<R | R1, E | E1, B | A1>;
521
-
522
521
  export function filterOrElse<A, R1, E1, A1>(
523
522
  predicate: Predicate<A>,
524
523
  or: (a: A) => IO<R1, E1, A1>,
525
524
  __tsplusTrace?: string,
526
525
  ): <R, E>(fa: IO<R, E, A>) => IO<R | R1, E | E1, A | A1>;
527
-
528
526
  export function filterOrElse<A>(predicate: Predicate<A>, or: unknown, __tsplusTrace?: string) {
529
527
  return <R, E, R1, E1, A1>(fa: IO<R, E, A>): IO<R | R1, E | E1, A | A1> => {
530
528
  return fa.flatMap(
@@ -542,12 +540,10 @@ export function filterOrFail<A, B extends A, E1>(
542
540
  refinement: Refinement<A, B>,
543
541
  failWith: (a: Exclude<A, B>) => E1,
544
542
  ): <R, E>(fa: IO<R, E, A>) => IO<R, E | E1, B>;
545
-
546
543
  export function filterOrFail<A, E1>(
547
544
  predicate: Predicate<A>,
548
545
  failWith: (a: A) => E1,
549
546
  ): <R, E>(fa: IO<R, E, A>) => IO<R, E | E1, A>;
550
-
551
547
  export function filterOrFail<A>(predicate: Predicate<A>, failWith: unknown, __tsplusTrace?: string) {
552
548
  return <R, E, E1>(fa: IO<R, E, A>): IO<R, E | E1, A> => {
553
549
  return fa.filterOrElse(predicate, (a) => IO.failNow((failWith as (a: A) => E1)(a)));
@@ -568,7 +564,6 @@ export function filterOrHalt<A>(
568
564
  haltWith: (a: A) => unknown,
569
565
  __tsplusTrace?: string,
570
566
  ): <R, E>(fa: IO<R, E, A>) => IO<R, E, A>;
571
-
572
567
  export function filterOrHalt<A>(predicate: Predicate<A>, haltWith: unknown, __tsplusTrace?: string) {
573
568
  return <R, E>(fa: IO<R, E, A>): IO<R, E, A> => {
574
569
  return fa.filterOrElse(predicate, (a) => IO.haltNow((haltWith as (a: A) => unknown)(a)));
@@ -0,0 +1,4 @@
1
+ export interface Bounds {
2
+ readonly min: number;
3
+ readonly max: number;
4
+ }
@@ -0,0 +1,137 @@
1
+ import { withScope } from "@fncts/io/Push/internal";
2
+
3
+ type ScopedFork = <R, E, A>(io: IO<R, E, A>) => IO<R | Scope, never, Fiber.Runtime<E, A>>;
4
+
5
+ type Fork = <R>(io: IO<R, never, void>) => IO<R | Scope, never, void>;
6
+
7
+ /**
8
+ * @tsplus type fncts.io.Push.FlattenStrategy
9
+ * @tsplus companion fncts.io.Push.FlattenStrategyOps
10
+ */
11
+ export abstract class FlattenStrategy {
12
+ abstract withFork<R>(
13
+ f: (fork: Fork, scope: Scope) => IO<R, never, void>,
14
+ executionStrategy: ExecutionStrategy,
15
+ ): IO<R | Scope, never, void>;
16
+ }
17
+
18
+ function withScopedFork<R, E, A>(
19
+ f: (fork: ScopedFork, scope: Scope.Closeable) => IO<R, E, A>,
20
+ executionStrategy: ExecutionStrategy,
21
+ ): IO<R | Scope, E, A> {
22
+ return withScope((scope) => f((io) => io.forkIn(scope), scope), executionStrategy);
23
+ }
24
+
25
+ /**
26
+ * @tsplus static fncts.io.Push.FlattenStrategyOps Switch
27
+ */
28
+ export const SwitchStrategy = new (class SwitchStrategy extends FlattenStrategy {
29
+ withFork<R>(
30
+ f: (fork: Fork, scope: Scope) => IO<R, never, void>,
31
+ executionStrategy: ExecutionStrategy,
32
+ ): IO<R | Scope, never, void> {
33
+ return withScopedFork(
34
+ (fork, scope) =>
35
+ Ref.Synchronized.make<Fiber<never, void>>(Fiber.unit).flatMap(
36
+ (ref) =>
37
+ f((io) => ref.updateIO((fiber) => fiber.interrupt > fork(io)), scope) >
38
+ ref.get.flatMap((fiber) => fiber.join),
39
+ ),
40
+ executionStrategy,
41
+ );
42
+ }
43
+ })();
44
+
45
+ /**
46
+ * @tsplus static fncts.io.Push.FlattenStrategyOps Exhaust
47
+ */
48
+ export const ExhaustStrategy = new (class ExhaustStrategy extends FlattenStrategy {
49
+ withFork<R>(
50
+ f: (fork: Fork, scope: Scope) => IO<R, never, void>,
51
+ executionStrategy: ExecutionStrategy,
52
+ ): IO<R | Scope, never, void> {
53
+ return withScopedFork(
54
+ (fork, scope) =>
55
+ Ref.Synchronized.make<Fiber.Runtime<never, void> | null>(null).flatMap(
56
+ (ref) =>
57
+ f(
58
+ (io) =>
59
+ ref.updateIO((fiber) => {
60
+ if (fiber) {
61
+ return IO.succeedNow(fiber);
62
+ } else {
63
+ return fork(io.onExit(() => ref.set(null)));
64
+ }
65
+ }),
66
+ scope,
67
+ ) >
68
+ ref.get.flatMap((fiber) => {
69
+ if (fiber) {
70
+ return fiber.join;
71
+ } else {
72
+ return IO.unit;
73
+ }
74
+ }),
75
+ ),
76
+ executionStrategy,
77
+ );
78
+ }
79
+ })();
80
+
81
+ /**
82
+ * @tsplus static fncts.io.Push.FlattenStrategyOps Unbounded
83
+ */
84
+ export const UnboundedStrategy = new (class UnboundedStrategy extends FlattenStrategy {
85
+ withFork<R>(f: (fork: Fork, scope: Scope) => IO<R, never, void>): IO<R | Scope, never, void> {
86
+ return IO.scopeWith((scope) =>
87
+ FiberSet.make<never, void>().flatMap((fiberSet) => f((io) => fiberSet.run(io), scope) > Fiber.joinAll(fiberSet)),
88
+ );
89
+ }
90
+ })();
91
+
92
+ /**
93
+ * @tsplus static fncts.io.Push.FlattenStrategyOps Bounded
94
+ */
95
+ export function makeBounded(capacity: number): BoundedStrategy {
96
+ return new BoundedStrategy(capacity);
97
+ }
98
+
99
+ class BoundedStrategy extends FlattenStrategy {
100
+ constructor(readonly capacity: number) {
101
+ super();
102
+ }
103
+
104
+ withFork<R>(
105
+ f: (fork: Fork, scope: Scope) => IO<R, never, void>,
106
+ executionStrategy: ExecutionStrategy,
107
+ ): IO<R | Scope, never, void> {
108
+ return withScopedFork(
109
+ (fork, scope) =>
110
+ Do((Δ) => {
111
+ const ref = Δ(Ref.make<HashSet<Fiber.Runtime<never, void>>>(HashSet.empty()));
112
+ const semaphore = Δ(Semaphore.make(this.capacity));
113
+ Δ(
114
+ f(
115
+ (io) =>
116
+ Do((Δ) => {
117
+ const fiber = Δ(fork(semaphore.withPermit(io)));
118
+ Δ(ref.update((set) => set.add(fiber)));
119
+ Δ(scope.addFinalizer(ref.update((set) => set.remove(fiber))));
120
+ }),
121
+ scope,
122
+ ),
123
+ );
124
+ return ref;
125
+ }).flatMap((ref) =>
126
+ ref.get.flatMap((fibers) => {
127
+ if (fibers.size > 0) {
128
+ return Fiber.joinAll(fibers);
129
+ } else {
130
+ return IO.unit;
131
+ }
132
+ }),
133
+ ),
134
+ executionStrategy,
135
+ );
136
+ }
137
+ }