@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
@@ -0,0 +1,65 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { dual } from "effect/Function";
3
+ import { skipWhile, skipWhileEffect } from "./skipWhile.js";
4
+ /**
5
+ * Drops elements from an Fx until a predicate returns true.
6
+ * Emits from the first element for which the predicate returns true (including that element) and all following elements.
7
+ *
8
+ * @remarks
9
+ * ## Why
10
+ * `dropUntil` opens a one-way gate at the first matching value. The match and every later value emit
11
+ * once in source order; after opening, the predicate is no longer consulted.
12
+ *
13
+ * ## Ownership and lifetime
14
+ * The gate is local to one run and discarded on completion or interruption. No resources are
15
+ * acquired and the source's errors and services pass through unchanged.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import { Fx } from "@typed/fx"
20
+ *
21
+ * const ready = Fx.fromIterable([1, 2, 3]).pipe(Fx.dropUntil((n) => n >= 2))
22
+ * ```
23
+ *
24
+ * @param predicate - The predicate function.
25
+ * @returns An `Fx` that emits once the predicate first matches.
26
+ * @since 1.0.0
27
+ * @category Selecting values
28
+ */
29
+ export const dropUntil = dual(2, (fx, predicate) => skipWhile(fx, (a) => !predicate(a)));
30
+ /**
31
+ * Drops elements from an Fx until an effectful predicate returns true.
32
+ * Emits from the first element for which the predicate effect succeeds with true (including that element) and all following elements.
33
+ *
34
+ * @remarks
35
+ * ## Why
36
+ * `dropUntilEffect` makes the gate decision Effectful. The first `true` opens the gate and is
37
+ * forwarded, but its `skipWhileEffect` implementation eagerly evaluates the predicate for every
38
+ * later value as well; those later boolean results no longer affect forwarding.
39
+ *
40
+ * ## Ownership and lifetime
41
+ * The gate is per run. Predicate effects inherit producer ordering and concurrency, are interrupted
42
+ * with their invoking delivery, and expose `E2`/`R2`. Failures remain observable after the gate opens.
43
+ *
44
+ * @example
45
+ * ```ts
46
+ * import { Effect, Ref } from "effect"
47
+ * import { Fx } from "@typed/fx"
48
+ *
49
+ * const program = Effect.gen(function* () {
50
+ * const checks = yield* Ref.make(0)
51
+ * const values = yield* Fx.collectAll(
52
+ * Fx.fromIterable([2, 3]).pipe(
53
+ * Fx.dropUntilEffect((n) => Ref.update(checks, (count) => count + 1).pipe(Effect.as(n === 2)))
54
+ * )
55
+ * )
56
+ * return { values, checks: yield* Ref.get(checks) } // { values: [2, 3], checks: 2 }
57
+ * })
58
+ * ```
59
+ *
60
+ * @param predicate - Effectful predicate function.
61
+ * @returns An `Fx` that emits once the predicate first matches.
62
+ * @since 1.0.0
63
+ * @category Selecting values
64
+ */
65
+ export const dropUntilEffect = dual(2, (fx, predicate) => skipWhileEffect(fx, (a) => Effect.map(predicate(a), (b) => !b)));
@@ -0,0 +1,38 @@
1
+ import * as Scope from "effect/Scope";
2
+ import type { Fx } from "../Fx.js";
3
+ /**
4
+ * Forwards `events` only between a start signal and that signal's first stop event.
5
+ *
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * Push lifetimes are often controlled by other push lifetimes: a pointer move
10
+ * matters between pointer-down and pointer-up, for example. `during` models
11
+ * that gate without converting either side into polling state.
12
+ *
13
+ * ## Ownership and lifetime
14
+ *
15
+ * `events` and the outer `signals` Fx start concurrently in one child Scope.
16
+ * Only the first outer value is used; that value must itself be an Fx, whose
17
+ * first value closes the gate. Event values before the start signal and after
18
+ * the stop signal are discarded. Completion of `events` completes the result.
19
+ * A failure from events, signals, or the selected stop Fx terminates everything;
20
+ * closing or interrupting the returned Fx interrupts all remaining fibers and
21
+ * closes the private Scope.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * import { during } from "@typed/fx/Fx"
26
+ * import { delay } from "@typed/fx/Fx"
27
+ * import { periodic, succeed } from "@typed/fx/Fx"
28
+ *
29
+ * const pointerMoves = periodic("16 millis")
30
+ * const pointerDown = succeed(delay(succeed(undefined), "1 second"))
31
+ * const activeMoves = during(pointerMoves, pointerDown)
32
+ * ```
33
+ *
34
+ * @since 1.0.0
35
+ * @category Time and rate
36
+ */
37
+ export declare function during<A, E, R, Start extends Fx.Any, E2, R2>(events: Fx<A, E, R>, signals: Fx<Start, E2, R2>): Fx<A, E | E2 | Fx.Error<Start>, R | R2 | Fx.Services<Start> | Scope.Scope>;
38
+ //# sourceMappingURL=during.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"during.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/during.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAKnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAC1D,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACnB,OAAO,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,GACzB,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAoF5E"}
@@ -0,0 +1,85 @@
1
+ import * as Cause from "effect/Cause";
2
+ import * as Deferred from "effect/Deferred";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Exit from "effect/Exit";
5
+ import * as Fiber from "effect/Fiber";
6
+ import * as Scope from "effect/Scope";
7
+ import { make as makeSink } from "../../Sink/Sink.js";
8
+ import { make } from "../constructors/make.js";
9
+ import { take } from "./take.js";
10
+ /**
11
+ * Forwards `events` only between a start signal and that signal's first stop event.
12
+ *
13
+ * @remarks
14
+ * ## Why
15
+ *
16
+ * Push lifetimes are often controlled by other push lifetimes: a pointer move
17
+ * matters between pointer-down and pointer-up, for example. `during` models
18
+ * that gate without converting either side into polling state.
19
+ *
20
+ * ## Ownership and lifetime
21
+ *
22
+ * `events` and the outer `signals` Fx start concurrently in one child Scope.
23
+ * Only the first outer value is used; that value must itself be an Fx, whose
24
+ * first value closes the gate. Event values before the start signal and after
25
+ * the stop signal are discarded. Completion of `events` completes the result.
26
+ * A failure from events, signals, or the selected stop Fx terminates everything;
27
+ * closing or interrupting the returned Fx interrupts all remaining fibers and
28
+ * closes the private Scope.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * import { during } from "@typed/fx/Fx"
33
+ * import { delay } from "@typed/fx/Fx"
34
+ * import { periodic, succeed } from "@typed/fx/Fx"
35
+ *
36
+ * const pointerMoves = periodic("16 millis")
37
+ * const pointerDown = succeed(delay(succeed(undefined), "1 second"))
38
+ * const activeMoves = during(pointerMoves, pointerDown)
39
+ * ```
40
+ *
41
+ * @since 1.0.0
42
+ * @category Time and rate
43
+ */
44
+ export function during(events, signals) {
45
+ return make(Effect.fn(function* (sink) {
46
+ const scope = yield* Scope.make();
47
+ yield* Effect.gen(function* () {
48
+ const eventsGate = yield* Deferred.make();
49
+ let phase = "waiting";
50
+ let stoppedEvents = false;
51
+ const eventsFiber = yield* Effect.forkIn(Deferred.await(eventsGate).pipe(Effect.andThen(events.run(makeSink((cause) => Effect.suspend(() => {
52
+ if (phase === "stopped")
53
+ return Effect.void;
54
+ phase = "stopped";
55
+ return sink.onFailure(cause);
56
+ }), (value) => Effect.suspend(() => phase === "active" ? sink.onSuccess(value) : Effect.void))))), scope, { startImmediately: true, uninterruptible: false });
57
+ const stopEvents = Effect.uninterruptible(Effect.suspend(() => {
58
+ if (phase !== "active")
59
+ return Effect.void;
60
+ phase = "stopped";
61
+ stoppedEvents = true;
62
+ return Fiber.interrupt(eventsFiber);
63
+ }));
64
+ const failAndStopEvents = (cause) => Effect.uninterruptible(Effect.suspend(() => {
65
+ if (phase === "stopped")
66
+ return Effect.void;
67
+ phase = "stopped";
68
+ stoppedEvents = true;
69
+ return sink.onFailure(cause).pipe(Effect.andThen(Fiber.interrupt(eventsFiber)));
70
+ }));
71
+ yield* Effect.forkIn(take(signals, 1).run(makeSink(failAndStopEvents, (stopSignal) => Effect.suspend(() => {
72
+ if (phase !== "waiting")
73
+ return Effect.void;
74
+ phase = "active";
75
+ return Effect.asVoid(Effect.forkIn(take(stopSignal, 1).run(makeSink(failAndStopEvents, () => stopEvents)), scope, { startImmediately: true, uninterruptible: false }));
76
+ }))), scope, { startImmediately: true, uninterruptible: false });
77
+ yield* Deferred.succeed(eventsGate, undefined);
78
+ const eventsExit = yield* Fiber.await(eventsFiber);
79
+ if (Exit.isFailure(eventsExit) &&
80
+ !(stoppedEvents && Cause.hasInterruptsOnly(eventsExit.cause))) {
81
+ return yield* Effect.failCause(eventsExit.cause);
82
+ }
83
+ }).pipe(Effect.onExit((exit) => Scope.close(scope, exit)));
84
+ }));
85
+ }
@@ -1,13 +1,43 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import type { Fx } from "../Fx.js";
3
3
  /**
4
- * Adds an `Effect.ensuring`-style finalizer to an `Fx`.
4
+ * Runs a finalizer with no typed error after the Fx run ends for any reason.
5
5
  *
6
- * The finalizer is guaranteed to run when the stream terminates (success,
7
- * failure, or interruption).
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * Resources sometimes belong to the subscription as a whole rather than to
10
+ * individual values. `ensuring` attaches unconditional teardown without
11
+ * changing the source's success or typed-error channels.
12
+ *
13
+ * ## Ownership and lifetime
14
+ *
15
+ * The finalizer runs exactly once after normal completion, failure, defect, or
16
+ * interruption of the source run and follows Effect's `ensuring` finalization
17
+ * semantics. Its `never` typed-error channel does not make it incapable of
18
+ * defecting or being interrupted: a finalizer defect can fail a successful run
19
+ * or combine with the source Cause. Its services are required for the subscription.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * import { Effect } from "effect"
24
+ * import { ensuring } from "@typed/fx/Fx"
25
+ * import { succeed } from "@typed/fx/Fx"
26
+ *
27
+ * const observed = ensuring(succeed("ready"), Effect.log("subscription closed"))
28
+ * ```
29
+ *
30
+ * @example A `never` typed-error channel can still contain a defect
31
+ * ```ts
32
+ * import { Effect } from "effect"
33
+ * import { ensuring } from "@typed/fx/Fx"
34
+ * import { succeed } from "@typed/fx/Fx"
35
+ *
36
+ * const defectiveFinalizer = ensuring(succeed("ready"), Effect.die("close failed"))
37
+ * ```
8
38
  *
9
39
  * @since 1.0.0
10
- * @category combinators
40
+ * @category Resource lifetime
11
41
  */
