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,2146 @@
1
+ import type * as Cause from "../Cause"
2
+ import * as Chunk from "../Chunk"
3
+ import * as Clock from "../Clock"
4
+ import * as Context from "../Context"
5
+ import * as Duration from "../Duration"
6
+ import type * as Effect from "../Effect"
7
+ import * as Either from "../Either"
8
+ import type * as Fiber from "../Fiber"
9
+ import * as FiberId from "../FiberId"
10
+ import type * as FiberRef from "../FiberRef"
11
+ import * as FiberRefs from "../FiberRefs"
12
+ import type * as FiberRefsPatch from "../FiberRefsPatch"
13
+ import type { LazyArg } from "../Function"
14
+ import { constFalse, constTrue, constVoid, dual, identity, pipe } from "../Function"
15
+ import * as HashMap from "../HashMap"
16
+ import * as HashSet from "../HashSet"
17
+ import * as internalCause from "../internal/cause"
18
+ import * as core from "../internal/core"
19
+ import * as defaultServices from "../internal/defaultServices"
20
+ import * as fiberRefsPatch from "../internal/fiberRefs/patch"
21
+ import * as metricLabel from "../internal/metric/label"
22
+ import * as runtimeFlags from "../internal/runtimeFlags"
23
+ import * as SingleShotGen from "../internal/singleShotGen"
24
+ import * as List from "../List"
25
+ import type * as Logger from "../Logger"
26
+ import * as LogLevel from "../LogLevel"
27
+ import * as LogSpan from "../LogSpan"
28
+ import type * as Metric from "../Metric"
29
+ import type * as MetricLabel from "../MetricLabel"
30
+ import * as Option from "../Option"
31
+ import * as Predicate from "../Predicate"
32
+ import type * as Random from "../Random"
33
+ import * as ReadonlyArray from "../ReadonlyArray"
34
+ import * as Ref from "../Ref"
35
+ import type * as runtimeFlagsPatch from "../RuntimeFlagsPatch"
36
+ import * as Tracer from "../Tracer"
37
+
38
+ /* @internal */
39
+ export const annotateLogs = dual<
40
+ {
41
+ (key: string, value: Logger.AnnotationValue): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
42
+ (
43
+ values: Record<string, Logger.AnnotationValue>
44
+ ): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
45
+ },
46
+ {
47
+ <R, E, A>(effect: Effect.Effect<R, E, A>, key: string, value: Logger.AnnotationValue): Effect.Effect<R, E, A>
48
+ <R, E, A>(effect: Effect.Effect<R, E, A>, values: Record<string, Logger.AnnotationValue>): Effect.Effect<R, E, A>
49
+ }
50
+ >(
51
+ (args) => core.isEffect(args[0]),
52
+ function<R, E, A>() {
53
+ const args = arguments
54
+ return core.fiberRefLocallyWith(
55
+ args[0] as Effect.Effect<R, E, A>,
56
+ core.currentLogAnnotations,
57
+ typeof args[1] === "string"
58
+ ? HashMap.set(args[1], args[2])
59
+ : (annotations) =>
60
+ Object.entries(args[1] as Record<string, Logger.AnnotationValue>).reduce(
61
+ (acc, [key, value]) => HashMap.set(acc, key, value),
62
+ annotations
63
+ )
64
+ )
65
+ }
66
+ )
67
+
68
+ /* @internal */
69
+ export const asSome = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, Option.Option<A>> =>
70
+ core.map(self, Option.some)
71
+
72
+ /* @internal */
73
+ export const asSomeError = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, Option.Option<E>, A> =>
74
+ core.mapError(self, Option.some)
75
+
76
+ /* @internal */
77
+ export const asyncOption = <R, E, A>(
78
+ register: (callback: (_: Effect.Effect<R, E, A>) => void) => Option.Option<Effect.Effect<R, E, A>>,
79
+ blockingOn: FiberId.FiberId = FiberId.none
80
+ ): Effect.Effect<R, E, A> =>
81
+ core.asyncEither<R, E, A>(
82
+ (cb) => {
83
+ const option = register(cb)
84
+ switch (option._tag) {
85
+ case "None": {
86
+ return Either.left(core.unit)
87
+ }
88
+ case "Some": {
89
+ return Either.right(option.value)
90
+ }
91
+ }
92
+ },
93
+ blockingOn
94
+ )
95
+
96
+ /* @internal */
97
+ export const try_: {
98
+ <A, E>(options: { readonly try: LazyArg<A>; readonly catch: (error: unknown) => E }): Effect.Effect<never, E, A>
99
+ <A>(evaluate: LazyArg<A>): Effect.Effect<never, unknown, A>
100
+ } = <A, E>(arg: LazyArg<A> | { readonly try: LazyArg<A>; readonly catch: (error: unknown) => E }) => {
101
+ let evaluate: LazyArg<A>
102
+ let onFailure: ((error: unknown) => E) | undefined = undefined
103
+ if (typeof arg === "function") {
104
+ evaluate = arg
105
+ } else {
106
+ evaluate = arg.try
107
+ onFailure = arg.catch
108
+ }
109
+ return core.sync(() => {
110
+ try {
111
+ return evaluate()
112
+ } catch (error) {
113
+ throw core.makeEffectError(internalCause.fail(
114
+ onFailure ? onFailure(error) : error
115
+ ))
116
+ }
117
+ })
118
+ }
119
+
120
+ /* @internal */
121
+ export const _catch = dual<
122
+ <N extends keyof E, K extends E[N] & string, E, R1, E1, A1>(
123
+ discriminator: N,
124
+ options: {
125
+ readonly failure: K
126
+ readonly onFailure: (error: Extract<E, { [n in N]: K }>) => Effect.Effect<R1, E1, A1>
127
+ }
128
+ ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<
129
+ R | R1,
130
+ Exclude<E, { [n in N]: K }> | E1,
131
+ A | A1
132
+ >,
133
+ <R, E, A, N extends keyof E, K extends E[N] & string, R1, E1, A1>(
134
+ self: Effect.Effect<R, E, A>,
135
+ discriminator: N,
136
+ options: {
137
+ readonly failure: K
138
+ readonly onFailure: (error: Extract<E, { [n in N]: K }>) => Effect.Effect<R1, E1, A1>
139
+ }
140
+ ) => Effect.Effect<R | R1, Exclude<E, { [n in N]: K }> | E1, A | A1>
141
+ >(
142
+ // @ts-expect-error
143
+ 3,
144
+ (self, tag, options) =>
145
+ core.catchAll(self, (e) => {
146
+ if (typeof e === "object" && e != null && tag in e && e[tag] === options.failure) {
147
+ return options.onFailure(e as any)
148
+ }
149
+ return core.fail(e as any)
150
+ })
151
+ )
152
+
153
+ /* @internal */
154
+ export const catchAllDefect = dual<
155
+ <R2, E2, A2>(
156
+ f: (defect: unknown) => Effect.Effect<R2, E2, A2>
157
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A | A2>,
158
+ <R, E, A, R2, E2, A2>(
159
+ self: Effect.Effect<R, E, A>,
160
+ f: (defect: unknown) => Effect.Effect<R2, E2, A2>
161
+ ) => Effect.Effect<R | R2, E | E2, A | A2>
162
+ >(2, (self, f) =>
163
+ core.catchAllCause(
164
+ self,
165
+ core.unified((cause) => {
166
+ const option = internalCause.find(cause, (_) => internalCause.isDieType(_) ? Option.some(_) : Option.none())
167
+ switch (option._tag) {
168
+ case "None": {
169
+ return core.failCause(cause)
170
+ }
171
+ case "Some": {
172
+ return f(option.value.defect)
173
+ }
174
+ }
175
+ })
176
+ ))
177
+
178
+ /* @internal */
179
+ export const catchSomeCause = dual<
180
+ <E, R2, E2, A2>(
181
+ f: (cause: Cause.Cause<E>) => Option.Option<Effect.Effect<R2, E2, A2>>
182
+ ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A | A2>,
183
+ <R, E, A, R2, E2, A2>(
184
+ self: Effect.Effect<R, E, A>,
185
+ f: (cause: Cause.Cause<E>) => Option.Option<Effect.Effect<R2, E2, A2>>
186
+ ) => Effect.Effect<R | R2, E | E2, A | A2>
187
+ >(
188
+ 2,
189
+ <R, E, A, R2, E2, A2>(
190
+ self: Effect.Effect<R, E, A>,
191
+ f: (cause: Cause.Cause<E>) => Option.Option<Effect.Effect<R2, E2, A2>>
192
+ ) =>
193
+ core.matchCauseEffect(self, {
194
+ onFailure: (cause): Effect.Effect<R2, E | E2, A2> => {
195
+ const option = f(cause)
196
+ switch (option._tag) {
197
+ case "None": {
198
+ return core.failCause(cause)
199
+ }
200
+ case "Some": {
201
+ return option.value
202
+ }
203
+ }
204
+ },
205
+ onSuccess: core.succeed
206
+ })
207
+ )
208
+
209
+ /* @internal */
210
+ export const catchSomeDefect = dual<
211
+ <R2, E2, A2>(
212
+ pf: (defect: unknown) => Option.Option<Effect.Effect<R2, E2, A2>>
213
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A | A2>,
214
+ <R, E, A, R2, E2, A2>(
215
+ self: Effect.Effect<R, E, A>,
216
+ pf: (defect: unknown) => Option.Option<Effect.Effect<R2, E2, A2>>
217
+ ) => Effect.Effect<R | R2, E | E2, A | A2>
218
+ >(
219
+ 2,
220
+ <R, E, A, R2, E2, A2>(self: Effect.Effect<R, E, A>, pf: (_: unknown) => Option.Option<Effect.Effect<R2, E2, A2>>) =>
221
+ core.catchAllCause(
222
+ self,
223
+ core.unified((cause) => {
224
+ const option = internalCause.find(cause, (_) => internalCause.isDieType(_) ? Option.some(_) : Option.none())
225
+ switch (option._tag) {
226
+ case "None": {
227
+ return core.failCause(cause)
228
+ }
229
+ case "Some": {
230
+ const optionEffect = pf(option.value.defect)
231
+ return optionEffect._tag === "Some" ? optionEffect.value : core.failCause(cause)
232
+ }
233
+ }
234
+ })
235
+ )
236
+ )
237
+
238
+ /* @internal */
239
+ export const catchTag = dual<
240
+ <K extends (E extends { _tag: string } ? E["_tag"] : never), E, R1, E1, A1>(
241
+ k: K,
242
+ f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
243
+ ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R1, Exclude<E, { _tag: K }> | E1, A | A1>,
244
+ <R, E, A, K extends (E extends { _tag: string } ? E["_tag"] : never), R1, E1, A1>(
245
+ self: Effect.Effect<R, E, A>,
246
+ k: K,
247
+ f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
248
+ ) => Effect.Effect<R | R1, Exclude<E, { _tag: K }> | E1, A | A1>
249
+ >(3, (self, k, f) => core.catchIf(self, Predicate.isTagged(k), f) as any)
250
+
251
+ /** @internal */
252
+ export const catchTags: {
253
+ <
254
+ E,
255
+ Cases extends (E extends { _tag: string } ? {
256
+ [K in E["_tag"]]+?: (error: Extract<E, { _tag: K }>) => Effect.Effect<any, any, any>
257
+ } :
258
+ {})
259
+ >(
260
+ cases: Cases
261
+ ): <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<
262
+ | R
263
+ | {
264
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<infer R, any, any>) ? R : never
265
+ }[keyof Cases],
266
+ | Exclude<E, { _tag: keyof Cases }>
267
+ | {
268
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, infer E, any>) ? E : never
269
+ }[keyof Cases],
270
+ | A
271
+ | {
272
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, any, infer A>) ? A : never
273
+ }[keyof Cases]
274
+ >
275
+ <
276
+ R,
277
+ E,
278
+ A,
279
+ Cases extends (E extends { _tag: string } ? {
280
+ [K in E["_tag"]]+?: (error: Extract<E, { _tag: K }>) => Effect.Effect<any, any, any>
281
+ } :
282
+ {})
283
+ >(
284
+ self: Effect.Effect<R, E, A>,
285
+ cases: Cases
286
+ ): Effect.Effect<
287
+ | R
288
+ | {
289
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<infer R, any, any>) ? R : never
290
+ }[keyof Cases],
291
+ | Exclude<E, { _tag: keyof Cases }>
292
+ | {
293
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, infer E, any>) ? E : never
294
+ }[keyof Cases],
295
+ | A
296
+ | {
297
+ [K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, any, infer A>) ? A : never
298
+ }[keyof Cases]
299
+ >
300
+ } = dual(2, (self, cases) => {
301
+ let keys: Array<string>
302
+ return core.catchIf(
303
+ self,
304
+ (e): e is { readonly _tag: string } => {
305
+ keys ??= Object.keys(cases)
306
+ return Predicate.isObject(e) && "_tag" in e && keys.includes(e["_tag"] as any)
307
+ },
308
+ (e) => cases[e["_tag"] as any](e as any)
309
+ )
310
+ })
311
+
312
+ /* @internal */
313
+ export const cause = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, Cause.Cause<E>> =>
314
+ core.matchCause(self, { onFailure: identity, onSuccess: () => internalCause.empty })
315
+
316
+ /* @internal */
317
+ export const clockWith: <R, E, A>(f: (clock: Clock.Clock) => Effect.Effect<R, E, A>) => Effect.Effect<R, E, A> =
318
+ Clock.clockWith
319
+
320
+ /* @internal */
321
+ export const clock: Effect.Effect<never, never, Clock.Clock> = clockWith(core.succeed)
322
+
323
+ /* @internal */
324
+ export const delay = dual<
325
+ (duration: Duration.DurationInput) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
326
+ <R, E, A>(self: Effect.Effect<R, E, A>, duration: Duration.DurationInput) => Effect.Effect<R, E, A>
327
+ >(2, (self, duration) => core.zipRight(Clock.sleep(duration), self))
328
+
329
+ /* @internal */
330
+ export const descriptorWith = <R, E, A>(
331
+ f: (descriptor: Fiber.Fiber.Descriptor) => Effect.Effect<R, E, A>
332
+ ): Effect.Effect<R, E, A> =>
333
+ core.withFiberRuntime((state, status) =>
334
+ f({
335
+ id: state.id(),
336
+ status,
337
+ interruptors: internalCause.interruptors(state.getFiberRef(core.currentInterruptedCause))
338
+ })
339
+ ) as Effect.Effect<R, E, A>
340
+
341
+ /* @internal */
342
+ export const allowInterrupt: Effect.Effect<never, never, void> = descriptorWith(
343
+ (descriptor) =>
344
+ HashSet.size(descriptor.interruptors) > 0
345
+ ? core.interrupt
346
+ : core.unit
347
+ )
348
+
349
+ /* @internal */
350
+ export const descriptor: Effect.Effect<never, never, Fiber.Fiber.Descriptor> = descriptorWith(core.succeed)
351
+
352
+ /* @internal */
353
+ export const diffFiberRefs = <R, E, A>(
354
+ self: Effect.Effect<R, E, A>
355
+ ): Effect.Effect<R, E, readonly [FiberRefsPatch.FiberRefsPatch, A]> => summarized(self, fiberRefs, fiberRefsPatch.diff)
356
+
357
+ /* @internal */
358
+ export const diffFiberRefsAndRuntimeFlags = <R, E, A>(
359
+ self: Effect.Effect<R, E, A>
360
+ ) =>
361
+ summarized(
362
+ self,
363
+ core.zip(fiberRefs, core.runtimeFlags),
364
+ ([refs, flags], [refsNew, flagsNew]) =>
365
+ [fiberRefsPatch.diff(refs, refsNew), runtimeFlags.diff(flags, flagsNew)] as const
366
+ )
367
+
368
+ /* @internal */
369
+ export const Do: Effect.Effect<never, never, {}> = core.succeed({})
370
+
371
+ /* @internal */
372
+ export const bind = dual<
373
+ <N extends string, K, R2, E2, A>(
374
+ tag: Exclude<N, keyof K>,
375
+ f: (_: K) => Effect.Effect<R2, E2, A>
376
+ ) => <R, E>(self: Effect.Effect<R, E, K>) => Effect.Effect<
377
+ R | R2,
378
+ E | E2,
379
+ Effect.MergeRecord<K, { [k in N]: A }>
380
+ >,
381
+ <R, E, N extends string, K, R2, E2, A>(
382
+ self: Effect.Effect<R, E, K>,
383
+ tag: Exclude<N, keyof K>,
384
+ f: (_: K) => Effect.Effect<R2, E2, A>
385
+ ) => Effect.Effect<
386
+ R | R2,
387
+ E | E2,
388
+ Effect.MergeRecord<K, { [k in N]: A }>
389
+ >
390
+ >(3, <R, E, N extends string, K, R2, E2, A>(
391
+ self: Effect.Effect<R, E, K>,
392
+ tag: Exclude<N, keyof K>,
393
+ f: (_: K) => Effect.Effect<R2, E2, A>
394
+ ) =>
395
+ core.flatMap(self, (k) =>
396
+ core.map(
397
+ f(k),
398
+ (a): Effect.MergeRecord<K, { [k in N]: A }> => ({ ...k, [tag]: a } as any)
399
+ )))
400
+
401
+ /* @internal */
402
+ export const bindTo = dual<
403
+ <N extends string>(tag: N) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<
404
+ R,
405
+ E,
406
+ Record<N, A>
407
+ >,
408
+ <R, E, A, N extends string>(
409
+ self: Effect.Effect<R, E, A>,
410
+ tag: N
411
+ ) => Effect.Effect<
412
+ R,
413
+ E,
414
+ Record<N, A>
415
+ >
416
+ >(
417
+ 2,
418
+ <R, E, A, N extends string>(self: Effect.Effect<R, E, A>, tag: N): Effect.Effect<R, E, Record<N, A>> =>
419
+ core.map(self, (a) => ({ [tag]: a } as Record<N, A>))
420
+ )
421
+
422
+ /* @internal */
423
+ export const bindValue = dual<
424
+ <N extends string, K, A>(
425
+ tag: Exclude<N, keyof K>,
426
+ f: (_: K) => A
427
+ ) => <R, E>(self: Effect.Effect<R, E, K>) => Effect.Effect<
428
+ R,
429
+ E,
430
+ Effect.MergeRecord<K, { [k in N]: A }>
431
+ >,
432
+ <R, E, K, N extends string, A>(
433
+ self: Effect.Effect<R, E, K>,
434
+ tag: Exclude<N, keyof K>,
435
+ f: (_: K) => A
436
+ ) => Effect.Effect<
437
+ R,
438
+ E,
439
+ Effect.MergeRecord<K, { [k in N]: A }>
440
+ >
441
+ >(3, <R, E, K, N extends string, A>(self: Effect.Effect<R, E, K>, tag: Exclude<N, keyof K>, f: (_: K) => A) =>
442
+ core.map(
443
+ self,
444
+ (k): Effect.MergeRecord<K, { [k in N]: A }> => ({ ...k, [tag]: f(k) } as any)
445
+ ))
446
+
447
+ /* @internal */
448
+ export const dropUntil = dual<
449
+ <A, R, E>(
450
+ predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
451
+ ) => (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>,
452
+ <A, R, E>(
453
+ elements: Iterable<A>,
454
+ predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
455
+ ) => Effect.Effect<R, E, Array<A>>
456
+ >(2, <A, R, E>(
457
+ elements: Iterable<A>,
458
+ predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
459
+ ) =>
460
+ core.suspend(() => {
461
+ const iterator = elements[Symbol.iterator]()
462
+ const builder: Array<A> = []
463
+ let next: IteratorResult<A, any>
464
+ let dropping: Effect.Effect<R, E, boolean> = core.succeed(false)
465
+ let i = 0
466
+ while ((next = iterator.next()) && !next.done) {
467
+ const a = next.value
468
+ const index = i++
469
+ dropping = core.flatMap(dropping, (bool) => {
470
+ if (bool) {
471
+ builder.push(a)
472
+ return core.succeed(true)
473
+ }
474
+ return predicate(a, index)
475
+ })
476
+ }
477
+ return core.map(dropping, () => builder)
478
+ }))
479
+
480
+ /* @internal */
481
+ export const dropWhile = dual<
482
+ <R, E, A>(
483
+ f: (a: A, i: number) => Effect.Effect<R, E, boolean>
484
+ ) => (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>,
485
+ <R, E, A>(
486
+ elements: Iterable<A>,
487
+ f: (a: A, i: number) => Effect.Effect<R, E, boolean>
488
+ ) => Effect.Effect<R, E, Array<A>>
489
+ >(2, <R, E, A>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, boolean>) =>
490
+ core.suspend(() => {
491
+ const iterator = elements[Symbol.iterator]()
492
+ const builder: Array<A> = []
493
+ let next
494
+ let dropping: Effect.Effect<R, E, boolean> = core.succeed(true)
495
+ let i = 0
496
+ while ((next = iterator.next()) && !next.done) {
497
+ const a = next.value
498
+ const index = i++
499
+ dropping = core.flatMap(dropping, (d) =>
500
+ core.map(d ? f(a, index) : core.succeed(false), (b) => {
501
+ if (!b) {
502
+ builder.push(a)
503
+ }
504
+ return b
505
+ }))
506
+ }
507
+ return core.map(dropping, () => builder)
508
+ }))
509
+
510
+ /* @internal */
511
+ export const contextWith = <R, A>(f: (context: Context.Context<R>) => A): Effect.Effect<R, never, A> =>
512
+ core.map(core.context<R>(), f)
513
+
514
+ /* @internal */
515
+ export const eventually = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, A> =>
516
+ core.orElse(self, () => core.flatMap(core.yieldNow(), () => eventually(self)))
517
+
518
+ /* @internal */
519
+ export const filterMap = dual<
520
+ <A, B>(
521
+ pf: (a: A) => Option.Option<B>
522
+ ) => <R, E>(elements: Iterable<Effect.Effect<R, E, A>>) => Effect.Effect<R, E, Array<B>>,
523
+ <R, E, A, B>(
524
+ elements: Iterable<Effect.Effect<R, E, A>>,
525
+ pf: (a: A) => Option.Option<B>
526
+ ) => Effect.Effect<R, E, Array<B>>
527
+ >(2, (elements, pf) =>
528
+ core.map(
529
+ core.forEachSequential(elements, identity),
530
+ ReadonlyArray.filterMap(pf)
531
+ ))
532
+
533
+ /* @internal */
534
+ export const filterOrDie = dual<
535
+ {
536
+ <A, B extends A, X extends A>(
537
+ filter: Predicate.Refinement<A, B>,
538
+ orDieWith: (a: X) => unknown
539
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>
540
+ <A, X extends A, Y extends A>(
541
+ filter: Predicate.Predicate<X>,
542
+ orDieWith: (a: Y) => unknown
543
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
544
+ },
545
+ {
546
+ <R, E, A, B extends A, X extends A>(
547
+ self: Effect.Effect<R, E, A>,
548
+ filter: Predicate.Refinement<A, B>,
549
+ orDieWith: (a: X) => unknown
550
+ ): Effect.Effect<R, E, B>
551
+ <R, E, A, X extends A, Y extends A>(
552
+ self: Effect.Effect<R, E, A>,
553
+ filter: Predicate.Predicate<X>,
554
+ orDieWith: (a: Y) => unknown
555
+ ): Effect.Effect<R, E, A>
556
+ }
557
+ >(3, <R, E, A, X extends A, Y extends A>(
558
+ self: Effect.Effect<R, E, A>,
559
+ filter: Predicate.Predicate<X>,
560
+ orDieWith: (a: Y) => unknown
561
+ ): Effect.Effect<R, E, A> => filterOrElse(self, filter, (a) => core.dieSync(() => orDieWith(a as Y))))
562
+
563
+ /* @internal */
564
+ export const filterOrDieMessage = dual<
565
+ {
566
+ <A, B extends A>(
567
+ filter: Predicate.Refinement<A, B>,
568
+ message: string
569
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>
570
+ <A, X extends A>(
571
+ filter: Predicate.Predicate<X>,
572
+ message: string
573
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
574
+ },
575
+ {
576
+ <R, E, A, B extends A>(
577
+ self: Effect.Effect<R, E, A>,
578
+ filter: Predicate.Refinement<A, B>,
579
+ message: string
580
+ ): Effect.Effect<R, E, B>
581
+ <R, E, A, X extends A>(
582
+ self: Effect.Effect<R, E, A>,
583
+ filter: Predicate.Predicate<X>,
584
+ message: string
585
+ ): Effect.Effect<R, E, A>
586
+ }
587
+ >(3, <R, E, A, X extends A>(
588
+ self: Effect.Effect<R, E, A>,
589
+ filter: Predicate.Predicate<X>,
590
+ message: string
591
+ ): Effect.Effect<R, E, A> => filterOrElse(self, filter, () => core.dieMessage(message)))
592
+
593
+ /* @internal */
594
+ export const filterOrElse = dual<
595
+ {
596
+ <A, B extends A, X extends A, R2, E2, C>(
597
+ filter: Predicate.Refinement<A, B>,
598
+ orElse: (a: X) => Effect.Effect<R2, E2, C>
599
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, B | C>
600
+ <A, X extends A, Y extends A, R2, E2, B>(
601
+ filter: Predicate.Predicate<X>,
602
+ orElse: (a: Y) => Effect.Effect<R2, E2, B>
603
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A | B>
604
+ },
605
+ {
606
+ <R, E, A, B extends A, X extends A, R2, E2, C>(
607
+ self: Effect.Effect<R, E, A>,
608
+ filter: Predicate.Refinement<A, B>,
609
+ orElse: (a: X) => Effect.Effect<R2, E2, C>
610
+ ): Effect.Effect<R | R2, E | E2, B | C>
611
+ <R, E, A, X extends A, Y extends A, R2, E2, B>(
612
+ self: Effect.Effect<R, E, A>,
613
+ filter: Predicate.Predicate<X>,
614
+ orElse: (a: Y) => Effect.Effect<R2, E2, B>
615
+ ): Effect.Effect<R | R2, E | E2, A | B>
616
+ }
617
+ >(3, <R, E, A, R2, E2, B>(
618
+ self: Effect.Effect<R, E, A>,
619
+ filter: Predicate.Predicate<A>,
620
+ orElse: (a: A) => Effect.Effect<R2, E2, B>
621
+ ): Effect.Effect<R | R2, E | E2, A | B> =>
622
+ core.flatMap(
623
+ self,
624
+ (a) => filter(a) ? core.succeed<A | B>(a) : orElse(a)
625
+ ))
626
+
627
+ /* @internal */
628
+ export const filterOrFail = dual<
629
+ {
630
+ <A, B extends A, X extends A, E2>(
631
+ filter: Predicate.Refinement<A, B>,
632
+ orFailWith: (a: X) => E2
633
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E | E2, B>
634
+ <A, X extends A, Y extends A, E2>(
635
+ filter: Predicate.Predicate<X>,
636
+ orFailWith: (a: Y) => E2
637
+ ): <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E | E2, A>
638
+ },
639
+ {
640
+ <R, E, A, B extends A, X extends A, E2>(
641
+ self: Effect.Effect<R, E, A>,
642
+ filter: Predicate.Refinement<A, B>,
643
+ orFailWith: (a: X) => E2
644
+ ): Effect.Effect<R, E | E2, B>
645
+ <R, E, A, X extends A, Y extends A, E2>(
646
+ self: Effect.Effect<R, E, A>,
647
+ filter: Predicate.Predicate<X>,
648
+ orFailWith: (a: Y) => E2
649
+ ): Effect.Effect<R, E | E2, A>
650
+ }
651
+ >(3, <R, E, A, X extends A, Y extends A, E2>(
652
+ self: Effect.Effect<R, E, A>,
653
+ filter: Predicate.Predicate<X>,
654
+ orFailWith: (a: Y) => E2
655
+ ): Effect.Effect<R, E | E2, A> => filterOrElse(self, filter, (a) => core.failSync(() => orFailWith(a as Y))))
656
+
657
+ /* @internal */
658
+ export const findFirst = dual<
659
+ <A, R, E>(
660
+ f: (a: A, i: number) => Effect.Effect<R, E, boolean>
661
+ ) => (elements: Iterable<A>) => Effect.Effect<R, E, Option.Option<A>>,
662
+ <A, R, E>(
663
+ elements: Iterable<A>,
664
+ f: (a: A, i: number) => Effect.Effect<R, E, boolean>
665
+ ) => Effect.Effect<R, E, Option.Option<A>>
666
+ >(2, (elements, f) =>
667
+ core.suspend(() => {
668
+ const iterator = elements[Symbol.iterator]()
669
+ const next = iterator.next()
670
+ if (!next.done) {
671
+ return findLoop(iterator, 0, f, next.value)
672
+ }
673
+ return core.succeed(Option.none())
674
+ }))
675
+
676
+ const findLoop = <A, R, E>(
677
+ iterator: Iterator<A>,
678
+ index: number,
679
+ f: (a: A, i: number) => Effect.Effect<R, E, boolean>,
680
+ value: A
681
+ ): Effect.Effect<R, E, Option.Option<A>> =>
682
+ core.flatMap(f(value, index), (result) => {
683
+ if (result) {
684
+ return core.succeed(Option.some(value))
685
+ }
686
+ const next = iterator.next()
687
+ if (!next.done) {
688
+ return findLoop(iterator, index + 1, f, next.value)
689
+ }
690
+ return core.succeed(Option.none())
691
+ })
692
+
693
+ /* @internal */
694
+ export const firstSuccessOf = <R, E, A>(effects: Iterable<Effect.Effect<R, E, A>>): Effect.Effect<R, E, A> =>
695
+ core.suspend(() => {
696
+ const list = Chunk.fromIterable(effects)
697
+ if (!Chunk.isNonEmpty(list)) {
698
+ return core.dieSync(() => internalCause.IllegalArgumentException(`Received an empty collection of effects`))
699
+ }
700
+ return pipe(
701
+ Chunk.tailNonEmpty(list),
702
+ ReadonlyArray.reduce(Chunk.headNonEmpty(list), (left, right) => core.orElse(left, () => right))
703
+ )
704
+ })
705
+
706
+ /* @internal */
707
+ export const flipWith = dual<
708
+ <R, A, E, R2, A2, E2>(
709
+ f: (effect: Effect.Effect<R, A, E>) => Effect.Effect<R2, A2, E2>
710
+ ) => (self: Effect.Effect<R, E, A>) => Effect.Effect<R2, E2, A2>,
711
+ <R, A, E, R2, A2, E2>(
712
+ self: Effect.Effect<R, E, A>,
713
+ f: (effect: Effect.Effect<R, A, E>) => Effect.Effect<R2, A2, E2>
714
+ ) => Effect.Effect<R2, E2, A2>
715
+ >(2, (self, f) => core.flip(f(core.flip(self))))
716
+
717
+ /* @internal */
718
+ export const match = dual<
719
+ <E, A, A2, A3>(
720
+ options: {
721
+ readonly onFailure: (error: E) => A2
722
+ readonly onSuccess: (value: A) => A3
723
+ }
724
+ ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, never, A2 | A3>,
725
+ <R, E, A, A2, A3>(
726
+ self: Effect.Effect<R, E, A>,
727
+ options: {
728
+ readonly onFailure: (error: E) => A2
729
+ readonly onSuccess: (value: A) => A3
730
+ }
731
+ ) => Effect.Effect<R, never, A2 | A3>
732
+ >(2, (self, { onFailure, onSuccess }) =>
733
+ core.matchEffect(self, {
734
+ onFailure: (e) => core.succeed(onFailure(e)),
735
+ onSuccess: (a) => core.succeed(onSuccess(a))
736
+ }))
737
+
738
+ /* @internal */
739
+ export const every = dual<
740
+ <R, E, A>(
741
+ f: (a: A, i: number) => Effect.Effect<R, E, boolean>
742
+ ) => (elements: Iterable<A>) => Effect.Effect<R, E, boolean>,
743
+ <R, E, A>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, boolean>) => Effect.Effect<R, E, boolean>
744
+ >(2, (elements, f) => core.suspend(() => forAllLoop(elements[Symbol.iterator](), 0, f)))
745
+
746
+ const forAllLoop = <R, E, A>(
747
+ iterator: Iterator<A>,
748
+ index: number,
749
+ f: (a: A, i: number) => Effect.Effect<R, E, boolean>
750
+ ): Effect.Effect<R, E, boolean> => {
751
+ const next = iterator.next()
752
+ return next.done
753
+ ? core.succeed(true)
754
+ : core.flatMap(
755
+ f(next.value, index),
756
+ (b) => b ? forAllLoop(iterator, index + 1, f) : core.succeed(b)
757
+ )
758
+ }
759
+
760
+ /* @internal */
761
+ export const forever = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, never> => {
762
+ const loop: Effect.Effect<R, E, never> = core.flatMap(core.flatMap(self, () => core.yieldNow()), () => loop)
763
+ return loop
764
+ }
765
+
766
+ /** @internal */
767
+ class EffectGen {
768
+ constructor(readonly value: Effect.Effect<any, any, any>) {
769
+ }
770
+ [Symbol.iterator]() {
771
+ return new SingleShotGen.SingleShotGen(this)
772
+ }
773
+ }
774
+
775
+ const adapter = function() {
776
+ let x = arguments[0]
777
+ for (let i = 1; i < arguments.length; i++) {
778
+ x = arguments[i](x)
779
+ }
780
+ return new EffectGen(x) as any
781
+ }
782
+
783
+ /**
784
+ * Inspired by https://github.com/tusharmath/qio/pull/22 (revised)
785
+ @internal */
786
+ export const gen: typeof Effect.gen = function() {
787
+ let f: any
788
+ if (arguments.length === 1) {
789
+ f = arguments[0]
790
+ } else {
791
+ f = arguments[1].bind(arguments[0])
792
+ }
793
+ return core.suspend(() => {
794
+ const iterator = f(adapter)
795
+ const state = iterator.next()
796
+ const run = (
797
+ state: IteratorYieldResult<any> | IteratorReturnResult<any>
798
+ ): Effect.Effect<any, any, any> => (state.done
799
+ ? core.succeed(state.value)
800
+ : pipe(
801
+ state.value.value as unknown as Effect.Effect<any, any, any>,
802
+ core.flatMap((val: any) => run(iterator.next(val)))
803
+ ))
804
+ return run(state)
805
+ })
806
+ }
807
+
808
+ /* @internal */
809
+ export const fiberRefs: Effect.Effect<never, never, FiberRefs.FiberRefs> = core.withFiberRuntime<
810
+ never,
811
+ never,
812
+ FiberRefs.FiberRefs
813
+ >((state) => core.succeed(state.getFiberRefs()))
814
+
815
+ /* @internal */
816
+ export const head = <R, E, A>(
817
+ self: Effect.Effect<R, E, Iterable<A>>
818
+ ): Effect.Effect<R, Option.Option<E>, A> =>
819
+ core.matchEffect(self, {
820
+ onFailure: (e) => core.fail(Option.some(e)),
821
+ onSuccess: (as) => {
822
+ const iterator = as[Symbol.iterator]()
823
+ const next = iterator.next()
824
+ if (next.done) {
825
+ return core.fail(Option.none())
826
+ }
827
+ return core.succeed(next.value)
828
+ }
829
+ })
830
+
831
+ /* @internal */
832
+ export const ignore = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, void> =>
833
+ match(self, { onFailure: constVoid, onSuccess: constVoid })
834
+
835
+ /* @internal */
836
+ export const ignoreLogged = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, void> =>
837
+ core.matchCauseEffect(self, {
838
+ onFailure: (cause) => logDebug(cause, "An error was silently ignored because it is not anticipated to be useful"),
839
+ onSuccess: () => core.unit
840
+ })
841
+
842
+ /* @internal */
843
+ export const inheritFiberRefs = (childFiberRefs: FiberRefs.FiberRefs) =>
844
+ updateFiberRefs((parentFiberId, parentFiberRefs) => FiberRefs.joinAs(parentFiberRefs, parentFiberId, childFiberRefs))
845
+
846
+ /* @internal */
847
+ export const isFailure = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, boolean> =>
848
+ match(self, { onFailure: constTrue, onSuccess: constFalse })
849
+
850
+ /* @internal */
851
+ export const isSuccess = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, boolean> =>
852
+ match(self, { onFailure: constFalse, onSuccess: constTrue })
853
+
854
+ /* @internal */
855
+ export const iterate = <Z, R, E>(
856
+ initial: Z,
857
+ options: {
858
+ readonly while: (z: Z) => boolean
859
+ readonly body: (z: Z) => Effect.Effect<R, E, Z>
860
+ }
861
+ ): Effect.Effect<R, E, Z> =>
862
+ core.suspend<R, E, Z>(() => {
863
+ if (options.while(initial)) {
864
+ return core.flatMap(options.body(initial), (z2) => iterate(z2, options))
865
+ }
866
+ return core.succeed(initial)
867
+ })
868
+
869
+ const logWithLevel = (level?: LogLevel.LogLevel) =>
870
+ <A>(
871
+ messageOrCause: A,
872
+ supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
873
+ ): Effect.Effect<never, never, void> => {
874
+ const levelOption = Option.fromNullable(level)
875
+ let message: unknown
876
+ let cause: Cause.Cause<unknown>
877
+ if (internalCause.isCause(messageOrCause)) {
878
+ cause = messageOrCause
879
+ message = (supplementary as unknown) ?? ""
880
+ } else {
881
+ message = messageOrCause
882
+ cause = (supplementary as Cause.Cause<unknown>) ?? internalCause.empty
883
+ }
884
+ return core.withFiberRuntime<never, never, void>((fiberState) => {
885
+ fiberState.log(message, cause, levelOption)
886
+ return core.unit
887
+ })
888
+ }
889
+
890
+ /** @internal */
891
+ export const log: <A>(
892
+ messageOrCause: A,
893
+ supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
894
+ ) => Effect.Effect<never, never, void> = logWithLevel()
895
+
896
+ /** @internal */
897
+ export const logTrace: <A>(
898
+ messageOrCause: A,
899
+ supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
900
+ ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Trace)
901
+
902
+ /** @internal */
903
+ export const logDebug: <A>(
904
+ messageOrCause: A,
905
+ supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
906
+ ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Debug)
907
+
908
+ /** @internal */
909
+ export const logInfo: <A>(
910
+ messageOrCause: A,
911
+ supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
912
+ ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Info)
913
+
914
+ /** @internal */
915
+ export const logWarning: <A>(
916
+ messageOrCause: A,
917
+ supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
918
+ ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Warning)
919
+
920
+ /** @internal */
921
+ export const logError: <A>(
922
+ messageOrCause: A,
923
+ supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
924
+ ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Error)
925
+
926
+ /** @internal */
927
+ export const logFatal: <A>(
928
+ messageOrCause: A,
929
+ supplementary?: A extends Cause.Cause<any> ? unknown : Cause.Cause<unknown>
930
+ ) => Effect.Effect<never, never, void> = logWithLevel(LogLevel.Fatal)
931
+
932
+ /* @internal */
933
+ export const withLogSpan = dual<
934
+ (label: string) => <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
935
+ <R, E, A>(effect: Effect.Effect<R, E, A>, label: string) => Effect.Effect<R, E, A>
936
+ >(2, (effect, label) =>
937
+ core.flatMap(Clock.currentTimeMillis, (now) =>
938
+ core.fiberRefLocallyWith(
939
+ effect,
940
+ core.currentLogSpan,
941
+ List.prepend(LogSpan.make(label, now))
942
+ )))
943
+
944
+ /* @internal */
945
+ export const logAnnotations: Effect.Effect<never, never, HashMap.HashMap<string, Logger.AnnotationValue>> = core
946
+ .fiberRefGet(
947
+ core.currentLogAnnotations
948
+ )
949
+
950
+ /* @internal */
951
+ // @ts-expect-error
952
+ export const loop: {
953
+ <Z, R, E, A>(
954
+ initial: Z,
955
+ options: {
956
+ readonly while: (z: Z) => boolean
957
+ readonly step: (z: Z) => Z
958
+ readonly body: (z: Z) => Effect.Effect<R, E, A>
959
+ readonly discard?: false | undefined
960
+ }
961
+ ): Effect.Effect<R, E, Array<A>>
962
+ <Z, R, E, A>(
963
+ initial: Z,
964
+ options: {
965
+ readonly while: (z: Z) => boolean
966
+ readonly step: (z: Z) => Z
967
+ readonly body: (z: Z) => Effect.Effect<R, E, A>
968
+ readonly discard: true
969
+ }
970
+ ): Effect.Effect<R, E, void>
971
+ } = <Z, R, E, A>(
972
+ initial: Z,
973
+ options: {
974
+ readonly while: (z: Z) => boolean
975
+ readonly step: (z: Z) => Z
976
+ readonly body: (z: Z) => Effect.Effect<R, E, A>
977
+ readonly discard?: boolean
978
+ }
979
+ ): Effect.Effect<R, E, Array<A>> | Effect.Effect<R, E, void> =>
980
+ options.discard
981
+ ? loopDiscard(initial, options.while, options.step, options.body)
982
+ : core.map(loopInternal(initial, options.while, options.step, options.body), (x) => Array.from(x))
983
+
984
+ const loopInternal = <Z, R, E, A>(
985
+ initial: Z,
986
+ cont: (z: Z) => boolean,
987
+ inc: (z: Z) => Z,
988
+ body: (z: Z) => Effect.Effect<R, E, A>
989
+ ): Effect.Effect<R, E, List.List<A>> =>
990
+ core.suspend(() =>
991
+ cont(initial)
992
+ ? core.flatMap(body(initial), (a) =>
993
+ core.map(
994
+ loopInternal(inc(initial), cont, inc, body),
995
+ List.prepend(a)
996
+ ))
997
+ : core.sync(() => List.empty())
998
+ )
999
+
1000
+ const loopDiscard = <Z, R, E, X>(
1001
+ initial: Z,
1002
+ cont: (z: Z) => boolean,
1003
+ inc: (z: Z) => Z,
1004
+ body: (z: Z) => Effect.Effect<R, E, X>
1005
+ ): Effect.Effect<R, E, void> =>
1006
+ core.suspend(() =>
1007
+ cont(initial)
1008
+ ? core.flatMap(
1009
+ body(initial),
1010
+ () => loopDiscard(inc(initial), cont, inc, body)
1011
+ )
1012
+ : core.unit
1013
+ )
1014
+
1015
+ /* @internal */
1016
+ export const mapAccum = dual<
1017
+ <A, B, R, E, Z>(
1018
+ zero: Z,
1019
+ f: (z: Z, a: A, i: number) => Effect.Effect<R, E, readonly [Z, B]>
1020
+ ) => (elements: Iterable<A>) => Effect.Effect<R, E, readonly [Z, Array<B>]>,
1021
+ <A, B, R, E, Z>(
1022
+ elements: Iterable<A>,
1023
+ zero: Z,
1024
+ f: (z: Z, a: A, i: number) => Effect.Effect<R, E, readonly [Z, B]>
1025
+ ) => Effect.Effect<R, E, readonly [Z, Array<B>]>
1026
+ >(3, <A, B, R, E, Z>(
1027
+ elements: Iterable<A>,
1028
+ zero: Z,
1029
+ f: (z: Z, a: A, i: number) => Effect.Effect<R, E, readonly [Z, B]>
1030
+ ) =>
1031
+ core.suspend(() => {
1032
+ const iterator = elements[Symbol.iterator]()
1033
+ const builder: Array<B> = []
1034
+ let result: Effect.Effect<R, E, Z> = core.succeed(zero)
1035
+ let next: IteratorResult<A, any>
1036
+ let i = 0
1037
+ while (!(next = iterator.next()).done) {
1038
+ const index = i++
1039
+ result = core.flatMap(result, (state) =>
1040
+ core.map(f(state, next.value, index), ([z, b]) => {
1041
+ builder.push(b)
1042
+ return z
1043
+ }))
1044
+ }
1045
+ return core.map(result, (z) => [z, builder] as const)
1046
+ }))
1047
+
1048
+ /* @internal */
1049
+ export const mapErrorCause = dual<
1050
+ <E, E2>(
1051
+ f: (cause: Cause.Cause<E>) => Cause.Cause<E2>
1052
+ ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2, A>,
1053
+ <R, E, A, E2>(self: Effect.Effect<R, E, A>, f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => Effect.Effect<R, E2, A>
1054
+ >(2, (self, f) =>
1055
+ core.matchCauseEffect(self, {
1056
+ onFailure: (c) => core.failCauseSync(() => f(c)),
1057
+ onSuccess: core.succeed
1058
+ }))
1059
+
1060
+ /* @internal */
1061
+ export const memoize = <R, E, A>(
1062
+ self: Effect.Effect<R, E, A>
1063
+ ): Effect.Effect<never, never, Effect.Effect<R, E, A>> =>
1064
+ pipe(
1065
+ core.deferredMake<
1066
+ E,
1067
+ readonly [
1068
+ readonly [
1069
+ FiberRefsPatch.FiberRefsPatch,
1070
+ runtimeFlagsPatch.RuntimeFlagsPatch
1071
+ ],
1072
+ A
1073
+ ]
1074
+ >(),
1075
+ core.flatMap((deferred) =>
1076
+ pipe(
1077
+ diffFiberRefsAndRuntimeFlags(self),
1078
+ core.intoDeferred(deferred),
1079
+ once,
1080
+ core.map((complete) =>
1081
+ core.zipRight(
1082
+ complete,
1083
+ pipe(
1084
+ core.deferredAwait(deferred),
1085
+ core.flatMap(([patch, a]) =>
1086
+ core.as(core.zip(patchFiberRefs(patch[0]), core.updateRuntimeFlags(patch[1])), a)
1087
+ )
1088
+ )
1089
+ )
1090
+ )
1091
+ )
1092
+ )
1093
+ )
1094
+
1095
+ /* @internal */
1096
+ export const merge = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, E | A> =>
1097
+ core.matchEffect(self, {
1098
+ onFailure: (e) => core.succeed(e),
1099
+ onSuccess: core.succeed
1100
+ })
1101
+
1102
+ /* @internal */
1103
+ export const negate = <R, E>(self: Effect.Effect<R, E, boolean>): Effect.Effect<R, E, boolean> =>
1104
+ core.map(self, (b) => !b)
1105
+
1106
+ /* @internal */
1107
+ export const none = <R, E, A>(
1108
+ self: Effect.Effect<R, E, Option.Option<A>>
1109
+ ): Effect.Effect<R, Option.Option<E>, void> =>
1110
+ core.matchEffect(self, {
1111
+ onFailure: (e) => core.fail(Option.some(e)),
1112
+ onSuccess: (option) => {
1113
+ switch (option._tag) {
1114
+ case "None": {
1115
+ return core.unit
1116
+ }
1117
+ case "Some": {
1118
+ return core.fail(Option.none())
1119
+ }
1120
+ }
1121
+ }
1122
+ })
1123
+
1124
+ /* @internal */
1125
+ export const once = <R, E, A>(
1126
+ self: Effect.Effect<R, E, A>
1127
+ ): Effect.Effect<never, never, Effect.Effect<R, E, void>> =>
1128
+ core.map(
1129
+ Ref.make(true),
1130
+ (ref) => core.asUnit(core.whenEffect(self, Ref.getAndSet(ref, false)))
1131
+ )
1132
+
1133
+ /* @internal */
1134
+ export const option = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, Option.Option<A>> =>
1135
+ core.matchEffect(self, {
1136
+ onFailure: () => core.succeed(Option.none()),
1137
+ onSuccess: (a) => core.succeed(Option.some(a))
1138
+ })
1139
+
1140
+ /* @internal */
1141
+ export const orElseFail = dual<
1142
+ <E2>(evaluate: LazyArg<E2>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2, A>,
1143
+ <R, E, A, E2>(self: Effect.Effect<R, E, A>, evaluate: LazyArg<E2>) => Effect.Effect<R, E2, A>
1144
+ >(2, (self, evaluate) => core.orElse(self, () => core.failSync(evaluate)))
1145
+
1146
+ /* @internal */
1147
+ export const orElseSucceed = dual<
1148
+ <A2>(evaluate: LazyArg<A2>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, never, A | A2>,
1149
+ <R, E, A, A2>(self: Effect.Effect<R, E, A>, evaluate: LazyArg<A2>) => Effect.Effect<R, never, A | A2>
1150
+ >(2, (self, evaluate) => core.orElse(self, () => core.sync(evaluate)))
1151
+
1152
+ /* @internal */
1153
+ export const parallelErrors = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, Array<E>, A> =>
1154
+ core.matchCauseEffect(self, {
1155
+ onFailure: (cause) => {
1156
+ const errors = Array.from(internalCause.failures(cause))
1157
+ return errors.length === 0
1158
+ ? core.failCause(cause as Cause.Cause<never>)
1159
+ : core.fail(errors)
1160
+ },
1161
+ onSuccess: core.succeed
1162
+ })
1163
+
1164
+ /* @internal */
1165
+ export const patchFiberRefs = (patch: FiberRefsPatch.FiberRefsPatch): Effect.Effect<never, never, void> =>
1166
+ updateFiberRefs((fiberId, fiberRefs) => pipe(patch, fiberRefsPatch.patch(fiberId, fiberRefs)))
1167
+
1168
+ /* @internal */
1169
+ export const promise = <A>(evaluate: (signal: AbortSignal) => Promise<A>): Effect.Effect<never, never, A> =>
1170
+ evaluate.length >= 1
1171
+ ? core.async<never, never, A>((resolve, signal) => {
1172
+ evaluate(signal)
1173
+ .then((a) => resolve(core.exitSucceed(a)))
1174
+ .catch((e) => resolve(core.exitDie(e)))
1175
+ })
1176
+ : core.async<never, never, A>((resolve) => {
1177
+ ;(evaluate as LazyArg<Promise<A>>)()
1178
+ .then((a) => resolve(core.exitSucceed(a)))
1179
+ .catch((e) => resolve(core.exitDie(e)))
1180
+ })
1181
+
1182
+ /* @internal */
1183
+ export const provideService = dual<
1184
+ <T extends Context.Tag<any, any>>(
1185
+ tag: T,
1186
+ service: Context.Tag.Service<T>
1187
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<Exclude<R, Context.Tag.Identifier<T>>, E, A>,
1188
+ <R, E, A, T extends Context.Tag<any, any>>(
1189
+ self: Effect.Effect<R, E, A>,
1190
+ tag: T,
1191
+ service: Context.Tag.Service<T>
1192
+ ) => Effect.Effect<Exclude<R, Context.Tag.Identifier<T>>, E, A>
1193
+ >(3, (self, tag, service) => provideServiceEffect(self, tag, core.succeed(service)))
1194
+
1195
+ /* @internal */
1196
+ export const provideServiceEffect = dual<
1197
+ <T extends Context.Tag<any, any>, R1, E1>(
1198
+ tag: T,
1199
+ effect: Effect.Effect<R1, E1, Context.Tag.Service<T>>
1200
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R1 | Exclude<R, Context.Tag.Identifier<T>>, E | E1, A>,
1201
+ <R, E, A, T extends Context.Tag<any, any>, R1, E1>(
1202
+ self: Effect.Effect<R, E, A>,
1203
+ tag: T,
1204
+ effect: Effect.Effect<R1, E1, Context.Tag.Service<T>>
1205
+ ) => Effect.Effect<R1 | Exclude<R, Context.Tag.Identifier<T>>, E | E1, A>
1206
+ >(3, <R, E, A, T extends Context.Tag<any, any>, R1, E1>(
1207
+ self: Effect.Effect<R, E, A>,
1208
+ tag: T,
1209
+ effect: Effect.Effect<R1, E1, Context.Tag.Service<T>>
1210
+ ) =>
1211
+ core.contextWithEffect((env: Context.Context<R1 | Exclude<R, Context.Tag.Identifier<T>>>) =>
1212
+ core.flatMap(
1213
+ effect,
1214
+ (service) => core.provideContext(self, pipe(env, Context.add(tag, service)) as Context.Context<R | R1>)
1215
+ )
1216
+ ))
1217
+
1218
+ /* @internal */
1219
+ export const random: Effect.Effect<never, never, Random.Random> = defaultServices.randomWith(core.succeed)
1220
+
1221
+ /* @internal */
1222
+ export const reduce = dual<
1223
+ <Z, A, R, E>(
1224
+ zero: Z,
1225
+ f: (z: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1226
+ ) => (elements: Iterable<A>) => Effect.Effect<R, E, Z>,
1227
+ <Z, A, R, E>(
1228
+ elements: Iterable<A>,
1229
+ zero: Z,
1230
+ f: (z: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1231
+ ) => Effect.Effect<R, E, Z>
1232
+ >(
1233
+ 3,
1234
+ <Z, A, R, E>(elements: Iterable<A>, zero: Z, f: (z: Z, a: A, i: number) => Effect.Effect<R, E, Z>) =>
1235
+ ReadonlyArray.fromIterable(elements).reduce(
1236
+ (acc, el, i) => core.flatMap(acc, (a) => f(a, el, i)),
1237
+ core.succeed(zero) as Effect.Effect<R, E, Z>
1238
+ )
1239
+ )
1240
+
1241
+ /* @internal */
1242
+ export const reduceRight = dual<
1243
+ <A, Z, R, E>(
1244
+ zero: Z,
1245
+ f: (a: A, z: Z, i: number) => Effect.Effect<R, E, Z>
1246
+ ) => (elements: Iterable<A>) => Effect.Effect<R, E, Z>,
1247
+ <A, Z, R, E>(
1248
+ elements: Iterable<A>,
1249
+ zero: Z,
1250
+ f: (a: A, z: Z, i: number) => Effect.Effect<R, E, Z>
1251
+ ) => Effect.Effect<R, E, Z>
1252
+ >(
1253
+ 3,
1254
+ <A, Z, R, E>(elements: Iterable<A>, zero: Z, f: (a: A, z: Z, i: number) => Effect.Effect<R, E, Z>) =>
1255
+ ReadonlyArray.fromIterable(elements).reduceRight(
1256
+ (acc, el, i) => core.flatMap(acc, (a) => f(el, a, i)),
1257
+ core.succeed(zero) as Effect.Effect<R, E, Z>
1258
+ )
1259
+ )
1260
+
1261
+ /* @internal */
1262
+ export const reduceWhile = dual<
1263
+ <A, R, E, Z>(
1264
+ zero: Z,
1265
+ options: {
1266
+ readonly while: Predicate.Predicate<Z>
1267
+ readonly body: (s: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1268
+ }
1269
+ ) => (elements: Iterable<A>) => Effect.Effect<R, E, Z>,
1270
+ <A, R, E, Z>(
1271
+ elements: Iterable<A>,
1272
+ zero: Z,
1273
+ options: {
1274
+ readonly while: Predicate.Predicate<Z>
1275
+ readonly body: (s: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1276
+ }
1277
+ ) => Effect.Effect<R, E, Z>
1278
+ >(3, <A, R, E, Z>(
1279
+ elements: Iterable<A>,
1280
+ zero: Z,
1281
+ options: {
1282
+ readonly while: Predicate.Predicate<Z>
1283
+ readonly body: (s: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1284
+ }
1285
+ ) =>
1286
+ core.flatMap(
1287
+ core.sync(() => elements[Symbol.iterator]()),
1288
+ (iterator) => reduceWhileLoop(iterator, 0, zero, options.while, options.body)
1289
+ ))
1290
+
1291
+ const reduceWhileLoop = <A, R, E, Z>(
1292
+ iterator: Iterator<A>,
1293
+ index: number,
1294
+ state: Z,
1295
+ predicate: Predicate.Predicate<Z>,
1296
+ f: (s: Z, a: A, i: number) => Effect.Effect<R, E, Z>
1297
+ ): Effect.Effect<R, E, Z> => {
1298
+ const next = iterator.next()
1299
+ if (!next.done && predicate(state)) {
1300
+ return core.flatMap(
1301
+ f(state, next.value, index),
1302
+ (nextState) => reduceWhileLoop(iterator, index + 1, nextState, predicate, f)
1303
+ )
1304
+ }
1305
+ return core.succeed(state)
1306
+ }
1307
+
1308
+ /* @internal */
1309
+ export const repeatN = dual<
1310
+ (n: number) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1311
+ <R, E, A>(self: Effect.Effect<R, E, A>, n: number) => Effect.Effect<R, E, A>
1312
+ >(2, (self, n) => core.suspend(() => repeatNLoop(self, n)))
1313
+
1314
+ /* @internal */
1315
+ const repeatNLoop = <R, E, A>(self: Effect.Effect<R, E, A>, n: number): Effect.Effect<R, E, A> =>
1316
+ core.flatMap(self, (a) =>
1317
+ n <= 0
1318
+ ? core.succeed(a)
1319
+ : core.zipRight(core.yieldNow(), repeatNLoop(self, n - 1)))
1320
+
1321
+ /* @internal */
1322
+ export const sandbox = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, Cause.Cause<E>, A> =>
1323
+ core.matchCauseEffect(self, {
1324
+ onFailure: core.fail,
1325
+ onSuccess: core.succeed
1326
+ })
1327
+
1328
+ /* @internal */
1329
+ export const setFiberRefs = (fiberRefs: FiberRefs.FiberRefs): Effect.Effect<never, never, void> =>
1330
+ core.suspend(() => FiberRefs.setAll(fiberRefs))
1331
+
1332
+ /* @internal */
1333
+ export const sleep: (duration: Duration.DurationInput) => Effect.Effect<never, never, void> = Clock.sleep
1334
+
1335
+ /* @internal */
1336
+ export const succeedNone: Effect.Effect<never, never, Option.Option<never>> = core.succeed(Option.none())
1337
+
1338
+ /* @internal */
1339
+ export const succeedSome = <A>(value: A): Effect.Effect<never, never, Option.Option<A>> =>
1340
+ core.succeed(Option.some(value))
1341
+
1342
+ /* @internal */
1343
+ export const summarized = dual<
1344
+ <R2, E2, B, C>(
1345
+ summary: Effect.Effect<R2, E2, B>,
1346
+ f: (start: B, end: B) => C
1347
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, readonly [C, A]>,
1348
+ <R, E, A, R2, E2, B, C>(
1349
+ self: Effect.Effect<R, E, A>,
1350
+ summary: Effect.Effect<R2, E2, B>,
1351
+ f: (start: B, end: B) => C
1352
+ ) => Effect.Effect<R | R2, E | E2, readonly [C, A]>
1353
+ >(
1354
+ 3,
1355
+ (self, summary, f) =>
1356
+ core.flatMap(
1357
+ summary,
1358
+ (start) => core.flatMap(self, (value) => core.map(summary, (end) => [f(start, end), value] as const))
1359
+ )
1360
+ )
1361
+
1362
+ /* @internal */
1363
+ export const tagMetrics = dual<
1364
+ {
1365
+ (key: string, value: string): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
1366
+ (
1367
+ values: Record<string, string>
1368
+ ): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
1369
+ },
1370
+ {
1371
+ <R, E, A>(effect: Effect.Effect<R, E, A>, key: string, value: string): Effect.Effect<R, E, A>
1372
+ <R, E, A>(effect: Effect.Effect<R, E, A>, values: Record<string, string>): Effect.Effect<R, E, A>
1373
+ }
1374
+ >((args) => core.isEffect(args[0]), function() {
1375
+ return labelMetrics(
1376
+ arguments[0],
1377
+ typeof arguments[1] === "string"
1378
+ ? [metricLabel.make(arguments[1], arguments[2])]
1379
+ : Object.entries<string>(arguments[1]).map(([k, v]) => metricLabel.make(k, v))
1380
+ )
1381
+ })
1382
+
1383
+ /* @internal */
1384
+ export const labelMetrics = dual<
1385
+ (labels: Iterable<MetricLabel.MetricLabel>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1386
+ <R, E, A>(self: Effect.Effect<R, E, A>, labels: Iterable<MetricLabel.MetricLabel>) => Effect.Effect<R, E, A>
1387
+ >(2, (self, labels) => labelMetricsSet(self, HashSet.fromIterable(labels)))
1388
+
1389
+ /* @internal */
1390
+ export const labelMetricsSet = dual<
1391
+ (labels: HashSet.HashSet<MetricLabel.MetricLabel>) => <R, E, A>(
1392
+ self: Effect.Effect<R, E, A>
1393
+ ) => Effect.Effect<R, E, A>,
1394
+ <R, E, A>(self: Effect.Effect<R, E, A>, labels: HashSet.HashSet<MetricLabel.MetricLabel>) => Effect.Effect<R, E, A>
1395
+ >(
1396
+ 2,
1397
+ (self, labels) => core.fiberRefLocallyWith(core.currentMetricLabels, (set) => pipe(set, HashSet.union(labels)))(self)
1398
+ )
1399
+
1400
+ /* @internal */
1401
+ export const takeUntil = dual<
1402
+ <R, E, A>(
1403
+ predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
1404
+ ) => (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>,
1405
+ <R, E, A>(
1406
+ elements: Iterable<A>,
1407
+ predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
1408
+ ) => Effect.Effect<R, E, Array<A>>
1409
+ >(
1410
+ 2,
1411
+ <R, E, A>(elements: Iterable<A>, predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>) =>
1412
+ core.suspend(() => {
1413
+ const iterator = elements[Symbol.iterator]()
1414
+ const builder: Array<A> = []
1415
+ let next: IteratorResult<A, any>
1416
+ let effect: Effect.Effect<R, E, boolean> = core.succeed(false)
1417
+ let i = 0
1418
+ while ((next = iterator.next()) && !next.done) {
1419
+ const a = next.value
1420
+ const index = i++
1421
+ effect = core.flatMap(effect, (bool) => {
1422
+ if (bool) {
1423
+ return core.succeed(true)
1424
+ }
1425
+ builder.push(a)
1426
+ return predicate(a, index)
1427
+ })
1428
+ }
1429
+ return core.map(effect, () => builder)
1430
+ })
1431
+ )
1432
+
1433
+ /* @internal */
1434
+ export const takeWhile = dual<
1435
+ <R, E, A>(
1436
+ predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
1437
+ ) => (elements: Iterable<A>) => Effect.Effect<R, E, Array<A>>,
1438
+ <R, E, A>(
1439
+ elements: Iterable<A>,
1440
+ predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>
1441
+ ) => Effect.Effect<R, E, Array<A>>
1442
+ >(
1443
+ 2,
1444
+ <R, E, A>(elements: Iterable<A>, predicate: (a: A, i: number) => Effect.Effect<R, E, boolean>) =>
1445
+ core.suspend(() => {
1446
+ const iterator = elements[Symbol.iterator]()
1447
+ const builder: Array<A> = []
1448
+ let next: IteratorResult<A, any>
1449
+ let taking: Effect.Effect<R, E, boolean> = core.succeed(true)
1450
+ let i = 0
1451
+ while ((next = iterator.next()) && !next.done) {
1452
+ const a = next.value
1453
+ const index = i++
1454
+ taking = core.flatMap(taking, (taking) =>
1455
+ pipe(
1456
+ taking ? predicate(a, index) : core.succeed(false),
1457
+ core.map((bool) => {
1458
+ if (bool) {
1459
+ builder.push(a)
1460
+ }
1461
+ return bool
1462
+ })
1463
+ ))
1464
+ }
1465
+ return core.map(taking, () => builder)
1466
+ })
1467
+ )
1468
+
1469
+ /* @internal */
1470
+ export const tapBoth = dual<
1471
+ <E, XE extends E, A, XA extends A, R2, E2, X, R3, E3, X1>(
1472
+ options: {
1473
+ readonly onFailure: (e: XE) => Effect.Effect<R2, E2, X>
1474
+ readonly onSuccess: (a: XA) => Effect.Effect<R3, E3, X1>
1475
+ }
1476
+ ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2 | R3, E | E2 | E3, A>,
1477
+ <R, E, A, XE extends E, XA extends A, R2, E2, X, R3, E3, X1>(
1478
+ self: Effect.Effect<R, E, A>,
1479
+ options: {
1480
+ readonly onFailure: (e: XE) => Effect.Effect<R2, E2, X>
1481
+ readonly onSuccess: (a: XA) => Effect.Effect<R3, E3, X1>
1482
+ }
1483
+ ) => Effect.Effect<R | R2 | R3, E | E2 | E3, A>
1484
+ >(2, (self, { onFailure, onSuccess }) =>
1485
+ core.matchCauseEffect(self, {
1486
+ onFailure: (cause) => {
1487
+ const either = internalCause.failureOrCause(cause)
1488
+ switch (either._tag) {
1489
+ case "Left": {
1490
+ return core.zipRight(onFailure(either.left as any), core.failCause(cause))
1491
+ }
1492
+ case "Right": {
1493
+ return core.failCause(cause)
1494
+ }
1495
+ }
1496
+ },
1497
+ onSuccess: (a) => core.as(onSuccess(a as any), a)
1498
+ }))
1499
+
1500
+ /* @internal */
1501
+ export const tapDefect = dual<
1502
+ <R2, E2, X>(
1503
+ f: (cause: Cause.Cause<never>) => Effect.Effect<R2, E2, X>
1504
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A>,
1505
+ <R, E, A, R2, E2, X>(
1506
+ self: Effect.Effect<R, E, A>,
1507
+ f: (cause: Cause.Cause<never>) => Effect.Effect<R2, E2, X>
1508
+ ) => Effect.Effect<R | R2, E | E2, A>
1509
+ >(2, (self, f) =>
1510
+ core.catchAllCause(self, (cause) =>
1511
+ Option.match(internalCause.keepDefects(cause), {
1512
+ onNone: () => core.failCause(cause),
1513
+ onSome: (a) => core.zipRight(f(a), core.failCause(cause))
1514
+ })))
1515
+
1516
+ /* @internal */
1517
+ export const tapError = dual<
1518
+ <E, XE extends E, R2, E2, X>(
1519
+ f: (e: XE) => Effect.Effect<R2, E2, X>
1520
+ ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A>,
1521
+ <R, E, XE extends E, A, R2, E2, X>(
1522
+ self: Effect.Effect<R, E, A>,
1523
+ f: (e: XE) => Effect.Effect<R2, E2, X>
1524
+ ) => Effect.Effect<R | R2, E | E2, A>
1525
+ >(2, (self, f) =>
1526
+ core.matchCauseEffect(self, {
1527
+ onFailure: (cause) => {
1528
+ const either = internalCause.failureOrCause(cause)
1529
+ switch (either._tag) {
1530
+ case "Left": {
1531
+ return core.zipRight(f(either.left as any), core.failCause(cause))
1532
+ }
1533
+ case "Right": {
1534
+ return core.failCause(cause)
1535
+ }
1536
+ }
1537
+ },
1538
+ onSuccess: core.succeed
1539
+ }))
1540
+
1541
+ /* @internal */
1542
+ export const tapErrorTag = dual<
1543
+ <K extends (E extends { _tag: string } ? E["_tag"] : never), E, R1, E1, A1>(
1544
+ k: K,
1545
+ f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
1546
+ ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R1, E | E1, A>,
1547
+ <R, E, A, K extends (E extends { _tag: string } ? E["_tag"] : never), R1, E1, A1>(
1548
+ self: Effect.Effect<R, E, A>,
1549
+ k: K,
1550
+ f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
1551
+ ) => Effect.Effect<R | R1, E | E1, A>
1552
+ >(3, (self, k, f) =>
1553
+ tapError(self, (e) => {
1554
+ if (Predicate.isTagged(e, k)) {
1555
+ return f(e as any)
1556
+ }
1557
+ return core.unit as any
1558
+ }))
1559
+
1560
+ /* @internal */
1561
+ export const tapErrorCause = dual<
1562
+ <E, XE extends E, R2, E2, X>(
1563
+ f: (cause: Cause.Cause<XE>) => Effect.Effect<R2, E2, X>
1564
+ ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A>,
1565
+ <R, E, A, XE extends E, R2, E2, X>(
1566
+ self: Effect.Effect<R, E, A>,
1567
+ f: (cause: Cause.Cause<XE>) => Effect.Effect<R2, E2, X>
1568
+ ) => Effect.Effect<R | R2, E | E2, A>
1569
+ >(2, (self, f) =>
1570
+ core.matchCauseEffect(self, {
1571
+ onFailure: (cause) => core.zipRight(f(cause as any), core.failCause(cause)),
1572
+ onSuccess: core.succeed
1573
+ }))
1574
+
1575
+ /* @internal */
1576
+ export const timed = <R, E, A>(
1577
+ self: Effect.Effect<R, E, A>
1578
+ ): Effect.Effect<R, E, readonly [Duration.Duration, A]> => timedWith(self, Clock.currentTimeNanos)
1579
+
1580
+ /* @internal */
1581
+ export const timedWith = dual<
1582
+ <R1, E1>(
1583
+ nanoseconds: Effect.Effect<R1, E1, bigint>
1584
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R1, E | E1, readonly [Duration.Duration, A]>,
1585
+ <R, E, A, R1, E1>(
1586
+ self: Effect.Effect<R, E, A>,
1587
+ nanoseconds: Effect.Effect<R1, E1, bigint>
1588
+ ) => Effect.Effect<R | R1, E | E1, readonly [Duration.Duration, A]>
1589
+ >(
1590
+ 2,
1591
+ (self, nanos) => summarized(self, nanos, (start, end) => Duration.nanos(end - start))
1592
+ )
1593
+
1594
+ /* @internal */
1595
+ export const tracerWith: <R, E, A>(f: (tracer: Tracer.Tracer) => Effect.Effect<R, E, A>) => Effect.Effect<R, E, A> =
1596
+ Tracer.tracerWith
1597
+
1598
+ /** @internal */
1599
+ export const tracer: Effect.Effect<never, never, Tracer.Tracer> = tracerWith(core.succeed)
1600
+
1601
+ /* @internal */
1602
+ export const tryPromise: {
1603
+ <A, E>(
1604
+ options: {
1605
+ readonly try: (signal: AbortSignal) => Promise<A>
1606
+ readonly catch: (error: unknown) => E
1607
+ }
1608
+ ): Effect.Effect<never, E, A>
1609
+ <A>(try_: (signal: AbortSignal) => Promise<A>): Effect.Effect<never, unknown, A>
1610
+ } = <A, E>(
1611
+ arg: ((signal: AbortSignal) => Promise<A>) | {
1612
+ readonly try: (signal: AbortSignal) => Promise<A>
1613
+ readonly catch: (error: unknown) => E
1614
+ }
1615
+ ): Effect.Effect<never, E | unknown, A> => {
1616
+ let evaluate: (signal?: AbortSignal) => Promise<A>
1617
+ let catcher: ((error: unknown) => E) | undefined = undefined
1618
+
1619
+ if (typeof arg === "function") {
1620
+ evaluate = arg as (signal?: AbortSignal) => Promise<A>
1621
+ } else {
1622
+ evaluate = arg.try as (signal?: AbortSignal) => Promise<A>
1623
+ catcher = arg.catch
1624
+ }
1625
+
1626
+ if (evaluate.length >= 1) {
1627
+ return core.suspend(() => {
1628
+ const controller = new AbortController()
1629
+ return core.flatMap(try_(() => evaluate(controller.signal)), (promise) =>
1630
+ core.async((resolve) => {
1631
+ promise
1632
+ .then((a) => resolve(core.exitSucceed(a)))
1633
+ .catch((e) =>
1634
+ resolve(core.fail(
1635
+ catcher ? catcher(e) : e
1636
+ ))
1637
+ )
1638
+ return core.sync(() => controller.abort())
1639
+ }))
1640
+ })
1641
+ }
1642
+
1643
+ return core.flatMap(
1644
+ try_(
1645
+ arg as {
1646
+ readonly try: LazyArg<Promise<A>>
1647
+ readonly catch: (error: unknown) => E
1648
+ }
1649
+ ),
1650
+ (promise) =>
1651
+ core.async<never, E, A>((resolve) => {
1652
+ promise
1653
+ .then((a) => resolve(core.exitSucceed(a)))
1654
+ .catch((e) =>
1655
+ resolve(core.fail(
1656
+ catcher ? catcher(e) : e
1657
+ ))
1658
+ )
1659
+ })
1660
+ )
1661
+ }
1662
+
1663
+ /* @internal */
1664
+ export const tryMap = dual<
1665
+ <A, B, E1>(
1666
+ options: {
1667
+ readonly try: (a: A) => B
1668
+ readonly catch: (error: unknown) => E1
1669
+ }
1670
+ ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E | E1, B>,
1671
+ <R, E, A, B, E1>(
1672
+ self: Effect.Effect<R, E, A>,
1673
+ options: {
1674
+ readonly try: (a: A) => B
1675
+ readonly catch: (error: unknown) => E1
1676
+ }
1677
+ ) => Effect.Effect<R, E | E1, B>
1678
+ >(2, (self, options) =>
1679
+ core.flatMap(self, (a) =>
1680
+ try_({
1681
+ try: () => options.try(a),
1682
+ catch: options.catch
1683
+ })))
1684
+
1685
+ /* @internal */
1686
+ export const tryMapPromise = dual<
1687
+ <A, B, E1>(
1688
+ options: {
1689
+ readonly try: (a: A, signal: AbortSignal) => Promise<B>
1690
+ readonly catch: (error: unknown) => E1
1691
+ }
1692
+ ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E | E1, B>,
1693
+ <R, E, A, B, E1>(
1694
+ self: Effect.Effect<R, E, A>,
1695
+ options: {
1696
+ readonly try: (a: A, signal: AbortSignal) => Promise<B>
1697
+ readonly catch: (error: unknown) => E1
1698
+ }
1699
+ ) => Effect.Effect<R, E | E1, B>
1700
+ >(2, <R, E, A, B, E1>(
1701
+ self: Effect.Effect<R, E, A>,
1702
+ options: {
1703
+ readonly try: (a: A, signal: AbortSignal) => Promise<B>
1704
+ readonly catch: (error: unknown) => E1
1705
+ }
1706
+ ): Effect.Effect<R, E | E1, B> =>
1707
+ core.flatMap(self, (a) =>
1708
+ tryPromise({
1709
+ try: options.try.length >= 1
1710
+ ? (signal) => options.try(a, signal)
1711
+ : () => (options.try as (a: A) => Promise<B>)(a),
1712
+ catch: options.catch
1713
+ })))
1714
+
1715
+ /* @internal */
1716
+ export const unless = dual<
1717
+ (predicate: LazyArg<boolean>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, Option.Option<A>>,
1718
+ <R, E, A>(self: Effect.Effect<R, E, A>, predicate: LazyArg<boolean>) => Effect.Effect<R, E, Option.Option<A>>
1719
+ >(2, (self, predicate) =>
1720
+ core.suspend(() =>
1721
+ predicate()
1722
+ ? succeedNone
1723
+ : asSome(self)
1724
+ ))
1725
+
1726
+ /* @internal */
1727
+ export const unlessEffect = dual<
1728
+ <R2, E2>(
1729
+ predicate: Effect.Effect<R2, E2, boolean>
1730
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, Option.Option<A>>,
1731
+ <R, E, A, R2, E2>(
1732
+ self: Effect.Effect<R, E, A>,
1733
+ predicate: Effect.Effect<R2, E2, boolean>
1734
+ ) => Effect.Effect<R | R2, E | E2, Option.Option<A>>
1735
+ >(2, (self, predicate) => core.flatMap(predicate, (b) => (b ? succeedNone : asSome(self))))
1736
+
1737
+ /* @internal */
1738
+ export const unsandbox = <R, E, A>(self: Effect.Effect<R, Cause.Cause<E>, A>) =>
1739
+ mapErrorCause(self, internalCause.flatten)
1740
+
1741
+ /* @internal */
1742
+ export const updateFiberRefs = (
1743
+ f: (fiberId: FiberId.Runtime, fiberRefs: FiberRefs.FiberRefs) => FiberRefs.FiberRefs
1744
+ ): Effect.Effect<never, never, void> =>
1745
+ core.withFiberRuntime<never, never, void>((state) => {
1746
+ state.setFiberRefs(f(state.id(), state.getFiberRefs()))
1747
+ return core.unit
1748
+ })
1749
+
1750
+ /* @internal */
1751
+ export const updateService = dual<
1752
+ <T extends Context.Tag<any, any>>(
1753
+ tag: T,
1754
+ f: (service: Context.Tag.Service<T>) => Context.Tag.Service<T>
1755
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | Context.Tag.Identifier<T>, E, A>,
1756
+ <R, E, A, T extends Context.Tag<any, any>>(
1757
+ self: Effect.Effect<R, E, A>,
1758
+ tag: T,
1759
+ f: (service: Context.Tag.Service<T>) => Context.Tag.Service<T>
1760
+ ) => Effect.Effect<R | Context.Tag.Identifier<T>, E, A>
1761
+ >(3, <R, E, A, T extends Context.Tag<any, any>>(
1762
+ self: Effect.Effect<R, E, A>,
1763
+ tag: T,
1764
+ f: (service: Context.Tag.Service<T>) => Context.Tag.Service<T>
1765
+ ) =>
1766
+ core.mapInputContext(self, (context) =>
1767
+ Context.add(
1768
+ context,
1769
+ tag,
1770
+ f(Context.unsafeGet(context, tag))
1771
+ )) as Effect.Effect<R | Context.Tag.Identifier<T>, E, A>)
1772
+
1773
+ /* @internal */
1774
+ export const when = dual<
1775
+ (predicate: LazyArg<boolean>) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, Option.Option<A>>,
1776
+ <R, E, A>(self: Effect.Effect<R, E, A>, predicate: LazyArg<boolean>) => Effect.Effect<R, E, Option.Option<A>>
1777
+ >(2, (self, predicate) =>
1778
+ core.suspend(() =>
1779
+ predicate()
1780
+ ? core.map(self, Option.some)
1781
+ : core.succeed(Option.none())
1782
+ ))
1783
+
1784
+ /* @internal */
1785
+ export const whenFiberRef = dual<
1786
+ <S>(
1787
+ fiberRef: FiberRef.FiberRef<S>,
1788
+ predicate: Predicate.Predicate<S>
1789
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, readonly [S, Option.Option<A>]>,
1790
+ <R, E, A, S>(
1791
+ self: Effect.Effect<R, E, A>,
1792
+ fiberRef: FiberRef.FiberRef<S>,
1793
+ predicate: Predicate.Predicate<S>
1794
+ ) => Effect.Effect<R, E, readonly [S, Option.Option<A>]>
1795
+ >(
1796
+ 3,
1797
+ <R, E, A, S>(self: Effect.Effect<R, E, A>, fiberRef: FiberRef.FiberRef<S>, predicate: Predicate.Predicate<S>) =>
1798
+ core.flatMap(core.fiberRefGet(fiberRef), (s) =>
1799
+ predicate(s)
1800
+ ? core.map(self, (a) => [s, Option.some(a)] as const)
1801
+ : core.succeed<[S, Option.Option<A>]>([s, Option.none()]))
1802
+ )
1803
+
1804
+ /* @internal */
1805
+ export const whenRef = dual<
1806
+ <S>(
1807
+ ref: Ref.Ref<S>,
1808
+ predicate: Predicate.Predicate<S>
1809
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, readonly [S, Option.Option<A>]>,
1810
+ <R, E, A, S>(
1811
+ self: Effect.Effect<R, E, A>,
1812
+ ref: Ref.Ref<S>,
1813
+ predicate: Predicate.Predicate<S>
1814
+ ) => Effect.Effect<R, E, readonly [S, Option.Option<A>]>
1815
+ >(
1816
+ 3,
1817
+ <R, E, A, S>(self: Effect.Effect<R, E, A>, ref: Ref.Ref<S>, predicate: Predicate.Predicate<S>) =>
1818
+ core.flatMap(Ref.get(ref), (s) =>
1819
+ predicate(s)
1820
+ ? core.map(self, (a) => [s, Option.some(a)] as const)
1821
+ : core.succeed<[S, Option.Option<A>]>([s, Option.none()]))
1822
+ )
1823
+
1824
+ /* @internal */
1825
+ export const withMetric = dual<
1826
+ <Type, In, Out>(
1827
+ metric: Metric.Metric<Type, In, Out>
1828
+ ) => <R, E, A extends In>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1829
+ <R, E, A extends In, Type, In, Out>(
1830
+ self: Effect.Effect<R, E, A>,
1831
+ metric: Metric.Metric<Type, In, Out>
1832
+ ) => Effect.Effect<R, E, A>
1833
+ >(2, (self, metric) => metric(self))
1834
+
1835
+ /** @internal */
1836
+ export const serviceFunctionEffect = <T extends Context.Tag<any, any>, Args extends Array<any>, R, E, A>(
1837
+ service: T,
1838
+ f: (_: Context.Tag.Service<T>) => (...args: Args) => Effect.Effect<R, E, A>
1839
+ ) =>
1840
+ (...args: Args): Effect.Effect<R | Context.Tag.Identifier<T>, E, A> => core.flatMap(service, (a) => f(a)(...args))
1841
+
1842
+ /** @internal */
1843
+ export const serviceFunction = <T extends Context.Tag<any, any>, Args extends Array<any>, A>(
1844
+ service: T,
1845
+ f: (_: Context.Tag.Service<T>) => (...args: Args) => A
1846
+ ) =>
1847
+ (...args: Args): Effect.Effect<Context.Tag.Identifier<T>, never, A> => core.map(service, (a) => f(a)(...args))
1848
+
1849
+ /** @internal */
1850
+ export const serviceFunctions = <I, S>(
1851
+ tag: Context.Tag<I, S>
1852
+ ): {
1853
+ [k in { [k in keyof S]: S[k] extends (...args: Array<any>) => Effect.Effect<any, any, any> ? k : never }[keyof S]]:
1854
+ S[k] extends (...args: infer Args) => Effect.Effect<infer R, infer E, infer A>
1855
+ ? (...args: Args) => Effect.Effect<R | I, E, A>
1856
+ : never
1857
+ } =>
1858
+ new Proxy({} as any, {
1859
+ get(_target: any, prop: any, _receiver) {
1860
+ return (...args: Array<any>) => core.flatMap(tag, (s: any) => s[prop](...args))
1861
+ }
1862
+ })
1863
+
1864
+ /** @internal */
1865
+ export const serviceConstants = <I, S>(
1866
+ tag: Context.Tag<I, S>
1867
+ ): {
1868
+ [k in { [k in keyof S]: S[k] extends Effect.Effect<any, any, any> ? k : never }[keyof S]]: S[k] extends
1869
+ Effect.Effect<infer R, infer E, infer A> ? Effect.Effect<R | I, E, A> : never
1870
+ } =>
1871
+ new Proxy({} as any, {
1872
+ get(_target: any, prop: any, _receiver) {
1873
+ return core.flatMap(tag, (s: any) => s[prop])
1874
+ }
1875
+ })
1876
+
1877
+ /** @internal */
1878
+ export const serviceMembers = <I, S>(tag: Context.Tag<I, S>): {
1879
+ functions: {
1880
+ [k in { [k in keyof S]: S[k] extends (...args: Array<any>) => Effect.Effect<any, any, any> ? k : never }[keyof S]]:
1881
+ S[k] extends (...args: infer Args) => Effect.Effect<infer R, infer E, infer A>
1882
+ ? (...args: Args) => Effect.Effect<R | I, E, A>
1883
+ : never
1884
+ }
1885
+ constants: {
1886
+ [k in { [k in keyof S]: S[k] extends Effect.Effect<any, any, any> ? k : never }[keyof S]]: S[k] extends
1887
+ Effect.Effect<infer R, infer E, infer A> ? Effect.Effect<R | I, E, A> : never
1888
+ }
1889
+ } => ({
1890
+ functions: serviceFunctions(tag),
1891
+ constants: serviceConstants(tag)
1892
+ })
1893
+
1894
+ // -----------------------------------------------------------------------------
1895
+ // tracing
1896
+ // -----------------------------------------------------------------------------
1897
+
1898
+ /* @internal */
1899
+ export const annotateCurrentSpan: {
1900
+ (key: string, value: Tracer.AttributeValue): Effect.Effect<never, never, void>
1901
+ (values: Record<string, Tracer.AttributeValue>): Effect.Effect<never, never, void>
1902
+ } = function(): Effect.Effect<never, never, void> {
1903
+ const args = arguments
1904
+ return core.flatMap(
1905
+ currentSpan,
1906
+ (span) =>
1907
+ span._tag === "Some"
1908
+ ? core.sync(() => {
1909
+ if (typeof args[0] === "string") {
1910
+ span.value.attribute(args[0], args[1])
1911
+ } else {
1912
+ for (const key in args[0]) {
1913
+ span.value.attribute(key, args[0][key])
1914
+ }
1915
+ }
1916
+ })
1917
+ : core.unit
1918
+ )
1919
+ }
1920
+
1921
+ /* @internal */
1922
+ export const annotateSpans = dual<
1923
+ {
1924
+ (key: string, value: Tracer.AttributeValue): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
1925
+ (
1926
+ values: Record<string, Tracer.AttributeValue>
1927
+ ): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
1928
+ },
1929
+ {
1930
+ <R, E, A>(effect: Effect.Effect<R, E, A>, key: string, value: Tracer.AttributeValue): Effect.Effect<R, E, A>
1931
+ <R, E, A>(effect: Effect.Effect<R, E, A>, values: Record<string, Tracer.AttributeValue>): Effect.Effect<R, E, A>
1932
+ }
1933
+ >(
1934
+ (args) => core.isEffect(args[0]),
1935
+ function<R, E, A>() {
1936
+ const args = arguments
1937
+ return core.fiberRefLocallyWith(
1938
+ args[0] as Effect.Effect<R, E, A>,
1939
+ core.currentTracerSpanAnnotations,
1940
+ typeof args[1] === "string"
1941
+ ? HashMap.set(args[1], args[2])
1942
+ : (annotations) =>
1943
+ Object.entries(args[1] as Record<string, Tracer.AttributeValue>).reduce(
1944
+ (acc, [key, value]) => HashMap.set(acc, key, value),
1945
+ annotations
1946
+ )
1947
+ )
1948
+ }
1949
+ )
1950
+
1951
+ /* @internal */
1952
+ export const currentParentSpan: Effect.Effect<never, never, Option.Option<Tracer.ParentSpan>> = core.map(
1953
+ core.fiberRefGet(core.currentTracerSpan),
1954
+ List.head
1955
+ )
1956
+
1957
+ /* @internal */
1958
+ export const currentSpan: Effect.Effect<never, never, Option.Option<Tracer.Span>> = core.map(
1959
+ core.fiberRefGet(core.currentTracerSpan),
1960
+ List.findFirst((span): span is Tracer.Span => span._tag === "Span")
1961
+ )
1962
+
1963
+ const bigint0 = BigInt(0)
1964
+ /** @internal */
1965
+ export const currentTimeNanosTracing = core.fiberRefGetWith(
1966
+ core.currentTracerTimingEnabled,
1967
+ (enabled) => enabled ? Clock.currentTimeNanos : core.succeed(bigint0)
1968
+ )
1969
+
1970
+ /* @internal */
1971
+ export const linkSpans = dual<
1972
+ (
1973
+ span: Tracer.ParentSpan,
1974
+ attributes?: Record<string, Tracer.AttributeValue>
1975
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1976
+ <R, E, A>(
1977
+ self: Effect.Effect<R, E, A>,
1978
+ span: Tracer.ParentSpan,
1979
+ attributes?: Record<string, Tracer.AttributeValue>
1980
+ ) => Effect.Effect<R, E, A>
1981
+ >(
1982
+ (args) => core.isEffect(args[0]),
1983
+ (self, span, attributes) =>
1984
+ core.fiberRefLocallyWith(
1985
+ self,
1986
+ core.currentTracerSpanLinks,
1987
+ Chunk.append(
1988
+ {
1989
+ _tag: "SpanLink",
1990
+ span,
1991
+ attributes: attributes ?? {}
1992
+ } as const
1993
+ )
1994
+ )
1995
+ )
1996
+
1997
+ /** @internal */
1998
+ export const makeSpan = (
1999
+ name: string,
2000
+ options?: {
2001
+ readonly attributes?: Record<string, Tracer.AttributeValue>
2002
+ readonly links?: ReadonlyArray<Tracer.SpanLink>
2003
+ readonly parent?: Tracer.ParentSpan
2004
+ readonly root?: boolean
2005
+ readonly context?: Context.Context<never>
2006
+ }
2007
+ ) =>
2008
+ tracerWith((tracer) =>
2009
+ core.flatMap(
2010
+ options?.parent
2011
+ ? succeedSome(options.parent)
2012
+ : options?.root
2013
+ ? succeedNone
2014
+ : currentParentSpan,
2015
+ (parent) =>
2016
+ core.flatMap(
2017
+ core.fiberRefGet(core.currentTracerSpanAnnotations),
2018
+ (annotations) =>
2019
+ core.flatMap(
2020
+ core.fiberRefGet(core.currentTracerSpanLinks),
2021
+ (links) =>
2022
+ core.flatMap(
2023
+ currentTimeNanosTracing,
2024
+ (startTime) =>
2025
+ core.sync(() => {
2026
+ const linksArray = options?.links
2027
+ ? [...Chunk.toReadonlyArray(links), ...options.links]
2028
+ : Chunk.toReadonlyArray(links)
2029
+ const span = tracer.span(
2030
+ name,
2031
+ parent,
2032
+ options?.context ?? Context.empty(),
2033
+ linksArray,
2034
+ startTime
2035
+ )
2036
+ HashMap.forEach(annotations, (value, key) => span.attribute(key, value))
2037
+ Object.entries(options?.attributes ?? {}).forEach(([k, v]) => span.attribute(k, v))
2038
+ return span
2039
+ })
2040
+ )
2041
+ )
2042
+ )
2043
+ )
2044
+ )
2045
+
2046
+ /* @internal */
2047
+ export const spanAnnotations: Effect.Effect<never, never, HashMap.HashMap<string, Tracer.AttributeValue>> = core
2048
+ .fiberRefGet(core.currentTracerSpanAnnotations)
2049
+
2050
+ /* @internal */
2051
+ export const spanLinks: Effect.Effect<never, never, Chunk.Chunk<Tracer.SpanLink>> = core
2052
+ .fiberRefGet(core.currentTracerSpanLinks)
2053
+
2054
+ /** @internal */
2055
+ export const useSpan: {
2056
+ <R, E, A>(name: string, evaluate: (span: Tracer.Span) => Effect.Effect<R, E, A>): Effect.Effect<R, E, A>
2057
+ <R, E, A>(name: string, options: {
2058
+ readonly attributes?: Record<string, Tracer.AttributeValue>
2059
+ readonly links?: ReadonlyArray<Tracer.SpanLink>
2060
+ readonly parent?: Tracer.ParentSpan
2061
+ readonly root?: boolean
2062
+ readonly context?: Context.Context<never>
2063
+ }, evaluate: (span: Tracer.Span) => Effect.Effect<R, E, A>): Effect.Effect<R, E, A>
2064
+ } = <R, E, A>(
2065
+ name: string,
2066
+ ...args: [evaluate: (span: Tracer.Span) => Effect.Effect<R, E, A>] | [
2067
+ options: any,
2068
+ evaluate: (span: Tracer.Span) => Effect.Effect<R, E, A>
2069
+ ]
2070
+ ) => {
2071
+ const options: {
2072
+ readonly attributes?: Record<string, Tracer.AttributeValue>
2073
+ readonly links?: ReadonlyArray<Tracer.SpanLink>
2074
+ readonly parent?: Tracer.ParentSpan
2075
+ readonly root?: boolean
2076
+ readonly context?: Context.Context<never>
2077
+ } | undefined = args.length === 1 ? undefined : args[0]
2078
+ const evaluate: (span: Tracer.Span) => Effect.Effect<R, E, A> = args[args.length - 1]
2079
+
2080
+ return core.acquireUseRelease(
2081
+ makeSpan(name, options),
2082
+ evaluate,
2083
+ (span, exit) =>
2084
+ core.flatMap(
2085
+ currentTimeNanosTracing,
2086
+ (endTime) => core.sync(() => span.end(endTime, exit))
2087
+ )
2088
+ )
2089
+ }
2090
+
2091
+ /** @internal */
2092
+ export const withParentSpan = dual<
2093
+ (span: Tracer.ParentSpan) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
2094
+ <R, E, A>(self: Effect.Effect<R, E, A>, span: Tracer.ParentSpan) => Effect.Effect<R, E, A>
2095
+ >(2, (self, span) =>
2096
+ core.fiberRefLocallyWith(
2097
+ self,
2098
+ core.currentTracerSpan,
2099
+ List.prepend(span)
2100
+ ))
2101
+
2102
+ /** @internal */
2103
+ export const withSpan = dual<
2104
+ (name: string, options?: {
2105
+ readonly attributes?: Record<string, Tracer.AttributeValue>
2106
+ readonly links?: ReadonlyArray<Tracer.SpanLink>
2107
+ readonly parent?: Tracer.ParentSpan
2108
+ readonly root?: boolean
2109
+ readonly context?: Context.Context<never>
2110
+ }) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
2111
+ <R, E, A>(self: Effect.Effect<R, E, A>, name: string, options?: {
2112
+ readonly attributes?: Record<string, Tracer.AttributeValue>
2113
+ readonly links?: ReadonlyArray<Tracer.SpanLink>
2114
+ readonly parent?: Tracer.ParentSpan
2115
+ readonly root?: boolean
2116
+ readonly context?: Context.Context<never>
2117
+ }) => Effect.Effect<R, E, A>
2118
+ >(
2119
+ (args) => typeof args[0] !== "string",
2120
+ (self, name, options) =>
2121
+ useSpan(
2122
+ name,
2123
+ options ?? {},
2124
+ (span) => withParentSpan(self, span)
2125
+ )
2126
+ )
2127
+
2128
+ // -------------------------------------------------------------------------------------
2129
+ // optionality
2130
+ // -------------------------------------------------------------------------------------
2131
+
2132
+ /* @internal */
2133
+ export const fromNullable = <A>(value: A): Effect.Effect<never, Cause.NoSuchElementException, NonNullable<A>> =>
2134
+ value == null ? core.fail(internalCause.NoSuchElementException()) : core.succeed(value as NonNullable<A>)
2135
+
2136
+ /* @internal */
2137
+ export const optionFromOptional = <R, E, A>(
2138
+ self: Effect.Effect<R, E, A>
2139
+ ): Effect.Effect<R, Exclude<E, Cause.NoSuchElementException>, Option.Option<A>> =>
2140
+ core.catchAll(
2141
+ core.map(self, Option.some),
2142
+ (error) =>
2143
+ internalCause.isNoSuchElementException(error) ?
2144
+ succeedNone :
2145
+ core.fail(error as Exclude<E, Cause.NoSuchElementException>)
2146
+ )