@typed/fx 2.0.0-beta.0 → 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 (640) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -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 +245 -0
  10. package/dist/Fx/combinators/additive.d.ts.map +1 -0
  11. package/dist/Fx/combinators/additive.js +243 -0
  12. package/dist/Fx/combinators/catch.d.ts +246 -12
  13. package/dist/Fx/combinators/catch.d.ts.map +1 -1
  14. package/dist/Fx/combinators/catch.js +236 -12
  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 +40 -0
  19. package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -0
  20. package/dist/Fx/combinators/changesWithEffect.js +48 -0
  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 +71 -0
  37. package/dist/Fx/combinators/dropUntil.d.ts.map +1 -0
  38. package/dist/Fx/combinators/dropUntil.js +65 -0
  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 +51 -4
  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 +45 -0
  109. package/dist/Fx/combinators/index.d.ts.map +1 -1
  110. package/dist/Fx/combinators/index.js +45 -0
  111. package/dist/Fx/combinators/keyed.d.ts +124 -10
  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 +40 -0
  130. package/dist/Fx/combinators/mapBoth.d.ts.map +1 -0
  131. package/dist/Fx/combinators/mapBoth.js +33 -0
  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 +33 -0
  136. package/dist/Fx/combinators/mapError.d.ts.map +1 -0
  137. package/dist/Fx/combinators/mapError.js +32 -0
  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 +162 -8
  157. package/dist/Fx/combinators/provide.d.ts.map +1 -1
  158. package/dist/Fx/combinators/provide.js +154 -6
  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 +45 -0
  166. package/dist/Fx/combinators/result.d.ts.map +1 -0
  167. package/dist/Fx/combinators/result.js +46 -0
  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 +72 -0
  175. package/dist/Fx/combinators/scan.d.ts.map +1 -0
  176. package/dist/Fx/combinators/scan.js +77 -0
  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 +45 -1
  181. package/dist/Fx/combinators/skip.d.ts.map +1 -1
  182. package/dist/Fx/combinators/skip.js +43 -1
  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 +117 -0
  190. package/dist/Fx/combinators/skipWhile.d.ts.map +1 -0
  191. package/dist/Fx/combinators/skipWhile.js +134 -0
  192. package/dist/Fx/combinators/slice.d.ts +97 -2
  193. package/dist/Fx/combinators/slice.d.ts.map +1 -1
  194. package/dist/Fx/combinators/slice.js +45 -1
  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 +46 -1
  202. package/dist/Fx/combinators/take.d.ts.map +1 -1
  203. package/dist/Fx/combinators/take.js +44 -1
  204. package/dist/Fx/combinators/takeUntil.d.ts +62 -2
  205. package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
  206. package/dist/Fx/combinators/takeUntil.js +62 -2
  207. package/dist/Fx/combinators/takeWhile.d.ts +60 -0
  208. package/dist/Fx/combinators/takeWhile.d.ts.map +1 -0
  209. package/dist/Fx/combinators/takeWhile.js +54 -0
  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 +135 -0
  241. package/dist/Fx/combinators/zip.d.ts.map +1 -0
  242. package/dist/Fx/combinators/zip.js +160 -0
  243. package/dist/Fx/constructors/at.d.ts +23 -3
  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 +31 -2
  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 +1286 -98
  342. package/dist/Push/Push.d.ts.map +1 -1
  343. package/dist/Push/Push.js +1074 -88
  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 +137 -16
  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 +1242 -43
  456. package/dist/RefSubject/RefSubject.d.ts.map +1 -1
  457. package/dist/RefSubject/RefSubject.js +1012 -86
  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 +789 -3
  480. package/dist/Sink/combinators.d.ts.map +1 -1
  481. package/dist/Sink/combinators.js +812 -7
  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 +475 -25
  486. package/dist/Versioned/Versioned.d.ts.map +1 -1
  487. package/dist/Versioned/Versioned.js +298 -46
  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 +125 -11
  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/catch.ts +0 -165
  498. package/src/Fx/combinators/causes.ts +0 -23
  499. package/src/Fx/combinators/compact.ts +0 -15
  500. package/src/Fx/combinators/continueWith.ts +0 -78
  501. package/src/Fx/combinators/ensuring.ts +0 -23
  502. package/src/Fx/combinators/exhaustLatestMap.ts +0 -74
  503. package/src/Fx/combinators/exhaustLatestMapEffect.ts +0 -25
  504. package/src/Fx/combinators/exhaustMap.ts +0 -36
  505. package/src/Fx/combinators/exhaustMapEffect.ts +0 -23
  506. package/src/Fx/combinators/exit.ts +0 -15
  507. package/src/Fx/combinators/filter.ts +0 -22
  508. package/src/Fx/combinators/filterEffect.ts +0 -31
  509. package/src/Fx/combinators/filterMap.ts +0 -23
  510. package/src/Fx/combinators/filterMapEffect.ts +0 -32
  511. package/src/Fx/combinators/filterMapLoop.ts +0 -35
  512. package/src/Fx/combinators/filterMapLoopCause.ts +0 -36
  513. package/src/Fx/combinators/filterMapLoopCauseEffect.ts +0 -46
  514. package/src/Fx/combinators/filterMapLoopEffect.ts +0 -36
  515. package/src/Fx/combinators/flatMap.ts +0 -51
  516. package/src/Fx/combinators/flatMapConcurrently.ts +0 -36
  517. package/src/Fx/combinators/flatMapConcurrentlyEffect.ts +0 -26
  518. package/src/Fx/combinators/flatMapEffect.ts +0 -42
  519. package/src/Fx/combinators/flip.ts +0 -14
  520. package/src/Fx/combinators/gen.ts +0 -24
  521. package/src/Fx/combinators/genScoped.ts +0 -24
  522. package/src/Fx/combinators/index.ts +0 -51
  523. package/src/Fx/combinators/keyed.ts +0 -369
  524. package/src/Fx/combinators/loop.ts +0 -27
  525. package/src/Fx/combinators/loopCause.ts +0 -34
  526. package/src/Fx/combinators/loopCauseEffect.ts +0 -36
  527. package/src/Fx/combinators/loopEffect.ts +0 -34
  528. package/src/Fx/combinators/map.ts +0 -22
  529. package/src/Fx/combinators/mapEffect.ts +0 -32
  530. package/src/Fx/combinators/mergeAll.ts +0 -22
  531. package/src/Fx/combinators/mergeOrdered.ts +0 -123
  532. package/src/Fx/combinators/onError.ts +0 -40
  533. package/src/Fx/combinators/onExit.ts +0 -82
  534. package/src/Fx/combinators/onInterrupt.ts +0 -87
  535. package/src/Fx/combinators/provide.ts +0 -62
  536. package/src/Fx/combinators/skip.ts +0 -20
  537. package/src/Fx/combinators/skipRepeats.ts +0 -15
  538. package/src/Fx/combinators/skipRepeatsWith.ts +0 -40
  539. package/src/Fx/combinators/slice.ts +0 -32
  540. package/src/Fx/combinators/switchMap.ts +0 -55
  541. package/src/Fx/combinators/switchMapEffect.ts +0 -25
  542. package/src/Fx/combinators/take.ts +0 -17
  543. package/src/Fx/combinators/takeUntil.ts +0 -50
  544. package/src/Fx/combinators/tapEffect.ts +0 -39
  545. package/src/Fx/combinators/tuple.ts +0 -79
  546. package/src/Fx/combinators/unwrap.ts +0 -21
  547. package/src/Fx/combinators/unwrapScoped.ts +0 -26
  548. package/src/Fx/combinators/when.ts +0 -64
  549. package/src/Fx/combinators/withSpan.ts +0 -24
  550. package/src/Fx/constructors/at.ts +0 -23
  551. package/src/Fx/constructors/die.ts +0 -17
  552. package/src/Fx/constructors/empty.ts +0 -10
  553. package/src/Fx/constructors/fail.ts +0 -14
  554. package/src/Fx/constructors/failCause.ts +0 -14
  555. package/src/Fx/constructors/fn.ts +0 -245
  556. package/src/Fx/constructors/fromEffect.ts +0 -24
  557. package/src/Fx/constructors/fromFailures.ts +0 -19
  558. package/src/Fx/constructors/fromIterable.ts +0 -15
  559. package/src/Fx/constructors/fromSchedule.ts +0 -18
  560. package/src/Fx/constructors/fromYieldable.ts +0 -17
  561. package/src/Fx/constructors/index.ts +0 -15
  562. package/src/Fx/constructors/interrupt.ts +0 -13
  563. package/src/Fx/constructors/make.ts +0 -103
  564. package/src/Fx/constructors/periodic.ts +0 -15
  565. package/src/Fx/constructors/succeed.ts +0 -37
  566. package/src/Fx/constructors/suspend.ts +0 -6
  567. package/src/Fx/index.ts +0 -6
  568. package/src/Fx/internal/DeferredRef.ts +0 -87
  569. package/src/Fx/internal/UnionToTuple.ts +0 -12
  570. package/src/Fx/internal/diff.ts +0 -191
  571. package/src/Fx/internal/equivalence.ts +0 -12
  572. package/src/Fx/internal/multicast.ts +0 -51
  573. package/src/Fx/internal/ring-buffer.ts +0 -60
  574. package/src/Fx/internal/scope.ts +0 -58
  575. package/src/Fx/internal/yieldable.ts +0 -31
  576. package/src/Fx/run/collect.ts +0 -79
  577. package/src/Fx/run/first.ts +0 -20
  578. package/src/Fx/run/fork.ts +0 -40
  579. package/src/Fx/run/index.ts +0 -5
  580. package/src/Fx/run/observe.ts +0 -114
  581. package/src/Fx/run/runPromise.ts +0 -32
  582. package/src/Fx/stream.ts +0 -42
  583. package/src/Fx.catch.test.ts +0 -61
  584. package/src/Fx.fn.test.ts +0 -51
  585. package/src/Fx.lifecycle.test.ts +0 -80
  586. package/src/Fx.test.ts +0 -71
  587. package/src/Fx.ts +0 -1
  588. package/src/Push/Push.ts +0 -903
  589. package/src/Push/index.ts +0 -1
  590. package/src/Push.test.ts +0 -26
  591. package/src/Push.ts +0 -1
  592. package/src/RefSubject/RefArray.ts +0 -512
  593. package/src/RefSubject/RefBigDecimal.test.ts +0 -56
  594. package/src/RefSubject/RefBigDecimal.ts +0 -295
  595. package/src/RefSubject/RefBigInt.test.ts +0 -56
  596. package/src/RefSubject/RefBigInt.ts +0 -189
  597. package/src/RefSubject/RefBoolean.test.ts +0 -57
  598. package/src/RefSubject/RefBoolean.ts +0 -185
  599. package/src/RefSubject/RefCause.test.ts +0 -53
  600. package/src/RefSubject/RefCause.ts +0 -146
  601. package/src/RefSubject/RefChunk.ts +0 -510
  602. package/src/RefSubject/RefDateTime.test.ts +0 -43
  603. package/src/RefSubject/RefDateTime.ts +0 -264
  604. package/src/RefSubject/RefDuration.test.ts +0 -49
  605. package/src/RefSubject/RefDuration.ts +0 -188
  606. package/src/RefSubject/RefGraph.ts +0 -650
  607. package/src/RefSubject/RefHashMap.ts +0 -465
  608. package/src/RefSubject/RefHashRing.ts +0 -262
  609. package/src/RefSubject/RefHashSet.ts +0 -308
  610. package/src/RefSubject/RefIterable.ts +0 -445
  611. package/src/RefSubject/RefOption.test.ts +0 -67
  612. package/src/RefSubject/RefOption.ts +0 -193
  613. package/src/RefSubject/RefRecord.ts +0 -612
  614. package/src/RefSubject/RefResult.test.ts +0 -63
  615. package/src/RefSubject/RefResult.ts +0 -209
  616. package/src/RefSubject/RefString.test.ts +0 -61
  617. package/src/RefSubject/RefString.ts +0 -256
  618. package/src/RefSubject/RefStruct.test.ts +0 -60
  619. package/src/RefSubject/RefStruct.ts +0 -253
  620. package/src/RefSubject/RefSubject.ts +0 -2545
  621. package/src/RefSubject/RefTrie.ts +0 -356
  622. package/src/RefSubject/RefTuple.test.ts +0 -60
  623. package/src/RefSubject/RefTuple.ts +0 -231
  624. package/src/RefSubject/index.ts +0 -21
  625. package/src/RefSubject.test.ts +0 -65
  626. package/src/RefSubject.ts +0 -1
  627. package/src/Sink/Sink.ts +0 -159
  628. package/src/Sink/combinators.ts +0 -993
  629. package/src/Sink/index.ts +0 -2
  630. package/src/Sink.ts +0 -1
  631. package/src/Subject/Subject.ts +0 -441
  632. package/src/Subject/index.ts +0 -1
  633. package/src/Subject.test.ts +0 -47
  634. package/src/Subject.ts +0 -1
  635. package/src/Versioned/Versioned.ts +0 -521
  636. package/src/Versioned/index.ts +0 -1
  637. package/src/Versioned.test.ts +0 -23
  638. package/src/Versioned.ts +0 -1
  639. package/src/index.ts +0 -7
  640. package/tsconfig.json +0 -6
