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,2765 @@
1
+ import type * as Cause from "../Cause"
2
+ import * as Chunk from "../Chunk"
3
+ import * as Context from "../Context"
4
+ import type * as Deferred from "../Deferred"
5
+ import * as Differ from "../Differ"
6
+ import type * as Effect from "../Effect"
7
+ import * as Either from "../Either"
8
+ import * as Equal from "../Equal"
9
+ import type * as ExecutionStrategy from "../ExecutionStrategy"
10
+ import type * as Exit from "../Exit"
11
+ import type * as Fiber from "../Fiber"
12
+ import * as FiberId from "../FiberId"
13
+ import type * as FiberRef from "../FiberRef"
14
+ import type * as FiberStatus from "../FiberStatus"
15
+ import type { LazyArg } from "../Function"
16
+ import { dual, identity, pipe } from "../Function"
17
+ import { globalValue } from "../GlobalValue"
18
+ import * as Hash from "../Hash"
19
+ import * as HashMap from "../HashMap"
20
+ import * as HashSet from "../HashSet"
21
+ import { NodeInspectSymbol, toJSON, toString } from "../Inspectable"
22
+ import * as _blockedRequests from "../internal/blockedRequests"
23
+ import * as internalCause from "../internal/cause"
24
+ import * as deferred from "../internal/deferred"
25
+ import type * as FiberRuntime from "../internal/fiberRuntime"
26
+ import type * as fiberScope from "../internal/fiberScope"
27
+ import * as DeferredOpCodes from "../internal/opCodes/deferred"
28
+ import * as OpCodes from "../internal/opCodes/effect"
29
+ import * as _runtimeFlags from "../internal/runtimeFlags"
30
+ import * as List from "../List"
31
+ import type * as Logger from "../Logger"
32
+ import type * as LogLevel from "../LogLevel"
33
+ import type * as LogSpan from "../LogSpan"
34
+ import type * as MetricLabel from "../MetricLabel"
35
+ import * as MutableRef from "../MutableRef"
36
+ import * as Option from "../Option"
37
+ import { pipeArguments } from "../Pipeable"
38
+ import type { Predicate, Refinement } from "../Predicate"
39
+ import * as ReadonlyArray from "../ReadonlyArray"
40
+ import type * as Request from "../Request"
41
+ import type * as BlockedRequests from "../RequestBlock"
42
+ import type * as RequestResolver from "../RequestResolver"
43
+ import type * as RuntimeFlags from "../RuntimeFlags"
44
+ import * as RuntimeFlagsPatch from "../RuntimeFlagsPatch"
45
+ import type * as Scope from "../Scope"
46
+ import type * as Tracer from "../Tracer"
47
+
48
+ // -----------------------------------------------------------------------------
49
+ // Effect
50
+ // -----------------------------------------------------------------------------
51
+
52
+ /** @internal */
53
+ const EffectErrorSymbolKey = "effect/EffectError"
54
+
55
+ /** @internal */
56
+ export const EffectErrorTypeId = Symbol.for(EffectErrorSymbolKey)
57
+
58
+ /** @internal */
59
+ export type EffectErrorTypeId = typeof EffectErrorTypeId
60
+
61
+ /** @internal */
62
+ export interface EffectError<E> {
63
+ readonly [EffectErrorTypeId]: EffectErrorTypeId
64
+ readonly _tag: "EffectError"
65
+ readonly cause: Cause.Cause<E>
66
+ }
67
+
68
+ /** @internal */
69
+ export const isEffectError = (u: unknown): u is EffectError<unknown> =>
70
+ typeof u === "object" && u != null && EffectErrorTypeId in u
71
+
72
+ /** @internal */
73
+ export const makeEffectError = <E>(cause: Cause.Cause<E>): EffectError<E> => ({
74
+ [EffectErrorTypeId]: EffectErrorTypeId,
75
+ _tag: "EffectError",
76
+ cause
77
+ })
78
+
79
+ /**
80
+ * @internal
81
+ */
82
+ export const blocked = <R, E, A>(
83
+ blockedRequests: BlockedRequests.RequestBlock<R>,
84
+ _continue: Effect.Effect<R, E, A>
85
+ ): Effect.Blocked<R, E, A> => {
86
+ const effect = new EffectPrimitive("Blocked") as any
87
+ effect.i0 = blockedRequests
88
+ effect.i1 = _continue
89
+ return effect
90
+ }
91
+
92
+ /**
93
+ * @internal
94
+ */
95
+ export const runRequestBlock = <R>(
96
+ blockedRequests: BlockedRequests.RequestBlock<R>
97
+ ): Effect.Blocked<R, never, void> => {
98
+ const effect = new EffectPrimitive("RunBlocked") as any
99
+ effect.i0 = blockedRequests
100
+ return effect
101
+ }
102
+
103
+ /** @internal */
104
+ export const EffectTypeId: Effect.EffectTypeId = Symbol.for("effect/Effect") as Effect.EffectTypeId
105
+
106
+ /** @internal */
107
+ export type Primitive =
108
+ | Async
109
+ | Commit
110
+ | Failure
111
+ | OnFailure
112
+ | OnSuccess
113
+ | OnStep
114
+ | OnSuccessAndFailure
115
+ | Success
116
+ | Sync
117
+ | UpdateRuntimeFlags
118
+ | While
119
+ | WithRuntime
120
+ | Yield
121
+ | OpTag
122
+ | Blocked
123
+ | RunBlocked
124
+ | Either.Either<any, any>
125
+ | Option.Option<any>
126
+
127
+ /** @internal */
128
+ export type Continuation =
129
+ | OnSuccess
130
+ | OnStep
131
+ | OnSuccessAndFailure
132
+ | OnFailure
133
+ | While
134
+ | RevertFlags
135
+
136
+ /** @internal */
137
+ export class RevertFlags {
138
+ readonly _op = OpCodes.OP_REVERT_FLAGS
139
+ constructor(
140
+ readonly patch: RuntimeFlagsPatch.RuntimeFlagsPatch,
141
+ readonly op: Primitive & { _op: OpCodes.OP_UPDATE_RUNTIME_FLAGS }
142
+ ) {
143
+ }
144
+ }
145
+
146
+ /** @internal */
147
+ class EffectPrimitive {
148
+ public i0 = undefined
149
+ public i1 = undefined
150
+ public i2 = undefined
151
+ public trace = undefined;
152
+ [EffectTypeId] = effectVariance
153
+ constructor(readonly _op: Primitive["_op"]) {}
154
+ [Equal.symbol](this: {}, that: unknown) {
155
+ return this === that
156
+ }
157
+ [Hash.symbol](this: {}) {
158
+ return Hash.random(this)
159
+ }
160
+ pipe() {
161
+ return pipeArguments(this, arguments)
162
+ }
163
+ toJSON() {
164
+ return {
165
+ _id: "Effect",
166
+ _op: this._op,
167
+ i0: toJSON(this.i0),
168
+ i1: toJSON(this.i1),
169
+ i2: toJSON(this.i2)
170
+ }
171
+ }
172
+ toString() {
173
+ return toString(this.toJSON())
174
+ }
175
+ [NodeInspectSymbol]() {
176
+ return this.toJSON()
177
+ }
178
+ }
179
+
180
+ /** @internal */
181
+ class EffectPrimitiveFailure {
182
+ public i0 = undefined
183
+ public i1 = undefined
184
+ public i2 = undefined
185
+ public trace = undefined;
186
+ [EffectTypeId] = effectVariance
187
+ constructor(readonly _op: Primitive["_op"]) {
188
+ // @ts-expect-error
189
+ this._tag = _op
190
+ }
191
+ [Equal.symbol](this: {}, that: unknown) {
192
+ return this === that
193
+ }
194
+ [Hash.symbol](this: {}) {
195
+ return Hash.random(this)
196
+ }
197
+ get cause() {
198
+ return this.i0
199
+ }
200
+ pipe() {
201
+ return pipeArguments(this, arguments)
202
+ }
203
+ toJSON() {
204
+ return {
205
+ _id: "Exit",
206
+ _tag: this._op,
207
+ cause: (this.cause as any).toJSON()
208
+ }
209
+ }
210
+ toString() {
211
+ return toString(this.toJSON())
212
+ }
213
+ [NodeInspectSymbol]() {
214
+ return this.toJSON()
215
+ }
216
+ }
217
+
218
+ /** @internal */
219
+ class EffectPrimitiveSuccess {
220
+ public i0 = undefined
221
+ public i1 = undefined
222
+ public i2 = undefined
223
+ public trace = undefined;
224
+ [EffectTypeId] = effectVariance
225
+ constructor(readonly _op: Primitive["_op"]) {
226
+ // @ts-expect-error
227
+ this._tag = _op
228
+ }
229
+ [Equal.symbol](this: {}, that: unknown) {
230
+ return this === that
231
+ }
232
+ [Hash.symbol](this: {}) {
233
+ return Hash.random(this)
234
+ }
235
+ get value() {
236
+ return this.i0
237
+ }
238
+ pipe() {
239
+ return pipeArguments(this, arguments)
240
+ }
241
+ toJSON() {
242
+ return {
243
+ _id: "Exit",
244
+ _tag: this._op,
245
+ value: toJSON(this.value)
246
+ }
247
+ }
248
+ toString() {
249
+ return toString(this.toJSON())
250
+ }
251
+ [NodeInspectSymbol]() {
252
+ return this.toJSON()
253
+ }
254
+ }
255
+
256
+ /** @internal */
257
+ const effectVariance = {
258
+ _R: (_: never) => _,
259
+ _E: (_: never) => _,
260
+ _A: (_: never) => _
261
+ }
262
+
263
+ /** @internal */
264
+ export type Op<Tag extends string, Body = {}> = Effect.Effect<never, never, never> & Body & {
265
+ readonly _op: Tag
266
+ }
267
+
268
+ /** @internal */
269
+ export interface Async extends
270
+ Op<OpCodes.OP_ASYNC, {
271
+ readonly i0: (resume: (effect: Primitive) => void) => void
272
+ readonly i1: FiberId.FiberId
273
+ }>
274
+ {}
275
+
276
+ /** @internal */
277
+ export interface Blocked<R = any, E = any, A = any> extends
278
+ Op<"Blocked", {
279
+ readonly i0: BlockedRequests.RequestBlock<R>
280
+ readonly i1: Effect.Effect<R, E, A>
281
+ }>
282
+ {}
283
+
284
+ /** @internal */
285
+ export interface RunBlocked<R = any> extends
286
+ Op<"RunBlocked", {
287
+ readonly i0: BlockedRequests.RequestBlock<R>
288
+ }>
289
+ {}
290
+
291
+ /** @internal */
292
+ export interface Failure extends
293
+ Op<OpCodes.OP_FAILURE, {
294
+ readonly i0: Cause.Cause<unknown>
295
+ }>
296
+ {}
297
+
298
+ /** @internal */
299
+ export interface OpTag extends Op<OpCodes.OP_TAG, {}> {}
300
+
301
+ export interface Commit extends
302
+ Op<OpCodes.OP_COMMIT, {
303
+ commit(): Effect.Effect<unknown, unknown, unknown>
304
+ }>
305
+ {}
306
+
307
+ /** @internal */
308
+ export interface OnFailure extends
309
+ Op<OpCodes.OP_ON_FAILURE, {
310
+ readonly i0: Primitive
311
+ readonly i1: (a: Cause.Cause<unknown>) => Primitive
312
+ }>
313
+ {}
314
+
315
+ /** @internal */
316
+ export interface OnSuccess extends
317
+ Op<OpCodes.OP_ON_SUCCESS, {
318
+ readonly i0: Primitive
319
+ readonly i1: (a: unknown) => Primitive
320
+ }>
321
+ {}
322
+
323
+ /** @internal */
324
+ export interface OnStep extends
325
+ Op<"OnStep", {
326
+ readonly i0: Primitive
327
+ readonly i1: (result: Exit.Exit<any, any> | Blocked) => Primitive
328
+ }>
329
+ {}
330
+
331
+ /** @internal */
332
+ export interface OnSuccessAndFailure extends
333
+ Op<OpCodes.OP_ON_SUCCESS_AND_FAILURE, {
334
+ readonly i0: Primitive
335
+ readonly i1: (a: Cause.Cause<unknown>) => Primitive
336
+ readonly i2: (a: unknown) => Primitive
337
+ }>
338
+ {}
339
+
340
+ /** @internal */
341
+ export interface Success extends
342
+ Op<OpCodes.OP_SUCCESS, {
343
+ readonly i0: unknown
344
+ }>
345
+ {}
346
+
347
+ /** @internal */
348
+ export interface Sync extends
349
+ Op<OpCodes.OP_SYNC, {
350
+ readonly i0: LazyArg<unknown>
351
+ }>
352
+ {}
353
+
354
+ /** @internal */
355
+ export interface UpdateRuntimeFlags extends
356
+ Op<OpCodes.OP_UPDATE_RUNTIME_FLAGS, {
357
+ readonly i0: RuntimeFlagsPatch.RuntimeFlagsPatch
358
+ readonly i1?: (oldRuntimeFlags: RuntimeFlags.RuntimeFlags) => Primitive
359
+ }>
360
+ {}
361
+
362
+ /** @internal */
363
+ export interface While extends
364
+ Op<OpCodes.OP_WHILE, {
365
+ readonly i0: () => boolean
366
+ readonly i1: () => Primitive
367
+ readonly i2: (a: unknown) => void
368
+ }>
369
+ {}
370
+
371
+ /** @internal */
372
+ export interface WithRuntime extends
373
+ Op<OpCodes.OP_WITH_RUNTIME, {
374
+ readonly i0: (fiber: FiberRuntime.FiberRuntime<unknown, unknown>, status: FiberStatus.Running) => Primitive
375
+ }>
376
+ {}
377
+
378
+ /** @internal */
379
+ export interface Yield extends Op<OpCodes.OP_YIELD> {}
380
+
381
+ /** @internal */
382
+ export const isEffect = (u: unknown): u is Effect.Effect<unknown, unknown, unknown> =>
383
+ typeof u === "object" && u != null && EffectTypeId in u
384
+
385
+ /* @internal */
386
+ export const withFiberRuntime = <R, E, A>(
387
+ withRuntime: (fiber: FiberRuntime.FiberRuntime<E, A>, status: FiberStatus.Running) => Effect.Effect<R, E, A>
388
+ ): Effect.Effect<R, E, A> => {
389
+ const effect = new EffectPrimitive(OpCodes.OP_WITH_RUNTIME) as any
390
+ effect.i0 = withRuntime
391
+ return effect
392
+ }
393
+
394
+ /* @internal */
395
+ export const acquireUseRelease = dual<
396
+ <A, R2, E2, A2, R3, X>(
397
+ use: (a: A) => Effect.Effect<R2, E2, A2>,
398
+ release: (a: A, exit: Exit.Exit<E2, A2>) => Effect.Effect<R3, never, X>
399
+ ) => <R, E>(acquire: Effect.Effect<R, E, A>) => Effect.Effect<R | R2 | R3, E | E2, A2>,
400
+ <R, E, A, R2, E2, A2, R3, X>(
401
+ acquire: Effect.Effect<R, E, A>,
402
+ use: (a: A) => Effect.Effect<R2, E2, A2>,
403
+ release: (a: A, exit: Exit.Exit<E2, A2>) => Effect.Effect<R3, never, X>
404
+ ) => Effect.Effect<R | R2 | R3, E | E2, A2>
405
+ >(3, <R, E, A, R2, E2, A2, R3, X>(
406
+ acquire: Effect.Effect<R, E, A>,
407
+ use: (a: A) => Effect.Effect<R2, E2, A2>,
408
+ release: (a: A, exit: Exit.Exit<E2, A2>) => Effect.Effect<R3, never, X>
409
+ ): Effect.Effect<R | R2 | R3, E | E2, A2> =>
410
+ uninterruptibleMask((restore) =>
411
+ flatMap(
412
+ acquire,
413
+ (a) =>
414
+ flatMap(exit(suspend(() => restore(step(use(a))))), (exit): Effect.Effect<R | R2 | R3, E | E2, A2> => {
415
+ if (exit._tag === "Success" && exit.value._op === "Blocked") {
416
+ const value = exit.value
417
+ return blocked(
418
+ value.i0,
419
+ acquireUseRelease(succeed(a), () => value.i1, release)
420
+ )
421
+ }
422
+ const flat = exitFlatten(exit as Exit.Exit<E2, Exit.Exit<E2, A2>>)
423
+ return suspend(() => release(a, flat)).pipe(
424
+ matchCauseEffect({
425
+ onFailure: (cause) => {
426
+ switch (flat._tag) {
427
+ case OpCodes.OP_FAILURE: {
428
+ return failCause(internalCause.parallel(flat.i0, cause))
429
+ }
430
+ case OpCodes.OP_SUCCESS: {
431
+ return failCause(cause)
432
+ }
433
+ }
434
+ },
435
+ onSuccess: () => flat
436
+ })
437
+ )
438
+ })
439
+ )
440
+ ))
441
+
442
+ /* @internal */
443
+ export const as = dual<
444
+ <B>(value: B) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>,
445
+ <R, E, A, B>(self: Effect.Effect<R, E, A>, value: B) => Effect.Effect<R, E, B>
446
+ >(2, (self, value) => flatMap(self, () => succeed(value)))
447
+
448
+ /* @internal */
449
+ export const asUnit = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, void> => as(self, void 0)
450
+
451
+ /* @internal */
452
+ export const async = <R, E, A>(
453
+ register: (
454
+ callback: (_: Effect.Effect<R, E, A>) => void,
455
+ signal: AbortSignal
456
+ ) => void | Effect.Effect<R, never, void>,
457
+ blockingOn: FiberId.FiberId = FiberId.none
458
+ ): Effect.Effect<R, E, A> =>
459
+ suspend(() => {
460
+ let cancelerRef: Effect.Effect<R, never, void> | void = undefined
461
+ let controllerRef: AbortController | void = undefined
462
+ const effect = new EffectPrimitive(OpCodes.OP_ASYNC) as any
463
+ if (register.length !== 1) {
464
+ const controller = new AbortController()
465
+ controllerRef = controller
466
+ effect.i0 = (resume: (_: Effect.Effect<R, E, A>) => void) => {
467
+ cancelerRef = register(resume, controller.signal)
468
+ }
469
+ } else {
470
+ effect.i0 = (resume: (_: Effect.Effect<R, E, A>) => void) => {
471
+ // @ts-expect-error
472
+ cancelerRef = register(resume)
473
+ }
474
+ }
475
+ effect.i1 = blockingOn
476
+ return onInterrupt(effect, () => {
477
+ if (controllerRef) {
478
+ controllerRef.abort()
479
+ }
480
+ return cancelerRef ?? unit
481
+ })
482
+ })
483
+
484
+ /* @internal */
485
+ export const asyncEither = <R, E, A>(
486
+ register: (
487
+ callback: (effect: Effect.Effect<R, E, A>) => void
488
+ ) => Either.Either<Effect.Effect<R, never, void>, Effect.Effect<R, E, A>>,
489
+ blockingOn: FiberId.FiberId = FiberId.none
490
+ ): Effect.Effect<R, E, A> =>
491
+ async<R, E, A>((resume) => {
492
+ const result = register(resume)
493
+ if (Either.isRight(result)) {
494
+ resume(result.right)
495
+ } else {
496
+ return result.left
497
+ }
498
+ }, blockingOn)
499
+
500
+ /* @internal */
501
+ export const catchAllCause = dual<
502
+ <E, R2, E2, A2>(
503
+ f: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, A2>
504
+ ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E2, A2 | A>,
505
+ <R, A, E, R2, E2, A2>(
506
+ self: Effect.Effect<R, E, A>,
507
+ f: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, A2>
508
+ ) => Effect.Effect<R2 | R, E2, A2 | A>
509
+ >(2, (self, f) => {
510
+ const effect = new EffectPrimitive(OpCodes.OP_ON_FAILURE) as any
511
+ effect.i0 = self
512
+ effect.i1 = f
513
+ return effect
514
+ })
515
+
516
+ /* @internal */
517
+ export const catchAll = dual<
518
+ <E, R2, E2, A2>(
519
+ f: (e: E) => Effect.Effect<R2, E2, A2>
520
+ ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E2, A2 | A>,
521
+ <R, A, E, R2, E2, A2>(
522
+ self: Effect.Effect<R, E, A>,
523
+ f: (e: E) => Effect.Effect<R2, E2, A2>
524
+ ) => Effect.Effect<R2 | R, E2, A2 | A>
525
+ >(2, (self, f) => matchEffect(self, { onFailure: f, onSuccess: succeed }))
526
+
527
+ /**
528
+ * @macro identity
529
+ * @internal
530
+ */
531
+ export const unified = <Args extends ReadonlyArray<any>, Ret extends Effect.Effect<any, any, any>>(
532
+ f: (...args: Args) => Ret
533
+ ) =>
534
+ (...args: Args): Effect.Effect.Unify<Ret> => f(...args)
535
+
536
+ /* @internal */
537
+ export const catchIf = dual<
538
+ {
539
+ <E, EA extends E, EB extends EA, R2, E2, A2>(
540
+ refinement: Refinement<EA, EB>,
541
+ f: (e: EB) => Effect.Effect<R2, E2, A2>
542
+ ): <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, Exclude<E, EB> | E2, A2 | A>
543
+ <E, EX extends E, R2, E2, A2>(
544
+ predicate: Predicate<EX>,
545
+ f: (e: EX) => Effect.Effect<R2, E2, A2>
546
+ ): <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E | E2, A2 | A>
547
+ },
548
+ {
549
+ <R, E, A, EA extends E, EB extends EA, R2, E2, A2>(
550
+ self: Effect.Effect<R, E, A>,
551
+ refinement: Refinement<EA, EB>,
552
+ f: (e: EB) => Effect.Effect<R2, E2, A2>
553
+ ): Effect.Effect<R2 | R, Exclude<E, EB> | E2, A2 | A>
554
+ <R, E, A, EX extends E, R2, E2, A2>(
555
+ self: Effect.Effect<R, E, A>,
556
+ predicate: Predicate<EX>,
557
+ f: (e: EX) => Effect.Effect<R2, E2, A2>
558
+ ): Effect.Effect<R2 | R, E | E2, A2 | A>
559
+ }
560
+ >(3, <R, E, A, EX extends E, R2, E2, A2>(
561
+ self: Effect.Effect<R, E, A>,
562
+ predicate: Predicate<EX>,
563
+ f: (e: EX) => Effect.Effect<R2, E2, A2>
564
+ ) =>
565
+ catchAllCause(self, (cause): Effect.Effect<R2 | R, E | E2, A2 | A> => {
566
+ const either = internalCause.failureOrCause(cause)
567
+ switch (either._tag) {
568
+ case "Left": {
569
+ return predicate(either.left as EX) ? f(either.left as EX) : failCause(cause)
570
+ }
571
+ case "Right": {
572
+ return failCause(either.right)
573
+ }
574
+ }
575
+ }))
576
+
577
+ /* @internal */
578
+ export const catchSome = dual<
579
+ <E, R2, E2, A2>(
580
+ pf: (e: E) => Option.Option<Effect.Effect<R2, E2, A2>>
581
+ ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E | E2, A2 | A>,
582
+ <R, A, E, R2, E2, A2>(
583
+ self: Effect.Effect<R, E, A>,
584
+ pf: (e: E) => Option.Option<Effect.Effect<R2, E2, A2>>
585
+ ) => Effect.Effect<R2 | R, E | E2, A2 | A>
586
+ >(2, <R, A, E, R2, E2, A2>(
587
+ self: Effect.Effect<R, E, A>,
588
+ pf: (e: E) => Option.Option<Effect.Effect<R2, E2, A2>>
589
+ ) =>
590
+ catchAllCause(self, (cause): Effect.Effect<R2 | R, E | E2, A2 | A> => {
591
+ const either = internalCause.failureOrCause(cause)
592
+ switch (either._tag) {
593
+ case "Left": {
594
+ return pipe(pf(either.left), Option.getOrElse(() => failCause(cause)))
595
+ }
596
+ case "Right": {
597
+ return failCause(either.right)
598
+ }
599
+ }
600
+ }))
601
+
602
+ /* @internal */
603
+ export const checkInterruptible = <R, E, A>(
604
+ f: (isInterruptible: boolean) => Effect.Effect<R, E, A>
605
+ ): Effect.Effect<R, E, A> =>
606
+ withFiberRuntime<R, E, A>((_, status) => f(_runtimeFlags.interruption(status.runtimeFlags)))
607
+
608
+ const spanSymbol = Symbol.for("effect/SpanAnnotation")
609
+ const originalSymbol = Symbol.for("effect/OriginalAnnotation")
610
+
611
+ /* @internal */
612
+ export const originalInstance = <E>(obj: E): E => {
613
+ if (typeof obj === "object" && obj !== null && originalSymbol in obj) {
614
+ // @ts-expect-error
615
+ return obj[originalSymbol]
616
+ }
617
+ return obj
618
+ }
619
+
620
+ /* @internal */
621
+ const capture = <E>(obj: E & object, span: List.List<Tracer.ParentSpan>): E => {
622
+ if (List.isCons(span)) {
623
+ const head = span.head
624
+ if (head._tag === "Span") {
625
+ return new Proxy(obj, {
626
+ has(target, p) {
627
+ return p === spanSymbol || p === originalSymbol || p in target
628
+ },
629
+ get(target, p) {
630
+ if (p === spanSymbol) {
631
+ return head
632
+ }
633
+ if (p === originalSymbol) {
634
+ return obj
635
+ }
636
+ // @ts-expect-error
637
+ return target[p]
638
+ }
639
+ })
640
+ }
641
+ }
642
+ return obj
643
+ }
644
+
645
+ /* @internal */
646
+ export const die = (defect: unknown): Effect.Effect<never, never, never> =>
647
+ typeof defect === "object" && defect !== null && !(spanSymbol in defect) ?
648
+ withFiberRuntime((fiber) => failCause(internalCause.die(capture(defect, fiber.getFiberRef(currentTracerSpan)))))
649
+ : failCause(internalCause.die(defect))
650
+
651
+ /* @internal */
652
+ export const dieMessage = (message: string): Effect.Effect<never, never, never> =>
653
+ failCauseSync(() => internalCause.die(internalCause.RuntimeException(message)))
654
+
655
+ /* @internal */
656
+ export const dieSync = (evaluate: LazyArg<unknown>): Effect.Effect<never, never, never> => flatMap(sync(evaluate), die)
657
+
658
+ /* @internal */
659
+ export const either = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, Either.Either<E, A>> =>
660
+ matchEffect(self, {
661
+ onFailure: (e) => succeed(Either.left(e)),
662
+ onSuccess: (a) => succeed(Either.right(a))
663
+ })
664
+
665
+ /* @internal */
666
+ export const context = <R>(): Effect.Effect<R, never, Context.Context<R>> =>
667
+ suspend(() => fiberRefGet(currentContext) as Effect.Effect<never, never, Context.Context<R>>)
668
+
669
+ /* @internal */
670
+ export const contextWithEffect = <R, R0, E, A>(
671
+ f: (context: Context.Context<R0>) => Effect.Effect<R, E, A>
672
+ ): Effect.Effect<R | R0, E, A> => flatMap(context<R0>(), f)
673
+
674
+ /* @internal */
675
+ export const exit = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, Exit.Exit<E, A>> =>
676
+ matchCause(self, {
677
+ onFailure: exitFailCause,
678
+ onSuccess: exitSucceed
679
+ })
680
+
681
+ /* @internal */
682
+ export const fail = <E>(error: E): Effect.Effect<never, E, never> =>
683
+ typeof error === "object" && error !== null && !(spanSymbol in error) ?
684
+ withFiberRuntime((fiber) => failCause(internalCause.fail(capture(error, fiber.getFiberRef(currentTracerSpan)))))
685
+ : failCause(internalCause.fail(error))
686
+
687
+ /* @internal */
688
+ export const failSync = <E>(evaluate: LazyArg<E>): Effect.Effect<never, E, never> => flatMap(sync(evaluate), fail)
689
+
690
+ /* @internal */
691
+ export const failCause = <E>(cause: Cause.Cause<E>): Effect.Effect<never, E, never> => {
692
+ const effect = new EffectPrimitiveFailure(OpCodes.OP_FAILURE) as any
693
+ effect.i0 = cause
694
+ return effect
695
+ }
696
+
697
+ /* @internal */
698
+ export const failCauseSync = <E>(
699
+ evaluate: LazyArg<Cause.Cause<E>>
700
+ ): Effect.Effect<never, E, never> => flatMap(sync(evaluate), failCause)
701
+
702
+ /* @internal */
703
+ export const fiberId: Effect.Effect<never, never, FiberId.FiberId> = withFiberRuntime<never, never, FiberId.FiberId>((
704
+ state
705
+ ) => succeed(state.id()))
706
+
707
+ /* @internal */
708
+ export const fiberIdWith = <R, E, A>(
709
+ f: (descriptor: FiberId.Runtime) => Effect.Effect<R, E, A>
710
+ ): Effect.Effect<R, E, A> => withFiberRuntime<R, E, A>((state) => f(state.id()))
711
+
712
+ /* @internal */
713
+ export const flatMap = dual<
714
+ <A, R1, E1, B>(
715
+ f: (a: A) => Effect.Effect<R1, E1, B>
716
+ ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R1 | R, E1 | E, B>,
717
+ <R, E, A, R1, E1, B>(
718
+ self: Effect.Effect<R, E, A>,
719
+ f: (a: A) => Effect.Effect<R1, E1, B>
720
+ ) => Effect.Effect<R1 | R, E1 | E, B>
721
+ >(2, (self, f) => {
722
+ const effect = new EffectPrimitive(OpCodes.OP_ON_SUCCESS) as any
723
+ effect.i0 = self
724
+ effect.i1 = f
725
+ return effect
726
+ })
727
+
728
+ /* @internal */
729
+ export const step = <R, E, A>(
730
+ self: Effect.Effect<R, E, A>
731
+ ): Effect.Effect<R, E, Exit.Exit<E, A> | Effect.Blocked<R, E, A>> => {
732
+ const effect = new EffectPrimitive("OnStep") as any
733
+ effect.i0 = self
734
+ effect.i1 = exitSucceed
735
+ return effect
736
+ }
737
+
738
+ /* @internal */
739
+ export const flatMapStep = <R, E, A, R1, E1, B>(
740
+ self: Effect.Effect<R, E, A>,
741
+ f: (step: Exit.Exit<E, A> | Effect.Blocked<R, E, A>) => Effect.Effect<R1, E1, B>
742
+ ): Effect.Effect<R | R1, E1, B> => {
743
+ const effect = new EffectPrimitive("OnStep") as any
744
+ effect.i0 = self
745
+ effect.i1 = f
746
+ return effect
747
+ }
748
+
749
+ /* @internal */
750
+ export const flatten = <R, E, R1, E1, A>(self: Effect.Effect<R, E, Effect.Effect<R1, E1, A>>) => flatMap(self, identity)
751
+
752
+ /* @internal */
753
+ export const flip = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, A, E> =>
754
+ matchEffect(self, { onFailure: succeed, onSuccess: fail })
755
+
756
+ /* @internal */
757
+ export const matchCause = dual<
758
+ <E, A2, A, A3>(
759
+ options: {
760
+ readonly onFailure: (cause: Cause.Cause<E>) => A2
761
+ readonly onSuccess: (a: A) => A3
762
+ }
763
+ ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, never, A2 | A3>,
764
+ <R, E, A2, A, A3>(
765
+ self: Effect.Effect<R, E, A>,
766
+ options: {
767
+ readonly onFailure: (cause: Cause.Cause<E>) => A2
768
+ readonly onSuccess: (a: A) => A3
769
+ }
770
+ ) => Effect.Effect<R, never, A2 | A3>
771
+ >(2, (self, { onFailure, onSuccess }) =>
772
+ matchCauseEffect(self, {
773
+ onFailure: (cause) => succeed(onFailure(cause)),
774
+ onSuccess: (a) => succeed(onSuccess(a))
775
+ }))
776
+
777
+ /* @internal */
778
+ export const matchCauseEffect = dual<
779
+ <E, A, R2, E2, A2, R3, E3, A3>(
780
+ options: {
781
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, A2>
782
+ readonly onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
783
+ }
784
+ ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R3 | R, E2 | E3, A2 | A3>,
785
+ <R, E, A, R2, E2, A2, R3, E3, A3>(
786
+ self: Effect.Effect<R, E, A>,
787
+ options: {
788
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, A2>
789
+ readonly onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
790
+ }
791
+ ) => Effect.Effect<R2 | R3 | R, E2 | E3, A2 | A3>
792
+ >(2, (self, { onFailure, onSuccess }) => {
793
+ const effect = new EffectPrimitive(OpCodes.OP_ON_SUCCESS_AND_FAILURE) as any
794
+ effect.i0 = self
795
+ effect.i1 = onFailure
796
+ effect.i2 = onSuccess
797
+ return effect
798
+ })
799
+
800
+ /* @internal */
801
+ export const matchEffect = dual<
802
+ <E, A, R2, E2, A2, R3, E3, A3>(
803
+ options: {
804
+ readonly onFailure: (e: E) => Effect.Effect<R2, E2, A2>
805
+ readonly onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
806
+ }
807
+ ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R3 | R, E2 | E3, A2 | A3>,
808
+ <R, E, A, R2, E2, A2, R3, E3, A3>(
809
+ self: Effect.Effect<R, E, A>,
810
+ options: {
811
+ readonly onFailure: (e: E) => Effect.Effect<R2, E2, A2>
812
+ readonly onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
813
+ }
814
+ ) => Effect.Effect<R2 | R3 | R, E2 | E3, A2 | A3>
815
+ >(2, (self, { onFailure, onSuccess }) =>
816
+ matchCauseEffect(self, {
817
+ onFailure: (cause) => {
818
+ const failures = internalCause.failures(cause)
819
+ const defects = internalCause.defects(cause)
820
+ if (defects.length > 0) {
821
+ return failCause(internalCause.electFailures(cause))
822
+ }
823
+ if (failures.length > 0) {
824
+ return onFailure(Chunk.unsafeHead(failures))
825
+ }
826
+ return failCause(cause as Cause.Cause<never>)
827
+ },
828
+ onSuccess
829
+ }))
830
+
831
+ /* @internal */
832
+ export const forEachSequential = dual<
833
+ <A, R, E, B>(f: (a: A, i: number) => Effect.Effect<R, E, B>) => (self: Iterable<A>) => Effect.Effect<R, E, Array<B>>,
834
+ <A, R, E, B>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, B>) => Effect.Effect<R, E, Array<B>>
835
+ >(2, (self, f) =>
836
+ suspend(() => {
837
+ const arr = ReadonlyArray.fromIterable(self)
838
+ const ret = new Array(arr.length)
839
+ let i = 0
840
+ return as(
841
+ whileLoop({
842
+ while: () => i < arr.length,
843
+ body: () => f(arr[i], i),
844
+ step: (b) => {
845
+ ret[i++] = b
846
+ }
847
+ }),
848
+ ret
849
+ )
850
+ }))
851
+
852
+ /* @internal */
853
+ export const forEachSequentialDiscard = dual<
854
+ <A, R, E, B>(f: (a: A, i: number) => Effect.Effect<R, E, B>) => (self: Iterable<A>) => Effect.Effect<R, E, void>,
855
+ <A, R, E, B>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<R, E, B>) => Effect.Effect<R, E, void>
856
+ >(2, (self, f) =>
857
+ suspend(() => {
858
+ const arr = ReadonlyArray.fromIterable(self)
859
+ let i = 0
860
+ return whileLoop({
861
+ while: () => i < arr.length,
862
+ body: () => f(arr[i], i),
863
+ step: () => {
864
+ i++
865
+ }
866
+ })
867
+ }))
868
+
869
+ /* @internal */
870
+ export const if_ = dual<
871
+ <R1, R2, E1, E2, A, A1>(
872
+ options: {
873
+ readonly onTrue: Effect.Effect<R1, E1, A>
874
+ readonly onFalse: Effect.Effect<R2, E2, A1>
875
+ }
876
+ ) => <R = never, E = never>(
877
+ self: Effect.Effect<R, E, boolean> | boolean
878
+ ) => Effect.Effect<R | R1 | R2, E | E1 | E2, A | A1>,
879
+ {
880
+ <R1, R2, E1, E2, A, A1>(
881
+ self: boolean,
882
+ options: {
883
+ readonly onTrue: Effect.Effect<R1, E1, A>
884
+ readonly onFalse: Effect.Effect<R2, E2, A1>
885
+ }
886
+ ): Effect.Effect<R1 | R2, E1 | E2, A | A1>
887
+ <R, E, R1, R2, E1, E2, A, A1>(
888
+ self: Effect.Effect<R, E, boolean>,
889
+ options: {
890
+ readonly onTrue: Effect.Effect<R1, E1, A>
891
+ readonly onFalse: Effect.Effect<R2, E2, A1>
892
+ }
893
+ ): Effect.Effect<R1 | R2 | R, E1 | E2 | E, A | A1>
894
+ }
895
+ >(
896
+ (args) => typeof args[0] === "boolean" || isEffect(args[0]),
897
+ (self: boolean | Effect.Effect<unknown, unknown, unknown>, { onFalse, onTrue }: {
898
+ readonly onTrue: Effect.Effect<unknown, unknown, unknown>
899
+ readonly onFalse: Effect.Effect<unknown, unknown, unknown>
900
+ }) => typeof self === "boolean" ? (self ? onTrue : onFalse) : flatMap(self, unified((b) => (b ? onTrue : onFalse)))
901
+ )
902
+
903
+ /* @internal */
904
+ export const interrupt: Effect.Effect<never, never, never> = flatMap(fiberId, (fiberId) => interruptWith(fiberId))
905
+
906
+ /* @internal */
907
+ export const interruptWith = (fiberId: FiberId.FiberId): Effect.Effect<never, never, never> =>
908
+ failCause(internalCause.interrupt(fiberId))
909
+
910
+ /* @internal */
911
+ export const interruptible = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, E, A> => {
912
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
913
+ effect.i0 = RuntimeFlagsPatch.enable(_runtimeFlags.Interruption)
914
+ const _continue = (orBlock: any) => {
915
+ if (orBlock._tag === "Blocked") {
916
+ return blocked(orBlock.i0, interruptible(orBlock.i1))
917
+ } else {
918
+ return orBlock
919
+ }
920
+ }
921
+ effect.i1 = () => flatMapStep(self, _continue)
922
+ return effect
923
+ }
924
+
925
+ /* @internal */
926
+ export const interruptibleMask = <R, E, A>(
927
+ f: (restore: <RX, EX, AX>(effect: Effect.Effect<RX, EX, AX>) => Effect.Effect<RX, EX, AX>) => Effect.Effect<R, E, A>
928
+ ): Effect.Effect<R, E, A> => {
929
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
930
+ effect.i0 = RuntimeFlagsPatch.enable(_runtimeFlags.Interruption)
931
+ const _continue = (step: Exit.Exit<E, A> | Effect.Blocked<R, E, A>): Exit.Exit<E, A> | Effect.Blocked<R, E, A> => {
932
+ if (step._op === "Blocked") {
933
+ return blocked(step.i0, interruptible(step.i1))
934
+ }
935
+ return step
936
+ }
937
+ effect.i1 = (oldFlags: RuntimeFlags.RuntimeFlags) =>
938
+ _runtimeFlags.interruption(oldFlags)
939
+ ? step(f(interruptible))
940
+ : step(f(uninterruptible))
941
+ return flatMap(effect, _continue)
942
+ }
943
+
944
+ /* @internal */
945
+ export const intoDeferred = dual<
946
+ <E, A>(deferred: Deferred.Deferred<E, A>) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, never, boolean>,
947
+ <R, E, A>(self: Effect.Effect<R, E, A>, deferred: Deferred.Deferred<E, A>) => Effect.Effect<R, never, boolean>
948
+ >(2, (self, deferred) =>
949
+ uninterruptibleMask((restore) =>
950
+ flatMap(
951
+ exit(restore(self)),
952
+ (exit) => deferredDone(deferred, exit)
953
+ )
954
+ ))
955
+
956
+ /* @internal */
957
+ export const map = dual<
958
+ <A, B>(f: (a: A) => B) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, B>,
959
+ <R, E, A, B>(self: Effect.Effect<R, E, A>, f: (a: A) => B) => Effect.Effect<R, E, B>
960
+ >(2, (self, f) => flatMap(self, (a) => sync(() => f(a))))
961
+
962
+ /* @internal */
963
+ export const mapBoth = dual<
964
+ <E, A, E2, A2>(
965
+ options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => A2 }
966
+ ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2, A2>,
967
+ <R, E, A, E2, A2>(
968
+ self: Effect.Effect<R, E, A>,
969
+ options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => A2 }
970
+ ) => Effect.Effect<R, E2, A2>
971
+ >(2, (self, { onFailure, onSuccess }) =>
972
+ matchEffect(self, {
973
+ onFailure: (e) => failSync(() => onFailure(e)),
974
+ onSuccess: (a) => sync(() => onSuccess(a))
975
+ }))
976
+
977
+ /* @internal */
978
+ export const mapError = dual<
979
+ <E, E2>(f: (e: E) => E2) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E2, A>,
980
+ <R, A, E, E2>(self: Effect.Effect<R, E, A>, f: (e: E) => E2) => Effect.Effect<R, E2, A>
981
+ >(2, (self, f) =>
982
+ matchCauseEffect(self, {
983
+ onFailure: (cause) => {
984
+ const either = internalCause.failureOrCause(cause)
985
+ switch (either._tag) {
986
+ case "Left": {
987
+ return failSync(() => f(either.left))
988
+ }
989
+ case "Right": {
990
+ return failCause(either.right)
991
+ }
992
+ }
993
+ },
994
+ onSuccess: succeed
995
+ }))
996
+
997
+ /* @internal */
998
+ export const onError = dual<
999
+ <E, R2, X>(
1000
+ cleanup: (cause: Cause.Cause<E>) => Effect.Effect<R2, never, X>
1001
+ ) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E, A>,
1002
+ <R, A, E, R2, X>(
1003
+ self: Effect.Effect<R, E, A>,
1004
+ cleanup: (cause: Cause.Cause<E>) => Effect.Effect<R2, never, X>
1005
+ ) => Effect.Effect<R2 | R, E, A>
1006
+ >(2, (self, cleanup) => onExit(self, unified((exit) => exitIsSuccess(exit) ? unit : cleanup(exit.i0))))
1007
+
1008
+ /* @internal */
1009
+ export const onExit = dual<
1010
+ <E, A, R2, X>(
1011
+ cleanup: (exit: Exit.Exit<E, A>) => Effect.Effect<R2, never, X>
1012
+ ) => <R>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E, A>,
1013
+ <R, E, A, R2, X>(
1014
+ self: Effect.Effect<R, E, A>,
1015
+ cleanup: (exit: Exit.Exit<E, A>) => Effect.Effect<R2, never, X>
1016
+ ) => Effect.Effect<R2 | R, E, A>
1017
+ >(2, (self, cleanup) =>
1018
+ uninterruptibleMask((restore) =>
1019
+ matchCauseEffect(restore(self), {
1020
+ onFailure: (cause1) => {
1021
+ const result = exitFailCause(cause1)
1022
+ return matchCauseEffect(cleanup(result), {
1023
+ onFailure: (cause2) => exitFailCause(internalCause.sequential(cause1, cause2)),
1024
+ onSuccess: () => result
1025
+ })
1026
+ },
1027
+ onSuccess: (success) => {
1028
+ const result = exitSucceed(success)
1029
+ return zipRight(cleanup(result), result)
1030
+ }
1031
+ })
1032
+ ))
1033
+
1034
+ /* @internal */
1035
+ export const onInterrupt = dual<
1036
+ <R2, X>(
1037
+ cleanup: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<R2, never, X>
1038
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R2 | R, E, A>,
1039
+ <R, E, A, R2, X>(
1040
+ self: Effect.Effect<R, E, A>,
1041
+ cleanup: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<R2, never, X>
1042
+ ) => Effect.Effect<R2 | R, E, A>
1043
+ >(2, (self, cleanup) =>
1044
+ onExit(
1045
+ self,
1046
+ exitMatch({
1047
+ onFailure: (cause) =>
1048
+ internalCause.isInterruptedOnly(cause)
1049
+ ? asUnit(cleanup(internalCause.interruptors(cause)))
1050
+ : unit,
1051
+ onSuccess: () => unit
1052
+ })
1053
+ ))
1054
+
1055
+ /* @internal */
1056
+ export const orElse = dual<
1057
+ <R2, E2, A2>(
1058
+ that: LazyArg<Effect.Effect<R2, E2, A2>>
1059
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E2, A | A2>,
1060
+ <R, E, A, R2, E2, A2>(
1061
+ self: Effect.Effect<R, E, A>,
1062
+ that: LazyArg<Effect.Effect<R2, E2, A2>>
1063
+ ) => Effect.Effect<R | R2, E2, A | A2>
1064
+ >(2, (self, that) => attemptOrElse(self, that, succeed))
1065
+
1066
+ /* @internal */
1067
+ export const orDie = <R, E, A>(self: Effect.Effect<R, E, A>): Effect.Effect<R, never, A> => orDieWith(self, identity)
1068
+
1069
+ /* @internal */
1070
+ export const orDieWith = dual<
1071
+ <E>(f: (error: E) => unknown) => <R, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, never, A>,
1072
+ <R, E, A>(self: Effect.Effect<R, E, A>, f: (error: E) => unknown) => Effect.Effect<R, never, A>
1073
+ >(2, (self, f) =>
1074
+ matchEffect(self, {
1075
+ onFailure: (e) => die(f(e)),
1076
+ onSuccess: succeed
1077
+ }))
1078
+
1079
+ /* @internal */
1080
+ export const partitionMap = <A, A1, A2>(
1081
+ elements: Iterable<A>,
1082
+ f: (a: A) => Either.Either<A1, A2>
1083
+ ): readonly [Array<A1>, Array<A2>] =>
1084
+ ReadonlyArray.fromIterable(elements).reduceRight(
1085
+ ([lefts, rights], current) => {
1086
+ const either = f(current)
1087
+ switch (either._tag) {
1088
+ case "Left": {
1089
+ return [[either.left, ...lefts], rights]
1090
+ }
1091
+ case "Right": {
1092
+ return [lefts, [either.right, ...rights]]
1093
+ }
1094
+ }
1095
+ },
1096
+ [new Array<A1>(), new Array<A2>()]
1097
+ )
1098
+
1099
+ /* @internal */
1100
+ export const provideContext = dual<
1101
+ <R>(context: Context.Context<R>) => <E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<never, E, A>,
1102
+ <R, E, A>(self: Effect.Effect<R, E, A>, context: Context.Context<R>) => Effect.Effect<never, E, A>
1103
+ >(2, <R, E, A>(self: Effect.Effect<R, E, A>, context: Context.Context<R>) =>
1104
+ fiberRefLocally(
1105
+ currentContext,
1106
+ context
1107
+ )(self as Effect.Effect<never, E, A>))
1108
+
1109
+ /* @internal */
1110
+ export const provideSomeContext = dual<
1111
+ <R>(context: Context.Context<R>) => <R1, E, A>(self: Effect.Effect<R1, E, A>) => Effect.Effect<Exclude<R1, R>, E, A>,
1112
+ <R, R1, E, A>(self: Effect.Effect<R1, E, A>, context: Context.Context<R>) => Effect.Effect<Exclude<R1, R>, E, A>
1113
+ >(2, <R1, R, E, A>(self: Effect.Effect<R1, E, A>, context: Context.Context<R>) =>
1114
+ fiberRefLocallyWith(
1115
+ currentContext,
1116
+ (parent) => Context.merge(parent, context)
1117
+ )(self as Effect.Effect<never, E, A>))
1118
+
1119
+ /* @internal */
1120
+ export const mapInputContext = dual<
1121
+ <R0, R>(
1122
+ f: (context: Context.Context<R0>) => Context.Context<R>
1123
+ ) => <E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R0, E, A>,
1124
+ <R0, R, E, A>(
1125
+ self: Effect.Effect<R, E, A>,
1126
+ f: (context: Context.Context<R0>) => Context.Context<R>
1127
+ ) => Effect.Effect<R0, E, A>
1128
+ >(2, <R0, R, E, A>(
1129
+ self: Effect.Effect<R, E, A>,
1130
+ f: (context: Context.Context<R0>) => Context.Context<R>
1131
+ ) => contextWithEffect((context: Context.Context<R0>) => provideContext(self, f(context))))
1132
+
1133
+ /* @internal */
1134
+ export const runtimeFlags: Effect.Effect<never, never, RuntimeFlags.RuntimeFlags> = withFiberRuntime<
1135
+ never,
1136
+ never,
1137
+ RuntimeFlags.RuntimeFlags
1138
+ >((_, status) => succeed(status.runtimeFlags))
1139
+
1140
+ /* @internal */
1141
+ export const succeed = <A>(value: A): Effect.Effect<never, never, A> => {
1142
+ const effect = new EffectPrimitiveSuccess(OpCodes.OP_SUCCESS) as any
1143
+ effect.i0 = value
1144
+ return effect
1145
+ }
1146
+
1147
+ /* @internal */
1148
+ export const suspend = <R, E, A>(effect: LazyArg<Effect.Effect<R, E, A>>): Effect.Effect<R, E, A> =>
1149
+ flatMap(sync(effect), identity)
1150
+
1151
+ /* @internal */
1152
+ export const sync = <A>(evaluate: LazyArg<A>): Effect.Effect<never, never, A> => {
1153
+ const effect = new EffectPrimitive(OpCodes.OP_SYNC) as any
1154
+ effect.i0 = evaluate
1155
+ return effect
1156
+ }
1157
+
1158
+ /* @internal */
1159
+ export const tap = dual<
1160
+ <A, X extends A, R2, E2, _>(
1161
+ f: (a: X) => Effect.Effect<R2, E2, _>
1162
+ ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A>,
1163
+ <R, E, A, X extends A, R2, E2, _>(
1164
+ self: Effect.Effect<R, E, A>,
1165
+ f: (a: X) => Effect.Effect<R2, E2, _>
1166
+ ) => Effect.Effect<R | R2, E | E2, A>
1167
+ >(2, (self, f) => flatMap(self, (a) => as(f(a as any), a)))
1168
+
1169
+ /* @internal */
1170
+ export const transplant = <R, E, A>(
1171
+ f: (grafter: <R2, E2, A2>(effect: Effect.Effect<R2, E2, A2>) => Effect.Effect<R2, E2, A2>) => Effect.Effect<R, E, A>
1172
+ ): Effect.Effect<R, E, A> =>
1173
+ withFiberRuntime<R, E, A>((state) => {
1174
+ const scopeOverride = state.getFiberRef(currentForkScopeOverride)
1175
+ const scope = pipe(scopeOverride, Option.getOrElse(() => state.scope()))
1176
+ return f(fiberRefLocally(currentForkScopeOverride, Option.some(scope)))
1177
+ })
1178
+
1179
+ /* @internal */
1180
+ export const attemptOrElse = dual<
1181
+ <R2, E2, A2, A, R3, E3, A3>(
1182
+ that: LazyArg<Effect.Effect<R2, E2, A2>>,
1183
+ onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
1184
+ ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2 | R3, E2 | E3, A2 | A3>,
1185
+ <R, E, A, R2, E2, A2, R3, E3, A3>(
1186
+ self: Effect.Effect<R, E, A>,
1187
+ that: LazyArg<Effect.Effect<R2, E2, A2>>,
1188
+ onSuccess: (a: A) => Effect.Effect<R3, E3, A3>
1189
+ ) => Effect.Effect<R | R2 | R3, E2 | E3, A2 | A3>
1190
+ >(3, (self, that, onSuccess) =>
1191
+ matchCauseEffect(self, {
1192
+ onFailure: (cause) => {
1193
+ const defects = internalCause.defects(cause)
1194
+ if (defects.length > 0) {
1195
+ return failCause(Option.getOrThrow(internalCause.keepDefectsAndElectFailures(cause)))
1196
+ }
1197
+ return that()
1198
+ },
1199
+ onSuccess
1200
+ }))
1201
+
1202
+ /* @internal */
1203
+ export const uninterruptible: <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A> = <R, E, A>(
1204
+ self: Effect.Effect<R, E, A>
1205
+ ): Effect.Effect<R, E, A> => {
1206
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1207
+ effect.i0 = RuntimeFlagsPatch.disable(_runtimeFlags.Interruption)
1208
+ effect.i1 = () => flatMapStep(self, _continue)
1209
+ const _continue = (orBlock: any) => {
1210
+ if (orBlock._tag === "Blocked") {
1211
+ return blocked(orBlock.i0, uninterruptible(orBlock.i1))
1212
+ } else {
1213
+ return orBlock
1214
+ }
1215
+ }
1216
+ return effect
1217
+ }
1218
+
1219
+ /* @internal */
1220
+ export const uninterruptibleMask = <R, E, A>(
1221
+ f: (restore: <RX, EX, AX>(effect: Effect.Effect<RX, EX, AX>) => Effect.Effect<RX, EX, AX>) => Effect.Effect<R, E, A>
1222
+ ): Effect.Effect<R, E, A> => {
1223
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1224
+ effect.i0 = RuntimeFlagsPatch.disable(_runtimeFlags.Interruption)
1225
+ const _continue = (step: Exit.Exit<E, A> | Effect.Blocked<R, E, A>): Exit.Exit<E, A> | Effect.Blocked<R, E, A> => {
1226
+ if (step._op === "Blocked") {
1227
+ return blocked(step.i0, uninterruptible(step.i1))
1228
+ }
1229
+ return step
1230
+ }
1231
+ effect.i1 = (oldFlags: RuntimeFlags.RuntimeFlags) =>
1232
+ _runtimeFlags.interruption(oldFlags)
1233
+ ? step(f(interruptible))
1234
+ : step(f(uninterruptible))
1235
+ return flatMap(effect, _continue)
1236
+ }
1237
+
1238
+ /* @internal */
1239
+ export const unit: Effect.Effect<never, never, void> = succeed(void 0)
1240
+
1241
+ /* @internal */
1242
+ export const updateRuntimeFlags = (patch: RuntimeFlagsPatch.RuntimeFlagsPatch): Effect.Effect<never, never, void> => {
1243
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1244
+ effect.i0 = patch
1245
+ effect.i1 = void 0
1246
+ return effect
1247
+ }
1248
+
1249
+ /* @internal */
1250
+ export const whenEffect = dual<
1251
+ <R, E>(
1252
+ predicate: Effect.Effect<R, E, boolean>
1253
+ ) => <R2, E2, A>(
1254
+ effect: Effect.Effect<R2, E2, A>
1255
+ ) => Effect.Effect<R | R2, E | E2, Option.Option<A>>,
1256
+ <R, E, A, R2, E2>(
1257
+ self: Effect.Effect<R2, E2, A>,
1258
+ predicate: Effect.Effect<R, E, boolean>
1259
+ ) => Effect.Effect<R | R2, E | E2, Option.Option<A>>
1260
+ >(2, (self, predicate) =>
1261
+ flatMap(predicate, (b) => {
1262
+ if (b) {
1263
+ return pipe(self, map(Option.some))
1264
+ }
1265
+ return succeed(Option.none())
1266
+ }))
1267
+
1268
+ /* @internal */
1269
+ export const whileLoop = <R, E, A>(
1270
+ options: {
1271
+ readonly while: LazyArg<boolean>
1272
+ readonly body: LazyArg<Effect.Effect<R, E, A>>
1273
+ readonly step: (a: A) => void
1274
+ }
1275
+ ): Effect.Effect<R, E, void> => {
1276
+ const effect = new EffectPrimitive(OpCodes.OP_WHILE) as any
1277
+ effect.i0 = options.while
1278
+ effect.i1 = options.body
1279
+ effect.i2 = options.step
1280
+ return effect
1281
+ }
1282
+
1283
+ /* @internal */
1284
+ export const withConcurrency = dual<
1285
+ (concurrency: number | "unbounded") => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1286
+ <R, E, A>(self: Effect.Effect<R, E, A>, concurrency: number | "unbounded") => Effect.Effect<R, E, A>
1287
+ >(2, (self, concurrency) => fiberRefLocally(self, currentConcurrency, concurrency))
1288
+
1289
+ /* @internal */
1290
+ export const withRequestBatching = dual<
1291
+ (requestBatching: boolean) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1292
+ <R, E, A>(self: Effect.Effect<R, E, A>, requestBatching: boolean) => Effect.Effect<R, E, A>
1293
+ >(2, (self, requestBatching) => fiberRefLocally(self, currentRequestBatching, requestBatching))
1294
+
1295
+ /* @internal */
1296
+ export const withRuntimeFlags = dual<
1297
+ (update: RuntimeFlagsPatch.RuntimeFlagsPatch) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1298
+ <R, E, A>(self: Effect.Effect<R, E, A>, update: RuntimeFlagsPatch.RuntimeFlagsPatch) => Effect.Effect<R, E, A>
1299
+ >(2, (self, update) => {
1300
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1301
+ effect.i0 = update
1302
+ effect.i1 = () => self
1303
+ return effect
1304
+ })
1305
+
1306
+ /** @internal */
1307
+ export const withTracerTiming = dual<
1308
+ (enabled: boolean) => <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
1309
+ <R, E, A>(effect: Effect.Effect<R, E, A>, enabled: boolean) => Effect.Effect<R, E, A>
1310
+ >(2, (effect, enabled) =>
1311
+ fiberRefLocally(
1312
+ effect,
1313
+ currentTracerTimingEnabled,
1314
+ enabled
1315
+ ))
1316
+
1317
+ /* @internal */
1318
+ export const yieldNow = (options?: {
1319
+ readonly priority?: number
1320
+ }): Effect.Effect<never, never, void> => {
1321
+ const effect = new EffectPrimitive(OpCodes.OP_YIELD) as any
1322
+ return typeof options?.priority !== "undefined" ?
1323
+ withSchedulingPriority(options.priority)(effect) :
1324
+ effect
1325
+ }
1326
+
1327
+ /* @internal */
1328
+ export const zip = dual<
1329
+ <R2, E2, A2>(
1330
+ that: Effect.Effect<R2, E2, A2>
1331
+ ) => <R, E, A>(
1332
+ self: Effect.Effect<R, E, A>
1333
+ ) => Effect.Effect<R | R2, E | E2, [A, A2]>,
1334
+ <R, E, A, R2, E2, A2>(
1335
+ self: Effect.Effect<R, E, A>,
1336
+ that: Effect.Effect<R2, E2, A2>
1337
+ ) => Effect.Effect<R | R2, E | E2, [A, A2]>
1338
+ >(2, <R, E, A, R2, E2, A2>(
1339
+ self: Effect.Effect<R, E, A>,
1340
+ that: Effect.Effect<R2, E2, A2>
1341
+ ): Effect.Effect<R | R2, E | E2, [A, A2]> => flatMap(self, (a) => map(that, (b) => [a, b] as [A, A2])))
1342
+
1343
+ /* @internal */
1344
+ export const zipFlatten = dual<
1345
+ <R2, E2, A2>(
1346
+ that: Effect.Effect<R2, E2, A2>
1347
+ ) => <R, E, A extends ReadonlyArray<any>>(
1348
+ self: Effect.Effect<R, E, A>
1349
+ ) => Effect.Effect<R | R2, E | E2, [...A, A2]>,
1350
+ <R, E, A extends ReadonlyArray<any>, R2, E2, A2>(
1351
+ self: Effect.Effect<R, E, A>,
1352
+ that: Effect.Effect<R2, E2, A2>
1353
+ ) => Effect.Effect<R | R2, E | E2, [...A, A2]>
1354
+ >(2, <R, E, A extends ReadonlyArray<any>, R2, E2, A2>(
1355
+ self: Effect.Effect<R, E, A>,
1356
+ that: Effect.Effect<R2, E2, A2>
1357
+ ): Effect.Effect<R | R2, E | E2, [...A, A2]> => flatMap(self, (a) => map(that, (b) => [...a, b] as [...A, A2])))
1358
+
1359
+ /* @internal */
1360
+ export const zipLeft = dual<
1361
+ <R2, E2, A2>(
1362
+ that: Effect.Effect<R2, E2, A2>
1363
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A>,
1364
+ <R, E, A, R2, E2, A2>(
1365
+ self: Effect.Effect<R, E, A>,
1366
+ that: Effect.Effect<R2, E2, A2>
1367
+ ) => Effect.Effect<R | R2, E | E2, A>
1368
+ >(2, (self, that) => flatMap(self, (a) => as(that, a)))
1369
+
1370
+ /* @internal */
1371
+ export const zipRight = dual<
1372
+ <R2, E2, A2>(
1373
+ that: Effect.Effect<R2, E2, A2>
1374
+ ) => <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, A2>,
1375
+ <R, E, A, R2, E2, A2>(
1376
+ self: Effect.Effect<R, E, A>,
1377
+ that: Effect.Effect<R2, E2, A2>
1378
+ ) => Effect.Effect<R | R2, E | E2, A2>
1379
+ >(2, (self, that) => flatMap(self, () => that))
1380
+
1381
+ /* @internal */
1382
+ export const zipWith = dual<
1383
+ <R2, E2, A2, A, B>(
1384
+ that: Effect.Effect<R2, E2, A2>,
1385
+ f: (a: A, b: A2) => B
1386
+ ) => <R, E>(self: Effect.Effect<R, E, A>) => Effect.Effect<R | R2, E | E2, B>,
1387
+ <R, E, R2, E2, A2, A, B>(
1388
+ self: Effect.Effect<R, E, A>,
1389
+ that: Effect.Effect<R2, E2, A2>,
1390
+ f: (a: A, b: A2) => B
1391
+ ) => Effect.Effect<R | R2, E | E2, B>
1392
+ >(3, (self, that, f) => flatMap(self, (a) => map(that, (b) => f(a, b))))
1393
+
1394
+ /* @internal */
1395
+ export const never: Effect.Effect<never, never, never> = asyncEither<never, never, never>(() => {
1396
+ const interval = setInterval(() => {
1397
+ //
1398
+ }, 2 ** 31 - 1)
1399
+ return Either.left(sync(() => clearInterval(interval)))
1400
+ })
1401
+
1402
+ // -----------------------------------------------------------------------------
1403
+ // Fiber
1404
+ // -----------------------------------------------------------------------------
1405
+
1406
+ /* @internal */
1407
+ export const interruptFiber = <E, A>(self: Fiber.Fiber<E, A>): Effect.Effect<never, never, Exit.Exit<E, A>> =>
1408
+ flatMap(fiberId, (fiberId) => pipe(self, interruptAsFiber(fiberId)))
1409
+
1410
+ /* @internal */
1411
+ export const interruptAsFiber = dual<
1412
+ (fiberId: FiberId.FiberId) => <E, A>(self: Fiber.Fiber<E, A>) => Effect.Effect<never, never, Exit.Exit<E, A>>,
1413
+ <E, A>(self: Fiber.Fiber<E, A>, fiberId: FiberId.FiberId) => Effect.Effect<never, never, Exit.Exit<E, A>>
1414
+ >(2, (self, fiberId) => flatMap(self.interruptAsFork(fiberId), () => self.await()))
1415
+
1416
+ // -----------------------------------------------------------------------------
1417
+ // LogLevel
1418
+ // -----------------------------------------------------------------------------
1419
+
1420
+ /** @internal */
1421
+ export const logLevelAll: LogLevel.LogLevel = {
1422
+ _tag: "All",
1423
+ syslog: 0,
1424
+ label: "ALL",
1425
+ ordinal: Number.MIN_SAFE_INTEGER,
1426
+ pipe() {
1427
+ return pipeArguments(this, arguments)
1428
+ }
1429
+ }
1430
+
1431
+ /** @internal */
1432
+ export const logLevelFatal: LogLevel.LogLevel = {
1433
+ _tag: "Fatal",
1434
+ syslog: 2,
1435
+ label: "FATAL",
1436
+ ordinal: 50000,
1437
+ pipe() {
1438
+ return pipeArguments(this, arguments)
1439
+ }
1440
+ }
1441
+
1442
+ /** @internal */
1443
+ export const logLevelError: LogLevel.LogLevel = {
1444
+ _tag: "Error",
1445
+ syslog: 3,
1446
+ label: "ERROR",
1447
+ ordinal: 40000,
1448
+ pipe() {
1449
+ return pipeArguments(this, arguments)
1450
+ }
1451
+ }
1452
+
1453
+ /** @internal */
1454
+ export const logLevelWarning: LogLevel.LogLevel = {
1455
+ _tag: "Warning",
1456
+ syslog: 4,
1457
+ label: "WARN",
1458
+ ordinal: 30000,
1459
+ pipe() {
1460
+ return pipeArguments(this, arguments)
1461
+ }
1462
+ }
1463
+
1464
+ /** @internal */
1465
+ export const logLevelInfo: LogLevel.LogLevel = {
1466
+ _tag: "Info",
1467
+ syslog: 6,
1468
+ label: "INFO",
1469
+ ordinal: 20000,
1470
+ pipe() {
1471
+ return pipeArguments(this, arguments)
1472
+ }
1473
+ }
1474
+
1475
+ /** @internal */
1476
+ export const logLevelDebug: LogLevel.LogLevel = {
1477
+ _tag: "Debug",
1478
+ syslog: 7,
1479
+ label: "DEBUG",
1480
+ ordinal: 10000,
1481
+ pipe() {
1482
+ return pipeArguments(this, arguments)
1483
+ }
1484
+ }
1485
+
1486
+ /** @internal */
1487
+ export const logLevelTrace: LogLevel.LogLevel = {
1488
+ _tag: "Trace",
1489
+ syslog: 7,
1490
+ label: "TRACE",
1491
+ ordinal: 0,
1492
+ pipe() {
1493
+ return pipeArguments(this, arguments)
1494
+ }
1495
+ }
1496
+
1497
+ /** @internal */
1498
+ export const logLevelNone: LogLevel.LogLevel = {
1499
+ _tag: "None",
1500
+ syslog: 7,
1501
+ label: "OFF",
1502
+ ordinal: Number.MAX_SAFE_INTEGER,
1503
+ pipe() {
1504
+ return pipeArguments(this, arguments)
1505
+ }
1506
+ }
1507
+
1508
+ /** @internal */
1509
+ export const allLogLevels: ReadonlyArray<LogLevel.LogLevel> = [
1510
+ logLevelAll,
1511
+ logLevelTrace,
1512
+ logLevelDebug,
1513
+ logLevelInfo,
1514
+ logLevelWarning,
1515
+ logLevelError,
1516
+ logLevelFatal,
1517
+ logLevelNone
1518
+ ]
1519
+
1520
+ // -----------------------------------------------------------------------------
1521
+ // FiberRef
1522
+ // -----------------------------------------------------------------------------
1523
+
1524
+ /** @internal */
1525
+ const FiberRefSymbolKey = "effect/FiberRef"
1526
+
1527
+ /** @internal */
1528
+ export const FiberRefTypeId: FiberRef.FiberRefTypeId = Symbol.for(
1529
+ FiberRefSymbolKey
1530
+ ) as FiberRef.FiberRefTypeId
1531
+
1532
+ /** @internal */
1533
+ const fiberRefVariance = {
1534
+ _A: (_: never) => _
1535
+ }
1536
+
1537
+ /* @internal */
1538
+ export const fiberRefGet = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<never, never, A> =>
1539
+ fiberRefModify(self, (a) => [a, a] as const)
1540
+
1541
+ /* @internal */
1542
+ export const fiberRefGetAndSet = dual<
1543
+ <A>(value: A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, A>,
1544
+ <A>(self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<never, never, A>
1545
+ >(2, (self, value) => fiberRefModify(self, (v) => [v, value] as const))
1546
+
1547
+ /* @internal */
1548
+ export const fiberRefGetAndUpdate = dual<
1549
+ <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, A>,
1550
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<never, never, A>
1551
+ >(2, (self, f) => fiberRefModify(self, (v) => [v, f(v)] as const))
1552
+
1553
+ /* @internal */
1554
+ export const fiberRefGetAndUpdateSome = dual<
1555
+ <A>(
1556
+ pf: (a: A) => Option.Option<A>
1557
+ ) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, A>,
1558
+ <A>(
1559
+ self: FiberRef.FiberRef<A>,
1560
+ pf: (a: A) => Option.Option<A>
1561
+ ) => Effect.Effect<never, never, A>
1562
+ >(2, (self, pf) => fiberRefModify(self, (v) => [v, Option.getOrElse(pf(v), () => v)] as const))
1563
+
1564
+ /* @internal */
1565
+ export const fiberRefGetWith = dual<
1566
+ <A, R, E, B>(f: (a: A) => Effect.Effect<R, E, B>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<R, E, B>,
1567
+ <A, R, E, B>(self: FiberRef.FiberRef<A>, f: (a: A) => Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>
1568
+ >(2, (self, f) => flatMap(fiberRefGet(self), f))
1569
+
1570
+ /* @internal */
1571
+ export const fiberRefSet = dual<
1572
+ <A>(value: A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, void>,
1573
+ <A>(self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<never, never, void>
1574
+ >(2, (self, value) => fiberRefModify(self, () => [void 0, value] as const))
1575
+
1576
+ /* @internal */
1577
+ export const fiberRefDelete = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<never, never, void> =>
1578
+ withFiberRuntime<never, never, void>((state) => {
1579
+ state.unsafeDeleteFiberRef(self)
1580
+ return unit
1581
+ })
1582
+
1583
+ /* @internal */
1584
+ export const fiberRefReset = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<never, never, void> =>
1585
+ fiberRefSet(self, self.initial)
1586
+
1587
+ /* @internal */
1588
+ export const fiberRefModify = dual<
1589
+ <A, B>(f: (a: A) => readonly [B, A]) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, B>,
1590
+ <A, B>(self: FiberRef.FiberRef<A>, f: (a: A) => readonly [B, A]) => Effect.Effect<never, never, B>
1591
+ >(2, <A, B>(
1592
+ self: FiberRef.FiberRef<A>,
1593
+ f: (a: A) => readonly [B, A]
1594
+ ): Effect.Effect<never, never, B> =>
1595
+ withFiberRuntime<never, never, B>((state) => {
1596
+ const [b, a] = f(state.getFiberRef(self) as A)
1597
+ state.setFiberRef(self, a)
1598
+ return succeed(b)
1599
+ }))
1600
+
1601
+ /* @internal */
1602
+ export const fiberRefModifySome = <A, B>(
1603
+ self: FiberRef.FiberRef<A>,
1604
+ def: B,
1605
+ f: (a: A) => Option.Option<readonly [B, A]>
1606
+ ): Effect.Effect<never, never, B> => fiberRefModify(self, (v) => Option.getOrElse(f(v), () => [def, v] as const))
1607
+
1608
+ /* @internal */
1609
+ export const fiberRefUpdate = dual<
1610
+ <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, void>,
1611
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<never, never, void>
1612
+ >(2, (self, f) => fiberRefModify(self, (v) => [void 0, f(v)] as const))
1613
+
1614
+ /* @internal */
1615
+ export const fiberRefUpdateSome = dual<
1616
+ <A>(pf: (a: A) => Option.Option<A>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, void>,
1617
+ <A>(self: FiberRef.FiberRef<A>, pf: (a: A) => Option.Option<A>) => Effect.Effect<never, never, void>
1618
+ >(2, (self, pf) => fiberRefModify(self, (v) => [void 0, Option.getOrElse(pf(v), () => v)] as const))
1619
+
1620
+ /* @internal */
1621
+ export const fiberRefUpdateAndGet = dual<
1622
+ <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, A>,
1623
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<never, never, A>
1624
+ >(2, (self, f) =>
1625
+ fiberRefModify(self, (v) => {
1626
+ const result = f(v)
1627
+ return [result, result] as const
1628
+ }))
1629
+
1630
+ /* @internal */
1631
+ export const fiberRefUpdateSomeAndGet = dual<
1632
+ <A>(pf: (a: A) => Option.Option<A>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<never, never, A>,
1633
+ <A>(self: FiberRef.FiberRef<A>, pf: (a: A) => Option.Option<A>) => Effect.Effect<never, never, A>
1634
+ >(2, (self, pf) =>
1635
+ fiberRefModify(self, (v) => {
1636
+ const result = Option.getOrElse(pf(v), () => v)
1637
+ return [result, result] as const
1638
+ }))
1639
+
1640
+ // circular
1641
+ /** @internal */
1642
+ const RequestResolverSymbolKey = "effect/RequestResolver"
1643
+
1644
+ /** @internal */
1645
+ export const RequestResolverTypeId: RequestResolver.RequestResolverTypeId = Symbol.for(
1646
+ RequestResolverSymbolKey
1647
+ ) as RequestResolver.RequestResolverTypeId
1648
+
1649
+ const dataSourceVariance = {
1650
+ _R: (_: never) => _,
1651
+ _A: (_: never) => _
1652
+ }
1653
+
1654
+ /** @internal */
1655
+ export class RequestResolverImpl<R, A> implements RequestResolver.RequestResolver<A, R> {
1656
+ readonly [RequestResolverTypeId] = dataSourceVariance
1657
+ constructor(
1658
+ readonly runAll: (
1659
+ requests: Array<Array<Request.Entry<A>>>
1660
+ ) => Effect.Effect<R, never, void>,
1661
+ readonly target?: unknown
1662
+ ) {
1663
+ this.runAll = runAll as any
1664
+ }
1665
+ [Hash.symbol](): number {
1666
+ return this.target ? Hash.hash(this.target) : Hash.random(this)
1667
+ }
1668
+ [Equal.symbol](that: unknown): boolean {
1669
+ return this.target ?
1670
+ isRequestResolver(that) && Equal.equals(this.target, (that as RequestResolverImpl<any, any>).target) :
1671
+ this === that
1672
+ }
1673
+ identified(...ids: Array<unknown>): RequestResolver.RequestResolver<A, R> {
1674
+ return new RequestResolverImpl(this.runAll, Chunk.fromIterable(ids))
1675
+ }
1676
+ pipe() {
1677
+ return pipeArguments(this, arguments)
1678
+ }
1679
+ }
1680
+
1681
+ /** @internal */
1682
+ export const isRequestResolver = (u: unknown): u is RequestResolver.RequestResolver<unknown, unknown> =>
1683
+ typeof u === "object" && u != null && RequestResolverTypeId in u
1684
+
1685
+ // end
1686
+
1687
+ /** @internal */
1688
+ export const resolverLocally = dual<
1689
+ <A>(
1690
+ self: FiberRef.FiberRef<A>,
1691
+ value: A
1692
+ ) => <R, B extends Request.Request<any, any>>(
1693
+ use: RequestResolver.RequestResolver<B, R>
1694
+ ) => RequestResolver.RequestResolver<B, R>,
1695
+ <R, B extends Request.Request<any, any>, A>(
1696
+ use: RequestResolver.RequestResolver<B, R>,
1697
+ self: FiberRef.FiberRef<A>,
1698
+ value: A
1699
+ ) => RequestResolver.RequestResolver<B, R>
1700
+ >(3, <R, B extends Request.Request<any, any>, A>(
1701
+ use: RequestResolver.RequestResolver<B, R>,
1702
+ self: FiberRef.FiberRef<A>,
1703
+ value: A
1704
+ ): RequestResolver.RequestResolver<B, R> =>
1705
+ new RequestResolverImpl<R, B>(
1706
+ (requests) =>
1707
+ fiberRefLocally(
1708
+ use.runAll(requests),
1709
+ self,
1710
+ value
1711
+ ),
1712
+ Chunk.make("Locally", use, self, value)
1713
+ ))
1714
+
1715
+ /** @internal */
1716
+ export const requestBlockLocally = <R, A>(
1717
+ self: BlockedRequests.RequestBlock<R>,
1718
+ ref: FiberRef.FiberRef<A>,
1719
+ value: A
1720
+ ): BlockedRequests.RequestBlock<R> => _blockedRequests.reduce(self, LocallyReducer(ref, value))
1721
+
1722
+ const LocallyReducer = <R, A>(
1723
+ ref: FiberRef.FiberRef<A>,
1724
+ value: A
1725
+ ): BlockedRequests.RequestBlock.Reducer<R, BlockedRequests.RequestBlock<R>> => ({
1726
+ emptyCase: () => _blockedRequests.empty,
1727
+ parCase: (left, right) => _blockedRequests.par(left, right),
1728
+ seqCase: (left, right) => _blockedRequests.seq(left, right),
1729
+ singleCase: (dataSource, blockedRequest) =>
1730
+ _blockedRequests.single(
1731
+ resolverLocally(dataSource, ref, value),
1732
+ blockedRequest
1733
+ )
1734
+ })
1735
+
1736
+ /* @internal */
1737
+ export const fiberRefLocally: {
1738
+ <A>(self: FiberRef.FiberRef<A>, value: A): <R, E, B>(use: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>
1739
+ <R, E, B, A>(use: Effect.Effect<R, E, B>, self: FiberRef.FiberRef<A>, value: A): Effect.Effect<R, E, B>
1740
+ } = dual<
1741
+ <A>(self: FiberRef.FiberRef<A>, value: A) => <R, E, B>(use: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>,
1742
+ <R, E, B, A>(use: Effect.Effect<R, E, B>, self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<R, E, B>
1743
+ >(3, (use, self, value) =>
1744
+ flatMap(
1745
+ acquireUseRelease(
1746
+ zipLeft(fiberRefGet(self), fiberRefSet(self, value)),
1747
+ () => step(use),
1748
+ (oldValue) => fiberRefSet(self, oldValue)
1749
+ ),
1750
+ (res) => {
1751
+ if (res._op === "Blocked") {
1752
+ return blocked(res.i0, fiberRefLocally(res.i1, self, value))
1753
+ }
1754
+ return res
1755
+ }
1756
+ ))
1757
+
1758
+ /* @internal */
1759
+ export const fiberRefLocallyWith = dual<
1760
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => <R, E, B>(use: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>,
1761
+ <R, E, B, A>(use: Effect.Effect<R, E, B>, self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<R, E, B>
1762
+ >(3, (use, self, f) => fiberRefGetWith(self, (a) => fiberRefLocally(use, self, f(a))))
1763
+
1764
+ /** @internal */
1765
+ export const fiberRefUnsafeMake = <Value>(
1766
+ initial: Value,
1767
+ options?: {
1768
+ readonly fork?: (a: Value) => Value
1769
+ readonly join?: (left: Value, right: Value) => Value
1770
+ }
1771
+ ): FiberRef.FiberRef<Value> =>
1772
+ fiberRefUnsafeMakePatch(initial, {
1773
+ differ: Differ.update(),
1774
+ fork: options?.fork ?? identity,
1775
+ join: options?.join
1776
+ })
1777
+
1778
+ /** @internal */
1779
+ export const fiberRefUnsafeMakeHashSet = <A>(
1780
+ initial: HashSet.HashSet<A>
1781
+ ): FiberRef.FiberRef<HashSet.HashSet<A>> => {
1782
+ const differ = Differ.hashSet<A>()
1783
+ return fiberRefUnsafeMakePatch(initial, {
1784
+ differ,
1785
+ fork: differ.empty
1786
+ })
1787
+ }
1788
+
1789
+ /** @internal */
1790
+ export const fiberRefUnsafeMakeContext = <A>(
1791
+ initial: Context.Context<A>
1792
+ ): FiberRef.FiberRef<Context.Context<A>> => {
1793
+ const differ = Differ.environment<A>()
1794
+ return fiberRefUnsafeMakePatch(initial, {
1795
+ differ,
1796
+ fork: differ.empty
1797
+ })
1798
+ }
1799
+
1800
+ /** @internal */
1801
+ export const fiberRefUnsafeMakePatch = <Value, Patch>(
1802
+ initial: Value,
1803
+ options: {
1804
+ readonly differ: Differ.Differ<Value, Patch>
1805
+ readonly fork: Patch
1806
+ readonly join?: (oldV: Value, newV: Value) => Value
1807
+ }
1808
+ ): FiberRef.FiberRef<Value> => ({
1809
+ [FiberRefTypeId]: fiberRefVariance,
1810
+ initial,
1811
+ diff: (oldValue, newValue) => options.differ.diff(oldValue, newValue),
1812
+ combine: (first, second) => options.differ.combine(first as Patch, second as Patch),
1813
+ patch: (patch) => (oldValue) => options.differ.patch(patch as Patch, oldValue),
1814
+ fork: options.fork,
1815
+ join: options.join ?? ((_, n) => n),
1816
+ pipe() {
1817
+ return pipeArguments(this, arguments)
1818
+ }
1819
+ })
1820
+
1821
+ /** @internal */
1822
+ export const fiberRefUnsafeMakeRuntimeFlags = (
1823
+ initial: RuntimeFlags.RuntimeFlags
1824
+ ): FiberRef.FiberRef<RuntimeFlags.RuntimeFlags> =>
1825
+ fiberRefUnsafeMakePatch(initial, {
1826
+ differ: _runtimeFlags.differ,
1827
+ fork: _runtimeFlags.differ.empty
1828
+ })
1829
+
1830
+ /** @internal */
1831
+ export const currentContext: FiberRef.FiberRef<Context.Context<never>> = globalValue(
1832
+ Symbol.for("effect/FiberRef/currentContext"),
1833
+ () => fiberRefUnsafeMakeContext(Context.empty())
1834
+ )
1835
+
1836
+ /** @internal */
1837
+ export const currentSchedulingPriority: FiberRef.FiberRef<number> = globalValue(
1838
+ Symbol.for("effect/FiberRef/currentSchedulingPriority"),
1839
+ () => fiberRefUnsafeMake(0)
1840
+ )
1841
+
1842
+ /** @internal */
1843
+ export const currentMaxOpsBeforeYield: FiberRef.FiberRef<number> = globalValue(
1844
+ Symbol.for("effect/FiberRef/currentMaxOpsBeforeYield"),
1845
+ () => fiberRefUnsafeMake(2048)
1846
+ )
1847
+
1848
+ /** @internal */
1849
+ export const currentLogAnnotations: FiberRef.FiberRef<HashMap.HashMap<string, Logger.AnnotationValue>> = globalValue(
1850
+ Symbol.for("effect/FiberRef/currentLogAnnotation"),
1851
+ () => fiberRefUnsafeMake(HashMap.empty())
1852
+ )
1853
+
1854
+ /** @internal */
1855
+ export const currentLogLevel: FiberRef.FiberRef<LogLevel.LogLevel> = globalValue(
1856
+ Symbol.for("effect/FiberRef/currentLogLevel"),
1857
+ () => fiberRefUnsafeMake<LogLevel.LogLevel>(logLevelInfo)
1858
+ )
1859
+
1860
+ /** @internal */
1861
+ export const currentLogSpan: FiberRef.FiberRef<List.List<LogSpan.LogSpan>> = globalValue(
1862
+ Symbol.for("effect/FiberRef/currentLogSpan"),
1863
+ () => fiberRefUnsafeMake(List.empty<LogSpan.LogSpan>())
1864
+ )
1865
+
1866
+ /** @internal */
1867
+ export const withSchedulingPriority = dual<
1868
+ (priority: number) => <R, E, B>(self: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>,
1869
+ <R, E, B>(self: Effect.Effect<R, E, B>, priority: number) => Effect.Effect<R, E, B>
1870
+ >(2, (self, scheduler) => fiberRefLocally(self, currentSchedulingPriority, scheduler))
1871
+
1872
+ /** @internal */
1873
+ export const withMaxOpsBeforeYield = dual<
1874
+ (priority: number) => <R, E, B>(self: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>,
1875
+ <R, E, B>(self: Effect.Effect<R, E, B>, priority: number) => Effect.Effect<R, E, B>
1876
+ >(2, (self, scheduler) => fiberRefLocally(self, currentMaxOpsBeforeYield, scheduler))
1877
+
1878
+ /** @internal */
1879
+ export const currentConcurrency: FiberRef.FiberRef<"unbounded" | number> = globalValue(
1880
+ Symbol.for("effect/FiberRef/currentConcurrency"),
1881
+ () => fiberRefUnsafeMake<"unbounded" | number>("unbounded")
1882
+ )
1883
+
1884
+ /**
1885
+ * @internal
1886
+ */
1887
+ export const currentRequestBatching = globalValue(
1888
+ Symbol.for("effect/FiberRef/currentRequestBatching"),
1889
+ () => fiberRefUnsafeMake(true)
1890
+ )
1891
+
1892
+ /** @internal */
1893
+ export const currentUnhandledErrorLogLevel: FiberRef.FiberRef<Option.Option<LogLevel.LogLevel>> = globalValue(
1894
+ Symbol.for("effect/FiberRef/currentUnhandledErrorLogLevel"),
1895
+ () => fiberRefUnsafeMake(Option.some<LogLevel.LogLevel>(logLevelDebug))
1896
+ )
1897
+
1898
+ /** @internal */
1899
+ export const withUnhandledErrorLogLevel = dual<
1900
+ (level: Option.Option<LogLevel.LogLevel>) => <R, E, B>(self: Effect.Effect<R, E, B>) => Effect.Effect<R, E, B>,
1901
+ <R, E, B>(self: Effect.Effect<R, E, B>, level: Option.Option<LogLevel.LogLevel>) => Effect.Effect<R, E, B>
1902
+ >(2, (self, level) => fiberRefLocally(self, currentUnhandledErrorLogLevel, level))
1903
+
1904
+ /** @internal */
1905
+ export const currentMetricLabels: FiberRef.FiberRef<HashSet.HashSet<MetricLabel.MetricLabel>> = globalValue(
1906
+ Symbol.for("effect/FiberRef/currentMetricLabels"),
1907
+ () => fiberRefUnsafeMakeHashSet(HashSet.empty())
1908
+ )
1909
+
1910
+ /* @internal */
1911
+ export const metricLabels: Effect.Effect<never, never, HashSet.HashSet<MetricLabel.MetricLabel>> = fiberRefGet(
1912
+ currentMetricLabels
1913
+ )
1914
+
1915
+ /** @internal */
1916
+ export const currentForkScopeOverride: FiberRef.FiberRef<Option.Option<fiberScope.FiberScope>> = globalValue(
1917
+ Symbol.for("effect/FiberRef/currentForkScopeOverride"),
1918
+ () =>
1919
+ fiberRefUnsafeMake(Option.none(), {
1920
+ fork: () => Option.none() as Option.Option<fiberScope.FiberScope>,
1921
+ join: (parent, _) => parent
1922
+ })
1923
+ )
1924
+
1925
+ /** @internal */
1926
+ export const currentInterruptedCause: FiberRef.FiberRef<Cause.Cause<never>> = globalValue(
1927
+ Symbol.for("effect/FiberRef/currentInterruptedCause"),
1928
+ () =>
1929
+ fiberRefUnsafeMake(internalCause.empty, {
1930
+ fork: () => internalCause.empty,
1931
+ join: (parent, _) => parent
1932
+ })
1933
+ )
1934
+
1935
+ /** @internal */
1936
+ export const currentTracerSpan: FiberRef.FiberRef<List.List<Tracer.ParentSpan>> = globalValue(
1937
+ Symbol.for("effect/FiberRef/currentTracerSpan"),
1938
+ () => fiberRefUnsafeMake(List.empty<Tracer.ParentSpan>())
1939
+ )
1940
+
1941
+ /** @internal */
1942
+ export const currentTracerTimingEnabled: FiberRef.FiberRef<boolean> = globalValue(
1943
+ Symbol.for("effect/FiberRef/currentTracerTiming"),
1944
+ () => fiberRefUnsafeMake(true)
1945
+ )
1946
+
1947
+ /** @internal */
1948
+ export const currentTracerSpanAnnotations: FiberRef.FiberRef<HashMap.HashMap<string, Tracer.AttributeValue>> =
1949
+ globalValue(
1950
+ Symbol.for("effect/FiberRef/currentTracerSpanAnnotations"),
1951
+ () => fiberRefUnsafeMake(HashMap.empty())
1952
+ )
1953
+
1954
+ /** @internal */
1955
+ export const currentTracerSpanLinks: FiberRef.FiberRef<Chunk.Chunk<Tracer.SpanLink>> = globalValue(
1956
+ Symbol.for("effect/FiberRef/currentTracerSpanLinks"),
1957
+ () => fiberRefUnsafeMake(Chunk.empty())
1958
+ )
1959
+
1960
+ // -----------------------------------------------------------------------------
1961
+ // Scope
1962
+ // -----------------------------------------------------------------------------
1963
+
1964
+ /** @internal */
1965
+ export const ScopeTypeId: Scope.ScopeTypeId = Symbol.for("effect/Scope") as Scope.ScopeTypeId
1966
+
1967
+ /** @internal */
1968
+ export const CloseableScopeTypeId: Scope.CloseableScopeTypeId = Symbol.for(
1969
+ "effect/CloseableScope"
1970
+ ) as Scope.CloseableScopeTypeId
1971
+
1972
+ /* @internal */
1973
+ export const scopeAddFinalizer = (
1974
+ self: Scope.Scope,
1975
+ finalizer: Effect.Effect<never, never, unknown>
1976
+ ): Effect.Effect<never, never, void> => self.addFinalizer(() => asUnit(finalizer))
1977
+
1978
+ /* @internal */
1979
+ export const scopeAddFinalizerExit = (
1980
+ self: Scope.Scope,
1981
+ finalizer: Scope.Scope.Finalizer
1982
+ ): Effect.Effect<never, never, void> => self.addFinalizer(finalizer)
1983
+
1984
+ /* @internal */
1985
+ export const scopeClose = (
1986
+ self: Scope.Scope.Closeable,
1987
+ exit: Exit.Exit<unknown, unknown>
1988
+ ): Effect.Effect<never, never, void> => self.close(exit)
1989
+
1990
+ /* @internal */
1991
+ export const scopeFork = (
1992
+ self: Scope.Scope,
1993
+ strategy: ExecutionStrategy.ExecutionStrategy
1994
+ ): Effect.Effect<never, never, Scope.Scope.Closeable> => self.fork(strategy)
1995
+
1996
+ // -----------------------------------------------------------------------------
1997
+ // ReleaseMap
1998
+ // -----------------------------------------------------------------------------
1999
+
2000
+ /** @internal */
2001
+ export type ReleaseMapState = {
2002
+ _tag: "Exited"
2003
+ nextKey: number
2004
+ exit: Exit.Exit<unknown, unknown>
2005
+ update: (finalizer: Scope.Scope.Finalizer) => Scope.Scope.Finalizer
2006
+ } | {
2007
+ _tag: "Running"
2008
+ nextKey: number
2009
+ finalizers: Map<number, Scope.Scope.Finalizer>
2010
+ update: (finalizer: Scope.Scope.Finalizer) => Scope.Scope.Finalizer
2011
+ }
2012
+
2013
+ /** @internal */
2014
+ export interface ReleaseMap {
2015
+ state: ReleaseMapState
2016
+ }
2017
+
2018
+ /* @internal */
2019
+ export const releaseMapAdd = dual<
2020
+ (finalizer: Scope.Scope.Finalizer) => (self: ReleaseMap) => Effect.Effect<never, never, Scope.Scope.Finalizer>,
2021
+ (self: ReleaseMap, finalizer: Scope.Scope.Finalizer) => Effect.Effect<never, never, Scope.Scope.Finalizer>
2022
+ >(2, (self, finalizer) =>
2023
+ map(
2024
+ releaseMapAddIfOpen(self, finalizer),
2025
+ Option.match({
2026
+ onNone: (): Scope.Scope.Finalizer => () => unit,
2027
+ onSome: (key): Scope.Scope.Finalizer => (exit) => releaseMapRelease(key, exit)(self)
2028
+ })
2029
+ ))
2030
+
2031
+ /* @internal */
2032
+ export const releaseMapRelease = dual<
2033
+ (key: number, exit: Exit.Exit<unknown, unknown>) => (self: ReleaseMap) => Effect.Effect<never, never, void>,
2034
+ (self: ReleaseMap, key: number, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<never, never, void>
2035
+ >(3, (self, key, exit) =>
2036
+ suspend(() => {
2037
+ switch (self.state._tag) {
2038
+ case "Exited": {
2039
+ return unit
2040
+ }
2041
+ case "Running": {
2042
+ const finalizer = self.state.finalizers.get(key)
2043
+ self.state.finalizers.delete(key)
2044
+ if (finalizer != null) {
2045
+ return self.state.update(finalizer)(exit)
2046
+ }
2047
+ return unit
2048
+ }
2049
+ }
2050
+ }))
2051
+
2052
+ /* @internal */
2053
+ export const releaseMapAddIfOpen = dual<
2054
+ (finalizer: Scope.Scope.Finalizer) => (self: ReleaseMap) => Effect.Effect<never, never, Option.Option<number>>,
2055
+ (self: ReleaseMap, finalizer: Scope.Scope.Finalizer) => Effect.Effect<never, never, Option.Option<number>>
2056
+ >(2, (self, finalizer) =>
2057
+ suspend(() => {
2058
+ switch (self.state._tag) {
2059
+ case "Exited": {
2060
+ self.state.nextKey += 1
2061
+ return as(finalizer(self.state.exit), Option.none())
2062
+ }
2063
+ case "Running": {
2064
+ const key = self.state.nextKey
2065
+ self.state.finalizers.set(key, finalizer)
2066
+ self.state.nextKey += 1
2067
+ return succeed(Option.some(key))
2068
+ }
2069
+ }
2070
+ }))
2071
+
2072
+ /* @internal */
2073
+ export const releaseMapGet = dual<
2074
+ (key: number) => (self: ReleaseMap) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>,
2075
+ (self: ReleaseMap, key: number) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>
2076
+ >(
2077
+ 2,
2078
+ (self, key) =>
2079
+ sync((): Option.Option<Scope.Scope.Finalizer> =>
2080
+ self.state._tag === "Running" ? Option.fromNullable(self.state.finalizers.get(key)) : Option.none()
2081
+ )
2082
+ )
2083
+
2084
+ /* @internal */
2085
+ export const releaseMapReplace = dual<
2086
+ (
2087
+ key: number,
2088
+ finalizer: Scope.Scope.Finalizer
2089
+ ) => (self: ReleaseMap) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>,
2090
+ (
2091
+ self: ReleaseMap,
2092
+ key: number,
2093
+ finalizer: Scope.Scope.Finalizer
2094
+ ) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>
2095
+ >(3, (self, key, finalizer) =>
2096
+ suspend(() => {
2097
+ switch (self.state._tag) {
2098
+ case "Exited": {
2099
+ return as(finalizer(self.state.exit), Option.none())
2100
+ }
2101
+ case "Running": {
2102
+ const fin = Option.fromNullable(self.state.finalizers.get(key))
2103
+ self.state.finalizers.set(key, finalizer)
2104
+ return succeed(fin)
2105
+ }
2106
+ }
2107
+ }))
2108
+
2109
+ /* @internal */
2110
+ export const releaseMapRemove = dual<
2111
+ (key: number) => (self: ReleaseMap) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>,
2112
+ (self: ReleaseMap, key: number) => Effect.Effect<never, never, Option.Option<Scope.Scope.Finalizer>>
2113
+ >(2, (self, key) =>
2114
+ sync(() => {
2115
+ if (self.state._tag === "Exited") {
2116
+ return Option.none()
2117
+ }
2118
+ const fin = Option.fromNullable(self.state.finalizers.get(key))
2119
+ self.state.finalizers.delete(key)
2120
+ return fin
2121
+ }))
2122
+
2123
+ /* @internal */
2124
+ export const releaseMapMake: Effect.Effect<never, never, ReleaseMap> = sync((): ReleaseMap => ({
2125
+ state: {
2126
+ _tag: "Running",
2127
+ nextKey: 0,
2128
+ finalizers: new Map(),
2129
+ update: identity
2130
+ }
2131
+ }))
2132
+
2133
+ // -----------------------------------------------------------------------------
2134
+ // Exit
2135
+ // -----------------------------------------------------------------------------
2136
+
2137
+ /** @internal */
2138
+ export const exitIsExit = (u: unknown): u is Exit.Exit<unknown, unknown> =>
2139
+ isEffect(u) && "_tag" in u && (u._tag === "Success" || u._tag === "Failure")
2140
+
2141
+ /** @internal */
2142
+ export const exitIsFailure = <E, A>(self: Exit.Exit<E, A>): self is Exit.Failure<E, A> => self._tag === "Failure"
2143
+
2144
+ /** @internal */
2145
+ export const exitIsSuccess = <E, A>(self: Exit.Exit<E, A>): self is Exit.Success<E, A> => self._tag === "Success"
2146
+
2147
+ /** @internal */
2148
+ export const exitIsInterrupted = <E, A>(self: Exit.Exit<E, A>): boolean => {
2149
+ switch (self._tag) {
2150
+ case OpCodes.OP_FAILURE: {
2151
+ return internalCause.isInterrupted(self.i0)
2152
+ }
2153
+ case OpCodes.OP_SUCCESS: {
2154
+ return false
2155
+ }
2156
+ }
2157
+ }
2158
+
2159
+ /** @internal */
2160
+ export const exitAs = dual<
2161
+ <A2>(value: A2) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E, A2>,
2162
+ <E, A, A2>(self: Exit.Exit<E, A>, value: A2) => Exit.Exit<E, A2>
2163
+ >(2, <E, A, A2>(self: Exit.Exit<E, A>, value: A2) => {
2164
+ switch (self._tag) {
2165
+ case OpCodes.OP_FAILURE: {
2166
+ return exitFailCause(self.i0)
2167
+ }
2168
+ case OpCodes.OP_SUCCESS: {
2169
+ return exitSucceed(value) as Exit.Exit<E, A2>
2170
+ }
2171
+ }
2172
+ })
2173
+
2174
+ /** @internal */
2175
+ export const exitAsUnit = <E, A>(self: Exit.Exit<E, A>): Exit.Exit<E, void> =>
2176
+ exitAs(self, void 0) as Exit.Exit<E, void>
2177
+
2178
+ /** @internal */
2179
+ export const exitCauseOption = <E, A>(self: Exit.Exit<E, A>): Option.Option<Cause.Cause<E>> => {
2180
+ switch (self._tag) {
2181
+ case OpCodes.OP_FAILURE: {
2182
+ return Option.some(self.i0)
2183
+ }
2184
+ case OpCodes.OP_SUCCESS: {
2185
+ return Option.none()
2186
+ }
2187
+ }
2188
+ }
2189
+
2190
+ /** @internal */
2191
+ export const exitCollectAll = <E, A>(
2192
+ exits: Iterable<Exit.Exit<E, A>>,
2193
+ options?: { readonly parallel?: boolean }
2194
+ ): Option.Option<Exit.Exit<E, Array<A>>> =>
2195
+ exitCollectAllInternal(exits, options?.parallel ? internalCause.parallel : internalCause.sequential)
2196
+
2197
+ /** @internal */
2198
+ export const exitDie = (defect: unknown): Exit.Exit<never, never> =>
2199
+ exitFailCause(internalCause.die(defect)) as Exit.Exit<never, never>
2200
+
2201
+ /** @internal */
2202
+ export const exitExists = dual<
2203
+ <A>(predicate: Predicate<A>) => <E>(self: Exit.Exit<E, A>) => boolean,
2204
+ <E, A>(self: Exit.Exit<E, A>, predicate: Predicate<A>) => boolean
2205
+ >(2, (self, predicate) => {
2206
+ switch (self._tag) {
2207
+ case OpCodes.OP_FAILURE: {
2208
+ return false
2209
+ }
2210
+ case OpCodes.OP_SUCCESS: {
2211
+ return predicate(self.i0)
2212
+ }
2213
+ }
2214
+ })
2215
+
2216
+ /** @internal */
2217
+ export const exitFail = <E>(error: E): Exit.Exit<E, never> =>
2218
+ exitFailCause(internalCause.fail(error)) as Exit.Exit<E, never>
2219
+
2220
+ /** @internal */
2221
+ export const exitFailCause = <E>(cause: Cause.Cause<E>): Exit.Exit<E, never> => {
2222
+ const effect = new EffectPrimitiveFailure(OpCodes.OP_FAILURE) as any
2223
+ effect.i0 = cause
2224
+ return effect
2225
+ }
2226
+
2227
+ /** @internal */
2228
+ export const exitFlatMap = dual<
2229
+ <A, E2, A2>(f: (a: A) => Exit.Exit<E2, A2>) => <E>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, A2>,
2230
+ <E, A, E2, A2>(self: Exit.Exit<E, A>, f: (a: A) => Exit.Exit<E2, A2>) => Exit.Exit<E | E2, A2>
2231
+ >(2, <E, A, E2, A2>(self: Exit.Exit<E, A>, f: (a: A) => Exit.Exit<E2, A2>) => {
2232
+ switch (self._tag) {
2233
+ case OpCodes.OP_FAILURE: {
2234
+ return exitFailCause(self.i0) as Exit.Exit<E | E2, A2>
2235
+ }
2236
+ case OpCodes.OP_SUCCESS: {
2237
+ return f(self.i0) as Exit.Exit<E | E2, A2>
2238
+ }
2239
+ }
2240
+ })
2241
+
2242
+ /** @internal */
2243
+ export const exitFlatMapEffect = dual<
2244
+ <E, A, R, E2, A2>(
2245
+ f: (a: A) => Effect.Effect<R, E2, Exit.Exit<E, A2>>
2246
+ ) => (self: Exit.Exit<E, A>) => Effect.Effect<R, E2, Exit.Exit<E, A2>>,
2247
+ <E, A, R, E2, A2>(
2248
+ self: Exit.Exit<E, A>,
2249
+ f: (a: A) => Effect.Effect<R, E2, Exit.Exit<E, A2>>
2250
+ ) => Effect.Effect<R, E2, Exit.Exit<E, A2>>
2251
+ >(2, (self, f) => {
2252
+ switch (self._tag) {
2253
+ case OpCodes.OP_FAILURE: {
2254
+ return succeed(exitFailCause(self.i0))
2255
+ }
2256
+ case OpCodes.OP_SUCCESS: {
2257
+ return f(self.i0)
2258
+ }
2259
+ }
2260
+ })
2261
+
2262
+ /** @internal */
2263
+ export const exitFlatten = <E, E1, A>(
2264
+ self: Exit.Exit<E, Exit.Exit<E1, A>>
2265
+ ): Exit.Exit<E | E1, A> => pipe(self, exitFlatMap(identity)) as Exit.Exit<E | E1, A>
2266
+
2267
+ /** @internal */
2268
+ export const exitForEachEffect = dual<
2269
+ <A, R, E2, B>(
2270
+ f: (a: A) => Effect.Effect<R, E2, B>
2271
+ ) => <E>(self: Exit.Exit<E, A>) => Effect.Effect<R, never, Exit.Exit<E | E2, B>>,
2272
+ <E, A, R, E2, B>(
2273
+ self: Exit.Exit<E, A>,
2274
+ f: (a: A) => Effect.Effect<R, E2, B>
2275
+ ) => Effect.Effect<R, never, Exit.Exit<E | E2, B>>
2276
+ >(2, (self, f) => {
2277
+ switch (self._tag) {
2278
+ case OpCodes.OP_FAILURE: {
2279
+ return succeed(exitFailCause(self.i0))
2280
+ }
2281
+ case OpCodes.OP_SUCCESS: {
2282
+ return exit(f(self.i0))
2283
+ }
2284
+ }
2285
+ })
2286
+
2287
+ /** @internal */
2288
+ export const exitFromEither = <E, A>(either: Either.Either<E, A>): Exit.Exit<E, A> => {
2289
+ switch (either._tag) {
2290
+ case "Left": {
2291
+ return exitFail(either.left) as Exit.Exit<E, A>
2292
+ }
2293
+ case "Right": {
2294
+ return exitSucceed(either.right) as Exit.Exit<E, A>
2295
+ }
2296
+ }
2297
+ }
2298
+
2299
+ /** @internal */
2300
+ export const exitFromOption = <A>(option: Option.Option<A>): Exit.Exit<void, A> => {
2301
+ switch (option._tag) {
2302
+ case "None": {
2303
+ return exitFail(void 0) as Exit.Exit<void, A>
2304
+ }
2305
+ case "Some": {
2306
+ return exitSucceed(option.value) as Exit.Exit<void, A>
2307
+ }
2308
+ }
2309
+ }
2310
+
2311
+ /** @internal */
2312
+ export const exitGetOrElse = dual<
2313
+ <E, A2>(orElse: (cause: Cause.Cause<E>) => A2) => <A1>(self: Exit.Exit<E, A1>) => A1 | A2,
2314
+ <E, A1, A2>(self: Exit.Exit<E, A1>, orElse: (cause: Cause.Cause<E>) => A2) => A1 | A2
2315
+ >(2, (self, orElse) => {
2316
+ switch (self._tag) {
2317
+ case OpCodes.OP_FAILURE: {
2318
+ return orElse(self.i0)
2319
+ }
2320
+ case OpCodes.OP_SUCCESS: {
2321
+ return self.i0
2322
+ }
2323
+ }
2324
+ })
2325
+
2326
+ /** @internal */
2327
+ export const exitInterrupt = (fiberId: FiberId.FiberId): Exit.Exit<never, never> =>
2328
+ exitFailCause(internalCause.interrupt(fiberId)) as Exit.Exit<never, never>
2329
+
2330
+ /** @internal */
2331
+ export const exitMap = dual<
2332
+ <A, B>(f: (a: A) => B) => <E>(self: Exit.Exit<E, A>) => Exit.Exit<E, B>,
2333
+ <E, A, B>(self: Exit.Exit<E, A>, f: (a: A) => B) => Exit.Exit<E, B>
2334
+ >(2, <E, A, B>(self: Exit.Exit<E, A>, f: (a: A) => B) => {
2335
+ switch (self._tag) {
2336
+ case OpCodes.OP_FAILURE: {
2337
+ return exitFailCause(self.i0) as Exit.Exit<E, B>
2338
+ }
2339
+ case OpCodes.OP_SUCCESS: {
2340
+ return exitSucceed(f(self.i0)) as Exit.Exit<E, B>
2341
+ }
2342
+ }
2343
+ })
2344
+
2345
+ /** @internal */
2346
+ export const exitMapBoth = dual<
2347
+ <E, A, E2, A2>(
2348
+ options: {
2349
+ readonly onFailure: (e: E) => E2
2350
+ readonly onSuccess: (a: A) => A2
2351
+ }
2352
+ ) => (self: Exit.Exit<E, A>) => Exit.Exit<E2, A2>,
2353
+ <E, A, E2, A2>(
2354
+ self: Exit.Exit<E, A>,
2355
+ options: {
2356
+ readonly onFailure: (e: E) => E2
2357
+ readonly onSuccess: (a: A) => A2
2358
+ }
2359
+ ) => Exit.Exit<E2, A2>
2360
+ >(2, (self, { onFailure, onSuccess }) => {
2361
+ switch (self._tag) {
2362
+ case OpCodes.OP_FAILURE: {
2363
+ return exitFailCause(pipe(self.i0, internalCause.map(onFailure)))
2364
+ }
2365
+ case OpCodes.OP_SUCCESS: {
2366
+ return exitSucceed(onSuccess(self.i0))
2367
+ }
2368
+ }
2369
+ })
2370
+
2371
+ /** @internal */
2372
+ export const exitMapError = dual<
2373
+ <E, E2>(f: (e: E) => E2) => <A>(self: Exit.Exit<E, A>) => Exit.Exit<E2, A>,
2374
+ <E, A, E2>(self: Exit.Exit<E, A>, f: (e: E) => E2) => Exit.Exit<E2, A>
2375
+ >(2, <E, A, E2>(self: Exit.Exit<E, A>, f: (e: E) => E2) => {
2376
+ switch (self._tag) {
2377
+ case OpCodes.OP_FAILURE: {
2378
+ return exitFailCause(pipe(self.i0, internalCause.map(f))) as Exit.Exit<E2, A>
2379
+ }
2380
+ case OpCodes.OP_SUCCESS: {
2381
+ return exitSucceed(self.i0) as Exit.Exit<E2, A>
2382
+ }
2383
+ }
2384
+ })
2385
+
2386
+ /** @internal */
2387
+ export const exitMapErrorCause = dual<
2388
+ <E, E2>(f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => <A>(self: Exit.Exit<E, A>) => Exit.Exit<E2, A>,
2389
+ <E, A, E2>(self: Exit.Exit<E, A>, f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => Exit.Exit<E2, A>
2390
+ >(2, <E, A, E2>(self: Exit.Exit<E, A>, f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => {
2391
+ switch (self._tag) {
2392
+ case OpCodes.OP_FAILURE: {
2393
+ return exitFailCause(f(self.i0)) as Exit.Exit<E2, A>
2394
+ }
2395
+ case OpCodes.OP_SUCCESS: {
2396
+ return exitSucceed(self.i0) as Exit.Exit<E2, A>
2397
+ }
2398
+ }
2399
+ })
2400
+
2401
+ /** @internal */
2402
+ export const exitMatch = dual<
2403
+ <E, A, Z1, Z2>(options: {
2404
+ readonly onFailure: (cause: Cause.Cause<E>) => Z1
2405
+ readonly onSuccess: (a: A) => Z2
2406
+ }) => (self: Exit.Exit<E, A>) => Z1 | Z2,
2407
+ <E, A, Z1, Z2>(self: Exit.Exit<E, A>, options: {
2408
+ readonly onFailure: (cause: Cause.Cause<E>) => Z1
2409
+ readonly onSuccess: (a: A) => Z2
2410
+ }) => Z1 | Z2
2411
+ >(2, (self, { onFailure, onSuccess }) => {
2412
+ switch (self._tag) {
2413
+ case OpCodes.OP_FAILURE: {
2414
+ return onFailure(self.i0)
2415
+ }
2416
+ case OpCodes.OP_SUCCESS: {
2417
+ return onSuccess(self.i0)
2418
+ }
2419
+ }
2420
+ })
2421
+
2422
+ /** @internal */
2423
+ export const exitMatchEffect = dual<
2424
+ <E, A, R, E2, A2, R2, E3, A3>(
2425
+ options: {
2426
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<R, E2, A2>
2427
+ readonly onSuccess: (a: A) => Effect.Effect<R2, E3, A3>
2428
+ }
2429
+ ) => (self: Exit.Exit<E, A>) => Effect.Effect<R | R2, E2 | E3, A2 | A3>,
2430
+ <E, A, R, E2, A2, R2, E3, A3>(
2431
+ self: Exit.Exit<E, A>,
2432
+ options: {
2433
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<R, E2, A2>
2434
+ readonly onSuccess: (a: A) => Effect.Effect<R2, E3, A3>
2435
+ }
2436
+ ) => Effect.Effect<R | R2, E2 | E3, A2 | A3>
2437
+ >(2, (self, { onFailure, onSuccess }) => {
2438
+ switch (self._tag) {
2439
+ case OpCodes.OP_FAILURE: {
2440
+ return onFailure(self.i0)
2441
+ }
2442
+ case OpCodes.OP_SUCCESS: {
2443
+ return onSuccess(self.i0)
2444
+ }
2445
+ }
2446
+ })
2447
+
2448
+ /** @internal */
2449
+ export const exitSucceed = <A>(value: A): Exit.Exit<never, A> => {
2450
+ const effect = new EffectPrimitiveSuccess(OpCodes.OP_SUCCESS) as any
2451
+ effect.i0 = value
2452
+ return effect
2453
+ }
2454
+
2455
+ /** @internal */
2456
+ export const exitUnit: Exit.Exit<never, void> = exitSucceed(void 0)
2457
+
2458
+ /** @internal */
2459
+ export const exitZip = dual<
2460
+ <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, readonly [A, A2]>,
2461
+ <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, readonly [A, A2]>
2462
+ >(2, (self, that) =>
2463
+ exitZipWith(self, that, {
2464
+ onSuccess: (a, a2) => [a, a2] as const,
2465
+ onFailure: internalCause.sequential
2466
+ }))
2467
+
2468
+ /** @internal */
2469
+ export const exitZipLeft = dual<
2470
+ <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, A>,
2471
+ <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, A>
2472
+ >(2, (self, that) =>
2473
+ exitZipWith(self, that, {
2474
+ onSuccess: (a, _) => a,
2475
+ onFailure: internalCause.sequential
2476
+ }))
2477
+
2478
+ /** @internal */
2479
+ export const exitZipRight = dual<
2480
+ <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, A2>,
2481
+ <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, A2>
2482
+ >(2, (self, that) =>
2483
+ exitZipWith(self, that, {
2484
+ onSuccess: (_, a2) => a2,
2485
+ onFailure: internalCause.sequential
2486
+ }))
2487
+
2488
+ /** @internal */
2489
+ export const exitZipPar = dual<
2490
+ <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, readonly [A, A2]>,
2491
+ <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, readonly [A, A2]>
2492
+ >(2, (self, that) =>
2493
+ exitZipWith(self, that, {
2494
+ onSuccess: (a, a2) => [a, a2] as const,
2495
+ onFailure: internalCause.parallel
2496
+ }))
2497
+
2498
+ /** @internal */
2499
+ export const exitZipParLeft = dual<
2500
+ <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, A>,
2501
+ <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, A>
2502
+ >(2, (self, that) =>
2503
+ exitZipWith(self, that, {
2504
+ onSuccess: (a, _) => a,
2505
+ onFailure: internalCause.parallel
2506
+ }))
2507
+
2508
+ /** @internal */
2509
+ export const exitZipParRight = dual<
2510
+ <E2, A2>(that: Exit.Exit<E2, A2>) => <E, A>(self: Exit.Exit<E, A>) => Exit.Exit<E | E2, A2>,
2511
+ <E, A, E2, A2>(self: Exit.Exit<E, A>, that: Exit.Exit<E2, A2>) => Exit.Exit<E | E2, A2>
2512
+ >(2, (self, that) =>
2513
+ exitZipWith(self, that, {
2514
+ onSuccess: (_, a2) => a2,
2515
+ onFailure: internalCause.parallel
2516
+ }))
2517
+
2518
+ /** @internal */
2519
+ export const exitZipWith = dual<
2520
+ <E, E2, A, B, C>(
2521
+ that: Exit.Exit<E2, B>,
2522
+ options: {
2523
+ readonly onSuccess: (a: A, b: B) => C
2524
+ readonly onFailure: (cause: Cause.Cause<E>, cause2: Cause.Cause<E2>) => Cause.Cause<E | E2>
2525
+ }
2526
+ ) => (self: Exit.Exit<E, A>) => Exit.Exit<E | E2, C>,
2527
+ <E, E2, A, B, C>(
2528
+ self: Exit.Exit<E, A>,
2529
+ that: Exit.Exit<E2, B>,
2530
+ options: {
2531
+ readonly onSuccess: (a: A, b: B) => C
2532
+ readonly onFailure: (cause: Cause.Cause<E>, cause2: Cause.Cause<E2>) => Cause.Cause<E | E2>
2533
+ }
2534
+ ) => Exit.Exit<E | E2, C>
2535
+ >(3, (
2536
+ self,
2537
+ that,
2538
+ { onFailure, onSuccess }
2539
+ ) => {
2540
+ switch (self._tag) {
2541
+ case OpCodes.OP_FAILURE: {
2542
+ switch (that._tag) {
2543
+ case OpCodes.OP_SUCCESS: {
2544
+ return exitFailCause(self.i0)
2545
+ }
2546
+ case OpCodes.OP_FAILURE: {
2547
+ return exitFailCause(onFailure(self.i0, that.i0))
2548
+ }
2549
+ }
2550
+ }
2551
+ case OpCodes.OP_SUCCESS: {
2552
+ switch (that._tag) {
2553
+ case OpCodes.OP_SUCCESS: {
2554
+ return exitSucceed(onSuccess(self.i0, that.i0))
2555
+ }
2556
+ case OpCodes.OP_FAILURE: {
2557
+ return exitFailCause(that.i0)
2558
+ }
2559
+ }
2560
+ }
2561
+ }
2562
+ })
2563
+
2564
+ const exitCollectAllInternal = <E, A>(
2565
+ exits: Iterable<Exit.Exit<E, A>>,
2566
+ combineCauses: (causeA: Cause.Cause<E>, causeB: Cause.Cause<E>) => Cause.Cause<E>
2567
+ ): Option.Option<Exit.Exit<E, Array<A>>> => {
2568
+ const list = Chunk.fromIterable(exits)
2569
+ if (!Chunk.isNonEmpty(list)) {
2570
+ return Option.none()
2571
+ }
2572
+ return pipe(
2573
+ Chunk.tailNonEmpty(list),
2574
+ ReadonlyArray.reduce(
2575
+ pipe(Chunk.headNonEmpty(list), exitMap<A, Chunk.Chunk<A>>(Chunk.of)),
2576
+ (accumulator, current) =>
2577
+ pipe(
2578
+ accumulator,
2579
+ exitZipWith(current, {
2580
+ onSuccess: (list, value) => pipe(list, Chunk.prepend(value)),
2581
+ onFailure: combineCauses
2582
+ })
2583
+ )
2584
+ ),
2585
+ exitMap(Chunk.reverse),
2586
+ exitMap((chunk) => Array.from(chunk)),
2587
+ Option.some
2588
+ )
2589
+ }
2590
+
2591
+ // -----------------------------------------------------------------------------
2592
+ // Deferred
2593
+ // -----------------------------------------------------------------------------
2594
+
2595
+ /** @internal */
2596
+ export const deferredUnsafeMake = <E, A>(fiberId: FiberId.FiberId): Deferred.Deferred<E, A> => ({
2597
+ [deferred.DeferredTypeId]: deferred.deferredVariance,
2598
+ state: MutableRef.make(deferred.pending([])),
2599
+ blockingOn: fiberId,
2600
+ pipe() {
2601
+ return pipeArguments(this, arguments)
2602
+ }
2603
+ })
2604
+
2605
+ /* @internal */
2606
+ export const deferredMake = <E, A>(): Effect.Effect<never, never, Deferred.Deferred<E, A>> =>
2607
+ flatMap(fiberId, (id) => deferredMakeAs<E, A>(id))
2608
+
2609
+ /* @internal */
2610
+ export const deferredMakeAs = <E, A>(fiberId: FiberId.FiberId): Effect.Effect<never, never, Deferred.Deferred<E, A>> =>
2611
+ sync(() => deferredUnsafeMake<E, A>(fiberId))
2612
+
2613
+ /* @internal */
2614
+ export const deferredAwait = <E, A>(self: Deferred.Deferred<E, A>): Effect.Effect<never, E, A> =>
2615
+ asyncEither<never, E, A>((k) => {
2616
+ const state = MutableRef.get(self.state)
2617
+ switch (state._tag) {
2618
+ case DeferredOpCodes.OP_STATE_DONE: {
2619
+ return Either.right(state.effect)
2620
+ }
2621
+ case DeferredOpCodes.OP_STATE_PENDING: {
2622
+ pipe(
2623
+ self.state,
2624
+ MutableRef.set(deferred.pending([k, ...state.joiners]))
2625
+ )
2626
+ return Either.left(deferredInterruptJoiner(self, k))
2627
+ }
2628
+ }
2629
+ }, self.blockingOn)
2630
+
2631
+ /* @internal */
2632
+ export const deferredComplete = dual<
2633
+ <E, A>(effect: Effect.Effect<never, E, A>) => (self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2634
+ <E, A>(self: Deferred.Deferred<E, A>, effect: Effect.Effect<never, E, A>) => Effect.Effect<never, never, boolean>
2635
+ >(2, (self, effect) => intoDeferred(effect, self))
2636
+
2637
+ /* @internal */
2638
+ export const deferredCompleteWith = dual<
2639
+ <E, A>(effect: Effect.Effect<never, E, A>) => (self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2640
+ <E, A>(self: Deferred.Deferred<E, A>, effect: Effect.Effect<never, E, A>) => Effect.Effect<never, never, boolean>
2641
+ >(2, (self, effect) =>
2642
+ sync(() => {
2643
+ const state = MutableRef.get(self.state)
2644
+ switch (state._tag) {
2645
+ case DeferredOpCodes.OP_STATE_DONE: {
2646
+ return false
2647
+ }
2648
+ case DeferredOpCodes.OP_STATE_PENDING: {
2649
+ pipe(self.state, MutableRef.set(deferred.done(effect)))
2650
+ for (let i = 0; i < state.joiners.length; i++) {
2651
+ state.joiners[i](effect)
2652
+ }
2653
+ return true
2654
+ }
2655
+ }
2656
+ }))
2657
+
2658
+ /* @internal */
2659
+ export const deferredDone = dual<
2660
+ <E, A>(exit: Exit.Exit<E, A>) => (self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2661
+ <E, A>(self: Deferred.Deferred<E, A>, exit: Exit.Exit<E, A>) => Effect.Effect<never, never, boolean>
2662
+ >(2, (self, exit) => deferredCompleteWith(self, exit))
2663
+
2664
+ /* @internal */
2665
+ export const deferredFail = dual<
2666
+ <E>(error: E) => <A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2667
+ <E, A>(self: Deferred.Deferred<E, A>, error: E) => Effect.Effect<never, never, boolean>
2668
+ >(2, (self, error) => deferredCompleteWith(self, fail(error)))
2669
+
2670
+ /* @internal */
2671
+ export const deferredFailSync = dual<
2672
+ <E>(evaluate: LazyArg<E>) => <A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2673
+ <E, A>(self: Deferred.Deferred<E, A>, evaluate: LazyArg<E>) => Effect.Effect<never, never, boolean>
2674
+ >(2, (self, evaluate) => deferredCompleteWith(self, failSync(evaluate)))
2675
+
2676
+ /* @internal */
2677
+ export const deferredFailCause = dual<
2678
+ <E>(cause: Cause.Cause<E>) => <A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2679
+ <E, A>(self: Deferred.Deferred<E, A>, cause: Cause.Cause<E>) => Effect.Effect<never, never, boolean>
2680
+ >(2, (self, cause) => deferredCompleteWith(self, failCause(cause)))
2681
+
2682
+ /* @internal */
2683
+ export const deferredFailCauseSync = dual<
2684
+ <E>(evaluate: LazyArg<Cause.Cause<E>>) => <A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2685
+ <E, A>(self: Deferred.Deferred<E, A>, evaluate: LazyArg<Cause.Cause<E>>) => Effect.Effect<never, never, boolean>
2686
+ >(2, (self, evaluate) => deferredCompleteWith(self, failCauseSync(evaluate)))
2687
+
2688
+ /* @internal */
2689
+ export const deferredDie = dual<
2690
+ (defect: unknown) => <E, A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2691
+ <E, A>(self: Deferred.Deferred<E, A>, defect: unknown) => Effect.Effect<never, never, boolean>
2692
+ >(2, (self, defect) => deferredCompleteWith(self, die(defect)))
2693
+
2694
+ /* @internal */
2695
+ export const deferredDieSync = dual<
2696
+ (evaluate: LazyArg<unknown>) => <E, A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2697
+ <E, A>(self: Deferred.Deferred<E, A>, evaluate: LazyArg<unknown>) => Effect.Effect<never, never, boolean>
2698
+ >(2, (self, evaluate) => deferredCompleteWith(self, dieSync(evaluate)))
2699
+
2700
+ /* @internal */
2701
+ export const deferredInterrupt = <E, A>(self: Deferred.Deferred<E, A>): Effect.Effect<never, never, boolean> =>
2702
+ flatMap(fiberId, (fiberId) => deferredCompleteWith(self, interruptWith(fiberId)))
2703
+
2704
+ /* @internal */
2705
+ export const deferredInterruptWith = dual<
2706
+ (fiberId: FiberId.FiberId) => <E, A>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2707
+ <E, A>(self: Deferred.Deferred<E, A>, fiberId: FiberId.FiberId) => Effect.Effect<never, never, boolean>
2708
+ >(2, (self, fiberId) => deferredCompleteWith(self, interruptWith(fiberId)))
2709
+
2710
+ /* @internal */
2711
+ export const deferredIsDone = <E, A>(self: Deferred.Deferred<E, A>): Effect.Effect<never, never, boolean> =>
2712
+ sync(() => MutableRef.get(self.state)._tag === DeferredOpCodes.OP_STATE_DONE)
2713
+
2714
+ /* @internal */
2715
+ export const deferredPoll = <E, A>(
2716
+ self: Deferred.Deferred<E, A>
2717
+ ): Effect.Effect<never, never, Option.Option<Effect.Effect<never, E, A>>> =>
2718
+ sync(() => {
2719
+ const state = MutableRef.get(self.state)
2720
+ switch (state._tag) {
2721
+ case DeferredOpCodes.OP_STATE_DONE: {
2722
+ return Option.some(state.effect)
2723
+ }
2724
+ case DeferredOpCodes.OP_STATE_PENDING: {
2725
+ return Option.none()
2726
+ }
2727
+ }
2728
+ })
2729
+
2730
+ /* @internal */
2731
+ export const deferredSucceed = dual<
2732
+ <A>(value: A) => <E>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2733
+ <E, A>(self: Deferred.Deferred<E, A>, value: A) => Effect.Effect<never, never, boolean>
2734
+ >(2, (self, value) => deferredCompleteWith(self, succeed(value)))
2735
+
2736
+ /* @internal */
2737
+ export const deferredSync = dual<
2738
+ <A>(evaluate: LazyArg<A>) => <E>(self: Deferred.Deferred<E, A>) => Effect.Effect<never, never, boolean>,
2739
+ <E, A>(self: Deferred.Deferred<E, A>, evaluate: LazyArg<A>) => Effect.Effect<never, never, boolean>
2740
+ >(2, (self, evaluate) => deferredCompleteWith(self, sync(evaluate)))
2741
+
2742
+ /** @internal */
2743
+ export const deferredUnsafeDone = <E, A>(self: Deferred.Deferred<E, A>, effect: Effect.Effect<never, E, A>): void => {
2744
+ const state = MutableRef.get(self.state)
2745
+ if (state._tag === DeferredOpCodes.OP_STATE_PENDING) {
2746
+ pipe(self.state, MutableRef.set(deferred.done(effect)))
2747
+ for (let i = state.joiners.length - 1; i >= 0; i--) {
2748
+ state.joiners[i](effect)
2749
+ }
2750
+ }
2751
+ }
2752
+
2753
+ const deferredInterruptJoiner = <E, A>(
2754
+ self: Deferred.Deferred<E, A>,
2755
+ joiner: (effect: Effect.Effect<never, E, A>) => void
2756
+ ): Effect.Effect<never, never, void> =>
2757
+ sync(() => {
2758
+ const state = MutableRef.get(self.state)
2759
+ if (state._tag === DeferredOpCodes.OP_STATE_PENDING) {
2760
+ pipe(
2761
+ self.state,
2762
+ MutableRef.set(deferred.pending(state.joiners.filter((j) => j !== joiner)))
2763
+ )
2764
+ }
2765
+ })