@typed/fx 2.0.0-beta.4 → 2.0.0-beta.6

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 (663) hide show
  1. package/README.md +34 -20
  2. package/dist/Fx/Fx.d.ts +362 -10
  3. package/dist/Fx/Fx.d.ts.map +1 -1
  4. package/dist/Fx/Fx.js +32 -1
  5. package/dist/Fx/TypeId.d.ts +49 -3
  6. package/dist/Fx/TypeId.d.ts.map +1 -1
  7. package/dist/Fx/TypeId.js +39 -2
  8. package/dist/Fx/combinators/additive.d.ts +156 -5
  9. package/dist/Fx/combinators/additive.d.ts.map +1 -1
  10. package/dist/Fx/combinators/additive.js +156 -5
  11. package/dist/Fx/combinators/catch.d.ts +195 -22
  12. package/dist/Fx/combinators/catch.d.ts.map +1 -1
  13. package/dist/Fx/combinators/catch.js +186 -16
  14. package/dist/Fx/combinators/causes.d.ts +24 -1
  15. package/dist/Fx/combinators/causes.d.ts.map +1 -1
  16. package/dist/Fx/combinators/causes.js +24 -1
  17. package/dist/Fx/combinators/changesWithEffect.d.ts +20 -0
  18. package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -1
  19. package/dist/Fx/combinators/changesWithEffect.js +20 -0
  20. package/dist/Fx/combinators/compact.d.ts +17 -0
  21. package/dist/Fx/combinators/compact.d.ts.map +1 -1
  22. package/dist/Fx/combinators/compact.js +17 -0
  23. package/dist/Fx/combinators/concatMap.d.ts +86 -0
  24. package/dist/Fx/combinators/concatMap.d.ts.map +1 -0
  25. package/dist/Fx/combinators/concatMap.js +86 -0
  26. package/dist/Fx/combinators/continueWith.d.ts +109 -1
  27. package/dist/Fx/combinators/continueWith.d.ts.map +1 -1
  28. package/dist/Fx/combinators/continueWith.js +109 -1
  29. package/dist/Fx/combinators/debounce.d.ts +34 -0
  30. package/dist/Fx/combinators/debounce.d.ts.map +1 -0
  31. package/dist/Fx/combinators/debounce.js +35 -0
  32. package/dist/Fx/combinators/delay.d.ts +34 -0
  33. package/dist/Fx/combinators/delay.d.ts.map +1 -0
  34. package/dist/Fx/combinators/delay.js +31 -0
  35. package/dist/Fx/combinators/dropUntil.d.ts +42 -0
  36. package/dist/Fx/combinators/dropUntil.d.ts.map +1 -1
  37. package/dist/Fx/combinators/dropUntil.js +42 -0
  38. package/dist/Fx/combinators/during.d.ts +38 -0
  39. package/dist/Fx/combinators/during.d.ts.map +1 -0
  40. package/dist/Fx/combinators/during.js +85 -0
  41. package/dist/Fx/combinators/ensuring.d.ts +33 -3
  42. package/dist/Fx/combinators/ensuring.d.ts.map +1 -1
  43. package/dist/Fx/combinators/ensuring.js +33 -3
  44. package/dist/Fx/combinators/exhaustLatestMap.d.ts +40 -4
  45. package/dist/Fx/combinators/exhaustLatestMap.d.ts.map +1 -1
  46. package/dist/Fx/combinators/exhaustLatestMap.js +40 -4
  47. package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts +39 -3
  48. package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts.map +1 -1
  49. package/dist/Fx/combinators/exhaustLatestMapEffect.js +39 -3
  50. package/dist/Fx/combinators/exhaustMap.d.ts +37 -0
  51. package/dist/Fx/combinators/exhaustMap.d.ts.map +1 -1
  52. package/dist/Fx/combinators/exhaustMap.js +37 -0
  53. package/dist/Fx/combinators/exhaustMapEffect.d.ts +32 -0
  54. package/dist/Fx/combinators/exhaustMapEffect.d.ts.map +1 -1
  55. package/dist/Fx/combinators/exhaustMapEffect.js +32 -0
  56. package/dist/Fx/combinators/exit.d.ts +22 -1
  57. package/dist/Fx/combinators/exit.d.ts.map +1 -1
  58. package/dist/Fx/combinators/exit.js +22 -1
  59. package/dist/Fx/combinators/filter.d.ts +16 -0
  60. package/dist/Fx/combinators/filter.d.ts.map +1 -1
  61. package/dist/Fx/combinators/filter.js +16 -0
  62. package/dist/Fx/combinators/filterEffect.d.ts +21 -0
  63. package/dist/Fx/combinators/filterEffect.d.ts.map +1 -1
  64. package/dist/Fx/combinators/filterEffect.js +21 -0
  65. package/dist/Fx/combinators/filterMap.d.ts +19 -0
  66. package/dist/Fx/combinators/filterMap.d.ts.map +1 -1
  67. package/dist/Fx/combinators/filterMap.js +19 -0
  68. package/dist/Fx/combinators/filterMapEffect.d.ts +20 -0
  69. package/dist/Fx/combinators/filterMapEffect.d.ts.map +1 -1
  70. package/dist/Fx/combinators/filterMapEffect.js +20 -0
  71. package/dist/Fx/combinators/filterMapLoop.d.ts +19 -0
  72. package/dist/Fx/combinators/filterMapLoop.d.ts.map +1 -1
  73. package/dist/Fx/combinators/filterMapLoop.js +19 -0
  74. package/dist/Fx/combinators/filterMapLoopCause.d.ts +20 -0
  75. package/dist/Fx/combinators/filterMapLoopCause.d.ts.map +1 -1
  76. package/dist/Fx/combinators/filterMapLoopCause.js +20 -0
  77. package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts +20 -0
  78. package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts.map +1 -1
  79. package/dist/Fx/combinators/filterMapLoopCauseEffect.js +20 -0
  80. package/dist/Fx/combinators/filterMapLoopEffect.d.ts +20 -0
  81. package/dist/Fx/combinators/filterMapLoopEffect.d.ts.map +1 -1
  82. package/dist/Fx/combinators/filterMapLoopEffect.js +20 -0
  83. package/dist/Fx/combinators/flatMap.d.ts +48 -3
  84. package/dist/Fx/combinators/flatMap.d.ts.map +1 -1
  85. package/dist/Fx/combinators/flatMap.js +35 -2
  86. package/dist/Fx/combinators/flatMapConcurrently.d.ts +50 -3
  87. package/dist/Fx/combinators/flatMapConcurrently.d.ts.map +1 -1
  88. package/dist/Fx/combinators/flatMapConcurrently.js +47 -1
  89. package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts +47 -3
  90. package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts.map +1 -1
  91. package/dist/Fx/combinators/flatMapConcurrentlyEffect.js +39 -1
  92. package/dist/Fx/combinators/flatMapEffect.d.ts +44 -2
  93. package/dist/Fx/combinators/flatMapEffect.d.ts.map +1 -1
  94. package/dist/Fx/combinators/flatMapEffect.js +31 -1
  95. package/dist/Fx/combinators/flip.d.ts +33 -1
  96. package/dist/Fx/combinators/flip.d.ts.map +1 -1
  97. package/dist/Fx/combinators/flip.js +33 -1
  98. package/dist/Fx/combinators/gen.d.ts +28 -9
  99. package/dist/Fx/combinators/gen.d.ts.map +1 -1
  100. package/dist/Fx/combinators/gen.js +27 -3
  101. package/dist/Fx/combinators/genScoped.d.ts +32 -9
  102. package/dist/Fx/combinators/genScoped.d.ts.map +1 -1
  103. package/dist/Fx/combinators/genScoped.js +30 -2
  104. package/dist/Fx/combinators/grouped.d.ts +89 -0
  105. package/dist/Fx/combinators/grouped.d.ts.map +1 -0
  106. package/dist/Fx/combinators/grouped.js +146 -0
  107. package/dist/Fx/combinators/index.d.ts +35 -0
  108. package/dist/Fx/combinators/index.d.ts.map +1 -1
  109. package/dist/Fx/combinators/index.js +35 -0
  110. package/dist/Fx/combinators/keyed.d.ts +121 -7
  111. package/dist/Fx/combinators/keyed.d.ts.map +1 -1
  112. package/dist/Fx/combinators/keyed.js +64 -6
  113. package/dist/Fx/combinators/loop.d.ts +16 -0
  114. package/dist/Fx/combinators/loop.d.ts.map +1 -1
  115. package/dist/Fx/combinators/loop.js +16 -0
  116. package/dist/Fx/combinators/loopCause.d.ts +17 -0
  117. package/dist/Fx/combinators/loopCause.d.ts.map +1 -1
  118. package/dist/Fx/combinators/loopCause.js +17 -0
  119. package/dist/Fx/combinators/loopCauseEffect.d.ts +18 -0
  120. package/dist/Fx/combinators/loopCauseEffect.d.ts.map +1 -1
  121. package/dist/Fx/combinators/loopCauseEffect.js +18 -0
  122. package/dist/Fx/combinators/loopEffect.d.ts +23 -0
  123. package/dist/Fx/combinators/loopEffect.d.ts.map +1 -1
  124. package/dist/Fx/combinators/loopEffect.js +23 -0
  125. package/dist/Fx/combinators/map.d.ts +45 -0
  126. package/dist/Fx/combinators/map.d.ts.map +1 -1
  127. package/dist/Fx/combinators/map.js +42 -0
  128. package/dist/Fx/combinators/mapBoth.d.ts +19 -0
  129. package/dist/Fx/combinators/mapBoth.d.ts.map +1 -1
  130. package/dist/Fx/combinators/mapBoth.js +19 -0
  131. package/dist/Fx/combinators/mapEffect.d.ts +24 -0
  132. package/dist/Fx/combinators/mapEffect.d.ts.map +1 -1
  133. package/dist/Fx/combinators/mapEffect.js +24 -0
  134. package/dist/Fx/combinators/mapError.d.ts +20 -4
  135. package/dist/Fx/combinators/mapError.d.ts.map +1 -1
  136. package/dist/Fx/combinators/mapError.js +20 -4
  137. package/dist/Fx/combinators/mergeAll.d.ts +34 -0
  138. package/dist/Fx/combinators/mergeAll.d.ts.map +1 -1
  139. package/dist/Fx/combinators/mergeAll.js +34 -0
  140. package/dist/Fx/combinators/mergeOrdered.d.ts +35 -3
  141. package/dist/Fx/combinators/mergeOrdered.d.ts.map +1 -1
  142. package/dist/Fx/combinators/mergeOrdered.js +35 -3
  143. package/dist/Fx/combinators/onError.d.ts +33 -3
  144. package/dist/Fx/combinators/onError.d.ts.map +1 -1
  145. package/dist/Fx/combinators/onError.js +33 -3
  146. package/dist/Fx/combinators/onExit.d.ts +28 -2
  147. package/dist/Fx/combinators/onExit.d.ts.map +1 -1
  148. package/dist/Fx/combinators/onExit.js +28 -2
  149. package/dist/Fx/combinators/onInterrupt.d.ts +48 -3
  150. package/dist/Fx/combinators/onInterrupt.d.ts.map +1 -1
  151. package/dist/Fx/combinators/onInterrupt.js +48 -3
  152. package/dist/Fx/combinators/pairwise.d.ts +28 -0
  153. package/dist/Fx/combinators/pairwise.d.ts.map +1 -0
  154. package/dist/Fx/combinators/pairwise.js +31 -0
  155. package/dist/Fx/combinators/provide.d.ts +130 -9
  156. package/dist/Fx/combinators/provide.d.ts.map +1 -1
  157. package/dist/Fx/combinators/provide.js +130 -9
  158. package/dist/Fx/combinators/race.d.ts +92 -0
  159. package/dist/Fx/combinators/race.d.ts.map +1 -0
  160. package/dist/Fx/combinators/race.js +149 -0
  161. package/dist/Fx/combinators/repeat.d.ts +41 -0
  162. package/dist/Fx/combinators/repeat.d.ts.map +1 -0
  163. package/dist/Fx/combinators/repeat.js +57 -0
  164. package/dist/Fx/combinators/result.d.ts +22 -0
  165. package/dist/Fx/combinators/result.d.ts.map +1 -1
  166. package/dist/Fx/combinators/result.js +26 -12
  167. package/dist/Fx/combinators/retry.d.ts +53 -0
  168. package/dist/Fx/combinators/retry.d.ts.map +1 -0
  169. package/dist/Fx/combinators/retry.js +71 -0
  170. package/dist/Fx/combinators/sample.d.ts +31 -0
  171. package/dist/Fx/combinators/sample.d.ts.map +1 -0
  172. package/dist/Fx/combinators/sample.js +42 -0
  173. package/dist/Fx/combinators/scan.d.ts +39 -0
  174. package/dist/Fx/combinators/scan.d.ts.map +1 -1
  175. package/dist/Fx/combinators/scan.js +39 -0
  176. package/dist/Fx/combinators/since.d.ts +30 -0
  177. package/dist/Fx/combinators/since.d.ts.map +1 -0
  178. package/dist/Fx/combinators/since.js +39 -0
  179. package/dist/Fx/combinators/skip.d.ts +31 -0
  180. package/dist/Fx/combinators/skip.d.ts.map +1 -1
  181. package/dist/Fx/combinators/skip.js +31 -0
  182. package/dist/Fx/combinators/skipRepeats.d.ts +16 -0
  183. package/dist/Fx/combinators/skipRepeats.d.ts.map +1 -1
  184. package/dist/Fx/combinators/skipRepeats.js +16 -0
  185. package/dist/Fx/combinators/skipRepeatsWith.d.ts +17 -0
  186. package/dist/Fx/combinators/skipRepeatsWith.d.ts.map +1 -1
  187. package/dist/Fx/combinators/skipRepeatsWith.js +17 -0
  188. package/dist/Fx/combinators/skipWhile.d.ts +68 -0
  189. package/dist/Fx/combinators/skipWhile.d.ts.map +1 -1
  190. package/dist/Fx/combinators/skipWhile.js +68 -0
  191. package/dist/Fx/combinators/slice.d.ts +82 -0
  192. package/dist/Fx/combinators/slice.d.ts.map +1 -1
  193. package/dist/Fx/combinators/slice.js +33 -0
  194. package/dist/Fx/combinators/switchMap.d.ts +38 -0
  195. package/dist/Fx/combinators/switchMap.d.ts.map +1 -1
  196. package/dist/Fx/combinators/switchMap.js +38 -0
  197. package/dist/Fx/combinators/switchMapEffect.d.ts +37 -0
  198. package/dist/Fx/combinators/switchMapEffect.d.ts.map +1 -1
  199. package/dist/Fx/combinators/switchMapEffect.js +37 -0
  200. package/dist/Fx/combinators/take.d.ts +32 -0
  201. package/dist/Fx/combinators/take.d.ts.map +1 -1
  202. package/dist/Fx/combinators/take.js +32 -0
  203. package/dist/Fx/combinators/takeUntil.d.ts +46 -0
  204. package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
  205. package/dist/Fx/combinators/takeUntil.js +46 -0
  206. package/dist/Fx/combinators/takeWhile.d.ts +31 -0
  207. package/dist/Fx/combinators/takeWhile.d.ts.map +1 -1
  208. package/dist/Fx/combinators/takeWhile.js +31 -0
  209. package/dist/Fx/combinators/tapEffect.d.ts +16 -0
  210. package/dist/Fx/combinators/tapEffect.d.ts.map +1 -1
  211. package/dist/Fx/combinators/tapEffect.js +16 -0
  212. package/dist/Fx/combinators/throttle.d.ts +79 -0
  213. package/dist/Fx/combinators/throttle.d.ts.map +1 -0
  214. package/dist/Fx/combinators/throttle.js +99 -0
  215. package/dist/Fx/combinators/timeout.d.ts +76 -0
  216. package/dist/Fx/combinators/timeout.d.ts.map +1 -0
  217. package/dist/Fx/combinators/timeout.js +110 -0
  218. package/dist/Fx/combinators/tuple.d.ts +30 -0
  219. package/dist/Fx/combinators/tuple.d.ts.map +1 -1
  220. package/dist/Fx/combinators/tuple.js +34 -3
  221. package/dist/Fx/combinators/until.d.ts +27 -0
  222. package/dist/Fx/combinators/until.d.ts.map +1 -0
  223. package/dist/Fx/combinators/until.js +56 -0
  224. package/dist/Fx/combinators/unwrap.d.ts +29 -0
  225. package/dist/Fx/combinators/unwrap.d.ts.map +1 -1
  226. package/dist/Fx/combinators/unwrap.js +29 -0
  227. package/dist/Fx/combinators/unwrapScoped.d.ts +33 -0
  228. package/dist/Fx/combinators/unwrapScoped.d.ts.map +1 -1
  229. package/dist/Fx/combinators/unwrapScoped.js +33 -0
  230. package/dist/Fx/combinators/when.d.ts +35 -0
  231. package/dist/Fx/combinators/when.d.ts.map +1 -1
  232. package/dist/Fx/combinators/when.js +36 -1
  233. package/dist/Fx/combinators/withLatestFrom.d.ts +58 -0
  234. package/dist/Fx/combinators/withLatestFrom.d.ts.map +1 -0
  235. package/dist/Fx/combinators/withLatestFrom.js +68 -0
  236. package/dist/Fx/combinators/withSpan.d.ts +35 -1
  237. package/dist/Fx/combinators/withSpan.d.ts.map +1 -1
  238. package/dist/Fx/combinators/withSpan.js +34 -3
  239. package/dist/Fx/combinators/zip.d.ts +60 -0
  240. package/dist/Fx/combinators/zip.d.ts.map +1 -1
  241. package/dist/Fx/combinators/zip.js +60 -0
  242. package/dist/Fx/constructors/at.d.ts +20 -0
  243. package/dist/Fx/constructors/at.d.ts.map +1 -1
  244. package/dist/Fx/constructors/at.js +20 -0
  245. package/dist/Fx/constructors/die.d.ts +21 -0
  246. package/dist/Fx/constructors/die.d.ts.map +1 -1
  247. package/dist/Fx/constructors/die.js +21 -0
  248. package/dist/Fx/constructors/empty.d.ts +18 -0
  249. package/dist/Fx/constructors/empty.d.ts.map +1 -1
  250. package/dist/Fx/constructors/empty.js +18 -0
  251. package/dist/Fx/constructors/fail.d.ts +21 -0
  252. package/dist/Fx/constructors/fail.d.ts.map +1 -1
  253. package/dist/Fx/constructors/fail.js +21 -0
  254. package/dist/Fx/constructors/failCause.d.ts +22 -0
  255. package/dist/Fx/constructors/failCause.d.ts.map +1 -1
  256. package/dist/Fx/constructors/failCause.js +22 -0
  257. package/dist/Fx/constructors/fn.d.ts +113 -13
  258. package/dist/Fx/constructors/fn.d.ts.map +1 -1
  259. package/dist/Fx/constructors/fn.js +36 -0
  260. package/dist/Fx/constructors/fromEffect.d.ts +43 -1
  261. package/dist/Fx/constructors/fromEffect.d.ts.map +1 -1
  262. package/dist/Fx/constructors/fromEffect.js +43 -1
  263. package/dist/Fx/constructors/fromFailures.d.ts +24 -0
  264. package/dist/Fx/constructors/fromFailures.d.ts.map +1 -1
  265. package/dist/Fx/constructors/fromFailures.js +24 -0
  266. package/dist/Fx/constructors/fromIterable.d.ts +22 -0
  267. package/dist/Fx/constructors/fromIterable.d.ts.map +1 -1
  268. package/dist/Fx/constructors/fromIterable.js +22 -0
  269. package/dist/Fx/constructors/fromSchedule.d.ts +23 -0
  270. package/dist/Fx/constructors/fromSchedule.d.ts.map +1 -1
  271. package/dist/Fx/constructors/fromSchedule.js +25 -2
  272. package/dist/Fx/constructors/index.d.ts +2 -1
  273. package/dist/Fx/constructors/index.d.ts.map +1 -1
  274. package/dist/Fx/constructors/index.js +2 -1
  275. package/dist/Fx/constructors/interrupt.d.ts +21 -1
  276. package/dist/Fx/constructors/interrupt.d.ts.map +1 -1
  277. package/dist/Fx/constructors/interrupt.js +21 -1
  278. package/dist/Fx/constructors/make.d.ts +146 -1
  279. package/dist/Fx/constructors/make.d.ts.map +1 -1
  280. package/dist/Fx/constructors/make.js +54 -3
  281. package/dist/Fx/constructors/periodic.d.ts +29 -0
  282. package/dist/Fx/constructors/periodic.d.ts.map +1 -1
  283. package/dist/Fx/constructors/periodic.js +29 -0
  284. package/dist/Fx/constructors/succeed.d.ts +75 -3
  285. package/dist/Fx/constructors/succeed.d.ts.map +1 -1
  286. package/dist/Fx/constructors/succeed.js +75 -3
  287. package/dist/Fx/constructors/suspend.d.ts +28 -0
  288. package/dist/Fx/constructors/suspend.d.ts.map +1 -1
  289. package/dist/Fx/constructors/suspend.js +28 -0
  290. package/dist/Fx/constructors/sync.d.ts +32 -0
  291. package/dist/Fx/constructors/sync.d.ts.map +1 -0
  292. package/dist/Fx/constructors/sync.js +32 -0
  293. package/dist/Fx/internal/DeferredRef.d.ts +259 -7
  294. package/dist/Fx/internal/DeferredRef.d.ts.map +1 -1
  295. package/dist/Fx/internal/DeferredRef.js +260 -9
  296. package/dist/Fx/internal/UnionToTuple.d.ts +22 -0
  297. package/dist/Fx/internal/UnionToTuple.d.ts.map +1 -1
  298. package/dist/Fx/internal/diff.d.ts +586 -0
  299. package/dist/Fx/internal/diff.d.ts.map +1 -1
  300. package/dist/Fx/internal/diff.js +120 -9
  301. package/dist/Fx/internal/effectableEvaluateKey.d.ts +30 -0
  302. package/dist/Fx/internal/effectableEvaluateKey.d.ts.map +1 -0
  303. package/dist/Fx/internal/effectableEvaluateKey.js +29 -0
  304. package/dist/Fx/internal/effectableWithOverride.d.ts +55 -0
  305. package/dist/Fx/internal/effectableWithOverride.d.ts.map +1 -0
  306. package/dist/Fx/internal/effectableWithOverride.js +46 -0
  307. package/dist/Fx/internal/equivalence.d.ts +29 -0
  308. package/dist/Fx/internal/equivalence.d.ts.map +1 -1
  309. package/dist/Fx/internal/equivalence.js +29 -0
  310. package/dist/Fx/internal/multicast.d.ts +145 -2
  311. package/dist/Fx/internal/multicast.d.ts.map +1 -1
  312. package/dist/Fx/internal/multicast.js +146 -4
  313. package/dist/Fx/internal/ring-buffer.d.ts +149 -0
  314. package/dist/Fx/internal/ring-buffer.d.ts.map +1 -1
  315. package/dist/Fx/internal/ring-buffer.js +155 -0
  316. package/dist/Fx/internal/scope.d.ts +184 -0
  317. package/dist/Fx/internal/scope.d.ts.map +1 -1
  318. package/dist/Fx/internal/scope.js +150 -0
  319. package/dist/Fx/internal/yieldable.d.ts +117 -2
  320. package/dist/Fx/internal/yieldable.d.ts.map +1 -1
  321. package/dist/Fx/internal/yieldable.js +86 -3
  322. package/dist/Fx/run/collect.d.ts +89 -0
  323. package/dist/Fx/run/collect.d.ts.map +1 -1
  324. package/dist/Fx/run/collect.js +90 -1
  325. package/dist/Fx/run/first.d.ts +22 -0
  326. package/dist/Fx/run/first.d.ts.map +1 -1
  327. package/dist/Fx/run/first.js +22 -0
  328. package/dist/Fx/run/fork.d.ts +50 -0
  329. package/dist/Fx/run/fork.d.ts.map +1 -1
  330. package/dist/Fx/run/fork.js +50 -0
  331. package/dist/Fx/run/observe.d.ts +106 -0
  332. package/dist/Fx/run/observe.d.ts.map +1 -1
  333. package/dist/Fx/run/observe.js +106 -0
  334. package/dist/Fx/run/runPromise.d.ts +43 -0
  335. package/dist/Fx/run/runPromise.d.ts.map +1 -1
  336. package/dist/Fx/run/runPromise.js +43 -0
  337. package/dist/Fx/stream.d.ts +92 -0
  338. package/dist/Fx/stream.d.ts.map +1 -1
  339. package/dist/Fx/stream.js +60 -1
  340. package/dist/Push/Push.d.ts +1216 -91
  341. package/dist/Push/Push.d.ts.map +1 -1
  342. package/dist/Push/Push.js +1012 -83
  343. package/dist/RefArray.d.ts +2 -0
  344. package/dist/RefArray.d.ts.map +1 -0
  345. package/dist/RefArray.js +1 -0
  346. package/dist/RefBigDecimal.d.ts +2 -0
  347. package/dist/RefBigDecimal.d.ts.map +1 -0
  348. package/dist/RefBigDecimal.js +1 -0
  349. package/dist/RefBigInt.d.ts +2 -0
  350. package/dist/RefBigInt.d.ts.map +1 -0
  351. package/dist/RefBigInt.js +1 -0
  352. package/dist/RefBoolean.d.ts +2 -0
  353. package/dist/RefBoolean.d.ts.map +1 -0
  354. package/dist/RefBoolean.js +1 -0
  355. package/dist/RefCause.d.ts +2 -0
  356. package/dist/RefCause.d.ts.map +1 -0
  357. package/dist/RefCause.js +1 -0
  358. package/dist/RefChunk.d.ts +2 -0
  359. package/dist/RefChunk.d.ts.map +1 -0
  360. package/dist/RefChunk.js +1 -0
  361. package/dist/RefDateTime.d.ts +2 -0
  362. package/dist/RefDateTime.d.ts.map +1 -0
  363. package/dist/RefDateTime.js +1 -0
  364. package/dist/RefDuration.d.ts +2 -0
  365. package/dist/RefDuration.d.ts.map +1 -0
  366. package/dist/RefDuration.js +1 -0
  367. package/dist/RefGraph.d.ts +2 -0
  368. package/dist/RefGraph.d.ts.map +1 -0
  369. package/dist/RefGraph.js +1 -0
  370. package/dist/RefHashMap.d.ts +2 -0
  371. package/dist/RefHashMap.d.ts.map +1 -0
  372. package/dist/RefHashMap.js +1 -0
  373. package/dist/RefHashRing.d.ts +2 -0
  374. package/dist/RefHashRing.d.ts.map +1 -0
  375. package/dist/RefHashRing.js +1 -0
  376. package/dist/RefHashSet.d.ts +2 -0
  377. package/dist/RefHashSet.d.ts.map +1 -0
  378. package/dist/RefHashSet.js +1 -0
  379. package/dist/RefIterable.d.ts +2 -0
  380. package/dist/RefIterable.d.ts.map +1 -0
  381. package/dist/RefIterable.js +1 -0
  382. package/dist/RefOption.d.ts +2 -0
  383. package/dist/RefOption.d.ts.map +1 -0
  384. package/dist/RefOption.js +1 -0
  385. package/dist/RefRecord.d.ts +2 -0
  386. package/dist/RefRecord.d.ts.map +1 -0
  387. package/dist/RefRecord.js +1 -0
  388. package/dist/RefResult.d.ts +2 -0
  389. package/dist/RefResult.d.ts.map +1 -0
  390. package/dist/RefResult.js +1 -0
  391. package/dist/RefString.d.ts +2 -0
  392. package/dist/RefString.d.ts.map +1 -0
  393. package/dist/RefString.js +1 -0
  394. package/dist/RefStruct.d.ts +2 -0
  395. package/dist/RefStruct.d.ts.map +1 -0
  396. package/dist/RefStruct.js +1 -0
  397. package/dist/RefSubject/Hydration.d.ts +504 -0
  398. package/dist/RefSubject/Hydration.d.ts.map +1 -0
  399. package/dist/RefSubject/Hydration.js +300 -0
  400. package/dist/RefSubject/RefArray.d.ts +351 -4
  401. package/dist/RefSubject/RefArray.d.ts.map +1 -1
  402. package/dist/RefSubject/RefArray.js +339 -3
  403. package/dist/RefSubject/RefBigDecimal.d.ts +221 -1
  404. package/dist/RefSubject/RefBigDecimal.d.ts.map +1 -1
  405. package/dist/RefSubject/RefBigDecimal.js +210 -1
  406. package/dist/RefSubject/RefBigInt.d.ts +166 -1
  407. package/dist/RefSubject/RefBigInt.d.ts.map +1 -1
  408. package/dist/RefSubject/RefBigInt.js +155 -1
  409. package/dist/RefSubject/RefBoolean.d.ts +166 -1
  410. package/dist/RefSubject/RefBoolean.d.ts.map +1 -1
  411. package/dist/RefSubject/RefBoolean.js +155 -1
  412. package/dist/RefSubject/RefCause.d.ts +122 -1
  413. package/dist/RefSubject/RefCause.d.ts.map +1 -1
  414. package/dist/RefSubject/RefCause.js +111 -1
  415. package/dist/RefSubject/RefChunk.d.ts +406 -1
  416. package/dist/RefSubject/RefChunk.d.ts.map +1 -1
  417. package/dist/RefSubject/RefChunk.js +394 -0
  418. package/dist/RefSubject/RefDateTime.d.ts +122 -1
  419. package/dist/RefSubject/RefDateTime.d.ts.map +1 -1
  420. package/dist/RefSubject/RefDateTime.js +111 -1
  421. package/dist/RefSubject/RefDuration.d.ts +155 -1
  422. package/dist/RefSubject/RefDuration.d.ts.map +1 -1
  423. package/dist/RefSubject/RefDuration.js +144 -1
  424. package/dist/RefSubject/RefGraph.d.ts +320 -6
  425. package/dist/RefSubject/RefGraph.d.ts.map +1 -1
  426. package/dist/RefSubject/RefGraph.js +303 -0
  427. package/dist/RefSubject/RefHashMap.d.ts +296 -1
  428. package/dist/RefSubject/RefHashMap.d.ts.map +1 -1
  429. package/dist/RefSubject/RefHashMap.js +284 -0
  430. package/dist/RefSubject/RefHashRing.d.ts +146 -2
  431. package/dist/RefSubject/RefHashRing.d.ts.map +1 -1
  432. package/dist/RefSubject/RefHashRing.js +133 -0
  433. package/dist/RefSubject/RefHashSet.d.ts +230 -1
  434. package/dist/RefSubject/RefHashSet.d.ts.map +1 -1
  435. package/dist/RefSubject/RefHashSet.js +218 -0
  436. package/dist/RefSubject/RefIterable.d.ts +327 -1
  437. package/dist/RefSubject/RefIterable.d.ts.map +1 -1
  438. package/dist/RefSubject/RefIterable.js +315 -0
  439. package/dist/RefSubject/RefOption.d.ts +144 -1
  440. package/dist/RefSubject/RefOption.d.ts.map +1 -1
  441. package/dist/RefSubject/RefOption.js +133 -1
  442. package/dist/RefSubject/RefRecord.d.ts +339 -1
  443. package/dist/RefSubject/RefRecord.d.ts.map +1 -1
  444. package/dist/RefSubject/RefRecord.js +327 -0
  445. package/dist/RefSubject/RefResult.d.ts +155 -23
  446. package/dist/RefSubject/RefResult.d.ts.map +1 -1
  447. package/dist/RefSubject/RefResult.js +122 -1
  448. package/dist/RefSubject/RefString.d.ts +188 -1
  449. package/dist/RefSubject/RefString.d.ts.map +1 -1
  450. package/dist/RefSubject/RefString.js +177 -1
  451. package/dist/RefSubject/RefStruct.d.ts +156 -1
  452. package/dist/RefSubject/RefStruct.d.ts.map +1 -1
  453. package/dist/RefSubject/RefStruct.js +145 -1
  454. package/dist/RefSubject/RefSubject.d.ts +1166 -13
  455. package/dist/RefSubject/RefSubject.d.ts.map +1 -1
  456. package/dist/RefSubject/RefSubject.js +843 -51
  457. package/dist/RefSubject/RefTrie.d.ts +290 -4
  458. package/dist/RefSubject/RefTrie.d.ts.map +1 -1
  459. package/dist/RefSubject/RefTrie.js +278 -3
  460. package/dist/RefSubject/RefTuple.d.ts +117 -1
  461. package/dist/RefSubject/RefTuple.d.ts.map +1 -1
  462. package/dist/RefSubject/RefTuple.js +106 -1
  463. package/dist/RefSubject/index.d.ts +1 -0
  464. package/dist/RefSubject/index.d.ts.map +1 -1
  465. package/dist/RefSubject/index.js +1 -0
  466. package/dist/RefSubject.d.ts +2 -1
  467. package/dist/RefSubject.d.ts.map +1 -1
  468. package/dist/RefSubject.js +2 -1
  469. package/dist/RefTrie.d.ts +2 -0
  470. package/dist/RefTrie.d.ts.map +1 -0
  471. package/dist/RefTrie.js +1 -0
  472. package/dist/RefTuple.d.ts +2 -0
  473. package/dist/RefTuple.d.ts.map +1 -0
  474. package/dist/RefTuple.js +1 -0
  475. package/dist/Sink/Sink.d.ts +381 -10
  476. package/dist/Sink/Sink.d.ts.map +1 -1
  477. package/dist/Sink/Sink.js +49 -2
  478. package/dist/Sink/combinators.d.ts +731 -2
  479. package/dist/Sink/combinators.d.ts.map +1 -1
  480. package/dist/Sink/combinators.js +706 -4
  481. package/dist/Subject/Subject.d.ts +1013 -19
  482. package/dist/Subject/Subject.d.ts.map +1 -1
  483. package/dist/Subject/Subject.js +901 -36
  484. package/dist/Versioned/Versioned.d.ts +424 -7
  485. package/dist/Versioned/Versioned.d.ts.map +1 -1
  486. package/dist/Versioned/Versioned.js +238 -12
  487. package/dist/index.d.ts +22 -3
  488. package/dist/index.d.ts.map +1 -1
  489. package/dist/index.js +22 -3
  490. package/package.json +123 -14
  491. package/dist/Fx/constructors/fromYieldable.d.ts +0 -12
  492. package/dist/Fx/constructors/fromYieldable.d.ts.map +0 -1
  493. package/dist/Fx/constructors/fromYieldable.js +0 -12
  494. package/src/Fx/Fx.ts +0 -164
  495. package/src/Fx/TypeId.ts +0 -25
  496. package/src/Fx/combinators/additive.ts +0 -142
  497. package/src/Fx/combinators/catch.ts +0 -416
  498. package/src/Fx/combinators/causes.ts +0 -23
  499. package/src/Fx/combinators/changesWithEffect.ts +0 -66
  500. package/src/Fx/combinators/compact.ts +0 -15
  501. package/src/Fx/combinators/continueWith.ts +0 -78
  502. package/src/Fx/combinators/dropUntil.ts +0 -47
  503. package/src/Fx/combinators/ensuring.ts +0 -23
  504. package/src/Fx/combinators/exhaustLatestMap.ts +0 -74
  505. package/src/Fx/combinators/exhaustLatestMapEffect.ts +0 -25
  506. package/src/Fx/combinators/exhaustMap.ts +0 -36
  507. package/src/Fx/combinators/exhaustMapEffect.ts +0 -23
  508. package/src/Fx/combinators/exit.ts +0 -15
  509. package/src/Fx/combinators/filter.ts +0 -22
  510. package/src/Fx/combinators/filterEffect.ts +0 -31
  511. package/src/Fx/combinators/filterMap.ts +0 -23
  512. package/src/Fx/combinators/filterMapEffect.ts +0 -32
  513. package/src/Fx/combinators/filterMapLoop.ts +0 -35
  514. package/src/Fx/combinators/filterMapLoopCause.ts +0 -36
  515. package/src/Fx/combinators/filterMapLoopCauseEffect.ts +0 -46
  516. package/src/Fx/combinators/filterMapLoopEffect.ts +0 -36
  517. package/src/Fx/combinators/flatMap.ts +0 -51
  518. package/src/Fx/combinators/flatMapConcurrently.ts +0 -39
  519. package/src/Fx/combinators/flatMapConcurrentlyEffect.ts +0 -26
  520. package/src/Fx/combinators/flatMapEffect.ts +0 -42
  521. package/src/Fx/combinators/flip.ts +0 -14
  522. package/src/Fx/combinators/gen.ts +0 -24
  523. package/src/Fx/combinators/genScoped.ts +0 -24
  524. package/src/Fx/combinators/index.ts +0 -61
  525. package/src/Fx/combinators/keyed.ts +0 -369
  526. package/src/Fx/combinators/loop.ts +0 -27
  527. package/src/Fx/combinators/loopCause.ts +0 -34
  528. package/src/Fx/combinators/loopCauseEffect.ts +0 -36
  529. package/src/Fx/combinators/loopEffect.ts +0 -34
  530. package/src/Fx/combinators/map.ts +0 -22
  531. package/src/Fx/combinators/mapBoth.ts +0 -40
  532. package/src/Fx/combinators/mapEffect.ts +0 -32
  533. package/src/Fx/combinators/mapError.ts +0 -28
  534. package/src/Fx/combinators/mergeAll.ts +0 -22
  535. package/src/Fx/combinators/mergeOrdered.ts +0 -123
  536. package/src/Fx/combinators/onError.ts +0 -40
  537. package/src/Fx/combinators/onExit.ts +0 -82
  538. package/src/Fx/combinators/onInterrupt.ts +0 -87
  539. package/src/Fx/combinators/provide.ts +0 -124
  540. package/src/Fx/combinators/result.ts +0 -39
  541. package/src/Fx/combinators/scan.ts +0 -82
  542. package/src/Fx/combinators/skip.ts +0 -41
  543. package/src/Fx/combinators/skipRepeats.ts +0 -15
  544. package/src/Fx/combinators/skipRepeatsWith.ts +0 -40
  545. package/src/Fx/combinators/skipWhile.ts +0 -100
  546. package/src/Fx/combinators/slice.ts +0 -55
  547. package/src/Fx/combinators/switchMap.ts +0 -55
  548. package/src/Fx/combinators/switchMapEffect.ts +0 -25
  549. package/src/Fx/combinators/take.ts +0 -38
  550. package/src/Fx/combinators/takeUntil.ts +0 -88
  551. package/src/Fx/combinators/takeWhile.ts +0 -47
  552. package/src/Fx/combinators/tapEffect.ts +0 -39
  553. package/src/Fx/combinators/tuple.ts +0 -79
  554. package/src/Fx/combinators/unwrap.ts +0 -21
  555. package/src/Fx/combinators/unwrapScoped.ts +0 -26
  556. package/src/Fx/combinators/when.ts +0 -64
  557. package/src/Fx/combinators/withSpan.ts +0 -24
  558. package/src/Fx/combinators/zip.ts +0 -175
  559. package/src/Fx/constructors/at.ts +0 -23
  560. package/src/Fx/constructors/die.ts +0 -17
  561. package/src/Fx/constructors/empty.ts +0 -10
  562. package/src/Fx/constructors/fail.ts +0 -14
  563. package/src/Fx/constructors/failCause.ts +0 -14
  564. package/src/Fx/constructors/fn.ts +0 -245
  565. package/src/Fx/constructors/fromEffect.ts +0 -24
  566. package/src/Fx/constructors/fromFailures.ts +0 -19
  567. package/src/Fx/constructors/fromIterable.ts +0 -15
  568. package/src/Fx/constructors/fromSchedule.ts +0 -18
  569. package/src/Fx/constructors/fromYieldable.ts +0 -17
  570. package/src/Fx/constructors/index.ts +0 -15
  571. package/src/Fx/constructors/interrupt.ts +0 -13
  572. package/src/Fx/constructors/make.ts +0 -103
  573. package/src/Fx/constructors/periodic.ts +0 -15
  574. package/src/Fx/constructors/succeed.ts +0 -37
  575. package/src/Fx/constructors/suspend.ts +0 -6
  576. package/src/Fx/index.ts +0 -6
  577. package/src/Fx/internal/DeferredRef.ts +0 -87
  578. package/src/Fx/internal/UnionToTuple.ts +0 -12
  579. package/src/Fx/internal/diff.ts +0 -191
  580. package/src/Fx/internal/equivalence.ts +0 -12
  581. package/src/Fx/internal/multicast.ts +0 -51
  582. package/src/Fx/internal/ring-buffer.ts +0 -60
  583. package/src/Fx/internal/scope.ts +0 -58
  584. package/src/Fx/internal/yieldable.ts +0 -31
  585. package/src/Fx/run/collect.ts +0 -79
  586. package/src/Fx/run/first.ts +0 -20
  587. package/src/Fx/run/fork.ts +0 -40
  588. package/src/Fx/run/index.ts +0 -5
  589. package/src/Fx/run/observe.ts +0 -114
  590. package/src/Fx/run/runPromise.ts +0 -32
  591. package/src/Fx/stream.ts +0 -42
  592. package/src/Fx.additive-combinators.test.ts +0 -126
  593. package/src/Fx.catch-additive.test.ts +0 -206
  594. package/src/Fx.catch.test.ts +0 -60
  595. package/src/Fx.dropUntil.test.ts +0 -61
  596. package/src/Fx.fn.test.ts +0 -51
  597. package/src/Fx.lifecycle.test.ts +0 -79
  598. package/src/Fx.mapError-mapBoth.test.ts +0 -101
  599. package/src/Fx.provide-combinators.test.ts +0 -94
  600. package/src/Fx.result-changesWithEffect.test.ts +0 -112
  601. package/src/Fx.scan.test.ts +0 -73
  602. package/src/Fx.takeWhile-skipWhile.test.ts +0 -84
  603. package/src/Fx.test.ts +0 -71
  604. package/src/Fx.ts +0 -1
  605. package/src/Fx.zip-merge-additive.test.ts +0 -171
  606. package/src/Fx.zip.test.ts +0 -133
  607. package/src/Push/Push.ts +0 -1093
  608. package/src/Push/index.ts +0 -1
  609. package/src/Push.additive.test.ts +0 -256
  610. package/src/Push.test.ts +0 -26
  611. package/src/Push.ts +0 -1
  612. package/src/RefSubject/RefArray.ts +0 -516
  613. package/src/RefSubject/RefBigDecimal.test.ts +0 -56
  614. package/src/RefSubject/RefBigDecimal.ts +0 -295
  615. package/src/RefSubject/RefBigInt.test.ts +0 -56
  616. package/src/RefSubject/RefBigInt.ts +0 -189
  617. package/src/RefSubject/RefBoolean.test.ts +0 -57
  618. package/src/RefSubject/RefBoolean.ts +0 -185
  619. package/src/RefSubject/RefCause.test.ts +0 -53
  620. package/src/RefSubject/RefCause.ts +0 -146
  621. package/src/RefSubject/RefChunk.ts +0 -516
  622. package/src/RefSubject/RefDateTime.test.ts +0 -43
  623. package/src/RefSubject/RefDateTime.ts +0 -261
  624. package/src/RefSubject/RefDuration.test.ts +0 -49
  625. package/src/RefSubject/RefDuration.ts +0 -188
  626. package/src/RefSubject/RefGraph.ts +0 -649
  627. package/src/RefSubject/RefHashMap.ts +0 -474
  628. package/src/RefSubject/RefHashRing.ts +0 -262
  629. package/src/RefSubject/RefHashSet.ts +0 -308
  630. package/src/RefSubject/RefIterable.ts +0 -454
  631. package/src/RefSubject/RefOption.test.ts +0 -67
  632. package/src/RefSubject/RefOption.ts +0 -193
  633. package/src/RefSubject/RefRecord.ts +0 -621
  634. package/src/RefSubject/RefResult.test.ts +0 -63
  635. package/src/RefSubject/RefResult.ts +0 -209
  636. package/src/RefSubject/RefString.test.ts +0 -61
  637. package/src/RefSubject/RefString.ts +0 -256
  638. package/src/RefSubject/RefStruct.test.ts +0 -60
  639. package/src/RefSubject/RefStruct.ts +0 -253
  640. package/src/RefSubject/RefSubject.ts +0 -2642
  641. package/src/RefSubject/RefTrie.ts +0 -365
  642. package/src/RefSubject/RefTuple.test.ts +0 -60
  643. package/src/RefSubject/RefTuple.ts +0 -231
  644. package/src/RefSubject/index.ts +0 -21
  645. package/src/RefSubject.additive-parity.test.ts +0 -101
  646. package/src/RefSubject.test.ts +0 -65
  647. package/src/RefSubject.ts +0 -1
  648. package/src/Sink/Sink.ts +0 -159
  649. package/src/Sink/combinators.ts +0 -1115
  650. package/src/Sink/index.ts +0 -2
  651. package/src/Sink.combinators.test.ts +0 -88
  652. package/src/Sink.reduce-collect-head-last.test.ts +0 -107
  653. package/src/Sink.ts +0 -1
  654. package/src/Subject/Subject.ts +0 -440
  655. package/src/Subject/index.ts +0 -1
  656. package/src/Subject.test.ts +0 -47
  657. package/src/Subject.ts +0 -1
  658. package/src/Versioned/Versioned.ts +0 -595
  659. package/src/Versioned/index.ts +0 -1
  660. package/src/Versioned.filterMap.test.ts +0 -91
  661. package/src/Versioned.test.ts +0 -23
  662. package/src/Versioned.ts +0 -1
  663. package/src/index.ts +0 -7