@@ -1,11 +1,43 @@
1
1
  import type { Fx } from "../Fx.js";
2
2
  /**
3
- * Flips the error and success channels of an Fx.
3
+ * Emits typed failures as values and fails with the first successful value.
4
+ *
5
+ * @remarks
6
+ * ## Why
7
+ *
8
+ * Channel inversion makes an error-producing computation composable through
9
+ * success operators, mirroring Effect's `flip` without erasing either type.
10
+ *
11
+ * ## Ownership and lifetime
12
+ *
13
+ * If a source Cause contains any Fail, the first typed error `e` is delivered
14
+ * as success and the entire Cause is discarded, including defects or interrupts
15
+ * composed beside that Fail. A Cause with no Fail propagates unchanged. A source
16
+ * success `a` terminates the returned Fx with typed failure `a`. The source
17
+ * subscription is the only lifetime and external interruption still stops it.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { flip } from "@typed/fx/Fx"
22
+ * import { fail } from "@typed/fx/Fx"
23
+ *
24
+ * const errorsAsValues = flip(fail("offline"))
25
+ * ```
26
+ *
27
+ * @example The first Fail wins over the rest of a composite Cause
28
+ * ```ts
29
+ * import { Cause } from "effect"
30
+ * import { flip } from "@typed/fx/Fx"
31
+ * import { failCause } from "@typed/fx/Fx"
32
+ *
33
+ * const composite = Cause.combine(Cause.fail("offline"), Cause.die("decoder defect"))
34
+ * const errorValue = flip(failCause(composite))
35
+ * ```
4
36
  *
5
37
  * @param fx - The `Fx` stream.
6
38
  * @returns An `Fx` where errors are successes and successes are errors.
7
39
  * @since 1.0.0
8
- * @category combinators
40
+ * @category Errors and recovery
9
41
  */
