effect 2.4.19 → 3.0.0

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 (615) hide show
  1. package/Array/package.json +6 -0
  2. package/FiberHandle/package.json +6 -0
  3. package/Record/package.json +6 -0
  4. package/dist/cjs/{ReadonlyArray.js → Array.js} +46 -23
  5. package/dist/cjs/Array.js.map +1 -0
  6. package/dist/cjs/Brand.js +2 -2
  7. package/dist/cjs/Brand.js.map +1 -1
  8. package/dist/cjs/Channel.js +4 -8
  9. package/dist/cjs/Channel.js.map +1 -1
  10. package/dist/cjs/Chunk.js +5 -1
  11. package/dist/cjs/Chunk.js.map +1 -1
  12. package/dist/cjs/ConfigError.js.map +1 -1
  13. package/dist/cjs/Cron.js +13 -13
  14. package/dist/cjs/Cron.js.map +1 -1
  15. package/dist/cjs/Effect.js +14 -10
  16. package/dist/cjs/Effect.js.map +1 -1
  17. package/dist/cjs/Either.js +4 -1
  18. package/dist/cjs/Either.js.map +1 -1
  19. package/dist/cjs/ExecutionStrategy.js.map +1 -1
  20. package/dist/cjs/Exit.js +3 -9
  21. package/dist/cjs/Exit.js.map +1 -1
  22. package/dist/cjs/Fiber.js +2 -8
  23. package/dist/cjs/Fiber.js.map +1 -1
  24. package/dist/cjs/FiberHandle.js +288 -0
  25. package/dist/cjs/FiberHandle.js.map +1 -0
  26. package/dist/cjs/FiberMap.js +86 -27
  27. package/dist/cjs/FiberMap.js.map +1 -1
  28. package/dist/cjs/FiberRefs.js.map +1 -1
  29. package/dist/cjs/FiberSet.js +51 -15
  30. package/dist/cjs/FiberSet.js.map +1 -1
  31. package/dist/cjs/HashMap.js.map +1 -1
  32. package/dist/cjs/HashSet.js.map +1 -1
  33. package/dist/cjs/Iterable.js +40 -5
  34. package/dist/cjs/Iterable.js.map +1 -1
  35. package/dist/cjs/Layer.js.map +1 -1
  36. package/dist/cjs/List.js +3 -3
  37. package/dist/cjs/List.js.map +1 -1
  38. package/dist/cjs/Metric.js +3 -1
  39. package/dist/cjs/Metric.js.map +1 -1
  40. package/dist/cjs/MetricKey.js.map +1 -1
  41. package/dist/cjs/MetricKeyType.js.map +1 -1
  42. package/dist/cjs/MutableHashMap.js +0 -4
  43. package/dist/cjs/MutableHashMap.js.map +1 -1
  44. package/dist/cjs/Option.js +3 -6
  45. package/dist/cjs/Option.js.map +1 -1
  46. package/dist/cjs/{ReadonlyRecord.js → Record.js} +29 -29
  47. package/dist/cjs/Record.js.map +1 -0
  48. package/dist/cjs/STM.js +4 -10
  49. package/dist/cjs/STM.js.map +1 -1
  50. package/dist/cjs/Schedule.js +2 -2
  51. package/dist/cjs/Schedule.js.map +1 -1
  52. package/dist/cjs/ScopedCache.js.map +1 -1
  53. package/dist/cjs/Stream.js +3 -9
  54. package/dist/cjs/Stream.js.map +1 -1
  55. package/dist/cjs/StreamHaltStrategy.js +2 -0
  56. package/dist/cjs/StreamHaltStrategy.js.map +1 -1
  57. package/dist/cjs/String.js +44 -2
  58. package/dist/cjs/String.js.map +1 -1
  59. package/dist/cjs/TestAnnotations.js +1 -1
  60. package/dist/cjs/TestAnnotations.js.map +1 -1
  61. package/dist/cjs/TestClock.js +3 -3
  62. package/dist/cjs/TestClock.js.map +1 -1
  63. package/dist/cjs/Tracer.js.map +1 -1
  64. package/dist/cjs/index.js +8 -6
  65. package/dist/cjs/index.js.map +1 -1
  66. package/dist/cjs/internal/{readonlyArray.js → array.js} +1 -1
  67. package/dist/cjs/internal/array.js.map +1 -0
  68. package/dist/cjs/internal/cache.js +3 -3
  69. package/dist/cjs/internal/cache.js.map +1 -1
  70. package/dist/cjs/internal/cause.js +3 -3
  71. package/dist/cjs/internal/cause.js.map +1 -1
  72. package/dist/cjs/internal/channel/channelExecutor.js +15 -15
  73. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  74. package/dist/cjs/internal/channel/channelState.js +1 -1
  75. package/dist/cjs/internal/channel/channelState.js.map +1 -1
  76. package/dist/cjs/internal/channel/singleProducerAsyncInput.js +1 -1
  77. package/dist/cjs/internal/channel/singleProducerAsyncInput.js.map +1 -1
  78. package/dist/cjs/internal/channel.js +10 -10
  79. package/dist/cjs/internal/channel.js.map +1 -1
  80. package/dist/cjs/internal/clock.js +2 -2
  81. package/dist/cjs/internal/clock.js.map +1 -1
  82. package/dist/cjs/internal/configError.js +20 -19
  83. package/dist/cjs/internal/configError.js.map +1 -1
  84. package/dist/cjs/internal/configProvider/pathPatch.js +1 -1
  85. package/dist/cjs/internal/configProvider/pathPatch.js.map +1 -1
  86. package/dist/cjs/internal/configProvider.js +46 -47
  87. package/dist/cjs/internal/configProvider.js.map +1 -1
  88. package/dist/cjs/internal/core-effect.js +42 -28
  89. package/dist/cjs/internal/core-effect.js.map +1 -1
  90. package/dist/cjs/internal/core-stream.js +2 -3
  91. package/dist/cjs/internal/core-stream.js.map +1 -1
  92. package/dist/cjs/internal/core.js +27 -31
  93. package/dist/cjs/internal/core.js.map +1 -1
  94. package/dist/cjs/internal/dataSource.js +19 -2
  95. package/dist/cjs/internal/dataSource.js.map +1 -1
  96. package/dist/cjs/internal/differ/readonlyArrayPatch.js +6 -6
  97. package/dist/cjs/internal/differ/readonlyArrayPatch.js.map +1 -1
  98. package/dist/cjs/internal/effect/circular.js +1 -1
  99. package/dist/cjs/internal/effect/circular.js.map +1 -1
  100. package/dist/cjs/internal/executionStrategy.js +4 -4
  101. package/dist/cjs/internal/executionStrategy.js.map +1 -1
  102. package/dist/cjs/internal/fiber.js +5 -6
  103. package/dist/cjs/internal/fiber.js.map +1 -1
  104. package/dist/cjs/internal/fiberRefs/patch.js +1 -1
  105. package/dist/cjs/internal/fiberRefs/patch.js.map +1 -1
  106. package/dist/cjs/internal/fiberRefs.js +1 -1
  107. package/dist/cjs/internal/fiberRefs.js.map +1 -1
  108. package/dist/cjs/internal/fiberRuntime.js +33 -33
  109. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  110. package/dist/cjs/internal/groupBy.js +3 -3
  111. package/dist/cjs/internal/groupBy.js.map +1 -1
  112. package/dist/cjs/internal/hashMap.js.map +1 -1
  113. package/dist/cjs/internal/hashSet.js.map +1 -1
  114. package/dist/cjs/internal/layer/circular.js.map +1 -1
  115. package/dist/cjs/internal/layer.js +5 -5
  116. package/dist/cjs/internal/layer.js.map +1 -1
  117. package/dist/cjs/internal/logger.js +28 -8
  118. package/dist/cjs/internal/logger.js.map +1 -1
  119. package/dist/cjs/internal/managedRuntime.js +1 -1
  120. package/dist/cjs/internal/managedRuntime.js.map +1 -1
  121. package/dist/cjs/internal/metric/boundaries.js +4 -4
  122. package/dist/cjs/internal/metric/boundaries.js.map +1 -1
  123. package/dist/cjs/internal/metric/hook.js +20 -17
  124. package/dist/cjs/internal/metric/hook.js.map +1 -1
  125. package/dist/cjs/internal/metric/key.js +4 -4
  126. package/dist/cjs/internal/metric/key.js.map +1 -1
  127. package/dist/cjs/internal/metric/keyType.js +6 -1
  128. package/dist/cjs/internal/metric/keyType.js.map +1 -1
  129. package/dist/cjs/internal/metric/state.js +4 -4
  130. package/dist/cjs/internal/metric/state.js.map +1 -1
  131. package/dist/cjs/internal/metric.js +4 -4
  132. package/dist/cjs/internal/metric.js.map +1 -1
  133. package/dist/cjs/internal/pool.js +11 -11
  134. package/dist/cjs/internal/pool.js.map +1 -1
  135. package/dist/cjs/internal/pubsub.js +5 -5
  136. package/dist/cjs/internal/pubsub.js.map +1 -1
  137. package/dist/cjs/internal/query.js +2 -2
  138. package/dist/cjs/internal/query.js.map +1 -1
  139. package/dist/cjs/internal/queue.js +9 -9
  140. package/dist/cjs/internal/queue.js.map +1 -1
  141. package/dist/cjs/internal/rateLimiter.js +1 -1
  142. package/dist/cjs/internal/rateLimiter.js.map +1 -1
  143. package/dist/cjs/internal/redBlackTree/iterator.js +2 -2
  144. package/dist/cjs/internal/redBlackTree/iterator.js.map +1 -1
  145. package/dist/cjs/internal/reloadable.js +1 -1
  146. package/dist/cjs/internal/reloadable.js.map +1 -1
  147. package/dist/cjs/internal/runtime.js +4 -4
  148. package/dist/cjs/internal/runtime.js.map +1 -1
  149. package/dist/cjs/internal/schedule.js +5 -5
  150. package/dist/cjs/internal/schedule.js.map +1 -1
  151. package/dist/cjs/internal/scopedCache.js +7 -7
  152. package/dist/cjs/internal/scopedCache.js.map +1 -1
  153. package/dist/cjs/internal/scopedRef.js +4 -4
  154. package/dist/cjs/internal/scopedRef.js.map +1 -1
  155. package/dist/cjs/internal/secret.js +2 -2
  156. package/dist/cjs/internal/secret.js.map +1 -1
  157. package/dist/cjs/internal/sink.js +10 -10
  158. package/dist/cjs/internal/sink.js.map +1 -1
  159. package/dist/cjs/internal/stm/stm/tExit.js +2 -4
  160. package/dist/cjs/internal/stm/stm/tExit.js.map +1 -1
  161. package/dist/cjs/internal/stm/stm.js +11 -11
  162. package/dist/cjs/internal/stm/stm.js.map +1 -1
  163. package/dist/cjs/internal/stm/tMap.js +3 -3
  164. package/dist/cjs/internal/stm/tMap.js.map +1 -1
  165. package/dist/cjs/internal/stm/tPriorityQueue.js +11 -11
  166. package/dist/cjs/internal/stm/tPriorityQueue.js.map +1 -1
  167. package/dist/cjs/internal/stm/tPubSub.js +3 -3
  168. package/dist/cjs/internal/stm/tPubSub.js.map +1 -1
  169. package/dist/cjs/internal/stm/tQueue.js +3 -3
  170. package/dist/cjs/internal/stm/tQueue.js.map +1 -1
  171. package/dist/cjs/internal/stm/tSet.js +1 -1
  172. package/dist/cjs/internal/stm/tSet.js.map +1 -1
  173. package/dist/cjs/internal/stream/haltStrategy.js +5 -5
  174. package/dist/cjs/internal/stream/haltStrategy.js.map +1 -1
  175. package/dist/cjs/internal/stream.js +84 -85
  176. package/dist/cjs/internal/stream.js.map +1 -1
  177. package/dist/cjs/internal/supervisor.js +1 -1
  178. package/dist/cjs/internal/supervisor.js.map +1 -1
  179. package/dist/cjs/internal/take.js +1 -1
  180. package/dist/cjs/internal/take.js.map +1 -1
  181. package/dist/cjs/internal/tracer.js.map +1 -1
  182. package/dist/cjs/internal/trie.js.map +1 -1
  183. package/dist/cjs/internal/version.js +1 -1
  184. package/dist/cjs/internal/version.js.map +1 -1
  185. package/dist/dts/{ReadonlyArray.d.ts → Array.d.ts} +39 -18
  186. package/dist/dts/Array.d.ts.map +1 -0
  187. package/dist/dts/BigDecimal.d.ts.map +1 -1
  188. package/dist/dts/BigInt.d.ts.map +1 -1
  189. package/dist/dts/Brand.d.ts +1 -19
  190. package/dist/dts/Brand.d.ts.map +1 -1
  191. package/dist/dts/Cache.d.ts +10 -10
  192. package/dist/dts/Cache.d.ts.map +1 -1
  193. package/dist/dts/Cause.d.ts +1 -1
  194. package/dist/dts/Cause.d.ts.map +1 -1
  195. package/dist/dts/Channel.d.ts +6 -4
  196. package/dist/dts/Channel.d.ts.map +1 -1
  197. package/dist/dts/Chunk.d.ts +1 -4
  198. package/dist/dts/Chunk.d.ts.map +1 -1
  199. package/dist/dts/ConfigError.d.ts +7 -6
  200. package/dist/dts/ConfigError.d.ts.map +1 -1
  201. package/dist/dts/Cron.d.ts +0 -5
  202. package/dist/dts/Cron.d.ts.map +1 -1
  203. package/dist/dts/Duration.d.ts.map +1 -1
  204. package/dist/dts/Effect.d.ts +38 -33
  205. package/dist/dts/Effect.d.ts.map +1 -1
  206. package/dist/dts/Either.d.ts +5 -2
  207. package/dist/dts/Either.d.ts.map +1 -1
  208. package/dist/dts/Encoding.d.ts.map +1 -1
  209. package/dist/dts/Equivalence.d.ts.map +1 -1
  210. package/dist/dts/ExecutionStrategy.d.ts +10 -2
  211. package/dist/dts/ExecutionStrategy.d.ts.map +1 -1
  212. package/dist/dts/Exit.d.ts +4 -3
  213. package/dist/dts/Exit.d.ts.map +1 -1
  214. package/dist/dts/Fiber.d.ts +4 -2
  215. package/dist/dts/Fiber.d.ts.map +1 -1
  216. package/dist/dts/FiberHandle.d.ts +189 -0
  217. package/dist/dts/FiberHandle.d.ts.map +1 -0
  218. package/dist/dts/FiberMap.d.ts +48 -12
  219. package/dist/dts/FiberMap.d.ts.map +1 -1
  220. package/dist/dts/FiberRefs.d.ts +1 -1
  221. package/dist/dts/FiberRefs.d.ts.map +1 -1
  222. package/dist/dts/FiberSet.d.ts +9 -5
  223. package/dist/dts/FiberSet.d.ts.map +1 -1
  224. package/dist/dts/Function.d.ts.map +1 -1
  225. package/dist/dts/GroupBy.d.ts +1 -1
  226. package/dist/dts/GroupBy.d.ts.map +1 -1
  227. package/dist/dts/HashMap.d.ts +0 -1
  228. package/dist/dts/HashMap.d.ts.map +1 -1
  229. package/dist/dts/HashSet.d.ts +0 -1
  230. package/dist/dts/HashSet.d.ts.map +1 -1
  231. package/dist/dts/Iterable.d.ts +12 -5
  232. package/dist/dts/Iterable.d.ts.map +1 -1
  233. package/dist/dts/Layer.d.ts +6 -6
  234. package/dist/dts/Layer.d.ts.map +1 -1
  235. package/dist/dts/List.d.ts +0 -11
  236. package/dist/dts/List.d.ts.map +1 -1
  237. package/dist/dts/Logger.d.ts +2 -2
  238. package/dist/dts/Logger.d.ts.map +1 -1
  239. package/dist/dts/Metric.d.ts +7 -2
  240. package/dist/dts/Metric.d.ts.map +1 -1
  241. package/dist/dts/MetricKey.d.ts +4 -1
  242. package/dist/dts/MetricKey.d.ts.map +1 -1
  243. package/dist/dts/MetricKeyType.d.ts +4 -1
  244. package/dist/dts/MetricKeyType.d.ts.map +1 -1
  245. package/dist/dts/MutableHashMap.d.ts.map +1 -1
  246. package/dist/dts/Option.d.ts +5 -3
  247. package/dist/dts/Option.d.ts.map +1 -1
  248. package/dist/dts/Order.d.ts.map +1 -1
  249. package/dist/dts/{ReadonlyRecord.d.ts → Record.d.ts} +29 -30
  250. package/dist/dts/Record.d.ts.map +1 -0
  251. package/dist/dts/Request.d.ts +1 -1
  252. package/dist/dts/Request.d.ts.map +1 -1
  253. package/dist/dts/RequestResolver.d.ts +2 -2
  254. package/dist/dts/RequestResolver.d.ts.map +1 -1
  255. package/dist/dts/STM.d.ts +6 -4
  256. package/dist/dts/STM.d.ts.map +1 -1
  257. package/dist/dts/Schedule.d.ts +1 -1
  258. package/dist/dts/Scheduler.d.ts.map +1 -1
  259. package/dist/dts/ScopedCache.d.ts +9 -9
  260. package/dist/dts/ScopedCache.d.ts.map +1 -1
  261. package/dist/dts/SortedMap.d.ts.map +1 -1
  262. package/dist/dts/SortedSet.d.ts +1 -1
  263. package/dist/dts/SortedSet.d.ts.map +1 -1
  264. package/dist/dts/Stream.d.ts +8 -6
  265. package/dist/dts/Stream.d.ts.map +1 -1
  266. package/dist/dts/StreamHaltStrategy.d.ts +14 -2
  267. package/dist/dts/StreamHaltStrategy.d.ts.map +1 -1
  268. package/dist/dts/String.d.ts +25 -1
  269. package/dist/dts/String.d.ts.map +1 -1
  270. package/dist/dts/Subscribable.d.ts.map +1 -1
  271. package/dist/dts/TestAnnotation.d.ts.map +1 -1
  272. package/dist/dts/TestAnnotationMap.d.ts.map +1 -1
  273. package/dist/dts/TestAnnotations.d.ts +0 -3
  274. package/dist/dts/TestAnnotations.d.ts.map +1 -1
  275. package/dist/dts/TestClock.d.ts.map +1 -1
  276. package/dist/dts/TestLive.d.ts.map +1 -1
  277. package/dist/dts/TestServices.d.ts.map +1 -1
  278. package/dist/dts/TestSized.d.ts.map +1 -1
  279. package/dist/dts/Tracer.d.ts +12 -5
  280. package/dist/dts/Tracer.d.ts.map +1 -1
  281. package/dist/dts/Trie.d.ts +1 -1
  282. package/dist/dts/Trie.d.ts.map +1 -1
  283. package/dist/dts/Types.d.ts +0 -7
  284. package/dist/dts/Types.d.ts.map +1 -1
  285. package/dist/dts/index.d.ts +11 -7
  286. package/dist/dts/index.d.ts.map +1 -1
  287. package/dist/dts/internal/array.d.ts +5 -0
  288. package/dist/dts/internal/array.d.ts.map +1 -0
  289. package/dist/dts/internal/core-stream.d.ts +4 -0
  290. package/dist/dts/internal/core-stream.d.ts.map +1 -1
  291. package/dist/dts/internal/core.d.ts +3 -1
  292. package/dist/dts/internal/core.d.ts.map +1 -1
  293. package/dist/dts/internal/fiber.d.ts +5 -1
  294. package/dist/dts/internal/fiber.d.ts.map +1 -1
  295. package/dist/dts/internal/hashMap.d.ts.map +1 -1
  296. package/dist/dts/internal/logger.d.ts.map +1 -1
  297. package/dist/dts/internal/metric/keyType.d.ts +3 -1
  298. package/dist/dts/internal/metric/keyType.d.ts.map +1 -1
  299. package/dist/dts/internal/metric/state.d.ts.map +1 -1
  300. package/dist/dts/internal/random.d.ts.map +1 -1
  301. package/dist/dts/internal/runtimeFlags.d.ts.map +1 -1
  302. package/dist/dts/internal/stm/stm/tExit.d.ts +4 -1
  303. package/dist/dts/internal/stm/stm/tExit.d.ts.map +1 -1
  304. package/dist/dts/internal/stm/stm.d.ts +3 -0
  305. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  306. package/dist/dts/internal/stream.d.ts +5 -1
  307. package/dist/dts/internal/stream.d.ts.map +1 -1
  308. package/dist/esm/{ReadonlyArray.js → Array.js} +42 -20
  309. package/dist/esm/Array.js.map +1 -0
  310. package/dist/esm/Brand.js +2 -2
  311. package/dist/esm/Brand.js.map +1 -1
  312. package/dist/esm/Channel.js +4 -2
  313. package/dist/esm/Channel.js.map +1 -1
  314. package/dist/esm/Chunk.js +4 -1
  315. package/dist/esm/Chunk.js.map +1 -1
  316. package/dist/esm/ConfigError.js.map +1 -1
  317. package/dist/esm/Cron.js +13 -13
  318. package/dist/esm/Cron.js.map +1 -1
  319. package/dist/esm/Effect.js +11 -2
  320. package/dist/esm/Effect.js.map +1 -1
  321. package/dist/esm/Either.js +4 -1
  322. package/dist/esm/Either.js.map +1 -1
  323. package/dist/esm/ExecutionStrategy.js.map +1 -1
  324. package/dist/esm/Exit.js +4 -2
  325. package/dist/esm/Exit.js.map +1 -1
  326. package/dist/esm/Fiber.js +3 -1
  327. package/dist/esm/Fiber.js.map +1 -1
  328. package/dist/esm/FiberHandle.js +247 -0
  329. package/dist/esm/FiberHandle.js.map +1 -0
  330. package/dist/esm/FiberMap.js +85 -26
  331. package/dist/esm/FiberMap.js.map +1 -1
  332. package/dist/esm/FiberRefs.js.map +1 -1
  333. package/dist/esm/FiberSet.js +51 -15
  334. package/dist/esm/FiberSet.js.map +1 -1
  335. package/dist/esm/HashMap.js.map +1 -1
  336. package/dist/esm/HashSet.js.map +1 -1
  337. package/dist/esm/Iterable.js +39 -4
  338. package/dist/esm/Iterable.js.map +1 -1
  339. package/dist/esm/Layer.js.map +1 -1
  340. package/dist/esm/List.js +3 -3
  341. package/dist/esm/List.js.map +1 -1
  342. package/dist/esm/Metric.js +3 -1
  343. package/dist/esm/Metric.js.map +1 -1
  344. package/dist/esm/MetricKey.js.map +1 -1
  345. package/dist/esm/MetricKeyType.js.map +1 -1
  346. package/dist/esm/MutableHashMap.js +0 -3
  347. package/dist/esm/MutableHashMap.js.map +1 -1
  348. package/dist/esm/Option.js +4 -2
  349. package/dist/esm/Option.js.map +1 -1
  350. package/dist/esm/{ReadonlyRecord.js → Record.js} +29 -29
  351. package/dist/esm/Record.js.map +1 -0
  352. package/dist/esm/STM.js +5 -3
  353. package/dist/esm/STM.js.map +1 -1
  354. package/dist/esm/Schedule.js +1 -1
  355. package/dist/esm/Schedule.js.map +1 -1
  356. package/dist/esm/ScopedCache.js.map +1 -1
  357. package/dist/esm/Stream.js +5 -3
  358. package/dist/esm/Stream.js.map +1 -1
  359. package/dist/esm/StreamHaltStrategy.js +2 -0
  360. package/dist/esm/StreamHaltStrategy.js.map +1 -1
  361. package/dist/esm/String.js +37 -1
  362. package/dist/esm/String.js.map +1 -1
  363. package/dist/esm/TestAnnotations.js +1 -1
  364. package/dist/esm/TestAnnotations.js.map +1 -1
  365. package/dist/esm/TestClock.js +3 -3
  366. package/dist/esm/TestClock.js.map +1 -1
  367. package/dist/esm/Tracer.js.map +1 -1
  368. package/dist/esm/index.js +11 -7
  369. package/dist/esm/index.js.map +1 -1
  370. package/dist/esm/internal/{readonlyArray.js → array.js} +1 -1
  371. package/dist/esm/internal/array.js.map +1 -0
  372. package/dist/esm/internal/cache.js +3 -3
  373. package/dist/esm/internal/cache.js.map +1 -1
  374. package/dist/esm/internal/cause.js +3 -3
  375. package/dist/esm/internal/cause.js.map +1 -1
  376. package/dist/esm/internal/channel/channelExecutor.js +15 -15
  377. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  378. package/dist/esm/internal/channel/channelState.js +1 -1
  379. package/dist/esm/internal/channel/channelState.js.map +1 -1
  380. package/dist/esm/internal/channel/singleProducerAsyncInput.js +1 -1
  381. package/dist/esm/internal/channel/singleProducerAsyncInput.js.map +1 -1
  382. package/dist/esm/internal/channel.js +8 -8
  383. package/dist/esm/internal/channel.js.map +1 -1
  384. package/dist/esm/internal/clock.js +2 -2
  385. package/dist/esm/internal/clock.js.map +1 -1
  386. package/dist/esm/internal/configError.js +20 -19
  387. package/dist/esm/internal/configError.js.map +1 -1
  388. package/dist/esm/internal/configProvider/pathPatch.js +1 -1
  389. package/dist/esm/internal/configProvider/pathPatch.js.map +1 -1
  390. package/dist/esm/internal/configProvider.js +46 -47
  391. package/dist/esm/internal/configProvider.js.map +1 -1
  392. package/dist/esm/internal/core-effect.js +39 -26
  393. package/dist/esm/internal/core-effect.js.map +1 -1
  394. package/dist/esm/internal/core-stream.js +3 -2
  395. package/dist/esm/internal/core-stream.js.map +1 -1
  396. package/dist/esm/internal/core.js +24 -26
  397. package/dist/esm/internal/core.js.map +1 -1
  398. package/dist/esm/internal/dataSource.js +19 -2
  399. package/dist/esm/internal/dataSource.js.map +1 -1
  400. package/dist/esm/internal/differ/readonlyArrayPatch.js +6 -6
  401. package/dist/esm/internal/differ/readonlyArrayPatch.js.map +1 -1
  402. package/dist/esm/internal/effect/circular.js +1 -1
  403. package/dist/esm/internal/effect/circular.js.map +1 -1
  404. package/dist/esm/internal/executionStrategy.js +4 -4
  405. package/dist/esm/internal/executionStrategy.js.map +1 -1
  406. package/dist/esm/internal/fiber.js +6 -5
  407. package/dist/esm/internal/fiber.js.map +1 -1
  408. package/dist/esm/internal/fiberRefs/patch.js +1 -1
  409. package/dist/esm/internal/fiberRefs/patch.js.map +1 -1
  410. package/dist/esm/internal/fiberRefs.js +1 -1
  411. package/dist/esm/internal/fiberRefs.js.map +1 -1
  412. package/dist/esm/internal/fiberRuntime.js +33 -33
  413. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  414. package/dist/esm/internal/groupBy.js +3 -3
  415. package/dist/esm/internal/groupBy.js.map +1 -1
  416. package/dist/esm/internal/hashMap.js.map +1 -1
  417. package/dist/esm/internal/hashSet.js.map +1 -1
  418. package/dist/esm/internal/layer/circular.js.map +1 -1
  419. package/dist/esm/internal/layer.js +5 -5
  420. package/dist/esm/internal/layer.js.map +1 -1
  421. package/dist/esm/internal/logger.js +28 -8
  422. package/dist/esm/internal/logger.js.map +1 -1
  423. package/dist/esm/internal/managedRuntime.js +1 -1
  424. package/dist/esm/internal/managedRuntime.js.map +1 -1
  425. package/dist/esm/internal/metric/boundaries.js +4 -4
  426. package/dist/esm/internal/metric/boundaries.js.map +1 -1
  427. package/dist/esm/internal/metric/hook.js +20 -17
  428. package/dist/esm/internal/metric/hook.js.map +1 -1
  429. package/dist/esm/internal/metric/key.js +4 -4
  430. package/dist/esm/internal/metric/key.js.map +1 -1
  431. package/dist/esm/internal/metric/keyType.js +5 -1
  432. package/dist/esm/internal/metric/keyType.js.map +1 -1
  433. package/dist/esm/internal/metric/state.js +4 -4
  434. package/dist/esm/internal/metric/state.js.map +1 -1
  435. package/dist/esm/internal/metric.js +4 -4
  436. package/dist/esm/internal/metric.js.map +1 -1
  437. package/dist/esm/internal/pool.js +11 -11
  438. package/dist/esm/internal/pool.js.map +1 -1
  439. package/dist/esm/internal/pubsub.js +5 -5
  440. package/dist/esm/internal/pubsub.js.map +1 -1
  441. package/dist/esm/internal/query.js +2 -2
  442. package/dist/esm/internal/query.js.map +1 -1
  443. package/dist/esm/internal/queue.js +9 -9
  444. package/dist/esm/internal/queue.js.map +1 -1
  445. package/dist/esm/internal/rateLimiter.js +1 -1
  446. package/dist/esm/internal/rateLimiter.js.map +1 -1
  447. package/dist/esm/internal/redBlackTree/iterator.js +2 -2
  448. package/dist/esm/internal/redBlackTree/iterator.js.map +1 -1
  449. package/dist/esm/internal/reloadable.js +1 -1
  450. package/dist/esm/internal/reloadable.js.map +1 -1
  451. package/dist/esm/internal/runtime.js +4 -4
  452. package/dist/esm/internal/runtime.js.map +1 -1
  453. package/dist/esm/internal/schedule.js +3 -3
  454. package/dist/esm/internal/schedule.js.map +1 -1
  455. package/dist/esm/internal/scopedCache.js +7 -7
  456. package/dist/esm/internal/scopedCache.js.map +1 -1
  457. package/dist/esm/internal/scopedRef.js +4 -4
  458. package/dist/esm/internal/scopedRef.js.map +1 -1
  459. package/dist/esm/internal/secret.js +2 -2
  460. package/dist/esm/internal/secret.js.map +1 -1
  461. package/dist/esm/internal/sink.js +10 -10
  462. package/dist/esm/internal/sink.js.map +1 -1
  463. package/dist/esm/internal/stm/stm/tExit.js +3 -2
  464. package/dist/esm/internal/stm/stm/tExit.js.map +1 -1
  465. package/dist/esm/internal/stm/stm.js +11 -9
  466. package/dist/esm/internal/stm/stm.js.map +1 -1
  467. package/dist/esm/internal/stm/tMap.js +3 -3
  468. package/dist/esm/internal/stm/tMap.js.map +1 -1
  469. package/dist/esm/internal/stm/tPriorityQueue.js +11 -11
  470. package/dist/esm/internal/stm/tPriorityQueue.js.map +1 -1
  471. package/dist/esm/internal/stm/tPubSub.js +3 -3
  472. package/dist/esm/internal/stm/tPubSub.js.map +1 -1
  473. package/dist/esm/internal/stm/tQueue.js +3 -3
  474. package/dist/esm/internal/stm/tQueue.js.map +1 -1
  475. package/dist/esm/internal/stm/tSet.js +1 -1
  476. package/dist/esm/internal/stm/tSet.js.map +1 -1
  477. package/dist/esm/internal/stream/haltStrategy.js +5 -5
  478. package/dist/esm/internal/stream/haltStrategy.js.map +1 -1
  479. package/dist/esm/internal/stream.js +85 -84
  480. package/dist/esm/internal/stream.js.map +1 -1
  481. package/dist/esm/internal/supervisor.js +1 -1
  482. package/dist/esm/internal/supervisor.js.map +1 -1
  483. package/dist/esm/internal/take.js +1 -1
  484. package/dist/esm/internal/take.js.map +1 -1
  485. package/dist/esm/internal/tracer.js.map +1 -1
  486. package/dist/esm/internal/trie.js.map +1 -1
  487. package/dist/esm/internal/version.js +1 -1
  488. package/dist/esm/internal/version.js.map +1 -1
  489. package/package.json +23 -15
  490. package/src/{ReadonlyArray.ts → Array.ts} +47 -24
  491. package/src/Brand.ts +3 -3
  492. package/src/Cache.ts +12 -10
  493. package/src/Cause.ts +1 -1
  494. package/src/Channel.ts +12 -9
  495. package/src/Chunk.ts +3 -3
  496. package/src/ConfigError.ts +7 -6
  497. package/src/Cron.ts +17 -17
  498. package/src/Effect.ts +46 -57
  499. package/src/Either.ts +7 -7
  500. package/src/ExecutionStrategy.ts +10 -2
  501. package/src/Exit.ts +11 -9
  502. package/src/Fiber.ts +11 -8
  503. package/src/FiberHandle.ts +414 -0
  504. package/src/FiberMap.ts +181 -73
  505. package/src/FiberRefs.ts +1 -1
  506. package/src/FiberSet.ts +96 -36
  507. package/src/GroupBy.ts +1 -1
  508. package/src/HashMap.ts +0 -1
  509. package/src/HashSet.ts +0 -1
  510. package/src/Iterable.ts +48 -10
  511. package/src/Layer.ts +6 -6
  512. package/src/List.ts +3 -4
  513. package/src/Logger.ts +2 -2
  514. package/src/Metric.ts +9 -2
  515. package/src/MetricKey.ts +9 -1
  516. package/src/MetricKeyType.ts +6 -1
  517. package/src/MutableHashMap.ts +1 -1
  518. package/src/Option.ts +9 -6
  519. package/src/{ReadonlyRecord.ts → Record.ts} +28 -29
  520. package/src/Request.ts +1 -1
  521. package/src/RequestResolver.ts +4 -4
  522. package/src/STM.ts +12 -9
  523. package/src/Schedule.ts +1 -1
  524. package/src/ScopedCache.ts +11 -9
  525. package/src/SortedSet.ts +1 -1
  526. package/src/Stream.ts +14 -11
  527. package/src/StreamHaltStrategy.ts +14 -2
  528. package/src/String.ts +45 -2
  529. package/src/TestAnnotations.ts +1 -1
  530. package/src/TestClock.ts +3 -3
  531. package/src/Tracer.ts +13 -5
  532. package/src/Trie.ts +1 -1
  533. package/src/Types.ts +0 -8
  534. package/src/index.ts +13 -8
  535. package/src/internal/{readonlyArray.ts → array.ts} +1 -1
  536. package/src/internal/cache.ts +40 -40
  537. package/src/internal/cause.ts +5 -6
  538. package/src/internal/channel/channelExecutor.ts +15 -15
  539. package/src/internal/channel/channelState.ts +1 -1
  540. package/src/internal/channel/singleProducerAsyncInput.ts +1 -1
  541. package/src/internal/channel.ts +11 -11
  542. package/src/internal/clock.ts +2 -2
  543. package/src/internal/configError.ts +22 -21
  544. package/src/internal/configProvider/pathPatch.ts +1 -1
  545. package/src/internal/configProvider.ts +49 -52
  546. package/src/internal/core-effect.ts +73 -70
  547. package/src/internal/core-stream.ts +5 -2
  548. package/src/internal/core.ts +51 -50
  549. package/src/internal/dataSource.ts +19 -20
  550. package/src/internal/differ/readonlyArrayPatch.ts +6 -6
  551. package/src/internal/effect/circular.ts +2 -2
  552. package/src/internal/executionStrategy.ts +14 -12
  553. package/src/internal/fiber.ts +8 -5
  554. package/src/internal/fiberRefs/patch.ts +1 -1
  555. package/src/internal/fiberRefs.ts +1 -1
  556. package/src/internal/fiberRuntime.ts +45 -45
  557. package/src/internal/groupBy.ts +4 -4
  558. package/src/internal/hashMap.ts +0 -1
  559. package/src/internal/hashSet.ts +0 -1
  560. package/src/internal/layer/circular.ts +2 -2
  561. package/src/internal/layer.ts +9 -9
  562. package/src/internal/logger.ts +28 -8
  563. package/src/internal/managedRuntime.ts +1 -1
  564. package/src/internal/metric/boundaries.ts +5 -5
  565. package/src/internal/metric/hook.ts +21 -18
  566. package/src/internal/metric/key.ts +8 -5
  567. package/src/internal/metric/keyType.ts +5 -2
  568. package/src/internal/metric/state.ts +5 -5
  569. package/src/internal/metric.ts +8 -6
  570. package/src/internal/pool.ts +11 -11
  571. package/src/internal/pubsub.ts +6 -6
  572. package/src/internal/query.ts +4 -4
  573. package/src/internal/queue.ts +11 -11
  574. package/src/internal/rateLimiter.ts +1 -1
  575. package/src/internal/redBlackTree/iterator.ts +2 -2
  576. package/src/internal/reloadable.ts +1 -1
  577. package/src/internal/runtime.ts +5 -5
  578. package/src/internal/schedule.ts +8 -9
  579. package/src/internal/scopedCache.ts +53 -53
  580. package/src/internal/scopedRef.ts +4 -4
  581. package/src/internal/secret.ts +2 -2
  582. package/src/internal/sink.ts +10 -10
  583. package/src/internal/stm/stm/tExit.ts +5 -2
  584. package/src/internal/stm/stm.ts +13 -9
  585. package/src/internal/stm/tMap.ts +3 -3
  586. package/src/internal/stm/tPriorityQueue.ts +11 -11
  587. package/src/internal/stm/tPubSub.ts +3 -3
  588. package/src/internal/stm/tQueue.ts +3 -3
  589. package/src/internal/stm/tSet.ts +1 -1
  590. package/src/internal/stream/haltStrategy.ts +23 -14
  591. package/src/internal/stream.ts +91 -88
  592. package/src/internal/supervisor.ts +1 -1
  593. package/src/internal/take.ts +1 -1
  594. package/src/internal/tracer.ts +2 -2
  595. package/src/internal/trie.ts +0 -1
  596. package/src/internal/version.ts +1 -1
  597. package/ReadonlyArray/package.json +0 -6
  598. package/ReadonlyRecord/package.json +0 -6
  599. package/dist/cjs/ReadonlyArray.js.map +0 -1
  600. package/dist/cjs/ReadonlyRecord.js.map +0 -1
  601. package/dist/cjs/internal/Iterable.js +0 -61
  602. package/dist/cjs/internal/Iterable.js.map +0 -1
  603. package/dist/cjs/internal/readonlyArray.js.map +0 -1
  604. package/dist/dts/ReadonlyArray.d.ts.map +0 -1
  605. package/dist/dts/ReadonlyRecord.d.ts.map +0 -1
  606. package/dist/dts/internal/Iterable.d.ts +0 -2
  607. package/dist/dts/internal/Iterable.d.ts.map +0 -1
  608. package/dist/dts/internal/readonlyArray.d.ts +0 -5
  609. package/dist/dts/internal/readonlyArray.d.ts.map +0 -1
  610. package/dist/esm/ReadonlyArray.js.map +0 -1
  611. package/dist/esm/ReadonlyRecord.js.map +0 -1
  612. package/dist/esm/internal/Iterable.js +0 -53
  613. package/dist/esm/internal/Iterable.js.map +0 -1
  614. package/dist/esm/internal/readonlyArray.js.map +0 -1
  615. package/src/internal/Iterable.ts +0 -54