@@ -2,6 +2,7 @@ import * as Cause from "effect/Cause";
2
2
  import * as Effect from "effect/Effect";
3
3
  import * as Semaphore from "effect/Semaphore";
4
4
  import * as Exit from "effect/Exit";
5
+ import * as Fiber from "effect/Fiber";
5
6
  import { dual, flow, identity } from "effect/Function";
6
7
  import * as MutableRef from "effect/MutableRef";
7
8
  import * as Option from "effect/Option";
@@ -34,6 +35,15 @@ class MapSink {
34
35
  /**
35
36
  * Transforms values before they reach the sink using a pure function.
36
37
  *
38
+ * @remarks
39
+ * ## Why
40
+ * Contramapping adapts a consumer to a new input without changing the producer or allocating an
41
+ * intermediate Fx.
42
+ *
43
+ * ## Ownership and lifetime
44
+ * Mapping is synchronous, preserves one-for-one input order, and acquires no resources. Thrown
45
+ * exceptions are defects. The wrapped sink still owns its callback effects and service needs.
46
+ *
37
47
  * @example
38
48
  * ```ts
39
49
  * import { Effect } from "effect"
@@ -61,12 +71,49 @@ class MapSink {
61
71
  export function map(sink, f) {
62
72
  return MapSink.make(sink, f);
63
73
  }
64
- /** Alias for `map`: transforms input values before they reach the sink. @since 1.0.0 @category combinators */
74
+ /**
75
+ * Alias for `map`, named for the input-side direction of the transformation.
76
+ *
77
+ * @remarks
78
+ * ## Why
79
+ * `mapInput` makes contravariant Sink pipelines easier to read beside output-mapping APIs.
80
+ *
81
+ * ## Ownership and lifetime
82
+ * It is exactly `map`: synchronous, one-for-one, ordered, and resource-free.
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * import { Effect } from "effect"
87
+ * import * as Sink from "@typed/fx/Sink"
88
+ * const numbers = Sink.make(Effect.logError, (value: number) => Effect.log(value))
89
+ * const strings = Sink.mapInput(numbers, Number)
90
+ * ```
91
+ *
92
+ * @since 1.0.0
93
+ * @category combinators
94
+ */
65
95
  export const mapInput = map;
66
96
  /**
67
97
  * Maps the error channel of a sink using the provided function.
68
98
  * Failures are mapped via `Cause.map`; defects and interrupts are preserved.
69
99
  *
100
+ * @remarks
101
+ * ## Why
102
+ * A producer's typed error can be translated into the vocabulary expected by an existing consumer
103
+ * without losing Cause structure.
104
+ *
105
+ * ## Ownership and lifetime
106
+ * Mapping is synchronous and resource-free. Success order is unchanged; only `Fail` reasons are
107
+ * mapped, while defects and interruption reasons pass through untouched.
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * import { Effect } from "effect"
112
+ * import * as Sink from "@typed/fx/Sink"
113
+ * const target: Sink.Sink<number, string> = Sink.make(Effect.logError, Effect.log)
114
+ * const acceptsNumbers = Sink.mapError(target, (error: number) => `code:${error}`)
115
+ * ```
116
+ *
70
117
  * @since 1.0.0
71
118
  * @category combinators
72
119
  */
@@ -121,6 +168,14 @@ class FilterMapSink {
121
168
  /**
122
169
  * Filters and transforms values before they reach the sink using a function that returns an `Option`.
123
170
  *
171
+ * @remarks
172
+ * ## Why
173
+ * Selection and transformation happen at the consumer boundary without constructing another Fx.
174
+ *
175
+ * ## Ownership and lifetime
176
+ * Inputs are inspected synchronously in arrival order. `Some` invokes the wrapped sink once;
177
+ * `None` invokes it zero times. The adapter acquires no resources and failures pass through.
178
+ *
124
179
  * @example
125
180
  * ```ts
126
181
  * import { Effect, Option } from "effect"
@@ -149,12 +204,42 @@ class FilterMapSink {
149
204
  export function filterMap(sink, f) {
150
205
  return FilterMapSink.make(sink, f);
151
206
  }
207
+ /**
208
+ * Forwards `Some` values and discards `None` values.
209
+ *
210
+ * @remarks
211
+ * ## Why
212
+ * `compact` consumes optional producer output with the same zero-or-one cardinality as `filterMap`.
213
+ *
214
+ * ## Ownership and lifetime
215
+ * Option inspection is synchronous and resource-free. Present values retain arrival order; failure
216
+ * causes pass through unchanged.
217
+ *
218
+ * @example
219
+ * ```ts
220
+ * import { Effect, Option } from "effect"
221
+ * import * as Sink from "@typed/fx/Sink"
222
+ * const sink = Sink.compact(Sink.make(Effect.logError, (n: number) => Effect.log(n)))
223
+ * sink.onSuccess(Option.some(1))
224
+ * ```
225
+ *
226
+ * @since 1.0.0
227
+ * @category combinators
228
+ */
152
229
  export function compact(sink) {
153
230
  return filterMap(sink, identity);
154
231
  }
155
232
  /**
156
233
  * Filters values before they reach the sink using a predicate function.
157
234
  *
235
+ * @remarks
236
+ * ## Why
237
+ * Predicate filtering narrows consumer traffic without changing the producer.
238
+ *
239
+ * ## Ownership and lifetime
240
+ * The predicate runs synchronously in arrival order. Matching values invoke the wrapped sink once;
241
+ * non-matches invoke it zero times. The adapter acquires no resources.
242
+ *
158
243
  * @example
159
244
  * ```ts
160
245
  * import { Effect } from "effect"
@@ -181,12 +266,48 @@ export function compact(sink) {
181
266
  export function filter(sink, f) {
182
267
  return filterMap(sink, Option.liftPredicate(f));
183
268
  }
269
+ /**
270
+ * Runs a producer-style callback with a sink that can complete the surrounding Effect early.
271
+ *
272
+ * @remarks
273
+ * ## Why
274
+ * Consumer combinators can stop upstream work after a bound or predicate without representing
275
+ * normal completion as failure.
276
+ *
277
+ * ## Ownership and lifetime
278
+ * The returned Effect owns the callback fiber. Completion, `earlyExit`, or interruption aborts that
279
+ * fiber through the supplied signal; deliveries after exit are ignored. The callback's services are
280
+ * combined with the wrapped sink's services.
281
+ *
282
+ * @example
283
+ * ```ts
284
+ * import { Effect } from "effect"
285
+ * import * as Sink from "@typed/fx/Sink"
286
+ * const base = Sink.make(Effect.logError, Effect.log)
287
+ * const program = Sink.withEarlyExit(base, (sink) => sink.onSuccess("done").pipe(Effect.andThen(sink.earlyExit)))
288
+ * ```
289
+ *
290
+ * @since 1.0.0
291
+ * @category lifecycle
292
+ */
184
293
  export function withEarlyExit(sink, f) {
185
294
  return Effect.contextWith((services) => Effect.callback(function (resume, signal) {
186
295
  let exited = false;
296
+ let exitRequested = false;
297
+ let resumed = false;
298
+ let producerFiber;
299
+ const finish = () => {
300
+ if (resumed || producerFiber === undefined)
301
+ return;
302
+ resumed = true;
303
+ resume(Fiber.interrupt(producerFiber));
304
+ };
187
305
  const earlyExit = Effect.sync(() => {
306
+ if (exited)
307
+ return;
188
308
  exited = true;
189
- resume(Effect.void);
309
+ exitRequested = true;
310
+ finish();
190
311
  });
191
312
  const onSuccess = (a) => {
192
313
  if (exited)
@@ -203,12 +324,63 @@ export function withEarlyExit(sink, f) {
203
324
  onFailure,
204
325
  earlyExit,
205
326
  };
206
- f(sinkWithEarlyExit, { signal, scheduler: this }).pipe(Effect.flatMap(() => earlyExit), (_) => Effect.runForkWith(services)(_, { scheduler: this, signal }));
327
+ producerFiber = f(sinkWithEarlyExit, { signal, scheduler: this }).pipe(Effect.flatMap(() => earlyExit), (_) => Effect.runForkWith(services)(_, { scheduler: this, signal }));
328
+ if (exitRequested)
329
+ finish();
207
330
  }));
208
331
  }
332
+ /**
333
+ * Runs a callback with an early-exit sink and a private Effect `Ref` initialized to `state`.
334
+ *
335
+ * @remarks
336
+ * ## Why
337
+ * It supports stateful consumer protocols while keeping their state local to one run.
338
+ *
339
+ * ## Ownership and lifetime
340
+ * Each execution creates one Ref and owns it until exit or interruption. Ref operations are lazy
341
+ * atomic Effects: serialized callback execution preserves producer order, while concurrent execution
342
+ * is ordered by scheduling. No state is shared across `withState` executions.
343
+ *
344
+ * @example
345
+ * ```ts
346
+ * import { Effect, Ref } from "effect"
347
+ * import * as Sink from "@typed/fx/Sink"
348
+ * const base = Sink.make(Effect.logError, Effect.log)
349
+ * const program = Sink.withState(base, 0, ({ state, earlyExit }) => Ref.set(state, 1).pipe(Effect.andThen(earlyExit)))
350
+ * ```
351
+ *
352
+ * @since 1.0.0
353
+ * @category lifecycle
354
+ */
209
355
  export function withState(sink, state, f) {
210
356
  return withEarlyExit(sink, (sink, params) => f({ ...sink, state: Ref.makeUnsafe(state) }, params));
211
357
  }
358
+ /**
359
+ * Runs a callback with private state whose effectful reads and writes are serialized.
360
+ *
361
+ * @remarks
362
+ * ## Why
363
+ * Overlapping asynchronous callbacks need a lock to prevent multiple updates from reading the same
364
+ * prior state.
365
+ *
366
+ * ## Ownership and lifetime
367
+ * Each execution owns one mutable cell and one single-permit semaphore. Modify Effects serialize in
368
+ * semaphore-acquisition order, release the permit on completion or interruption, and expose their
369
+ * typed errors and services. Constructing an Effect does not acquire the permit; running it does.
370
+ * Exit aborts the surrounding callback fiber.
371
+ *
372
+ * @example
373
+ * ```ts
374
+ * import { Effect } from "effect"
375
+ * import * as Sink from "@typed/fx/Sink"
376
+ * const base = Sink.make(Effect.logError, Effect.log)
377
+ * const program = Sink.withStateSemaphore(base, 0, (state) =>
378
+ * state.updateEffect((n) => Effect.succeed(n + 1)).pipe(Effect.andThen(state.earlyExit)))
379
+ * ```
380
+ *
381
+ * @since 1.0.0
382
+ * @category lifecycle
383
+ */
212
384
  export function withStateSemaphore(sink, state, f) {
213
385
  return withEarlyExit(sink, (sink, params) => {
214
386
  const stateRef = MutableRef.make(state);
@@ -223,6 +395,29 @@ export function withStateSemaphore(sink, state, f) {
223
395
  return f({ ...sink, modifyEffect, updateEffect, get }, params);
224
396
  });
225
397
  }
398
+ /**
399
+ * Threads pure state through successful inputs and forwards one derived value per input.
400
+ *
401
+ * @remarks
402
+ * ## Why
403
+ * `loop` implements an ordered consumer-side state machine without exposing mutable state to the
404
+ * producer.
405
+ *
406
+ * ## Ownership and lifetime
407
+ * Each adapted sink owns its seed. Updates are synchronous and follow callback invocation order;
408
+ * every input produces exactly one downstream success. Failures bypass the state machine. Reusing
409
+ * the same sink for another producer run continues from its retained seed; create a new sink to reset.
410
+ *
411
+ * @example
412
+ * ```ts
413
+ * import { Effect } from "effect"
414
+ * import * as Sink from "@typed/fx/Sink"
415
+ * const totals = Sink.loop(Sink.make(Effect.logError, Effect.log), 0, (sum, n: number) => [sum + n, sum + n])
416
+ * ```
417
+ *
418
+ * @since 1.0.0
419
+ * @category combinators
420
+ */
226
421
  export const loop = dual(3, function loop(sink, seed, f) {
227
422
  return new LoopSink(sink, seed, f);
228
423
  });
@@ -246,6 +441,30 @@ class LoopSink {
246
441
  return this.sink.onSuccess(c);
247
442
  }
248
443
  }
444
+ /**
445
+ * Threads pure state through failure causes and forwards one transformed cause per failure.
446
+ *
447
+ * @remarks
448
+ * ## Why
449
+ * Stateful error translation can retain retry or protocol context while preserving full Cause
450
+ * information.
451
+ *
452
+ * ## Ownership and lifetime
453
+ * Each adapted sink owns its seed. Failure callbacks update it synchronously in invocation order;
454
+ * successes pass through unchanged. Reusing the sink continues from its retained seed; create a new
455
+ * sink to reset. No resources are acquired.
456
+ *
457
+ * @example
458
+ * ```ts
459
+ * import { Cause, Effect } from "effect"
460
+ * import * as Sink from "@typed/fx/Sink"
461
+ * const target: Sink.Sink<number, string> = Sink.make(Effect.logError, Effect.log)
462
+ * const counted = Sink.loopCause(target, 0, (n, cause: Cause.Cause<string>) => [cause, n + 1])
463
+ * ```
464
+ *
465
+ * @since 1.0.0
466
+ * @category combinators
467
+ */
249
468
  export const loopCause = dual(3, function loopCause(sink, seed, f) {
250
469
  return new LoopCauseSink(sink, seed, f);
251
470
  });
@@ -269,6 +488,29 @@ class LoopCauseSink {
269
488
  return this.sink.onSuccess(value);
270
489
  }
271
490
  }
491
+ /**
492
+ * Threads pure state through successes and optionally forwards a derived value.
493
+ *
494
+ * @remarks
495
+ * ## Why
496
+ * It combines consumer-side state, filtering, and mapping in one ordered transition.
497
+ *
498
+ * ## Ownership and lifetime
499
+ * Each adapted sink owns its seed. Every input updates state synchronously; `Some` emits once and
500
+ * `None` emits nothing. Failures pass through. Reusing the sink continues from its retained seed;
501
+ * create a new sink to reset. The adapter acquires no resources.
502
+ *
503
+ * @example
504
+ * ```ts
505
+ * import { Effect, Option } from "effect"
506
+ * import * as Sink from "@typed/fx/Sink"
507
+ * const target = Sink.make(Effect.logError, Effect.log)
508
+ * const everyOther = Sink.filterMapLoop(target, false, (skip, n: number) => [skip ? Option.none() : Option.some(n), !skip])
509
+ * ```
510
+ *
511
+ * @since 1.0.0
512
+ * @category combinators
513
+ */
272
514
  export const filterMapLoop = dual(3, function filterMapLoop(sink, seed, f) {
273
515
  return new FilterMapLoopSink(sink, seed, f);
274
516
  });
@@ -294,6 +536,29 @@ class FilterMapLoopSink {
294
536
  return Effect.void;
295
537
  }
296
538
  }
539
+ /**
540
+ * Threads pure state through failures and optionally forwards a transformed cause.
541
+ *
542
+ * @remarks
543
+ * ## Why
544
+ * Stateful failure suppression and translation can be expressed without discarding Cause structure.
545
+ *
546
+ * ## Ownership and lifetime
547
+ * Each adapted sink owns its seed. Failure callbacks update state synchronously in invocation order;
548
+ * `Some` forwards once and `None` suppresses the failure. Successes pass through unchanged. Reusing
549
+ * the sink continues from its retained seed; create a new sink to reset.
550
+ *
551
+ * @example
552
+ * ```ts
553
+ * import { Cause, Effect, Option } from "effect"
554
+ * import * as Sink from "@typed/fx/Sink"
555
+ * const target: Sink.Sink<number, string> = Sink.make(Effect.logError, Effect.log)
556
+ * const first = Sink.filterMapLoopCause(target, true, (keep, cause: Cause.Cause<string>) => [keep ? Option.some(cause) : Option.none(), false])
557
+ * ```
558
+ *
559
+ * @since 1.0.0
560
+ * @category combinators
561
+ */
297
562
  export const filterMapLoopCause = dual(3, function filterMapLoopCause(sink, seed, f) {
298
563
  return new FilterMapLoopCauseSink(sink, seed, f);
299
564
  });
@@ -319,6 +584,32 @@ class FilterMapLoopCauseSink {
319
584
  return this.sink.onSuccess(value);
320
585
  }
321
586
  }