10
42
  export declare const flip: <A, E, R>(fx: Fx<A, E, R>) => Fx<E, A, R>;
11
43
  //# sourceMappingURL=flip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flip.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/flip.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACJ,CAAC"}
1
+ {"version":3,"file":"flip.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/flip.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACJ,CAAC"}
@@ -1,11 +1,43 @@
1
1
  import * as sinkCore from "../../Sink/combinators.js";
2
2
  import { make } from "../constructors/make.js";
3
3
  /**
4
- * Flips the error and success channels of an Fx.
4
+ * Emits typed failures as values and fails with the first successful value.
5
+ *
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * Channel inversion makes an error-producing computation composable through
10
+ * success operators, mirroring Effect's `flip` without erasing either type.
11
+ *
12
+ * ## Ownership and lifetime
13
+ *
14
+ * If a source Cause contains any Fail, the first typed error `e` is delivered
15
+ * as success and the entire Cause is discarded, including defects or interrupts
16
+ * composed beside that Fail. A Cause with no Fail propagates unchanged. A source
17
+ * success `a` terminates the returned Fx with typed failure `a`. The source
18
+ * subscription is the only lifetime and external interruption still stops it.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { flip } from "@typed/fx/Fx"
23
+ * import { fail } from "@typed/fx/Fx"
24
+ *
25
+ * const errorsAsValues = flip(fail("offline"))
26
+ * ```
27
+ *
28
+ * @example The first Fail wins over the rest of a composite Cause
29
+ * ```ts
30
+ * import { Cause } from "effect"
31
+ * import { flip } from "@typed/fx/Fx"
32
+ * import { failCause } from "@typed/fx/Fx"
33
+ *
34
+ * const composite = Cause.combine(Cause.fail("offline"), Cause.die("decoder defect"))
35
+ * const errorValue = flip(failCause(composite))
36
+ * ```
5
37
  *
6
38
  * @param fx - The `Fx` stream.
7
39
  * @returns An `Fx` where errors are successes and successes are errors.
8
40
  * @since 1.0.0
9
- * @category combinators
41
+ * @category Errors and recovery
10
42
  */
