@typed/fx 2.0.0-beta.1 → 2.0.0-beta.10

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 (664) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +35 -21
  3. package/dist/Fx/Fx.d.ts +371 -19
  4. package/dist/Fx/Fx.d.ts.map +1 -1
  5. package/dist/Fx/Fx.js +37 -6
  6. package/dist/Fx/TypeId.d.ts +52 -6
  7. package/dist/Fx/TypeId.d.ts.map +1 -1
  8. package/dist/Fx/TypeId.js +41 -4
  9. package/dist/Fx/combinators/additive.d.ts +162 -11
  10. package/dist/Fx/combinators/additive.d.ts.map +1 -1
  11. package/dist/Fx/combinators/additive.js +162 -11
  12. package/dist/Fx/combinators/catch.d.ts +202 -29
  13. package/dist/Fx/combinators/catch.d.ts.map +1 -1
  14. package/dist/Fx/combinators/catch.js +193 -23
  15. package/dist/Fx/combinators/causes.d.ts +25 -2
  16. package/dist/Fx/combinators/causes.d.ts.map +1 -1
  17. package/dist/Fx/combinators/causes.js +25 -2
  18. package/dist/Fx/combinators/changesWithEffect.d.ts +21 -1
  19. package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -1
  20. package/dist/Fx/combinators/changesWithEffect.js +21 -1
  21. package/dist/Fx/combinators/compact.d.ts +18 -1
  22. package/dist/Fx/combinators/compact.d.ts.map +1 -1
  23. package/dist/Fx/combinators/compact.js +18 -1
  24. package/dist/Fx/combinators/concatMap.d.ts +86 -0
  25. package/dist/Fx/combinators/concatMap.d.ts.map +1 -0
  26. package/dist/Fx/combinators/concatMap.js +86 -0
  27. package/dist/Fx/combinators/continueWith.d.ts +113 -5
  28. package/dist/Fx/combinators/continueWith.d.ts.map +1 -1
  29. package/dist/Fx/combinators/continueWith.js +113 -5
  30. package/dist/Fx/combinators/debounce.d.ts +34 -0
  31. package/dist/Fx/combinators/debounce.d.ts.map +1 -0
  32. package/dist/Fx/combinators/debounce.js +35 -0
  33. package/dist/Fx/combinators/delay.d.ts +36 -0
  34. package/dist/Fx/combinators/delay.d.ts.map +1 -0
  35. package/dist/Fx/combinators/delay.js +33 -0
  36. package/dist/Fx/combinators/dropUntil.d.ts +44 -2
  37. package/dist/Fx/combinators/dropUntil.d.ts.map +1 -1
  38. package/dist/Fx/combinators/dropUntil.js +44 -2
  39. package/dist/Fx/combinators/during.d.ts +38 -0
  40. package/dist/Fx/combinators/during.d.ts.map +1 -0
  41. package/dist/Fx/combinators/during.js +85 -0
  42. package/dist/Fx/combinators/ensuring.d.ts +34 -4
  43. package/dist/Fx/combinators/ensuring.d.ts.map +1 -1
  44. package/dist/Fx/combinators/ensuring.js +34 -4
  45. package/dist/Fx/combinators/exhaustLatestMap.d.ts +41 -5
  46. package/dist/Fx/combinators/exhaustLatestMap.d.ts.map +1 -1
  47. package/dist/Fx/combinators/exhaustLatestMap.js +41 -5
  48. package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts +40 -4
  49. package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts.map +1 -1
  50. package/dist/Fx/combinators/exhaustLatestMapEffect.js +40 -4
  51. package/dist/Fx/combinators/exhaustMap.d.ts +38 -1
  52. package/dist/Fx/combinators/exhaustMap.d.ts.map +1 -1
  53. package/dist/Fx/combinators/exhaustMap.js +38 -1
  54. package/dist/Fx/combinators/exhaustMapEffect.d.ts +33 -1
  55. package/dist/Fx/combinators/exhaustMapEffect.d.ts.map +1 -1
  56. package/dist/Fx/combinators/exhaustMapEffect.js +33 -1
  57. package/dist/Fx/combinators/exit.d.ts +23 -2
  58. package/dist/Fx/combinators/exit.d.ts.map +1 -1
  59. package/dist/Fx/combinators/exit.js +23 -2
  60. package/dist/Fx/combinators/filter.d.ts +17 -1
  61. package/dist/Fx/combinators/filter.d.ts.map +1 -1
  62. package/dist/Fx/combinators/filter.js +17 -1
  63. package/dist/Fx/combinators/filterEffect.d.ts +22 -1
  64. package/dist/Fx/combinators/filterEffect.d.ts.map +1 -1
  65. package/dist/Fx/combinators/filterEffect.js +22 -1
  66. package/dist/Fx/combinators/filterMap.d.ts +20 -1
  67. package/dist/Fx/combinators/filterMap.d.ts.map +1 -1
  68. package/dist/Fx/combinators/filterMap.js +20 -1
  69. package/dist/Fx/combinators/filterMapEffect.d.ts +21 -1
  70. package/dist/Fx/combinators/filterMapEffect.d.ts.map +1 -1
  71. package/dist/Fx/combinators/filterMapEffect.js +21 -1
  72. package/dist/Fx/combinators/filterMapLoop.d.ts +20 -1
  73. package/dist/Fx/combinators/filterMapLoop.d.ts.map +1 -1
  74. package/dist/Fx/combinators/filterMapLoop.js +20 -1
  75. package/dist/Fx/combinators/filterMapLoopCause.d.ts +21 -1
  76. package/dist/Fx/combinators/filterMapLoopCause.d.ts.map +1 -1
  77. package/dist/Fx/combinators/filterMapLoopCause.js +21 -1
  78. package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts +21 -1
  79. package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts.map +1 -1
  80. package/dist/Fx/combinators/filterMapLoopCauseEffect.js +21 -1
  81. package/dist/Fx/combinators/filterMapLoopEffect.d.ts +21 -1
  82. package/dist/Fx/combinators/filterMapLoopEffect.d.ts.map +1 -1
  83. package/dist/Fx/combinators/filterMapLoopEffect.js +21 -1
  84. package/dist/Fx/combinators/flatMap.d.ts +50 -5
  85. package/dist/Fx/combinators/flatMap.d.ts.map +1 -1
  86. package/dist/Fx/combinators/flatMap.js +36 -3
  87. package/dist/Fx/combinators/flatMapConcurrently.d.ts +51 -4
  88. package/dist/Fx/combinators/flatMapConcurrently.d.ts.map +1 -1
  89. package/dist/Fx/combinators/flatMapConcurrently.js +48 -2
  90. package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts +48 -4
  91. package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts.map +1 -1
  92. package/dist/Fx/combinators/flatMapConcurrentlyEffect.js +40 -2
  93. package/dist/Fx/combinators/flatMapEffect.d.ts +46 -4
  94. package/dist/Fx/combinators/flatMapEffect.d.ts.map +1 -1
  95. package/dist/Fx/combinators/flatMapEffect.js +32 -2
  96. package/dist/Fx/combinators/flip.d.ts +34 -2
  97. package/dist/Fx/combinators/flip.d.ts.map +1 -1
  98. package/dist/Fx/combinators/flip.js +34 -2
  99. package/dist/Fx/combinators/gen.d.ts +29 -10
  100. package/dist/Fx/combinators/gen.d.ts.map +1 -1
  101. package/dist/Fx/combinators/gen.js +28 -4
  102. package/dist/Fx/combinators/genScoped.d.ts +33 -10
  103. package/dist/Fx/combinators/genScoped.d.ts.map +1 -1
  104. package/dist/Fx/combinators/genScoped.js +31 -3
  105. package/dist/Fx/combinators/grouped.d.ts +89 -0
  106. package/dist/Fx/combinators/grouped.d.ts.map +1 -0
  107. package/dist/Fx/combinators/grouped.js +146 -0
  108. package/dist/Fx/combinators/index.d.ts +35 -0
  109. package/dist/Fx/combinators/index.d.ts.map +1 -1
  110. package/dist/Fx/combinators/index.js +35 -0
  111. package/dist/Fx/combinators/keyed.d.ts +123 -9
  112. package/dist/Fx/combinators/keyed.d.ts.map +1 -1
  113. package/dist/Fx/combinators/keyed.js +69 -11
  114. package/dist/Fx/combinators/loop.d.ts +17 -1
  115. package/dist/Fx/combinators/loop.d.ts.map +1 -1
  116. package/dist/Fx/combinators/loop.js +17 -1
  117. package/dist/Fx/combinators/loopCause.d.ts +18 -1
  118. package/dist/Fx/combinators/loopCause.d.ts.map +1 -1
  119. package/dist/Fx/combinators/loopCause.js +18 -1
  120. package/dist/Fx/combinators/loopCauseEffect.d.ts +19 -1
  121. package/dist/Fx/combinators/loopCauseEffect.d.ts.map +1 -1
  122. package/dist/Fx/combinators/loopCauseEffect.js +19 -1
  123. package/dist/Fx/combinators/loopEffect.d.ts +24 -1
  124. package/dist/Fx/combinators/loopEffect.d.ts.map +1 -1
  125. package/dist/Fx/combinators/loopEffect.js +24 -1
  126. package/dist/Fx/combinators/map.d.ts +46 -1
  127. package/dist/Fx/combinators/map.d.ts.map +1 -1
  128. package/dist/Fx/combinators/map.js +43 -1
  129. package/dist/Fx/combinators/mapBoth.d.ts +20 -1
  130. package/dist/Fx/combinators/mapBoth.d.ts.map +1 -1
  131. package/dist/Fx/combinators/mapBoth.js +20 -1
  132. package/dist/Fx/combinators/mapEffect.d.ts +25 -1
  133. package/dist/Fx/combinators/mapEffect.d.ts.map +1 -1
  134. package/dist/Fx/combinators/mapEffect.js +25 -1
  135. package/dist/Fx/combinators/mapError.d.ts +21 -5
  136. package/dist/Fx/combinators/mapError.d.ts.map +1 -1
  137. package/dist/Fx/combinators/mapError.js +21 -5
  138. package/dist/Fx/combinators/mergeAll.d.ts +35 -1
  139. package/dist/Fx/combinators/mergeAll.d.ts.map +1 -1
  140. package/dist/Fx/combinators/mergeAll.js +35 -1
  141. package/dist/Fx/combinators/mergeOrdered.d.ts +36 -4
  142. package/dist/Fx/combinators/mergeOrdered.d.ts.map +1 -1
  143. package/dist/Fx/combinators/mergeOrdered.js +68 -14
  144. package/dist/Fx/combinators/onError.d.ts +34 -4
  145. package/dist/Fx/combinators/onError.d.ts.map +1 -1
  146. package/dist/Fx/combinators/onError.js +34 -4
  147. package/dist/Fx/combinators/onExit.d.ts +29 -3
  148. package/dist/Fx/combinators/onExit.d.ts.map +1 -1
  149. package/dist/Fx/combinators/onExit.js +29 -3
  150. package/dist/Fx/combinators/onInterrupt.d.ts +49 -4
  151. package/dist/Fx/combinators/onInterrupt.d.ts.map +1 -1
  152. package/dist/Fx/combinators/onInterrupt.js +49 -4
  153. package/dist/Fx/combinators/pairwise.d.ts +28 -0
  154. package/dist/Fx/combinators/pairwise.d.ts.map +1 -0
  155. package/dist/Fx/combinators/pairwise.js +31 -0
  156. package/dist/Fx/combinators/provide.d.ts +141 -20
  157. package/dist/Fx/combinators/provide.d.ts.map +1 -1
  158. package/dist/Fx/combinators/provide.js +137 -16
  159. package/dist/Fx/combinators/race.d.ts +92 -0
  160. package/dist/Fx/combinators/race.d.ts.map +1 -0
  161. package/dist/Fx/combinators/race.js +149 -0
  162. package/dist/Fx/combinators/repeat.d.ts +41 -0
  163. package/dist/Fx/combinators/repeat.d.ts.map +1 -0
  164. package/dist/Fx/combinators/repeat.js +57 -0
  165. package/dist/Fx/combinators/result.d.ts +23 -1
  166. package/dist/Fx/combinators/result.d.ts.map +1 -1
  167. package/dist/Fx/combinators/result.js +27 -13
  168. package/dist/Fx/combinators/retry.d.ts +53 -0
  169. package/dist/Fx/combinators/retry.d.ts.map +1 -0
  170. package/dist/Fx/combinators/retry.js +71 -0
  171. package/dist/Fx/combinators/sample.d.ts +31 -0
  172. package/dist/Fx/combinators/sample.d.ts.map +1 -0
  173. package/dist/Fx/combinators/sample.js +42 -0
  174. package/dist/Fx/combinators/scan.d.ts +41 -2
  175. package/dist/Fx/combinators/scan.d.ts.map +1 -1
  176. package/dist/Fx/combinators/scan.js +43 -4
  177. package/dist/Fx/combinators/since.d.ts +30 -0
  178. package/dist/Fx/combinators/since.d.ts.map +1 -0
  179. package/dist/Fx/combinators/since.js +39 -0
  180. package/dist/Fx/combinators/skip.d.ts +33 -2
  181. package/dist/Fx/combinators/skip.d.ts.map +1 -1
  182. package/dist/Fx/combinators/skip.js +33 -2
  183. package/dist/Fx/combinators/skipRepeats.d.ts +17 -1
  184. package/dist/Fx/combinators/skipRepeats.d.ts.map +1 -1
  185. package/dist/Fx/combinators/skipRepeats.js +17 -1
  186. package/dist/Fx/combinators/skipRepeatsWith.d.ts +18 -1
  187. package/dist/Fx/combinators/skipRepeatsWith.d.ts.map +1 -1
  188. package/dist/Fx/combinators/skipRepeatsWith.js +18 -1
  189. package/dist/Fx/combinators/skipWhile.d.ts +72 -4
  190. package/dist/Fx/combinators/skipWhile.d.ts.map +1 -1
  191. package/dist/Fx/combinators/skipWhile.js +72 -4
  192. package/dist/Fx/combinators/slice.d.ts +85 -3
  193. package/dist/Fx/combinators/slice.d.ts.map +1 -1
  194. package/dist/Fx/combinators/slice.js +35 -2
  195. package/dist/Fx/combinators/switchMap.d.ts +39 -1
  196. package/dist/Fx/combinators/switchMap.d.ts.map +1 -1
  197. package/dist/Fx/combinators/switchMap.js +43 -5
  198. package/dist/Fx/combinators/switchMapEffect.d.ts +38 -1
  199. package/dist/Fx/combinators/switchMapEffect.d.ts.map +1 -1
  200. package/dist/Fx/combinators/switchMapEffect.js +38 -1
  201. package/dist/Fx/combinators/take.d.ts +34 -2
  202. package/dist/Fx/combinators/take.d.ts.map +1 -1
  203. package/dist/Fx/combinators/take.js +34 -2
  204. package/dist/Fx/combinators/takeUntil.d.ts +49 -3
  205. package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
  206. package/dist/Fx/combinators/takeUntil.js +49 -3
  207. package/dist/Fx/combinators/takeWhile.d.ts +33 -2
  208. package/dist/Fx/combinators/takeWhile.d.ts.map +1 -1
  209. package/dist/Fx/combinators/takeWhile.js +33 -2
  210. package/dist/Fx/combinators/tapEffect.d.ts +17 -1
  211. package/dist/Fx/combinators/tapEffect.d.ts.map +1 -1
  212. package/dist/Fx/combinators/tapEffect.js +17 -1
  213. package/dist/Fx/combinators/throttle.d.ts +79 -0
  214. package/dist/Fx/combinators/throttle.d.ts.map +1 -0
  215. package/dist/Fx/combinators/throttle.js +99 -0
  216. package/dist/Fx/combinators/timeout.d.ts +76 -0
  217. package/dist/Fx/combinators/timeout.d.ts.map +1 -0
  218. package/dist/Fx/combinators/timeout.js +110 -0
  219. package/dist/Fx/combinators/tuple.d.ts +32 -2
  220. package/dist/Fx/combinators/tuple.d.ts.map +1 -1
  221. package/dist/Fx/combinators/tuple.js +36 -5
  222. package/dist/Fx/combinators/until.d.ts +27 -0
  223. package/dist/Fx/combinators/until.d.ts.map +1 -0
  224. package/dist/Fx/combinators/until.js +56 -0
  225. package/dist/Fx/combinators/unwrap.d.ts +31 -2
  226. package/dist/Fx/combinators/unwrap.d.ts.map +1 -1
  227. package/dist/Fx/combinators/unwrap.js +30 -1
  228. package/dist/Fx/combinators/unwrapScoped.d.ts +34 -1
  229. package/dist/Fx/combinators/unwrapScoped.d.ts.map +1 -1
  230. package/dist/Fx/combinators/unwrapScoped.js +34 -1
  231. package/dist/Fx/combinators/when.d.ts +37 -2
  232. package/dist/Fx/combinators/when.d.ts.map +1 -1
  233. package/dist/Fx/combinators/when.js +38 -3
  234. package/dist/Fx/combinators/withLatestFrom.d.ts +58 -0
  235. package/dist/Fx/combinators/withLatestFrom.d.ts.map +1 -0
  236. package/dist/Fx/combinators/withLatestFrom.js +68 -0
  237. package/dist/Fx/combinators/withSpan.d.ts +35 -1
  238. package/dist/Fx/combinators/withSpan.d.ts.map +1 -1
  239. package/dist/Fx/combinators/withSpan.js +34 -3
  240. package/dist/Fx/combinators/zip.d.ts +64 -4
  241. package/dist/Fx/combinators/zip.d.ts.map +1 -1
  242. package/dist/Fx/combinators/zip.js +64 -4
  243. package/dist/Fx/constructors/at.d.ts +21 -1
  244. package/dist/Fx/constructors/at.d.ts.map +1 -1
  245. package/dist/Fx/constructors/at.js +21 -1
  246. package/dist/Fx/constructors/die.d.ts +22 -1
  247. package/dist/Fx/constructors/die.d.ts.map +1 -1
  248. package/dist/Fx/constructors/die.js +22 -1
  249. package/dist/Fx/constructors/empty.d.ts +19 -1
  250. package/dist/Fx/constructors/empty.d.ts.map +1 -1
  251. package/dist/Fx/constructors/empty.js +19 -1
  252. package/dist/Fx/constructors/fail.d.ts +22 -1
  253. package/dist/Fx/constructors/fail.d.ts.map +1 -1
  254. package/dist/Fx/constructors/fail.js +22 -1
  255. package/dist/Fx/constructors/failCause.d.ts +23 -1
  256. package/dist/Fx/constructors/failCause.d.ts.map +1 -1
  257. package/dist/Fx/constructors/failCause.js +23 -1
  258. package/dist/Fx/constructors/fn.d.ts +116 -16
  259. package/dist/Fx/constructors/fn.d.ts.map +1 -1
  260. package/dist/Fx/constructors/fn.js +36 -0
  261. package/dist/Fx/constructors/fromEffect.d.ts +45 -3
  262. package/dist/Fx/constructors/fromEffect.d.ts.map +1 -1
  263. package/dist/Fx/constructors/fromEffect.js +45 -3
  264. package/dist/Fx/constructors/fromFailures.d.ts +25 -1
  265. package/dist/Fx/constructors/fromFailures.d.ts.map +1 -1
  266. package/dist/Fx/constructors/fromFailures.js +25 -1
  267. package/dist/Fx/constructors/fromIterable.d.ts +23 -1
  268. package/dist/Fx/constructors/fromIterable.d.ts.map +1 -1
  269. package/dist/Fx/constructors/fromIterable.js +23 -1
  270. package/dist/Fx/constructors/fromSchedule.d.ts +26 -1
  271. package/dist/Fx/constructors/fromSchedule.d.ts.map +1 -1
  272. package/dist/Fx/constructors/fromSchedule.js +28 -3
  273. package/dist/Fx/constructors/index.d.ts +2 -1
  274. package/dist/Fx/constructors/index.d.ts.map +1 -1
  275. package/dist/Fx/constructors/index.js +2 -1
  276. package/dist/Fx/constructors/interrupt.d.ts +22 -2
  277. package/dist/Fx/constructors/interrupt.d.ts.map +1 -1
  278. package/dist/Fx/constructors/interrupt.js +22 -2
  279. package/dist/Fx/constructors/make.d.ts +151 -4
  280. package/dist/Fx/constructors/make.d.ts.map +1 -1
  281. package/dist/Fx/constructors/make.js +60 -7
  282. package/dist/Fx/constructors/periodic.d.ts +30 -1
  283. package/dist/Fx/constructors/periodic.d.ts.map +1 -1
  284. package/dist/Fx/constructors/periodic.js +30 -1
  285. package/dist/Fx/constructors/succeed.d.ts +79 -7
  286. package/dist/Fx/constructors/succeed.d.ts.map +1 -1
  287. package/dist/Fx/constructors/succeed.js +79 -7
  288. package/dist/Fx/constructors/suspend.d.ts +28 -0
  289. package/dist/Fx/constructors/suspend.d.ts.map +1 -1
  290. package/dist/Fx/constructors/suspend.js +28 -0
  291. package/dist/Fx/constructors/sync.d.ts +32 -0
  292. package/dist/Fx/constructors/sync.d.ts.map +1 -0
  293. package/dist/Fx/constructors/sync.js +32 -0
  294. package/dist/Fx/internal/DeferredRef.d.ts +259 -7
  295. package/dist/Fx/internal/DeferredRef.d.ts.map +1 -1
  296. package/dist/Fx/internal/DeferredRef.js +260 -9
  297. package/dist/Fx/internal/UnionToTuple.d.ts +22 -0
  298. package/dist/Fx/internal/UnionToTuple.d.ts.map +1 -1
  299. package/dist/Fx/internal/diff.d.ts +586 -0
  300. package/dist/Fx/internal/diff.d.ts.map +1 -1
  301. package/dist/Fx/internal/diff.js +120 -9
  302. package/dist/Fx/internal/effectableEvaluateKey.d.ts +30 -0
  303. package/dist/Fx/internal/effectableEvaluateKey.d.ts.map +1 -0
  304. package/dist/Fx/internal/effectableEvaluateKey.js +29 -0
  305. package/dist/Fx/internal/effectableWithOverride.d.ts +55 -0
  306. package/dist/Fx/internal/effectableWithOverride.d.ts.map +1 -0
  307. package/dist/Fx/internal/effectableWithOverride.js +46 -0
  308. package/dist/Fx/internal/equivalence.d.ts +29 -0
  309. package/dist/Fx/internal/equivalence.d.ts.map +1 -1
  310. package/dist/Fx/internal/equivalence.js +29 -0
  311. package/dist/Fx/internal/multicast.d.ts +145 -2
  312. package/dist/Fx/internal/multicast.d.ts.map +1 -1
  313. package/dist/Fx/internal/multicast.js +146 -4
  314. package/dist/Fx/internal/ring-buffer.d.ts +149 -0
  315. package/dist/Fx/internal/ring-buffer.d.ts.map +1 -1
  316. package/dist/Fx/internal/ring-buffer.js +155 -0
  317. package/dist/Fx/internal/scope.d.ts +184 -0
  318. package/dist/Fx/internal/scope.d.ts.map +1 -1
  319. package/dist/Fx/internal/scope.js +150 -0
  320. package/dist/Fx/internal/yieldable.d.ts +117 -2
  321. package/dist/Fx/internal/yieldable.d.ts.map +1 -1
  322. package/dist/Fx/internal/yieldable.js +86 -3
  323. package/dist/Fx/run/collect.d.ts +93 -4
  324. package/dist/Fx/run/collect.d.ts.map +1 -1
  325. package/dist/Fx/run/collect.js +94 -5
  326. package/dist/Fx/run/first.d.ts +23 -1
  327. package/dist/Fx/run/first.d.ts.map +1 -1
  328. package/dist/Fx/run/first.js +23 -1
  329. package/dist/Fx/run/fork.d.ts +52 -2
  330. package/dist/Fx/run/fork.d.ts.map +1 -1
  331. package/dist/Fx/run/fork.js +52 -2
  332. package/dist/Fx/run/observe.d.ts +112 -4
  333. package/dist/Fx/run/observe.d.ts.map +1 -1
  334. package/dist/Fx/run/observe.js +137 -16
  335. package/dist/Fx/run/runPromise.d.ts +45 -2
  336. package/dist/Fx/run/runPromise.d.ts.map +1 -1
  337. package/dist/Fx/run/runPromise.js +45 -2
  338. package/dist/Fx/stream.d.ts +92 -0
  339. package/dist/Fx/stream.d.ts.map +1 -1
  340. package/dist/Fx/stream.js +60 -1
  341. package/dist/Push/Push.d.ts +1229 -104
  342. package/dist/Push/Push.d.ts.map +1 -1
  343. package/dist/Push/Push.js +1024 -95
  344. package/dist/RefArray.d.ts +2 -0
  345. package/dist/RefArray.d.ts.map +1 -0
  346. package/dist/RefArray.js +1 -0
  347. package/dist/RefBigDecimal.d.ts +2 -0
  348. package/dist/RefBigDecimal.d.ts.map +1 -0
  349. package/dist/RefBigDecimal.js +1 -0
  350. package/dist/RefBigInt.d.ts +2 -0
  351. package/dist/RefBigInt.d.ts.map +1 -0
  352. package/dist/RefBigInt.js +1 -0
  353. package/dist/RefBoolean.d.ts +2 -0
  354. package/dist/RefBoolean.d.ts.map +1 -0
  355. package/dist/RefBoolean.js +1 -0
  356. package/dist/RefCause.d.ts +2 -0
  357. package/dist/RefCause.d.ts.map +1 -0
  358. package/dist/RefCause.js +1 -0
  359. package/dist/RefChunk.d.ts +2 -0
  360. package/dist/RefChunk.d.ts.map +1 -0
  361. package/dist/RefChunk.js +1 -0
  362. package/dist/RefDateTime.d.ts +2 -0
  363. package/dist/RefDateTime.d.ts.map +1 -0
  364. package/dist/RefDateTime.js +1 -0
  365. package/dist/RefDuration.d.ts +2 -0
  366. package/dist/RefDuration.d.ts.map +1 -0
  367. package/dist/RefDuration.js +1 -0
  368. package/dist/RefGraph.d.ts +2 -0
  369. package/dist/RefGraph.d.ts.map +1 -0
  370. package/dist/RefGraph.js +1 -0
  371. package/dist/RefHashMap.d.ts +2 -0
  372. package/dist/RefHashMap.d.ts.map +1 -0
  373. package/dist/RefHashMap.js +1 -0
  374. package/dist/RefHashRing.d.ts +2 -0
  375. package/dist/RefHashRing.d.ts.map +1 -0
  376. package/dist/RefHashRing.js +1 -0
  377. package/dist/RefHashSet.d.ts +2 -0
  378. package/dist/RefHashSet.d.ts.map +1 -0
  379. package/dist/RefHashSet.js +1 -0
  380. package/dist/RefIterable.d.ts +2 -0
  381. package/dist/RefIterable.d.ts.map +1 -0
  382. package/dist/RefIterable.js +1 -0
  383. package/dist/RefOption.d.ts +2 -0
  384. package/dist/RefOption.d.ts.map +1 -0
  385. package/dist/RefOption.js +1 -0
  386. package/dist/RefRecord.d.ts +2 -0
  387. package/dist/RefRecord.d.ts.map +1 -0
  388. package/dist/RefRecord.js +1 -0
  389. package/dist/RefResult.d.ts +2 -0
  390. package/dist/RefResult.d.ts.map +1 -0
  391. package/dist/RefResult.js +1 -0
  392. package/dist/RefString.d.ts +2 -0
  393. package/dist/RefString.d.ts.map +1 -0
  394. package/dist/RefString.js +1 -0
  395. package/dist/RefStruct.d.ts +2 -0
  396. package/dist/RefStruct.d.ts.map +1 -0
  397. package/dist/RefStruct.js +1 -0
  398. package/dist/RefSubject/Hydration.d.ts +504 -0
  399. package/dist/RefSubject/Hydration.d.ts.map +1 -0
  400. package/dist/RefSubject/Hydration.js +300 -0
  401. package/dist/RefSubject/RefArray.d.ts +382 -35
  402. package/dist/RefSubject/RefArray.d.ts.map +1 -1
  403. package/dist/RefSubject/RefArray.js +374 -40
  404. package/dist/RefSubject/RefBigDecimal.d.ts +241 -21
  405. package/dist/RefSubject/RefBigDecimal.d.ts.map +1 -1
  406. package/dist/RefSubject/RefBigDecimal.js +229 -20
  407. package/dist/RefSubject/RefBigInt.d.ts +181 -16
  408. package/dist/RefSubject/RefBigInt.d.ts.map +1 -1
  409. package/dist/RefSubject/RefBigInt.js +169 -15
  410. package/dist/RefSubject/RefBoolean.d.ts +181 -16
  411. package/dist/RefSubject/RefBoolean.d.ts.map +1 -1
  412. package/dist/RefSubject/RefBoolean.js +169 -15
  413. package/dist/RefSubject/RefCause.d.ts +133 -12
  414. package/dist/RefSubject/RefCause.d.ts.map +1 -1
  415. package/dist/RefSubject/RefCause.js +121 -11
  416. package/dist/RefSubject/RefChunk.d.ts +481 -76
  417. package/dist/RefSubject/RefChunk.d.ts.map +1 -1
  418. package/dist/RefSubject/RefChunk.js +471 -75
  419. package/dist/RefSubject/RefDateTime.d.ts +133 -12
  420. package/dist/RefSubject/RefDateTime.d.ts.map +1 -1
  421. package/dist/RefSubject/RefDateTime.js +122 -12
  422. package/dist/RefSubject/RefDuration.d.ts +169 -15
  423. package/dist/RefSubject/RefDuration.d.ts.map +1 -1
  424. package/dist/RefSubject/RefDuration.js +157 -14
  425. package/dist/RefSubject/RefGraph.d.ts +349 -35
  426. package/dist/RefSubject/RefGraph.d.ts.map +1 -1
  427. package/dist/RefSubject/RefGraph.js +334 -32
  428. package/dist/RefSubject/RefHashMap.d.ts +323 -28
  429. package/dist/RefSubject/RefHashMap.d.ts.map +1 -1
  430. package/dist/RefSubject/RefHashMap.js +317 -29
  431. package/dist/RefSubject/RefHashRing.d.ts +159 -15
  432. package/dist/RefSubject/RefHashRing.d.ts.map +1 -1
  433. package/dist/RefSubject/RefHashRing.js +145 -12
  434. package/dist/RefSubject/RefHashSet.d.ts +251 -22
  435. package/dist/RefSubject/RefHashSet.d.ts.map +1 -1
  436. package/dist/RefSubject/RefHashSet.js +238 -20
  437. package/dist/RefSubject/RefIterable.d.ts +358 -32
  438. package/dist/RefSubject/RefIterable.d.ts.map +1 -1
  439. package/dist/RefSubject/RefIterable.js +350 -30
  440. package/dist/RefSubject/RefOption.d.ts +157 -14
  441. package/dist/RefSubject/RefOption.d.ts.map +1 -1
  442. package/dist/RefSubject/RefOption.js +145 -13
  443. package/dist/RefSubject/RefRecord.d.ts +402 -64
  444. package/dist/RefSubject/RefRecord.d.ts.map +1 -1
  445. package/dist/RefSubject/RefRecord.js +364 -39
  446. package/dist/RefSubject/RefResult.d.ts +167 -35
  447. package/dist/RefSubject/RefResult.d.ts.map +1 -1
  448. package/dist/RefSubject/RefResult.js +133 -12
  449. package/dist/RefSubject/RefString.d.ts +205 -18
  450. package/dist/RefSubject/RefString.d.ts.map +1 -1
  451. package/dist/RefSubject/RefString.js +193 -17
  452. package/dist/RefSubject/RefStruct.d.ts +169 -14
  453. package/dist/RefSubject/RefStruct.d.ts.map +1 -1
  454. package/dist/RefSubject/RefStruct.js +157 -13
  455. package/dist/RefSubject/RefSubject.d.ts +1197 -45
  456. package/dist/RefSubject/RefSubject.d.ts.map +1 -1
  457. package/dist/RefSubject/RefSubject.js +935 -88
  458. package/dist/RefSubject/RefTrie.d.ts +323 -37
  459. package/dist/RefSubject/RefTrie.d.ts.map +1 -1
  460. package/dist/RefSubject/RefTrie.js +311 -31
  461. package/dist/RefSubject/RefTuple.d.ts +127 -11
  462. package/dist/RefSubject/RefTuple.d.ts.map +1 -1
  463. package/dist/RefSubject/RefTuple.js +114 -9
  464. package/dist/RefSubject/index.d.ts +1 -0
  465. package/dist/RefSubject/index.d.ts.map +1 -1
  466. package/dist/RefSubject/index.js +1 -0
  467. package/dist/RefSubject.d.ts +2 -1
  468. package/dist/RefSubject.d.ts.map +1 -1
  469. package/dist/RefSubject.js +2 -1
  470. package/dist/RefTrie.d.ts +2 -0
  471. package/dist/RefTrie.d.ts.map +1 -0
  472. package/dist/RefTrie.js +1 -0
  473. package/dist/RefTuple.d.ts +2 -0
  474. package/dist/RefTuple.d.ts.map +1 -0
  475. package/dist/RefTuple.js +1 -0
  476. package/dist/Sink/Sink.d.ts +396 -23
  477. package/dist/Sink/Sink.d.ts.map +1 -1
  478. package/dist/Sink/Sink.js +55 -7
  479. package/dist/Sink/combinators.d.ts +740 -11
  480. package/dist/Sink/combinators.d.ts.map +1 -1
  481. package/dist/Sink/combinators.js +716 -14
  482. package/dist/Subject/Subject.d.ts +1022 -27
  483. package/dist/Subject/Subject.d.ts.map +1 -1
  484. package/dist/Subject/Subject.js +909 -43
  485. package/dist/Versioned/Versioned.d.ts +447 -27
  486. package/dist/Versioned/Versioned.d.ts.map +1 -1
  487. package/dist/Versioned/Versioned.js +282 -48
  488. package/dist/index.d.ts +22 -3
  489. package/dist/index.d.ts.map +1 -1
  490. package/dist/index.js +22 -3
  491. package/package.json +126 -16
  492. package/dist/Fx/constructors/fromYieldable.d.ts +0 -12
  493. package/dist/Fx/constructors/fromYieldable.d.ts.map +0 -1
  494. package/dist/Fx/constructors/fromYieldable.js +0 -12
  495. package/src/Fx/Fx.ts +0 -164
  496. package/src/Fx/TypeId.ts +0 -25
  497. package/src/Fx/combinators/additive.ts +0 -142
  498. package/src/Fx/combinators/catch.ts +0 -421
  499. package/src/Fx/combinators/causes.ts +0 -23
  500. package/src/Fx/combinators/changesWithEffect.ts +0 -66
  501. package/src/Fx/combinators/compact.ts +0 -15
  502. package/src/Fx/combinators/continueWith.ts +0 -78
  503. package/src/Fx/combinators/dropUntil.ts +0 -47
  504. package/src/Fx/combinators/ensuring.ts +0 -23
  505. package/src/Fx/combinators/exhaustLatestMap.ts +0 -74
  506. package/src/Fx/combinators/exhaustLatestMapEffect.ts +0 -25
  507. package/src/Fx/combinators/exhaustMap.ts +0 -36
  508. package/src/Fx/combinators/exhaustMapEffect.ts +0 -23
  509. package/src/Fx/combinators/exit.ts +0 -15
  510. package/src/Fx/combinators/filter.ts +0 -22
  511. package/src/Fx/combinators/filterEffect.ts +0 -31
  512. package/src/Fx/combinators/filterMap.ts +0 -23
  513. package/src/Fx/combinators/filterMapEffect.ts +0 -32
  514. package/src/Fx/combinators/filterMapLoop.ts +0 -35
  515. package/src/Fx/combinators/filterMapLoopCause.ts +0 -36
  516. package/src/Fx/combinators/filterMapLoopCauseEffect.ts +0 -46
  517. package/src/Fx/combinators/filterMapLoopEffect.ts +0 -36
  518. package/src/Fx/combinators/flatMap.ts +0 -51
  519. package/src/Fx/combinators/flatMapConcurrently.ts +0 -39
  520. package/src/Fx/combinators/flatMapConcurrentlyEffect.ts +0 -26
  521. package/src/Fx/combinators/flatMapEffect.ts +0 -42
  522. package/src/Fx/combinators/flip.ts +0 -14
  523. package/src/Fx/combinators/gen.ts +0 -24
  524. package/src/Fx/combinators/genScoped.ts +0 -24
  525. package/src/Fx/combinators/index.ts +0 -61
  526. package/src/Fx/combinators/keyed.ts +0 -369
  527. package/src/Fx/combinators/loop.ts +0 -27
  528. package/src/Fx/combinators/loopCause.ts +0 -34
  529. package/src/Fx/combinators/loopCauseEffect.ts +0 -36
  530. package/src/Fx/combinators/loopEffect.ts +0 -34
  531. package/src/Fx/combinators/map.ts +0 -22
  532. package/src/Fx/combinators/mapBoth.ts +0 -40
  533. package/src/Fx/combinators/mapEffect.ts +0 -32
  534. package/src/Fx/combinators/mapError.ts +0 -28
  535. package/src/Fx/combinators/mergeAll.ts +0 -22
  536. package/src/Fx/combinators/mergeOrdered.ts +0 -123
  537. package/src/Fx/combinators/onError.ts +0 -40
  538. package/src/Fx/combinators/onExit.ts +0 -82
  539. package/src/Fx/combinators/onInterrupt.ts +0 -87
  540. package/src/Fx/combinators/provide.ts +0 -124
  541. package/src/Fx/combinators/result.ts +0 -39
  542. package/src/Fx/combinators/scan.ts +0 -82
  543. package/src/Fx/combinators/skip.ts +0 -41
  544. package/src/Fx/combinators/skipRepeats.ts +0 -15
  545. package/src/Fx/combinators/skipRepeatsWith.ts +0 -40
  546. package/src/Fx/combinators/skipWhile.ts +0 -100
  547. package/src/Fx/combinators/slice.ts +0 -55
  548. package/src/Fx/combinators/switchMap.ts +0 -55
  549. package/src/Fx/combinators/switchMapEffect.ts +0 -25
  550. package/src/Fx/combinators/take.ts +0 -38
  551. package/src/Fx/combinators/takeUntil.ts +0 -88
  552. package/src/Fx/combinators/takeWhile.ts +0 -47
  553. package/src/Fx/combinators/tapEffect.ts +0 -39
  554. package/src/Fx/combinators/tuple.ts +0 -79
  555. package/src/Fx/combinators/unwrap.ts +0 -21
  556. package/src/Fx/combinators/unwrapScoped.ts +0 -26
  557. package/src/Fx/combinators/when.ts +0 -64
  558. package/src/Fx/combinators/withSpan.ts +0 -24
  559. package/src/Fx/combinators/zip.ts +0 -175
  560. package/src/Fx/constructors/at.ts +0 -23
  561. package/src/Fx/constructors/die.ts +0 -17
  562. package/src/Fx/constructors/empty.ts +0 -10
  563. package/src/Fx/constructors/fail.ts +0 -14
  564. package/src/Fx/constructors/failCause.ts +0 -14
  565. package/src/Fx/constructors/fn.ts +0 -245
  566. package/src/Fx/constructors/fromEffect.ts +0 -24
  567. package/src/Fx/constructors/fromFailures.ts +0 -19
  568. package/src/Fx/constructors/fromIterable.ts +0 -15
  569. package/src/Fx/constructors/fromSchedule.ts +0 -18
  570. package/src/Fx/constructors/fromYieldable.ts +0 -17
  571. package/src/Fx/constructors/index.ts +0 -15
  572. package/src/Fx/constructors/interrupt.ts +0 -13
  573. package/src/Fx/constructors/make.ts +0 -103
  574. package/src/Fx/constructors/periodic.ts +0 -15
  575. package/src/Fx/constructors/succeed.ts +0 -37
  576. package/src/Fx/constructors/suspend.ts +0 -6
  577. package/src/Fx/index.ts +0 -6
  578. package/src/Fx/internal/DeferredRef.ts +0 -87
  579. package/src/Fx/internal/UnionToTuple.ts +0 -12
  580. package/src/Fx/internal/diff.ts +0 -191
  581. package/src/Fx/internal/equivalence.ts +0 -12
  582. package/src/Fx/internal/multicast.ts +0 -51
  583. package/src/Fx/internal/ring-buffer.ts +0 -60
  584. package/src/Fx/internal/scope.ts +0 -58
  585. package/src/Fx/internal/yieldable.ts +0 -31
  586. package/src/Fx/run/collect.ts +0 -79
  587. package/src/Fx/run/first.ts +0 -20
  588. package/src/Fx/run/fork.ts +0 -40
  589. package/src/Fx/run/index.ts +0 -5
  590. package/src/Fx/run/observe.ts +0 -114
  591. package/src/Fx/run/runPromise.ts +0 -32
  592. package/src/Fx/stream.ts +0 -42
  593. package/src/Fx.additive-combinators.test.ts +0 -126
  594. package/src/Fx.catch-additive.test.ts +0 -206
  595. package/src/Fx.catch.test.ts +0 -60
  596. package/src/Fx.dropUntil.test.ts +0 -61
  597. package/src/Fx.fn.test.ts +0 -51
  598. package/src/Fx.lifecycle.test.ts +0 -79
  599. package/src/Fx.mapError-mapBoth.test.ts +0 -101
  600. package/src/Fx.provide-combinators.test.ts +0 -94
  601. package/src/Fx.result-changesWithEffect.test.ts +0 -112
  602. package/src/Fx.scan.test.ts +0 -73
  603. package/src/Fx.takeWhile-skipWhile.test.ts +0 -84
  604. package/src/Fx.test.ts +0 -71
  605. package/src/Fx.ts +0 -1
  606. package/src/Fx.zip-merge-additive.test.ts +0 -171
  607. package/src/Fx.zip.test.ts +0 -133
  608. package/src/Push/Push.ts +0 -1072
  609. package/src/Push/index.ts +0 -1
  610. package/src/Push.additive.test.ts +0 -256
  611. package/src/Push.test.ts +0 -26
  612. package/src/Push.ts +0 -1
  613. package/src/RefSubject/RefArray.ts +0 -512
  614. package/src/RefSubject/RefBigDecimal.test.ts +0 -56
  615. package/src/RefSubject/RefBigDecimal.ts +0 -295
  616. package/src/RefSubject/RefBigInt.test.ts +0 -56
  617. package/src/RefSubject/RefBigInt.ts +0 -189
  618. package/src/RefSubject/RefBoolean.test.ts +0 -57
  619. package/src/RefSubject/RefBoolean.ts +0 -185
  620. package/src/RefSubject/RefCause.test.ts +0 -53
  621. package/src/RefSubject/RefCause.ts +0 -146
  622. package/src/RefSubject/RefChunk.ts +0 -510
  623. package/src/RefSubject/RefDateTime.test.ts +0 -43
  624. package/src/RefSubject/RefDateTime.ts +0 -264
  625. package/src/RefSubject/RefDuration.test.ts +0 -49
  626. package/src/RefSubject/RefDuration.ts +0 -188
  627. package/src/RefSubject/RefGraph.ts +0 -650
  628. package/src/RefSubject/RefHashMap.ts +0 -465
  629. package/src/RefSubject/RefHashRing.ts +0 -262
  630. package/src/RefSubject/RefHashSet.ts +0 -308
  631. package/src/RefSubject/RefIterable.ts +0 -445
  632. package/src/RefSubject/RefOption.test.ts +0 -67
  633. package/src/RefSubject/RefOption.ts +0 -193
  634. package/src/RefSubject/RefRecord.ts +0 -612
  635. package/src/RefSubject/RefResult.test.ts +0 -63
  636. package/src/RefSubject/RefResult.ts +0 -209
  637. package/src/RefSubject/RefString.test.ts +0 -61
  638. package/src/RefSubject/RefString.ts +0 -256
  639. package/src/RefSubject/RefStruct.test.ts +0 -60
  640. package/src/RefSubject/RefStruct.ts +0 -253
  641. package/src/RefSubject/RefSubject.ts +0 -2646
  642. package/src/RefSubject/RefTrie.ts +0 -356
  643. package/src/RefSubject/RefTuple.test.ts +0 -60
  644. package/src/RefSubject/RefTuple.ts +0 -231
  645. package/src/RefSubject/index.ts +0 -21
  646. package/src/RefSubject.additive-parity.test.ts +0 -101
  647. package/src/RefSubject.test.ts +0 -65
  648. package/src/RefSubject.ts +0 -1
  649. package/src/Sink/Sink.ts +0 -159
  650. package/src/Sink/combinators.ts +0 -1115
  651. package/src/Sink/index.ts +0 -2
  652. package/src/Sink.combinators.test.ts +0 -88
  653. package/src/Sink.reduce-collect-head-last.test.ts +0 -107
  654. package/src/Sink.ts +0 -1
  655. package/src/Subject/Subject.ts +0 -441
  656. package/src/Subject/index.ts +0 -1
  657. package/src/Subject.test.ts +0 -47
  658. package/src/Subject.ts +0 -1
  659. package/src/Versioned/Versioned.ts +0 -597
  660. package/src/Versioned/index.ts +0 -1
  661. package/src/Versioned.filterMap.test.ts +0 -91
  662. package/src/Versioned.test.ts +0 -23
  663. package/src/Versioned.ts +0 -1
  664. package/src/index.ts +0 -7