587
+ /**
588
+ * Threads state through an effectful success transformation and forwards one value on success.
589
+ *
590
+ * @remarks
591
+ * ## Why
592
+ * Stateful consumer transitions can consult Effect services or fail without moving the state
593
+ * machine into the producer.
594
+ *
595
+ * ## Ownership and lifetime
596
+ * Callback invocation constructs a transition Effect from the seed visible at that moment. The
597
+ * adapter does not serialize those Effects: overlapping callbacks can read the same seed, and
598
+ * successful transitions commit in completion order. A failure is sent to the wrapped sink and does
599
+ * not commit. The sink instance retains its last committed seed when reused by another producer run;
600
+ * construct a new adapted sink to reset it. Transition services and interruption remain typed.
601
+ *
602
+ * @example
603
+ * ```ts
604
+ * import { Effect } from "effect"
605
+ * import * as Sink from "@typed/fx/Sink"
606
+ * const target = Sink.make(Effect.logError, Effect.log)
607
+ * const totals = Sink.loopEffect(target, 0, (sum, n: number) => Effect.succeed([sum + n, sum + n] as const))
608
+ * ```
609
+ *
610
+ * @since 1.0.0
611
+ * @category combinators
612
+ */
322
613
  export const loopEffect = dual(3, function loopEffect(sink, seed, f) {
323
614
  return new LoopEffectSink(sink, seed, f);
324
615
  });
