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
package/src/Option.ts ADDED
@@ -0,0 +1,1307 @@
1
+ /**
2
+ * @since 2.0.0
3
+ */
4
+ import type * as Data from "./Data"
5
+ import type { Either } from "./Either"
6
+ import * as Equal from "./Equal"
7
+ import * as Equivalence from "./Equivalence"
8
+ import type { LazyArg } from "./Function"
9
+ import { constNull, constUndefined, dual, identity } from "./Function"
10
+ import type { TypeLambda } from "./HKT"
11
+ import type { Inspectable } from "./Inspectable"
12
+ import * as either from "./internal/Either"
13
+ import * as option from "./internal/Option"
14
+ import * as N from "./Number"
15
+ import type { Order } from "./Order"
16
+ import * as order from "./Order"
17
+ import type { Pipeable } from "./Pipeable"
18
+ import type { Predicate, Refinement } from "./Predicate"
19
+ import type * as Unify from "./Unify"
20
+ import * as Gen from "./Utils"
21
+
22
+ /**
23
+ * @category models
24
+ * @since 2.0.0
25
+ */
26
+ export type Option<A> = None<A> | Some<A>
27
+
28
+ /**
29
+ * @category symbols
30
+ * @since 2.0.0
31
+ */
32
+ export const TypeId = Symbol.for("effect/Option")
33
+
34
+ /**
35
+ * @category symbols
36
+ * @since 2.0.0
37
+ */
38
+ export type TypeId = typeof TypeId
39
+
40
+ /**
41
+ * @category models
42
+ * @since 2.0.0
43
+ */
44
+ export interface None<A> extends Data.Case, Pipeable, Inspectable {
45
+ readonly _tag: "None"
46
+ readonly _op: "None"
47
+ readonly [TypeId]: {
48
+ readonly _A: (_: never) => A
49
+ }
50
+ [Unify.typeSymbol]?: unknown
51
+ [Unify.unifySymbol]?: OptionUnify<this>
52
+ [Unify.blacklistSymbol]?: OptionUnifyBlacklist
53
+ }
54
+
55
+ /**
56
+ * @category models
57
+ * @since 2.0.0
58
+ */
59
+ export interface Some<A> extends Data.Case, Pipeable, Inspectable {
60
+ readonly _tag: "Some"
61
+ readonly _op: "Some"
62
+ readonly value: A
63
+ readonly [TypeId]: {
64
+ readonly _A: (_: never) => A
65
+ }
66
+ [Unify.typeSymbol]?: unknown
67
+ [Unify.unifySymbol]?: OptionUnify<this>
68
+ [Unify.blacklistSymbol]?: OptionUnifyBlacklist
69
+ }
70
+
71
+ /**
72
+ * @category models
73
+ * @since 2.0.0
74
+ */
75
+ export interface OptionUnify<A extends { [Unify.typeSymbol]?: any }> {
76
+ Option?: () => A[Unify.typeSymbol] extends Option<infer A0> | infer _ ? Option<A0> : never
77
+ }
78
+
79
+ /**
80
+ * @category models
81
+ * @since 2.0.0
82
+ */
83
+ export interface OptionUnifyBlacklist {}
84
+
85
+ /**
86
+ * @category type lambdas
87
+ * @since 2.0.0
88
+ */
89
+ export interface OptionTypeLambda extends TypeLambda {
90
+ readonly type: Option<this["Target"]>
91
+ }
92
+
93
+ /**
94
+ * Creates a new `Option` that represents the absence of a value.
95
+ *
96
+ * @category constructors
97
+ * @since 2.0.0
98
+ */
99
+ export const none = <A = never>(): Option<A> => option.none
100
+
101
+ /**
102
+ * Creates a new `Option` that wraps the given value.
103
+ *
104
+ * @param value - The value to wrap.
105
+ *
106
+ * @category constructors
107
+ * @since 2.0.0
108
+ */
109
+ export const some: <A>(value: A) => Option<A> = option.some
110
+
111
+ /**
112
+ * Tests if a value is a `Option`.
113
+ *
114
+ * @param input - The value to check.
115
+ *
116
+ * @example
117
+ * import { some, none, isOption } from 'effect/Option'
118
+ *
119
+ * assert.deepStrictEqual(isOption(some(1)), true)
120
+ * assert.deepStrictEqual(isOption(none()), true)
121
+ * assert.deepStrictEqual(isOption({}), false)
122
+ *
123
+ * @category guards
124
+ * @since 2.0.0
125
+ */
126
+ export const isOption: (input: unknown) => input is Option<unknown> = option.isOption
127
+
128
+ /**
129
+ * Determine if a `Option` is a `None`.
130
+ *
131
+ * @param self - The `Option` to check.
132
+ *
133
+ * @example
134
+ * import { some, none, isNone } from 'effect/Option'
135
+ *
136
+ * assert.deepStrictEqual(isNone(some(1)), false)
137
+ * assert.deepStrictEqual(isNone(none()), true)
138
+ *
139
+ * @category guards
140
+ * @since 2.0.0
141
+ */
142
+ export const isNone: <A>(self: Option<A>) => self is None<A> = option.isNone
143
+
144
+ /**
145
+ * Determine if a `Option` is a `Some`.
146
+ *
147
+ * @param self - The `Option` to check.
148
+ *
149
+ * @example
150
+ * import { some, none, isSome } from 'effect/Option'
151
+ *
152
+ * assert.deepStrictEqual(isSome(some(1)), true)
153
+ * assert.deepStrictEqual(isSome(none()), false)
154
+ *
155
+ * @category guards
156
+ * @since 2.0.0
157
+ */
158
+ export const isSome: <A>(self: Option<A>) => self is Some<A> = option.isSome
159
+
160
+ /**
161
+ * Matches the given `Option` and returns either the provided `onNone` value or the result of the provided `onSome`
162
+ * function when passed the `Option`'s value.
163
+ *
164
+ * @param self - The `Option` to match
165
+ * @param onNone - The value to be returned if the `Option` is `None`
166
+ * @param onSome - The function to be called if the `Option` is `Some`, it will be passed the `Option`'s value and its result will be returned
167
+ *
168
+ * @example
169
+ * import { some, none, match } from 'effect/Option'
170
+ * import { pipe } from "effect/Function"
171
+ *
172
+ * assert.deepStrictEqual(
173
+ * pipe(some(1), match({ onNone: () => 'a none', onSome: (a) => `a some containing ${a}` })),
174
+ * 'a some containing 1'
175
+ * )
176
+ *
177
+ * assert.deepStrictEqual(
178
+ * pipe(none(), match({ onNone: () => 'a none', onSome: (a) => `a some containing ${a}` })),
179
+ * 'a none'
180
+ * )
181
+ *
182
+ * @category pattern matching
183
+ * @since 2.0.0
184
+ */
185
+ export const match: {
186
+ <B, A, C = B>(options: {
187
+ readonly onNone: LazyArg<B>
188
+ readonly onSome: (a: A) => C
189
+ }): (self: Option<A>) => B | C
190
+ <A, B, C = B>(self: Option<A>, options: {
191
+ readonly onNone: LazyArg<B>
192
+ readonly onSome: (a: A) => C
193
+ }): B | C
194
+ } = dual(
195
+ 2,
196
+ <A, B, C = B>(self: Option<A>, { onNone, onSome }: {
197
+ readonly onNone: LazyArg<B>
198
+ readonly onSome: (a: A) => C
199
+ }): B | C => isNone(self) ? onNone() : onSome(self.value)
200
+ )
201
+
202
+ /**
203
+ * Returns a type guard from a `Option` returning function.
204
+ * This function ensures that a type guard definition is type-safe.
205
+ *
206
+ * @example
207
+ * import * as O from "effect/Option"
208
+ *
209
+ * const parsePositive = (n: number): O.Option<number> =>
210
+ * n > 0 ? O.some(n) : O.none()
211
+ *
212
+ * const isPositive = O.toRefinement(parsePositive)
213
+ *
214
+ * assert.deepStrictEqual(isPositive(1), true)
215
+ * assert.deepStrictEqual(isPositive(-1), false)
216
+ *
217
+ * @category conversions
218
+ * @since 2.0.0
219
+ */
220
+ export const toRefinement = <A, B extends A>(f: (a: A) => Option<B>): (a: A) => a is B => (a: A): a is B => isSome(f(a))
221
+
222
+ /**
223
+ * Converts an `Iterable` of values into an `Option`. Returns the first value of the `Iterable` wrapped in a `Some`
224
+ * if the `Iterable` is not empty, otherwise returns `None`.
225
+ *
226
+ * @param collection - The `Iterable` to be converted to an `Option`.
227
+ *
228
+ * @example
229
+ * import { fromIterable, some, none } from 'effect/Option'
230
+ *
231
+ * assert.deepStrictEqual(fromIterable([1, 2, 3]), some(1))
232
+ * assert.deepStrictEqual(fromIterable([]), none())
233
+ *
234
+ * @category conversions
235
+ * @since 2.0.0
236
+ */
237
+ export const fromIterable = <A>(collection: Iterable<A>): Option<A> => {
238
+ for (const a of collection) {
239
+ return some(a)
240
+ }
241
+ return none()
242
+ }
243
+
244
+ /**
245
+ * Converts a `Either` to an `Option` discarding the error.
246
+ *
247
+ * Alias of {@link fromEither}.
248
+ *
249
+ * @example
250
+ * import * as O from "effect/Option"
251
+ * import * as E from "effect/Either"
252
+ *
253
+ * assert.deepStrictEqual(O.getRight(E.right('ok')), O.some('ok'))
254
+ * assert.deepStrictEqual(O.getRight(E.left('err')), O.none())
255
+ *
256
+ * @category conversions
257
+ * @since 2.0.0
258
+ */
259
+ export const getRight: <E, A>(self: Either<E, A>) => Option<A> = either.getRight
260
+
261
+ /**
262
+ * Converts a `Either` to an `Option` discarding the value.
263
+ *
264
+ * @example
265
+ * import * as O from "effect/Option"
266
+ * import * as E from "effect/Either"
267
+ *
268
+ * assert.deepStrictEqual(O.getLeft(E.right("ok")), O.none())
269
+ * assert.deepStrictEqual(O.getLeft(E.left("a")), O.some("a"))
270
+ *
271
+ * @category conversions
272
+ * @since 2.0.0
273
+ */
274
+ export const getLeft: <E, A>(self: Either<E, A>) => Option<E> = either.getLeft
275
+
276
+ /**
277
+ * Returns the value of the `Option` if it is `Some`, otherwise returns `onNone`
278
+ *
279
+ * @param self - The `Option` to get the value of.
280
+ * @param onNone - Function that returns the default value to return if the `Option` is `None`.
281
+ *
282
+ * @example
283
+ * import { some, none, getOrElse } from 'effect/Option'
284
+ * import { pipe } from "effect/Function"
285
+ *
286
+ * assert.deepStrictEqual(pipe(some(1), getOrElse(() => 0)), 1)
287
+ * assert.deepStrictEqual(pipe(none(), getOrElse(() => 0)), 0)
288
+ *
289
+ * @category getters
290
+ * @since 2.0.0
291
+ */
292
+ export const getOrElse: {
293
+ <B>(onNone: LazyArg<B>): <A>(self: Option<A>) => B | A
294
+ <A, B>(self: Option<A>, onNone: LazyArg<B>): A | B
295
+ } = dual(
296
+ 2,
297
+ <A, B>(self: Option<A>, onNone: LazyArg<B>): A | B => isNone(self) ? onNone() : self.value
298
+ )
299
+
300
+ /**
301
+ * Returns the provided `Option` `that` if `self` is `None`, otherwise returns `self`.
302
+ *
303
+ * @param self - The first `Option` to be checked.
304
+ * @param that - The `Option` to return if `self` is `None`.
305
+ *
306
+ * @example
307
+ * import * as O from "effect/Option"
308
+ * import { pipe } from "effect/Function"
309
+ *
310
+ * assert.deepStrictEqual(
311
+ * pipe(
312
+ * O.none(),
313
+ * O.orElse(() => O.none())
314
+ * ),
315
+ * O.none()
316
+ * )
317
+ * assert.deepStrictEqual(
318
+ * pipe(
319
+ * O.some('a'),
320
+ * O.orElse(() => O.none())
321
+ * ),
322
+ * O.some('a')
323
+ * )
324
+ * assert.deepStrictEqual(
325
+ * pipe(
326
+ * O.none(),
327
+ * O.orElse(() => O.some('b'))
328
+ * ),
329
+ * O.some('b')
330
+ * )
331
+ * assert.deepStrictEqual(
332
+ * pipe(
333
+ * O.some('a'),
334
+ * O.orElse(() => O.some('b'))
335
+ * ),
336
+ * O.some('a')
337
+ * )
338
+ *
339
+ * @category error handling
340
+ * @since 2.0.0
341
+ */
342
+ export const orElse: {
343
+ <B>(that: LazyArg<Option<B>>): <A>(self: Option<A>) => Option<B | A>
344
+ <A, B>(self: Option<A>, that: LazyArg<Option<B>>): Option<A | B>
345
+ } = dual(
346
+ 2,
347
+ <A, B>(self: Option<A>, that: LazyArg<Option<B>>): Option<A | B> => isNone(self) ? that() : self
348
+ )
349
+
350
+ /**
351
+ * Similar to `orElse`, but instead of returning a simple union, it returns an `Either` object,
352
+ * which contains information about which of the two `Option`s has been chosen.
353
+ *
354
+ * This is useful when it's important to know whether the value was retrieved from the first `Option` or the second option.
355
+ *
356
+ * @param self - The first `Option` to be checked.
357
+ * @param that - The second `Option` to be considered if the first `Option` is `None`.
358
+ *
359
+ * @category error handling
360
+ * @since 2.0.0
361
+ */
362
+ export const orElseEither: {
363
+ <B>(that: LazyArg<Option<B>>): <A>(self: Option<A>) => Option<Either<A, B>>
364
+ <A, B>(self: Option<A>, that: LazyArg<Option<B>>): Option<Either<A, B>>
365
+ } = dual(
366
+ 2,
367
+ <A, B>(self: Option<A>, that: LazyArg<Option<B>>): Option<Either<A, B>> =>
368
+ isNone(self) ? map(that(), either.right) : map(self, either.left)
369
+ )
370
+
371
+ /**
372
+ * Given an `Iterable` collection of `Option`s, returns the first `Some` found in the collection.
373
+ *
374
+ * @param collection - An iterable collection of `Option` to be searched.
375
+ *
376
+ * @example
377
+ * import * as O from "effect/Option"
378
+ *
379
+ * assert.deepStrictEqual(O.firstSomeOf([O.none(), O.some(1), O.some(2)]), O.some(1))
380
+ *
381
+ * @category error handling
382
+ * @since 2.0.0
383
+ */
384
+ export const firstSomeOf = <A>(collection: Iterable<Option<A>>): Option<A> => {
385
+ let out: Option<A> = none()
386
+ for (out of collection) {
387
+ if (isSome(out)) {
388
+ return out
389
+ }
390
+ }
391
+ return out
392
+ }
393
+
394
+ /**
395
+ * Constructs a new `Option` from a nullable type. If the value is `null` or `undefined`, returns `None`, otherwise
396
+ * returns the value wrapped in a `Some`.
397
+ *
398
+ * @param nullableValue - The nullable value to be converted to an `Option`.
399
+ *
400
+ * @example
401
+ * import * as O from "effect/Option"
402
+ *
403
+ * assert.deepStrictEqual(O.fromNullable(undefined), O.none())
404
+ * assert.deepStrictEqual(O.fromNullable(null), O.none())
405
+ * assert.deepStrictEqual(O.fromNullable(1), O.some(1))
406
+ *
407
+ * @category conversions
408
+ * @since 2.0.0
409
+ */
410
+ export const fromNullable = <A>(
411
+ nullableValue: A
412
+ ): Option<
413
+ NonNullable<A>
414
+ > => (nullableValue == null ? none() : some(nullableValue as NonNullable<A>))
415
+
416
+ /**
417
+ * This API is useful for lifting a function that returns `null` or `undefined` into the `Option` context.
418
+ *
419
+ * @example
420
+ * import * as O from "effect/Option"
421
+ *
422
+ * const parse = (s: string): number | undefined => {
423
+ * const n = parseFloat(s)
424
+ * return isNaN(n) ? undefined : n
425
+ * }
426
+ *
427
+ * const parseOption = O.liftNullable(parse)
428
+ *
429
+ * assert.deepStrictEqual(parseOption('1'), O.some(1))
430
+ * assert.deepStrictEqual(parseOption('not a number'), O.none())
431
+ *
432
+ * @category conversions
433
+ * @since 2.0.0
434
+ */
435
+ export const liftNullable = <A extends ReadonlyArray<unknown>, B>(
436
+ f: (...a: A) => B | null | undefined
437
+ ): (...a: A) => Option<NonNullable<B>> =>
438
+ (...a) => fromNullable(f(...a))
439
+
440
+ /**
441
+ * Returns the value of the `Option` if it is a `Some`, otherwise returns `null`.
442
+ *
443
+ * @param self - The `Option` to extract the value from.
444
+ *
445
+ * @example
446
+ * import * as O from "effect/Option"
447
+ *
448
+ * assert.deepStrictEqual(O.getOrNull(O.some(1)), 1)
449
+ * assert.deepStrictEqual(O.getOrNull(O.none()), null)
450
+ *
451
+ * @category getters
452
+ * @since 2.0.0
453
+ */
454
+ export const getOrNull: <A>(self: Option<A>) => A | null = getOrElse(constNull)
455
+
456
+ /**
457
+ * Returns the value of the `Option` if it is a `Some`, otherwise returns `undefined`.
458
+ *
459
+ * @param self - The `Option` to extract the value from.
460
+ *
461
+ * @example
462
+ * import * as O from "effect/Option"
463
+ *
464
+ * assert.deepStrictEqual(O.getOrUndefined(O.some(1)), 1)
465
+ * assert.deepStrictEqual(O.getOrUndefined(O.none()), undefined)
466
+ *
467
+ * @category getters
468
+ * @since 2.0.0
469
+ */
470
+ export const getOrUndefined: <A>(self: Option<A>) => A | undefined = getOrElse(constUndefined)
471
+
472
+ /**
473
+ * A utility function that lifts a function that throws exceptions into a function that returns an `Option`.
474
+ *
475
+ * This function is useful for any function that might throw an exception, allowing the developer to handle
476
+ * the exception in a more functional way.
477
+ *
478
+ * @param f - the function that can throw exceptions.
479
+ *
480
+ * @example
481
+ * import * as O from "effect/Option"
482
+ *
483
+ * const parse = O.liftThrowable(JSON.parse)
484
+ *
485
+ * assert.deepStrictEqual(parse("1"), O.some(1))
486
+ * assert.deepStrictEqual(parse(""), O.none())
487
+ *
488
+ * @category conversions
489
+ * @since 2.0.0
490
+ */
491
+ export const liftThrowable = <A extends ReadonlyArray<unknown>, B>(
492
+ f: (...a: A) => B
493
+ ): (...a: A) => Option<B> =>
494
+ (...a) => {
495
+ try {
496
+ return some(f(...a))
497
+ } catch (e) {
498
+ return none()
499
+ }
500
+ }
501
+
502
+ /**
503
+ * Extracts the value of an `Option` or throws if the `Option` is `None`.
504
+ *
505
+ * If a default error is sufficient for your use case and you don't need to configure the thrown error, see {@link getOrThrow}.
506
+ *
507
+ * @param self - The `Option` to extract the value from.
508
+ * @param onNone - A function that will be called if the `Option` is `None`. It returns the error to be thrown.
509
+ *
510
+ * @example
511
+ * import * as O from "effect/Option"
512
+ *
513
+ * assert.deepStrictEqual(
514
+ * O.getOrThrowWith(O.some(1), () => new Error('Unexpected None')),
515
+ * 1
516
+ * )
517
+ * assert.throws(() => O.getOrThrowWith(O.none(), () => new Error('Unexpected None')))
518
+ *
519
+ * @category conversions
520
+ * @since 2.0.0
521
+ */
522
+ export const getOrThrowWith: {
523
+ (onNone: () => unknown): <A>(self: Option<A>) => A
524
+ <A>(self: Option<A>, onNone: () => unknown): A
525
+ } = dual(2, <A>(self: Option<A>, onNone: () => unknown): A => {
526
+ if (isSome(self)) {
527
+ return self.value
528
+ }
529
+ throw onNone()
530
+ })
531
+
532
+ /**
533
+ * Extracts the value of an `Option` or throws if the `Option` is `None`.
534
+ *
535
+ * The thrown error is a default error. To configure the error thrown, see {@link getOrThrowWith}.
536
+ *
537
+ * @param self - The `Option` to extract the value from.
538
+ * @throws `Error("getOrThrow called on a None")`
539
+ *
540
+ * @example
541
+ * import * as O from "effect/Option"
542
+ *
543
+ * assert.deepStrictEqual(O.getOrThrow(O.some(1)), 1)
544
+ * assert.throws(() => O.getOrThrow(O.none()))
545
+ *
546
+ * @category conversions
547
+ * @since 2.0.0
548
+ */
549
+ export const getOrThrow: <A>(self: Option<A>) => A = getOrThrowWith(() => new Error("getOrThrow called on a None"))
550
+
551
+ /**
552
+ * Maps the `Some` side of an `Option` value to a new `Option` value.
553
+ *
554
+ * @param self - An `Option` to map
555
+ * @param f - The function to map over the value of the `Option`
556
+ *
557
+ * @category transforming
558
+ * @since 2.0.0
559
+ */
560
+ export const map: {
561
+ <A, B>(f: (a: A) => B): (self: Option<A>) => Option<B>
562
+ <A, B>(self: Option<A>, f: (a: A) => B): Option<B>
563
+ } = dual(
564
+ 2,
565
+ <A, B>(self: Option<A>, f: (a: A) => B): Option<B> => isNone(self) ? none() : some(f(self.value))
566
+ )
567
+
568
+ /**
569
+ * Maps the `Some` value of this `Option` to the specified constant value.
570
+ *
571
+ * @category transforming
572
+ * @since 2.0.0
573
+ */
574
+ export const as: {
575
+ <B>(b: B): <_>(self: Option<_>) => Option<B>
576
+ } = dual(2, <_, B>(self: Option<_>, b: B): Option<B> => map(self, () => b))
577
+
578
+ /**
579
+ * Maps the `Some` value of this `Option` to the `void` constant value.
580
+ *
581
+ * This is useful when the value of the `Option` is not needed, but the presence or absence of the value is important.
582
+ *
583
+ * @category transforming
584
+ * @since 2.0.0
585
+ */
586
+ export const asUnit: <_>(self: Option<_>) => Option<void> = as(undefined)
587
+
588
+ /**
589
+ * @since 2.0.0
590
+ */
591
+ export const unit: Option<void> = some(undefined)
592
+
593
+ /**
594
+ * Applies a function to the value of an `Option` and flattens the result, if the input is `Some`.
595
+ *
596
+ * @category transforming
597
+ * @since 2.0.0
598
+ */
599
+ export const flatMap: {
600
+ <A, B>(f: (a: A) => Option<B>): (self: Option<A>) => Option<B>
601
+ <A, B>(self: Option<A>, f: (a: A) => Option<B>): Option<B>
602
+ } = dual(
603
+ 2,
604
+ <A, B>(self: Option<A>, f: (a: A) => Option<B>): Option<B> => isNone(self) ? none() : f(self.value)
605
+ )
606
+
607
+ /**
608
+ * This is `flatMap` + `fromNullable`, useful when working with optional values.
609
+ *
610
+ * @example
611
+ * import { some, none, flatMapNullable } from 'effect/Option'
612
+ * import { pipe } from "effect/Function"
613
+ *
614
+ * interface Employee {
615
+ * company?: {
616
+ * address?: {
617
+ * street?: {
618
+ * name?: string
619
+ * }
620
+ * }
621
+ * }
622
+ * }
623
+ *
624
+ * const employee1: Employee = { company: { address: { street: { name: 'high street' } } } }
625
+ *
626
+ * assert.deepStrictEqual(
627
+ * pipe(
628
+ * some(employee1),
629
+ * flatMapNullable(employee => employee.company?.address?.street?.name),
630
+ * ),
631
+ * some('high street')
632
+ * )
633
+ *
634
+ * const employee2: Employee = { company: { address: { street: {} } } }
635
+ *
636
+ * assert.deepStrictEqual(
637
+ * pipe(
638
+ * some(employee2),
639
+ * flatMapNullable(employee => employee.company?.address?.street?.name),
640
+ * ),
641
+ * none()
642
+ * )
643
+ *
644
+ * @category transforming
645
+ * @since 2.0.0
646
+ */
647
+ export const flatMapNullable: {
648
+ <A, B>(f: (a: A) => B | null | undefined): (self: Option<A>) => Option<NonNullable<B>>
649
+ <A, B>(self: Option<A>, f: (a: A) => B | null | undefined): Option<NonNullable<B>>
650
+ } = dual(
651
+ 2,
652
+ <A, B>(self: Option<A>, f: (a: A) => B | null | undefined): Option<NonNullable<B>> =>
653
+ isNone(self) ? none() : fromNullable(f(self.value))
654
+ )
655
+
656
+ /**
657
+ * @category transforming
658
+ * @since 2.0.0
659
+ */
660
+ export const flatten: <A>(self: Option<Option<A>>) => Option<A> = flatMap(identity)
661
+
662
+ /**
663
+ * @category transforming
664
+ * @since 2.0.0
665
+ */
666
+ export const zipRight: {
667
+ <B>(that: Option<B>): <_>(self: Option<_>) => Option<B>
668
+ <_, B>(self: Option<_>, that: Option<B>): Option<B>
669
+ } = dual(2, <_, B>(self: Option<_>, that: Option<B>): Option<B> => flatMap(self, () => that))
670
+
671
+ /**
672
+ * @category transforming
673
+ * @since 2.0.0
674
+ */
675
+ export const composeK: {
676
+ <B, C>(bfc: (b: B) => Option<C>): <A>(afb: (a: A) => Option<B>) => (a: A) => Option<C>
677
+ <A, B, C>(afb: (a: A) => Option<B>, bfc: (b: B) => Option<C>): (a: A) => Option<C>
678
+ } = dual(2, <A, B, C>(afb: (a: A) => Option<B>, bfc: (b: B) => Option<C>) => (a: A): Option<C> => flatMap(afb(a), bfc))
679
+
680
+ /**
681
+ * Sequences the specified `that` `Option` but ignores its value.
682
+ *
683
+ * It is useful when we want to chain multiple operations, but only care about the result of `self`.
684
+ *
685
+ * @param that - The `Option` that will be ignored in the chain and discarded
686
+ * @param self - The `Option` we care about
687
+ *
688
+ * @category transforming
689
+ * @since 2.0.0
690
+ */
691
+ export const zipLeft: {
692
+ <_>(that: Option<_>): <A>(self: Option<A>) => Option<A>
693
+ <A, _>(self: Option<A>, that: Option<_>): Option<A>
694
+ } = dual(2, <A, _>(self: Option<A>, that: Option<_>): Option<A> => tap(self, () => that))
695
+
696
+ /**
697
+ * Applies the provided function `f` to the value of the `Option` if it is `Some` and returns the original `Option`
698
+ * unless `f` returns `None`, in which case it returns `None`.
699
+ *
700
+ * This function is useful for performing additional computations on the value of the input `Option` without affecting its value.
701
+ *
702
+ * @param f - Function to apply to the value of the `Option` if it is `Some`
703
+ * @param self - The `Option` to apply the function to
704
+ *
705
+ * @example
706
+ * import * as O from "effect/Option"
707
+ *
708
+ * const getInteger = (n: number) => Number.isInteger(n) ? O.some(n) : O.none()
709
+ *
710
+ * assert.deepStrictEqual(O.tap(O.none(), getInteger), O.none())
711
+ * assert.deepStrictEqual(O.tap(O.some(1), getInteger), O.some(1))
712
+ * assert.deepStrictEqual(O.tap(O.some(1.14), getInteger), O.none())
713
+ *
714
+ * @category transforming
715
+ * @since 2.0.0
716
+ */
717
+ export const tap: {
718
+ <A, _>(f: (a: A) => Option<_>): (self: Option<A>) => Option<A>
719
+ <A, _>(self: Option<A>, f: (a: A) => Option<_>): Option<A>
720
+ } = dual(2, <A, _>(self: Option<A>, f: (a: A) => Option<_>): Option<A> => flatMap(self, (a) => map(f(a), () => a)))
721
+
722
+ /**
723
+ * @category combining
724
+ * @since 2.0.0
725
+ */
726
+ export const product = <A, B>(self: Option<A>, that: Option<B>): Option<[A, B]> =>
727
+ isSome(self) && isSome(that) ? some([self.value, that.value]) : none()
728
+
729
+ /**
730
+ * @category combining
731
+ * @since 2.0.0
732
+ */
733
+ export const productMany = <A>(
734
+ self: Option<A>,
735
+ collection: Iterable<Option<A>>
736
+ ): Option<[A, ...Array<A>]> => {
737
+ if (isNone(self)) {
738
+ return none()
739
+ }
740
+ const out: [A, ...Array<A>] = [self.value]
741
+ for (const o of collection) {
742
+ if (isNone(o)) {
743
+ return none()
744
+ }
745
+ out.push(o.value)
746
+ }
747
+ return some(out)
748
+ }
749
+
750
+ /**
751
+ * Takes a structure of `Option`s and returns an `Option` of values with the same structure.
752
+ *
753
+ * - If a tuple is supplied, then the returned `Option` will contain a tuple with the same length.
754
+ * - If a struct is supplied, then the returned `Option` will contain a struct with the same keys.
755
+ * - If an iterable is supplied, then the returned `Option` will contain an array.
756
+ *
757
+ * @param fields - the struct of `Option`s to be sequenced.
758
+ *
759
+ * @example
760
+ * import * as O from "effect/Option"
761
+ *
762
+ * assert.deepStrictEqual(O.all([O.some(1), O.some(2)]), O.some([1, 2]))
763
+ * assert.deepStrictEqual(O.all({ a: O.some(1), b: O.some("hello") }), O.some({ a: 1, b: "hello" }))
764
+ * assert.deepStrictEqual(O.all({ a: O.some(1), b: O.none() }), O.none())
765
+ *
766
+ * @category combining
767
+ * @since 2.0.0
768
+ */
769
+ // @ts-expect-error
770
+ export const all: <const I extends Iterable<Option<any>> | Record<string, Option<any>>>(
771
+ input: I
772
+ ) => [I] extends [ReadonlyArray<Option<any>>] ? Option<
773
+ { -readonly [K in keyof I]: [I[K]] extends [Option<infer A>] ? A : never }
774
+ >
775
+ : [I] extends [Iterable<Option<infer A>>] ? Option<Array<A>>
776
+ : Option<{ -readonly [K in keyof I]: [I[K]] extends [Option<infer A>] ? A : never }> = (
777
+ input: Iterable<Option<any>> | Record<string, Option<any>>
778
+ ): Option<any> => {
779
+ if (Symbol.iterator in input) {
780
+ const out: Array<Option<any>> = []
781
+ for (const o of (input as Iterable<Option<any>>)) {
782
+ if (isNone(o)) {
783
+ return none()
784
+ }
785
+ out.push(o.value)
786
+ }
787
+ return some(out)
788
+ }
789
+
790
+ const out: Record<string, any> = {}
791
+ for (const key of Object.keys(input)) {
792
+ const o = input[key]
793
+ if (isNone(o)) {
794
+ return none()
795
+ }
796
+ out[key] = o.value
797
+ }
798
+ return some(out)
799
+ }
800
+
801
+ /**
802
+ * Zips two `Option` values together using a provided function, returning a new `Option` of the result.
803
+ *
804
+ * @param self - The left-hand side of the zip operation
805
+ * @param that - The right-hand side of the zip operation
806
+ * @param f - The function used to combine the values of the two `Option`s
807
+ *
808
+ * @example
809
+ * import * as O from "effect/Option"
810
+ *
811
+ * type Complex = [number, number]
812
+ *
813
+ * const complex = (real: number, imaginary: number): Complex => [real, imaginary]
814
+ *
815
+ * assert.deepStrictEqual(O.zipWith(O.none(), O.none(), complex), O.none())
816
+ * assert.deepStrictEqual(O.zipWith(O.some(1), O.none(), complex), O.none())
817
+ * assert.deepStrictEqual(O.zipWith(O.none(), O.some(1), complex), O.none())
818
+ * assert.deepStrictEqual(O.zipWith(O.some(1), O.some(2), complex), O.some([1, 2]))
819
+ *
820
+ * assert.deepStrictEqual(O.zipWith(O.some(1), complex)(O.some(2)), O.some([2, 1]))
821
+ *
822
+ * @category combining
823
+ * @since 2.0.0
824
+ */
825
+ export const zipWith: {
826
+ <B, A, C>(that: Option<B>, f: (a: A, b: B) => C): (self: Option<A>) => Option<C>
827
+ <A, B, C>(self: Option<A>, that: Option<B>, f: (a: A, b: B) => C): Option<C>
828
+ } = dual(
829
+ 3,
830
+ <A, B, C>(self: Option<A>, that: Option<B>, f: (a: A, b: B) => C): Option<C> =>
831
+ map(product(self, that), ([a, b]) => f(a, b))
832
+ )
833
+
834
+ /**
835
+ * @category combining
836
+ * @since 2.0.0
837
+ */
838
+ export const ap: {
839
+ <A>(that: Option<A>): <B>(self: Option<(a: A) => B>) => Option<B>
840
+ <A, B>(self: Option<(a: A) => B>, that: Option<A>): Option<B>
841
+ } = dual(2, <A, B>(self: Option<(a: A) => B>, that: Option<A>): Option<B> => zipWith(self, that, (f, a) => f(a)))
842
+
843
+ /**
844
+ * Reduces an `Iterable` of `Option<A>` to a single value of type `B`, elements that are `None` are ignored.
845
+ *
846
+ * @param self - The Iterable of `Option<A>` to be reduced.
847
+ * @param b - The initial value of the accumulator.
848
+ * @param f - The reducing function that takes the current accumulator value and the unwrapped value of an `Option<A>`.
849
+ *
850
+ * @example
851
+ * import { some, none, reduceCompact } from 'effect/Option'
852
+ * import { pipe } from "effect/Function"
853
+ *
854
+ * const iterable = [some(1), none(), some(2), none()]
855
+ * assert.deepStrictEqual(pipe(iterable, reduceCompact(0, (b, a) => b + a)), 3)
856
+ *
857
+ * @category folding
858
+ * @since 2.0.0
859
+ */
860
+ export const reduceCompact: {
861
+ <B, A>(b: B, f: (b: B, a: A) => B): (self: Iterable<Option<A>>) => B
862
+ <A, B>(self: Iterable<Option<A>>, b: B, f: (b: B, a: A) => B): B
863
+ } = dual(
864
+ 3,
865
+ <A, B>(self: Iterable<Option<A>>, b: B, f: (b: B, a: A) => B): B => {
866
+ let out: B = b
867
+ for (const oa of self) {
868
+ if (isSome(oa)) {
869
+ out = f(out, oa.value)
870
+ }
871
+ }
872
+ return out
873
+ }
874
+ )
875
+
876
+ /**
877
+ * Transforms an `Option` into an `Array`.
878
+ * If the input is `None`, an empty array is returned.
879
+ * If the input is `Some`, the value is wrapped in an array.
880
+ *
881
+ * @param self - The `Option` to convert to an array.
882
+ *
883
+ * @example
884
+ * import * as O from "effect/Option"
885
+ *
886
+ * assert.deepStrictEqual(O.toArray(O.some(1)), [1])
887
+ * assert.deepStrictEqual(O.toArray(O.none()), [])
888
+ *
889
+ * @category conversions
890
+ * @since 2.0.0
891
+ */
892
+ export const toArray = <A>(self: Option<A>): Array<A> => isNone(self) ? [] : [self.value]
893
+
894
+ /**
895
+ * @category filtering
896
+ * @since 2.0.0
897
+ */
898
+ export const partitionMap: {
899
+ <A, B, C>(f: (a: A) => Either<B, C>): (self: Option<A>) => [Option<B>, Option<C>]
900
+ <A, B, C>(self: Option<A>, f: (a: A) => Either<B, C>): [Option<B>, Option<C>]
901
+ } = dual(2, <A, B, C>(
902
+ self: Option<A>,
903
+ f: (a: A) => Either<B, C>
904
+ ): [Option<B>, Option<C>] => {
905
+ if (isNone(self)) {
906
+ return [none(), none()]
907
+ }
908
+ const e = f(self.value)
909
+ return either.isLeft(e) ? [some(e.left), none()] : [none(), some(e.right)]
910
+ })
911
+
912
+ /**
913
+ * Maps over the value of an `Option` and filters out `None`s.
914
+ *
915
+ * Useful when in addition to filtering you also want to change the type of the `Option`.
916
+ *
917
+ * @param self - The `Option` to map over.
918
+ * @param f - A function to apply to the value of the `Option`.
919
+ *
920
+ * @example
921
+ * import * as O from "effect/Option"
922
+ *
923
+ * const evenNumber = (n: number) => n % 2 === 0 ? O.some(n) : O.none()
924
+ *
925
+ * assert.deepStrictEqual(O.filterMap(O.none(), evenNumber), O.none())
926
+ * assert.deepStrictEqual(O.filterMap(O.some(3), evenNumber), O.none())
927
+ * assert.deepStrictEqual(O.filterMap(O.some(2), evenNumber), O.some(2))
928
+ *
929
+ * @category filtering
930
+ * @since 2.0.0
931
+ */
932
+ export const filterMap: {
933
+ <A, B>(f: (a: A) => Option<B>): (self: Option<A>) => Option<B>
934
+ <A, B>(self: Option<A>, f: (a: A) => Option<B>): Option<B>
935
+ } = dual(
936
+ 2,
937
+ <A, B>(self: Option<A>, f: (a: A) => Option<B>): Option<B> => isNone(self) ? none() : f(self.value)
938
+ )
939
+
940
+ /**
941
+ * Filters an `Option` using a predicate. If the predicate is not satisfied or the `Option` is `None` returns `None`.
942
+ *
943
+ * If you need to change the type of the `Option` in addition to filtering, see `filterMap`.
944
+ *
945
+ * @param predicate - A predicate function to apply to the `Option` value.
946
+ * @param fb - The `Option` to filter.
947
+ *
948
+ * @example
949
+ * import * as O from "effect/Option"
950
+ *
951
+ * // predicate
952
+ * const isEven = (n: number) => n % 2 === 0
953
+ *
954
+ * assert.deepStrictEqual(O.filter(O.none(), isEven), O.none())
955
+ * assert.deepStrictEqual(O.filter(O.some(3), isEven), O.none())
956
+ * assert.deepStrictEqual(O.filter(O.some(2), isEven), O.some(2))
957
+ *
958
+ * // refinement
959
+ * const isNumber = (v: unknown): v is number => typeof v === "number"
960
+ *
961
+ * assert.deepStrictEqual(O.filter(O.none(), isNumber), O.none())
962
+ * assert.deepStrictEqual(O.filter(O.some('hello'), isNumber), O.none())
963
+ * assert.deepStrictEqual(O.filter(O.some(2), isNumber), O.some(2))
964
+ *
965
+ * @category filtering
966
+ * @since 2.0.0
967
+ */
968
+ export const filter: {
969
+ <C extends A, B extends A, A = C>(refinement: (a: A) => a is B): (self: Option<C>) => Option<B>
970
+ <B extends A, A = B>(predicate: (a: A) => boolean): (self: Option<B>) => Option<B>
971
+ <C extends A, B extends A, A = C>(self: Option<C>, refinement: (a: A) => a is B): Option<B>
972
+ <B extends A, A = B>(self: Option<B>, predicate: (a: A) => boolean): Option<B>
973
+ } = dual(
974
+ 2,
975
+ <B extends A, A = B>(self: Option<B>, predicate: (a: A) => boolean): Option<B> =>
976
+ filterMap(self, (b) => (predicate(b) ? option.some(b) : option.none))
977
+ )
978
+
979
+ /**
980
+ * @example
981
+ * import { none, some, getEquivalence } from 'effect/Option'
982
+ * import * as N from 'effect/Number'
983
+ *
984
+ * const isEquivalent = getEquivalence(N.Equivalence)
985
+ * assert.deepStrictEqual(isEquivalent(none(), none()), true)
986
+ * assert.deepStrictEqual(isEquivalent(none(), some(1)), false)
987
+ * assert.deepStrictEqual(isEquivalent(some(1), none()), false)
988
+ * assert.deepStrictEqual(isEquivalent(some(1), some(2)), false)
989
+ * assert.deepStrictEqual(isEquivalent(some(1), some(1)), true)
990
+ *
991
+ * @category equivalence
992
+ * @since 2.0.0
993
+ */
994
+ export const getEquivalence = <A>(isEquivalent: Equivalence.Equivalence<A>): Equivalence.Equivalence<Option<A>> =>
995
+ Equivalence.make((x, y) => x === y || (isNone(x) ? isNone(y) : isNone(y) ? false : isEquivalent(x.value, y.value)))
996
+
997
+ /**
998
+ * The `Order` instance allows `Option` values to be compared with
999
+ * `compare`, whenever there is an `Order` instance for
1000
+ * the type the `Option` contains.
1001
+ *
1002
+ * `None` is considered to be less than any `Some` value.
1003
+ *
1004
+ * @example
1005
+ * import { none, some, getOrder } from 'effect/Option'
1006
+ * import * as N from 'effect/Number'
1007
+ * import { pipe } from "effect/Function"
1008
+ *
1009
+ * const O = getOrder(N.Order)
1010
+ * assert.deepStrictEqual(O(none(), none()), 0)
1011
+ * assert.deepStrictEqual(O(none(), some(1)), -1)
1012
+ * assert.deepStrictEqual(O(some(1), none()), 1)
1013
+ * assert.deepStrictEqual(O(some(1), some(2)), -1)
1014
+ * assert.deepStrictEqual(O(some(1), some(1)), 0)
1015
+ *
1016
+ * @category sorting
1017
+ * @since 2.0.0
1018
+ */
1019
+ export const getOrder = <A>(O: Order<A>): Order<Option<A>> =>
1020
+ order.make((self, that) => isSome(self) ? (isSome(that) ? O(self.value, that.value) : 1) : -1)
1021
+
1022
+ /**
1023
+ * Lifts a binary function into `Option`.
1024
+ *
1025
+ * @param f - The function to lift.
1026
+ *
1027
+ * @category lifting
1028
+ * @since 2.0.0
1029
+ */
1030
+ export const lift2 = <A, B, C>(f: (a: A, b: B) => C): {
1031
+ (that: Option<B>): (self: Option<A>) => Option<C>
1032
+ (self: Option<A>, that: Option<B>): Option<C>
1033
+ } => dual(2, (self: Option<A>, that: Option<B>): Option<C> => zipWith(self, that, f))
1034
+
1035
+ /**
1036
+ * Transforms a `Predicate` function into a `Some` of the input value if the predicate returns `true` or `None`
1037
+ * if the predicate returns `false`.
1038
+ *
1039
+ * @param predicate - A `Predicate` function that takes in a value of type `A` and returns a boolean.
1040
+ *
1041
+ * @example
1042
+ * import * as O from "effect/Option"
1043
+ *
1044
+ * const getOption = O.liftPredicate((n: number) => n >= 0)
1045
+ *
1046
+ * assert.deepStrictEqual(getOption(-1), O.none())
1047
+ * assert.deepStrictEqual(getOption(1), O.some(1))
1048
+ *
1049
+ * @category lifting
1050
+ * @since 2.0.0
1051
+ */
1052
+ export const liftPredicate: {
1053
+ <C extends A, B extends A, A = C>(refinement: Refinement<A, B>): (c: C) => Option<B>
1054
+ <B extends A, A = B>(predicate: Predicate<A>): (b: B) => Option<B>
1055
+ } = <B extends A, A = B>(predicate: Predicate<A>) => (b: B) => predicate(b) ? some(b) : none()
1056
+
1057
+ /**
1058
+ * Returns a function that checks if a `Option` contains a given value using a provided `isEquivalent` function.
1059
+ *
1060
+ * @param equivalent - An `Equivalence` instance to compare values of the `Option`.
1061
+ * @param self - The `Option` to apply the comparison to.
1062
+ * @param a - The value to compare against the `Option`.
1063
+ *
1064
+ * @example
1065
+ * import { some, none, containsWith } from 'effect/Option'
1066
+ * import { Equivalence } from 'effect/Number'
1067
+ * import { pipe } from "effect/Function"
1068
+ *
1069
+ * assert.deepStrictEqual(pipe(some(2), containsWith(Equivalence)(2)), true)
1070
+ * assert.deepStrictEqual(pipe(some(1), containsWith(Equivalence)(2)), false)
1071
+ * assert.deepStrictEqual(pipe(none(), containsWith(Equivalence)(2)), false)
1072
+ *
1073
+ * @category elements
1074
+ * @since 2.0.0
1075
+ */
1076
+ export const containsWith = <A>(isEquivalent: (self: A, that: A) => boolean): {
1077
+ (a: A): (self: Option<A>) => boolean
1078
+ (self: Option<A>, a: A): boolean
1079
+ } => dual(2, (self: Option<A>, a: A): boolean => isNone(self) ? false : isEquivalent(self.value, a))
1080
+
1081
+ const _equivalence = Equal.equivalence()
1082
+
1083
+ /**
1084
+ * Returns a function that checks if an `Option` contains a given value using the default `Equivalence`.
1085
+ *
1086
+ * @category elements
1087
+ * @since 2.0.0
1088
+ */
1089
+ export const contains: {
1090
+ <A>(a: A): (self: Option<A>) => boolean
1091
+ <A>(self: Option<A>, a: A): boolean
1092
+ } = containsWith(_equivalence)
1093
+
1094
+ /**
1095
+ * Check if a value in an `Option` type meets a certain predicate.
1096
+ *
1097
+ * @param self - The `Option` to check.
1098
+ * @param predicate - The condition to check.
1099
+ *
1100
+ * @example
1101
+ * import { some, none, exists } from 'effect/Option'
1102
+ * import { pipe } from "effect/Function"
1103
+ *
1104
+ * const isEven = (n: number) => n % 2 === 0
1105
+ *
1106
+ * assert.deepStrictEqual(pipe(some(2), exists(isEven)), true)
1107
+ * assert.deepStrictEqual(pipe(some(1), exists(isEven)), false)
1108
+ * assert.deepStrictEqual(pipe(none(), exists(isEven)), false)
1109
+ *
1110
+ * @since 2.0.0
1111
+ */
1112
+ export const exists: {
1113
+ <A>(predicate: Predicate<A>): (self: Option<A>) => boolean
1114
+ <A>(self: Option<A>, predicate: Predicate<A>): boolean
1115
+ } = dual(
1116
+ 2,
1117
+ <A>(self: Option<A>, predicate: Predicate<A>): boolean => isNone(self) ? false : predicate(self.value)
1118
+ )
1119
+
1120
+ // -------------------------------------------------------------------------------------
1121
+ // math
1122
+ // -------------------------------------------------------------------------------------
1123
+
1124
+ /**
1125
+ * @category math
1126
+ * @since 2.0.0
1127
+ */
1128
+ export const sum: {
1129
+ (self: Option<number>, that: Option<number>): Option<number>
1130
+ (that: Option<number>): (self: Option<number>) => Option<number>
1131
+ } = lift2(N.sum)
1132
+
1133
+ /**
1134
+ * @category math
1135
+ * @since 2.0.0
1136
+ */
1137
+ export const multiply: {
1138
+ (self: Option<number>, that: Option<number>): Option<number>
1139
+ (that: Option<number>): (self: Option<number>) => Option<number>
1140
+ } = lift2(N.multiply)
1141
+
1142
+ /**
1143
+ * @category math
1144
+ * @since 2.0.0
1145
+ */
1146
+ export const subtract: {
1147
+ (self: Option<number>, that: Option<number>): Option<number>
1148
+ (that: Option<number>): (self: Option<number>) => Option<number>
1149
+ } = lift2(N.subtract)
1150
+
1151
+ /**
1152
+ * @category math
1153
+ * @since 2.0.0
1154
+ */
1155
+ export const divide: {
1156
+ (self: Option<number>, that: Option<number>): Option<number>
1157
+ (that: Option<number>): (self: Option<number>) => Option<number>
1158
+ } = lift2(N.divide)
1159
+
1160
+ /**
1161
+ * Sum all numbers in an iterable of `Option<number>` ignoring the `None` values.
1162
+ *
1163
+ * @param self - The iterable of `Option<number>` to be summed.
1164
+ *
1165
+ * @example
1166
+ * import { sumCompact, some, none } from 'effect/Option'
1167
+ *
1168
+ * const iterable = [some(2), none(), some(3), none()]
1169
+ * assert.deepStrictEqual(sumCompact(iterable), 5)
1170
+ *
1171
+ * @category math
1172
+ * @since 2.0.0
1173
+ */
1174
+ export const sumCompact = (self: Iterable<Option<number>>): number => {
1175
+ let out = 0
1176
+ for (const oa of self) {
1177
+ if (isSome(oa)) {
1178
+ out += oa.value
1179
+ }
1180
+ }
1181
+ return out
1182
+ }
1183
+
1184
+ /**
1185
+ * Multiply all numbers in an iterable of `Option<number>` ignoring the `None` values.
1186
+ *
1187
+ * @param self - The iterable of `Option<number>` to be multiplied.
1188
+ *
1189
+ * @example
1190
+ * import { multiplyCompact, some, none } from 'effect/Option'
1191
+ *
1192
+ * const iterable = [some(2), none(), some(3), none()]
1193
+ * assert.deepStrictEqual(multiplyCompact(iterable), 6)
1194
+ *
1195
+ * @category math
1196
+ * @since 2.0.0
1197
+ */
1198
+ export const multiplyCompact = (self: Iterable<Option<number>>): number => {
1199
+ let out = 1
1200
+ for (const oa of self) {
1201
+ if (isSome(oa)) {
1202
+ const a: number = oa.value
1203
+ if (a === 0) {
1204
+ return 0
1205
+ }
1206
+ out *= a
1207
+ }
1208
+ }
1209
+ return out
1210
+ }
1211
+
1212
+ // -------------------------------------------------------------------------------------
1213
+ // do notation
1214
+ // -------------------------------------------------------------------------------------
1215
+
1216
+ /**
1217
+ * @category do notation
1218
+ * @since 2.0.0
1219
+ */
1220
+ export const bindTo: {
1221
+ <N extends string>(name: N): <A>(self: Option<A>) => Option<{ [K in N]: A }>
1222
+ <A, N extends string>(self: Option<A>, name: N): Option<{ [K in N]: A }>
1223
+ } = dual(
1224
+ 2,
1225
+ <A, N extends string>(self: Option<A>, name: N): Option<{ [K in N]: A }> => map(self, (a) => ({ [name]: a } as any))
1226
+ )
1227
+
1228
+ const let_: {
1229
+ <N extends string, A extends object, B>(
1230
+ name: Exclude<N, keyof A>,
1231
+ f: (a: A) => B
1232
+ ): (self: Option<A>) => Option<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }>
1233
+ <A extends object, N extends string, B>(
1234
+ self: Option<A>,
1235
+ name: Exclude<N, keyof A>,
1236
+ f: (a: A) => B
1237
+ ): Option<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }>
1238
+ } = dual(3, <A extends object, N extends string, B>(
1239
+ self: Option<A>,
1240
+ name: Exclude<N, keyof A>,
1241
+ f: (a: A) => B
1242
+ ): Option<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }> =>
1243
+ map(self, (a) => Object.assign({}, a, { [name]: f(a) }) as any))
1244
+
1245
+ export {
1246
+ /**
1247
+ * @category do notation
1248
+ * @since 2.0.0
1249
+ */
1250
+ let_ as let
1251
+ }
1252
+
1253
+ /**
1254
+ * @category do notation
1255
+ * @since 2.0.0
1256
+ */
1257
+ export const bind: {
1258
+ <N extends string, A extends object, B>(
1259
+ name: Exclude<N, keyof A>,
1260
+ f: (a: A) => Option<B>
1261
+ ): (self: Option<A>) => Option<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }>
1262
+ <A extends object, N extends string, B>(
1263
+ self: Option<A>,
1264
+ name: Exclude<N, keyof A>,
1265
+ f: (a: A) => Option<B>
1266
+ ): Option<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }>
1267
+ } = dual(3, <A, N extends string, B>(
1268
+ self: Option<A>,
1269
+ name: Exclude<N, keyof A>,
1270
+ f: (a: A) => Option<B>
1271
+ ): Option<{ [K in keyof A | N]: K extends keyof A ? A[K] : B }> =>
1272
+ flatMap(self, (a) => map(f(a), (b) => Object.assign({}, a, { [name]: b }) as any)))
1273
+
1274
+ /**
1275
+ * @category do notation
1276
+ * @since 2.0.0
1277
+ */
1278
+ export const Do: Option<{}> = some({})
1279
+
1280
+ const adapter = Gen.adapter<OptionTypeLambda>()
1281
+
1282
+ /**
1283
+ * @category generators
1284
+ * @since 2.0.0
1285
+ */
1286
+ export const gen: Gen.Gen<OptionTypeLambda, Gen.Adapter<OptionTypeLambda>> = (f) => {
1287
+ const iterator = f(adapter)
1288
+ let state: IteratorYieldResult<any> | IteratorReturnResult<any> = iterator.next()
1289
+ if (state.done) {
1290
+ return some(void 0)
1291
+ } else {
1292
+ let current = state.value.value
1293
+ if (isNone(current)) {
1294
+ return current
1295
+ }
1296
+ while (!state.done) {
1297
+ state = iterator.next(current.value)
1298
+ if (!state.done) {
1299
+ current = state.value.value
1300
+ if (isNone(current)) {
1301
+ return current
1302
+ }
1303
+ }
1304
+ }
1305
+ return some(state.value)
1306
+ }
1307
+ }