package/src/FiberMap.ts CHANGED
@@ -13,6 +13,7 @@ import * as FiberRef from "./FiberRef.js"
13
13
  import { dual } from "./Function.js"
14
14
  import * as Inspectable from "./Inspectable.js"
15
15
  import type { FiberRuntime } from "./internal/fiberRuntime.js"
16
+ import * as Iterable from "./Iterable.js"
16
17
  import * as MutableHashMap from "./MutableHashMap.js"
17
18
  import * as Option from "./Option.js"
18
19
  import { type Pipeable, pipeArguments } from "./Pipeable.js"
@@ -39,8 +40,14 @@ export interface FiberMap<in out K, out A = unknown, out E = unknown>
39
40
  extends Pipeable, Inspectable.Inspectable, Iterable<[K, Fiber.RuntimeFiber<A, E>]>
40
41
  {
41
42
  readonly [TypeId]: TypeId
42
- readonly backing: MutableHashMap.MutableHashMap<K, Fiber.RuntimeFiber<A, E>>
43
- readonly deferred: Deferred.Deferred<never, unknown>
43
+ readonly deferred: Deferred.Deferred<void, unknown>
44
+ /** @internal */
45
+ state: {
46
+ readonly _tag: "Open"
47
+ readonly backing: MutableHashMap.MutableHashMap<K, Fiber.RuntimeFiber<A, E>>
48
+ } | {
49
+ readonly _tag: "Closed"
50
+ }
44
51
  }