@@ -346,6 +637,32 @@ class LoopEffectSink {
346
637
  });
347
638
  }
348
639
  }
640
+ /**
641
+ * Threads state through an effectful success transition and optionally forwards its value.
642
+ *
643
+ * @remarks
644
+ * ## Why
645
+ * One transition can perform service-backed work, update state, and decide whether the consumer
646
+ * should observe a value.
647
+ *
648
+ * ## Ownership and lifetime
649
+ * Callback invocation constructs a transition Effect from the seed visible at that moment. The
650
+ * adapter does not serialize those Effects: overlapping callbacks can read the same seed, and
651
+ * successful transitions commit in completion order. `Some` then invokes the wrapped sink once,
652
+ * `None` not at all, and failure invokes its failure callback without committing. The sink instance
653
+ * retains its seed across producer runs; construct a new one to reset it.
654
+ *
655
+ * @example
656
+ * ```ts
657
+ * import { Effect, Option } from "effect"
658
+ * import * as Sink from "@typed/fx/Sink"
659
+ * const target = Sink.make(Effect.logError, Effect.log)
660
+ * const sink = Sink.filterMapLoopEffect(target, 0, (count, n: number) => Effect.succeed([Option.some(n), count + 1] as const))
661
+ * ```
662
+ *
663
+ * @since 1.0.0
664
+ * @category combinators
665
+ */
349
666
  export const filterMapLoopEffect = dual(3, function filterMapLoopEffect(sink, seed, f) {
350
667
  return new FilterMapLoopEffectSink(sink, seed, f);
351
668
  });