11
43
  export const flip = (fx) => make((sink) => fx.run(sinkCore.flip(sink)));
@@ -1,20 +1,39 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import type { Fx } from "../Fx.js";
3
- /** Extract error type from Yieldable (Effect v4) */
4
- type _YE<Y> = Y extends Effect.Yieldable<any, any, infer E, any> ? E : never;
5
- /** Extract services type from Yieldable (Effect v4) */
6
- type _YS<Y> = Y extends Effect.Yieldable<any, any, any, infer R> ? R : never;
7
3
  /**
8
- * Creates an Fx using a generator function (Effect.gen style).
4
+ * Builds an Fx by yielding Effects and returning the Fx to run afterward.
9
5
  *
10
- * This allows writing Fx code in a synchronous-looking style, using `yield*` to composition.
11
- * Note: The generator yields Effects, and the result is an Fx.
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * Setup logic often needs Effect services or failures before it can choose a
10
+ * push producer. Generator notation keeps that dependency-aware setup linear
11
+ * while preserving the returned Fx's success, error, and service channels.
12
+ *
13
+ * ## Ownership and lifetime
14
+ *
15
+ * The generator is lazy: it runs for each subscription. Yielded Effects run
16
+ * first; only their returned Fx is then subscribed. A setup failure prevents
17
+ * the Fx from starting, and interruption cancels the active phase. Resources
18
+ * acquired by yielded Effects must not escape unless managed independently;
19
+ * use {@link genScoped} when setup and the returned Fx share a Scope.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * import { Effect } from "effect"
24
+ * import { gen } from "@typed/fx/Fx"
25
+ * import { succeed } from "@typed/fx/Fx"
26
+ *
27
+ * const greeting = gen(function* () {
28
+ * const name = yield* Effect.succeed("Typed")
29
+ * return succeed(`Hello, ${name}`)
30
+ * })
31
+ * ```
12
32
  *
13
33
  * @param f - The generator function.
14
34
  * @returns An `Fx` representing the result of the generator.
15
35
  * @since 1.0.0
16
- * @category combinators
36
+ * @category Generator composition
17
37
  */
18
- export declare const gen: <Yield extends Effect.Yieldable<any, any, any, any>, Return extends Fx.Any>(f: () => Generator<Yield, Return, any>) => Fx<Fx.Success<Return>, Fx.Error<Return> | _YE<Yield>, Fx.Services<Return> | _YS<Yield>>;
19
- export {};
38
+ export declare const gen: <Yield extends Effect.Effect<any, any, any>, Return extends Fx.Any>(f: () => Generator<Yield, Return, any>) => Fx<Fx.Success<Return>, Fx.Error<Return> | ([Yield] extends [never] ? never : Effect.Error<Yield>), Fx.Services<Return> | ([Yield] extends [never] ? never : Effect.Services<Yield>)>;
20
39
  //# sourceMappingURL=gen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gen.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/gen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAGnC,oDAAoD;AACpD,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC7E,uDAAuD;AACvD,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE7E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,GAAG,GAAI,KAAK,SAAS,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,SAAS,EAAE,CAAC,GAAG,EAC3F,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,KACrC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAC3D,CAAC"}
1
+ {"version":3,"file":"gen.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/gen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAGnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,GAAG,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,SAAS,EAAE,CAAC,GAAG,KAChF,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,KACrC,EAAE,CACH,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAClB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAC1E,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACxD,CAAC"}
@@ -1,14 +1,38 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import { unwrap } from "./unwrap.js";
3
3
  /**
4
- * Creates an Fx using a generator function (Effect.gen style).
4
+ * Builds an Fx by yielding Effects and returning the Fx to run afterward.
5
5
  *
6
- * This allows writing Fx code in a synchronous-looking style, using `yield*` to composition.
7
- * Note: The generator yields Effects, and the result is an Fx.
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * Setup logic often needs Effect services or failures before it can choose a
10
+ * push producer. Generator notation keeps that dependency-aware setup linear
11
+ * while preserving the returned Fx's success, error, and service channels.
12
+ *
13
+ * ## Ownership and lifetime
14
+ *
15
+ * The generator is lazy: it runs for each subscription. Yielded Effects run
16
+ * first; only their returned Fx is then subscribed. A setup failure prevents
17
+ * the Fx from starting, and interruption cancels the active phase. Resources
18
+ * acquired by yielded Effects must not escape unless managed independently;
19
+ * use {@link genScoped} when setup and the returned Fx share a Scope.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * import { Effect } from "effect"
24
+ * import { gen } from "@typed/fx/Fx"
25
+ * import { succeed } from "@typed/fx/Fx"
26
+ *
27
+ * const greeting = gen(function* () {
28
+ * const name = yield* Effect.succeed("Typed")
29
+ * return succeed(`Hello, ${name}`)
30
+ * })
31
+ * ```
8
32
  *
9
33
  * @param f - The generator function.
10
34
  * @returns An `Fx` representing the result of the generator.
11
35
  * @since 1.0.0
12
- * @category combinators
36
+ * @category Generator composition
13
37
  */