@@ -15,12 +15,44 @@ const matchesTag = (tag, error) => {
15
15
  return tag.some((t) => t === error._tag);
16
16
  };
17
17
  /**
18
- * Recovers from a typed failure of an Fx by switching to a fallback Fx.
18
+ * Recovers from the first typed failure of an Fx by running a fallback Fx.
19
19
  *
20
- * Mirrors `Effect.catch` / `Effect.catchAll` (catches `Cause.Fail` only).
20
+ * @remarks
21
+ * ## Why
22
+ *
23
+ * Typed failures are part of an Fx's public error channel, so callers often
24
+ * need to replace a failed producer based on its first typed failure. This is
25
+ * the push-stream counterpart of Effect's typed recovery.
26
+ *
27
+ * ## Ownership and lifetime
28
+ *
29
+ * The source runs until it reports a Cause containing a `Fail`. The first typed
30
+ * failure starts exactly one fallback and the entire original Cause is replaced,
31
+ * including any defects or interrupts composed beside that Fail. A Cause with
32
+ * no Fail passes through unchanged. Source values already delivered remain
33
+ * delivered. The fallback's services become requirements of the returned Fx,
34
+ * and external interruption stops whichever run is active.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * import { catch as recover } from "@typed/fx/Fx"
39
+ * import { fail, succeed } from "@typed/fx/Fx"
40
+ *
41
+ * const resilient = recover(fail("offline"), (error) => succeed(error.length))
42
+ * ```
43
+ *
44
+ * @example Recovering a Fail discards its complete composite Cause
45
+ * ```ts
46
+ * import { Cause } from "effect"
47
+ * import { catch as recover } from "@typed/fx/Fx"
48
+ * import { failCause, succeed } from "@typed/fx/Fx"
49
+ *
50
+ * const composite = Cause.combine(Cause.fail("offline"), Cause.die("socket defect"))
51
+ * const recovered = recover(failCause(composite), () => succeed("cached"))
52
+ * ```
21
53
  *
22
54
  * @since 1.0.0
23
- * @category combinators
55
+ * @category Errors and recovery
24
56
  */