@@ -375,6 +692,32 @@ class FilterMapLoopEffectSink {
375
692
  });
376
693
  }
377
694
  }
695
+ /**
696
+ * Threads state through an effectful failure transformation.
697
+ *
698
+ * @remarks
699
+ * ## Why
700
+ * Failure handling can consult services and retain state while preserving the original Cause when
701
+ * the handler itself fails.
702
+ *
703
+ * ## Ownership and lifetime
704
+ * Callback invocation constructs a transition Effect from the seed visible at that moment. The
705
+ * adapter does not serialize those Effects: overlapping failures can read the same seed, and
706
+ * successful transitions commit in completion order. A transition failure is combined with the
707
+ * original cause and does not commit. Success values bypass the state machine. The sink instance
708
+ * retains its seed across producer runs; construct a new one to reset it.
709
+ *
710
+ * @example
711
+ * ```ts
712
+ * import { Effect } from "effect"
713
+ * import * as Sink from "@typed/fx/Sink"
714
+ * const target = Sink.make(Effect.logError, Effect.log)
715
+ * const sink = Sink.loopCauseEffect(target, 0, (count, cause) => Effect.succeed([cause, count + 1] as const))
716
+ * ```
717
+ *
718
+ * @since 1.0.0
719
+ * @category combinators
720
+ */
378
721
  export const loopCauseEffect = dual(3, function loopCauseEffect(sink, seed, f) {
379
722
  return new LoopCauseEffectSink(sink, seed, f);
380
723
  });