14
38
  export const gen = (f) => unwrap(Effect.gen(f));
@@ -1,20 +1,43 @@
1
1
  import * as Effect from "effect/Effect";
2
- import type * as Scope from "effect/Scope";
3
2
  import type { Fx } from "../Fx.js";
4
- /** Extract error type from Yieldable (Effect v4) */
5
- type _YE<Y> = Y extends Effect.Yieldable<any, any, infer E, any> ? E : never;
6
- /** Extract services type from Yieldable (Effect v4) */
7
- type _YS<Y> = Y extends Effect.Yieldable<any, any, any, infer R> ? R : never;
3
+ import { Scope } from "effect";
8
4
  /**
9
- * Creates a scoped Fx using a generator function.
5
+ * Builds an Fx with a subscription-owned Scope shared by setup and streaming.
10
6
  *
11
- * Similar to `gen`, but also handles resource management via Scope.
7
+ * @remarks
8
+ * ## Why
9
+ *
10
+ * Resourceful setup must remain alive while the returned producer runs and be
11
+ * released when that subscription ends. `genScoped` supplies that exact
12
+ * acquisition-to-stream lifetime while removing `Scope` from the public
13
+ * service requirement.
14
+ *
15
+ * ## Ownership and lifetime
16
+ *
17
+ * Every subscription creates one child Scope, runs the generator inside it,
18
+ * then runs the returned Fx in the same Scope. Normal completion, failure,
19
+ * defect, or interruption closes the Scope and its finalizers. Setup failures
20
+ * prevent streaming; all non-Scope errors and services remain in the result.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import { Effect } from "effect"
25
+ * import { genScoped } from "@typed/fx/Fx"
26
+ * import { succeed } from "@typed/fx/Fx"
27
+ *
28
+ * const resourceful = genScoped(function* () {
29
+ * const handle = yield* Effect.acquireRelease(
30
+ * Effect.succeed({ open: true }),
31
+ * () => Effect.void
32
+ * )
33
+ * return succeed(handle.open)
34
+ * })
35
+ * ```
12
36
  *
13
37
  * @param f - The generator function.
14
38
  * @returns An `Fx` representing the result of the generator.
15
39
  * @since 1.0.0
16
- * @category combinators
40
+ * @category Generator composition
17
41
  */
18
- export declare const genScoped: <Yield extends Effect.Yieldable<any, any, any, any>, A, E, R>(f: () => Generator<Yield, Fx<A, E, R>, any>) => Fx<A, E | _YE<Yield>, Exclude<R | _YS<Yield>, Scope.Scope>>;
19
- export {};
42
+ export declare const genScoped: <Yield extends Effect.Effect<any, any, any>, Return extends Fx.Any>(f: () => Generator<Yield, Return, any>) => Fx<Fx.Success<Return>, Fx.Error<Return> | ([Yield] extends [never] ? never : Effect.Error<Yield>), Exclude<Fx.Services<Return> | ([Yield] extends [never] ? never : Effect.Services<Yield>), Scope.Scope>>;
20
43
  //# sourceMappingURL=genScoped.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"genScoped.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/genScoped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAGnC,oDAAoD;AACpD,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC7E,uDAAuD;AACvD,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE7E;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,SAAS,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACnF,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,KAC1C,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CACzB,CAAC"}
1
+ {"version":3,"file":"genScoped.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/genScoped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,SAAS,EAAE,CAAC,GAAG,KACtF,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,KACrC,EAAE,CACH,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAClB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAC1E,OAAO,CACL,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAChF,KAAK,CAAC,KAAK,CACZ,CAC6B,CAAC"}
@@ -1,13 +1,41 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import { unwrapScoped } from "./unwrapScoped.js";
3
3
  /**
4
- * Creates a scoped Fx using a generator function.
4
+ * Builds an Fx with a subscription-owned Scope shared by setup and streaming.
5
5
  *
6
- * Similar to `gen`, but also handles resource management via Scope.
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * Resourceful setup must remain alive while the returned producer runs and be
10
+ * released when that subscription ends. `genScoped` supplies that exact
11
+ * acquisition-to-stream lifetime while removing `Scope` from the public
12
+ * service requirement.
13
+ *
14
+ * ## Ownership and lifetime
15
+ *
16
+ * Every subscription creates one child Scope, runs the generator inside it,
17
+ * then runs the returned Fx in the same Scope. Normal completion, failure,
18
+ * defect, or interruption closes the Scope and its finalizers. Setup failures
19
+ * prevent streaming; all non-Scope errors and services remain in the result.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * import { Effect } from "effect"
24
+ * import { genScoped } from "@typed/fx/Fx"
25
+ * import { succeed } from "@typed/fx/Fx"
26
+ *
27
+ * const resourceful = genScoped(function* () {
28
+ * const handle = yield* Effect.acquireRelease(
29
+ * Effect.succeed({ open: true }),
30
+ * () => Effect.void
31
+ * )
32
+ * return succeed(handle.open)
33
+ * })
34
+ * ```
7
35
  *
8
36
  * @param f - The generator function.
9
37
  * @returns An `Fx` representing the result of the generator.
10
38
  * @since 1.0.0
11
- * @category combinators
39
+ * @category Generator composition
12
40
  */
