effect 2.0.0-next.44 → 2.0.0-next.46

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 (779) hide show
  1. package/Bigint/dist/effect-Bigint.cjs.dev.js +125 -1
  2. package/Bigint/dist/effect-Bigint.cjs.mjs +6 -1
  3. package/Bigint/dist/effect-Bigint.cjs.prod.js +125 -1
  4. package/Bigint/dist/effect-Bigint.esm.js +111 -2
  5. package/Boolean/dist/effect-Boolean.cjs.dev.js +1 -1
  6. package/Boolean/dist/effect-Boolean.cjs.prod.js +1 -1
  7. package/Boolean/dist/effect-Boolean.esm.js +1 -1
  8. package/Brand/dist/effect-Brand.cjs.dev.js +3 -3
  9. package/Brand/dist/effect-Brand.cjs.prod.js +3 -3
  10. package/Cache/dist/effect-Cache.cjs.dev.js +32 -32
  11. package/Cache/dist/effect-Cache.cjs.prod.js +32 -32
  12. package/Cause/dist/effect-Cause.cjs.dev.js +17 -17
  13. package/Cause/dist/effect-Cause.cjs.mjs +1 -1
  14. package/Cause/dist/effect-Cause.cjs.prod.js +17 -17
  15. package/Cause/dist/effect-Cause.esm.js +4 -4
  16. package/Channel/dist/effect-Channel.cjs.dev.js +50 -50
  17. package/Channel/dist/effect-Channel.cjs.mjs +3 -3
  18. package/Channel/dist/effect-Channel.cjs.prod.js +50 -50
  19. package/Channel/dist/effect-Channel.esm.js +8 -8
  20. package/ChannelSingleProducerAsyncInput/dist/effect-ChannelSingleProducerAsyncInput.cjs.dev.js +36 -36
  21. package/ChannelSingleProducerAsyncInput/dist/effect-ChannelSingleProducerAsyncInput.cjs.prod.js +36 -36
  22. package/Chunk/dist/effect-Chunk.cjs.dev.js +3 -3
  23. package/Chunk/dist/effect-Chunk.cjs.prod.js +3 -3
  24. package/Clock/dist/effect-Clock.cjs.dev.js +16 -16
  25. package/Clock/dist/effect-Clock.cjs.prod.js +16 -16
  26. package/Config/dist/effect-Config.cjs.dev.js +11 -11
  27. package/Config/dist/effect-Config.cjs.prod.js +11 -11
  28. package/ConfigError/dist/effect-ConfigError.cjs.dev.js +4 -4
  29. package/ConfigError/dist/effect-ConfigError.cjs.prod.js +4 -4
  30. package/ConfigProvider/dist/effect-ConfigProvider.cjs.dev.js +17 -17
  31. package/ConfigProvider/dist/effect-ConfigProvider.cjs.prod.js +17 -17
  32. package/ConfigProviderPathPatch/dist/effect-ConfigProviderPathPatch.cjs.dev.js +5 -5
  33. package/ConfigProviderPathPatch/dist/effect-ConfigProviderPathPatch.cjs.prod.js +5 -5
  34. package/ConfigSecret/dist/effect-ConfigSecret.cjs.dev.js +4 -4
  35. package/ConfigSecret/dist/effect-ConfigSecret.cjs.prod.js +4 -4
  36. package/Console/dist/effect-Console.cjs.dev.js +35 -35
  37. package/Console/dist/effect-Console.cjs.prod.js +35 -35
  38. package/Context/dist/effect-Context.cjs.dev.js +3 -8
  39. package/Context/dist/effect-Context.cjs.prod.js +3 -8
  40. package/Data/dist/effect-Data.cjs.dev.js +141 -54
  41. package/Data/dist/effect-Data.cjs.mjs +2 -0
  42. package/Data/dist/effect-Data.cjs.prod.js +141 -54
  43. package/Data/dist/effect-Data.esm.js +51 -3
  44. package/DefaultServices/dist/effect-DefaultServices.cjs.dev.js +16 -16
  45. package/DefaultServices/dist/effect-DefaultServices.cjs.prod.js +16 -16
  46. package/Deferred/dist/effect-Deferred.cjs.dev.js +8 -8
  47. package/Deferred/dist/effect-Deferred.cjs.prod.js +8 -8
  48. package/Differ/dist/effect-Differ.cjs.dev.js +11 -11
  49. package/Differ/dist/effect-Differ.cjs.prod.js +11 -11
  50. package/Duration/dist/effect-Duration.cjs.dev.js +3 -3
  51. package/Duration/dist/effect-Duration.cjs.prod.js +3 -3
  52. package/Effect/dist/effect-Effect.cjs.dev.js +44 -44
  53. package/Effect/dist/effect-Effect.cjs.prod.js +44 -44
  54. package/Effectable/dist/effect-Effectable.cjs.dev.js +24 -14
  55. package/Effectable/dist/effect-Effectable.cjs.mjs +5 -4
  56. package/Effectable/dist/effect-Effectable.cjs.prod.js +24 -14
  57. package/Effectable/dist/effect-Effectable.esm.js +15 -5
  58. package/Either/dist/effect-Either.cjs.dev.js +3 -3
  59. package/Either/dist/effect-Either.cjs.prod.js +3 -3
  60. package/Encoding/dist/effect-Encoding.cjs.dev.js +3 -3
  61. package/Encoding/dist/effect-Encoding.cjs.prod.js +3 -3
  62. package/ExecutionStrategy/dist/effect-ExecutionStrategy.cjs.dev.js +2 -2
  63. package/ExecutionStrategy/dist/effect-ExecutionStrategy.cjs.prod.js +2 -2
  64. package/Exit/dist/effect-Exit.cjs.dev.js +8 -8
  65. package/Exit/dist/effect-Exit.cjs.prod.js +8 -8
  66. package/Fiber/dist/effect-Fiber.cjs.dev.js +29 -29
  67. package/Fiber/dist/effect-Fiber.cjs.prod.js +29 -29
  68. package/FiberId/dist/effect-FiberId.cjs.dev.js +5 -5
  69. package/FiberId/dist/effect-FiberId.cjs.prod.js +5 -5
  70. package/FiberRef/dist/effect-FiberRef.cjs.dev.js +29 -29
  71. package/FiberRef/dist/effect-FiberRef.cjs.prod.js +29 -29
  72. package/FiberRefs/dist/effect-FiberRefs.cjs.dev.js +9 -9
  73. package/FiberRefs/dist/effect-FiberRefs.cjs.prod.js +9 -9
  74. package/FiberRefsPatch/dist/effect-FiberRefsPatch.cjs.dev.js +10 -10
  75. package/FiberRefsPatch/dist/effect-FiberRefsPatch.cjs.prod.js +10 -10
  76. package/GroupBy/dist/effect-GroupBy.cjs.dev.js +42 -42
  77. package/GroupBy/dist/effect-GroupBy.cjs.prod.js +42 -42
  78. package/HashMap/dist/effect-HashMap.cjs.dev.js +20 -20
  79. package/HashMap/dist/effect-HashMap.cjs.prod.js +20 -20
  80. package/HashSet/dist/effect-HashSet.cjs.dev.js +20 -20
  81. package/HashSet/dist/effect-HashSet.cjs.prod.js +20 -20
  82. package/KeyedPool/dist/effect-KeyedPool.cjs.dev.js +33 -33
  83. package/KeyedPool/dist/effect-KeyedPool.cjs.prod.js +33 -33
  84. package/Layer/dist/effect-Layer.cjs.dev.js +32 -32
  85. package/Layer/dist/effect-Layer.cjs.prod.js +32 -32
  86. package/List/dist/effect-List.cjs.dev.js +3 -3
  87. package/List/dist/effect-List.cjs.prod.js +3 -3
  88. package/LogLevel/dist/effect-LogLevel.cjs.dev.js +8 -8
  89. package/LogLevel/dist/effect-LogLevel.cjs.prod.js +8 -8
  90. package/Logger/dist/effect-Logger.cjs.dev.js +33 -33
  91. package/Logger/dist/effect-Logger.cjs.prod.js +33 -33
  92. package/Metric/dist/effect-Metric.cjs.dev.js +27 -27
  93. package/Metric/dist/effect-Metric.cjs.prod.js +27 -27
  94. package/MetricBoundaries/dist/effect-MetricBoundaries.cjs.dev.js +4 -4
  95. package/MetricBoundaries/dist/effect-MetricBoundaries.cjs.prod.js +4 -4
  96. package/MetricHook/dist/effect-MetricHook.cjs.dev.js +6 -6
  97. package/MetricHook/dist/effect-MetricHook.cjs.prod.js +6 -6
  98. package/MetricKey/dist/effect-MetricKey.cjs.dev.js +6 -6
  99. package/MetricKey/dist/effect-MetricKey.cjs.prod.js +6 -6
  100. package/MetricKeyType/dist/effect-MetricKeyType.cjs.dev.js +4 -4
  101. package/MetricKeyType/dist/effect-MetricKeyType.cjs.prod.js +4 -4
  102. package/MetricPolling/dist/effect-MetricPolling.cjs.dev.js +30 -30
  103. package/MetricPolling/dist/effect-MetricPolling.cjs.prod.js +30 -30
  104. package/MetricRegistry/dist/effect-MetricRegistry.cjs.dev.js +8 -8
  105. package/MetricRegistry/dist/effect-MetricRegistry.cjs.prod.js +8 -8
  106. package/MetricState/dist/effect-MetricState.cjs.dev.js +1 -1
  107. package/MetricState/dist/effect-MetricState.cjs.prod.js +1 -1
  108. package/MutableHashMap/dist/effect-MutableHashMap.cjs.dev.js +4 -4
  109. package/MutableHashMap/dist/effect-MutableHashMap.cjs.prod.js +4 -4
  110. package/MutableHashSet/dist/effect-MutableHashSet.cjs.dev.js +4 -4
  111. package/MutableHashSet/dist/effect-MutableHashSet.cjs.prod.js +4 -4
  112. package/MutableQueue/dist/effect-MutableQueue.cjs.dev.js +3 -3
  113. package/MutableQueue/dist/effect-MutableQueue.cjs.prod.js +3 -3
  114. package/Number/dist/effect-Number.cjs.dev.js +1 -1
  115. package/Number/dist/effect-Number.cjs.prod.js +1 -1
  116. package/Number/dist/effect-Number.esm.js +1 -1
  117. package/Option/dist/effect-Option.cjs.dev.js +9 -9
  118. package/Option/dist/effect-Option.cjs.prod.js +9 -9
  119. package/Pool/dist/effect-Pool.cjs.dev.js +31 -31
  120. package/Pool/dist/effect-Pool.cjs.prod.js +31 -31
  121. package/PubSub/dist/effect-PubSub.cjs.d.mts +2 -0
  122. package/PubSub/dist/effect-PubSub.cjs.d.mts.map +1 -0
  123. package/PubSub/dist/effect-PubSub.cjs.d.ts +2 -0
  124. package/PubSub/dist/effect-PubSub.cjs.d.ts.map +1 -0
  125. package/{Hub/dist/effect-Hub.cjs.dev.js → PubSub/dist/effect-PubSub.cjs.dev.js} +163 -163
  126. package/PubSub/dist/effect-PubSub.cjs.js +7 -0
  127. package/{Hub/dist/effect-Hub.cjs.mjs → PubSub/dist/effect-PubSub.cjs.mjs} +1 -1
  128. package/{Hub/dist/effect-Hub.cjs.prod.js → PubSub/dist/effect-PubSub.cjs.prod.js} +163 -163
  129. package/{Hub/dist/effect-Hub.esm.js → PubSub/dist/effect-PubSub.esm.js} +15 -15
  130. package/PubSub/package.json +4 -0
  131. package/Queue/dist/effect-Queue.cjs.dev.js +28 -28
  132. package/Queue/dist/effect-Queue.cjs.prod.js +28 -28
  133. package/README.md +5 -5
  134. package/Random/dist/effect-Random.cjs.dev.js +16 -16
  135. package/Random/dist/effect-Random.cjs.prod.js +16 -16
  136. package/ReadonlyArray/dist/effect-ReadonlyArray.cjs.dev.js +3 -3
  137. package/ReadonlyArray/dist/effect-ReadonlyArray.cjs.prod.js +3 -3
  138. package/ReadonlyRecord/dist/effect-ReadonlyRecord.cjs.dev.js +3 -3
  139. package/ReadonlyRecord/dist/effect-ReadonlyRecord.cjs.prod.js +3 -3
  140. package/RedBlackTree/dist/effect-RedBlackTree.cjs.dev.js +4 -4
  141. package/RedBlackTree/dist/effect-RedBlackTree.cjs.prod.js +4 -4
  142. package/Ref/dist/effect-Ref.cjs.dev.js +9 -9
  143. package/Ref/dist/effect-Ref.cjs.prod.js +9 -9
  144. package/Reloadable/dist/effect-Reloadable.cjs.dev.js +44 -44
  145. package/Reloadable/dist/effect-Reloadable.cjs.prod.js +44 -44
  146. package/Request/dist/effect-Request.cjs.dev.js +29 -29
  147. package/Request/dist/effect-Request.cjs.prod.js +29 -29
  148. package/RequestBlock/dist/effect-RequestBlock.cjs.dev.js +36 -36
  149. package/RequestBlock/dist/effect-RequestBlock.cjs.prod.js +36 -36
  150. package/RequestResolver/dist/effect-RequestResolver.cjs.dev.js +38 -38
  151. package/RequestResolver/dist/effect-RequestResolver.cjs.prod.js +38 -38
  152. package/Resource/dist/effect-Resource.cjs.dev.js +34 -34
  153. package/Resource/dist/effect-Resource.cjs.prod.js +34 -34
  154. package/Runtime/dist/effect-Runtime.cjs.dev.js +34 -34
  155. package/Runtime/dist/effect-Runtime.cjs.prod.js +34 -34
  156. package/RuntimeFlags/dist/effect-RuntimeFlags.cjs.dev.js +33 -33
  157. package/RuntimeFlags/dist/effect-RuntimeFlags.cjs.prod.js +33 -33
  158. package/RuntimeFlagsPatch/dist/effect-RuntimeFlagsPatch.cjs.dev.js +6 -6
  159. package/RuntimeFlagsPatch/dist/effect-RuntimeFlagsPatch.cjs.prod.js +6 -6
  160. package/STM/dist/effect-STM.cjs.dev.js +48 -48
  161. package/STM/dist/effect-STM.cjs.prod.js +48 -48
  162. package/Schedule/dist/effect-Schedule.cjs.dev.js +19 -19
  163. package/Schedule/dist/effect-Schedule.cjs.prod.js +19 -19
  164. package/ScheduleDecision/dist/effect-ScheduleDecision.cjs.dev.js +3 -3
  165. package/ScheduleDecision/dist/effect-ScheduleDecision.cjs.prod.js +3 -3
  166. package/ScheduleInterval/dist/effect-ScheduleInterval.cjs.dev.js +3 -3
  167. package/ScheduleInterval/dist/effect-ScheduleInterval.cjs.prod.js +3 -3
  168. package/ScheduleIntervals/dist/effect-ScheduleIntervals.cjs.dev.js +3 -3
  169. package/ScheduleIntervals/dist/effect-ScheduleIntervals.cjs.prod.js +3 -3
  170. package/Scheduler/dist/effect-Scheduler.cjs.dev.js +8 -8
  171. package/Scheduler/dist/effect-Scheduler.cjs.prod.js +8 -8
  172. package/Scope/dist/effect-Scope.cjs.dev.js +27 -27
  173. package/Scope/dist/effect-Scope.cjs.prod.js +27 -27
  174. package/ScopedCache/dist/effect-ScopedCache.cjs.dev.js +78 -61
  175. package/ScopedCache/dist/effect-ScopedCache.cjs.prod.js +78 -61
  176. package/ScopedRef/dist/effect-ScopedRef.cjs.dev.js +34 -34
  177. package/ScopedRef/dist/effect-ScopedRef.cjs.prod.js +34 -34
  178. package/Sink/dist/effect-Sink.cjs.dev.js +43 -43
  179. package/Sink/dist/effect-Sink.cjs.mjs +1 -1
  180. package/Sink/dist/effect-Sink.cjs.prod.js +43 -43
  181. package/Sink/dist/effect-Sink.esm.js +5 -5
  182. package/SortedMap/dist/effect-SortedMap.cjs.dev.js +3 -3
  183. package/SortedMap/dist/effect-SortedMap.cjs.prod.js +3 -3
  184. package/SortedSet/dist/effect-SortedSet.cjs.dev.js +3 -3
  185. package/SortedSet/dist/effect-SortedSet.cjs.prod.js +3 -3
  186. package/Stream/dist/effect-Stream.cjs.dev.js +60 -60
  187. package/Stream/dist/effect-Stream.cjs.mjs +5 -5
  188. package/Stream/dist/effect-Stream.cjs.prod.js +60 -60
  189. package/Stream/dist/effect-Stream.esm.js +15 -15
  190. package/Streamable/dist/effect-Streamable.cjs.d.mts +2 -0
  191. package/Streamable/dist/effect-Streamable.cjs.d.mts.map +1 -0
  192. package/Streamable/dist/effect-Streamable.cjs.d.ts +2 -0
  193. package/Streamable/dist/effect-Streamable.cjs.d.ts.map +1 -0
  194. package/Streamable/dist/effect-Streamable.cjs.dev.js +152 -0
  195. package/Streamable/dist/effect-Streamable.cjs.js +7 -0
  196. package/Streamable/dist/effect-Streamable.cjs.mjs +3 -0
  197. package/Streamable/dist/effect-Streamable.cjs.prod.js +152 -0
  198. package/Streamable/dist/effect-Streamable.esm.js +42 -0
  199. package/Streamable/package.json +4 -0
  200. package/String/dist/effect-String.cjs.dev.js +4 -4
  201. package/String/dist/effect-String.cjs.prod.js +4 -4
  202. package/String/dist/effect-String.esm.js +1 -1
  203. package/SubscriptionRef/dist/effect-SubscriptionRef.cjs.dev.js +48 -48
  204. package/SubscriptionRef/dist/effect-SubscriptionRef.cjs.prod.js +48 -48
  205. package/Supervisor/dist/effect-Supervisor.cjs.dev.js +34 -34
  206. package/Supervisor/dist/effect-Supervisor.cjs.prod.js +34 -34
  207. package/SynchronizedRef/dist/effect-SynchronizedRef.cjs.dev.js +30 -30
  208. package/SynchronizedRef/dist/effect-SynchronizedRef.cjs.prod.js +30 -30
  209. package/TArray/dist/effect-TArray.cjs.dev.js +46 -46
  210. package/TArray/dist/effect-TArray.cjs.prod.js +46 -46
  211. package/TDeferred/dist/effect-TDeferred.cjs.dev.js +45 -45
  212. package/TDeferred/dist/effect-TDeferred.cjs.prod.js +45 -45
  213. package/TMap/dist/effect-TMap.cjs.dev.js +47 -47
  214. package/TMap/dist/effect-TMap.cjs.prod.js +47 -47
  215. package/TPriorityQueue/dist/effect-TPriorityQueue.cjs.dev.js +44 -44
  216. package/TPriorityQueue/dist/effect-TPriorityQueue.cjs.prod.js +44 -44
  217. package/TPubSub/dist/effect-TPubSub.cjs.d.mts +2 -0
  218. package/TPubSub/dist/effect-TPubSub.cjs.d.mts.map +1 -0
  219. package/TPubSub/dist/effect-TPubSub.cjs.d.ts +2 -0
  220. package/TPubSub/dist/effect-TPubSub.cjs.d.ts.map +1 -0
  221. package/{THub/dist/effect-THub.cjs.dev.js → TPubSub/dist/effect-TPubSub.cjs.dev.js} +101 -101
  222. package/TPubSub/dist/effect-TPubSub.cjs.js +7 -0
  223. package/{THub/dist/effect-THub.cjs.mjs → TPubSub/dist/effect-TPubSub.cjs.mjs} +2 -2
  224. package/{THub/dist/effect-THub.cjs.prod.js → TPubSub/dist/effect-TPubSub.cjs.prod.js} +101 -101
  225. package/TPubSub/dist/effect-TPubSub.esm.js +157 -0
  226. package/TPubSub/package.json +4 -0
  227. package/TQueue/dist/effect-TQueue.cjs.dev.js +46 -46
  228. package/TQueue/dist/effect-TQueue.cjs.prod.js +46 -46
  229. package/TRandom/dist/effect-TRandom.cjs.dev.js +50 -50
  230. package/TRandom/dist/effect-TRandom.cjs.prod.js +50 -50
  231. package/TReentrantLock/dist/effect-TReentrantLock.cjs.dev.js +46 -46
  232. package/TReentrantLock/dist/effect-TReentrantLock.cjs.prod.js +46 -46
  233. package/TRef/dist/effect-TRef.cjs.dev.js +44 -44
  234. package/TRef/dist/effect-TRef.cjs.prod.js +44 -44
  235. package/TSemaphore/dist/effect-TSemaphore.cjs.dev.js +45 -45
  236. package/TSemaphore/dist/effect-TSemaphore.cjs.prod.js +45 -45
  237. package/TSet/dist/effect-TSet.cjs.dev.js +47 -47
  238. package/TSet/dist/effect-TSet.cjs.prod.js +47 -47
  239. package/Take/dist/effect-Take.cjs.dev.js +36 -36
  240. package/Take/dist/effect-Take.cjs.prod.js +36 -36
  241. package/TestAnnotation/dist/effect-TestAnnotation.cjs.dev.js +8 -8
  242. package/TestAnnotation/dist/effect-TestAnnotation.cjs.prod.js +8 -8
  243. package/TestAnnotations/dist/effect-TestAnnotations.cjs.dev.js +25 -25
  244. package/TestAnnotations/dist/effect-TestAnnotations.cjs.prod.js +25 -25
  245. package/TestClock/dist/effect-TestClock.cjs.dev.js +46 -46
  246. package/TestClock/dist/effect-TestClock.cjs.prod.js +46 -46
  247. package/TestConfig/dist/effect-TestConfig.cjs.dev.js +3 -8
  248. package/TestConfig/dist/effect-TestConfig.cjs.prod.js +3 -8
  249. package/TestContext/dist/effect-TestContext.cjs.dev.js +37 -37
  250. package/TestContext/dist/effect-TestContext.cjs.prod.js +37 -37
  251. package/TestLive/dist/effect-TestLive.cjs.dev.js +17 -17
  252. package/TestLive/dist/effect-TestLive.cjs.prod.js +17 -17
  253. package/TestServices/dist/effect-TestServices.cjs.dev.js +42 -42
  254. package/TestServices/dist/effect-TestServices.cjs.prod.js +42 -42
  255. package/TestSized/dist/effect-TestSized.cjs.dev.js +11 -11
  256. package/TestSized/dist/effect-TestSized.cjs.prod.js +11 -11
  257. package/Tracer/dist/effect-Tracer.cjs.dev.js +16 -16
  258. package/Tracer/dist/effect-Tracer.cjs.prod.js +16 -16
  259. package/dist/{Context-01a123ac.cjs.prod.js → Context-9fe5eb16.cjs.prod.js} +5 -5
  260. package/dist/{Context-593661f6.cjs.dev.js → Context-da73ddfa.cjs.dev.js} +5 -5
  261. package/dist/{Effectable-2f022879.cjs.dev.js → Effectable-7314aed8.cjs.dev.js} +63 -10
  262. package/dist/{Effectable-cd8f3a96.cjs.prod.js → Effectable-c4c14a2b.cjs.prod.js} +63 -10
  263. package/dist/{Either-7a881c7a.cjs.prod.js → Either-d43f082c.cjs.prod.js} +6 -79
  264. package/dist/{Either-12bbe00c.cjs.dev.js → Either-fa0ef1d9.cjs.dev.js} +6 -79
  265. package/dist/{ExecutionStrategy-14d3053a.cjs.prod.js → ExecutionStrategy-4808fe5d.cjs.prod.js} +2 -2
  266. package/dist/{ExecutionStrategy-70f1a920.cjs.dev.js → ExecutionStrategy-7d9d457b.cjs.dev.js} +2 -2
  267. package/dist/{HashSet-0b4ff1e4.cjs.dev.js → HashSet-5963ad6b.cjs.dev.js} +32 -32
  268. package/dist/{HashSet-6257b66d.cjs.prod.js → HashSet-ac02a3e1.cjs.prod.js} +32 -32
  269. package/dist/Option-463b42e6.cjs.dev.js +81 -0
  270. package/dist/Option-935e5d7c.cjs.prod.js +81 -0
  271. package/dist/{Ref-a3a4e50d.cjs.prod.js → Ref-4014b526.cjs.prod.js} +1 -1
  272. package/dist/{Ref-74b592a4.cjs.dev.js → Ref-acdee7ef.cjs.dev.js} +1 -1
  273. package/dist/{cache-75fbef45.cjs.prod.js → cache-5c7d77e4.cjs.prod.js} +17 -17
  274. package/dist/{cache-e1ea3923.cjs.dev.js → cache-7eed9d33.cjs.dev.js} +17 -17
  275. package/dist/{circular-6f16b226.cjs.prod.js → circular-1f481ffb.cjs.prod.js} +33 -33
  276. package/dist/{circular-f406f9a4.cjs.prod.js → circular-9e10a5a7.cjs.prod.js} +6 -6
  277. package/dist/{circular-58ff5e9c.cjs.dev.js → circular-c2dbce1a.cjs.dev.js} +33 -33
  278. package/dist/{circular-30564534.cjs.dev.js → circular-c8b65bdb.cjs.dev.js} +6 -6
  279. package/dist/{config-80900693.cjs.dev.js → config-3b7935a3.cjs.dev.js} +3 -3
  280. package/dist/{config-d0ddc159.cjs.prod.js → config-5ba54da1.cjs.prod.js} +3 -3
  281. package/dist/{configProvider-93617d6d.cjs.prod.js → configProvider-b6b20998.cjs.prod.js} +29 -29
  282. package/dist/{configProvider-ce43fdbf.cjs.dev.js → configProvider-f34a82f1.cjs.dev.js} +29 -29
  283. package/dist/{core-0b0539de.cjs.prod.js → core-07202cc0.cjs.prod.js} +711 -726
  284. package/dist/{core-60ca562a.cjs.prod.js → core-7411d1e1.cjs.prod.js} +3 -3
  285. package/dist/{core-b4d7b4f5.cjs.dev.js → core-b7401357.cjs.dev.js} +711 -726
  286. package/dist/{core-13f8a866.cjs.dev.js → core-c5747f88.cjs.dev.js} +3 -3
  287. package/dist/{core-effect-892f3686.cjs.dev.js → core-effect-1c564d42.cjs.dev.js} +77 -75
  288. package/dist/{core-effect-c65770cd.cjs.prod.js → core-effect-9201ea63.cjs.prod.js} +77 -75
  289. package/dist/{dataSource-3ba9e4d3.cjs.dev.js → dataSource-b5eda714.cjs.dev.js} +2 -2
  290. package/dist/{dataSource-7df3a5f6.cjs.prod.js → dataSource-b83bc277.cjs.prod.js} +2 -2
  291. package/dist/declarations/src/Bigint.d.ts +92 -1
  292. package/dist/declarations/src/Bigint.d.ts.map +1 -1
  293. package/dist/declarations/src/Boolean.d.ts +1 -1
  294. package/dist/declarations/src/Cause.d.ts +6 -6
  295. package/dist/declarations/src/Cause.d.ts.map +1 -1
  296. package/dist/declarations/src/Channel.d.ts +7 -7
  297. package/dist/declarations/src/Channel.d.ts.map +1 -1
  298. package/dist/declarations/src/Data.d.ts +30 -0
  299. package/dist/declarations/src/Data.d.ts.map +1 -1
  300. package/dist/declarations/src/Effect.d.ts +4 -2
  301. package/dist/declarations/src/Effect.d.ts.map +1 -1
  302. package/dist/declarations/src/Effectable.d.ts +14 -4
  303. package/dist/declarations/src/Effectable.d.ts.map +1 -1
  304. package/dist/declarations/src/Metric.d.ts +31 -7
  305. package/dist/declarations/src/Metric.d.ts.map +1 -1
  306. package/dist/declarations/src/MetricHook.d.ts +7 -4
  307. package/dist/declarations/src/MetricHook.d.ts.map +1 -1
  308. package/dist/declarations/src/MetricKey.d.ts +24 -4
  309. package/dist/declarations/src/MetricKey.d.ts.map +1 -1
  310. package/dist/declarations/src/MetricKeyType.d.ts +9 -6
  311. package/dist/declarations/src/MetricKeyType.d.ts.map +1 -1
  312. package/dist/declarations/src/MetricRegistry.d.ts +2 -2
  313. package/dist/declarations/src/MetricRegistry.d.ts.map +1 -1
  314. package/dist/declarations/src/MetricState.d.ts +15 -9
  315. package/dist/declarations/src/MetricState.d.ts.map +1 -1
  316. package/dist/declarations/src/Number.d.ts +1 -1
  317. package/dist/declarations/src/{Hub.d.ts → PubSub.d.ts} +38 -38
  318. package/dist/declarations/src/PubSub.d.ts.map +1 -0
  319. package/dist/declarations/src/Sink.d.ts +4 -4
  320. package/dist/declarations/src/Sink.d.ts.map +1 -1
  321. package/dist/declarations/src/Stream.d.ts +24 -24
  322. package/dist/declarations/src/Stream.d.ts.map +1 -1
  323. package/dist/declarations/src/Streamable.d.ts +27 -0
  324. package/dist/declarations/src/Streamable.d.ts.map +1 -0
  325. package/dist/declarations/src/String.d.ts +1 -1
  326. package/dist/declarations/src/SubscriptionRef.d.ts.map +1 -1
  327. package/dist/declarations/src/TPubSub.d.ts +146 -0
  328. package/dist/declarations/src/TPubSub.d.ts.map +1 -0
  329. package/dist/declarations/src/index.d.ts +15 -15
  330. package/dist/declarations/src/index.d.ts.map +1 -1
  331. package/dist/{defaultServices-5530ff0e.cjs.dev.js → defaultServices-755d5b46.cjs.dev.js} +6 -6
  332. package/dist/{defaultServices-086b8ac9.cjs.prod.js → defaultServices-9d7ce86f.cjs.prod.js} +6 -6
  333. package/dist/effect.cjs.dev.js +9 -9
  334. package/dist/effect.cjs.mjs +3 -3
  335. package/dist/effect.cjs.prod.js +9 -9
  336. package/dist/effect.esm.js +6 -6
  337. package/dist/{fiber-1bfb4c1d.cjs.dev.js → fiber-5156eff2.cjs.dev.js} +12 -12
  338. package/dist/{fiber-2eb0a4c1.cjs.prod.js → fiber-9519d109.cjs.prod.js} +12 -12
  339. package/dist/{fiberRefs-be6b6a70.cjs.prod.js → fiberRefs-558c17e6.cjs.prod.js} +1 -1
  340. package/dist/{fiberRefs-be4fae6a.cjs.dev.js → fiberRefs-98b71233.cjs.dev.js} +1 -1
  341. package/dist/{fiberRuntime-2d31e120.cjs.prod.js → fiberRuntime-31ae011f.cjs.prod.js} +99 -100
  342. package/dist/{fiberRuntime-c7280769.cjs.dev.js → fiberRuntime-d3872282.cjs.dev.js} +99 -100
  343. package/dist/{groupBy-0702739b.cjs.prod.js → groupBy-724f64ef.cjs.prod.js} +4 -4
  344. package/dist/{groupBy-7f852bf3.cjs.dev.js → groupBy-862cc2da.cjs.dev.js} +4 -4
  345. package/dist/{hook-e72b20fd.cjs.dev.js → hook-8cefc909.cjs.dev.js} +8 -4
  346. package/dist/{hook-470b717e.cjs.prod.js → hook-98ce30e4.cjs.prod.js} +8 -4
  347. package/dist/{key-f0a1408a.cjs.dev.js → key-198b6670.cjs.dev.js} +3 -3
  348. package/dist/{key-378a6a2c.cjs.prod.js → key-eb8a12b2.cjs.prod.js} +3 -3
  349. package/dist/{keyType-cf67c69c.cjs.prod.js → keyType-0c5e6178.cjs.prod.js} +9 -2
  350. package/dist/{keyType-55f27f07.cjs.dev.js → keyType-7c164b82.cjs.dev.js} +9 -2
  351. package/dist/{layer-b42e8022.cjs.dev.js → layer-29574350.cjs.dev.js} +33 -33
  352. package/dist/{layer-d103b49b.cjs.prod.js → layer-51ff4846.cjs.prod.js} +33 -33
  353. package/dist/{patch-a1b2802f.cjs.dev.js → patch-0220a642.cjs.dev.js} +1 -1
  354. package/dist/{patch-c4d6c61e.cjs.prod.js → patch-7c559bb2.cjs.prod.js} +1 -1
  355. package/dist/{pathPatch-15c8d723.cjs.prod.js → pathPatch-b56a4da2.cjs.prod.js} +1 -1
  356. package/dist/{pathPatch-d9d41297.cjs.dev.js → pathPatch-fab016f1.cjs.dev.js} +1 -1
  357. package/dist/{pool-ef44ba82.cjs.dev.js → pool-3211287f.cjs.dev.js} +31 -31
  358. package/dist/{pool-e414eb88.cjs.prod.js → pool-f77d7705.cjs.prod.js} +31 -31
  359. package/dist/{query-1d0157db.cjs.prod.js → query-a52b25f0.cjs.prod.js} +11 -11
  360. package/dist/{query-54337864.cjs.dev.js → query-c36decd5.cjs.dev.js} +11 -11
  361. package/dist/{queue-27ac9d98.cjs.prod.js → queue-315ea45d.cjs.prod.js} +22 -22
  362. package/dist/{queue-533d70d4.cjs.dev.js → queue-7a223c44.cjs.dev.js} +22 -22
  363. package/dist/{registry-1099de3f.cjs.dev.js → registry-62ff192e.cjs.dev.js} +4 -4
  364. package/dist/{registry-013ecdde.cjs.prod.js → registry-d5258dff.cjs.prod.js} +4 -4
  365. package/dist/{runtime-ea174155.cjs.prod.js → runtime-005f8a9b.cjs.prod.js} +7 -7
  366. package/dist/{runtime-afad6a9b.cjs.dev.js → runtime-57c8ddf8.cjs.dev.js} +7 -7
  367. package/dist/{schedule-1d92198c.cjs.prod.js → schedule-8cdf6bf1.cjs.prod.js} +40 -40
  368. package/dist/{schedule-e0f55cab.cjs.dev.js → schedule-e7a9f93f.cjs.dev.js} +40 -40
  369. package/dist/scopedRef-789d7fef.cjs.prod.js +55 -0
  370. package/dist/scopedRef-eb19c7a6.cjs.dev.js +55 -0
  371. package/dist/{singleProducerAsyncInput-4105a342.cjs.dev.js → singleProducerAsyncInput-9ff8389b.cjs.dev.js} +1 -1
  372. package/dist/{singleProducerAsyncInput-21463e16.cjs.prod.js → singleProducerAsyncInput-f9b258b1.cjs.prod.js} +1 -1
  373. package/dist/{sink-9129504b.cjs.prod.js → sink-572d8981.cjs.prod.js} +17 -17
  374. package/dist/{sink-ee393b63.cjs.dev.js → sink-8d3427e7.cjs.dev.js} +17 -17
  375. package/dist/{state-dd1bd066.cjs.prod.js → state-0bdf02b7.cjs.prod.js} +2 -6
  376. package/dist/{state-8fbec044.cjs.dev.js → state-931050c4.cjs.dev.js} +2 -6
  377. package/dist/{stm-537da66b.cjs.dev.js → stm-8aca0022.cjs.dev.js} +3 -3
  378. package/dist/{stm-5043c3cb.cjs.prod.js → stm-f250b596.cjs.prod.js} +3 -3
  379. package/dist/{stream-c7eda5bc.cjs.dev.js → stream-34d80d2c.cjs.dev.js} +31 -28
  380. package/dist/{stream-13637643.cjs.prod.js → stream-ea4f4d44.cjs.prod.js} +31 -28
  381. package/dist/{synchronizedRef-37e32854.cjs.dev.js → synchronizedRef-a12fd967.cjs.dev.js} +6 -6
  382. package/dist/{synchronizedRef-b4cde4de.cjs.prod.js → synchronizedRef-ed8aa6ac.cjs.prod.js} +6 -6
  383. package/dist/{tArray-df1bae1c.cjs.dev.js → tArray-17f078f2.cjs.dev.js} +3 -3
  384. package/dist/{tArray-d5476a2d.cjs.prod.js → tArray-d184e22f.cjs.prod.js} +3 -3
  385. package/dist/{tMap-a3e14c05.cjs.dev.js → tMap-1a5aa78b.cjs.dev.js} +4 -4
  386. package/dist/{tMap-20ef43ea.cjs.prod.js → tMap-e219f30e.cjs.prod.js} +4 -4
  387. package/dist/{tQueue-bd3cf539.cjs.dev.js → tQueue-0a4fc773.cjs.dev.js} +3 -3
  388. package/dist/{tQueue-c02c22bd.cjs.prod.js → tQueue-47129ad0.cjs.prod.js} +3 -3
  389. package/dist/{tRef-49e44dde.cjs.prod.js → tRef-ab4c5713.cjs.prod.js} +1 -1
  390. package/dist/{tRef-75dd04b3.cjs.dev.js → tRef-b860ef05.cjs.dev.js} +1 -1
  391. package/internal/Context.esm.js +4 -4
  392. package/internal/Data.esm.js +4 -1
  393. package/internal/Differ/ChunkPatch.esm.js +1 -1
  394. package/internal/Differ/ContextPatch.esm.js +1 -1
  395. package/internal/Differ/HashMapPatch.esm.js +1 -1
  396. package/internal/Differ/HashSetPatch.esm.js +1 -1
  397. package/internal/Differ/OrPatch.esm.js +1 -1
  398. package/internal/Effectable.esm.js +9 -9
  399. package/internal/Either.esm.js +3 -3
  400. package/internal/Option.esm.js +3 -3
  401. package/internal/cache.esm.js +1 -1
  402. package/internal/cause.esm.js +6 -21
  403. package/internal/channel.esm.js +5 -5
  404. package/internal/core-effect.esm.js +6 -4
  405. package/internal/fiberRuntime.esm.js +3 -3
  406. package/internal/layer.esm.js +1 -1
  407. package/internal/metric/hook.esm.js +7 -3
  408. package/internal/metric/key.esm.js +2 -2
  409. package/internal/metric/keyType.esm.js +9 -2
  410. package/internal/metric/registry.esm.js +2 -2
  411. package/internal/metric/state.esm.js +2 -6
  412. package/internal/metric.esm.js +3 -3
  413. package/internal/{hub.esm.js → pubsub.esm.js} +108 -108
  414. package/internal/request.esm.js +1 -1
  415. package/internal/sink.esm.js +8 -8
  416. package/internal/stm/{tHub.esm.js → tPubSub.esm.js} +30 -30
  417. package/internal/stream.esm.js +23 -20
  418. package/internal/subscriptionRef.esm.js +8 -8
  419. package/package.json +66 -211
  420. package/src/.index.ts +30 -0
  421. package/src/Bigint.ts +497 -0
  422. package/src/Boolean.ts +261 -0
  423. package/src/Brand.ts +336 -0
  424. package/src/Cache.ts +250 -0
  425. package/src/Cause.ts +813 -0
  426. package/src/Channel.ts +2244 -0
  427. package/src/ChannelChildExecutorDecision.ts +138 -0
  428. package/src/ChannelMergeDecision.ts +94 -0
  429. package/src/ChannelMergeState.ts +166 -0
  430. package/src/ChannelMergeStrategy.ts +107 -0
  431. package/src/ChannelSingleProducerAsyncInput.ts +68 -0
  432. package/src/ChannelUpstreamPullRequest.ts +110 -0
  433. package/src/ChannelUpstreamPullStrategy.ts +120 -0
  434. package/src/Chunk.ts +1314 -0
  435. package/src/Clock.ts +111 -0
  436. package/src/Config.ts +447 -0
  437. package/src/ConfigError.ts +267 -0
  438. package/src/ConfigProvider.ts +296 -0
  439. package/src/ConfigProviderPathPatch.ts +100 -0
  440. package/src/ConfigSecret.ts +76 -0
  441. package/src/Console.ts +222 -0
  442. package/src/Context.ts +365 -0
  443. package/src/Data.ts +367 -0
  444. package/src/DefaultServices.ts +34 -0
  445. package/src/Deferred.ts +283 -0
  446. package/src/Differ.ts +406 -0
  447. package/src/Duration.ts +558 -0
  448. package/src/Effect.ts +5177 -0
  449. package/src/Effectable.ts +107 -0
  450. package/src/Either.ts +593 -0
  451. package/src/Encoding.ts +130 -0
  452. package/src/Equal.ts +64 -0
  453. package/src/Equivalence.ts +235 -0
  454. package/src/ExecutionStrategy.ts +111 -0
  455. package/src/Exit.ts +464 -0
  456. package/src/Fiber.ts +650 -0
  457. package/src/FiberId.ts +187 -0
  458. package/src/FiberRef.ts +399 -0
  459. package/src/FiberRefs.ts +160 -0
  460. package/src/FiberRefsPatch.ts +105 -0
  461. package/src/FiberStatus.ts +108 -0
  462. package/src/Function.ts +834 -0
  463. package/src/GlobalValue.ts +20 -0
  464. package/src/GroupBy.ts +102 -0
  465. package/src/HKT.ts +44 -0
  466. package/src/Hash.ts +162 -0
  467. package/src/HashMap.ts +373 -0
  468. package/src/HashSet.ts +300 -0
  469. package/src/Inspectable.ts +45 -0
  470. package/src/KeyedPool.ts +160 -0
  471. package/src/Layer.ts +866 -0
  472. package/src/List.ts +942 -0
  473. package/src/LogLevel.ts +266 -0
  474. package/src/LogSpan.ts +25 -0
  475. package/src/Logger.ts +321 -0
  476. package/src/Metric.ts +657 -0
  477. package/src/MetricBoundaries.ts +70 -0
  478. package/src/MetricHook.ts +139 -0
  479. package/src/MetricKey.ts +227 -0
  480. package/src/MetricKeyType.ts +257 -0
  481. package/src/MetricLabel.ts +47 -0
  482. package/src/MetricPair.ts +70 -0
  483. package/src/MetricPolling.ts +136 -0
  484. package/src/MetricRegistry.ts +47 -0
  485. package/src/MetricState.ts +256 -0
  486. package/src/MutableHashMap.ts +187 -0
  487. package/src/MutableHashSet.ts +118 -0
  488. package/src/MutableList.ts +289 -0
  489. package/src/MutableQueue.ts +227 -0
  490. package/src/MutableRef.ts +204 -0
  491. package/src/NonEmptyIterable.ts +30 -0
  492. package/src/Number.ts +406 -0
  493. package/src/Option.ts +1307 -0
  494. package/src/Order.ts +328 -0
  495. package/src/Ordering.ts +112 -0
  496. package/src/Pipeable.ts +318 -0
  497. package/src/Pool.ts +148 -0
  498. package/src/Predicate.ts +704 -0
  499. package/src/PubSub.ts +175 -0
  500. package/src/Queue.ts +575 -0
  501. package/src/Random.ts +115 -0
  502. package/src/ReadonlyArray.ts +2017 -0
  503. package/src/ReadonlyRecord.ts +641 -0
  504. package/src/RedBlackTree.ts +415 -0
  505. package/src/Ref.ts +159 -0
  506. package/src/Reloadable.ts +136 -0
  507. package/src/Request.ts +285 -0
  508. package/src/RequestBlock.ts +157 -0
  509. package/src/RequestResolver.ts +305 -0
  510. package/src/Resource.ts +97 -0
  511. package/src/Runtime.ts +216 -0
  512. package/src/RuntimeFlags.ts +336 -0
  513. package/src/RuntimeFlagsPatch.ts +183 -0
  514. package/src/STM.ts +2076 -0
  515. package/src/Schedule.ts +1396 -0
  516. package/src/ScheduleDecision.ts +62 -0
  517. package/src/ScheduleInterval.ts +151 -0
  518. package/src/ScheduleIntervals.ts +122 -0
  519. package/src/Scheduler.ts +359 -0
  520. package/src/Scope.ts +171 -0
  521. package/src/ScopedCache.ts +148 -0
  522. package/src/ScopedRef.ts +95 -0
  523. package/src/Sink.ts +1431 -0
  524. package/src/SortedMap.ts +229 -0
  525. package/src/SortedSet.ts +385 -0
  526. package/src/Stream.ts +4540 -0
  527. package/src/StreamEmit.ts +83 -0
  528. package/src/StreamHaltStrategy.ts +111 -0
  529. package/src/Streamable.ts +42 -0
  530. package/src/String.ts +682 -0
  531. package/src/Struct.ts +151 -0
  532. package/src/SubscriptionRef.ts +273 -0
  533. package/src/Supervisor.ts +239 -0
  534. package/src/Symbol.ts +28 -0
  535. package/src/SynchronizedRef.ts +249 -0
  536. package/src/TArray.ts +494 -0
  537. package/src/TDeferred.ts +99 -0
  538. package/src/TMap.ts +510 -0
  539. package/src/TPriorityQueue.ts +223 -0
  540. package/src/TPubSub.ts +187 -0
  541. package/src/TQueue.ts +431 -0
  542. package/src/TRandom.ts +129 -0
  543. package/src/TReentrantLock.ts +224 -0
  544. package/src/TRef.ts +176 -0
  545. package/src/TSemaphore.ts +129 -0
  546. package/src/TSet.ts +349 -0
  547. package/src/Take.ts +257 -0
  548. package/src/TestAnnotation.ts +166 -0
  549. package/src/TestAnnotationMap.ts +124 -0
  550. package/src/TestAnnotations.ts +113 -0
  551. package/src/TestClock.ts +552 -0
  552. package/src/TestConfig.ts +49 -0
  553. package/src/TestContext.ts +35 -0
  554. package/src/TestLive.ts +55 -0
  555. package/src/TestServices.ts +392 -0
  556. package/src/TestSized.ts +55 -0
  557. package/src/Tracer.ts +119 -0
  558. package/src/Tuple.ts +204 -0
  559. package/src/Types.ts +123 -0
  560. package/src/Unify.ts +118 -0
  561. package/src/Utils.ts +699 -0
  562. package/src/index.ts +840 -0
  563. package/src/internal/Common.ts +56 -0
  564. package/src/internal/Context.ts +252 -0
  565. package/src/internal/Data.ts +55 -0
  566. package/src/internal/Differ/ChunkPatch.ts +209 -0
  567. package/src/internal/Differ/ContextPatch.ts +229 -0
  568. package/src/internal/Differ/HashMapPatch.ts +217 -0
  569. package/src/internal/Differ/HashSetPatch.ts +174 -0
  570. package/src/internal/Differ/OrPatch.ts +296 -0
  571. package/src/internal/Differ.ts +184 -0
  572. package/src/internal/Effectable.ts +92 -0
  573. package/src/internal/Either.ts +107 -0
  574. package/src/internal/Encoding/Base64.ts +282 -0
  575. package/src/internal/Encoding/Base64Url.ts +28 -0
  576. package/src/internal/Encoding/Common.ts +24 -0
  577. package/src/internal/Encoding/Hex.ts +315 -0
  578. package/src/internal/HashMap/array.ts +49 -0
  579. package/src/internal/HashMap/bitwise.ts +32 -0
  580. package/src/internal/HashMap/config.ts +14 -0
  581. package/src/internal/HashMap/keySet.ts +8 -0
  582. package/src/internal/HashMap/node.ts +390 -0
  583. package/src/internal/HashMap.ts +533 -0
  584. package/src/internal/HashSet.ts +319 -0
  585. package/src/internal/Iterable.ts +54 -0
  586. package/src/internal/Option.ts +79 -0
  587. package/src/internal/ReadonlyArray.ts +8 -0
  588. package/src/internal/RedBlackTree/iterator.ts +207 -0
  589. package/src/internal/RedBlackTree/node.ts +48 -0
  590. package/src/internal/RedBlackTree.ts +1195 -0
  591. package/src/internal/Stack.ts +4 -0
  592. package/src/internal/blockedRequests.ts +512 -0
  593. package/src/internal/cache.ts +714 -0
  594. package/src/internal/cause.ts +1205 -0
  595. package/src/internal/channel/channelExecutor.ts +1193 -0
  596. package/src/internal/channel/channelState.ts +132 -0
  597. package/src/internal/channel/childExecutorDecision.ts +95 -0
  598. package/src/internal/channel/continuation.ts +171 -0
  599. package/src/internal/channel/mergeDecision.ts +115 -0
  600. package/src/internal/channel/mergeState.ts +120 -0
  601. package/src/internal/channel/mergeStrategy.ts +72 -0
  602. package/src/internal/channel/singleProducerAsyncInput.ts +261 -0
  603. package/src/internal/channel/subexecutor.ts +229 -0
  604. package/src/internal/channel/upstreamPullRequest.ts +83 -0
  605. package/src/internal/channel/upstreamPullStrategy.ts +86 -0
  606. package/src/internal/channel.ts +2516 -0
  607. package/src/internal/clock.ts +97 -0
  608. package/src/internal/completedRequestMap.ts +9 -0
  609. package/src/internal/concurrency.ts +83 -0
  610. package/src/internal/config.ts +598 -0
  611. package/src/internal/configError.ts +291 -0
  612. package/src/internal/configProvider/pathPatch.ts +97 -0
  613. package/src/internal/configProvider.ts +692 -0
  614. package/src/internal/configSecret.ts +71 -0
  615. package/src/internal/console.ts +136 -0
  616. package/src/internal/core-effect.ts +2146 -0
  617. package/src/internal/core-stream.ts +999 -0
  618. package/src/internal/core.ts +2765 -0
  619. package/src/internal/dataSource.ts +258 -0
  620. package/src/internal/defaultServices/console.ts +97 -0
  621. package/src/internal/defaultServices.ts +140 -0
  622. package/src/internal/deferred.ts +44 -0
  623. package/src/internal/effect/circular.ts +664 -0
  624. package/src/internal/executionStrategy.ts +72 -0
  625. package/src/internal/fiber.ts +350 -0
  626. package/src/internal/fiberId.ts +270 -0
  627. package/src/internal/fiberMessage.ts +85 -0
  628. package/src/internal/fiberRefs/patch.ts +144 -0
  629. package/src/internal/fiberRefs.ts +239 -0
  630. package/src/internal/fiberRuntime.ts +3477 -0
  631. package/src/internal/fiberScope.ts +72 -0
  632. package/src/internal/fiberStatus.ts +118 -0
  633. package/src/internal/groupBy.ts +516 -0
  634. package/src/internal/keyedPool.ts +240 -0
  635. package/src/internal/layer/circular.ts +203 -0
  636. package/src/internal/layer.ts +1230 -0
  637. package/src/internal/logSpan.ts +15 -0
  638. package/src/internal/logger-circular.ts +24 -0
  639. package/src/internal/logger.ts +307 -0
  640. package/src/internal/metric/boundaries.ts +72 -0
  641. package/src/internal/metric/hook.ts +459 -0
  642. package/src/internal/metric/key.ts +173 -0
  643. package/src/internal/metric/keyType.ts +263 -0
  644. package/src/internal/metric/label.ts +44 -0
  645. package/src/internal/metric/pair.ts +48 -0
  646. package/src/internal/metric/polling.ts +143 -0
  647. package/src/internal/metric/registry.ts +188 -0
  648. package/src/internal/metric/state.ts +286 -0
  649. package/src/internal/metric.ts +522 -0
  650. package/src/internal/opCodes/cause.ts +35 -0
  651. package/src/internal/opCodes/channel.ts +83 -0
  652. package/src/internal/opCodes/channelChildExecutorDecision.ts +17 -0
  653. package/src/internal/opCodes/channelMergeDecision.ts +11 -0
  654. package/src/internal/opCodes/channelMergeState.ts +17 -0
  655. package/src/internal/opCodes/channelMergeStrategy.ts +11 -0
  656. package/src/internal/opCodes/channelState.ts +23 -0
  657. package/src/internal/opCodes/channelUpstreamPullRequest.ts +11 -0
  658. package/src/internal/opCodes/channelUpstreamPullStrategy.ts +11 -0
  659. package/src/internal/opCodes/config.ts +65 -0
  660. package/src/internal/opCodes/configError.ts +35 -0
  661. package/src/internal/opCodes/continuation.ts +11 -0
  662. package/src/internal/opCodes/deferred.ts +11 -0
  663. package/src/internal/opCodes/effect.ts +83 -0
  664. package/src/internal/opCodes/layer.ts +53 -0
  665. package/src/internal/opCodes/streamHaltStrategy.ts +23 -0
  666. package/src/internal/pool.ts +499 -0
  667. package/src/internal/pubsub.ts +1557 -0
  668. package/src/internal/query.ts +199 -0
  669. package/src/internal/queue.ts +729 -0
  670. package/src/internal/random.ts +88 -0
  671. package/src/internal/ref.ts +164 -0
  672. package/src/internal/reloadable.ts +164 -0
  673. package/src/internal/request.ts +137 -0
  674. package/src/internal/resource.ts +64 -0
  675. package/src/internal/ringBuffer.ts +68 -0
  676. package/src/internal/runtime.ts +348 -0
  677. package/src/internal/runtimeFlags.ts +176 -0
  678. package/src/internal/runtimeFlagsPatch.ts +103 -0
  679. package/src/internal/schedule/decision.ts +47 -0
  680. package/src/internal/schedule/interval.ts +101 -0
  681. package/src/internal/schedule/intervals.ts +179 -0
  682. package/src/internal/schedule.ts +2096 -0
  683. package/src/internal/scopedCache.ts +634 -0
  684. package/src/internal/scopedRef.ts +133 -0
  685. package/src/internal/singleShotGen.ts +35 -0
  686. package/src/internal/sink.ts +2118 -0
  687. package/src/internal/stm/core.ts +804 -0
  688. package/src/internal/stm/opCodes/stm.ts +71 -0
  689. package/src/internal/stm/opCodes/stmState.ts +17 -0
  690. package/src/internal/stm/opCodes/strategy.ts +17 -0
  691. package/src/internal/stm/opCodes/tExit.ts +29 -0
  692. package/src/internal/stm/opCodes/tryCommit.ts +11 -0
  693. package/src/internal/stm/stm/entry.ts +59 -0
  694. package/src/internal/stm/stm/journal.ts +123 -0
  695. package/src/internal/stm/stm/opCodes/stm.ts +71 -0
  696. package/src/internal/stm/stm/opCodes/stmState.ts +17 -0
  697. package/src/internal/stm/stm/opCodes/strategy.ts +17 -0
  698. package/src/internal/stm/stm/opCodes/tExit.ts +29 -0
  699. package/src/internal/stm/stm/opCodes/tryCommit.ts +11 -0
  700. package/src/internal/stm/stm/stmState.ts +130 -0
  701. package/src/internal/stm/stm/tExit.ts +180 -0
  702. package/src/internal/stm/stm/tryCommit.ts +34 -0
  703. package/src/internal/stm/stm/txnId.ts +14 -0
  704. package/src/internal/stm/stm/versioned.ts +4 -0
  705. package/src/internal/stm/stm.ts +1491 -0
  706. package/src/internal/stm/tArray.ts +550 -0
  707. package/src/internal/stm/tDeferred.ts +79 -0
  708. package/src/internal/stm/tMap.ts +824 -0
  709. package/src/internal/stm/tPriorityQueue.ts +259 -0
  710. package/src/internal/stm/tPubSub.ts +542 -0
  711. package/src/internal/stm/tQueue.ts +400 -0
  712. package/src/internal/stm/tRandom.ts +140 -0
  713. package/src/internal/stm/tReentrantLock.ts +352 -0
  714. package/src/internal/stm/tRef.ts +190 -0
  715. package/src/internal/stm/tSemaphore.ts +113 -0
  716. package/src/internal/stm/tSet.ts +237 -0
  717. package/src/internal/stream/debounceState.ts +57 -0
  718. package/src/internal/stream/emit.ts +46 -0
  719. package/src/internal/stream/haltStrategy.ts +85 -0
  720. package/src/internal/stream/handoff.ts +185 -0
  721. package/src/internal/stream/handoffSignal.ts +59 -0
  722. package/src/internal/stream/pull.ts +35 -0
  723. package/src/internal/stream/sinkEndReason.ts +30 -0
  724. package/src/internal/stream/zipAllState.ts +88 -0
  725. package/src/internal/stream/zipChunksState.ts +56 -0
  726. package/src/internal/stream.ts +8089 -0
  727. package/src/internal/string-utils.ts +107 -0
  728. package/src/internal/subscriptionRef.ts +133 -0
  729. package/src/internal/supervisor/patch.ts +190 -0
  730. package/src/internal/supervisor.ts +301 -0
  731. package/src/internal/synchronizedRef.ts +115 -0
  732. package/src/internal/take.ts +198 -0
  733. package/src/internal/testing/sleep.ts +27 -0
  734. package/src/internal/testing/suspendedWarningData.ts +85 -0
  735. package/src/internal/testing/warningData.ts +94 -0
  736. package/src/internal/timeout.ts +23 -0
  737. package/src/internal/tracer.ts +74 -0
  738. package/Error/dist/effect-Error.cjs.d.mts +0 -2
  739. package/Error/dist/effect-Error.cjs.d.mts.map +0 -1
  740. package/Error/dist/effect-Error.cjs.d.ts +0 -2
  741. package/Error/dist/effect-Error.cjs.d.ts.map +0 -1
  742. package/Error/dist/effect-Error.cjs.dev.js +0 -140
  743. package/Error/dist/effect-Error.cjs.js +0 -7
  744. package/Error/dist/effect-Error.cjs.mjs +0 -4
  745. package/Error/dist/effect-Error.cjs.prod.js +0 -140
  746. package/Error/dist/effect-Error.esm.js +0 -47
  747. package/Error/package.json +0 -4
  748. package/Hub/dist/effect-Hub.cjs.d.mts +0 -2
  749. package/Hub/dist/effect-Hub.cjs.d.mts.map +0 -1
  750. package/Hub/dist/effect-Hub.cjs.d.ts +0 -2
  751. package/Hub/dist/effect-Hub.cjs.d.ts.map +0 -1
  752. package/Hub/dist/effect-Hub.cjs.js +0 -7
  753. package/Hub/package.json +0 -4
  754. package/THub/dist/effect-THub.cjs.d.mts +0 -2
  755. package/THub/dist/effect-THub.cjs.d.mts.map +0 -1
  756. package/THub/dist/effect-THub.cjs.d.ts +0 -2
  757. package/THub/dist/effect-THub.cjs.d.ts.map +0 -1
  758. package/THub/dist/effect-THub.cjs.js +0 -7
  759. package/THub/dist/effect-THub.esm.js +0 -157
  760. package/THub/package.json +0 -4
  761. package/dist/declarations/src/Error.d.ts +0 -37
  762. package/dist/declarations/src/Error.d.ts.map +0 -1
  763. package/dist/declarations/src/Hub.d.ts.map +0 -1
  764. package/dist/declarations/src/THub.d.ts +0 -146
  765. package/dist/declarations/src/THub.d.ts.map +0 -1
  766. package/dist/scopedRef-1c2c9acf.cjs.prod.js +0 -55
  767. package/dist/scopedRef-ab4c58b0.cjs.dev.js +0 -55
  768. /package/dist/{FiberId-e594f6e8.cjs.prod.js → FiberId-1d7ac632.cjs.prod.js} +0 -0
  769. /package/dist/{FiberId-557db880.cjs.dev.js → FiberId-d88ddce6.cjs.dev.js} +0 -0
  770. /package/dist/{RuntimeFlagsPatch-ea268c50.cjs.dev.js → RuntimeFlagsPatch-69102b03.cjs.dev.js} +0 -0
  771. /package/dist/{RuntimeFlagsPatch-e2769b87.cjs.prod.js → RuntimeFlagsPatch-866fa259.cjs.prod.js} +0 -0
  772. /package/dist/{boundaries-20cfad9d.cjs.prod.js → boundaries-9af538e3.cjs.prod.js} +0 -0
  773. /package/dist/{boundaries-3810d885.cjs.dev.js → boundaries-f212e414.cjs.dev.js} +0 -0
  774. /package/dist/{configError-33e55472.cjs.prod.js → configError-b43723af.cjs.prod.js} +0 -0
  775. /package/dist/{configError-240e9b61.cjs.dev.js → configError-d5efe9c0.cjs.dev.js} +0 -0
  776. /package/dist/{configSecret-e34c1b14.cjs.dev.js → configSecret-3e8ae336.cjs.dev.js} +0 -0
  777. /package/dist/{configSecret-d1caca55.cjs.prod.js → configSecret-e2faa181.cjs.prod.js} +0 -0
  778. /package/dist/{take-2af6e92a.cjs.prod.js → take-85daaf79.cjs.prod.js} +0 -0
  779. /package/dist/{take-df9480a8.cjs.dev.js → take-f9ef9e2e.cjs.dev.js} +0 -0