45
52
 
46
53
  /**
@@ -52,7 +59,10 @@ export const isFiberMap = (u: unknown): u is FiberMap<unknown> => Predicate.hasP
52
59
  const Proto = {
53
60
  [TypeId]: TypeId,
54
61
  [Symbol.iterator](this: FiberMap<unknown>) {
55
- return this.backing[Symbol.iterator]()
62
+ if (this.state._tag === "Closed") {
63
+ return Iterable.empty()
64
+ }
65
+ return this.state.backing[Symbol.iterator]()
56
66
  },
57
67
  toString(this: FiberMap<unknown>) {
58
68
  return Inspectable.format(this.toJSON())
@@ -60,7 +70,7 @@ const Proto = {
60
70
  toJSON(this: FiberMap<unknown>) {
61
71
  return {
62
72
  _id: "FiberMap",
63
- backing: this.backing.toJSON()
73
+ state: this.state
64
74
  }
65
75
  },
66
76
  [Inspectable.NodeInspectSymbol](this: FiberMap<unknown>) {
@@ -73,10 +83,10 @@ const Proto = {
73
83
 
74
84
  const unsafeMake = <K, A = unknown, E = unknown>(
75
85
  backing: MutableHashMap.MutableHashMap<K, Fiber.RuntimeFiber<A, E>>,
76
- deferred: Deferred.Deferred<never, E>
86
+ deferred: Deferred.Deferred<void, E>
77
87
  ): FiberMap<K, A, E> => {
78
88
  const self = Object.create(Proto)
79
- self.backing = backing
89
+ self.state = { _tag: "Open", backing }
80
90
  self.deferred = deferred
81
91
  return self
82
92
  }
@@ -108,12 +118,19 @@ const unsafeMake = <K, A = unknown, E = unknown>(
108
118
  */