@@ -402,6 +745,32 @@ class LoopCauseEffectSink {
402
745
  return this.sink.onSuccess(value);
403
746
  }
404
747
  }
748
+ /**
749
+ * Threads state through an effectful failure transition and optionally forwards a cause.
750
+ *
751
+ * @remarks
752
+ * ## Why
753
+ * It supports service-backed, stateful failure suppression or translation at the consumer boundary.
754
+ *
755
+ * ## Ownership and lifetime
756
+ * Callback invocation constructs a transition Effect from the seed visible at that moment. The
757
+ * adapter does not serialize those Effects: overlapping failures can read the same seed, and
758
+ * successful transitions commit in completion order. `Some` forwards one cause, `None` suppresses
759
+ * it, and transition failure is forwarded without committing. Successes pass through. The sink
760
+ * instance retains its seed across producer runs; construct a new one to reset it.
761
+ *
762
+ * @example
763
+ * ```ts
764
+ * import { Cause, Effect, Option } from "effect"
765
+ * import * as Sink from "@typed/fx/Sink"
766
+ * const target: Sink.Sink<number, string> = Sink.make(Effect.logError, Effect.log)
767
+ * const sink = Sink.filterMapLoopCauseEffect(target, false, (seen, cause: Cause.Cause<string>) =>
768
+ * Effect.succeed([seen ? Option.none() : Option.some(cause), true] as const))
769
+ * ```
770
+ *
771
+ * @since 1.0.0
772
+ * @category combinators
773
+ */
405
774
  export function filterMapLoopCauseEffect(sink, seed, f) {
406
775
  return new FilterMapLoopCauseEffectSink(sink, seed, f);
407
776
  }