@@ -0,0 +1,2516 @@
1
+ import * as Cause from "../Cause"
2
+ import type * as Channel from "../Channel"
3
+ import type * as MergeDecision from "../ChannelMergeDecision"
4
+ import type * as MergeState from "../ChannelMergeState"
5
+ import type * as MergeStrategy from "../ChannelMergeStrategy"
6
+ import type * as SingleProducerAsyncInput from "../ChannelSingleProducerAsyncInput"
7
+ import * as Chunk from "../Chunk"
8
+ import * as Context from "../Context"
9
+ import * as Deferred from "../Deferred"
10
+ import * as Effect from "../Effect"
11
+ import * as Either from "../Either"
12
+ import * as Equal from "../Equal"
13
+ import * as Exit from "../Exit"
14
+ import * as Fiber from "../Fiber"
15
+ import { constVoid, dual, identity, pipe } from "../Function"
16
+ import type { LazyArg } from "../Function"
17
+ import * as Layer from "../Layer"
18
+ import * as Option from "../Option"
19
+ import type { Predicate } from "../Predicate"
20
+ import * as PubSub from "../PubSub"
21
+ import * as Queue from "../Queue"
22
+ import * as Ref from "../Ref"
23
+ import * as Scope from "../Scope"
24
+ import type * as Tracer from "../Tracer"
25
+ import * as executor from "./channel/channelExecutor"
26
+ import type * as ChannelState from "./channel/channelState"
27
+ import * as mergeDecision from "./channel/mergeDecision"
28
+ import * as mergeState from "./channel/mergeState"
29
+ import * as _mergeStrategy from "./channel/mergeStrategy"
30
+ import * as singleProducerAsyncInput from "./channel/singleProducerAsyncInput"
31
+ import * as core from "./core-stream"
32
+ import * as MergeDecisionOpCodes from "./opCodes/channelMergeDecision"
33
+ import * as MergeStateOpCodes from "./opCodes/channelMergeState"
34
+ import * as ChannelStateOpCodes from "./opCodes/channelState"
35
+
36
+ /** @internal */
37
+ export const acquireUseRelease = <Env, InErr, InElem, InDone, OutErr, OutElem1, OutDone, Acquired>(
38
+ acquire: Effect.Effect<Env, OutErr, Acquired>,
39
+ use: (a: Acquired) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem1, OutDone>,
40
+ release: (a: Acquired, exit: Exit.Exit<OutErr, OutDone>) => Effect.Effect<Env, never, any>
41
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem1, OutDone> =>
42
+ core.flatMap(
43
+ core.fromEffect(
44
+ Ref.make<
45
+ (exit: Exit.Exit<OutErr, OutDone>) => Effect.Effect<Env, never, any>
46
+ >(() => Effect.unit)
47
+ ),
48
+ (ref) =>
49
+ pipe(
50
+ core.fromEffect(
51
+ Effect.uninterruptible(
52
+ Effect.tap(
53
+ acquire,
54
+ (a) => Ref.set(ref, (exit) => release(a, exit))
55
+ )
56
+ )
57
+ ),
58
+ core.flatMap(use),
59
+ core.ensuringWith((exit) => Effect.flatMap(Ref.get(ref), (f) => f(exit)))
60
+ )
61
+ )
62
+
63
+ /** @internal */
64
+ export const as = dual<
65
+ <OutDone2>(
66
+ value: OutDone2
67
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
68
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
69
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone2>,
70
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, OutDone2>(
71
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
72
+ value: OutDone2
73
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone2>
74
+ >(2, <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, OutDone2>(
75
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
76
+ value: OutDone2
77
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone2> => map(self, () => value))
78
+
79
+ /** @internal */
80
+ export const asUnit = <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
81
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
82
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, void> => map(self, constVoid)
83
+
84
+ /** @internal */
85
+ export const buffer = <InErr, InElem, InDone>(
86
+ options: {
87
+ readonly empty: InElem
88
+ readonly isEmpty: Predicate<InElem>
89
+ readonly ref: Ref.Ref<InElem>
90
+ }
91
+ ): Channel.Channel<never, InErr, InElem, InDone, InErr, InElem, InDone> =>
92
+ core.suspend<never, InErr, InElem, InDone, InErr, InElem, InDone>(() => {
93
+ const doBuffer = <InErr, InElem, InDone>(
94
+ empty: InElem,
95
+ isEmpty: Predicate<InElem>,
96
+ ref: Ref.Ref<InElem>
97
+ ): Channel.Channel<never, InErr, InElem, InDone, InErr, InElem, InDone> =>
98
+ unwrap(
99
+ Ref.modify(ref, (inElem) =>
100
+ isEmpty(inElem) ?
101
+ [
102
+ core.readWith({
103
+ onInput: (input: InElem) =>
104
+ core.flatMap(
105
+ core.write(input),
106
+ () => doBuffer<InErr, InElem, InDone>(empty, isEmpty, ref)
107
+ ),
108
+ onFailure: (error: InErr) => core.fail(error),
109
+ onDone: (done: InDone) => core.succeedNow(done)
110
+ }),
111
+ inElem
112
+ ] as const :
113
+ [
114
+ core.flatMap(
115
+ core.write(inElem),
116
+ () => doBuffer<InErr, InElem, InDone>(empty, isEmpty, ref)
117
+ ),
118
+ empty
119
+ ] as const)
120
+ )
121
+ return doBuffer(options.empty, options.isEmpty, options.ref)
122
+ })
123
+
124
+ /** @internal */
125
+ export const bufferChunk = <InErr, InElem, InDone>(
126
+ ref: Ref.Ref<Chunk.Chunk<InElem>>
127
+ ): Channel.Channel<never, InErr, Chunk.Chunk<InElem>, InDone, InErr, Chunk.Chunk<InElem>, InDone> =>
128
+ buffer<InErr, Chunk.Chunk<InElem>, InDone>({
129
+ empty: Chunk.empty(),
130
+ isEmpty: Chunk.isEmpty,
131
+ ref
132
+ })
133
+
134
+ /** @internal */
135
+ export const catchAll = dual<
136
+ <Env1, InErr1, InElem1, InDone1, OutErr, OutErr1, OutElem1, OutDone1>(
137
+ f: (error: OutErr) => Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>
138
+ ) => <Env, InErr, InElem, InDone, OutElem, OutDone>(
139
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
140
+ ) => Channel.Channel<
141
+ Env1 | Env,
142
+ InErr & InErr1,
143
+ InElem & InElem1,
144
+ InDone & InDone1,
145
+ OutErr1,
146
+ OutElem1 | OutElem,
147
+ OutDone1 | OutDone
148
+ >,
149
+ <Env, InErr, InElem, InDone, OutElem, OutDone, Env1, InErr1, InElem1, InDone1, OutErr, OutErr1, OutElem1, OutDone1>(
150
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
151
+ f: (error: OutErr) => Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>
152
+ ) => Channel.Channel<
153
+ Env1 | Env,
154
+ InErr & InErr1,
155
+ InElem & InElem1,
156
+ InDone & InDone1,
157
+ OutErr1,
158
+ OutElem1 | OutElem,
159
+ OutDone1 | OutDone
160
+ >
161
+ >(
162
+ 2,
163
+ <Env, InErr, InElem, InDone, OutElem, OutDone, Env1, InErr1, InElem1, InDone1, OutErr, OutErr1, OutElem1, OutDone1>(
164
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
165
+ f: (error: OutErr) => Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>
166
+ ): Channel.Channel<
167
+ Env | Env1,
168
+ InErr & InErr1,
169
+ InElem & InElem1,
170
+ InDone & InDone1,
171
+ OutErr1,
172
+ OutElem | OutElem1,
173
+ OutDone | OutDone1
174
+ > =>
175
+ core.catchAllCause(self, (cause) =>
176
+ Either.match(Cause.failureOrCause(cause), {
177
+ onLeft: f,
178
+ onRight: core.failCause
179
+ }))
180
+ )
181
+
182
+ /** @internal */
183
+ export const concatMap = dual<
184
+ <OutElem, OutElem2, Env2, InErr2, InElem2, InDone2, OutErr2, _>(
185
+ f: (o: OutElem) => Channel.Channel<Env2, InErr2, InElem2, InDone2, OutErr2, OutElem2, _>
186
+ ) => <Env, InErr, InElem, InDone, OutErr, OutDone>(
187
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
188
+ ) => Channel.Channel<
189
+ Env2 | Env,
190
+ InErr & InErr2,
191
+ InElem & InElem2,
192
+ InDone & InDone2,
193
+ OutErr2 | OutErr,
194
+ OutElem2,
195
+ unknown
196
+ >,
197
+ <Env, InErr, InElem, InDone, OutErr, OutDone, OutElem, OutElem2, Env2, InErr2, InElem2, InDone2, OutErr2, _>(
198
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
199
+ f: (o: OutElem) => Channel.Channel<Env2, InErr2, InElem2, InDone2, OutErr2, OutElem2, _>
200
+ ) => Channel.Channel<
201
+ Env2 | Env,
202
+ InErr & InErr2,
203
+ InElem & InElem2,
204
+ InDone & InDone2,
205
+ OutErr2 | OutErr,
206
+ OutElem2,
207
+ unknown
208
+ >
209
+ >(2, <Env, InErr, InElem, InDone, OutErr, OutDone, OutElem, OutElem2, Env2, InErr2, InElem2, InDone2, OutErr2, _>(
210
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
211
+ f: (o: OutElem) => Channel.Channel<Env2, InErr2, InElem2, InDone2, OutErr2, OutElem2, _>
212
+ ): Channel.Channel<
213
+ Env | Env2,
214
+ InErr & InErr2,
215
+ InElem & InElem2,
216
+ InDone & InDone2,
217
+ OutErr | OutErr2,
218
+ OutElem2,
219
+ unknown
220
+ > => core.concatMapWith(self, f, () => void 0, () => void 0))
221
+
222
+ /** @internal */
223
+ export const collect = dual<
224
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutElem2, OutDone>(
225
+ pf: (o: OutElem) => Option.Option<OutElem2>
226
+ ) => (
227
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
228
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem2, OutDone>,
229
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutElem2, OutDone>(
230
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
231
+ pf: (o: OutElem) => Option.Option<OutElem2>
232
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem2, OutDone>
233
+ >(2, <Env, InErr, InElem, InDone, OutErr, OutElem, OutElem2, OutDone>(
234
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
235
+ pf: (o: OutElem) => Option.Option<OutElem2>
236
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem2, OutDone> => {
237
+ const collector: Channel.Channel<Env, OutErr, OutElem, OutDone, OutErr, OutElem2, OutDone> = core
238
+ .readWith({
239
+ onInput: (out) =>
240
+ Option.match(pf(out), {
241
+ onNone: () => collector,
242
+ onSome: (out2) => core.flatMap(core.write(out2), () => collector)
243
+ }),
244
+ onFailure: core.fail,
245
+ onDone: core.succeedNow
246
+ })
247
+ return core.pipeTo(self, collector)
248
+ })
249
+
250
+ /** @internal */
251
+ export const concatOut = <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
252
+ self: Channel.Channel<
253
+ Env,
254
+ InErr,
255
+ InElem,
256
+ InDone,
257
+ OutErr,
258
+ Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, unknown>,
259
+ OutDone
260
+ >
261
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, unknown> => core.concatAll(self)
262
+
263
+ /** @internal */
264
+ export const mapInput = dual<
265
+ <InDone0, InDone>(
266
+ f: (a: InDone0) => InDone
267
+ ) => <Env, InErr, InElem, OutErr, OutElem, OutDone>(
268
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
269
+ ) => Channel.Channel<Env, InErr, InElem, InDone0, OutErr, OutElem, OutDone>,
270
+ <Env, InErr, InElem, OutErr, OutElem, OutDone, InDone0, InDone>(
271
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
272
+ f: (a: InDone0) => InDone
273
+ ) => Channel.Channel<Env, InErr, InElem, InDone0, OutErr, OutElem, OutDone>
274
+ >(2, <Env, InErr, InElem, OutErr, OutElem, OutDone, InDone0, InDone>(
275
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
276
+ f: (a: InDone0) => InDone
277
+ ): Channel.Channel<Env, InErr, InElem, InDone0, OutErr, OutElem, OutDone> => {
278
+ const reader: Channel.Channel<never, InErr, InElem, InDone0, InErr, InElem, InDone> = core.readWith({
279
+ onInput: (inElem: InElem) => core.flatMap(core.write(inElem), () => reader),
280
+ onFailure: core.fail,
281
+ onDone: (done: InDone0) => core.succeedNow(f(done))
282
+ })
283
+ return core.pipeTo(reader, self)
284
+ })
285
+
286
+ /** @internal */
287
+ export const mapInputEffect = dual<
288
+ <Env1, InErr, InDone0, InDone>(
289
+ f: (i: InDone0) => Effect.Effect<Env1, InErr, InDone>
290
+ ) => <Env, InElem, OutErr, OutElem, OutDone>(
291
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
292
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone0, OutErr, OutElem, OutDone>,
293
+ <Env, InElem, OutErr, OutElem, OutDone, Env1, InErr, InDone0, InDone>(
294
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
295
+ f: (i: InDone0) => Effect.Effect<Env1, InErr, InDone>
296
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone0, OutErr, OutElem, OutDone>
297
+ >(2, <Env, InElem, OutErr, OutElem, OutDone, Env1, InErr, InDone0, InDone>(
298
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
299
+ f: (i: InDone0) => Effect.Effect<Env1, InErr, InDone>
300
+ ): Channel.Channel<Env | Env1, InErr, InElem, InDone0, OutErr, OutElem, OutDone> => {
301
+ const reader: Channel.Channel<Env1, InErr, InElem, InDone0, InErr, InElem, InDone> = core.readWith({
302
+ onInput: (inElem) => core.flatMap(core.write(inElem), () => reader),
303
+ onFailure: core.fail,
304
+ onDone: (done) => core.fromEffect(f(done))
305
+ })
306
+ return core.pipeTo(reader, self)
307
+ })
308
+
309
+ /** @internal */
310
+ export const mapInputError = dual<
311
+ <InErr0, InErr>(
312
+ f: (a: InErr0) => InErr
313
+ ) => <Env, InElem, InDone, OutErr, OutElem, OutDone>(
314
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
315
+ ) => Channel.Channel<Env, InErr0, InElem, InDone, OutErr, OutElem, OutDone>,
316
+ <Env, InElem, InDone, OutErr, OutElem, OutDone, InErr0, InErr>(
317
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
318
+ f: (a: InErr0) => InErr
319
+ ) => Channel.Channel<Env, InErr0, InElem, InDone, OutErr, OutElem, OutDone>
320
+ >(2, <Env, InElem, InDone, OutErr, OutElem, OutDone, InErr0, InErr>(
321
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
322
+ f: (a: InErr0) => InErr
323
+ ): Channel.Channel<Env, InErr0, InElem, InDone, OutErr, OutElem, OutDone> => {
324
+ const reader: Channel.Channel<never, InErr0, InElem, InDone, InErr, InElem, InDone> = core.readWith({
325
+ onInput: (inElem: InElem) => core.flatMap(core.write(inElem), () => reader),
326
+ onFailure: (error) => core.fail(f(error)),
327
+ onDone: core.succeedNow
328
+ })
329
+ return core.pipeTo(reader, self)
330
+ })
331
+
332
+ /** @internal */
333
+ export const mapInputErrorEffect = dual<
334
+ <Env1, InErr0, InErr, InDone>(
335
+ f: (error: InErr0) => Effect.Effect<Env1, InErr, InDone>
336
+ ) => <Env, InElem, OutErr, OutElem, OutDone>(
337
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
338
+ ) => Channel.Channel<Env1 | Env, InErr0, InElem, InDone, OutErr, OutElem, OutDone>,
339
+ <Env, InElem, OutErr, OutElem, OutDone, Env1, InErr0, InErr, InDone>(
340
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
341
+ f: (error: InErr0) => Effect.Effect<Env1, InErr, InDone>
342
+ ) => Channel.Channel<Env1 | Env, InErr0, InElem, InDone, OutErr, OutElem, OutDone>
343
+ >(2, <Env, InElem, OutErr, OutElem, OutDone, Env1, InErr0, InErr, InDone>(
344
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
345
+ f: (error: InErr0) => Effect.Effect<Env1, InErr, InDone>
346
+ ): Channel.Channel<Env | Env1, InErr0, InElem, InDone, OutErr, OutElem, OutDone> => {
347
+ const reader: Channel.Channel<Env1, InErr0, InElem, InDone, InErr, InElem, InDone> = core.readWith({
348
+ onInput: (inElem) => core.flatMap(core.write(inElem), () => reader),
349
+ onFailure: (error) => core.fromEffect(f(error)),
350
+ onDone: core.succeedNow
351
+ })
352
+ return core.pipeTo(reader, self)
353
+ })
354
+
355
+ /** @internal */
356
+ export const mapInputIn = dual<
357
+ <InElem0, InElem>(
358
+ f: (a: InElem0) => InElem
359
+ ) => <Env, InErr, InDone, OutErr, OutElem, OutDone>(
360
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
361
+ ) => Channel.Channel<Env, InErr, InElem0, InDone, OutErr, OutElem, OutDone>,
362
+ <Env, InErr, InDone, OutErr, OutElem, OutDone, InElem0, InElem>(
363
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
364
+ f: (a: InElem0) => InElem
365
+ ) => Channel.Channel<Env, InErr, InElem0, InDone, OutErr, OutElem, OutDone>
366
+ >(2, <Env, InErr, InDone, OutErr, OutElem, OutDone, InElem0, InElem>(
367
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
368
+ f: (a: InElem0) => InElem
369
+ ): Channel.Channel<Env, InErr, InElem0, InDone, OutErr, OutElem, OutDone> => {
370
+ const reader: Channel.Channel<never, InErr, InElem0, InDone, InErr, InElem, InDone> = core.readWith({
371
+ onInput: (inElem) => core.flatMap(core.write(f(inElem)), () => reader),
372
+ onFailure: core.fail,
373
+ onDone: core.succeedNow
374
+ })
375
+ return core.pipeTo(reader, self)
376
+ })
377
+
378
+ export const mapInputInEffect = dual<
379
+ <Env1, InErr, InElem0, InElem>(
380
+ f: (a: InElem0) => Effect.Effect<Env1, InErr, InElem>
381
+ ) => <Env, InDone, OutErr, OutElem, OutDone>(
382
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
383
+ ) => Channel.Channel<Env1 | Env, InErr, InElem0, InDone, OutErr, OutElem, OutDone>,
384
+ <Env, InDone, OutErr, OutElem, OutDone, Env1, InErr, InElem0, InElem>(
385
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
386
+ f: (a: InElem0) => Effect.Effect<Env1, InErr, InElem>
387
+ ) => Channel.Channel<Env1 | Env, InErr, InElem0, InDone, OutErr, OutElem, OutDone>
388
+ >(2, <Env, InDone, OutErr, OutElem, OutDone, Env1, InErr, InElem0, InElem>(
389
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
390
+ f: (a: InElem0) => Effect.Effect<Env1, InErr, InElem>
391
+ ): Channel.Channel<Env | Env1, InErr, InElem0, InDone, OutErr, OutElem, OutDone> => {
392
+ const reader: Channel.Channel<Env1, InErr, InElem0, InDone, InErr, InElem, InDone> = core.readWith({
393
+ onInput: (inElem) => core.flatMap(core.flatMap(core.fromEffect(f(inElem)), core.write), () => reader),
394
+ onFailure: core.fail,
395
+ onDone: core.succeedNow
396
+ })
397
+ return core.pipeTo(reader, self)
398
+ })
399
+
400
+ /** @internal */
401
+ export const doneCollect = <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
402
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
403
+ ): Channel.Channel<
404
+ Env,
405
+ InErr,
406
+ InElem,
407
+ InDone,
408
+ OutErr,
409
+ never,
410
+ readonly [Chunk.Chunk<OutElem>, OutDone]
411
+ > =>
412
+ core.suspend(() => {
413
+ const builder: Array<OutElem> = []
414
+ return pipe(
415
+ core.pipeTo(self, doneCollectReader<Env, OutErr, OutElem, OutDone>(builder)),
416
+ core.flatMap((outDone) => core.succeed([Chunk.unsafeFromArray(builder), outDone] as const))
417
+ )
418
+ })
419
+
420
+ /** @internal */
421
+ const doneCollectReader = <Env, OutErr, OutElem, OutDone>(
422
+ builder: Array<OutElem>
423
+ ): Channel.Channel<Env, OutErr, OutElem, OutDone, OutErr, never, OutDone> => {
424
+ return core.readWith({
425
+ onInput: (outElem) =>
426
+ core.flatMap(
427
+ core.sync(() => {
428
+ builder.push(outElem)
429
+ }),
430
+ () => doneCollectReader<Env, OutErr, OutElem, OutDone>(builder)
431
+ ),
432
+ onFailure: core.fail,
433
+ onDone: core.succeed
434
+ })
435
+ }
436
+
437
+ /** @internal */
438
+ export const drain = <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
439
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
440
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr, never, OutDone> => {
441
+ const drainer: Channel.Channel<Env, OutErr, OutElem, OutDone, OutErr, never, OutDone> = core
442
+ .readWithCause({
443
+ onInput: () => drainer,
444
+ onFailure: core.failCause,
445
+ onDone: core.succeed
446
+ })
447
+ return core.pipeTo(self, drainer)
448
+ }
449
+
450
+ /** @internal */
451
+ export const emitCollect = <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
452
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
453
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr, readonly [Chunk.Chunk<OutElem>, OutDone], void> =>
454
+ core.flatMap(doneCollect(self), core.write)
455
+
456
+ /** @internal */
457
+ export const ensuring = dual<
458
+ <Env1, Z>(
459
+ finalizer: Effect.Effect<Env1, never, Z>
460
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
461
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
462
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
463
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, Z>(
464
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
465
+ finalizer: Effect.Effect<Env1, never, Z>
466
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
467
+ >(2, <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, Z>(
468
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
469
+ finalizer: Effect.Effect<Env1, never, Z>
470
+ ): Channel.Channel<Env | Env1, InErr, InElem, InDone, OutErr, OutElem, OutDone> =>
471
+ core.ensuringWith(self, () => finalizer))
472
+
473
+ /** @internal */
474
+ export const context = <Env>(): Channel.Channel<
475
+ Env,
476
+ unknown,
477
+ unknown,
478
+ unknown,
479
+ never,
480
+ never,
481
+ Context.Context<Env>
482
+ > => core.fromEffect(Effect.context<Env>())
483
+
484
+ /** @internal */
485
+ export const contextWith = <Env, OutDone>(
486
+ f: (env: Context.Context<Env>) => OutDone
487
+ ): Channel.Channel<Env, unknown, unknown, unknown, never, never, OutDone> => map(context<Env>(), f)
488
+
489
+ /** @internal */
490
+ export const contextWithChannel = <
491
+ Env,
492
+ Env1,
493
+ InErr,
494
+ InElem,
495
+ InDone,
496
+ OutErr,
497
+ OutElem,
498
+ OutDone
499
+ >(
500
+ f: (env: Context.Context<Env>) => Channel.Channel<Env1, InErr, InElem, InDone, OutErr, OutElem, OutDone>
501
+ ): Channel.Channel<Env | Env1, InErr, InElem, InDone, OutErr, OutElem, OutDone> => core.flatMap(context<Env>(), f)
502
+
503
+ /** @internal */
504
+ export const contextWithEffect = <Env, Env1, OutErr, OutDone>(
505
+ f: (env: Context.Context<Env>) => Effect.Effect<Env1, OutErr, OutDone>
506
+ ): Channel.Channel<Env | Env1, unknown, unknown, unknown, OutErr, never, OutDone> => mapEffect(context<Env>(), f)
507
+
508
+ /** @internal */
509
+ export const flatten = <
510
+ Env,
511
+ InErr,
512
+ InElem,
513
+ InDone,
514
+ OutErr,
515
+ OutElem,
516
+ Env1,
517
+ InErr1,
518
+ InElem1,
519
+ InDone1,
520
+ OutErr1,
521
+ OutElem1,
522
+ OutDone2
523
+ >(
524
+ self: Channel.Channel<
525
+ Env,
526
+ InErr,
527
+ InElem,
528
+ InDone,
529
+ OutErr,
530
+ OutElem,
531
+ Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone2>
532
+ >
533
+ ): Channel.Channel<
534
+ Env | Env1,
535
+ InErr & InErr1,
536
+ InElem & InElem1,
537
+ InDone & InDone1,
538
+ OutErr | OutErr1,
539
+ OutElem | OutElem1,
540
+ OutDone2
541
+ > => core.flatMap(self, identity)
542
+
543
+ /** @internal */
544
+ export const foldChannel = dual<
545
+ <
546
+ Env1,
547
+ Env2,
548
+ InErr1,
549
+ InErr2,
550
+ InElem1,
551
+ InElem2,
552
+ InDone1,
553
+ InDone2,
554
+ OutErr,
555
+ OutErr1,
556
+ OutErr2,
557
+ OutElem1,
558
+ OutElem2,
559
+ OutDone,
560
+ OutDone1,
561
+ OutDone2
562
+ >(
563
+ options: {
564
+ readonly onFailure: (
565
+ error: OutErr
566
+ ) => Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>
567
+ readonly onSuccess: (
568
+ done: OutDone
569
+ ) => Channel.Channel<Env2, InErr2, InElem2, InDone2, OutErr2, OutElem2, OutDone2>
570
+ }
571
+ ) => <Env, InErr, InElem, InDone, OutElem>(
572
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
573
+ ) => Channel.Channel<
574
+ Env1 | Env2 | Env,
575
+ InErr & InErr1 & InErr2,
576
+ InElem & InElem1 & InElem2,
577
+ InDone & InDone1 & InDone2,
578
+ OutErr1 | OutErr2,
579
+ OutElem1 | OutElem2 | OutElem,
580
+ OutDone1 | OutDone2
581
+ >,
582
+ <
583
+ Env,
584
+ InErr,
585
+ InElem,
586
+ InDone,
587
+ OutElem,
588
+ Env1,
589
+ Env2,
590
+ InErr1,
591
+ InErr2,
592
+ InElem1,
593
+ InElem2,
594
+ InDone1,
595
+ InDone2,
596
+ OutErr,
597
+ OutErr1,
598
+ OutErr2,
599
+ OutElem1,
600
+ OutElem2,
601
+ OutDone,
602
+ OutDone1,
603
+ OutDone2
604
+ >(
605
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
606
+ options: {
607
+ readonly onFailure: (
608
+ error: OutErr
609
+ ) => Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>
610
+ readonly onSuccess: (
611
+ done: OutDone
612
+ ) => Channel.Channel<Env2, InErr2, InElem2, InDone2, OutErr2, OutElem2, OutDone2>
613
+ }
614
+ ) => Channel.Channel<
615
+ Env1 | Env2 | Env,
616
+ InErr & InErr1 & InErr2,
617
+ InElem & InElem1 & InElem2,
618
+ InDone & InDone1 & InDone2,
619
+ OutErr1 | OutErr2,
620
+ OutElem1 | OutElem2 | OutElem,
621
+ OutDone1 | OutDone2
622
+ >
623
+ >(2, <
624
+ Env,
625
+ InErr,
626
+ InElem,
627
+ InDone,
628
+ OutElem,
629
+ Env1,
630
+ Env2,
631
+ InErr1,
632
+ InErr2,
633
+ InElem1,
634
+ InElem2,
635
+ InDone1,
636
+ InDone2,
637
+ OutErr,
638
+ OutErr1,
639
+ OutErr2,
640
+ OutElem1,
641
+ OutElem2,
642
+ OutDone,
643
+ OutDone1,
644
+ OutDone2
645
+ >(
646
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
647
+ options: {
648
+ readonly onFailure: (error: OutErr) => Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>
649
+ readonly onSuccess: (done: OutDone) => Channel.Channel<Env2, InErr2, InElem2, InDone2, OutErr2, OutElem2, OutDone2>
650
+ }
651
+ ): Channel.Channel<
652
+ Env | Env1 | Env2,
653
+ InErr & InErr1 & InErr2,
654
+ InElem & InElem1 & InElem2,
655
+ InDone & InDone1 & InDone2,
656
+ OutErr2 | OutErr1,
657
+ OutElem | OutElem2 | OutElem1,
658
+ OutDone2 | OutDone1
659
+ > =>
660
+ core.foldCauseChannel(self, {
661
+ onFailure: (cause) => {
662
+ const either = Cause.failureOrCause(cause)
663
+ switch (either._tag) {
664
+ case "Left": {
665
+ return options.onFailure(either.left)
666
+ }
667
+ case "Right": {
668
+ return core.failCause(either.right)
669
+ }
670
+ }
671
+ },
672
+ onSuccess: options.onSuccess
673
+ }))
674
+
675
+ /** @internal */
676
+ export const fromEither = <E, A>(
677
+ either: Either.Either<E, A>
678
+ ): Channel.Channel<never, unknown, unknown, unknown, E, never, A> =>
679
+ core.suspend(() => Either.match(either, { onLeft: core.fail, onRight: core.succeed }))
680
+
681
+ /** @internal */
682
+ export const fromInput = <Err, Elem, Done>(
683
+ input: SingleProducerAsyncInput.AsyncInputConsumer<Err, Elem, Done>
684
+ ): Channel.Channel<never, unknown, unknown, unknown, Err, Elem, Done> =>
685
+ unwrap(
686
+ input.takeWith(
687
+ core.failCause,
688
+ (elem) => core.flatMap(core.write(elem), () => fromInput(input)),
689
+ core.succeed
690
+ )
691
+ )
692
+
693
+ /** @internal */
694
+ export const fromPubSub = <Err, Done, Elem>(
695
+ pubsub: PubSub.PubSub<Either.Either<Exit.Exit<Err, Done>, Elem>>
696
+ ): Channel.Channel<never, unknown, unknown, unknown, Err, Elem, Done> =>
697
+ unwrapScoped(Effect.map(PubSub.subscribe(pubsub), fromQueue))
698
+
699
+ /** @internal */
700
+ export const fromPubSubScoped = <Err, Done, Elem>(
701
+ pubsub: PubSub.PubSub<Either.Either<Exit.Exit<Err, Done>, Elem>>
702
+ ): Effect.Effect<Scope.Scope, never, Channel.Channel<never, unknown, unknown, unknown, Err, Elem, Done>> =>
703
+ Effect.map(PubSub.subscribe(pubsub), fromQueue)
704
+
705
+ /** @internal */
706
+ export const fromOption = <A>(
707
+ option: Option.Option<A>
708
+ ): Channel.Channel<never, unknown, unknown, unknown, Option.Option<never>, never, A> =>
709
+ core.suspend(() =>
710
+ Option.match(option, {
711
+ onNone: () => core.fail(Option.none()),
712
+ onSome: core.succeed
713
+ })
714
+ )
715
+
716
+ /** @internal */
717
+ export const fromQueue = <Err, Elem, Done>(
718
+ queue: Queue.Dequeue<Either.Either<Exit.Exit<Err, Done>, Elem>>
719
+ ): Channel.Channel<never, unknown, unknown, unknown, Err, Elem, Done> => core.suspend(() => fromQueueInternal(queue))
720
+
721
+ /** @internal */
722
+ const fromQueueInternal = <Err, Elem, Done>(
723
+ queue: Queue.Dequeue<Either.Either<Exit.Exit<Err, Done>, Elem>>
724
+ ): Channel.Channel<never, unknown, unknown, unknown, Err, Elem, Done> =>
725
+ pipe(
726
+ core.fromEffect(Queue.take(queue)),
727
+ core.flatMap(Either.match({
728
+ onLeft: Exit.match({
729
+ onFailure: core.failCause,
730
+ onSuccess: core.succeedNow
731
+ }),
732
+ onRight: (elem) =>
733
+ core.flatMap(
734
+ core.write(elem),
735
+ () => fromQueueInternal<Err, Elem, Done>(queue)
736
+ )
737
+ }))
738
+ )
739
+
740
+ /** @internal */
741
+ export const identityChannel = <Err, Elem, Done>(): Channel.Channel<never, Err, Elem, Done, Err, Elem, Done> =>
742
+ core.readWith({
743
+ onInput: (input: Elem) => core.flatMap(core.write(input), () => identityChannel<Err, Elem, Done>()),
744
+ onFailure: core.fail,
745
+ onDone: core.succeedNow
746
+ })
747
+
748
+ /** @internal */
749
+ export const interruptWhen = dual<
750
+ <Env1, OutErr1, OutDone1>(
751
+ effect: Effect.Effect<Env1, OutErr1, OutDone1>
752
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
753
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
754
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone, OutErr1 | OutErr, OutElem, OutDone1 | OutDone>,
755
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, OutErr1, OutDone1>(
756
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
757
+ effect: Effect.Effect<Env1, OutErr1, OutDone1>
758
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone, OutErr1 | OutErr, OutElem, OutDone1 | OutDone>
759
+ >(2, <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, OutErr1, OutDone1>(
760
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
761
+ effect: Effect.Effect<Env1, OutErr1, OutDone1>
762
+ ): Channel.Channel<
763
+ Env1 | Env,
764
+ InErr,
765
+ InElem,
766
+ InDone,
767
+ OutErr | OutErr1,
768
+ OutElem,
769
+ OutDone | OutDone1
770
+ > =>
771
+ mergeWith(self, {
772
+ other: core.fromEffect(effect),
773
+ onSelfDone: (selfDone) => mergeDecision.Done(Effect.suspend(() => selfDone)),
774
+ onOtherDone: (effectDone) => mergeDecision.Done(Effect.suspend(() => effectDone))
775
+ }))
776
+
777
+ /** @internal */
778
+ export const interruptWhenDeferred = dual<
779
+ <OutErr1, OutDone1>(
780
+ deferred: Deferred.Deferred<OutErr1, OutDone1>
781
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
782
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
783
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr1 | OutErr, OutElem, OutDone1 | OutDone>,
784
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, OutErr1, OutDone1>(
785
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
786
+ deferred: Deferred.Deferred<OutErr1, OutDone1>
787
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr1 | OutErr, OutElem, OutDone1 | OutDone>
788
+ >(2, <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, OutErr1, OutDone1>(
789
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
790
+ deferred: Deferred.Deferred<OutErr1, OutDone1>
791
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr | OutErr1, OutElem, OutDone | OutDone1> =>
792
+ interruptWhen(self, Deferred.await(deferred)))
793
+
794
+ /** @internal */
795
+ export const map = dual<
796
+ <OutDone, OutDone2>(
797
+ f: (out: OutDone) => OutDone2
798
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem>(
799
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
800
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone2>,
801
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, OutDone2>(
802
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
803
+ f: (out: OutDone) => OutDone2
804
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone2>
805
+ >(2, <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, OutDone2>(
806
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
807
+ f: (out: OutDone) => OutDone2
808
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone2> =>
809
+ core.flatMap(self, (a) => core.sync(() => f(a))))
810
+
811
+ /** @internal */
812
+ export const mapEffect = dual<
813
+ <Env1, OutErr1, OutDone, OutDone1>(
814
+ f: (o: OutDone) => Effect.Effect<Env1, OutErr1, OutDone1>
815
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem>(
816
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
817
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone, OutErr1 | OutErr, OutElem, OutDone1>,
818
+ <Env, InErr, InElem, InDone, OutErr, OutElem, Env1, OutErr1, OutDone, OutDone1>(
819
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
820
+ f: (o: OutDone) => Effect.Effect<Env1, OutErr1, OutDone1>
821
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone, OutErr1 | OutErr, OutElem, OutDone1>
822
+ >(2, <Env, InErr, InElem, InDone, OutErr, OutElem, Env1, OutErr1, OutDone, OutDone1>(
823
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
824
+ f: (o: OutDone) => Effect.Effect<Env1, OutErr1, OutDone1>
825
+ ): Channel.Channel<Env | Env1, InErr, InElem, InDone, OutErr | OutErr1, OutElem, OutDone1> =>
826
+ core.flatMap(self, (z) => core.fromEffect(f(z))))
827
+
828
+ /** @internal */
829
+ export const mapError = dual<
830
+ <OutErr, OutErr2>(
831
+ f: (err: OutErr) => OutErr2
832
+ ) => <Env, InErr, InElem, InDone, OutElem, OutDone>(
833
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
834
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr2, OutElem, OutDone>,
835
+ <Env, InErr, InElem, InDone, OutElem, OutDone, OutErr, OutErr2>(
836
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
837
+ f: (err: OutErr) => OutErr2
838
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr2, OutElem, OutDone>
839
+ >(2, <Env, InErr, InElem, InDone, OutElem, OutDone, OutErr, OutErr2>(
840
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
841
+ f: (err: OutErr) => OutErr2
842
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr2, OutElem, OutDone> => mapErrorCause(self, Cause.map(f)))
843
+
844
+ /** @internal */
845
+ export const mapErrorCause = dual<
846
+ <OutErr, OutErr2>(
847
+ f: (cause: Cause.Cause<OutErr>) => Cause.Cause<OutErr2>
848
+ ) => <Env, InErr, InElem, InDone, OutElem, OutDone>(
849
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
850
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr2, OutElem, OutDone>,
851
+ <Env, InErr, InElem, InDone, OutElem, OutDone, OutErr, OutErr2>(
852
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
853
+ f: (cause: Cause.Cause<OutErr>) => Cause.Cause<OutErr2>
854
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr2, OutElem, OutDone>
855
+ >(2, <Env, InErr, InElem, InDone, OutElem, OutDone, OutErr, OutErr2>(
856
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
857
+ f: (cause: Cause.Cause<OutErr>) => Cause.Cause<OutErr2>
858
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr2, OutElem, OutDone> =>
859
+ core.catchAllCause(self, (cause) => core.failCause(f(cause))))
860
+
861
+ /** @internal */
862
+ export const mapOut = dual<
863
+ <OutElem, OutElem2>(
864
+ f: (o: OutElem) => OutElem2
865
+ ) => <Env, InErr, InElem, InDone, OutErr, OutDone>(
866
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
867
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem2, OutDone>,
868
+ <Env, InErr, InElem, InDone, OutErr, OutDone, OutElem, OutElem2>(
869
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
870
+ f: (o: OutElem) => OutElem2
871
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem2, OutDone>
872
+ >(2, <Env, InErr, InElem, InDone, OutErr, OutDone, OutElem, OutElem2>(
873
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
874
+ f: (o: OutElem) => OutElem2
875
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem2, OutDone> => {
876
+ const reader: Channel.Channel<Env, OutErr, OutElem, OutDone, OutErr, OutElem2, OutDone> = core
877
+ .readWith({
878
+ onInput: (outElem) => core.flatMap(core.write(f(outElem)), () => reader),
879
+ onFailure: core.fail,
880
+ onDone: core.succeedNow
881
+ })
882
+ return core.pipeTo(self, reader)
883
+ })
884
+
885
+ /** @internal */
886
+ export const mapOutEffect = dual<
887
+ <OutElem, Env1, OutErr1, OutElem1>(
888
+ f: (o: OutElem) => Effect.Effect<Env1, OutErr1, OutElem1>
889
+ ) => <Env, InErr, InElem, InDone, OutErr, OutDone>(
890
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
891
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone, OutErr1 | OutErr, OutElem1, OutDone>,
892
+ <Env, InErr, InElem, InDone, OutErr, OutDone, OutElem, Env1, OutErr1, OutElem1>(
893
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
894
+ f: (o: OutElem) => Effect.Effect<Env1, OutErr1, OutElem1>
895
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone, OutErr1 | OutErr, OutElem1, OutDone>
896
+ >(2, <Env, InErr, InElem, InDone, OutErr, OutDone, OutElem, Env1, OutErr1, OutElem1>(
897
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
898
+ f: (o: OutElem) => Effect.Effect<Env1, OutErr1, OutElem1>
899
+ ): Channel.Channel<Env | Env1, InErr, InElem, InDone, OutErr | OutErr1, OutElem1, OutDone> => {
900
+ const reader: Channel.Channel<Env | Env1, OutErr, OutElem, OutDone, OutErr | OutErr1, OutElem1, OutDone> = core
901
+ .readWithCause({
902
+ onInput: (outElem) =>
903
+ pipe(
904
+ core.fromEffect(f(outElem)),
905
+ core.flatMap(core.write),
906
+ core.flatMap(() => reader)
907
+ ),
908
+ onFailure: core.failCause,
909
+ onDone: core.succeedNow
910
+ })
911
+ return core.pipeTo(self, reader)
912
+ })
913
+
914
+ /** @internal */
915
+ export const mapOutEffectPar = dual<
916
+ <OutElem, Env1, OutErr1, OutElem1>(
917
+ f: (o: OutElem) => Effect.Effect<Env1, OutErr1, OutElem1>,
918
+ n: number
919
+ ) => <Env, InErr, InElem, InDone, OutErr, OutDone>(
920
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
921
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone, OutErr1 | OutErr, OutElem1, OutDone>,
922
+ <Env, InErr, InElem, InDone, OutErr, OutDone, OutElem, Env1, OutErr1, OutElem1>(
923
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
924
+ f: (o: OutElem) => Effect.Effect<Env1, OutErr1, OutElem1>,
925
+ n: number
926
+ ) => Channel.Channel<Env1 | Env, InErr, InElem, InDone, OutErr1 | OutErr, OutElem1, OutDone>
927
+ >(3, <Env, InErr, InElem, InDone, OutErr, OutDone, OutElem, Env1, OutErr1, OutElem1>(
928
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
929
+ f: (o: OutElem) => Effect.Effect<Env1, OutErr1, OutElem1>,
930
+ n: number
931
+ ): Channel.Channel<Env | Env1, InErr, InElem, InDone, OutErr | OutErr1, OutElem1, OutDone> =>
932
+ pipe(
933
+ Effect.gen(function*($) {
934
+ const queue = yield* $(
935
+ Effect.acquireRelease(
936
+ Queue.bounded<Effect.Effect<Env1, OutErr | OutErr1, Either.Either<OutDone, OutElem1>>>(n),
937
+ (queue) => Queue.shutdown(queue)
938
+ )
939
+ )
940
+ const errorSignal = yield* $(Deferred.make<OutErr1, never>())
941
+ const withPermits = n === Number.POSITIVE_INFINITY ?
942
+ ((_: number) => identity) :
943
+ (yield* $(Effect.makeSemaphore(n))).withPermits
944
+ const pull = yield* $(toPull(self))
945
+ yield* $(
946
+ Effect.matchCauseEffect(pull, {
947
+ onFailure: (cause) => Queue.offer(queue, Effect.failCause(cause)),
948
+ onSuccess: (either) =>
949
+ Either.match(
950
+ either,
951
+ {
952
+ onLeft: (outDone) => {
953
+ const lock = withPermits(n)
954
+ return Effect.zipRight(
955
+ Effect.interruptible(lock(Effect.unit)),
956
+ Effect.asUnit(Queue.offer(
957
+ queue,
958
+ Effect.succeed(Either.left(outDone))
959
+ ))
960
+ )
961
+ },
962
+ onRight: (outElem) =>
963
+ Effect.gen(function*($) {
964
+ const deferred = yield* $(Deferred.make<OutErr1, OutElem1>())
965
+ const latch = yield* $(Deferred.make<never, void>())
966
+ yield* $(Effect.asUnit(Queue.offer(
967
+ queue,
968
+ Effect.map(Deferred.await(deferred), Either.right)
969
+ )))
970
+ yield* $(
971
+ Deferred.succeed<never, void>(latch, void 0),
972
+ Effect.zipRight(
973
+ pipe(
974
+ Effect.uninterruptibleMask((restore) =>
975
+ pipe(
976
+ Effect.exit(restore(Deferred.await(errorSignal))),
977
+ Effect.raceFirst(Effect.exit(restore(f(outElem)))),
978
+ // TODO: remove
979
+ Effect.flatMap((exit) => Effect.suspend(() => exit))
980
+ )
981
+ ),
982
+ Effect.tapErrorCause((cause) => Deferred.failCause(errorSignal, cause)),
983
+ Effect.intoDeferred(deferred)
984
+ )
985
+ ),
986
+ withPermits(1),
987
+ Effect.forkScoped
988
+ )
989
+ yield* $(Deferred.await(latch))
990
+ })
991
+ }
992
+ )
993
+ }),
994
+ Effect.forever,
995
+ Effect.interruptible,
996
+ Effect.forkScoped
997
+ )
998
+ return queue
999
+ }),
1000
+ Effect.map((queue) => {
1001
+ const consumer: Channel.Channel<
1002
+ Env1,
1003
+ unknown,
1004
+ unknown,
1005
+ unknown,
1006
+ OutErr | OutErr1,
1007
+ OutElem1,
1008
+ OutDone
1009
+ > = unwrap(
1010
+ Effect.matchCause(Effect.flatten(Queue.take(queue)), {
1011
+ onFailure: core.failCause,
1012
+ onSuccess: Either.match({
1013
+ onLeft: core.succeedNow,
1014
+ onRight: (outElem) => core.flatMap(core.write(outElem), () => consumer)
1015
+ })
1016
+ })
1017
+ )
1018
+ return consumer
1019
+ }),
1020
+ unwrapScoped
1021
+ ))
1022
+
1023
+ /** @internal */
1024
+ export const mergeAll = (
1025
+ options: {
1026
+ readonly concurrency: number | "unbounded"
1027
+ readonly bufferSize?: number
1028
+ readonly mergeStrategy?: MergeStrategy.MergeStrategy
1029
+ }
1030
+ ) => {
1031
+ return <
1032
+ Env,
1033
+ Env1,
1034
+ InErr,
1035
+ InErr1,
1036
+ InElem,
1037
+ InElem1,
1038
+ InDone,
1039
+ InDone1,
1040
+ OutErr,
1041
+ OutErr1,
1042
+ OutElem
1043
+ >(
1044
+ channels: Channel.Channel<
1045
+ Env,
1046
+ InErr,
1047
+ InElem,
1048
+ InDone,
1049
+ OutErr,
1050
+ Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem, unknown>,
1051
+ unknown
1052
+ >
1053
+ ): Channel.Channel<
1054
+ Env | Env1,
1055
+ InErr & InErr1,
1056
+ InElem & InElem1,
1057
+ InDone & InDone1,
1058
+ OutErr | OutErr1,
1059
+ OutElem,
1060
+ unknown
1061
+ > => mergeAllWith(options)(channels, constVoid)
1062
+ }
1063
+
1064
+ /** @internal */
1065
+ export const mergeAllUnbounded = <
1066
+ Env,
1067
+ Env1,
1068
+ InErr,
1069
+ InErr1,
1070
+ InElem,
1071
+ InElem1,
1072
+ InDone,
1073
+ InDone1,
1074
+ OutErr,
1075
+ OutErr1,
1076
+ OutElem
1077
+ >(
1078
+ channels: Channel.Channel<
1079
+ Env,
1080
+ InErr,
1081
+ InElem,
1082
+ InDone,
1083
+ OutErr,
1084
+ Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem, unknown>,
1085
+ unknown
1086
+ >
1087
+ ): Channel.Channel<
1088
+ Env | Env1,
1089
+ InErr & InErr1,
1090
+ InElem & InElem1,
1091
+ InDone & InDone1,
1092
+ OutErr | OutErr1,
1093
+ OutElem,
1094
+ unknown
1095
+ > => mergeAllWith({ concurrency: "unbounded" })(channels, constVoid)
1096
+
1097
+ /** @internal */
1098
+ export const mergeAllUnboundedWith = <
1099
+ Env,
1100
+ Env1,
1101
+ InErr,
1102
+ InErr1,
1103
+ InElem,
1104
+ InElem1,
1105
+ InDone,
1106
+ InDone1,
1107
+ OutErr,
1108
+ OutErr1,
1109
+ OutElem,
1110
+ OutDone
1111
+ >(
1112
+ channels: Channel.Channel<
1113
+ Env,
1114
+ InErr,
1115
+ InElem,
1116
+ InDone,
1117
+ OutErr,
1118
+ Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem, OutDone>,
1119
+ OutDone
1120
+ >,
1121
+ f: (o1: OutDone, o2: OutDone) => OutDone
1122
+ ): Channel.Channel<
1123
+ Env | Env1,
1124
+ InErr & InErr1,
1125
+ InElem & InElem1,
1126
+ InDone & InDone1,
1127
+ OutErr | OutErr1,
1128
+ OutElem,
1129
+ OutDone
1130
+ > => mergeAllWith({ concurrency: "unbounded" })(channels, f)
1131
+
1132
+ /** @internal */
1133
+ export const mergeAllWith = (
1134
+ {
1135
+ bufferSize = 16,
1136
+ concurrency,
1137
+ mergeStrategy = _mergeStrategy.BackPressure()
1138
+ }: {
1139
+ readonly concurrency: number | "unbounded"
1140
+ readonly bufferSize?: number
1141
+ readonly mergeStrategy?: MergeStrategy.MergeStrategy
1142
+ }
1143
+ ) =>
1144
+ <
1145
+ Env,
1146
+ Env1,
1147
+ InErr,
1148
+ InErr1,
1149
+ InElem,
1150
+ InElem1,
1151
+ InDone,
1152
+ InDone1,
1153
+ OutErr,
1154
+ OutErr1,
1155
+ OutElem,
1156
+ OutDone
1157
+ >(
1158
+ channels: Channel.Channel<
1159
+ Env,
1160
+ InErr,
1161
+ InElem,
1162
+ InDone,
1163
+ OutErr,
1164
+ Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem, OutDone>,
1165
+ OutDone
1166
+ >,
1167
+ f: (o1: OutDone, o2: OutDone) => OutDone
1168
+ ): Channel.Channel<
1169
+ Env | Env1,
1170
+ InErr & InErr1,
1171
+ InElem & InElem1,
1172
+ InDone & InDone1,
1173
+ OutErr | OutErr1,
1174
+ OutElem,
1175
+ OutDone
1176
+ > =>
1177
+ pipe(
1178
+ Effect.gen(function*($) {
1179
+ const input = yield* $(singleProducerAsyncInput.make<
1180
+ InErr & InErr1,
1181
+ InElem & InElem1,
1182
+ InDone & InDone1
1183
+ >())
1184
+ const queueReader = fromInput(input)
1185
+ const queue = yield* $(
1186
+ Effect.acquireRelease(
1187
+ Queue.bounded<Effect.Effect<Env, OutErr | OutErr1, Either.Either<OutDone, OutElem>>>(bufferSize),
1188
+ (queue) => Queue.shutdown(queue)
1189
+ )
1190
+ )
1191
+ const cancelers = yield* $(
1192
+ Effect.acquireRelease(
1193
+ Queue.unbounded<Deferred.Deferred<never, void>>(),
1194
+ (queue) => Queue.shutdown(queue)
1195
+ )
1196
+ )
1197
+ const lastDone = yield* $(Ref.make<Option.Option<OutDone>>(Option.none()))
1198
+ const errorSignal = yield* $(Deferred.make<never, void>())
1199
+ const withPermits = concurrency === "unbounded" ?
1200
+ ((_: number) => identity) :
1201
+ (yield* $(Effect.makeSemaphore(concurrency))).withPermits
1202
+ const pull = yield* $(toPull(channels))
1203
+ const evaluatePull = (
1204
+ pull: Effect.Effect<Env | Env1, OutErr | OutErr1, Either.Either<OutDone, OutElem>>
1205
+ ) =>
1206
+ pipe(
1207
+ Effect.flatMap(
1208
+ pull,
1209
+ Either.match({
1210
+ onLeft: (done) => Effect.succeed(Option.some(done)),
1211
+ onRight: (outElem) =>
1212
+ Effect.as(
1213
+ Queue.offer(queue, Effect.succeed(Either.right(outElem))),
1214
+ Option.none()
1215
+ )
1216
+ })
1217
+ ),
1218
+ Effect.repeatUntil(Option.isSome),
1219
+ Effect.flatMap(Option.match({
1220
+ onNone: () => Effect.unit,
1221
+ onSome: (outDone) =>
1222
+ Ref.update(
1223
+ lastDone,
1224
+ Option.match({
1225
+ onNone: () => Option.some(outDone),
1226
+ onSome: (lastDone) => Option.some(f(lastDone, outDone))
1227
+ })
1228
+ )
1229
+ })),
1230
+ Effect.catchAllCause((cause) =>
1231
+ Cause.isInterrupted(cause) ?
1232
+ Effect.failCause(cause) :
1233
+ pipe(
1234
+ Queue.offer(queue, Effect.failCause(cause)),
1235
+ Effect.zipRight(Deferred.succeed<never, void>(errorSignal, void 0)),
1236
+ Effect.asUnit
1237
+ )
1238
+ )
1239
+ )
1240
+ yield* $(
1241
+ Effect.matchCauseEffect(pull, {
1242
+ onFailure: (cause) =>
1243
+ pipe(
1244
+ Queue.offer(queue, Effect.failCause(cause)),
1245
+ Effect.zipRight(Effect.succeed(false))
1246
+ ),
1247
+ onSuccess: Either.match({
1248
+ onLeft: (outDone) =>
1249
+ Effect.raceWith(Deferred.await(errorSignal), withPermits(concurrency as number)(Effect.unit), {
1250
+ onSelfDone: (_, permitAcquisition) => pipe(Fiber.interrupt(permitAcquisition), Effect.as(false)),
1251
+ onOtherDone: (_, failureAwait) =>
1252
+ pipe(
1253
+ Fiber.interrupt(failureAwait),
1254
+ Effect.zipRight(
1255
+ pipe(
1256
+ Ref.get(lastDone),
1257
+ Effect.flatMap(Option.match({
1258
+ onNone: () => Queue.offer(queue, Effect.succeed(Either.left(outDone))),
1259
+ onSome: (lastDone) => Queue.offer(queue, Effect.succeed(Either.left(f(lastDone, outDone))))
1260
+ })),
1261
+ Effect.as(false)
1262
+ )
1263
+ )
1264
+ )
1265
+ }),
1266
+ onRight: (channel) =>
1267
+ pipe(
1268
+ mergeStrategy,
1269
+ _mergeStrategy.match({
1270
+ onBackPressure: () =>
1271
+ Effect.gen(function*($) {
1272
+ const latch = yield* $(Deferred.make<never, void>())
1273
+ const raceEffects: Effect.Effect<Env | Env1, OutErr | OutErr1, void> = pipe(
1274
+ queueReader,
1275
+ core.pipeTo(channel),
1276
+ toPull,
1277
+ Effect.flatMap((pull) =>
1278
+ pipe(
1279
+ evaluatePull(pull),
1280
+ Effect.race(Deferred.await(errorSignal))
1281
+ )
1282
+ ),
1283
+ Effect.scoped
1284
+ )
1285
+ yield* $(
1286
+ Deferred.succeed<never, void>(latch, void 0),
1287
+ Effect.zipRight(raceEffects),
1288
+ withPermits(1),
1289
+ Effect.forkScoped
1290
+ )
1291
+ yield* $(Deferred.await(latch))
1292
+ const errored = yield* $(Deferred.isDone(errorSignal))
1293
+ return !errored
1294
+ }),
1295
+ onBufferSliding: () =>
1296
+ Effect.gen(function*($) {
1297
+ const canceler = yield* $(Deferred.make<never, void>())
1298
+ const latch = yield* $(Deferred.make<never, void>())
1299
+ const size = yield* $(Queue.size(cancelers))
1300
+ yield* $(
1301
+ Queue.take(cancelers),
1302
+ Effect.flatMap((_) => Deferred.succeed<never, void>(_, void 0)),
1303
+ Effect.when(() => concurrency === "unbounded" ? false : size >= concurrency)
1304
+ )
1305
+ yield* $(Queue.offer(cancelers, canceler))
1306
+ const raceEffects: Effect.Effect<Env | Env1, OutErr | OutErr1, void> = pipe(
1307
+ queueReader,
1308
+ core.pipeTo(channel),
1309
+ toPull,
1310
+ Effect.flatMap((pull) =>
1311
+ pipe(
1312
+ evaluatePull(pull),
1313
+ Effect.race(Deferred.await(errorSignal)),
1314
+ Effect.race(Deferred.await(canceler))
1315
+ )
1316
+ ),
1317
+ Effect.scoped
1318
+ )
1319
+ yield* $(
1320
+ Deferred.succeed<never, void>(latch, void 0),
1321
+ Effect.zipRight(raceEffects),
1322
+ withPermits(1),
1323
+ Effect.forkScoped
1324
+ )
1325
+ yield* $(Deferred.await(latch))
1326
+ const errored = yield* $(Deferred.isDone(errorSignal))
1327
+ return !errored
1328
+ })
1329
+ })
1330
+ )
1331
+ })
1332
+ }),
1333
+ Effect.repeatWhile(identity),
1334
+ Effect.forkScoped
1335
+ )
1336
+ return [queue, input] as const
1337
+ }),
1338
+ Effect.map(([queue, input]) => {
1339
+ const consumer: Channel.Channel<
1340
+ Env | Env1,
1341
+ unknown,
1342
+ unknown,
1343
+ unknown,
1344
+ OutErr | OutErr1,
1345
+ OutElem,
1346
+ OutDone
1347
+ > = pipe(
1348
+ Queue.take(queue),
1349
+ Effect.flatten,
1350
+ Effect.matchCause({
1351
+ onFailure: core.failCause,
1352
+ onSuccess: Either.match({
1353
+ onLeft: core.succeedNow,
1354
+ onRight: (outElem) => core.flatMap(core.write(outElem), () => consumer)
1355
+ })
1356
+ }),
1357
+ unwrap
1358
+ )
1359
+ return core.embedInput(consumer, input)
1360
+ }),
1361
+ unwrapScoped
1362
+ )
1363
+
1364
+ /** @internal */
1365
+ export const mergeMap = dual<
1366
+ <OutElem, Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, Z>(
1367
+ f: (outElem: OutElem) => Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, Z>,
1368
+ options: {
1369
+ readonly concurrency: number | "unbounded"
1370
+ readonly bufferSize?: number
1371
+ readonly mergeStrategy?: MergeStrategy.MergeStrategy
1372
+ }
1373
+ ) => <Env, InErr, InElem, InDone, OutErr, OutDone>(
1374
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
1375
+ ) => Channel.Channel<
1376
+ Env1 | Env,
1377
+ InErr & InErr1,
1378
+ InElem & InElem1,
1379
+ InDone & InDone1,
1380
+ OutErr1 | OutErr,
1381
+ OutElem1,
1382
+ unknown
1383
+ >,
1384
+ <Env, InErr, InElem, InDone, OutErr, OutDone, OutElem, Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, Z>(
1385
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1386
+ f: (outElem: OutElem) => Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, Z>,
1387
+ options: {
1388
+ readonly concurrency: number | "unbounded"
1389
+ readonly bufferSize?: number
1390
+ readonly mergeStrategy?: MergeStrategy.MergeStrategy
1391
+ }
1392
+ ) => Channel.Channel<
1393
+ Env1 | Env,
1394
+ InErr & InErr1,
1395
+ InElem & InElem1,
1396
+ InDone & InDone1,
1397
+ OutErr1 | OutErr,
1398
+ OutElem1,
1399
+ unknown
1400
+ >
1401
+ >(3, <Env, InErr, InElem, InDone, OutErr, OutDone, OutElem, Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, Z>(
1402
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1403
+ f: (outElem: OutElem) => Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, Z>,
1404
+ options: {
1405
+ readonly concurrency: number | "unbounded"
1406
+ readonly bufferSize?: number
1407
+ readonly mergeStrategy?: MergeStrategy.MergeStrategy
1408
+ }
1409
+ ): Channel.Channel<
1410
+ Env | Env1,
1411
+ InErr & InErr1,
1412
+ InElem & InElem1,
1413
+ InDone & InDone1,
1414
+ OutErr | OutErr1,
1415
+ OutElem1,
1416
+ unknown
1417
+ > => mergeAll(options)(mapOut(self, f)))
1418
+
1419
+ /** @internal */
1420
+ export const mergeOut = dual<
1421
+ (
1422
+ n: number
1423
+ ) => <Env, Env1, InErr, InErr1, InElem, InElem1, InDone, InDone1, OutErr, OutErr1, OutElem1, OutDone, Z>(
1424
+ self: Channel.Channel<
1425
+ Env,
1426
+ InErr,
1427
+ InElem,
1428
+ InDone,
1429
+ OutErr,
1430
+ Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, Z>,
1431
+ OutDone
1432
+ >
1433
+ ) => Channel.Channel<
1434
+ Env | Env1,
1435
+ InErr & InErr1,
1436
+ InElem & InElem1,
1437
+ InDone & InDone1,
1438
+ OutErr | OutErr1,
1439
+ OutElem1,
1440
+ unknown
1441
+ >,
1442
+ <Env, Env1, InErr, InErr1, InElem, InElem1, InDone, InDone1, OutErr, OutErr1, OutElem1, OutDone, Z>(
1443
+ self: Channel.Channel<
1444
+ Env,
1445
+ InErr,
1446
+ InElem,
1447
+ InDone,
1448
+ OutErr,
1449
+ Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, Z>,
1450
+ OutDone
1451
+ >,
1452
+ n: number
1453
+ ) => Channel.Channel<
1454
+ Env | Env1,
1455
+ InErr & InErr1,
1456
+ InElem & InElem1,
1457
+ InDone & InDone1,
1458
+ OutErr | OutErr1,
1459
+ OutElem1,
1460
+ unknown
1461
+ >
1462
+ >(2, <Env, Env1, InErr, InErr1, InElem, InElem1, InDone, InDone1, OutErr, OutErr1, OutElem1, OutDone, Z>(
1463
+ self: Channel.Channel<
1464
+ Env,
1465
+ InErr,
1466
+ InElem,
1467
+ InDone,
1468
+ OutErr,
1469
+ Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, Z>,
1470
+ OutDone
1471
+ >,
1472
+ n: number
1473
+ ): Channel.Channel<
1474
+ Env | Env1,
1475
+ InErr & InErr1,
1476
+ InElem & InElem1,
1477
+ InDone & InDone1,
1478
+ OutErr | OutErr1,
1479
+ OutElem1,
1480
+ unknown
1481
+ > => mergeAll({ concurrency: n })(mapOut(self, identity)))
1482
+
1483
+ /** @internal */
1484
+ export const mergeOutWith = dual<
1485
+ <OutDone1>(
1486
+ n: number,
1487
+ f: (o1: OutDone1, o2: OutDone1) => OutDone1
1488
+ ) => <Env, Env1, InErr, InErr1, InElem, InElem1, InDone, InDone1, OutErr, OutErr1, OutElem1>(
1489
+ self: Channel.Channel<
1490
+ Env,
1491
+ InErr,
1492
+ InElem,
1493
+ InDone,
1494
+ OutErr,
1495
+ Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
1496
+ OutDone1
1497
+ >
1498
+ ) => Channel.Channel<
1499
+ Env | Env1,
1500
+ InErr & InErr1,
1501
+ InElem & InElem1,
1502
+ InDone & InDone1,
1503
+ OutErr | OutErr1,
1504
+ OutElem1,
1505
+ OutDone1
1506
+ >,
1507
+ <Env, Env1, InErr, InErr1, InElem, InElem1, InDone, InDone1, OutErr, OutErr1, OutElem1, OutDone1>(
1508
+ self: Channel.Channel<
1509
+ Env,
1510
+ InErr,
1511
+ InElem,
1512
+ InDone,
1513
+ OutErr,
1514
+ Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
1515
+ OutDone1
1516
+ >,
1517
+ n: number,
1518
+ f: (o1: OutDone1, o2: OutDone1) => OutDone1
1519
+ ) => Channel.Channel<
1520
+ Env | Env1,
1521
+ InErr & InErr1,
1522
+ InElem & InElem1,
1523
+ InDone & InDone1,
1524
+ OutErr | OutErr1,
1525
+ OutElem1,
1526
+ OutDone1
1527
+ >
1528
+ >(3, <Env, Env1, InErr, InErr1, InElem, InElem1, InDone, InDone1, OutErr, OutErr1, OutElem1, OutDone1>(
1529
+ self: Channel.Channel<
1530
+ Env,
1531
+ InErr,
1532
+ InElem,
1533
+ InDone,
1534
+ OutErr,
1535
+ Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
1536
+ OutDone1
1537
+ >,
1538
+ n: number,
1539
+ f: (o1: OutDone1, o2: OutDone1) => OutDone1
1540
+ ): Channel.Channel<
1541
+ Env | Env1,
1542
+ InErr & InErr1,
1543
+ InElem & InElem1,
1544
+ InDone & InDone1,
1545
+ OutErr | OutErr1,
1546
+ OutElem1,
1547
+ OutDone1
1548
+ > => mergeAllWith({ concurrency: n })(mapOut(self, identity), f))
1549
+
1550
+ /** @internal */
1551
+ export const mergeWith = dual<
1552
+ <Env1, InErr1, InElem1, InDone1, OutErr, OutErr1, OutErr2, OutErr3, OutElem1, OutDone, OutDone1, OutDone2, OutDone3>(
1553
+ options: {
1554
+ readonly other: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>
1555
+ readonly onSelfDone: (
1556
+ exit: Exit.Exit<OutErr, OutDone>
1557
+ ) => MergeDecision.MergeDecision<Env1, OutErr1, OutDone1, OutErr2, OutDone2>
1558
+ readonly onOtherDone: (
1559
+ ex: Exit.Exit<OutErr1, OutDone1>
1560
+ ) => MergeDecision.MergeDecision<Env1, OutErr, OutDone, OutErr3, OutDone3>
1561
+ }
1562
+ ) => <Env, InErr, InElem, InDone, OutElem>(
1563
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
1564
+ ) => Channel.Channel<
1565
+ Env1 | Env,
1566
+ InErr & InErr1,
1567
+ InElem & InElem1,
1568
+ InDone & InDone1,
1569
+ OutErr2 | OutErr3,
1570
+ OutElem1 | OutElem,
1571
+ OutDone2 | OutDone3
1572
+ >,
1573
+ <
1574
+ Env,
1575
+ InErr,
1576
+ InElem,
1577
+ InDone,
1578
+ OutElem,
1579
+ Env1,
1580
+ InErr1,
1581
+ InElem1,
1582
+ InDone1,
1583
+ OutErr,
1584
+ OutErr1,
1585
+ OutErr2,
1586
+ OutErr3,
1587
+ OutElem1,
1588
+ OutDone,
1589
+ OutDone1,
1590
+ OutDone2,
1591
+ OutDone3
1592
+ >(
1593
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1594
+ options: {
1595
+ readonly other: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>
1596
+ readonly onSelfDone: (
1597
+ exit: Exit.Exit<OutErr, OutDone>
1598
+ ) => MergeDecision.MergeDecision<Env1, OutErr1, OutDone1, OutErr2, OutDone2>
1599
+ readonly onOtherDone: (
1600
+ ex: Exit.Exit<OutErr1, OutDone1>
1601
+ ) => MergeDecision.MergeDecision<Env1, OutErr, OutDone, OutErr3, OutDone3>
1602
+ }
1603
+ ) => Channel.Channel<
1604
+ Env1 | Env,
1605
+ InErr & InErr1,
1606
+ InElem & InElem1,
1607
+ InDone & InDone1,
1608
+ OutErr2 | OutErr3,
1609
+ OutElem1 | OutElem,
1610
+ OutDone2 | OutDone3
1611
+ >
1612
+ >(2, <
1613
+ Env,
1614
+ InErr,
1615
+ InElem,
1616
+ InDone,
1617
+ OutElem,
1618
+ Env1,
1619
+ InErr1,
1620
+ InElem1,
1621
+ InDone1,
1622
+ OutErr,
1623
+ OutErr1,
1624
+ OutErr2,
1625
+ OutErr3,
1626
+ OutElem1,
1627
+ OutDone,
1628
+ OutDone1,
1629
+ OutDone2,
1630
+ OutDone3
1631
+ >(
1632
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1633
+ options: {
1634
+ readonly other: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>
1635
+ readonly onSelfDone: (
1636
+ exit: Exit.Exit<OutErr, OutDone>
1637
+ ) => MergeDecision.MergeDecision<Env1, OutErr1, OutDone1, OutErr2, OutDone2>
1638
+ readonly onOtherDone: (
1639
+ ex: Exit.Exit<OutErr1, OutDone1>
1640
+ ) => MergeDecision.MergeDecision<Env1, OutErr, OutDone, OutErr3, OutDone3>
1641
+ }
1642
+ ): Channel.Channel<
1643
+ Env1 | Env,
1644
+ InErr & InErr1,
1645
+ InElem & InElem1,
1646
+ InDone & InDone1,
1647
+ OutErr2 | OutErr3,
1648
+ OutElem | OutElem1,
1649
+ OutDone2 | OutDone3
1650
+ > =>
1651
+ unwrapScoped(
1652
+ Effect.flatMap(
1653
+ singleProducerAsyncInput.make<
1654
+ InErr & InErr1,
1655
+ InElem & InElem1,
1656
+ InDone & InDone1
1657
+ >(),
1658
+ (input) => {
1659
+ const queueReader = fromInput(input)
1660
+ return Effect.map(
1661
+ Effect.zip(
1662
+ toPull(core.pipeTo(queueReader, self)),
1663
+ toPull(core.pipeTo(queueReader, options.other))
1664
+ ),
1665
+ ([pullL, pullR]) => {
1666
+ type State = MergeState.MergeState<
1667
+ Env | Env1,
1668
+ OutErr,
1669
+ OutErr1,
1670
+ OutErr2 | OutErr3,
1671
+ OutElem | OutElem1,
1672
+ OutDone,
1673
+ OutDone1,
1674
+ OutDone2 | OutDone3
1675
+ >
1676
+
1677
+ const handleSide = <Err, Done, Err2, Done2>(
1678
+ exit: Exit.Exit<Err, Either.Either<Done, OutElem | OutElem1>>,
1679
+ fiber: Fiber.Fiber<Err2, Either.Either<Done2, OutElem | OutElem1>>,
1680
+ pull: Effect.Effect<Env | Env1, Err, Either.Either<Done, OutElem | OutElem1>>
1681
+ ) =>
1682
+ (
1683
+ done: (
1684
+ ex: Exit.Exit<Err, Done>
1685
+ ) => MergeDecision.MergeDecision<
1686
+ Env | Env1,
1687
+ Err2,
1688
+ Done2,
1689
+ OutErr2 | OutErr3,
1690
+ OutDone2 | OutDone3
1691
+ >,
1692
+ both: (
1693
+ f1: Fiber.Fiber<Err, Either.Either<Done, OutElem | OutElem1>>,
1694
+ f2: Fiber.Fiber<Err2, Either.Either<Done2, OutElem | OutElem1>>
1695
+ ) => State,
1696
+ single: (
1697
+ f: (
1698
+ ex: Exit.Exit<Err2, Done2>
1699
+ ) => Effect.Effect<Env | Env1, OutErr2 | OutErr3, OutDone2 | OutDone3>
1700
+ ) => State
1701
+ ): Effect.Effect<
1702
+ Env | Env1,
1703
+ never,
1704
+ Channel.Channel<
1705
+ Env | Env1,
1706
+ unknown,
1707
+ unknown,
1708
+ unknown,
1709
+ OutErr2 | OutErr3,
1710
+ OutElem | OutElem1,
1711
+ OutDone2 | OutDone3
1712
+ >
1713
+ > => {
1714
+ const onDecision = (
1715
+ decision: MergeDecision.MergeDecision<
1716
+ Env | Env1,
1717
+ Err2,
1718
+ Done2,
1719
+ OutErr2 | OutErr3,
1720
+ OutDone2 | OutDone3
1721
+ >
1722
+ ): Effect.Effect<
1723
+ never,
1724
+ never,
1725
+ Channel.Channel<
1726
+ Env | Env1,
1727
+ unknown,
1728
+ unknown,
1729
+ unknown,
1730
+ OutErr2 | OutErr3,
1731
+ OutElem | OutElem1,
1732
+ OutDone2 | OutDone3
1733
+ >
1734
+ > => {
1735
+ const op = decision as mergeDecision.Primitive
1736
+ if (op._tag === MergeDecisionOpCodes.OP_DONE) {
1737
+ return Effect.succeed(
1738
+ core.fromEffect(
1739
+ Effect.zipRight(
1740
+ Fiber.interrupt(fiber),
1741
+ op.effect
1742
+ )
1743
+ )
1744
+ )
1745
+ }
1746
+ return Effect.map(
1747
+ Fiber.await(fiber),
1748
+ Exit.match({
1749
+ onFailure: (cause) => core.fromEffect(op.f(Exit.failCause(cause))),
1750
+ onSuccess: Either.match({
1751
+ onLeft: (done) => core.fromEffect(op.f(Exit.succeed(done))),
1752
+ onRight: (elem) => zipRight(core.write(elem), go(single(op.f)))
1753
+ })
1754
+ })
1755
+ )
1756
+ }
1757
+
1758
+ return Exit.match(exit, {
1759
+ onFailure: (cause) => onDecision(done(Exit.failCause(cause))),
1760
+ onSuccess: Either.match({
1761
+ onLeft: (z) => onDecision(done(Exit.succeed(z))),
1762
+ onRight: (elem) =>
1763
+ Effect.succeed(
1764
+ core.flatMap(core.write(elem), () =>
1765
+ core.flatMap(
1766
+ core.fromEffect(Effect.forkDaemon(pull)),
1767
+ (leftFiber) => go(both(leftFiber, fiber))
1768
+ ))
1769
+ )
1770
+ })
1771
+ })
1772
+ }
1773
+
1774
+ const go = (
1775
+ state: State
1776
+ ): Channel.Channel<
1777
+ Env | Env1,
1778
+ unknown,
1779
+ unknown,
1780
+ unknown,
1781
+ OutErr2 | OutErr3,
1782
+ OutElem | OutElem1,
1783
+ OutDone2 | OutDone3
1784
+ > => {
1785
+ switch (state._tag) {
1786
+ case MergeStateOpCodes.OP_BOTH_RUNNING: {
1787
+ const leftJoin = Effect.interruptible(Fiber.join(state.left))
1788
+ const rightJoin = Effect.interruptible(Fiber.join(state.right))
1789
+ return unwrap(
1790
+ Effect.raceWith(leftJoin, rightJoin, {
1791
+ onSelfDone: (leftExit, rf) =>
1792
+ Effect.zipRight(
1793
+ Fiber.interrupt(rf),
1794
+ handleSide(leftExit, state.right, pullL)(
1795
+ options.onSelfDone,
1796
+ mergeState.BothRunning,
1797
+ (f) => mergeState.LeftDone(f)
1798
+ )
1799
+ ),
1800
+ onOtherDone: (rightExit, lf) =>
1801
+ Effect.zipRight(
1802
+ Fiber.interrupt(lf),
1803
+ handleSide(rightExit, state.left, pullR)(
1804
+ options.onOtherDone as (
1805
+ ex: Exit.Exit<InErr1 | OutErr1, OutDone1>
1806
+ ) => MergeDecision.MergeDecision<
1807
+ Env1 | Env,
1808
+ OutErr,
1809
+ OutDone,
1810
+ OutErr2 | OutErr3,
1811
+ OutDone2 | OutDone3
1812
+ >,
1813
+ (left, right) => mergeState.BothRunning(right, left),
1814
+ (f) => mergeState.RightDone(f)
1815
+ )
1816
+ )
1817
+ })
1818
+ )
1819
+ }
1820
+ case MergeStateOpCodes.OP_LEFT_DONE: {
1821
+ return unwrap(
1822
+ Effect.map(
1823
+ Effect.exit(pullR),
1824
+ Exit.match({
1825
+ onFailure: (cause) => core.fromEffect(state.f(Exit.failCause(cause))),
1826
+ onSuccess: Either.match({
1827
+ onLeft: (done) => core.fromEffect(state.f(Exit.succeed(done))),
1828
+ onRight: (elem) =>
1829
+ core.flatMap(
1830
+ core.write(elem),
1831
+ () => go(mergeState.LeftDone(state.f))
1832
+ )
1833
+ })
1834
+ })
1835
+ )
1836
+ )
1837
+ }
1838
+ case MergeStateOpCodes.OP_RIGHT_DONE: {
1839
+ return unwrap(
1840
+ Effect.map(
1841
+ Effect.exit(pullL),
1842
+ Exit.match({
1843
+ onFailure: (cause) => core.fromEffect(state.f(Exit.failCause(cause))),
1844
+ onSuccess: Either.match({
1845
+ onLeft: (done) => core.fromEffect(state.f(Exit.succeed(done))),
1846
+ onRight: (elem) =>
1847
+ core.flatMap(
1848
+ core.write(elem),
1849
+ () => go(mergeState.RightDone(state.f))
1850
+ )
1851
+ })
1852
+ })
1853
+ )
1854
+ )
1855
+ }
1856
+ }
1857
+ }
1858
+
1859
+ return pipe(
1860
+ core.fromEffect(
1861
+ Effect.zipWith(
1862
+ Effect.forkDaemon(pullL),
1863
+ Effect.forkDaemon(pullR),
1864
+ (left, right): State =>
1865
+ mergeState.BothRunning<
1866
+ Env | Env1,
1867
+ OutErr,
1868
+ OutErr1,
1869
+ OutErr2 | OutErr3,
1870
+ OutElem | OutElem1,
1871
+ OutDone,
1872
+ OutDone1,
1873
+ OutDone2 | OutDone3
1874
+ >(left, right)
1875
+ )
1876
+ ),
1877
+ core.flatMap(go),
1878
+ core.embedInput(input)
1879
+ )
1880
+ }
1881
+ )
1882
+ }
1883
+ )
1884
+ ))
1885
+
1886
+ /** @internal */
1887
+ export const never: Channel.Channel<never, unknown, unknown, unknown, never, never, never> = core.fromEffect(
1888
+ Effect.never
1889
+ )
1890
+
1891
+ /** @internal */
1892
+ export const orDie = dual<
1893
+ <E>(
1894
+ error: LazyArg<E>
1895
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
1896
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
1897
+ ) => Channel.Channel<Env, InErr, InElem, InDone, never, OutElem, OutDone>,
1898
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, E>(
1899
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1900
+ error: LazyArg<E>
1901
+ ) => Channel.Channel<Env, InErr, InElem, InDone, never, OutElem, OutDone>
1902
+ >(2, <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, E>(
1903
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1904
+ error: LazyArg<E>
1905
+ ): Channel.Channel<Env, InErr, InElem, InDone, never, OutElem, OutDone> => orDieWith(self, error))
1906
+
1907
+ /** @internal */
1908
+ export const orDieWith = dual<
1909
+ <OutErr>(
1910
+ f: (e: OutErr) => unknown
1911
+ ) => <Env, InErr, InElem, InDone, OutElem, OutDone>(
1912
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
1913
+ ) => Channel.Channel<Env, InErr, InElem, InDone, never, OutElem, OutDone>,
1914
+ <Env, InErr, InElem, InDone, OutElem, OutDone, OutErr>(
1915
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1916
+ f: (e: OutErr) => unknown
1917
+ ) => Channel.Channel<Env, InErr, InElem, InDone, never, OutElem, OutDone>
1918
+ >(2, <Env, InErr, InElem, InDone, OutElem, OutDone, OutErr>(
1919
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1920
+ f: (e: OutErr) => unknown
1921
+ ): Channel.Channel<Env, InErr, InElem, InDone, never, OutElem, OutDone> =>
1922
+ catchAll(self, (e) => {
1923
+ throw f(e)
1924
+ }) as Channel.Channel<Env, InErr, InElem, InDone, never, OutElem, OutDone>)
1925
+
1926
+ /** @internal */
1927
+ export const orElse = dual<
1928
+ <Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
1929
+ that: LazyArg<Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>>
1930
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
1931
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
1932
+ ) => Channel.Channel<
1933
+ Env1 | Env,
1934
+ InErr & InErr1,
1935
+ InElem & InElem1,
1936
+ InDone & InDone1,
1937
+ OutErr1,
1938
+ OutElem1 | OutElem,
1939
+ OutDone1 | OutDone
1940
+ >,
1941
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
1942
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1943
+ that: LazyArg<Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>>
1944
+ ) => Channel.Channel<
1945
+ Env1 | Env,
1946
+ InErr & InErr1,
1947
+ InElem & InElem1,
1948
+ InDone & InDone1,
1949
+ OutErr1,
1950
+ OutElem1 | OutElem,
1951
+ OutDone1 | OutDone
1952
+ >
1953
+ >(
1954
+ 2,
1955
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
1956
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1957
+ that: LazyArg<Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>>
1958
+ ): Channel.Channel<
1959
+ Env | Env1,
1960
+ InErr & InErr1,
1961
+ InElem & InElem1,
1962
+ InDone & InDone1,
1963
+ OutErr1,
1964
+ OutElem | OutElem1,
1965
+ OutDone | OutDone1
1966
+ > => catchAll(self, that)
1967
+ )
1968
+
1969
+ /** @internal */
1970
+ export const pipeToOrFail = dual<
1971
+ <Env2, OutElem, OutDone, OutErr2, OutElem2, OutDone2>(
1972
+ that: Channel.Channel<Env2, never, OutElem, OutDone, OutErr2, OutElem2, OutDone2>
1973
+ ) => <Env, InErr, InElem, InDone, OutErr>(
1974
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
1975
+ ) => Channel.Channel<Env2 | Env, InErr, InElem, InDone, OutErr2 | OutErr, OutElem2, OutDone2>,
1976
+ <Env, InErr, InElem, InDone, OutErr, Env2, OutElem, OutDone, OutErr2, OutElem2, OutDone2>(
1977
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1978
+ that: Channel.Channel<Env2, never, OutElem, OutDone, OutErr2, OutElem2, OutDone2>
1979
+ ) => Channel.Channel<Env2 | Env, InErr, InElem, InDone, OutErr2 | OutErr, OutElem2, OutDone2>
1980
+ >(2, <Env, InErr, InElem, InDone, OutErr, Env2, OutElem, OutDone, OutErr2, OutElem2, OutDone2>(
1981
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
1982
+ that: Channel.Channel<Env2, never, OutElem, OutDone, OutErr2, OutElem2, OutDone2>
1983
+ ): Channel.Channel<Env | Env2, InErr, InElem, InDone, OutErr | OutErr2, OutElem2, OutDone2> =>
1984
+ core.suspend(() => {
1985
+ let channelException: Channel.ChannelException<OutErr | OutErr2> | undefined = undefined
1986
+
1987
+ const reader: Channel.Channel<Env, OutErr, OutElem, OutDone, never, OutElem, OutDone> = core
1988
+ .readWith({
1989
+ onInput: (outElem) => core.flatMap(core.write(outElem), () => reader),
1990
+ onFailure: (outErr) => {
1991
+ channelException = ChannelException(outErr)
1992
+ return core.failCause(Cause.die(channelException))
1993
+ },
1994
+ onDone: core.succeedNow
1995
+ })
1996
+
1997
+ const writer: Channel.Channel<
1998
+ Env2,
1999
+ OutErr2,
2000
+ OutElem2,
2001
+ OutDone2,
2002
+ OutErr2,
2003
+ OutElem2,
2004
+ OutDone2
2005
+ > = core.readWithCause({
2006
+ onInput: (outElem) => pipe(core.write(outElem), core.flatMap(() => writer)),
2007
+ onFailure: (cause) =>
2008
+ Cause.isDieType(cause) &&
2009
+ isChannelException(cause.defect) &&
2010
+ Equal.equals(cause.defect, channelException)
2011
+ ? core.fail(cause.defect.error as OutErr2)
2012
+ : core.failCause(cause),
2013
+ onDone: core.succeedNow
2014
+ })
2015
+
2016
+ return core.pipeTo(core.pipeTo(core.pipeTo(self, reader), that), writer)
2017
+ }))
2018
+
2019
+ /** @internal */
2020
+ export const provideService = dual<
2021
+ <T extends Context.Tag<any, any>>(
2022
+ tag: T,
2023
+ service: Context.Tag.Service<T>
2024
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2025
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2026
+ ) => Channel.Channel<Exclude<Env, Context.Tag.Identifier<T>>, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2027
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, T extends Context.Tag<any, any>>(
2028
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2029
+ tag: T,
2030
+ service: Context.Tag.Service<T>
2031
+ ) => Channel.Channel<Exclude<Env, Context.Tag.Identifier<T>>, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2032
+ >(3, <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, T extends Context.Tag<any, any>>(
2033
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2034
+ tag: T,
2035
+ service: Context.Tag.Service<T>
2036
+ ): Channel.Channel<Exclude<Env, Context.Tag.Identifier<T>>, InErr, InElem, InDone, OutErr, OutElem, OutDone> => {
2037
+ return core.flatMap(
2038
+ context<any>(),
2039
+ (context) => core.provideContext(self, Context.add(context, tag, service))
2040
+ )
2041
+ })
2042
+
2043
+ /** @internal */
2044
+ export const provideLayer = dual<
2045
+ <Env0, Env, OutErr2>(
2046
+ layer: Layer.Layer<Env0, OutErr2, Env>
2047
+ ) => <InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2048
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2049
+ ) => Channel.Channel<Env0, InErr, InElem, InDone, OutErr2 | OutErr, OutElem, OutDone>,
2050
+ <InErr, InElem, InDone, OutErr, OutElem, OutDone, Env0, Env, OutErr2>(
2051
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2052
+ layer: Layer.Layer<Env0, OutErr2, Env>
2053
+ ) => Channel.Channel<Env0, InErr, InElem, InDone, OutErr2 | OutErr, OutElem, OutDone>
2054
+ >(2, <InErr, InElem, InDone, OutErr, OutElem, OutDone, Env0, Env, OutErr2>(
2055
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2056
+ layer: Layer.Layer<Env0, OutErr2, Env>
2057
+ ): Channel.Channel<Env0, InErr, InElem, InDone, OutErr | OutErr2, OutElem, OutDone> =>
2058
+ unwrapScoped(Effect.map(Layer.build(layer), (env) => core.provideContext(self, env))))
2059
+
2060
+ /** @internal */
2061
+ export const mapInputContext = dual<
2062
+ <Env0, Env>(
2063
+ f: (env: Context.Context<Env0>) => Context.Context<Env>
2064
+ ) => <InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2065
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2066
+ ) => Channel.Channel<Env0, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2067
+ <InErr, InElem, InDone, OutErr, OutElem, OutDone, Env0, Env>(
2068
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2069
+ f: (env: Context.Context<Env0>) => Context.Context<Env>
2070
+ ) => Channel.Channel<Env0, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2071
+ >(2, <InErr, InElem, InDone, OutErr, OutElem, OutDone, Env0, Env>(
2072
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2073
+ f: (env: Context.Context<Env0>) => Context.Context<Env>
2074
+ ): Channel.Channel<Env0, InErr, InElem, InDone, OutErr, OutElem, OutDone> =>
2075
+ contextWithChannel((context: Context.Context<Env0>) => core.provideContext(self, f(context))))
2076
+
2077
+ /** @internal */
2078
+ export const provideSomeLayer = dual<
2079
+ <Env0, Env2, OutErr2>(
2080
+ layer: Layer.Layer<Env0, OutErr2, Env2>
2081
+ ) => <R, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2082
+ self: Channel.Channel<R, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2083
+ ) => Channel.Channel<Env0 | Exclude<R, Env2>, InErr, InElem, InDone, OutErr2 | OutErr, OutElem, OutDone>,
2084
+ <R, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env0, Env2, OutErr2>(
2085
+ self: Channel.Channel<R, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2086
+ layer: Layer.Layer<Env0, OutErr2, Env2>
2087
+ ) => Channel.Channel<Env0 | Exclude<R, Env2>, InErr, InElem, InDone, OutErr2 | OutErr, OutElem, OutDone>
2088
+ >(2, <R, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env0, Env2, OutErr2>(
2089
+ self: Channel.Channel<R, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2090
+ layer: Layer.Layer<Env0, OutErr2, Env2>
2091
+ ): Channel.Channel<Env0 | Exclude<R, Env2>, InErr, InElem, InDone, OutErr | OutErr2, OutElem, OutDone> =>
2092
+ // @ts-expect-error
2093
+ provideLayer(self, Layer.merge(Layer.context<Exclude<R, Env2>>(), layer)))
2094
+
2095
+ /** @internal */
2096
+ export const read = <In>(): Channel.Channel<
2097
+ never,
2098
+ unknown,
2099
+ In,
2100
+ unknown,
2101
+ Option.Option<never>,
2102
+ never,
2103
+ In
2104
+ > => core.readOrFail<In, Option.Option<never>>(Option.none())
2105
+
2106
+ /** @internal */
2107
+ export const repeated = <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2108
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2109
+ ): Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone> => core.flatMap(self, () => repeated(self))
2110
+
2111
+ /** @internal */
2112
+ export const run = <Env, InErr, InDone, OutErr, OutDone>(
2113
+ self: Channel.Channel<Env, InErr, unknown, InDone, OutErr, never, OutDone>
2114
+ ): Effect.Effect<Env, OutErr, OutDone> => Effect.scoped(executor.runScoped(self))
2115
+
2116
+ /** @internal */
2117
+ export const runCollect = <Env, InErr, InDone, OutErr, OutElem, OutDone>(
2118
+ self: Channel.Channel<Env, InErr, unknown, InDone, OutErr, OutElem, OutDone>
2119
+ ): Effect.Effect<Env, OutErr, readonly [Chunk.Chunk<OutElem>, OutDone]> => executor.run(core.collectElements(self))
2120
+
2121
+ /** @internal */
2122
+ export const runDrain = <Env, InErr, InDone, OutElem, OutErr, OutDone>(
2123
+ self: Channel.Channel<Env, InErr, unknown, InDone, OutErr, OutElem, OutDone>
2124
+ ): Effect.Effect<Env, OutErr, OutDone> => executor.run(drain(self))
2125
+
2126
+ /** @internal */
2127
+ export const scoped = <R, E, A>(
2128
+ effect: Effect.Effect<R, E, A>
2129
+ ): Channel.Channel<Exclude<R, Scope.Scope>, unknown, unknown, unknown, E, A, unknown> =>
2130
+ unwrap(
2131
+ Effect.uninterruptibleMask((restore) =>
2132
+ Effect.map(Scope.make(), (scope) =>
2133
+ core.acquireReleaseOut(
2134
+ Effect.tapErrorCause(
2135
+ restore(Scope.extend(scope)(effect)),
2136
+ (cause) => Scope.close(scope, Exit.failCause(cause))
2137
+ ),
2138
+ (_, exit) => Scope.close(scope, exit)
2139
+ ))
2140
+ )
2141
+ )
2142
+
2143
+ /** @internal */
2144
+ export const service = <T extends Context.Tag<any, any>>(
2145
+ tag: T
2146
+ ): Channel.Channel<Context.Tag.Identifier<T>, unknown, unknown, unknown, never, never, Context.Tag.Service<T>> =>
2147
+ core.fromEffect(tag)
2148
+
2149
+ /** @internal */
2150
+ export const serviceWith = <T extends Context.Tag<any, any>>(tag: T) =>
2151
+ <OutDone>(
2152
+ f: (resource: Context.Tag.Service<T>) => OutDone
2153
+ ): Channel.Channel<Context.Tag.Identifier<T>, unknown, unknown, unknown, never, never, OutDone> => map(service(tag), f)
2154
+
2155
+ /** @internal */
2156
+ export const serviceWithChannel =
2157
+ <T extends Context.Tag<any, any>>(tag: T) =>
2158
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2159
+ f: (resource: Context.Tag.Service<T>) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2160
+ ): Channel.Channel<Env | Context.Tag.Identifier<T>, InErr, InElem, InDone, OutErr, OutElem, OutDone> =>
2161
+ core.flatMap(service(tag), f)
2162
+
2163
+ /** @internal */
2164
+ export const serviceWithEffect = <T extends Context.Tag<any, any>>(tag: T) =>
2165
+ <Env, OutErr, OutDone>(
2166
+ f: (resource: Context.Tag.Service<T>) => Effect.Effect<Env, OutErr, OutDone>
2167
+ ): Channel.Channel<Env | Context.Tag.Identifier<T>, unknown, unknown, unknown, OutErr, never, OutDone> =>
2168
+ mapEffect(service(tag), f)
2169
+
2170
+ /** @internal */
2171
+ export const toPubSub = <Err, Done, Elem>(
2172
+ pubsub: PubSub.PubSub<Either.Either<Exit.Exit<Err, Done>, Elem>>
2173
+ ): Channel.Channel<never, Err, Elem, Done, never, never, unknown> => toQueue(pubsub)
2174
+
2175
+ /** @internal */
2176
+ export const toPull = <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2177
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2178
+ ): Effect.Effect<Env | Scope.Scope, never, Effect.Effect<Env, OutErr, Either.Either<OutDone, OutElem>>> =>
2179
+ Effect.map(
2180
+ Effect.acquireRelease(
2181
+ Effect.sync(() => new executor.ChannelExecutor(self, void 0, identity)),
2182
+ (exec, exit) => {
2183
+ const finalize = exec.close(exit)
2184
+ return finalize === undefined ? Effect.unit : finalize
2185
+ }
2186
+ ),
2187
+ (exec) => Effect.suspend(() => interpretToPull(exec.run() as ChannelState.ChannelState<Env, OutErr>, exec))
2188
+ )
2189
+
2190
+ /** @internal */
2191
+ const interpretToPull = <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2192
+ channelState: ChannelState.ChannelState<Env, OutErr>,
2193
+ exec: executor.ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2194
+ ): Effect.Effect<Env, OutErr, Either.Either<OutDone, OutElem>> => {
2195
+ const state = channelState as ChannelState.Primitive
2196
+ switch (state._tag) {
2197
+ case ChannelStateOpCodes.OP_DONE: {
2198
+ return Exit.match(exec.getDone(), {
2199
+ onFailure: Effect.failCause,
2200
+ onSuccess: (done): Effect.Effect<Env, OutErr, Either.Either<OutDone, OutElem>> =>
2201
+ Effect.succeed(Either.left(done))
2202
+ })
2203
+ }
2204
+ case ChannelStateOpCodes.OP_EMIT: {
2205
+ return Effect.succeed(Either.right(exec.getEmit()))
2206
+ }
2207
+ case ChannelStateOpCodes.OP_FROM_EFFECT: {
2208
+ return pipe(
2209
+ state.effect as Effect.Effect<Env, OutErr, Either.Either<OutDone, OutElem>>,
2210
+ Effect.flatMap(() => interpretToPull(exec.run() as ChannelState.ChannelState<Env, OutErr>, exec))
2211
+ )
2212
+ }
2213
+ case ChannelStateOpCodes.OP_READ: {
2214
+ return executor.readUpstream(
2215
+ state,
2216
+ () => interpretToPull(exec.run() as ChannelState.ChannelState<Env, OutErr>, exec),
2217
+ (cause) => Effect.failCause(cause) as Effect.Effect<Env, OutErr, Either.Either<OutDone, OutElem>>
2218
+ )
2219
+ }
2220
+ }
2221
+ }
2222
+
2223
+ /** @internal */
2224
+ export const toQueue = <Err, Done, Elem>(
2225
+ queue: Queue.Enqueue<Either.Either<Exit.Exit<Err, Done>, Elem>>
2226
+ ): Channel.Channel<never, Err, Elem, Done, never, never, unknown> => core.suspend(() => toQueueInternal(queue))
2227
+
2228
+ /** @internal */
2229
+ const toQueueInternal = <Err, Done, Elem>(
2230
+ queue: Queue.Enqueue<Either.Either<Exit.Exit<Err, Done>, Elem>>
2231
+ ): Channel.Channel<never, Err, Elem, Done, never, never, unknown> => {
2232
+ return core.readWithCause({
2233
+ onInput: (elem) =>
2234
+ core.flatMap(
2235
+ core.fromEffect(Queue.offer(queue, Either.right(elem))),
2236
+ () => toQueueInternal(queue)
2237
+ ),
2238
+ onFailure: (cause) => core.fromEffect(pipe(Queue.offer(queue, Either.left(Exit.failCause(cause))))),
2239
+ onDone: (done) => core.fromEffect(pipe(Queue.offer(queue, Either.left(Exit.succeed(done)))))
2240
+ })
2241
+ }
2242
+
2243
+ /** @internal */
2244
+ export const unwrap = <R, E, R2, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2245
+ channel: Effect.Effect<R, E, Channel.Channel<R2, InErr, InElem, InDone, OutErr, OutElem, OutDone>>
2246
+ ): Channel.Channel<R | R2, InErr, InElem, InDone, E | OutErr, OutElem, OutDone> => flatten(core.fromEffect(channel))
2247
+
2248
+ /** @internal */
2249
+ export const unwrapScoped = <
2250
+ R,
2251
+ E,
2252
+ Env,
2253
+ InErr,
2254
+ InElem,
2255
+ InDone,
2256
+ OutErr,
2257
+ OutElem,
2258
+ OutDone
2259
+ >(
2260
+ self: Effect.Effect<R, E, Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>>
2261
+ ): Channel.Channel<
2262
+ Exclude<R, Scope.Scope> | Env,
2263
+ InErr,
2264
+ InElem,
2265
+ InDone,
2266
+ E | OutErr,
2267
+ OutElem,
2268
+ OutDone
2269
+ > =>
2270
+ core.concatAllWith(
2271
+ scoped(self),
2272
+ (d, _) => d,
2273
+ (d, _) => d
2274
+ )
2275
+
2276
+ /** @internal */
2277
+ export const updateService = dual<
2278
+ <T extends Context.Tag<any, any>>(
2279
+ tag: T,
2280
+ f: (resource: Context.Tag.Service<T>) => Context.Tag.Service<T>
2281
+ ) => <R, InErr, InDone, OutElem, OutErr, OutDone>(
2282
+ self: Channel.Channel<R, InErr, unknown, InDone, OutErr, OutElem, OutDone>
2283
+ ) => Channel.Channel<T | R, InErr, unknown, InDone, OutErr, OutElem, OutDone>,
2284
+ <R, InErr, InDone, OutElem, OutErr, OutDone, T extends Context.Tag<any, any>>(
2285
+ self: Channel.Channel<R, InErr, unknown, InDone, OutErr, OutElem, OutDone>,
2286
+ tag: T,
2287
+ f: (resource: Context.Tag.Service<T>) => Context.Tag.Service<T>
2288
+ ) => Channel.Channel<T | R, InErr, unknown, InDone, OutErr, OutElem, OutDone>
2289
+ >(3, <R, InErr, InDone, OutElem, OutErr, OutDone, T extends Context.Tag<any, any>>(
2290
+ self: Channel.Channel<R, InErr, unknown, InDone, OutErr, OutElem, OutDone>,
2291
+ tag: T,
2292
+ f: (resource: Context.Tag.Service<T>) => Context.Tag.Service<T>
2293
+ ): Channel.Channel<R | T, InErr, unknown, InDone, OutErr, OutElem, OutDone> =>
2294
+ mapInputContext(self, (context: Context.Context<R>) =>
2295
+ Context.merge(
2296
+ context,
2297
+ Context.make(tag, f(Context.unsafeGet(context, tag)))
2298
+ )))
2299
+
2300
+ /** @internal */
2301
+ export const withSpan = dual<
2302
+ (
2303
+ name: string,
2304
+ options?: {
2305
+ readonly attributes?: Record<string, Tracer.AttributeValue>
2306
+ readonly links?: ReadonlyArray<Tracer.SpanLink>
2307
+ readonly parent?: Tracer.ParentSpan
2308
+ readonly root?: boolean
2309
+ readonly context?: Context.Context<never>
2310
+ }
2311
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2312
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2313
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2314
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2315
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2316
+ name: string,
2317
+ options?: {
2318
+ readonly attributes?: Record<string, Tracer.AttributeValue>
2319
+ readonly links?: ReadonlyArray<Tracer.SpanLink>
2320
+ readonly parent?: Tracer.ParentSpan
2321
+ readonly root?: boolean
2322
+ readonly context?: Context.Context<never>
2323
+ }
2324
+ ) => Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2325
+ >(3, (self, name, options) => unwrapScoped(Effect.as(Effect.withSpanScoped(name, options), self)))
2326
+
2327
+ /** @internal */
2328
+ export const writeAll = <OutElem>(
2329
+ ...outs: Array<OutElem>
2330
+ ): Channel.Channel<never, unknown, unknown, unknown, never, OutElem, void> => writeChunk(Chunk.fromIterable(outs))
2331
+
2332
+ /** @internal */
2333
+ export const writeChunk = <OutElem>(
2334
+ outs: Chunk.Chunk<OutElem>
2335
+ ): Channel.Channel<never, unknown, unknown, unknown, never, OutElem, void> => writeChunkWriter(0, outs.length, outs)
2336
+
2337
+ /** @internal */
2338
+ const writeChunkWriter = <OutElem>(
2339
+ idx: number,
2340
+ len: number,
2341
+ chunk: Chunk.Chunk<OutElem>
2342
+ ): Channel.Channel<never, unknown, unknown, unknown, never, OutElem, void> => {
2343
+ return idx === len
2344
+ ? core.unit
2345
+ : pipe(
2346
+ core.write(pipe(chunk, Chunk.unsafeGet(idx))),
2347
+ core.flatMap(() => writeChunkWriter(idx + 1, len, chunk))
2348
+ )
2349
+ }
2350
+
2351
+ /** @internal */
2352
+ export const zip = dual<
2353
+ <Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
2354
+ that: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
2355
+ options?: { readonly concurrent?: boolean }
2356
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2357
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2358
+ ) => Channel.Channel<
2359
+ Env1 | Env,
2360
+ InErr & InErr1,
2361
+ InElem & InElem1,
2362
+ InDone & InDone1,
2363
+ OutErr1 | OutErr,
2364
+ OutElem1 | OutElem,
2365
+ readonly [OutDone, OutDone1]
2366
+ >,
2367
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
2368
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2369
+ that: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
2370
+ options?: { readonly concurrent?: boolean }
2371
+ ) => Channel.Channel<
2372
+ Env1 | Env,
2373
+ InErr & InErr1,
2374
+ InElem & InElem1,
2375
+ InDone & InDone1,
2376
+ OutErr1 | OutErr,
2377
+ OutElem1 | OutElem,
2378
+ readonly [OutDone, OutDone1]
2379
+ >
2380
+ >(
2381
+ (args) => core.isChannel(args[1]),
2382
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
2383
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2384
+ that: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
2385
+ options?: { readonly concurrent?: boolean }
2386
+ ): Channel.Channel<
2387
+ Env | Env1,
2388
+ InErr & InErr1,
2389
+ InElem & InElem1,
2390
+ InDone & InDone1,
2391
+ OutErr | OutErr1,
2392
+ OutElem | OutElem1,
2393
+ readonly [OutDone, OutDone1]
2394
+ > =>
2395
+ options?.concurrent ?
2396
+ mergeWith(self, {
2397
+ other: that,
2398
+ onSelfDone: (exit1) => mergeDecision.Await((exit2) => Effect.suspend(() => Exit.zip(exit1, exit2))),
2399
+ onOtherDone: (exit2) => mergeDecision.Await((exit1) => Effect.suspend(() => Exit.zip(exit1, exit2)))
2400
+ }) :
2401
+ core.flatMap(self, (a) => map(that, (b) => [a, b] as const))
2402
+ )
2403
+
2404
+ /** @internal */
2405
+ export const zipLeft = dual<
2406
+ <Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
2407
+ that: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
2408
+ options?: { readonly concurrent?: boolean }
2409
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2410
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2411
+ ) => Channel.Channel<
2412
+ Env1 | Env,
2413
+ InErr & InErr1,
2414
+ InElem & InElem1,
2415
+ InDone & InDone1,
2416
+ OutErr1 | OutErr,
2417
+ OutElem1 | OutElem,
2418
+ OutDone
2419
+ >,
2420
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
2421
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2422
+ that: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
2423
+ options?: { readonly concurrent?: boolean }
2424
+ ) => Channel.Channel<
2425
+ Env1 | Env,
2426
+ InErr & InErr1,
2427
+ InElem & InElem1,
2428
+ InDone & InDone1,
2429
+ OutErr1 | OutErr,
2430
+ OutElem1 | OutElem,
2431
+ OutDone
2432
+ >
2433
+ >(
2434
+ (args) => core.isChannel(args[1]),
2435
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
2436
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2437
+ that: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
2438
+ options?: { readonly concurrent?: boolean }
2439
+ ): Channel.Channel<
2440
+ Env | Env1,
2441
+ InErr & InErr1,
2442
+ InElem & InElem1,
2443
+ InDone & InDone1,
2444
+ OutErr | OutErr1,
2445
+ OutElem | OutElem1,
2446
+ OutDone
2447
+ > =>
2448
+ options?.concurrent ?
2449
+ map(zip(self, that, { concurrent: true }), (tuple) => tuple[0]) :
2450
+ core.flatMap(self, (z) => as(that, z))
2451
+ )
2452
+
2453
+ /** @internal */
2454
+ export const zipRight = dual<
2455
+ <Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
2456
+ that: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
2457
+ options?: { readonly concurrent?: boolean }
2458
+ ) => <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
2459
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
2460
+ ) => Channel.Channel<
2461
+ Env1 | Env,
2462
+ InErr & InErr1,
2463
+ InElem & InElem1,
2464
+ InDone & InDone1,
2465
+ OutErr1 | OutErr,
2466
+ OutElem1 | OutElem,
2467
+ OutDone1
2468
+ >,
2469
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
2470
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2471
+ that: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
2472
+ options?: { readonly concurrent?: boolean }
2473
+ ) => Channel.Channel<
2474
+ Env1 | Env,
2475
+ InErr & InErr1,
2476
+ InElem & InElem1,
2477
+ InDone & InDone1,
2478
+ OutErr1 | OutErr,
2479
+ OutElem1 | OutElem,
2480
+ OutDone1
2481
+ >
2482
+ >(
2483
+ (args) => core.isChannel(args[1]),
2484
+ <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone, Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>(
2485
+ self: Channel.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
2486
+ that: Channel.Channel<Env1, InErr1, InElem1, InDone1, OutErr1, OutElem1, OutDone1>,
2487
+ options?: { readonly concurrent?: boolean }
2488
+ ): Channel.Channel<
2489
+ Env | Env1,
2490
+ InErr & InErr1,
2491
+ InElem & InElem1,
2492
+ InDone & InDone1,
2493
+ OutErr | OutErr1,
2494
+ OutElem | OutElem1,
2495
+ OutDone1
2496
+ > =>
2497
+ options?.concurrent ?
2498
+ map(zip(self, that, { concurrent: true }), (tuple) => tuple[1]) :
2499
+ core.flatMap(self, () => that)
2500
+ )
2501
+
2502
+ /** @internal */
2503
+ export const ChannelExceptionTypeId: Channel.ChannelExceptionTypeId = Symbol.for(
2504
+ "effect/Channel/ChannelException"
2505
+ ) as Channel.ChannelExceptionTypeId
2506
+
2507
+ /** @internal */
2508
+ export const ChannelException = <E>(error: E): Channel.ChannelException<E> => ({
2509
+ _tag: "ChannelException",
2510
+ [ChannelExceptionTypeId]: ChannelExceptionTypeId,
2511
+ error
2512
+ })
2513
+
2514
+ /** @internal */
2515
+ export const isChannelException = (u: unknown): u is Channel.ChannelException<unknown> =>
2516
+ typeof u === "object" && u != null && ChannelExceptionTypeId in u