13
41
  export const genScoped = (f) => unwrapScoped(Effect.gen(f));
@@ -0,0 +1,89 @@
1
+ import type { NonEmptyReadonlyArray } from "effect/Array";
2
+ import * as Cause from "effect/Cause";
3
+ import * as Duration from "effect/Duration";
4
+ import * as Scope from "effect/Scope";
5
+ import type { Fx } from "../Fx.js";
6
+ /**
7
+ * Partitions the stream into non-empty arrays of size `n`. The final array
8
+ * may be smaller if there are leftover elements.
9
+ * The size must be a positive safe integer. A group can retain up to `n`
10
+ * values, so callers own the memory policy for valid sizes. Invalid sizes
11
+ * fail with `Cause.IllegalArgumentError`.
12
+ *
13
+ * Matches Effect `Stream.grouped`.
14
+ *
15
+ * @remarks
16
+ * ## Why
17
+ * `grouped` exposes fixed-size batching without changing source order. Full groups contain exactly
18
+ * `n` values. Because failure is delivered to the Sink while `Fx.run` remains infallible, any
19
+ * partial group is flushed after the source run returns even if a failure was delivered first.
20
+ *
21
+ * ## Ownership and lifetime
22
+ * Each run retains at most `n` values and releases its buffer after the final flush or interruption.
23
+ * Invalid sizes deliver failure before source acquisition. A terminal observer may interrupt before
24
+ * the post-failure flush, but a Sink that handles the Cause can receive the partial group afterward.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import { Cause, Effect, Ref } from "effect"
29
+ * import { Fx, Sink } from "@typed/fx"
30
+ * const program = Effect.gen(function* () {
31
+ * const deliveries = yield* Ref.make<Array<string>>([])
32
+ * const source = Fx.make<number, string>((sink) =>
33
+ * sink.onSuccess(1).pipe(Effect.andThen(sink.onFailure(Cause.fail("boom"))))
34
+ * )
35
+ * yield* Fx.grouped(source, 2).run(Sink.make(
36
+ * () => Ref.update(deliveries, (xs) => [...xs, "failure"]),
37
+ * (group) => Ref.update(deliveries, (xs) => [...xs, `group:${group.join(",")}`])
38
+ * ))
39
+ * return yield* Ref.get(deliveries) // ["failure", "group:1"]
40
+ * })
41
+ * ```
42
+ *
43
+ * @since 1.0.0
44
+ * @category Stateful transforms
45
+ */
46
+ export declare const grouped: {
47
+ (n: number): <A, E, R>(self: Fx<A, E, R>) => Fx<NonEmptyReadonlyArray<A>, E | Cause.IllegalArgumentError, R>;
48
+ <A, E, R>(self: Fx<A, E, R>, n: number): Fx<NonEmptyReadonlyArray<A>, E | Cause.IllegalArgumentError, R>;
49
+ };
50
+ /**
51
+ * Partitions the stream into arrays, emitting when `n` is reached or `duration`
52
+ * elapses after the first element of the current group.
53
+ * The size must be a positive safe integer. A group can retain up to `n`
54
+ * values, so callers own the memory policy for valid sizes. Invalid sizes
55
+ * fail with `Cause.IllegalArgumentError`.
56
+ *
57
+ * Matches Effect `Stream.groupedWithin`.
58
+ *
59
+ * @remarks
60
+ * ## Why
61
+ * `groupedWithin` bounds a batch by both cardinality and time. The timer starts with the first value,
62
+ * and whichever boundary wins emits the ordered non-empty group and resets both buffer and timer.
63
+ * A partial group is also flushed when the source run returns, including after delivered failure.
64
+ *
65
+ * ## Ownership and lifetime
66
+ * Each run retains at most `n` values and at most one timer fiber in the required Scope. A source
67
+ * failure is Sink delivery, so `flushNow` still runs afterward unless the consumer interrupts the
68
+ * run. Flushing or interruption cancels the timer; invalid sizes fail before subscription.
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * import { Cause, Effect } from "effect"
73
+ * import { Fx, Sink } from "@typed/fx"
74
+ * const source = Fx.make<number, string>((sink) =>
75
+ * sink.onSuccess(1).pipe(Effect.andThen(sink.onFailure(Cause.fail("boom"))))
76
+ * )
77
+ * const program = Fx.groupedWithin(source, 2, "1 hour").run(
78
+ * Sink.make(Effect.logError, (group) => Effect.log(group))
79
+ * ) // logs the failure, then flushes [1]
80
+ * ```
81
+ *
82
+ * @since 1.0.0
83
+ * @category Time and rate
84
+ */
85
+ export declare const groupedWithin: {
86
+ (n: number, duration: Duration.Input): <A, E, R>(self: Fx<A, E, R>) => Fx<NonEmptyReadonlyArray<A>, E | Cause.IllegalArgumentError, R | Scope.Scope>;
87
+ <A, E, R>(self: Fx<A, E, R>, n: number, duration: Duration.Input): Fx<NonEmptyReadonlyArray<A>, E | Cause.IllegalArgumentError, R | Scope.Scope>;
88
+ };
89
+ //# sourceMappingURL=grouped.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grouped.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/grouped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAK5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAOnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,OAAO,EAAE;IACpB,CACE,CAAC,EAAE,MAAM,GACR,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACd,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACN,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjB,CAAC,EAAE,MAAM,GACR,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;CA8BpE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,aAAa,EAAE;IAC1B,CACE,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,QAAQ,CAAC,KAAK,GACvB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACd,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACN,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjB,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,QAAQ,CAAC,KAAK,GACvB,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;CA8DlF,CAAC"}
@@ -0,0 +1,146 @@
1
+ import * as Cause from "effect/Cause";
2
+ import * as Context from "effect/Context";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Fiber from "effect/Fiber";
5
+ import { dual } from "effect/Function";
6
+ import * as Ref from "effect/Ref";
7
+ import * as Scope from "effect/Scope";
8
+ import { make as makeSink } from "../../Sink/Sink.js";
9
+ import { fail } from "../constructors/fail.js";
10
+ import { make } from "../constructors/make.js";
11
+ import { extendScope } from "../internal/scope.js";
12
+ const isGroupSize = (n) => Number.isSafeInteger(n) && n > 0;
13
+ const invalidGroupSize = () => new Cause.IllegalArgumentError("Group size must be a positive safe integer");
14
+ /**
15
+ * Partitions the stream into non-empty arrays of size `n`. The final array
16
+ * may be smaller if there are leftover elements.
17
+ * The size must be a positive safe integer. A group can retain up to `n`
18
+ * values, so callers own the memory policy for valid sizes. Invalid sizes
19
+ * fail with `Cause.IllegalArgumentError`.
20
+ *
21
+ * Matches Effect `Stream.grouped`.
22
+ *
23
+ * @remarks
24
+ * ## Why
25
+ * `grouped` exposes fixed-size batching without changing source order. Full groups contain exactly
26
+ * `n` values. Because failure is delivered to the Sink while `Fx.run` remains infallible, any
27
+ * partial group is flushed after the source run returns even if a failure was delivered first.
28
+ *
29
+ * ## Ownership and lifetime
30
+ * Each run retains at most `n` values and releases its buffer after the final flush or interruption.
31
+ * Invalid sizes deliver failure before source acquisition. A terminal observer may interrupt before
32
+ * the post-failure flush, but a Sink that handles the Cause can receive the partial group afterward.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * import { Cause, Effect, Ref } from "effect"
37
+ * import { Fx, Sink } from "@typed/fx"
38
+ * const program = Effect.gen(function* () {
39
+ * const deliveries = yield* Ref.make<Array<string>>([])
40
+ * const source = Fx.make<number, string>((sink) =>
41
+ * sink.onSuccess(1).pipe(Effect.andThen(sink.onFailure(Cause.fail("boom"))))
42
+ * )
43
+ * yield* Fx.grouped(source, 2).run(Sink.make(
44
+ * () => Ref.update(deliveries, (xs) => [...xs, "failure"]),
45
+ * (group) => Ref.update(deliveries, (xs) => [...xs, `group:${group.join(",")}`])
46
+ * ))
47
+ * return yield* Ref.get(deliveries) // ["failure", "group:1"]
48
+ * })
49
+ * ```
50
+ *
51
+ * @since 1.0.0
52
+ * @category Stateful transforms
53
+ */
54
+ export const grouped = dual(2, (self, n) => {
55
+ if (!isGroupSize(n)) {
56
+ return fail(invalidGroupSize());
57
+ }
58
+ const size = n;
59
+ return make((sink) => Effect.gen(function* () {
60
+ const buffer = [];
61
+ yield* self.run(makeSink(sink.onFailure, (a) => {
62
+ buffer.push(a);
63
+ if (buffer.length >= size) {
64
+ const group = buffer.splice(0, size);
65
+ return sink.onSuccess(group);
66
+ }
67
+ return Effect.void;
68
+ }));
69
+ if (buffer.length > 0) {
70
+ yield* sink.onSuccess(buffer);
71
+ }
72
+ }));
73
+ });
74
+ /**
75
+ * Partitions the stream into arrays, emitting when `n` is reached or `duration`
76
+ * elapses after the first element of the current group.
77
+ * The size must be a positive safe integer. A group can retain up to `n`
78
+ * values, so callers own the memory policy for valid sizes. Invalid sizes
79
+ * fail with `Cause.IllegalArgumentError`.
80
+ *
81
+ * Matches Effect `Stream.groupedWithin`.
82
+ *
83
+ * @remarks
84
+ * ## Why
85
+ * `groupedWithin` bounds a batch by both cardinality and time. The timer starts with the first value,
86
+ * and whichever boundary wins emits the ordered non-empty group and resets both buffer and timer.
87
+ * A partial group is also flushed when the source run returns, including after delivered failure.
88
+ *
89
+ * ## Ownership and lifetime
90
+ * Each run retains at most `n` values and at most one timer fiber in the required Scope. A source
91
+ * failure is Sink delivery, so `flushNow` still runs afterward unless the consumer interrupts the
92
+ * run. Flushing or interruption cancels the timer; invalid sizes fail before subscription.
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * import { Cause, Effect } from "effect"
97
+ * import { Fx, Sink } from "@typed/fx"
98
+ * const source = Fx.make<number, string>((sink) =>
99
+ * sink.onSuccess(1).pipe(Effect.andThen(sink.onFailure(Cause.fail("boom"))))
100
+ * )
101
+ * const program = Fx.groupedWithin(source, 2, "1 hour").run(
102
+ * Sink.make(Effect.logError, (group) => Effect.log(group))
103
+ * ) // logs the failure, then flushes [1]
104
+ * ```
105
+ *
106
+ * @since 1.0.0
107
+ * @category Time and rate
108
+ */
109
+ export const groupedWithin = dual(3, (self, n, duration) => {
110
+ if (!isGroupSize(n)) {
111
+ return fail(invalidGroupSize());
112
+ }
113
+ const size = n;
114
+ return make(Effect.fn(function* (sink) {
115
+ const ctx = yield* Effect.context();
116
+ const scope = Context.get(ctx, Scope.Scope);
117
+ const buffer = yield* Ref.make([]);
118
+ const timer = yield* Ref.make(null);
119
+ const clearTimer = Effect.flatMap(Ref.getAndSet(timer, null), (fiber) => fiber ? Fiber.interrupt(fiber) : Effect.void);
120
+ const emitBuffer = Effect.gen(function* () {
121
+ const group = yield* Ref.getAndSet(buffer, []);
122
+ if (group.length > 0) {
123
+ yield* sink.onSuccess(group);
124
+ }
125
+ });
126
+ const flushNow = clearTimer.pipe(Effect.andThen(emitBuffer));
127
+ const flushFromTimer = Ref.set(timer, null).pipe(Effect.andThen(emitBuffer));
128
+ const arm = Effect.flatMap(Effect.forkIn(Effect.sleep(duration).pipe(Effect.andThen(flushFromTimer)), scope, {
129
+ startImmediately: true,
130
+ uninterruptible: false,
131
+ }), (fiber) => Ref.set(timer, fiber));
132
+ yield* self.run(makeSink(sink.onFailure, (a) => Effect.gen(function* () {
133
+ const nextLength = yield* Ref.modify(buffer, (current) => {
134
+ current.push(a);
135
+ return [current.length, current];
136
+ });
137
+ if (nextLength === 1) {
138
+ yield* arm;
139
+ }
140
+ if (nextLength >= size) {
141
+ yield* flushNow;
142
+ }
143
+ })));
144
+ yield* flushNow;
145
+ }, extendScope));
146
+ });
@@ -1,7 +1,33 @@
1
+ /**
2
+ * Re-exports the complete public Fx combinator vocabulary.
3
+ *
4
+ * @remarks
5
+ * Importing this module performs no work. Each operation remains lazy until its returned `Fx` is
6
+ * run, and its leaf declaration documents cardinality, ordering, state, failure, services, and
7
+ * interruption semantics.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import { Fx } from "@typed/fx"
12
+ * import { map, take } from "@typed/fx/Fx"
13
+ *
14
+ * const firstLabel = Fx.fromIterable([1, 2]).pipe(map(String), take(1))
15
+ * ```
16
+ *
17
+ * @since 1.0.0
18
+ * @category combinators
19
+ */
1
20
  export * from "./catch.js";