@@ -431,6 +800,30 @@ class FilterMapLoopCauseEffectSink {
431
800
  return this.sink.onSuccess(value);
432
801
  }
433
802
  }
803
+ /**
804
+ * Runs a producer callback through a bounded view of a sink.
805
+ *
806
+ * @remarks
807
+ * ## Why
808
+ * Consumers can skip an initial prefix and stop after a fixed number of values, allowing the
809
+ * surrounding producer work to finish early.
810
+ *
811
+ * ## Ownership and lifetime
812
+ * Each execution owns fresh counters and an early-exit callback. Successes remain ordered; at most
813
+ * `take` values are delivered after `skip` values. Failures always pass through. Reaching the bound
814
+ * completes and aborts the callback fiber; negative bounds are not normalized.
815
+ *
816
+ * @example
817
+ * ```ts
818
+ * import { Effect } from "effect"
819
+ * import * as Sink from "@typed/fx/Sink"
820
+ * const target = Sink.make(Effect.logError, Effect.log)
821
+ * const program = Sink.slice(target, { skip: 1, take: 2 }, (bounded) => bounded.onSuccess("kept"))
822
+ * ```
823
+ *
824
+ * @since 1.0.0
825
+ * @category lifecycle
826
+ */
434
827
  export const slice = dual(3, function slice(sink, bounds, f) {
435
828
  return withEarlyExit(sink, (s) => f(new SliceSink(s, bounds)));
436
829
  });
@@ -461,6 +854,30 @@ class SliceSink {
461
854
  return this.sink.earlyExit;
462
855
  }
463
856
  }
857
+ /**
858
+ * Runs an Effect for each input and forwards its successful value to the sink.
859
+ *
860
+ * @remarks
861
+ * ## Why
862
+ * Consumer-side adaptation can use services and typed failure without creating an intermediate Fx.
863
+ *
864
+ * ## Ownership and lifetime
865
+ * One transition Effect runs per callback invocation. Its success is forwarded once; its complete
866
+ * failure Cause is sent to `onFailure`. Calls themselves are not serialized by this adapter, so
867
+ * ordering follows the invoking producer. Services join the sink requirements; interruption is local
868
+ * to each callback Effect.
869
+ *
870
+ * @example
871
+ * ```ts
872
+ * import { Effect } from "effect"
873
+ * import * as Sink from "@typed/fx/Sink"
874
+ * const numbers = Sink.mapEffect(Sink.make(Effect.logError, Effect.log), (text: string) =>
875
+ * Effect.succeed(Number(text)))
876
+ * ```
877
+ *
878
+ * @since 1.0.0
879
+ * @category combinators
880
+ */
464
881
  export const mapEffect = dual(2, function mapEffect(sink, f) {
465
882
  return new MapEffectSink(sink, f);
466
883
  });
@@ -480,8 +897,51 @@ class MapEffectSink {
480
897
  return Effect.matchCauseEffect(this.f(value), this.sink);
481
898
  }
482
899
  }
483
- /** Alias for `mapEffect`: transforms input with an effect before the sink. @since 1.0.0 @category combinators */
900
+ /**
901
+ * Alias for `mapEffect`, named for the input-side direction of the effectful transformation.
902
+ *
903
+ * @remarks
904
+ * ## Why
905
+ * The name highlights that Sink composition is contravariant in successful input.
906
+ *
907
+ * ## Ownership and lifetime
908
+ * It is exactly `mapEffect`: one Effect per input, with the same failures, services, ordering, and
909
+ * interruption behavior.
910
+ *
911
+ * @example
912
+ * ```ts
913
+ * import { Effect } from "effect"
914
+ * import * as Sink from "@typed/fx/Sink"
915
+ * const sink = Sink.mapInputEffect(Sink.make(Effect.logError, Effect.log), (n: number) => Effect.succeed(String(n)))
916
+ * ```
917
+ *
918
+ * @since 1.0.0
919
+ * @category combinators
920
+ */
484
921
  export const mapInputEffect = mapEffect;
922
+ /**
923
+ * Runs an Effect for each input and forwards its optional successful value.
924
+ *
925
+ * @remarks
926
+ * ## Why
927
+ * Service-backed validation, selection, and transformation can happen in one consumer adapter.
928
+ *
929
+ * ## Ownership and lifetime
930
+ * Each input runs one Effect. `Some` invokes the sink once, `None` zero times, and failure is routed
931
+ * as a Cause. Invocation order and concurrency are controlled by the producer; services and
932
+ * interruption remain explicit in the returned sink.
933
+ *
934
+ * @example
935
+ * ```ts
936
+ * import { Effect, Option } from "effect"
937
+ * import * as Sink from "@typed/fx/Sink"
938
+ * const sink = Sink.filterMapEffect(Sink.make(Effect.logError, Effect.log), (n: number) =>
939
+ * Effect.succeed(n > 0 ? Option.some(n) : Option.none()))
940
+ * ```
941
+ *
942
+ * @since 1.0.0
943
+ * @category combinators
944
+ */
485
945
  export const filterMapEffect = dual(2, function filterMapEffect(sink, f) {
486
946
  return new FilterMapEffectSink(sink, f);
487
947
  });
@@ -509,6 +969,28 @@ class FilterMapEffectSink {
509
969
  });
510
970
  }
511
971
  }
972
+ /**
973
+ * Runs an effectful predicate and forwards inputs for which it succeeds with `true`.
974
+ *
975
+ * @remarks
976
+ * ## Why
977
+ * A consumer can filter using service-backed or asynchronous policy without changing the producer.
978
+ *
979
+ * ## Ownership and lifetime
980
+ * Each input runs one predicate Effect. `true` forwards once, `false` not at all, and predicate
981
+ * failure reaches the sink's failure callback. The producer controls callback ordering and
982
+ * concurrency; predicate services and interruption remain typed.
983
+ *
984
+ * @example
985
+ * ```ts
986
+ * import { Effect } from "effect"
987
+ * import * as Sink from "@typed/fx/Sink"
988
+ * const positive = Sink.filterEffect(Sink.make(Effect.logError, Effect.log), (n: number) => Effect.succeed(n > 0))
989
+ * ```
990
+ *
991
+ * @since 1.0.0
992
+ * @category combinators
993
+ */
512
994
  export const filterEffect = dual(2, function filterEffect(sink, f) {
513
995
  return new FilterEffectSink(sink, f);
514
996
  });
@@ -536,6 +1018,29 @@ class FilterEffectSink {
536
1018
  });
537
1019
  }
538
1020
  }
1021
+ /**
1022
+ * Runs an effectful observation before forwarding each successful input unchanged.
1023
+ *
1024
+ * @remarks
1025
+ * ## Why
1026
+ * Logging, metrics, and other observations can be attached at the consumer boundary without
1027
+ * changing the value type.
1028
+ *
1029
+ * ## Ownership and lifetime
1030
+ * The tap Effect completes before the value is forwarded. If it fails, its Cause is delivered and
1031
+ * the value is not forwarded. The producer controls call order and concurrency; tap services and
1032
+ * interruption are reflected by the returned sink.
1033
+ *
1034
+ * @example
1035
+ * ```ts
1036
+ * import { Effect } from "effect"
1037
+ * import * as Sink from "@typed/fx/Sink"
1038
+ * const observed = Sink.tapEffect(Sink.make(Effect.logError, Effect.log), (n: number) => Effect.log(`saw ${n}`))
1039
+ * ```
1040
+ *
1041
+ * @since 1.0.0
1042
+ * @category combinators
1043
+ */
539
1044
  export const tapEffect = dual(2, function tapEffect(sink, f) {
540
1045
  return new TapEffectSink(sink, f);
541
1046
  });
@@ -558,11 +1063,37 @@ class TapEffectSink {
558
1063
  });
559
1064
  }
560
1065
  }
1066
+ /**
1067
+ * Exchanges a sink's typed success and failure channels.
1068
+ *
1069
+ * @remarks
1070
+ * ## Why
1071
+ * Error-oriented consumers can be reused as value consumers, and vice versa, without changing the
1072
+ * producer-side protocol.
1073
+ *
1074
+ * ## Ownership and lifetime
1075
+ * A successful input becomes `Cause.fail` downstream. For an incoming Cause, the first typed `Fail`
1076
+ * reason becomes a success and every remaining reason is discarded, including later failures,
1077
+ * defects, or interruption reasons. A Cause with no typed failure passes through intact. The adapter
1078
+ * is synchronous, ordered, and resource-free; use `exit` when the whole Cause must remain observable.
1079
+ *
1080
+ * @example
1081
+ * ```ts
1082
+ * import { Effect } from "effect"
1083
+ * import * as Sink from "@typed/fx/Sink"
1084
+ * const errorsAsValues = Sink.flip(Sink.make(Effect.logError, (value: number) => Effect.log(value)))
1085
+ * ```
1086
+ *
1087
+ * @since 1.0.0
1088
+ * @category errors
1089
+ */
561
1090
  export const flip = (sink) => new FlipSink(sink);