12
42
  export declare const ensuring: {
13
43
  <R2>(finalizer: Effect.Effect<void, never, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A, E, R | R2>;
@@ -1 +1 @@
1
- {"version":3,"file":"ensuring.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/ensuring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,EAAE;IACrB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAElG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAK/F,CAAC"}
1
+ {"version":3,"file":"ensuring.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/ensuring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,eAAO,MAAM,QAAQ,EAAE;IACrB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAElG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAK/F,CAAC"}
@@ -2,12 +2,42 @@ import * as Effect from "effect/Effect";
2
2
  import { dual } from "effect/Function";
3
3
  import { make } from "../constructors/make.js";
4
4
  /**
5
- * Adds an `Effect.ensuring`-style finalizer to an `Fx`.
5
+ * Runs a finalizer with no typed error after the Fx run ends for any reason.
6
6
  *
7
- * The finalizer is guaranteed to run when the stream terminates (success,
8
- * failure, or interruption).
7
+ * @remarks
8
+ * ## Why
9
+ *
10
+ * Resources sometimes belong to the subscription as a whole rather than to
11
+ * individual values. `ensuring` attaches unconditional teardown without
12
+ * changing the source's success or typed-error channels.
13
+ *
14
+ * ## Ownership and lifetime
15
+ *
16
+ * The finalizer runs exactly once after normal completion, failure, defect, or
17
+ * interruption of the source run and follows Effect's `ensuring` finalization
18
+ * semantics. Its `never` typed-error channel does not make it incapable of
19
+ * defecting or being interrupted: a finalizer defect can fail a successful run
20
+ * or combine with the source Cause. Its services are required for the subscription.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import { Effect } from "effect"
25
+ * import { ensuring } from "@typed/fx/Fx"
26
+ * import { succeed } from "@typed/fx/Fx"
27
+ *
28
+ * const observed = ensuring(succeed("ready"), Effect.log("subscription closed"))
29
+ * ```
30
+ *
31
+ * @example A `never` typed-error channel can still contain a defect
32
+ * ```ts
33
+ * import { Effect } from "effect"
34
+ * import { ensuring } from "@typed/fx/Fx"
35
+ * import { succeed } from "@typed/fx/Fx"
36
+ *
37
+ * const defectiveFinalizer = ensuring(succeed("ready"), Effect.die("close failed"))
38
+ * ```
9
39
  *
10
40
  * @since 1.0.0
11
- * @category combinators
41
+ * @category Resource lifetime
12
42
  */
13
43
  export const ensuring = dual(2, (self, finalizer) => make((sink) => self.run(sink).pipe(Effect.ensuring(finalizer))));
@@ -1,15 +1,51 @@
1
1
  import type { FlatMapLike } from "./flatMap.js";
2
2
  /**
3
- * Maps each element of an Fx to a new Fx, but only runs one inner Fx at a time.
4
- * If a new element arrives while an inner Fx is running, the new element is buffered (overwriting any previously buffered value).
5
- * When the current inner Fx completes, the latest buffered Fx is run.
3
+ * Maps each element to an inner Fx, running one now and retaining only the latest waiting value.
6
4
  *
7
- * This is useful for scenarios where you want to ignore intermediate values but ensure the latest value is eventually processed.
5
+ * @remarks
6
+ * ## Why
7
+ *
8
+ * `exhaustLatestMap` fits work that cannot overlap but must eventually reflect
9
+ * the newest request. Unlike {@link exhaustMap}, it remembers one pending value;
10
+ * unlike {@link concatMap}, it does not let a backlog grow.
11
+ *
12
+ * ## Admission, buffering, and cardinality
13
+ *
14
+ * The first value while idle starts immediately. While that inner runs, each new
15
+ * value replaces the single pending inner Effect; replaced values never run.
16
+ * When the active inner completes, the latest pending inner starts. An admitted
17
+ * inner may emit any number of values, in that inner's order.
18
+ *
19
+ * ## Ownership and lifetime
20
+ *
21
+ * Source and admitted-inner failures are forwarded and both environments remain
22
+ * typed. The required `Scope` owns every active inner fiber. Source completion
23
+ * waits until the active and final pending inner finish; interruption closes the
24
+ * Scope and runs inner finalizers. The one-slot pending buffer retains work, not
25
+ * emitted output.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * import { Fx } from "@typed/fx"
30
+ * import { Effect } from "effect"
31
+ *
32
+ * const refreshes = Fx.mergeAll(
33
+ * Fx.at("v1", "0 millis"),
34
+ * Fx.at("v2", "5 millis"),
35
+ * Fx.at("v3", "10 millis")
36
+ * )
37
+ * const latestEventually = Fx.exhaustLatestMap(refreshes, (version) =>
38
+ * Fx.at(`indexed:${version}`, "20 millis")
39
+ * )
40
+ *
41
+ * Effect.runPromise(Effect.scoped(Fx.collectAll(latestEventually))).then(console.log)
42
+ * // ["indexed:v1", "indexed:v3"]
43
+ * ```
8
44
  *
9
45
  * @param f - A function that maps an element `A` to a new `Fx<B>`.
10
46
  * @returns An `Fx` that emits values from the inner streams.
11
47
  * @since 1.0.0
12
- * @category combinators
48
+ * @category Concurrent work
13
49
  */
14
50
  export declare const exhaustLatestMap: FlatMapLike;
15
51
  //# sourceMappingURL=exhaustLatestMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exhaustLatestMap.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/exhaustLatestMap.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAmD9B,CAAC"}
1
+ {"version":3,"file":"exhaustLatestMap.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/exhaustLatestMap.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAmD9B,CAAC"}
@@ -5,16 +5,52 @@ import { make as makeSink } from "../../Sink/Sink.js";
5
5
  import { make } from "../constructors/make.js";
6
6
  import { extendScope } from "../internal/scope.js";
7
7
  /**
8
- * Maps each element of an Fx to a new Fx, but only runs one inner Fx at a time.
9
- * If a new element arrives while an inner Fx is running, the new element is buffered (overwriting any previously buffered value).
10
- * When the current inner Fx completes, the latest buffered Fx is run.
8
+ * Maps each element to an inner Fx, running one now and retaining only the latest waiting value.
11
9
  *
12
- * This is useful for scenarios where you want to ignore intermediate values but ensure the latest value is eventually processed.
10
+ * @remarks
11
+ * ## Why
12
+ *
13
+ * `exhaustLatestMap` fits work that cannot overlap but must eventually reflect
14
+ * the newest request. Unlike {@link exhaustMap}, it remembers one pending value;
15
+ * unlike {@link concatMap}, it does not let a backlog grow.
16
+ *
17
+ * ## Admission, buffering, and cardinality
18
+ *
19
+ * The first value while idle starts immediately. While that inner runs, each new
20
+ * value replaces the single pending inner Effect; replaced values never run.
21
+ * When the active inner completes, the latest pending inner starts. An admitted
22
+ * inner may emit any number of values, in that inner's order.
23
+ *
24
+ * ## Ownership and lifetime
25
+ *
26
+ * Source and admitted-inner failures are forwarded and both environments remain
27
+ * typed. The required `Scope` owns every active inner fiber. Source completion
28
+ * waits until the active and final pending inner finish; interruption closes the
29
+ * Scope and runs inner finalizers. The one-slot pending buffer retains work, not
30
+ * emitted output.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * import { Fx } from "@typed/fx"
35
+ * import { Effect } from "effect"
36
+ *
37
+ * const refreshes = Fx.mergeAll(
38
+ * Fx.at("v1", "0 millis"),
39
+ * Fx.at("v2", "5 millis"),
40
+ * Fx.at("v3", "10 millis")
41
+ * )
42
+ * const latestEventually = Fx.exhaustLatestMap(refreshes, (version) =>
43
+ * Fx.at(`indexed:${version}`, "20 millis")
44
+ * )
45
+ *
46
+ * Effect.runPromise(Effect.scoped(Fx.collectAll(latestEventually))).then(console.log)
47
+ * // ["indexed:v1", "indexed:v3"]
48
+ * ```
13
49
  *
14
50
  * @param f - A function that maps an element `A` to a new `Fx<B>`.
15
51
  * @returns An `Fx` that emits values from the inner streams.
16
52
  * @since 1.0.0
17
- * @category combinators
53
+ * @category Concurrent work
18
54
  */
19
55
  export const exhaustLatestMap = dual(2, (self, f) => {
20
56
  return make(Effect.fn(function* (sink) {
@@ -1,13 +1,49 @@
1
1
  import type { FlatMapEffectLike } from "./flatMapEffect.js";
2
2
  /**
3
- * Maps each element of an Fx to an Effect, but only runs one effect at a time.
4
- * If a new element arrives while an effect is running, the new element is buffered (overwriting any previously buffered value).
5
- * When the current effect completes, the latest buffered effect is run.
3
+ * Maps each element to an Effect, running one now and retaining only the latest waiting value.
4
+ *
5
+ * @remarks
6
+ * ## Why
7
+ *
8
+ * This is the Effect-producing form of {@link exhaustLatestMap}: it serializes
9
+ * Effects while bounding pending work to one replaceable latest request.
10
+ *
11
+ * ## Admission, buffering, and cardinality
12
+ *
13
+ * The first value while idle starts one Effect. While it runs, each callback is
14
+ * evaluated and the constructed Effect replaces the single pending Effect. Each
15
+ * admitted Effect emits exactly one successful result; superseded pending
16
+ * Effects never run and emit nothing.
17
+ *
18
+ * ## Ownership and lifetime
19
+ *
20
+ * Source and admitted Effect failures remain typed, as do callback service
21
+ * requirements. The required `Scope` owns the active Effect; source completion
22
+ * drains the final pending value, while interruption discards pending work and
23
+ * runs active finalizers.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * import { Fx } from "@typed/fx"
28
+ * import { Effect } from "effect"
29
+ *
30
+ * const refreshes = Fx.mergeAll(
31
+ * Fx.at("v1", "0 millis"),
32
+ * Fx.at("v2", "5 millis"),
33
+ * Fx.at("v3", "10 millis")
34
+ * )
35
+ * const indexed = Fx.exhaustLatestMapEffect(refreshes, (version) =>
36
+ * Effect.as(Effect.sleep("20 millis"), `indexed:${version}`)
37
+ * )
38
+ *
39
+ * Effect.runPromise(Effect.scoped(Fx.collectAll(indexed))).then(console.log)
40
+ * // ["indexed:v1", "indexed:v3"]
41
+ * ```
6
42
  *
7
43
  * @param f - A function that maps an element `A` to an `Effect<B>`.
8
44
  * @returns An `Fx` that emits the results of the effects.
9
45
  * @since 1.0.0
10
- * @category combinators
46
+ * @category Concurrent work
11
47
  */
12
48
  export declare const exhaustLatestMapEffect: FlatMapEffectLike;
13
49
  //# sourceMappingURL=exhaustLatestMapEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exhaustLatestMapEffect.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/exhaustLatestMapEffect.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,iBAMpC,CAAC"}
1
+ {"version":3,"file":"exhaustLatestMapEffect.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/exhaustLatestMapEffect.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,eAAO,MAAM,sBAAsB,EAAE,iBAMpC,CAAC"}
@@ -2,13 +2,49 @@ import { dual, flow } from "effect/Function";
2
2
  import { fromEffect } from "../constructors/fromEffect.js";
3
3
  import { exhaustLatestMap } from "./exhaustLatestMap.js";
4
4
  /**
5
- * Maps each element of an Fx to an Effect, but only runs one effect at a time.
6
- * If a new element arrives while an effect is running, the new element is buffered (overwriting any previously buffered value).
7
- * When the current effect completes, the latest buffered effect is run.
5
+ * Maps each element to an Effect, running one now and retaining only the latest waiting value.
6
+ *
7
+ * @remarks
8
+ * ## Why
9
+ *
10
+ * This is the Effect-producing form of {@link exhaustLatestMap}: it serializes
11
+ * Effects while bounding pending work to one replaceable latest request.
12
+ *
13
+ * ## Admission, buffering, and cardinality
14
+ *
15
+ * The first value while idle starts one Effect. While it runs, each callback is
16
+ * evaluated and the constructed Effect replaces the single pending Effect. Each
17
+ * admitted Effect emits exactly one successful result; superseded pending
18
+ * Effects never run and emit nothing.
19
+ *
20
+ * ## Ownership and lifetime
21
+ *
22
+ * Source and admitted Effect failures remain typed, as do callback service
23
+ * requirements. The required `Scope` owns the active Effect; source completion
24
+ * drains the final pending value, while interruption discards pending work and
25
+ * runs active finalizers.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * import { Fx } from "@typed/fx"
30
+ * import { Effect } from "effect"
31
+ *
32
+ * const refreshes = Fx.mergeAll(
33
+ * Fx.at("v1", "0 millis"),
34
+ * Fx.at("v2", "5 millis"),
35
+ * Fx.at("v3", "10 millis")
36
+ * )
37
+ * const indexed = Fx.exhaustLatestMapEffect(refreshes, (version) =>
38
+ * Effect.as(Effect.sleep("20 millis"), `indexed:${version}`)
39
+ * )
40
+ *
41
+ * Effect.runPromise(Effect.scoped(Fx.collectAll(indexed))).then(console.log)
42
+ * // ["indexed:v1", "indexed:v3"]
43
+ * ```
8
44
  *
9
45
  * @param f - A function that maps an element `A` to an `Effect<B>`.
10
46
  * @returns An `Fx` that emits the results of the effects.
11
47
  * @since 1.0.0
12
- * @category combinators
48
+ * @category Concurrent work
13
49
  */
14
50
  export const exhaustLatestMapEffect = dual(2, (self, f) => exhaustLatestMap(self, flow(f, fromEffect)));
@@ -2,10 +2,47 @@ import type { FlatMapLike } from "./flatMap.js";
2
2
  /**
3
3
  * Maps each element of an Fx to a new Fx, ignoring new elements until the current inner Fx completes.
4
4
  *
5
+ * @remarks
6
+ * ## Why
7
+ *
8
+ * `exhaustMap` is an admission policy for work that must never overlap and does
9
+ * not need a backlog, such as ignoring repeated submit events while one submit
10
+ * is running.
11
+ *
12
+ * ## Admission, ordering, and cardinality
13
+ *
14
+ * The first source value observed while idle admits one inner Fx. For values
15
+ * arriving while it runs, `f` is still evaluated to construct an inner, but that
16
+ * inner is not run and no value is queued. Every admitted inner may emit any
17
+ * number of values in its own order.
18
+ *
19
+ * ## Ownership and lifetime
20
+ *
21
+ * Source and admitted-inner failures are forwarded and their services remain
22
+ * typed. A `FiberHandle` in the required `Scope` owns the active inner. Source
23
+ * completion waits for that inner; interruption closes the handle and the
24
+ * inner's child Scope, running its finalizers.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import { Fx } from "@typed/fx"
29
+ * import { Effect } from "effect"
30
+ *
31
+ * const submits = Fx.mergeAll(
32
+ * Fx.at("first", "0 millis"),
33
+ * Fx.at("ignored while busy", "5 millis"),
34
+ * Fx.at("later", "30 millis")
35
+ * )
36
+ * const accepted = Fx.exhaustMap(submits, (command) => Fx.at(command, "20 millis"))
37
+ *
38
+ * Effect.runPromise(Effect.scoped(Fx.collectAll(accepted))).then(console.log)
39
+ * // ["first", "later"]
40
+ * ```
41
+ *
5
42
  * @param f - A function that maps an element `A` to a new `Fx<B>`.
6
43
  * @returns An `Fx` that emits values from the active inner stream.
7
44
  * @since 1.0.0
8
- * @category combinators
45
+ * @category Concurrent work
9
46
  */
10
47
  export declare const exhaustMap: FlatMapLike;
11
48
  //# sourceMappingURL=exhaustMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exhaustMap.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/exhaustMap.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,EAAE,WAiBxB,CAAC"}
1
+ {"version":3,"file":"exhaustMap.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/exhaustMap.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,eAAO,MAAM,UAAU,EAAE,WAiBxB,CAAC"}
@@ -7,10 +7,47 @@ import { extendScope } from "../internal/scope.js";
7
7
  /**
8
8
  * Maps each element of an Fx to a new Fx, ignoring new elements until the current inner Fx completes.
9
9
  *
10
+ * @remarks
11
+ * ## Why
12
+ *
13
+ * `exhaustMap` is an admission policy for work that must never overlap and does
14
+ * not need a backlog, such as ignoring repeated submit events while one submit
15
+ * is running.
16
+ *
17
+ * ## Admission, ordering, and cardinality
18
+ *
19
+ * The first source value observed while idle admits one inner Fx. For values
20
+ * arriving while it runs, `f` is still evaluated to construct an inner, but that
21
+ * inner is not run and no value is queued. Every admitted inner may emit any
22
+ * number of values in its own order.
23
+ *
24
+ * ## Ownership and lifetime
25
+ *
26
+ * Source and admitted-inner failures are forwarded and their services remain
27
+ * typed. A `FiberHandle` in the required `Scope` owns the active inner. Source
28
+ * completion waits for that inner; interruption closes the handle and the
29
+ * inner's child Scope, running its finalizers.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import { Fx } from "@typed/fx"
34
+ * import { Effect } from "effect"
35
+ *
36
+ * const submits = Fx.mergeAll(
37
+ * Fx.at("first", "0 millis"),
38
+ * Fx.at("ignored while busy", "5 millis"),
39
+ * Fx.at("later", "30 millis")
40
+ * )
41
+ * const accepted = Fx.exhaustMap(submits, (command) => Fx.at(command, "20 millis"))
42
+ *
43
+ * Effect.runPromise(Effect.scoped(Fx.collectAll(accepted))).then(console.log)
44
+ * // ["first", "later"]
45
+ * ```
46
+ *
10
47
  * @param f - A function that maps an element `A` to a new `Fx<B>`.
11
48
  * @returns An `Fx` that emits values from the active inner stream.
12
49
  * @since 1.0.0
13
- * @category combinators
50
+ * @category Concurrent work
14
51
  */
15
52
  export const exhaustMap = dual(2, (self, f) => make(Effect.fn(function* (sink) {
16
53
  const handle = yield* FiberHandle.make();