21
+ export * from "./changesWithEffect.js";
2
22
  export * from "./causes.js";
3
23
  export * from "./compact.js";
24
+ export * from "./concatMap.js";
4
25
  export * from "./continueWith.js";
26
+ export * from "./dropUntil.js";
27
+ export * from "./debounce.js";
28
+ export * from "./delay.js";
29
+ export * from "./during.js";
30
+ export * from "./additive.js";
5
31
  export * from "./ensuring.js";
6
32
  export * from "./exhaustLatestMap.js";
7
33
  export * from "./exhaustLatestMapEffect.js";
@@ -23,30 +49,49 @@ export * from "./flatMapEffect.js";
23
49
  export * from "./flip.js";
24
50
  export * from "./gen.js";
25
51
  export * from "./genScoped.js";
52
+ export * from "./grouped.js";
26
53
  export * from "./keyed.js";
27
54
  export * from "./loop.js";
28
55
  export * from "./loopCause.js";
29
56
  export * from "./loopCauseEffect.js";
30
57
  export * from "./loopEffect.js";
31
58
  export * from "./map.js";
59
+ export * from "./mapBoth.js";
32
60
  export * from "./mapEffect.js";
61
+ export * from "./mapError.js";
33
62
  export * from "./mergeAll.js";
34
63
  export * from "./mergeOrdered.js";