562
1091
  class FlipSink {
563
1092
  sink;
564
1093
  constructor(sink) {
565
1094
  this.sink = sink;
1095
+ this.onSuccess = this.onSuccess.bind(this);
1096
+ this.onFailure = this.onFailure.bind(this);
566
1097
  }
567
1098
  onSuccess(value) {
568
1099
  return this.sink.onFailure(Cause.fail(value));
@@ -574,11 +1105,34 @@ class FlipSink {
574
1105
  return this.sink.onSuccess(fail.error);
575
1106
  }
576
1107
  }
1108
+ /**
1109
+ * Materializes both sink channels as successful Effect `Exit` values.
1110
+ *
1111
+ * @remarks
1112
+ * ## Why
1113
+ * A single infallible consumer can record or inspect success and the complete failure Cause as data.
1114
+ *
1115
+ * ## Ownership and lifetime
1116
+ * Every input produces exactly one downstream success: `Exit.succeed` for values or
1117
+ * `Exit.failCause` for failures. Order is preserved and the adapter acquires no resources.
1118
+ *
1119
+ * @example
1120
+ * ```ts
1121
+ * import { Effect } from "effect"
1122
+ * import * as Sink from "@typed/fx/Sink"
1123
+ * const exits = Sink.exit(Sink.make(Effect.logError, Effect.log))
1124
+ * ```
1125
+ *
1126
+ * @since 1.0.0
1127
+ * @category errors
1128
+ */
577
1129
  export const exit = (sink) => new ExitSink(sink);
578
1130
  class ExitSink {
579
1131
  sink;
580
1132
  constructor(sink) {
581
1133
  this.sink = sink;
1134
+ this.onSuccess = this.onSuccess.bind(this);
1135
+ this.onFailure = this.onFailure.bind(this);
582
1136
  }
583
1137
  onSuccess(value) {
584
1138
  return this.sink.onSuccess(Exit.succeed(value));
@@ -587,6 +1141,30 @@ class ExitSink {
587
1141
  return this.sink.onSuccess(Exit.failCause(cause));
588
1142
  }
589
1143
  }
1144
+ /**
1145
+ * Runs a producer callback until the first matching value has been forwarded.
1146
+ *
1147
+ * @remarks
1148
+ * ## Why
1149
+ * Unlike a filtering operation, `dropAfter` includes the boundary value and then terminates
1150
+ * producer work normally.
1151
+ *
1152
+ * ## Ownership and lifetime
1153
+ * Values are forwarded in order through the first predicate match, then early exit completes and
1154
+ * aborts the callback fiber. Callback failure is caught and sent to the original sink. The predicate
1155
+ * is synchronous; thrown exceptions are defects.
1156
+ *
1157
+ * @example
1158
+ * ```ts
1159
+ * import { Effect } from "effect"
1160
+ * import * as Sink from "@typed/fx/Sink"
1161
+ * const target = Sink.make(Effect.logError, Effect.log)
1162
+ * const program = Sink.dropAfter(target, (n: number) => n >= 10, (limited) => limited.onSuccess(10))
1163
+ * ```
1164
+ *
1165
+ * @since 1.0.0
1166
+ * @category lifecycle
1167
+ */
590
1168
  export const dropAfter = dual(3, function dropAfter(sink, predicate, f) {
591
1169
  return withEarlyExit(sink, (s) => f(new DropAfterSink(s, predicate)).pipe(Effect.catchCause(sink.onFailure)));
592
1170
  });
@@ -609,6 +1187,29 @@ class DropAfterSink {
609
1187
  return this.sink.onSuccess(value);
610
1188
  }
611
1189
  }
1190
+ /**
1191
+ * Suppresses failure causes made entirely of interruption reasons.
1192
+ *
1193
+ * @remarks
1194
+ * ## Why
1195
+ * Some terminal consumers treat expected cancellation as silent completion while still needing
1196
+ * typed failures and defects.
1197
+ *
1198
+ * ## Ownership and lifetime
1199
+ * Successes pass through unchanged. A pure interruption Cause invokes no downstream callback;
1200
+ * mixed or non-interruption causes are preserved. The adapter does not change fiber ownership or
1201
+ * cleanup and acquires no resources.
1202
+ *
1203
+ * @example
1204
+ * ```ts
1205
+ * import { Effect } from "effect"
1206
+ * import * as Sink from "@typed/fx/Sink"
1207
+ * const quietCancellation = Sink.skipInterrupt(Sink.make(Effect.logError, Effect.log))
1208
+ * ```
1209
+ *
1210
+ * @since 1.0.0
1211
+ * @category errors
1212
+ */
612
1213
  export const skipInterrupt = (sink) => {
613
1214
  return {
614
1215
  onSuccess: (value) => sink.onSuccess(value),
@@ -622,6 +1223,27 @@ export const skipInterrupt = (sink) => {
622
1223
  * Reduces values into a single result using a pure function. Pass a `Ref<B>`
623
1224
  * (e.g. from `Ref.make(initial)`); after running, read the result with `Ref.get(ref)`.
624
1225
  *
1226
+ * @remarks
1227
+ * ## Why
1228
+ * An existing Ref provides an explicit, independently readable result location for consumer-side
1229
+ * aggregation.
1230
+ *
1231
+ * ## Ownership and lifetime
1232
+ * The caller owns the Ref. Each success returns a lazy atomic `Ref.update`; invoking `onSuccess`
1233
+ * does not update immediately. If the producer executes callback Effects serially, values reduce in
1234
+ * that execution order. Concurrent execution is still atomic but may be scheduled in a different
1235
+ * order than callback invocation. Failures are ignored and a thrown reducer exception is a defect.
1236
+ *
1237
+ * @example
1238
+ * ```ts
1239
+ * import { Effect, Ref } from "effect"
1240
+ * import * as Sink from "@typed/fx/Sink"
1241
+ * const program = Effect.gen(function* () {
1242
+ * const total = yield* Ref.make(0)
1243
+ * return Sink.reduce(total, (sum, n: number) => sum + n)
1244
+ * })
1245
+ * ```
1246
+ *
625
1247
  * @since 1.0.0
626
1248
  * @category combinators
627
1249
  */
@@ -636,6 +1258,28 @@ export function reduce(ref, f) {
636
1258
  * after running, read the result with `Ref.get(ref)`. If the reducer effect fails,
637
1259
  * the ref is left unchanged (Sink onSuccess is typed as never failing).
638
1260
  *
1261
+ * @remarks
1262
+ * ## Why
1263
+ * Aggregation may require Effect services or asynchronous work while the result remains explicitly
1264
+ * available through a caller-owned Ref.
1265
+ *
1266
+ * ## Ownership and lifetime
1267
+ * The caller owns the Ref. Each success returns a lazy read/reduce/write Effect; invocation alone does
1268
+ * no work. The three steps are not one atomic operation. Serialized producers preserve execution
1269
+ * order, while overlapping executions can read the same value and commit in completion order.
1270
+ * Reducer failures, producer failures, and interrupted writes are ignored. Use
1271
+ * `withStateSemaphore` when the whole effectful transition must be serialized.
1272
+ *
1273
+ * @example
1274
+ * ```ts
1275
+ * import { Effect, Ref } from "effect"
1276
+ * import * as Sink from "@typed/fx/Sink"
1277
+ * const program = Effect.gen(function* () {
1278
+ * const total = yield* Ref.make(0)
1279
+ * return Sink.reduceEffect(total, (sum, n: number) => Effect.succeed(sum + n))
1280
+ * })
1281
+ * ```
1282
+ *
639
1283
  * @since 1.0.0
640
1284
  * @category combinators
641
1285
  */
@@ -652,6 +1296,26 @@ export function reduceEffect(ref, f) {
652
1296
  * Collects all values into an array. Pass a `Ref<ReadonlyArray<A>>` (e.g. `Ref.make([])`);
653
1297
  * after running, read the result with `Ref.get(ref)`.
654
1298
  *
1299
+ * @remarks
1300
+ * ## Why
1301
+ * Collection remains an explicit consumer concern and the accumulated result can be read without
1302
+ * changing the producer.
1303
+ *
1304
+ * ## Ownership and lifetime
1305
+ * The caller owns the Ref. Each success returns a lazy atomic `Ref.update` that allocates a new array.
1306
+ * Serialized producers collect in callback-Effect execution order. Concurrent updates remain atomic,
1307
+ * but execution scheduling—not invocation order—determines array order. Failures are ignored.
1308
+ *
1309
+ * @example
1310
+ * ```ts
1311
+ * import { Effect, Ref } from "effect"
1312
+ * import * as Sink from "@typed/fx/Sink"
1313
+ * const program = Effect.gen(function* () {
1314
+ * const values = yield* Ref.make<ReadonlyArray<number>>([])
1315
+ * return Sink.collect(values)
1316
+ * })
1317
+ * ```
1318
+ *
655
1319
  * @since 1.0.0
656
1320
  * @category combinators
657
1321
  */
@@ -665,6 +1329,25 @@ export function collect(ref) {
665
1329
  * Keeps only the first value. Pass a `Ref<Option.Option<A>>` (e.g. `Ref.make(Option.none())`);
666
1330
  * after running, read the result with `Ref.get(ref)`.
667
1331
  *
1332
+ * @remarks
1333
+ * ## Why
1334
+ * The first observed value can be retained in a caller-owned location without stopping the producer.
1335
+ *
1336
+ * ## Ownership and lifetime
1337
+ * The caller owns the Ref. Each success returns a lazy atomic update. The first update Effect to
1338
+ * execute while the Ref is `None` stores its value; that is the first callback only when the producer
1339
+ * executes callback Effects serially. Later updates leave `Some` unchanged. Failures are ignored.
1340
+ *
1341
+ * @example
1342
+ * ```ts
1343
+ * import { Effect, Option, Ref } from "effect"
1344
+ * import * as Sink from "@typed/fx/Sink"
1345
+ * const program = Effect.gen(function* () {
1346
+ * const first = yield* Ref.make<Option.Option<number>>(Option.none())
1347
+ * return Sink.head(first)
1348
+ * })
1349
+ * ```
1350
+ *
668
1351
  * @since 1.0.0
669
1352
  * @category combinators
670
1353
  */
@@ -678,6 +1361,25 @@ export function head(ref) {
678
1361
  * Keeps only the last value. Pass a `Ref<Option.Option<A>>` (e.g. `Ref.make(Option.none())`);
679
1362
  * after running, read the result with `Ref.get(ref)`.
680
1363
  *
1364
+ * @remarks
1365
+ * ## Why
1366
+ * The latest observed value can be retained independently of producer completion.
1367
+ *
1368
+ * ## Ownership and lifetime
1369
+ * The caller owns the Ref. Each success returns a lazy atomic `Ref.set`. With serialized callback
1370
+ * Effects the last callback wins; with concurrent execution the last set to execute wins, which may
1371
+ * differ from invocation order. Failures are ignored and the sink acquires no resources.
1372
+ *
1373
+ * @example
1374
+ * ```ts
1375
+ * import { Effect, Option, Ref } from "effect"
1376
+ * import * as Sink from "@typed/fx/Sink"
1377
+ * const program = Effect.gen(function* () {
1378
+ * const latest = yield* Ref.make<Option.Option<number>>(Option.none())
1379
+ * return Sink.last(latest)
1380
+ * })
1381
+ * ```
1382
+ *
681
1383
  * @since 1.0.0
682
1384
  * @category combinators
683
1385
  */