109
119
  export const make = <K, A = unknown, E = unknown>(): Effect.Effect<FiberMap<K, A, E>, never, Scope.Scope> =>
110
120
  Effect.acquireRelease(
111
- Effect.map(Deferred.make<never, E>(), (deferred) =>
121
+ Effect.map(Deferred.make<void, E>(), (deferred) =>
112
122
  unsafeMake<K, A, E>(
113
123
  MutableHashMap.empty(),
114
124
  deferred
115
125
  )),
116
- clear
126
+ (map) =>
127
+ Effect.zipRight(
128
+ clear(map),
129
+ Effect.suspend(() => {
130
+ map.state = { _tag: "Closed" }
131
+ return Deferred.done(map.deferred, Exit.void)
132
+ })
133
+ )
117
134
  )
118
135
 
119
136
  /**
@@ -126,7 +143,11 @@ export const makeRuntime = <R, K, E = unknown, A = unknown>(): Effect.Effect<
126
143
  <XE extends E, XA extends A>(
127
144
  key: K,
128
145
  effect: Effect.Effect<XA, XE, R>,
129
- options?: Runtime.RunForkOptions | undefined
146
+ options?:
147
+ | Runtime.RunForkOptions & {
148
+ readonly onlyIfMissing?: boolean | undefined
149
+ }
150
+ | undefined
130
151
  ) => Fiber.RuntimeFiber<XA, XE>,
131
152
  never,
132
153
  Scope.Scope | R
@@ -147,41 +168,54 @@ export const unsafeSet: {
147
168
  <K, A, E, XE extends E, XA extends A>(
148
169
  key: K,
149
170
  fiber: Fiber.RuntimeFiber<XA, XE>,
150
- interruptAs?: FiberId.FiberId
171
+ options?: {
172
+ readonly interruptAs?: FiberId.FiberId | undefined
173
+ readonly onlyIfMissing?: boolean | undefined
174
+ } | undefined
151
175
  ): (self: FiberMap<K, A, E>) => void
152
176
  <K, A, E, XE extends E, XA extends A>(
153
177
  self: FiberMap<K, A, E>,
154
178
  key: K,
155
179
  fiber: Fiber.RuntimeFiber<XA, XE>,
156
- interruptAs?: FiberId.FiberId
180
+ options?: {
181
+ readonly interruptAs?: FiberId.FiberId | undefined
182
+ readonly onlyIfMissing?: boolean | undefined
183
+ } | undefined
157
184
  ): void
158
- } = dual<
159
- <K, A, E, XE extends E, XA extends A>(
160
- key: K,
161
- fiber: Fiber.RuntimeFiber<XA, XE>,
162
- interruptAs?: FiberId.FiberId
163
- ) => (self: FiberMap<K, A, E>) => void,
164
- <K, A, E, XE extends E, XA extends A>(
165
- self: FiberMap<K, A, E>,
166
- key: K,
167
- fiber: Fiber.RuntimeFiber<XA, XE>,
168
- interruptAs?: FiberId.FiberId
169
- ) => void
170
- >((args) => isFiberMap(args[0]), (self, key, fiber, interruptAs) => {
171
- const previous = MutableHashMap.get(self.backing, key)
185
+ } = dual((args) => isFiberMap(args[0]), <K, A, E, XE extends E, XA extends A>(
186
+ self: FiberMap<K, A, E>,
187
+ key: K,
188
+ fiber: Fiber.RuntimeFiber<XA, XE>,
189
+ options?: {
190
+ readonly interruptAs?: FiberId.FiberId | undefined
191
+ readonly onlyIfMissing?: boolean | undefined
192
+ } | undefined
193
+ ): void => {
194
+ if (self.state._tag === "Closed") {
195
+ fiber.unsafeInterruptAsFork(options?.interruptAs ?? FiberId.none)
196
+ return
197
+ }
198
+
199
+ const previous = MutableHashMap.get(self.state.backing, key)
172
200
  if (previous._tag === "Some") {
173
- if (previous.value === fiber) {
201
+ if (options?.onlyIfMissing === true) {
202
+ fiber.unsafeInterruptAsFork(options?.interruptAs ?? FiberId.none)
203
+ return
204
+ } else if (previous.value === fiber) {
174
205
  return
175
206
  }
176
- previous.value.unsafeInterruptAsFork(interruptAs ?? FiberId.none)
207
+ previous.value.unsafeInterruptAsFork(options?.interruptAs ?? FiberId.none)
177
208
  }
178
209
 
179
210
  ;(fiber as FiberRuntime<unknown, unknown>).setFiberRef(FiberRef.unhandledErrorLogLevel, Option.none())
180
- MutableHashMap.set(self.backing, key, fiber)
211
+ MutableHashMap.set(self.state.backing, key, fiber)
181
212
  fiber.addObserver((exit) => {
182
- const current = MutableHashMap.get(self.backing, key)
213
+ if (self.state._tag === "Closed") {
214
+ return
215
+ }
216
+ const current = MutableHashMap.get(self.state.backing, key)
183
217
  if (Option.isSome(current) && fiber === current.value) {
184
- MutableHashMap.remove(self.backing, key)
218
+ MutableHashMap.remove(self.state.backing, key)
185
219
  }
186
220
  if (Exit.isFailure(exit) && !Cause.isInterruptedOnly(exit.cause)) {
187
221
  Deferred.unsafeDone(self.deferred, exit as any)
@@ -199,26 +233,35 @@ export const unsafeSet: {
199
233
  export const set: {
200
234
  <K, A, E, XE extends E, XA extends A>(
201
235
  key: K,
202
- fiber: Fiber.RuntimeFiber<XA, XE>
236
+ fiber: Fiber.RuntimeFiber<XA, XE>,
237
+ options?: {
238
+ readonly onlyIfMissing?: boolean | undefined
239
+ } | undefined
203
240
  ): (self: FiberMap<K, A, E>) => Effect.Effect<void>
204
241
  <K, A, E, XE extends E, XA extends A>(
205
242
  self: FiberMap<K, A, E>,
206
243
  key: K,
207
- fiber: Fiber.RuntimeFiber<XA, XE>
244
+ fiber: Fiber.RuntimeFiber<XA, XE>,
245
+ options?: {
246
+ readonly onlyIfMissing?: boolean | undefined
247
+ } | undefined
208
248
  ): Effect.Effect<void>
209
- } = dual<
210
- <K, A, E, XE extends E, XA extends A>(
211
- key: K,
212
- fiber: Fiber.RuntimeFiber<XA, XE>
213
- ) => (self: FiberMap<K, A, E>) => Effect.Effect<void>,
214
- <K, A, E, XE extends E, XA extends A>(
215
- self: FiberMap<K, A, E>,
216
- key: K,
217
- fiber: Fiber.RuntimeFiber<XA, XE>
218
- ) => Effect.Effect<void>
219
- >(3, (self, key, fiber) =>
249
+ } = dual((args) => isFiberMap(args[0]), <K, A, E, XE extends E, XA extends A>(
250
+ self: FiberMap<K, A, E>,
251
+ key: K,
252
+ fiber: Fiber.RuntimeFiber<XA, XE>,
253
+ options?: {
254
+ readonly onlyIfMissing?: boolean | undefined
255
+ } | undefined
256
+ ): Effect.Effect<void> =>
220
257
  Effect.fiberIdWith(
221
- (fiberId) => Effect.sync(() => unsafeSet(self, key, fiber, fiberId))
258
+ (fiberId) =>
259
+ Effect.sync(() =>
260
+ unsafeSet(self, key, fiber, {
261
+ interruptAs: fiberId,
262
+ onlyIfMissing: options?.onlyIfMissing
263
+ })
264
+ )
222
265
  ))
223
266
 
224
267
  /**
@@ -238,7 +281,7 @@ export const unsafeGet: {
238
281
  self: FiberMap<K, A, E>,
239
282
  key: K
240
283
  ) => Option.Option<Fiber.RuntimeFiber<A, E>>
241
- >(2, (self, key) => MutableHashMap.get(self.backing, key))
284
+ >(2, (self, key) => self.state._tag === "Closed" ? Option.none() : MutableHashMap.get(self.state.backing, key))
242
285
 
243
286
  /**
244
287
  * Retrieve a fiber from the FiberMap.
@@ -257,7 +300,36 @@ export const get: {
257
300
  self: FiberMap<K, A, E>,
258
301
  key: K
259
302
  ) => Effect.Effect<Fiber.RuntimeFiber<A, E>, NoSuchElementException>
260
- >(2, (self, key) => Effect.suspend(() => MutableHashMap.get(self.backing, key)))
303
+ >(2, (self, key) => Effect.suspend(() => unsafeGet(self, key)))
304
+
305
+ /**
306
+ * Check if a key exists in the FiberMap.
307
+ *
308
+ * @since 2.0.0
309
+ * @categories combinators
310
+ */
311
+ export const unsafeHas: {
312
+ <K>(key: K): <A, E>(self: FiberMap<K, A, E>) => boolean
313
+ <K, A, E>(self: FiberMap<K, A, E>, key: K): boolean
314
+ } = dual(
315
+ 2,
316
+ <K, A, E>(self: FiberMap<K, A, E>, key: K): boolean =>
317
+ self.state._tag === "Closed" ? false : MutableHashMap.has(self.state.backing, key)
318
+ )
319
+
320
+ /**
321
+ * Check if a key exists in the FiberMap.
322
+ *
323
+ * @since 2.0.0
324
+ * @categories combinators
325
+ */
326
+ export const has: {
327
+ <K>(key: K): <A, E>(self: FiberMap<K, A, E>) => Effect.Effect<boolean>
328
+ <K, A, E>(self: FiberMap<K, A, E>, key: K): Effect.Effect<boolean>
329
+ } = dual(
330
+ 2,
331
+ <K, A, E>(self: FiberMap<K, A, E>, key: K): Effect.Effect<boolean> => Effect.sync(() => unsafeHas(self, key))
332
+ )
261
333
 
262
334
  /**
263
335
  * Remove a fiber from the FiberMap, interrupting it if it exists.
@@ -278,11 +350,14 @@ export const remove: {
278
350
  ) => Effect.Effect<void>
279
351
  >(2, (self, key) =>
280
352
  Effect.suspend(() => {
281
- const fiber = MutableHashMap.get(self.backing, key)
353
+ if (self.state._tag === "Closed") {
354
+ return Effect.void
355
+ }
356
+ const fiber = MutableHashMap.get(self.state.backing, key)
282
357
  if (fiber._tag === "None") {
283
- return Effect.unit
358
+ return Effect.void
284
359
  }
285
- MutableHashMap.remove(self.backing, key)
360
+ // will be removed by the observer
286
361
  return Fiber.interrupt(fiber.value)
287
362
  }))
288
363
 
@@ -291,12 +366,15 @@ export const remove: {
291
366
  * @categories combinators
292
367
  */
293
368
  export const clear = <K, A, E>(self: FiberMap<K, A, E>): Effect.Effect<void> =>
294
- Effect.zipRight(
295
- Effect.forEach(self.backing, ([_, fiber]) => Fiber.interrupt(fiber)),
296
- Effect.sync(() => {
297
- MutableHashMap.clear(self.backing)
298
- })
299
- )
369
+ Effect.suspend(() => {
370
+ if (self.state._tag === "Closed") {
371
+ return Effect.void
372
+ }
373
+
374
+ return Effect.forEach(self.state.backing, ([, fiber]) =>
375
+ // will be removed by the observer
376
+ Fiber.interrupt(fiber))
377
+ })
300
378
 
301
379
  /**
302
380
  * Run an Effect and add the forked fiber to the FiberMap.
@@ -308,32 +386,54 @@ export const clear = <K, A, E>(self: FiberMap<K, A, E>): Effect.Effect<void> =>
308
386
  export const run: {
309
387
  <K, A, E>(
310
388
  self: FiberMap<K, A, E>,
311
- key: K
389
+ key: K,
390
+ options?: {
391
+ readonly onlyIfMissing?: boolean | undefined
392
+ } | undefined
312
393
  ): <R, XE extends E, XA extends A>(
313
394
  effect: Effect.Effect<XA, XE, R>
314
395
  ) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>
315
396
  <K, A, E, R, XE extends E, XA extends A>(
316
397
  self: FiberMap<K, A, E>,
317
398
  key: K,
318
- effect: Effect.Effect<XA, XE, R>
399
+ effect: Effect.Effect<XA, XE, R>,
400
+ options?: {
401
+ readonly onlyIfMissing?: boolean | undefined
402
+ } | undefined
319
403
  ): Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>
320
404
  } = function() {
321
- if (arguments.length === 2) {
405
+ if (Effect.isEffect(arguments[2])) {
322
406
  const self = arguments[0] as FiberMap<any>
323
407
  const key = arguments[1]
324
- return (effect: Effect.Effect<any, any, any>) =>
325
- Effect.tap(
326
- Effect.forkDaemon(effect),
327
- (fiber) => set(self, key, fiber)
408
+ const effect = arguments[2] as Effect.Effect<any, any, any>
409
+ const options = arguments[3] as { readonly onlyIfMissing?: boolean } | undefined
410
+ return Effect.suspend(() => {
411
+ if (self.state._tag === "Closed") {
412
+ return Effect.interrupt
413
+ }
414
+ return Effect.uninterruptibleMask((restore) =>
415
+ Effect.tap(
416
+ restore(Effect.forkDaemon(effect)),
417
+ (fiber) => set(self, key, fiber, options)
418
+ )
328
419
  )
420
+ }) as any
329
421
  }
330
422
  const self = arguments[0] as FiberMap<any>
331
423
  const key = arguments[1]
332
- const effect = arguments[2] as Effect.Effect<any, any, any>
333
- return Effect.tap(
334
- Effect.forkDaemon(effect),
335
- (fiber) => set(self, key, fiber)
336
- ) as any
424
+ const options = arguments[2] as { readonly onlyIfMissing?: boolean } | undefined
425
+ return (effect: Effect.Effect<any, any, any>) =>
426
+ Effect.suspend(() => {
427
+ if (self.state._tag === "Closed") {
428
+ return Effect.interrupt
429
+ }
430
+ return Effect.uninterruptibleMask((restore) =>
431
+ Effect.tap(
432
+ restore(Effect.forkDaemon(effect)),
433
+ (fiber) => set(self, key, fiber, options)
434
+ )
435
+ )
436
+ })
337
437
  }
338
438
 
339
439
  /**
@@ -369,7 +469,11 @@ export const runtime: <K, A, E>(
369
469
  <XE extends E, XA extends A>(
370
470
  key: K,
371
471
  effect: Effect.Effect<XA, XE, R>,
372
- options?: Runtime.RunForkOptions | undefined
472
+ options?:
473
+ | Runtime.RunForkOptions & {
474
+ readonly onlyIfMissing?: boolean | undefined
475
+ }
476
+ | undefined
373
477
  ) => Fiber.RuntimeFiber<XA, XE>,
374
478
  never,
375
479
  R
@@ -381,10 +485,14 @@ export const runtime: <K, A, E>(
381
485
  return <XE extends E, XA extends A>(
382
486
  key: K,
383
487
  effect: Effect.Effect<XA, XE, R>,
384
- options?: Runtime.RunForkOptions | undefined
488
+ options?:
489
+ | Runtime.RunForkOptions & {
490
+ readonly onlyIfMissing?: boolean | undefined
491
+ }
492
+ | undefined
385
493
  ) => {
386
494
  const fiber = runFork(effect, options)
387
- unsafeSet(self, key, fiber)
495
+ unsafeSet(self, key, fiber, options)
388
496
  return fiber
389
497
  }
390
498
  }
@@ -395,7 +503,7 @@ export const runtime: <K, A, E>(
395
503
  * @categories combinators
396
504
  */
397
505
  export const size = <K, A, E>(self: FiberMap<K, A, E>): Effect.Effect<number> =>
398
- Effect.sync(() => MutableHashMap.size(self.backing))
506
+ Effect.sync(() => self.state._tag === "Closed" ? 0 : MutableHashMap.size(self.state.backing))
399
507
 
400
508
  /**
401
509
  * Join all fibers in the FiberMap. If any of the Fiber's in the map terminate with a failure,
@@ -414,5 +522,5 @@ export const size = <K, A, E>(self: FiberMap<K, A, E>): Effect.Effect<number> =>
414
522
  * yield* _(FiberMap.join(map));
415
523
  * });
416
524
  */
417
- export const join = <K, A, E>(self: FiberMap<K, A, E>): Effect.Effect<never, E> =>
418
- Deferred.await(self.deferred as Deferred.Deferred<never, E>)
525
+ export const join = <K, A, E>(self: FiberMap<K, A, E>): Effect.Effect<void, E> =>
526
+ Deferred.await(self.deferred as Deferred.Deferred<void, E>)
package/src/FiberRefs.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @since 2.0.0
3
3
  */
4
+ import type * as Arr from "./Array.js"
4
5
  import type * as Effect from "./Effect.js"
5
6
  import type * as FiberId from "./FiberId.js"
6
7
  import type * as FiberRef from "./FiberRef.js"
@@ -8,7 +9,6 @@ import type * as HashSet from "./HashSet.js"
8
9
  import * as internal from "./internal/fiberRefs.js"
9
10
  import type * as Option from "./Option.js"
10
11
  import type { Pipeable } from "./Pipeable.js"
11
- import type * as Arr from "./ReadonlyArray.js"
12
12
 
13
13
  /**
14
14
  * @since 2.0.0
package/src/FiberSet.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  * @since 2.0.0
3
3
  */
4
4
  import * as Effect from "effect/Effect"
5
+ import * as FiberId from "effect/FiberId"
5
6
  import type * as Scope from "effect/Scope"
6
7
  import * as Cause from "./Cause.js"
7
8
  import * as Deferred from "./Deferred.js"
@@ -11,6 +12,7 @@ import * as FiberRef from "./FiberRef.js"
11
12
  import { dual } from "./Function.js"
12
13
  import * as Inspectable from "./Inspectable.js"
13
14
  import type { FiberRuntime } from "./internal/fiberRuntime.js"
15
+ import * as Iterable from "./Iterable.js"
14
16
  import * as Option from "./Option.js"
15
17
  import { type Pipeable, pipeArguments } from "./Pipeable.js"
16
18
  import * as Predicate from "./Predicate.js"
@@ -36,8 +38,14 @@ export interface FiberSet<out A = unknown, out E = unknown>
36
38
  extends Pipeable, Inspectable.Inspectable, Iterable<Fiber.RuntimeFiber<A, E>>
37
39
  {
38
40
  readonly [TypeId]: TypeId
39
- readonly backing: Set<Fiber.RuntimeFiber<A, E>>
40
- readonly deferred: Deferred.Deferred<never, unknown>
41
+ readonly deferred: Deferred.Deferred<void, unknown>
42
+ /** @internal */
43
+ state: {
44
+ readonly _tag: "Open"
45
+ readonly backing: Set<Fiber.RuntimeFiber<A, E>>
46
+ } | {
47
+ readonly _tag: "Closed"
48
+ }
41
49
  }
42
50
 
43
51
  /**
@@ -49,7 +57,10 @@ export const isFiberSet = (u: unknown): u is FiberSet<unknown, unknown> => Predi
49
57
  const Proto = {
50
58
  [TypeId]: TypeId,
51
59
  [Symbol.iterator](this: FiberSet<unknown, unknown>) {
52
- return this.backing[Symbol.iterator]()
60
+ if (this.state._tag === "Closed") {
61
+ return Iterable.empty()
62
+ }
63
+ return this.state.backing[Symbol.iterator]()
53
64
  },
54
65
  toString(this: FiberSet<unknown, unknown>) {
55
66
  return Inspectable.format(this.toJSON())
@@ -57,7 +68,7 @@ const Proto = {
57
68
  toJSON(this: FiberSet<unknown, unknown>) {
58
69
  return {
59
70
  _id: "FiberMap",
60
- backing: Inspectable.toJSON(Array.from(this.backing))
71
+ state: this.state
61
72
  }
62
73
  },
63
74
  [Inspectable.NodeInspectSymbol](this: FiberSet<unknown, unknown>) {
@@ -70,10 +81,10 @@ const Proto = {
70
81
 
71
82
  const unsafeMake = <A, E>(
72
83
  backing: Set<Fiber.RuntimeFiber<A, E>>,
73
- deferred: Deferred.Deferred<never, unknown>
84
+ deferred: Deferred.Deferred<void, unknown>
74
85
  ): FiberSet<A, E> => {
75
86
  const self = Object.create(Proto)
76
- self.backing = backing
87
+ self.state = { _tag: "Open", backing }
77
88
  self.deferred = deferred
78
89
  return self
79
90
  }
@@ -105,8 +116,15 @@ const unsafeMake = <A, E>(
105
116
  */
106
117
  export const make = <A = unknown, E = unknown>(): Effect.Effect<FiberSet<A, E>, never, Scope.Scope> =>
107
118
  Effect.acquireRelease(
108
- Effect.map(Deferred.make<never, unknown>(), (deferred) => unsafeMake(new Set(), deferred)),
109
- clear
119
+ Effect.map(Deferred.make<void, unknown>(), (deferred) => unsafeMake(new Set(), deferred)),
120
+ (set) =>
121
+ Effect.zipRight(
122
+ clear(set),
123
+ Effect.suspend(() => {
124
+ set.state = { _tag: "Closed" }
125
+ return Deferred.done(set.deferred, Exit.void)
126
+ })
127
+ )
110
128
  )
111
129
 
112
130
  /**
@@ -135,24 +153,39 @@ export const makeRuntime = <R = never, A = unknown, E = unknown>(): Effect.Effec
135
153
  * @categories combinators
136
154
  */
137
155
  export const unsafeAdd: {
138
- <A, E, XE extends E, XA extends A>(fiber: Fiber.RuntimeFiber<XA, XE>): (self: FiberSet<A, E>) => void
139
- <A, E, XE extends E, XA extends A>(self: FiberSet<A, E>, fiber: Fiber.RuntimeFiber<XA, XE>): void
140
- } = dual<
141
156
  <A, E, XE extends E, XA extends A>(
142
- fiber: Fiber.RuntimeFiber<XA, XE>
143
- ) => (self: FiberSet<A, E>) => void,
157
+ fiber: Fiber.RuntimeFiber<XA, XE>,
158
+ options?: {
159
+ readonly interruptAs?: FiberId.FiberId | undefined
160
+ } | undefined
161
+ ): (self: FiberSet<A, E>) => void
144
162
  <A, E, XE extends E, XA extends A>(
145
163
  self: FiberSet<A, E>,
146
- fiber: Fiber.RuntimeFiber<XA, XE>
147
- ) => void
148
- >(2, (self, fiber) => {
149
- if (self.backing.has(fiber)) {
164
+ fiber: Fiber.RuntimeFiber<XA, XE>,
165
+ options?: {
166
+ readonly interruptAs?: FiberId.FiberId | undefined
167
+ } | undefined
168
+ ): void
169
+ } = dual((args) => isFiberSet(args[0]), <A, E, XE extends E, XA extends A>(
170
+ self: FiberSet<A, E>,
171
+ fiber: Fiber.RuntimeFiber<XA, XE>,
172
+ options?: {
173
+ readonly interruptAs?: FiberId.FiberId | undefined
174
+ } | undefined
175
+ ): void => {
176
+ if (self.state._tag === "Closed") {
177
+ fiber.unsafeInterruptAsFork(options?.interruptAs ?? FiberId.none)
178
+ return
179
+ } else if (self.state.backing.has(fiber)) {
150
180
  return
151
181
  }
152
182
  ;(fiber as FiberRuntime<unknown, unknown>).setFiberRef(FiberRef.unhandledErrorLogLevel, Option.none())
153
- self.backing.add(fiber)
183
+ self.state.backing.add(fiber)
154
184
  fiber.addObserver((exit) => {
155
- self.backing.delete(fiber)
185
+ if (self.state._tag === "Closed") {
186
+ return
187
+ }
188
+ self.state.backing.delete(fiber)
156
189
  if (Exit.isFailure(exit) && !Cause.isInterruptedOnly(exit.cause)) {
157
190
  Deferred.unsafeDone(self.deferred, exit as any)
158
191
  }
@@ -181,19 +214,31 @@ export const add: {
181
214
  self: FiberSet<A, E>,
182
215
  fiber: Fiber.RuntimeFiber<XA, XE>
183
216
  ) => Effect.Effect<void>
184
- >(2, (self, fiber) => Effect.sync(() => unsafeAdd(self, fiber)))
217
+ >(
218
+ 2,
219
+ (self, fiber) =>
220
+ Effect.fiberIdWith((fiberId) =>
221
+ Effect.sync(() =>
222
+ unsafeAdd(self, fiber, {
223
+ interruptAs: fiberId
224
+ })
225
+ )
226
+ )
227
+ )
185
228
 
186
229
  /**
187
230
  * @since 2.0.0
188
231
  * @categories combinators
189
232
  */
190
233
  export const clear = <A, E>(self: FiberSet<A, E>): Effect.Effect<void> =>
191
- Effect.zipRight(
192
- Effect.forEach(self.backing, (fiber) => Fiber.interrupt(fiber)),
193
- Effect.sync(() => {
194
- self.backing.clear()
195
- })
196
- )
234
+ Effect.suspend(() => {
235
+ if (self.state._tag === "Closed") {
236
+ return Effect.void
237
+ }
238
+ return Effect.forEach(self.state.backing, (fiber) =>
239
+ // will be removed by the observer
240
+ Fiber.interrupt(fiber))
241
+ })
197
242
 
198
243
  /**
199
244
  * Fork an Effect and add the forked fiber to the FiberSet.
@@ -214,16 +259,30 @@ export const run: {
214
259
  const self = arguments[0] as FiberSet<any, any>
215
260
  if (arguments.length === 1) {
216
261
  return (effect: Effect.Effect<any, any, any>) =>
262
+ Effect.suspend(() => {
263
+ if (self.state._tag === "Closed") {
264
+ return Effect.interrupt
265
+ }
266
+ return Effect.uninterruptibleMask((restore) =>
267
+ Effect.tap(
268
+ restore(Effect.forkDaemon(effect)),
269
+ (fiber) => add(self, fiber)
270
+ )
271
+ )
272
+ })
273
+ }
274
+ const effect = arguments[1] as Effect.Effect<any, any, any>
275
+ return Effect.suspend(() => {
276
+ if (self.state._tag === "Closed") {
277
+ return Effect.interrupt
278
+ }
279
+ return Effect.uninterruptibleMask((restore) =>
217
280
  Effect.tap(
218
- Effect.forkDaemon(effect),
281
+ restore(Effect.forkDaemon(effect)),
219
282
  (fiber) => add(self, fiber)
220
283
  )
221
- }
222
- const effect = arguments[1] as Effect.Effect<any, any, any>
223
- return Effect.tap(
224
- Effect.forkDaemon(effect),
225
- (fiber) => add(self, fiber)
226
- ) as any
284
+ )
285
+ }) as any
227
286
  }
228
287
 
229
288
  /**
@@ -281,7 +340,8 @@ export const runtime: <A, E>(
281
340
  * @since 2.0.0
282
341
  * @categories combinators
283
342
  */
284
- export const size = <A, E>(self: FiberSet<A, E>): Effect.Effect<number> => Effect.sync(() => self.backing.size)
343
+ export const size = <A, E>(self: FiberSet<A, E>): Effect.Effect<number> =>
344
+ Effect.sync(() => self.state._tag === "Closed" ? 0 : self.state.backing.size)
285
345
 
286
346
  /**
287
347
  * Join all fibers in the FiberSet. If any of the Fiber's in the set terminate with a failure,
@@ -300,5 +360,5 @@ export const size = <A, E>(self: FiberSet<A, E>): Effect.Effect<number> => Effec
300
360
  * yield* _(FiberSet.join(set));
301
361
  * });
302
362
  */
303
- export const join = <A, E>(self: FiberSet<A, E>): Effect.Effect<never, E> =>
304
- Deferred.await(self.deferred as Deferred.Deferred<never, E>)
363
+ export const join = <A, E>(self: FiberSet<A, E>): Effect.Effect<void, E> =>
364
+ Deferred.await(self.deferred as Deferred.Deferred<void, E>)
package/src/GroupBy.ts CHANGED
@@ -7,7 +7,7 @@ import type { Predicate } from "./Predicate.js"
7
7
  import type * as Queue from "./Queue.js"
8
8
  import type * as Stream from "./Stream.js"
9
9
  import type * as Take from "./Take.js"
10
- import type { Covariant, NoInfer } from "./Types.js"
10
+ import type { Covariant } from "./Types.js"
11
11
 
12
12
  /**
13
13
  * @since 2.0.0
package/src/HashMap.ts CHANGED
@@ -9,7 +9,6 @@ import * as HM from "./internal/hashMap.js"
9
9
  import * as _keySet from "./internal/hashMap/keySet.js"
10
10
  import type { Option } from "./Option.js"
11
11
  import type { Pipeable } from "./Pipeable.js"
12
- import type { NoInfer } from "./Types.js"
13
12
 
14
13
  const TypeId: unique symbol = HM.HashMapTypeId as TypeId
15
14