25
57
  export const catch_ = dual(2, (self, f) => make((sink) => self.run(makeSink((cause) => {
26
58
  const result = Cause.findFail(cause);
@@ -31,29 +63,96 @@ export const catch_ = dual(2, (self, f) => make((sink) => self.run(makeSink((cau
31
63
  }, sink.onSuccess))));
32
64
  export { catch_ as catch };
33
65
  /**
34
- * An alias for {@link catch}.
66
+ * Uses the Effect-style `catchAll` name for {@link catch}.
67
+ *
68
+ * @remarks
69
+ * ## Why
70
+ *
71
+ * The alias lets Effect users apply the same typed-failure recovery vocabulary
72
+ * to Fx without introducing different runtime behavior.
73
+ *
74
+ * ## Ownership and lifetime
75
+ *
76
+ * It has exactly the source/fallback switching, failure, service, and
77
+ * interruption semantics of {@link catch}; it allocates no wrapper resource
78
+ * beyond that combinator.
79
+ *
80
+ * @example
81
+ * ```ts
82
+ * import { catchAll } from "@typed/fx/Fx"
83
+ * import { fail, succeed } from "@typed/fx/Fx"
84
+ *
85
+ * const recovered = catchAll(fail("missing"), () => succeed("default"))
86
+ * ```
35
87
  *
36
88
  * @since 1.0.0
37
- * @category combinators
89
+ * @category Errors and recovery
38
90
  */
39
91
  export const catchAll = catch_;
40
92
  /**
41
- * Recovers from *any* failure cause of an Fx (including defects and interrupts)
42
- * by switching to a fallback Fx.
93
+ * Recovers from any failure cause by running a fallback Fx.
94
+ *
95
+ * @remarks
96
+ * ## Why
97
+ *
98
+ * A full `Cause` retains typed failures, defects, interruption, and composed
99
+ * causes. Handling that structure explicitly is necessary at boundaries that
100
+ * must translate every termination mode rather than only expected errors.
43
101
  *
44
- * Mirrors `Effect.catchCause`.
102
+ * ## Ownership and lifetime
103
+ *
104
+ * The handler runs once after the source reports a cause and its returned Fx
105
+ * continues in the same subscription. It receives the cause unchanged. Values
106
+ * emitted before failure are not replayed, and the fallback's errors and
107
+ * services replace the recovered source error and join its requirements.
108
+ * Because interruption is catchable here, use this only when intentionally
109
+ * translating interruption rather than for ordinary typed recovery.
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * import { Cause } from "effect"
114
+ * import { catchCause } from "@typed/fx/Fx"
115
+ * import { failCause, succeed } from "@typed/fx/Fx"
116
+ *
117
+ * const reported = catchCause(failCause(Cause.die("boom")), (cause) =>
118
+ * succeed(Cause.pretty(cause))
119
+ * )
120
+ * ```
45
121
  *
46
122
  * @since 1.0.0
47
- * @category combinators
123
+ * @category Errors and recovery
48
124
  */
49
125
  export const catchCause = dual(2, (self, f) => make((sink) => self.run(makeSink((cause) => f(cause).run(sink), sink.onSuccess))));
50
126
  /**
51
- * Recovers from a typed failure by matching on the `_tag` field of the error.
127
+ * Recovers selected tagged typed failures by running a fallback Fx.
128
+ *
129
+ * @remarks
130
+ * ## Why
52
131
  *
53
- * Mirrors `Effect.catchTag`.
132
+ * Tagged error unions are idiomatic Effect APIs. Selecting one or more tags
133
+ * narrows the handler input and removes only those variants from the returned
134
+ * error channel, preserving the rest for later composition.
135
+ *
136
+ * ## Ownership and lifetime
137
+ *
138
+ * The source owns the subscription until its Cause contains a Fail whose tag
139
+ * matches. That first matching Fail starts one handler Fx and replaces the
140
+ * entire original Cause, including any defects or interrupts composed with it.
141
+ * A Cause with no Fail, or a first Fail with another tag, passes through intact.
142
+ * The fallback is lazy and contributes its errors and services to the result.
143
+ *
144
+ * @example
145
+ * ```ts
146
+ * import { catchTag } from "@typed/fx/Fx"
147
+ * import { fail, succeed } from "@typed/fx/Fx"
148
+ *
149
+ * type Missing = { readonly _tag: "Missing"; readonly id: string }
150
+ * const source = fail<Missing>({ _tag: "Missing", id: "42" })
151
+ * const recovered = catchTag(source, "Missing", ({ id }) => succeed(`missing:${id}`))
152
+ * ```
54
153
  *
55
154
  * @since 1.0.0
56
- * @category combinators
155
+ * @category Errors and recovery
57
156
  */
58
157
  export const catchTag = dual(3, (self, k, f) => make((sink) => self.run(makeSink((cause) => {
59
158
  const result = Cause.findFail(cause);
@@ -68,13 +167,33 @@ export const catchTag = dual(3, (self, k, f) => make((sink) => self.run(makeSink
68
167
  }
69
168
  }, sink.onSuccess))));
70
169
  /**
71
- * Recovers from a typed failure when a predicate holds, by switching to a fallback Fx.
72
- * Only applies to `Cause.Fail`; defects and interrupts are not caught.
170
+ * Recovers a typed failure only when a predicate accepts it.
171
+ *
172
+ * @remarks
173
+ * ## Why
73
174
  *
74
- * Mirrors `Effect.catchIf`.
175
+ * Some typed errors are distinguished by values rather than tags. Predicate
176
+ * recovery handles that subset while retaining `E` in the result because a
177
+ * rejected error can still escape.
178
+ *
179
+ * ## Ownership and lifetime
180
+ *
181
+ * The predicate is evaluated on the first Fail found anywhere in the source
182
+ * Cause. A match starts one lazy fallback and replaces that entire Cause,
183
+ * including any defects or interrupts composed with the Fail. A rejection, or
184
+ * a Cause containing no Fail, forwards the original Cause unchanged. The
185
+ * fallback contributes its errors and services and shares the subscription.
186
+ *
187
+ * @example
188
+ * ```ts
189
+ * import { catchIf } from "@typed/fx/Fx"
190
+ * import { fail, succeed } from "@typed/fx/Fx"
191
+ *
192
+ * const recovered = catchIf(fail(404), (status) => status === 404, () => succeed("missing"))
193
+ * ```
75
194
  *
76
195
  * @since 1.0.0
77
- * @category combinators
196
+ * @category Errors and recovery
78
197
  */
79
198
  export const catchIf = dual(3, (self, predicate, f) => make((sink) => self.run(makeSink((cause) => {
80
199
  const result = Cause.findFail(cause);
@@ -88,22 +207,73 @@ export const catchIf = dual(3, (self, predicate, f) => make((sink) => self.run(m
88
207
  return sink.onFailure(cause);
89
208
  }, sink.onSuccess))));
90
209
  /**
91
- * Recovers from a failure cause when a predicate on the cause holds,
92
- * by switching to a fallback Fx.
210
+ * Recovers a failure cause only when a predicate accepts the complete cause.
211
+ *
212
+ * @remarks
213
+ * ## Why
93
214
  *
94
- * Mirrors `Effect.catchCauseIf`.
215
+ * Cause-level predicates can distinguish defects, interruption, sequential or
216
+ * parallel cause structure that a typed-error predicate cannot observe.
217
+ *
218
+ * ## Ownership and lifetime
219
+ *
220
+ * The predicate receives the source cause unchanged. A match starts one lazy
221
+ * fallback in the same subscription; otherwise the original cause propagates.
222
+ * The fallback's requirements and errors are added, prior source values stay
223
+ * delivered, and interrupting the returned Fx interrupts its active run.
224
+ *
225
+ * @example
226
+ * ```ts
227
+ * import { Cause } from "effect"
228
+ * import { catchCauseIf } from "@typed/fx/Fx"
229
+ * import { failCause, succeed } from "@typed/fx/Fx"
230
+ *
231
+ * const recovered = catchCauseIf(
232
+ * failCause(Cause.die("bad decoder")),
233
+ * Cause.hasDies,
234
+ * () => succeed("reported")
235
+ * )
236
+ * ```
95
237
  *
96
238
  * @since 1.0.0
97
- * @category combinators
239
+ * @category Errors and recovery
98
240
  */
99
241
  export const catchCauseIf = dual(3, (self, predicate, f) => make((sink) => self.run(makeSink((cause) => (predicate(cause) ? f(cause).run(sink) : sink.onFailure(cause)), sink.onSuccess))));
100
242
  /**
101
- * Recovers from typed failures by matching on the `_tag` field with multiple handlers at once.
243
+ * Recovers several tagged typed-error variants with one handler table.
244
+ *
245
+ * @remarks
246
+ * ## Why
247
+ *
248
+ * A handler table keeps multi-variant recovery exhaustive and preserves the
249
+ * precise success, error, and service unions produced by each selected case.
250
+ * Unlisted variants remain visible in the returned error channel.
251
+ *
252
+ * ## Ownership and lifetime
253
+ *
254
+ * The first Fail found anywhere in the source Cause is inspected. A listed tag
255
+ * starts exactly one handler Fx and replaces the entire original Cause,
256
+ * including any defects or interrupts composed with that Fail. An untagged or
257
+ * unlisted first Fail, or a Cause with no Fail, propagates intact. Handlers are
258
+ * lazy and contribute their individual errors and service requirements.
259
+ *
260
+ * @example
261
+ * ```ts
262
+ * import { catchTags } from "@typed/fx/Fx"
263
+ * import { fail, succeed } from "@typed/fx/Fx"
102
264
  *
103
- * Mirrors `Effect.catchTags`.
265
+ * type Failure =
266
+ * | { readonly _tag: "Missing"; readonly id: string }
267
+ * | { readonly _tag: "Forbidden" }
268
+ * const source = fail<Failure>({ _tag: "Missing", id: "42" })
269
+ * const recovered = catchTags(source, {
270
+ * Missing: ({ id }) => succeed(`missing:${id}`),
271
+ * Forbidden: () => succeed("forbidden")
272
+ * })
273
+ * ```
104
274
  *
105
275
  * @since 1.0.0
106
- * @category combinators
276
+ * @category Errors and recovery
107
277
  */
108
278
  export const catchTags = dual(2, (self, cases) => make((sink) => self.run(makeSink((cause) => {
109
279
  const result = Cause.findFail(cause);
@@ -1,12 +1,35 @@
1
1
  import type * as Cause from "effect/Cause";
2
2
  import type { Fx } from "../Fx.js";
3
3
  /**
4
- * Emits only the failure causes from an Fx, discarding successful values.
4
+ * Emits the source's terminal failure cause and discards every successful value.
5
+ *
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * Failure telemetry and supervision often need the complete Effect `Cause`
10
+ * without treating that cause as another failure. Materializing only the
11
+ * failure side makes those pipelines ordinary, infallible Fx values.
12
+ *
13
+ * ## Ownership and lifetime
14
+ *
15
+ * The source is subscribed once. Success values are dropped in arrival order;
16
+ * a terminal cause is emitted once and the returned Fx completes without a
17
+ * typed error. Defects and interruption are retained inside the emitted cause.
18
+ * No resource is acquired beyond the source subscription.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { Cause } from "effect"
23
+ * import { causes } from "@typed/fx/Fx"
24
+ * import { failCause } from "@typed/fx/Fx"
25
+ *
26
+ * const failures = causes(failCause(Cause.fail("offline")))
27
+ * ```
5
28
  *
6
29
  * @param fx - The `Fx` stream.
7
30
  * @returns An `Fx` emitting `Cause<E>`.
8
31
  * @since 1.0.0
9
- * @category combinators
32
+ * @category Errors and recovery
10
33
  */
11
34
  export declare const causes: <A, E, R>(fx: Fx<A, E, R>) => Fx<Cause.Cause<E>, never, R>;
12
35
  //# sourceMappingURL=causes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"causes.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/causes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAInC;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAO1E,CAAC"}
1
+ {"version":3,"file":"causes.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/causes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAInC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAO1E,CAAC"}
@@ -3,12 +3,35 @@ import * as Option from "effect/Option";
3
3
  import { exit } from "./exit.js";
4
4
  import { filterMap } from "./filterMap.js";
5
5
  /**
6
- * Emits only the failure causes from an Fx, discarding successful values.
6
+ * Emits the source's terminal failure cause and discards every successful value.
7
+ *
8
+ * @remarks
9
+ * ## Why
10
+ *
11
+ * Failure telemetry and supervision often need the complete Effect `Cause`
12
+ * without treating that cause as another failure. Materializing only the
13
+ * failure side makes those pipelines ordinary, infallible Fx values.
14
+ *
15
+ * ## Ownership and lifetime
16
+ *
17
+ * The source is subscribed once. Success values are dropped in arrival order;
18
+ * a terminal cause is emitted once and the returned Fx completes without a
19
+ * typed error. Defects and interruption are retained inside the emitted cause.
20
+ * No resource is acquired beyond the source subscription.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import { Cause } from "effect"
25
+ * import { causes } from "@typed/fx/Fx"
26
+ * import { failCause } from "@typed/fx/Fx"
27
+ *
28
+ * const failures = causes(failCause(Cause.fail("offline")))
29
+ * ```
7
30
  *
8
31
  * @param fx - The `Fx` stream.
9
32
  * @returns An `Fx` emitting `Cause<E>`.
10
33
  * @since 1.0.0
11
- * @category combinators
34
+ * @category Errors and recovery
12
35
  */
13
36
  export const causes = (fx) => filterMap(exit(fx), Exit.match({
14
37
  onFailure: Option.some,
@@ -8,10 +8,30 @@ import type { Fx } from "../Fx.js";
8
8
  * `Equivalence<A>`, you supply `(prev, next) => Effect<boolean>` where `true`
9
9
  * means "equal" (skip) and `false` means "changed" (emit).
10
10
  *
11
+ * @remarks
12
+ * ## Why
13
+ * `changesWithEffect` supports service-backed or failing equivalence checks. The first value always
14
+ * emits; every later value is compared with the last emitted value and emits only when the effect
15
+ * returns `false`, preserving source order.
16
+ *
17
+ * ## Ownership and lifetime
18
+ * One previous value and a semaphore are scoped to each run. Comparison effects are serialized,
19
+ * interrupted with the run, and add their failures and services to the resulting Fx.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * import { Effect } from "effect"
24
+ * import { Fx } from "@typed/fx"
25
+ *
26
+ * const changes = Fx.fromIterable([1, 1, 2]).pipe(
27
+ * Fx.changesWithEffect((previous, next) => Effect.succeed(previous === next)),
28
+ * )
29
+ * ```
30
+ *
11
31
  * @param f - Effectful function: `(prev, next) => Effect<boolean>`. Return `true` to skip (treat as duplicate), `false` to emit.
12
32
  * @returns An `Fx` with consecutive "equal" elements removed.
13
33
  * @since 1.0.0
14
- * @category combinators
34
+ * @category Selecting values
15
35
  */
16
36
  export declare const changesWithEffect: {
17
37
  <A, E2, R2>(f: (prev: A, next: A) => Effect.Effect<boolean, E2, R2>): <E, R>(fx: Fx<A, E | E2, R>) => Fx<A, E | E2, R | R2>;
@@ -1 +1 @@
1
- {"version":3,"file":"changesWithEffect.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/changesWithEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAMxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,EAAE;IAC9B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EACR,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,GACtD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAEzD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACd,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EACpB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,GACtD,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAoC1B,CAAC"}
1
+ {"version":3,"file":"changesWithEffect.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/changesWithEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAMxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,iBAAiB,EAAE;IAC9B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EACR,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,GACtD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAEzD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACd,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EACpB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,GACtD,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAoC1B,CAAC"}
@@ -12,10 +12,30 @@ import { make } from "../constructors/make.js";
12
12
  * `Equivalence<A>`, you supply `(prev, next) => Effect<boolean>` where `true`
13
13
  * means "equal" (skip) and `false` means "changed" (emit).
14
14
  *
15
+ * @remarks
16
+ * ## Why
17
+ * `changesWithEffect` supports service-backed or failing equivalence checks. The first value always
18
+ * emits; every later value is compared with the last emitted value and emits only when the effect
19
+ * returns `false`, preserving source order.
20
+ *
21
+ * ## Ownership and lifetime
22
+ * One previous value and a semaphore are scoped to each run. Comparison effects are serialized,
23
+ * interrupted with the run, and add their failures and services to the resulting Fx.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * import { Effect } from "effect"
28
+ * import { Fx } from "@typed/fx"
29
+ *
30
+ * const changes = Fx.fromIterable([1, 1, 2]).pipe(
31
+ * Fx.changesWithEffect((previous, next) => Effect.succeed(previous === next)),
32
+ * )
33
+ * ```
34
+ *
15
35
  * @param f - Effectful function: `(prev, next) => Effect<boolean>`. Return `true` to skip (treat as duplicate), `false` to emit.
16
36
  * @returns An `Fx` with consecutive "equal" elements removed.
17
37
  * @since 1.0.0
18
- * @category combinators
38
+ * @category Selecting values
19
39
  */
20
40
  export const changesWithEffect = dual(2, (fx, f) => make((sink) => sinkCore.withStateSemaphore(sink, Option.none(), (s) => fx.run(makeSink(s.onFailure, (a2) => Effect.matchCauseEffect(Effect.flatMap(s.get, (state) => Option.match(state, {
21
41
  onNone: () => Effect.flatMap(s.onSuccess(a2), () => s.updateEffect(() => Effect.succeed(Option.some(a2)))),
@@ -3,10 +3,27 @@ import type { Fx } from "../Fx.js";
3
3
  /**
4
4
  * Compacts an Fx of Options, discarding `None` values and unwrapping `Some` values.
5
5
  *
6
+ * @remarks
7
+ * ## Why
8
+ * `compact` turns optional pushed values into ordinary pushed values without inventing a sentinel.
9
+ * It emits once for each `Some`, never for `None`, and preserves the order of retained values.
10
+ *
11
+ * ## Ownership and lifetime
12
+ * This is a stateless sink transformation. It acquires no resources and forwards source failures,
13
+ * services, completion, and interruption unchanged.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * import { Option } from "effect"
18
+ * import { Fx } from "@typed/fx"
19
+ *
20
+ * const present = Fx.fromIterable([Option.some(1), Option.none(), Option.some(2)]).pipe(Fx.compact)
21
+ * ```
22
+ *
6
23
  * @param self - An `Fx` emitting `Option<A>`.
7
24
  * @returns An `Fx` emitting `A`.
8
25
  * @since 1.0.0
9
- * @category combinators
26
+ * @category Selecting values
10
27
  */
11
28
  export declare const compact: <A, E, R>(self: Fx<Option.Option<A>, E, R>) => Fx<A, E, R>;
12
29
  //# sourceMappingURL=compact.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compact.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/compact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAG7C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACnB,CAAC"}
1
+ {"version":3,"file":"compact.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/compact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAG7C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACnB,CAAC"}
@@ -3,9 +3,26 @@ import { make } from "../constructors/make.js";
3
3
  /**
4
4
  * Compacts an Fx of Options, discarding `None` values and unwrapping `Some` values.
5
5
  *
6
+ * @remarks
7
+ * ## Why
8
+ * `compact` turns optional pushed values into ordinary pushed values without inventing a sentinel.
9
+ * It emits once for each `Some`, never for `None`, and preserves the order of retained values.
10
+ *
11
+ * ## Ownership and lifetime
12
+ * This is a stateless sink transformation. It acquires no resources and forwards source failures,
13
+ * services, completion, and interruption unchanged.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * import { Option } from "effect"
18
+ * import { Fx } from "@typed/fx"
19
+ *
20
+ * const present = Fx.fromIterable([Option.some(1), Option.none(), Option.some(2)]).pipe(Fx.compact)
21
+ * ```
22
+ *
6
23
  * @param self - An `Fx` emitting `Option<A>`.
7
24
  * @returns An `Fx` emitting `A`.
8
25
  * @since 1.0.0
9
- * @category combinators
26
+ * @category Selecting values
10
27
  */
11
28
  export const compact = (self) => make((sink) => self.run(sinkCore.compact(sink)));
@@ -0,0 +1,86 @@
1
+ import type { FlatMapLike } from "./flatMap.js";
2
+ import type { FlatMapEffectLike } from "./flatMapEffect.js";
3
+ /**
4
+ * Maps each element to an inner Fx and concatenates the results sequentially.
5
+ *
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * `concatMap` is the flattening policy for work that must not overlap: the next
10
+ * source value is admitted only after the current inner Fx completes. It is the
11
+ * bounded-concurrency form of {@link flatMapConcurrently} with a limit of one.
12
+ *
13
+ * ## Ordering and cardinality
14
+ *
15
+ * Every source value creates exactly one inner Fx. Inner values retain both
16
+ * source order and their order within each inner Fx; no inner value is buffered
17
+ * behind a later inner because later inners have not started yet.
18
+ *
19
+ * ## Ownership and lifetime
20
+ *
21
+ * Source and inner failures are forwarded to the output Sink, and both service
22
+ * requirements remain in the returned type. The required `Scope` owns the
23
+ * admitted inner fiber; interruption closes it and prevents queued source work
24
+ * from starting. No values are dropped, switched, or replayed.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import { Fx } from "@typed/fx"
29
+ * import { Effect } from "effect"
30
+ *
31
+ * const ordered = Fx.concatMap(Fx.fromIterable([
32
+ * { id: "first", wait: "20 millis" as const },
33
+ * { id: "second", wait: "1 millis" as const }
34
+ * ]), ({ id, wait }) => Fx.at(id, wait))
35
+ *
36
+ * const program = Effect.scoped(Fx.collectAll(ordered))
37
+ * Effect.runPromise(program).then(console.log)
38
+ * // ["first", "second"]: the one-millisecond inner is not started early
39
+ * ```
40
+ *
41
+ * @since 1.0.0
42
+ * @category Concurrent work
43
+ */
44
+ export declare const concatMap: FlatMapLike;
45
+ /**
46
+ * Maps each element to an Effect and concatenates the results sequentially.
47
+ *
48
+ * @remarks
49
+ * ## Why
50
+ *
51
+ * This is the Effect-producing form of {@link concatMap}. It makes serialized
52
+ * commands explicit without requiring callers to wrap each Effect with
53
+ * `Fx.fromEffect`.
54
+ *
55
+ * ## Ordering and cardinality
56
+ *
57
+ * Each source value starts one Effect only after the previous Effect has
58
+ * completed. Each successful Effect emits exactly one value, so output order is
59
+ * source order and there is no overlap or buffering of successful results.
60
+ *
61
+ * ## Ownership and lifetime
62
+ *
63
+ * Source failures and Effect failures remain typed; callback services are added
64
+ * to the output requirements. The returned Fx requires `Scope`, which owns the
65
+ * active callback Effect and interrupts it when observation ends.
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * import { Fx } from "@typed/fx"
70
+ * import { Effect } from "effect"
71
+ *
72
+ * const saved = Fx.concatMapEffect(Fx.fromIterable([
73
+ * { id: "first", wait: "20 millis" as const },
74
+ * { id: "second", wait: "1 millis" as const }
75
+ * ]), ({ id, wait }) => Effect.as(Effect.sleep(wait), id))
76
+ *
77
+ * const program = Effect.scoped(Fx.collectAll(saved))
78
+ * Effect.runPromise(program).then(console.log)
79
+ * // ["first", "second"]
80
+ * ```
81
+ *
82
+ * @since 1.0.0
83
+ * @category Concurrent work
84
+ */
85
+ export declare const concatMapEffect: FlatMapEffectLike;
86
+ //# sourceMappingURL=concatMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concatMap.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/concatMap.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,SAAS,EAAE,WAOvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,eAAe,EAAE,iBAM7B,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { dual, flow } from "effect/Function";
2
+ import { fromEffect } from "../constructors/fromEffect.js";
3
+ import { flatMapConcurrently } from "./flatMapConcurrently.js";
4
+ /**
5
+ * Maps each element to an inner Fx and concatenates the results sequentially.
6
+ *
7
+ * @remarks
8
+ * ## Why
9
+ *
10
+ * `concatMap` is the flattening policy for work that must not overlap: the next
11
+ * source value is admitted only after the current inner Fx completes. It is the
12
+ * bounded-concurrency form of {@link flatMapConcurrently} with a limit of one.
13
+ *
14
+ * ## Ordering and cardinality
15
+ *
16
+ * Every source value creates exactly one inner Fx. Inner values retain both
17
+ * source order and their order within each inner Fx; no inner value is buffered
18
+ * behind a later inner because later inners have not started yet.
19
+ *
20
+ * ## Ownership and lifetime
21
+ *
22
+ * Source and inner failures are forwarded to the output Sink, and both service
23
+ * requirements remain in the returned type. The required `Scope` owns the
24
+ * admitted inner fiber; interruption closes it and prevents queued source work
25
+ * from starting. No values are dropped, switched, or replayed.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * import { Fx } from "@typed/fx"
30
+ * import { Effect } from "effect"
31
+ *
32
+ * const ordered = Fx.concatMap(Fx.fromIterable([
33
+ * { id: "first", wait: "20 millis" as const },
34
+ * { id: "second", wait: "1 millis" as const }
35
+ * ]), ({ id, wait }) => Fx.at(id, wait))
36
+ *
37
+ * const program = Effect.scoped(Fx.collectAll(ordered))
38
+ * Effect.runPromise(program).then(console.log)
39
+ * // ["first", "second"]: the one-millisecond inner is not started early
40
+ * ```
41
+ *
42
+ * @since 1.0.0
43
+ * @category Concurrent work
44
+ */
45
+ export const concatMap = dual(2, (self, f) => flatMapConcurrently(self, f, 1));
46
+ /**
47
+ * Maps each element to an Effect and concatenates the results sequentially.
48
+ *
49
+ * @remarks
50
+ * ## Why
51
+ *
52
+ * This is the Effect-producing form of {@link concatMap}. It makes serialized
53
+ * commands explicit without requiring callers to wrap each Effect with
54
+ * `Fx.fromEffect`.
55
+ *
56
+ * ## Ordering and cardinality
57
+ *
58
+ * Each source value starts one Effect only after the previous Effect has
59
+ * completed. Each successful Effect emits exactly one value, so output order is
60
+ * source order and there is no overlap or buffering of successful results.
61
+ *
62
+ * ## Ownership and lifetime
63
+ *
64
+ * Source failures and Effect failures remain typed; callback services are added
65
+ * to the output requirements. The returned Fx requires `Scope`, which owns the
66
+ * active callback Effect and interrupts it when observation ends.
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * import { Fx } from "@typed/fx"
71
+ * import { Effect } from "effect"
72
+ *
73
+ * const saved = Fx.concatMapEffect(Fx.fromIterable([
74
+ * { id: "first", wait: "20 millis" as const },
75
+ * { id: "second", wait: "1 millis" as const }
76
+ * ]), ({ id, wait }) => Effect.as(Effect.sleep(wait), id))
77
+ *
78
+ * const program = Effect.scoped(Fx.collectAll(saved))
79
+ * Effect.runPromise(program).then(console.log)
80
+ * // ["first", "second"]
81
+ * ```
82
+ *
83
+ * @since 1.0.0
84
+ * @category Concurrent work
85
+ */
86
+ export const concatMapEffect = dual(2, (self, f) => concatMap(self, flow(f, fromEffect)));