35
64
  export * from "./onError.js";
36
65
  export * from "./onExit.js";
37
66
  export * from "./onInterrupt.js";
67
+ export * from "./pairwise.js";
38
68
  export * from "./provide.js";
69
+ export * from "./race.js";
70
+ export * from "./repeat.js";
71
+ export * from "./result.js";
72
+ export * from "./retry.js";
73
+ export * from "./sample.js";
74
+ export * from "./scan.js";
39
75
  export * from "./skip.js";
40
76
  export * from "./skipRepeats.js";
77
+ export * from "./skipWhile.js";
41
78
  export * from "./skipRepeatsWith.js";
42
79
  export * from "./slice.js";
80
+ export * from "./since.js";
43
81
  export * from "./switchMap.js";
44
82
  export * from "./switchMapEffect.js";
45
83
  export * from "./take.js";
46
84
  export * from "./takeUntil.js";
85
+ export * from "./takeWhile.js";
47
86
  export * from "./tapEffect.js";
87
+ export * from "./throttle.js";
88
+ export * from "./timeout.js";
48
89
  export * from "./tuple.js";
90
+ export * from "./until.js";
49
91
  export * from "./unwrap.js";
50
92
  export * from "./unwrapScoped.js";
51
93
  export * from "./when.js";
94
+ export * from "./withLatestFrom.js";
95
+ export * from "./withSpan.js";
96
+ export * from "./zip.js";
52
97
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}