@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
@@ -1,40 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import type * as Equivalence from "effect/Equivalence";
3
- import * as Option from "effect/Option";
4
- import * as Ref from "effect/Ref";
5
- import * as sinkCore from "../../Sink/combinators.js";
6
- import { make as makeSink } from "../../Sink/Sink.js";
7
- import { make } from "../constructors/make.js";
8
- import type { Fx } from "../Fx.js";
9
-
10
- /**
11
- * Drops elements that are equal to the previous element using a custom equivalence function.
12
- *
13
- * @param Eq - The equivalence function to use.
14
- * @returns An `Fx` with consecutive duplicates removed.
15
- * @since 1.0.0
16
- * @category combinators
17
- */
18
- export const skipRepeatsWith =
19
- <A>(Eq: Equivalence.Equivalence<A>) =>
20
- <E, R>(fx: Fx<A, E, R>): Fx<A, E, R> =>
21
- make<A, E, R>((sink) =>
22
- sinkCore.withState(sink, Option.none<A>(), (sink) =>
23
- fx.run(
24
- makeSink(sink.onFailure, (a2) =>
25
- Effect.flatten(
26
- Ref.modify(
27
- sink.state,
28
- Option.match({
29
- onNone: () => [sink.onSuccess(a2), Option.some(a2)],
30
- onSome: (a) =>
31
- Eq(a, a2)
32
- ? [Effect.void, Option.some(a)]
33
- : [sink.onSuccess(a2), Option.some(a2)],
34
- }),
35
- ),
36
- ),
37
- ),
38
- ),
39
- ),
40
- );
@@ -1,100 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import { dual } from "effect/Function";
3
- import * as Ref from "effect/Ref";
4
- import { make as makeFx } from "../constructors/make.js";
5
- import type { Fx } from "../Fx.js";
6
- import { make as makeSink } from "../../Sink/Sink.js";
7
-
8
- /**
9
- * Skips elements from an Fx while a predicate returns true.
10
- * Emits from the first element for which the predicate returns false (including that element) and all following elements.
11
- *
12
- * @param predicate - The predicate function.
13
- * @returns An `Fx` that emits once the predicate first fails.
14
- * @since 1.0.0
15
- * @category combinators
16
- */
17
- export const skipWhile: {
18
- <A>(predicate: (a: A) => boolean): <E, R>(fx: Fx<A, E, R>) => Fx<A, E, R>;
19
- <A, E, R>(fx: Fx<A, E, R>, predicate: (a: A) => boolean): Fx<A, E, R>;
20
- } = dual(
21
- 2,
22
- <A, E, R>(fx: Fx<A, E, R>, predicate: (a: A) => boolean): Fx<A, E, R> =>
23
- makeFx<A, E, R>((sink) =>
24
- Effect.gen(function* () {
25
- const skippingRef = yield* Ref.make(true);
26
- const skipSink = makeSink(sink.onFailure, (a: A) =>
27
- Effect.gen(function* () {
28
- const skipping = yield* Ref.get(skippingRef);
29
- if (skipping) {
30
- if (predicate(a)) return;
31
- yield* Ref.set(skippingRef, false);
32
- }
33
- return yield* sink.onSuccess(a);
34
- }),
35
- );
36
- return yield* fx.run(skipSink);
37
- }),
38
- ),
39
- );
40
-
41
- /**
42
- * Skips elements from an Fx while an effectful predicate returns true.
43
- * Emits from the first element for which the predicate effect succeeds with false (including that element) and all following elements.
44
- *
45
- * @param predicate - Effectful predicate function.
46
- * @returns An `Fx` that emits once the predicate first fails.
47
- * @since 1.0.0
48
- * @category combinators
49
- */
50
- export const skipWhileEffect: {
51
- <A, E2, R2>(
52
- predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
53
- ): <E, R>(fx: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
54
- <A, E, R, E2, R2>(
55
- fx: Fx<A, E, R>,
56
- predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
57
- ): Fx<A, E | E2, R | R2>;
58
- } = dual(
59
- 2,
60
- <A, E, R, E2, R2>(
61
- fx: Fx<A, E, R>,
62
- predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
63
- ): Fx<A, E | E2, R | R2> =>
64
- makeFx<A, E | E2, R | R2>((sink) =>
65
- Effect.gen(function* () {
66
- const skippingRef = yield* Ref.make(true);
67
- const skipSink = makeSink(sink.onFailure, (a: A) =>
68
- Effect.matchCauseEffect(predicate(a), {
69
- onFailure: sink.onFailure,
70
- onSuccess: (ok) =>
71
- Effect.gen(function* () {
72
- const skipping = yield* Ref.get(skippingRef);
73
- if (skipping) {
74
- if (ok) return;
75
- yield* Ref.set(skippingRef, false);
76
- }
77
- return yield* sink.onSuccess(a);
78
- }),
79
- }),
80
- );
81
- return yield* fx.run(skipSink);
82
- }),
83
- ),
84
- );
85
-
86
- /**
87
- * Alias of `skipWhile` for Effect parity (`dropWhile` naming).
88
- *
89
- * @since 1.0.0
90
- * @category combinators
91
- */
92
- export const dropWhile = skipWhile;
93
-
94
- /**
95
- * Alias of `skipWhileEffect` for Effect parity (`dropWhileEffect` naming).
96
- *
97
- * @since 1.0.0
98
- * @category combinators
99
- */
100
- export const dropWhileEffect = skipWhileEffect;
@@ -1,55 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import { dual } from "effect/Function";
3
- import * as sinkCore from "../../Sink/combinators.js";
4
- import { make } from "../constructors/make.js";
5
- import type { Fx } from "../Fx.js";
6
- import { unwrap } from "./unwrap.js";
7
-
8
- /**
9
- * Defines the bounds for slicing an Fx stream.
10
- * @since 1.0.0
11
- * @category models
12
- */
13
- export interface Bounds {
14
- readonly skip: number;
15
- readonly take: number;
16
- }
17
-
18
- /**
19
- * Slices an Fx by skipping a number of elements and then taking a number of elements.
20
- *
21
- * @param bounds - The `Bounds` specifying how many elements to skip and take.
22
- * @returns An `Fx` representing the slice.
23
- * @since 1.0.0
24
- * @category combinators
25
- */
26
- export const slice: {
27
- (bounds: Bounds): <A, E, R>(fx: Fx<A, E, R>) => Fx<A, E, R>;
28
-
29
- <A, E, R>(fx: Fx<A, E, R>, bounds: Bounds): Fx<A, E, R>;
30
- } = dual(
31
- 2,
32
- <A, E, R>(fx: Fx<A, E, R>, bounds: Bounds): Fx<A, E, R> =>
33
- make<A, E, R>((sink) => sinkCore.slice(sink, bounds, (sink) => fx.run(sink))),
34
- );
35
-
36
- /**
37
- * Slices an Fx with bounds produced by an Effect.
38
- *
39
- * @param bounds - Effect that produces slice bounds.
40
- * @returns An `Fx` representing the slice.
41
- * @since 1.0.0
42
- * @category combinators
43
- */
44
- export const sliceEffect: {
45
- <E2, R2>(
46
- bounds: Effect.Effect<Bounds, E2, R2>,
47
- ): <A, E, R>(fx: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
48
- <A, E, R, E2, R2>(fx: Fx<A, E, R>, bounds: Effect.Effect<Bounds, E2, R2>): Fx<A, E | E2, R | R2>;
49
- } = dual(
50
- 2,
51
- <A, E, R, E2, R2>(
52
- fx: Fx<A, E, R>,
53
- bounds: Effect.Effect<Bounds, E2, R2>,
54
- ): Fx<A, E | E2, R | R2> => unwrap(Effect.map(bounds, (b) => slice(fx, b))),
55
- );
@@ -1,55 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Fiber from "effect/Fiber";
3
- import { dual } from "effect/Function";
4
- import * as Scope from "effect/Scope";
5
- import * as ServiceMap from "effect/ServiceMap";
6
- import * as SyncronizedRef from "effect/SynchronizedRef";
7
- import { make as makeSink } from "../../Sink/Sink.js";
8
- import { make } from "../constructors/make.js";
9
- import type { Fx } from "../Fx.js";
10
- import { extendScope } from "../internal/scope.js";
11
- import type { FlatMapLike } from "./flatMap.js";
12
-
13
- /**
14
- * Maps each element of an Fx to a new Fx, and switches to the latest inner Fx.
15
- *
16
- * When a new element is emitted, the previous inner Fx is cancelled.
17
- *
18
- * @param f - A function that maps an element `A` to a new `Fx<B>`.
19
- * @returns An `Fx` that emits values from the latest inner stream.
20
- * @since 1.0.0
21
- * @category combinators
22
- */
23
- export const switchMap: FlatMapLike = dual(
24
- 2,
25
- <A, E, R, B, E2, R2>(
26
- self: Fx<A, E, R>,
27
- f: (a: A) => Fx<B, E2, R2>,
28
- ): Fx<B, E | E2, R | R2 | Scope.Scope> =>
29
- make<B, E | E2, R | R2 | Scope.Scope>(
30
- Effect.fn(function* (sink) {
31
- const ctx = yield* Effect.services<R2 | Scope.Scope>();
32
- const scope = ServiceMap.get(ctx, Scope.Scope);
33
- const fiberRef = yield* SyncronizedRef.make<Fiber.Fiber<unknown, never> | null>(null);
34
-
35
- const next = (value: A) =>
36
- Effect.forkIn(Effect.provideServices(f(value).run(sink), ctx), scope, {
37
- startImmediately: false,
38
- uninterruptible: false,
39
- });
40
-
41
- yield* self.run(
42
- makeSink(sink.onFailure, (value: A) =>
43
- SyncronizedRef.updateEffect(fiberRef, (fiber) =>
44
- fiber ? Fiber.interrupt(fiber).pipe(Effect.flatMap(() => next(value))) : next(value),
45
- ),
46
- ),
47
- );
48
-
49
- const fiber = yield* SyncronizedRef.get(fiberRef);
50
- if (fiber) {
51
- yield* Fiber.join(fiber);
52
- }
53
- }, extendScope),
54
- ),
55
- );
@@ -1,25 +0,0 @@
1
- import type * as Effect from "effect/Effect";
2
- import { dual, flow } from "effect/Function";
3
- import type * as Scope from "effect/Scope";
4
- import { fromEffect } from "../constructors/fromEffect.js";
5
- import type { Fx } from "../Fx.js";
6
- import type { FlatMapEffectLike } from "./flatMapEffect.js";
7
- import { switchMap } from "./switchMap.js";
8
-
9
- /**
10
- * Maps each element of an Fx to an Effect, and switches to the latest effect.
11
- *
12
- * When a new element is emitted, the previous effect is cancelled.
13
- *
14
- * @param f - A function that maps an element `A` to an `Effect<B>`.
15
- * @returns An `Fx` that emits the results of the latest effect.
16
- * @since 1.0.0
17
- * @category combinators
18
- */
19
- export const switchMapEffect: FlatMapEffectLike = dual(
20
- 2,
21
- <A, E, R, B, E2, R2>(
22
- self: Fx<A, E, R>,
23
- f: (a: A) => Effect.Effect<B, E2, R2>,
24
- ): Fx<B, E | E2, R | R2 | Scope.Scope> => switchMap(self, flow(f, fromEffect)),
25
- );
@@ -1,38 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import { dual } from "effect/Function";
3
- import type { Fx } from "../Fx.js";
4
- import { slice } from "./slice.js";
5
- import { unwrap } from "./unwrap.js";
6
-
7
- /**
8
- * Takes the first `n` elements from an Fx and then completes.
9
- *
10
- * @param n - The number of elements to take.
11
- * @returns An `Fx` that emits at most `n` elements.
12
- * @since 1.0.0
13
- * @category combinators
14
- */
15
- export const take: {
16
- (n: number): <A, E, R>(fx: Fx<A, E, R>) => Fx<A, E, R>;
17
-
18
- <A, E, R>(fx: Fx<A, E, R>, n: number): Fx<A, E, R>;
19
- } = dual(2, <A, E, R>(fx: Fx<A, E, R>, n: number): Fx<A, E, R> => slice(fx, { skip: 0, take: n }));
20
-
21
- /**
22
- * Takes the first `n` elements where `n` is produced by an Effect.
23
- *
24
- * @param count - Effect that produces the number of elements to take.
25
- * @returns An `Fx` that emits at most `n` elements.
26
- * @since 1.0.0
27
- * @category combinators
28
- */
29
- export const takeEffect: {
30
- <E2, R2>(
31
- count: Effect.Effect<number, E2, R2>,
32
- ): <A, E, R>(fx: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
33
- <A, E, R, E2, R2>(fx: Fx<A, E, R>, count: Effect.Effect<number, E2, R2>): Fx<A, E | E2, R | R2>;
34
- } = dual(
35
- 2,
36
- <A, E, R, E2, R2>(fx: Fx<A, E, R>, count: Effect.Effect<number, E2, R2>): Fx<A, E | E2, R | R2> =>
37
- unwrap(Effect.map(count, (n) => take(fx, n))),
38
- );
@@ -1,88 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import { dual } from "effect/Function";
3
- import * as combinators from "../../Sink/combinators.js";
4
- import { make as makeSink } from "../../Sink/Sink.js";
5
- import { make as makeFx } from "../constructors/make.js";
6
- import type { Fx } from "../Fx.js";
7
-
8
- /**
9
- * Takes elements from an Fx until a predicate returns true.
10
- * The element that satisfies the predicate is not included in the output.
11
- *
12
- * @param predicate - The predicate function.
13
- * @returns An `Fx` that completes when the predicate matches.
14
- * @since 1.0.0
15
- * @category combinators
16
- */
17
- export const takeUntil: {
18
- <A>(predicate: (a: A) => boolean): <E, R>(fx: Fx<A, E, R>) => Fx<A, E, R>;
19
- <A, E, R>(fx: Fx<A, E, R>, predicate: (a: A) => boolean): Fx<A, E, R>;
20
- } = dual(2, <A, E, R>(fx: Fx<A, E, R>, predicate: (a: A) => boolean): Fx<A, E, R> => {
21
- return makeFx<A, E, R>((sink) =>
22
- combinators.withEarlyExit(sink, (sink) =>
23
- fx.run(
24
- makeSink(sink.onFailure, (a) => {
25
- if (predicate(a)) {
26
- return sink.earlyExit;
27
- }
28
- return sink.onSuccess(a);
29
- }),
30
- ),
31
- ),
32
- );
33
- });
34
-
35
- /**
36
- * Takes elements from an Fx until an effectful predicate returns true.
37
- * The element that satisfies the predicate is not included in the output.
38
- *
39
- * @param predicate - Effectful predicate function.
40
- * @returns An `Fx` that completes when the predicate matches.
41
- * @since 1.0.0
42
- * @category combinators
43
- */
44
- export const takeUntilEffect: {
45
- <A, E2, R2>(
46
- predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
47
- ): <E, R>(fx: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
48
- <A, E, R, E2, R2>(
49
- fx: Fx<A, E, R>,
50
- predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
51
- ): Fx<A, E | E2, R | R2>;
52
- } = dual(
53
- 2,
54
- <A, E, R, E2, R2>(
55
- fx: Fx<A, E, R>,
56
- predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
57
- ): Fx<A, E | E2, R | R2> =>
58
- makeFx<A, E | E2, R | R2>((sink) =>
59
- combinators.withEarlyExit(sink, (sink) =>
60
- fx.run(
61
- makeSink(sink.onFailure, (a) =>
62
- Effect.matchCauseEffect(predicate(a), {
63
- onFailure: sink.onFailure,
64
- onSuccess: (matches) => (matches ? sink.earlyExit : sink.onSuccess(a)),
65
- }),
66
- ),
67
- ),
68
- ),
69
- ),
70
- );
71
-
72
- /**
73
- * Drops elements from an Fx after a predicate returns true.
74
- * The element that satisfies the predicate is included in the output.
75
- *
76
- * @param predicate - The predicate function.
77
- * @returns An `Fx` that stops emitting when the predicate matches.
78
- * @since 1.0.0
79
- * @category combinators
80
- */
81
- export const dropAfter: {
82
- <A>(predicate: (a: A) => boolean): <E, R>(fx: Fx<A, E, R>) => Fx<A, E, R>;
83
- <A, E, R>(fx: Fx<A, E, R>, predicate: (a: A) => boolean): Fx<A, E, R>;
84
- } = dual(
85
- 2,
86
- <A, E, R>(fx: Fx<A, E, R>, predicate: (a: A) => boolean): Fx<A, E, R> =>
87
- makeFx<A, E, R>((sink) => combinators.dropAfter(sink, predicate, (sink) => fx.run(sink))),
88
- );
@@ -1,47 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import { dual } from "effect/Function";
3
- import type { Fx } from "../Fx.js";
4
- import { takeUntil, takeUntilEffect } from "./takeUntil.js";
5
-
6
- /**
7
- * Takes elements from an Fx while a predicate returns true.
8
- * Stops at the first element for which the predicate returns false; that element is not included.
9
- *
10
- * @param predicate - The predicate function.
11
- * @returns An `Fx` that emits while the predicate holds.
12
- * @since 1.0.0
13
- * @category combinators
14
- */
15
- export const takeWhile: {
16
- <A>(predicate: (a: A) => boolean): <E, R>(fx: Fx<A, E, R>) => Fx<A, E, R>;
17
- <A, E, R>(fx: Fx<A, E, R>, predicate: (a: A) => boolean): Fx<A, E, R>;
18
- } = dual(
19
- 2,
20
- <A, E, R>(fx: Fx<A, E, R>, predicate: (a: A) => boolean): Fx<A, E, R> =>
21
- takeUntil(fx, (a) => !predicate(a)),
22
- );
23
-
24
- /**
25
- * Takes elements from an Fx while an effectful predicate returns true.
26
- * Stops at the first element for which the predicate effect succeeds with false; that element is not included.
27
- *
28
- * @param predicate - Effectful predicate function.
29
- * @returns An `Fx` that emits while the predicate holds.
30
- * @since 1.0.0
31
- * @category combinators
32
- */
33
- export const takeWhileEffect: {
34
- <A, E2, R2>(
35
- predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
36
- ): <E, R>(fx: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
37
- <A, E, R, E2, R2>(
38
- fx: Fx<A, E, R>,
39
- predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
40
- ): Fx<A, E | E2, R | R2>;
41
- } = dual(
42
- 2,
43
- <A, E, R, E2, R2>(
44
- fx: Fx<A, E, R>,
45
- predicate: (a: A) => Effect.Effect<boolean, E2, R2>,
46
- ): Fx<A, E | E2, R | R2> => takeUntilEffect(fx, (a) => Effect.map(predicate(a), (b) => !b)),
47
- );
@@ -1,39 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import { dual } from "effect/Function";
3
- import * as sinkCore from "../../Sink/combinators.js";
4
- import { make } from "../constructors/make.js";
5
- import type { Fx } from "../Fx.js";
6
-
7
- /**
8
- * Performs an effect for each element of the Fx, without changing the elements.
9
- *
10
- * @param f - An effectful function to apply to each element.
11
- * @returns An `Fx` that emits the original elements.
12
- * @since 1.0.0
13
- * @category combinators
14
- */
15
- export const tap: {
16
- <A, E2 = never, R2 = never>(
17
- f: (a: A) => void | Effect.Effect<unknown, E2, R2>,
18
- ): <E, R>(self: Fx<A, E | E2, R>) => Fx<A, E | E2, R | R2>;
19
-
20
- <A, E, R, E2 = never, R2 = never>(
21
- self: Fx<A, E | E2, R>,
22
- f: (a: A) => void | Effect.Effect<unknown, E2, R2>,
23
- ): Fx<A, E | E2, R | R2>;
24
- } = dual(
25
- 2,
26
- <A, E, R, E2, R2>(
27
- self: Fx<A, E, R>,
28
- f: (a: A) => void | Effect.Effect<unknown, E2, R2>,
29
- ): Fx<A, E | E2, R | R2> =>
30
- make<A, E | E2, R | R2>((sink) =>
31
- self.run(
32
- sinkCore.tapEffect(sink, (a) => {
33
- const x = f(a);
34
- if (Effect.isEffect(x)) return x;
35
- return Effect.void;
36
- }),
37
- ),
38
- ),
39
- );
@@ -1,79 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import { make as makeSink } from "../../Sink/Sink.js";
3
- import { make } from "../constructors/make.js";
4
- import { succeed } from "../constructors/succeed.js";
5
- import type { Fx } from "../Fx.js";
6
- import { map } from "./map.js";
7
-
8
- /**
9
- * Combines multiple Fx streams into a single Fx that emits a tuple of the latest values from each stream.
10
- * The resulting Fx waits for all input streams to emit at least once before emitting the first tuple.
11
- * Afterwards, it emits a new tuple whenever any input stream emits a new value.
12
- *
13
- * @param fxs - The Fx streams to combine.
14
- * @returns An `Fx` emitting tuples of values.
15
- * @since 1.0.0
16
- * @category combinators
17
- */
18
- export function tuple<FX extends ReadonlyArray<Fx<any, any, any>>>(
19
- ...fxs: FX
20
- ): Fx<
21
- { readonly [K in keyof FX]: Fx.Success<FX[K]> },
22
- Fx.Error<FX[number]>,
23
- Fx.Services<FX[number]>
24
- > {
25
- if (fxs.length === 0) return succeed([] as { readonly [K in keyof FX]: Fx.Success<FX[K]> });
26
- if (fxs.length === 1) return fxs[0];
27
-
28
- type Result = { readonly [K in keyof FX]: Fx.Success<FX[K]> };
29
- return make(
30
- Effect.fn(function* (sink) {
31
- const len = fxs.length;
32
- // oxlint-disable-next-line unicorn/no-new-array
33
- const result: Array<Fx.Success<FX[number]>> = new Array(len);
34
- const filled = new Set<number>();
35
-
36
- return yield* Effect.forEach(
37
- fxs,
38
- (fx, i) =>
39
- fx.run(
40
- makeSink(
41
- sink.onFailure,
42
- Effect.fn(function* (value) {
43
- result[i] = value;
44
- filled.add(i);
45
- if (filled.size === len) {
46
- yield* sink.onSuccess(result as Result);
47
- }
48
- }),
49
- ),
50
- ),
51
- { concurrency: "unbounded", discard: true },
52
- );
53
- }),
54
- );
55
- }
56
-
57
- /**
58
- * Combines a record of Fx streams into a single Fx that emits a record of the latest values.
59
- * Similar to `tuple`, but for objects.
60
- *
61
- * @param fxs - A record of Fx streams.
62
- * @returns An `Fx` emitting records of values.
63
- * @since 1.0.0
64
- * @category combinators
65
- */
66
- export function struct<FXS extends Readonly<Record<string, Fx<any, any, any>>>>(
67
- fxs: FXS,
68
- ): Fx<
69
- { readonly [K in keyof FXS]: Fx.Success<FXS[K]> },
70
- Fx.Error<FXS[keyof FXS]>,
71
- Fx.Services<FXS[keyof FXS]>
72
- > {
73
- return map(
74
- tuple(...Object.entries(fxs).map(([key, fx]) => map(fx, (value) => [key, value] as const))),
75
- Object.fromEntries as (entries: ReadonlyArray<readonly [string, any]>) => {
76
- readonly [K in keyof FXS]: Fx.Success<FXS[K]>;
77
- },
78
- );
79
- }
@@ -1,21 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import { make } from "../constructors/make.js";
3
- import type { Fx } from "../Fx.js";
4
-
5
- /**
6
- * Unwraps an Effect that produces an Fx into a single Fx.
7
- *
8
- * @param effect - An `Effect` that produces an `Fx`.
9
- * @returns An `Fx` that runs the effect and then the produced Fx.
10
- * @since 1.0.0
11
- * @category combinators
12
- */
13
- export const unwrap = <A, E, R, E2, R2>(
14
- effect: Effect.Effect<Fx<A, E, R>, E2, R2>,
15
- ): Fx<A, E | E2, R | R2> =>
16
- make<A, E | E2, R | R2>((sink) =>
17
- Effect.matchCauseEffect(effect, {
18
- onFailure: (cause) => sink.onFailure(cause),
19
- onSuccess: (fx) => fx.run(sink),
20
- }),
21
- );
@@ -1,26 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import type * as Scope from "effect/Scope";
3
- import { make } from "../constructors/make.js";
4
- import type { Fx } from "../Fx.js";
5
-
6
- /**
7
- * Unwraps an Effect that produces an Fx into a single Fx, managing the scope of the effect.
8
- *
9
- * The scope of the effect is closed when the Fx completes or is interrupted.
10
- *
11
- * @param effect - An `Effect` that produces an `Fx`.
12
- * @returns An `Fx` that runs the effect and then the produced Fx.
13
- * @since 1.0.0
14
- * @category combinators
15
- */
16
- export const unwrapScoped = <A, E, R, E2, R2>(
17
- effect: Effect.Effect<Fx<A, E, R>, E2, R2 | Scope.Scope>,
18
- ): Fx<A, E | E2, Exclude<R | R2, Scope.Scope>> =>
19
- make<A, E | E2, Exclude<R | R2, Scope.Scope>>((sink) =>
20
- Effect.scoped(
21
- Effect.matchCauseEffect(effect, {
22
- onFailure: (cause) => sink.onFailure(cause),
23
- onSuccess: (fx) => fx.run(sink),
24
- }),
25
- ),
26
- );
@@ -1,64 +0,0 @@
1
- import { dual } from "effect/Function";
2
- import type { Scope } from "effect/Scope";
3
- import { succeed } from "../constructors/succeed.js";
4
- import type { Fx } from "../Fx.js";
5
- import { switchMap } from "./switchMap.js";
6
-
7
- /**
8
- * Conditionally runs one of two Fx streams based on the boolean value emitted by the condition stream.
9
- *
10
- * @param condition - An `Fx` emitting booleans.
11
- * @param matchers - An object containing `onTrue` and `onFalse` Fx streams.
12
- * @returns An `Fx` that switches between `onTrue` and `onFalse` based on the condition.
13
- * @since 1.0.0
14
- * @category combinators
15
- */
16
- const if_: {
17
- <B, E2, R2, C, E3, R3>(matchers: {
18
- onTrue: Fx<B, E2, R2>;
19
- onFalse: Fx<C, E3, R3>;
20
- }): <E, R>(condition: Fx<boolean, E, R>) => Fx<B | C, E | E2 | E3, R | R2 | R3 | Scope>;
21
-
22
- <E, R, B, E2, R2, C, E3, R3>(
23
- condition: Fx<boolean, E, R>,
24
- matchers: {
25
- onTrue: Fx<B, E2, R2>;
26
- onFalse: Fx<C, E3, R3>;
27
- },
28
- ): Fx<B | C, E | E2 | E3, R | R2 | R3 | Scope>;
29
- } = dual(
30
- 2,
31
- <E, R, B, E2, R2, C, E3, R3>(
32
- condition: Fx<boolean, E, R>,
33
- matchers: {
34
- onTrue: Fx<B, E2, R2>;
35
- onFalse: Fx<C, E3, R3>;
36
- },
37
- ): Fx<B | C, E | E2 | E3, R | R2 | R3 | Scope> => {
38
- return switchMap(
39
- condition,
40
- (pass): Fx<B | C, E2 | E3, R2 | R3> => (pass ? matchers.onTrue : matchers.onFalse),
41
- );
42
- },
43
- );
44
-
45
- export { if_ as if };
46
-
47
- /**
48
- * Conditionally emits one of two values based on the boolean value emitted by the condition stream.
49
- *
50
- * @param condition - An `Fx` emitting booleans.
51
- * @param matchers - An object containing `onTrue` and `onFalse` values.
52
- * @returns An `Fx` that emits the matched value.
53
- * @since 1.0.0
54
- * @category combinators
55
- */
56
- export const when = <E, R, B, C>(
57
- condition: Fx<boolean, E, R>,
58
- matchers: {
59
- onTrue: B;
60
- onFalse: C;
61
- },
62
- ): Fx<B | C, E, R | Scope> => {
63
- return if_(condition, { onTrue: succeed(matchers.onTrue), onFalse: succeed(matchers.onFalse) });
64
- };