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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (664) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +35 -21
  3. package/dist/Fx/Fx.d.ts +371 -19
  4. package/dist/Fx/Fx.d.ts.map +1 -1
  5. package/dist/Fx/Fx.js +37 -6
  6. package/dist/Fx/TypeId.d.ts +52 -6
  7. package/dist/Fx/TypeId.d.ts.map +1 -1
  8. package/dist/Fx/TypeId.js +41 -4
  9. package/dist/Fx/combinators/additive.d.ts +162 -11
  10. package/dist/Fx/combinators/additive.d.ts.map +1 -1
  11. package/dist/Fx/combinators/additive.js +162 -11
  12. package/dist/Fx/combinators/catch.d.ts +202 -29
  13. package/dist/Fx/combinators/catch.d.ts.map +1 -1
  14. package/dist/Fx/combinators/catch.js +193 -23
  15. package/dist/Fx/combinators/causes.d.ts +25 -2
  16. package/dist/Fx/combinators/causes.d.ts.map +1 -1
  17. package/dist/Fx/combinators/causes.js +25 -2
  18. package/dist/Fx/combinators/changesWithEffect.d.ts +21 -1
  19. package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -1
  20. package/dist/Fx/combinators/changesWithEffect.js +21 -1
  21. package/dist/Fx/combinators/compact.d.ts +18 -1
  22. package/dist/Fx/combinators/compact.d.ts.map +1 -1
  23. package/dist/Fx/combinators/compact.js +18 -1
  24. package/dist/Fx/combinators/concatMap.d.ts +86 -0
  25. package/dist/Fx/combinators/concatMap.d.ts.map +1 -0
  26. package/dist/Fx/combinators/concatMap.js +86 -0
  27. package/dist/Fx/combinators/continueWith.d.ts +113 -5
  28. package/dist/Fx/combinators/continueWith.d.ts.map +1 -1
  29. package/dist/Fx/combinators/continueWith.js +113 -5
  30. package/dist/Fx/combinators/debounce.d.ts +34 -0
  31. package/dist/Fx/combinators/debounce.d.ts.map +1 -0
  32. package/dist/Fx/combinators/debounce.js +35 -0
  33. package/dist/Fx/combinators/delay.d.ts +36 -0
  34. package/dist/Fx/combinators/delay.d.ts.map +1 -0
  35. package/dist/Fx/combinators/delay.js +33 -0
  36. package/dist/Fx/combinators/dropUntil.d.ts +44 -2
  37. package/dist/Fx/combinators/dropUntil.d.ts.map +1 -1
  38. package/dist/Fx/combinators/dropUntil.js +44 -2
  39. package/dist/Fx/combinators/during.d.ts +38 -0
  40. package/dist/Fx/combinators/during.d.ts.map +1 -0
  41. package/dist/Fx/combinators/during.js +85 -0
  42. package/dist/Fx/combinators/ensuring.d.ts +34 -4
  43. package/dist/Fx/combinators/ensuring.d.ts.map +1 -1
  44. package/dist/Fx/combinators/ensuring.js +34 -4
  45. package/dist/Fx/combinators/exhaustLatestMap.d.ts +41 -5
  46. package/dist/Fx/combinators/exhaustLatestMap.d.ts.map +1 -1
  47. package/dist/Fx/combinators/exhaustLatestMap.js +41 -5
  48. package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts +40 -4
  49. package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts.map +1 -1
  50. package/dist/Fx/combinators/exhaustLatestMapEffect.js +40 -4
  51. package/dist/Fx/combinators/exhaustMap.d.ts +38 -1
  52. package/dist/Fx/combinators/exhaustMap.d.ts.map +1 -1
  53. package/dist/Fx/combinators/exhaustMap.js +38 -1
  54. package/dist/Fx/combinators/exhaustMapEffect.d.ts +33 -1
  55. package/dist/Fx/combinators/exhaustMapEffect.d.ts.map +1 -1
  56. package/dist/Fx/combinators/exhaustMapEffect.js +33 -1
  57. package/dist/Fx/combinators/exit.d.ts +23 -2
  58. package/dist/Fx/combinators/exit.d.ts.map +1 -1
  59. package/dist/Fx/combinators/exit.js +23 -2
  60. package/dist/Fx/combinators/filter.d.ts +17 -1
  61. package/dist/Fx/combinators/filter.d.ts.map +1 -1
  62. package/dist/Fx/combinators/filter.js +17 -1
  63. package/dist/Fx/combinators/filterEffect.d.ts +22 -1
  64. package/dist/Fx/combinators/filterEffect.d.ts.map +1 -1
  65. package/dist/Fx/combinators/filterEffect.js +22 -1
  66. package/dist/Fx/combinators/filterMap.d.ts +20 -1
  67. package/dist/Fx/combinators/filterMap.d.ts.map +1 -1
  68. package/dist/Fx/combinators/filterMap.js +20 -1
  69. package/dist/Fx/combinators/filterMapEffect.d.ts +21 -1
  70. package/dist/Fx/combinators/filterMapEffect.d.ts.map +1 -1
  71. package/dist/Fx/combinators/filterMapEffect.js +21 -1
  72. package/dist/Fx/combinators/filterMapLoop.d.ts +20 -1
  73. package/dist/Fx/combinators/filterMapLoop.d.ts.map +1 -1
  74. package/dist/Fx/combinators/filterMapLoop.js +20 -1
  75. package/dist/Fx/combinators/filterMapLoopCause.d.ts +21 -1
  76. package/dist/Fx/combinators/filterMapLoopCause.d.ts.map +1 -1
  77. package/dist/Fx/combinators/filterMapLoopCause.js +21 -1
  78. package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts +21 -1
  79. package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts.map +1 -1
  80. package/dist/Fx/combinators/filterMapLoopCauseEffect.js +21 -1
  81. package/dist/Fx/combinators/filterMapLoopEffect.d.ts +21 -1
  82. package/dist/Fx/combinators/filterMapLoopEffect.d.ts.map +1 -1
  83. package/dist/Fx/combinators/filterMapLoopEffect.js +21 -1
  84. package/dist/Fx/combinators/flatMap.d.ts +50 -5
  85. package/dist/Fx/combinators/flatMap.d.ts.map +1 -1
  86. package/dist/Fx/combinators/flatMap.js +36 -3
  87. package/dist/Fx/combinators/flatMapConcurrently.d.ts +51 -4
  88. package/dist/Fx/combinators/flatMapConcurrently.d.ts.map +1 -1
  89. package/dist/Fx/combinators/flatMapConcurrently.js +48 -2
  90. package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts +48 -4
  91. package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts.map +1 -1
  92. package/dist/Fx/combinators/flatMapConcurrentlyEffect.js +40 -2
  93. package/dist/Fx/combinators/flatMapEffect.d.ts +46 -4
  94. package/dist/Fx/combinators/flatMapEffect.d.ts.map +1 -1
  95. package/dist/Fx/combinators/flatMapEffect.js +32 -2
  96. package/dist/Fx/combinators/flip.d.ts +34 -2
  97. package/dist/Fx/combinators/flip.d.ts.map +1 -1
  98. package/dist/Fx/combinators/flip.js +34 -2
  99. package/dist/Fx/combinators/gen.d.ts +29 -10
  100. package/dist/Fx/combinators/gen.d.ts.map +1 -1
  101. package/dist/Fx/combinators/gen.js +28 -4
  102. package/dist/Fx/combinators/genScoped.d.ts +33 -10
  103. package/dist/Fx/combinators/genScoped.d.ts.map +1 -1
  104. package/dist/Fx/combinators/genScoped.js +31 -3
  105. package/dist/Fx/combinators/grouped.d.ts +89 -0
  106. package/dist/Fx/combinators/grouped.d.ts.map +1 -0
  107. package/dist/Fx/combinators/grouped.js +146 -0
  108. package/dist/Fx/combinators/index.d.ts +35 -0
  109. package/dist/Fx/combinators/index.d.ts.map +1 -1
  110. package/dist/Fx/combinators/index.js +35 -0
  111. package/dist/Fx/combinators/keyed.d.ts +123 -9
  112. package/dist/Fx/combinators/keyed.d.ts.map +1 -1
  113. package/dist/Fx/combinators/keyed.js +69 -11
  114. package/dist/Fx/combinators/loop.d.ts +17 -1
  115. package/dist/Fx/combinators/loop.d.ts.map +1 -1
  116. package/dist/Fx/combinators/loop.js +17 -1
  117. package/dist/Fx/combinators/loopCause.d.ts +18 -1
  118. package/dist/Fx/combinators/loopCause.d.ts.map +1 -1
  119. package/dist/Fx/combinators/loopCause.js +18 -1
  120. package/dist/Fx/combinators/loopCauseEffect.d.ts +19 -1
  121. package/dist/Fx/combinators/loopCauseEffect.d.ts.map +1 -1
  122. package/dist/Fx/combinators/loopCauseEffect.js +19 -1
  123. package/dist/Fx/combinators/loopEffect.d.ts +24 -1
  124. package/dist/Fx/combinators/loopEffect.d.ts.map +1 -1
  125. package/dist/Fx/combinators/loopEffect.js +24 -1
  126. package/dist/Fx/combinators/map.d.ts +46 -1
  127. package/dist/Fx/combinators/map.d.ts.map +1 -1
  128. package/dist/Fx/combinators/map.js +43 -1
  129. package/dist/Fx/combinators/mapBoth.d.ts +20 -1
  130. package/dist/Fx/combinators/mapBoth.d.ts.map +1 -1
  131. package/dist/Fx/combinators/mapBoth.js +20 -1
  132. package/dist/Fx/combinators/mapEffect.d.ts +25 -1
  133. package/dist/Fx/combinators/mapEffect.d.ts.map +1 -1
  134. package/dist/Fx/combinators/mapEffect.js +25 -1
  135. package/dist/Fx/combinators/mapError.d.ts +21 -5
  136. package/dist/Fx/combinators/mapError.d.ts.map +1 -1
  137. package/dist/Fx/combinators/mapError.js +21 -5
  138. package/dist/Fx/combinators/mergeAll.d.ts +35 -1
  139. package/dist/Fx/combinators/mergeAll.d.ts.map +1 -1
  140. package/dist/Fx/combinators/mergeAll.js +35 -1
  141. package/dist/Fx/combinators/mergeOrdered.d.ts +36 -4
  142. package/dist/Fx/combinators/mergeOrdered.d.ts.map +1 -1
  143. package/dist/Fx/combinators/mergeOrdered.js +68 -14
  144. package/dist/Fx/combinators/onError.d.ts +34 -4
  145. package/dist/Fx/combinators/onError.d.ts.map +1 -1
  146. package/dist/Fx/combinators/onError.js +34 -4
  147. package/dist/Fx/combinators/onExit.d.ts +29 -3
  148. package/dist/Fx/combinators/onExit.d.ts.map +1 -1
  149. package/dist/Fx/combinators/onExit.js +29 -3
  150. package/dist/Fx/combinators/onInterrupt.d.ts +49 -4
  151. package/dist/Fx/combinators/onInterrupt.d.ts.map +1 -1
  152. package/dist/Fx/combinators/onInterrupt.js +49 -4
  153. package/dist/Fx/combinators/pairwise.d.ts +28 -0
  154. package/dist/Fx/combinators/pairwise.d.ts.map +1 -0
  155. package/dist/Fx/combinators/pairwise.js +31 -0
  156. package/dist/Fx/combinators/provide.d.ts +141 -20
  157. package/dist/Fx/combinators/provide.d.ts.map +1 -1
  158. package/dist/Fx/combinators/provide.js +137 -16
  159. package/dist/Fx/combinators/race.d.ts +92 -0
  160. package/dist/Fx/combinators/race.d.ts.map +1 -0
  161. package/dist/Fx/combinators/race.js +149 -0
  162. package/dist/Fx/combinators/repeat.d.ts +41 -0
  163. package/dist/Fx/combinators/repeat.d.ts.map +1 -0
  164. package/dist/Fx/combinators/repeat.js +57 -0
  165. package/dist/Fx/combinators/result.d.ts +23 -1
  166. package/dist/Fx/combinators/result.d.ts.map +1 -1
  167. package/dist/Fx/combinators/result.js +27 -13
  168. package/dist/Fx/combinators/retry.d.ts +53 -0
  169. package/dist/Fx/combinators/retry.d.ts.map +1 -0
  170. package/dist/Fx/combinators/retry.js +71 -0
  171. package/dist/Fx/combinators/sample.d.ts +31 -0
  172. package/dist/Fx/combinators/sample.d.ts.map +1 -0
  173. package/dist/Fx/combinators/sample.js +42 -0
  174. package/dist/Fx/combinators/scan.d.ts +41 -2
  175. package/dist/Fx/combinators/scan.d.ts.map +1 -1
  176. package/dist/Fx/combinators/scan.js +43 -4
  177. package/dist/Fx/combinators/since.d.ts +30 -0
  178. package/dist/Fx/combinators/since.d.ts.map +1 -0
  179. package/dist/Fx/combinators/since.js +39 -0
  180. package/dist/Fx/combinators/skip.d.ts +33 -2
  181. package/dist/Fx/combinators/skip.d.ts.map +1 -1
  182. package/dist/Fx/combinators/skip.js +33 -2
  183. package/dist/Fx/combinators/skipRepeats.d.ts +17 -1
  184. package/dist/Fx/combinators/skipRepeats.d.ts.map +1 -1
  185. package/dist/Fx/combinators/skipRepeats.js +17 -1
  186. package/dist/Fx/combinators/skipRepeatsWith.d.ts +18 -1
  187. package/dist/Fx/combinators/skipRepeatsWith.d.ts.map +1 -1
  188. package/dist/Fx/combinators/skipRepeatsWith.js +18 -1
  189. package/dist/Fx/combinators/skipWhile.d.ts +72 -4
  190. package/dist/Fx/combinators/skipWhile.d.ts.map +1 -1
  191. package/dist/Fx/combinators/skipWhile.js +72 -4
  192. package/dist/Fx/combinators/slice.d.ts +85 -3
  193. package/dist/Fx/combinators/slice.d.ts.map +1 -1
  194. package/dist/Fx/combinators/slice.js +35 -2
  195. package/dist/Fx/combinators/switchMap.d.ts +39 -1
  196. package/dist/Fx/combinators/switchMap.d.ts.map +1 -1
  197. package/dist/Fx/combinators/switchMap.js +43 -5
  198. package/dist/Fx/combinators/switchMapEffect.d.ts +38 -1
  199. package/dist/Fx/combinators/switchMapEffect.d.ts.map +1 -1
  200. package/dist/Fx/combinators/switchMapEffect.js +38 -1
  201. package/dist/Fx/combinators/take.d.ts +34 -2
  202. package/dist/Fx/combinators/take.d.ts.map +1 -1
  203. package/dist/Fx/combinators/take.js +34 -2
  204. package/dist/Fx/combinators/takeUntil.d.ts +49 -3
  205. package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
  206. package/dist/Fx/combinators/takeUntil.js +49 -3
  207. package/dist/Fx/combinators/takeWhile.d.ts +33 -2
  208. package/dist/Fx/combinators/takeWhile.d.ts.map +1 -1
  209. package/dist/Fx/combinators/takeWhile.js +33 -2
  210. package/dist/Fx/combinators/tapEffect.d.ts +17 -1
  211. package/dist/Fx/combinators/tapEffect.d.ts.map +1 -1
  212. package/dist/Fx/combinators/tapEffect.js +17 -1
  213. package/dist/Fx/combinators/throttle.d.ts +79 -0
  214. package/dist/Fx/combinators/throttle.d.ts.map +1 -0
  215. package/dist/Fx/combinators/throttle.js +99 -0
  216. package/dist/Fx/combinators/timeout.d.ts +76 -0
  217. package/dist/Fx/combinators/timeout.d.ts.map +1 -0
  218. package/dist/Fx/combinators/timeout.js +110 -0
  219. package/dist/Fx/combinators/tuple.d.ts +32 -2
  220. package/dist/Fx/combinators/tuple.d.ts.map +1 -1
  221. package/dist/Fx/combinators/tuple.js +36 -5
  222. package/dist/Fx/combinators/until.d.ts +27 -0
  223. package/dist/Fx/combinators/until.d.ts.map +1 -0
  224. package/dist/Fx/combinators/until.js +56 -0
  225. package/dist/Fx/combinators/unwrap.d.ts +31 -2
  226. package/dist/Fx/combinators/unwrap.d.ts.map +1 -1
  227. package/dist/Fx/combinators/unwrap.js +30 -1
  228. package/dist/Fx/combinators/unwrapScoped.d.ts +34 -1
  229. package/dist/Fx/combinators/unwrapScoped.d.ts.map +1 -1
  230. package/dist/Fx/combinators/unwrapScoped.js +34 -1
  231. package/dist/Fx/combinators/when.d.ts +37 -2
  232. package/dist/Fx/combinators/when.d.ts.map +1 -1
  233. package/dist/Fx/combinators/when.js +38 -3
  234. package/dist/Fx/combinators/withLatestFrom.d.ts +58 -0
  235. package/dist/Fx/combinators/withLatestFrom.d.ts.map +1 -0
  236. package/dist/Fx/combinators/withLatestFrom.js +68 -0
  237. package/dist/Fx/combinators/withSpan.d.ts +35 -1
  238. package/dist/Fx/combinators/withSpan.d.ts.map +1 -1
  239. package/dist/Fx/combinators/withSpan.js +34 -3
  240. package/dist/Fx/combinators/zip.d.ts +64 -4
  241. package/dist/Fx/combinators/zip.d.ts.map +1 -1
  242. package/dist/Fx/combinators/zip.js +64 -4
  243. package/dist/Fx/constructors/at.d.ts +21 -1
  244. package/dist/Fx/constructors/at.d.ts.map +1 -1
  245. package/dist/Fx/constructors/at.js +21 -1
  246. package/dist/Fx/constructors/die.d.ts +22 -1
  247. package/dist/Fx/constructors/die.d.ts.map +1 -1
  248. package/dist/Fx/constructors/die.js +22 -1
  249. package/dist/Fx/constructors/empty.d.ts +19 -1
  250. package/dist/Fx/constructors/empty.d.ts.map +1 -1
  251. package/dist/Fx/constructors/empty.js +19 -1
  252. package/dist/Fx/constructors/fail.d.ts +22 -1
  253. package/dist/Fx/constructors/fail.d.ts.map +1 -1
  254. package/dist/Fx/constructors/fail.js +22 -1
  255. package/dist/Fx/constructors/failCause.d.ts +23 -1
  256. package/dist/Fx/constructors/failCause.d.ts.map +1 -1
  257. package/dist/Fx/constructors/failCause.js +23 -1
  258. package/dist/Fx/constructors/fn.d.ts +116 -16
  259. package/dist/Fx/constructors/fn.d.ts.map +1 -1
  260. package/dist/Fx/constructors/fn.js +36 -0
  261. package/dist/Fx/constructors/fromEffect.d.ts +45 -3
  262. package/dist/Fx/constructors/fromEffect.d.ts.map +1 -1
  263. package/dist/Fx/constructors/fromEffect.js +45 -3
  264. package/dist/Fx/constructors/fromFailures.d.ts +25 -1
  265. package/dist/Fx/constructors/fromFailures.d.ts.map +1 -1
  266. package/dist/Fx/constructors/fromFailures.js +25 -1
  267. package/dist/Fx/constructors/fromIterable.d.ts +23 -1
  268. package/dist/Fx/constructors/fromIterable.d.ts.map +1 -1
  269. package/dist/Fx/constructors/fromIterable.js +23 -1
  270. package/dist/Fx/constructors/fromSchedule.d.ts +26 -1
  271. package/dist/Fx/constructors/fromSchedule.d.ts.map +1 -1
  272. package/dist/Fx/constructors/fromSchedule.js +28 -3
  273. package/dist/Fx/constructors/index.d.ts +2 -1
  274. package/dist/Fx/constructors/index.d.ts.map +1 -1
  275. package/dist/Fx/constructors/index.js +2 -1
  276. package/dist/Fx/constructors/interrupt.d.ts +22 -2
  277. package/dist/Fx/constructors/interrupt.d.ts.map +1 -1
  278. package/dist/Fx/constructors/interrupt.js +22 -2
  279. package/dist/Fx/constructors/make.d.ts +151 -4
  280. package/dist/Fx/constructors/make.d.ts.map +1 -1
  281. package/dist/Fx/constructors/make.js +60 -7
  282. package/dist/Fx/constructors/periodic.d.ts +30 -1
  283. package/dist/Fx/constructors/periodic.d.ts.map +1 -1
  284. package/dist/Fx/constructors/periodic.js +30 -1
  285. package/dist/Fx/constructors/succeed.d.ts +79 -7
  286. package/dist/Fx/constructors/succeed.d.ts.map +1 -1
  287. package/dist/Fx/constructors/succeed.js +79 -7
  288. package/dist/Fx/constructors/suspend.d.ts +28 -0
  289. package/dist/Fx/constructors/suspend.d.ts.map +1 -1
  290. package/dist/Fx/constructors/suspend.js +28 -0
  291. package/dist/Fx/constructors/sync.d.ts +32 -0
  292. package/dist/Fx/constructors/sync.d.ts.map +1 -0
  293. package/dist/Fx/constructors/sync.js +32 -0
  294. package/dist/Fx/internal/DeferredRef.d.ts +259 -7
  295. package/dist/Fx/internal/DeferredRef.d.ts.map +1 -1
  296. package/dist/Fx/internal/DeferredRef.js +260 -9
  297. package/dist/Fx/internal/UnionToTuple.d.ts +22 -0
  298. package/dist/Fx/internal/UnionToTuple.d.ts.map +1 -1
  299. package/dist/Fx/internal/diff.d.ts +586 -0
  300. package/dist/Fx/internal/diff.d.ts.map +1 -1
  301. package/dist/Fx/internal/diff.js +120 -9
  302. package/dist/Fx/internal/effectableEvaluateKey.d.ts +30 -0
  303. package/dist/Fx/internal/effectableEvaluateKey.d.ts.map +1 -0
  304. package/dist/Fx/internal/effectableEvaluateKey.js +29 -0
  305. package/dist/Fx/internal/effectableWithOverride.d.ts +70 -0
  306. package/dist/Fx/internal/effectableWithOverride.d.ts.map +1 -0
  307. package/dist/Fx/internal/effectableWithOverride.js +54 -0
  308. package/dist/Fx/internal/equivalence.d.ts +29 -0
  309. package/dist/Fx/internal/equivalence.d.ts.map +1 -1
  310. package/dist/Fx/internal/equivalence.js +29 -0
  311. package/dist/Fx/internal/multicast.d.ts +145 -2
  312. package/dist/Fx/internal/multicast.d.ts.map +1 -1
  313. package/dist/Fx/internal/multicast.js +146 -4
  314. package/dist/Fx/internal/ring-buffer.d.ts +149 -0
  315. package/dist/Fx/internal/ring-buffer.d.ts.map +1 -1
  316. package/dist/Fx/internal/ring-buffer.js +155 -0
  317. package/dist/Fx/internal/scope.d.ts +184 -0
  318. package/dist/Fx/internal/scope.d.ts.map +1 -1
  319. package/dist/Fx/internal/scope.js +150 -0
  320. package/dist/Fx/internal/yieldable.d.ts +117 -2
  321. package/dist/Fx/internal/yieldable.d.ts.map +1 -1
  322. package/dist/Fx/internal/yieldable.js +86 -3
  323. package/dist/Fx/run/collect.d.ts +93 -4
  324. package/dist/Fx/run/collect.d.ts.map +1 -1
  325. package/dist/Fx/run/collect.js +94 -5
  326. package/dist/Fx/run/first.d.ts +23 -1
  327. package/dist/Fx/run/first.d.ts.map +1 -1
  328. package/dist/Fx/run/first.js +23 -1
  329. package/dist/Fx/run/fork.d.ts +52 -2
  330. package/dist/Fx/run/fork.d.ts.map +1 -1
  331. package/dist/Fx/run/fork.js +52 -2
  332. package/dist/Fx/run/observe.d.ts +112 -4
  333. package/dist/Fx/run/observe.d.ts.map +1 -1
  334. package/dist/Fx/run/observe.js +137 -16
  335. package/dist/Fx/run/runPromise.d.ts +45 -2
  336. package/dist/Fx/run/runPromise.d.ts.map +1 -1
  337. package/dist/Fx/run/runPromise.js +45 -2
  338. package/dist/Fx/stream.d.ts +92 -0
  339. package/dist/Fx/stream.d.ts.map +1 -1
  340. package/dist/Fx/stream.js +60 -1
  341. package/dist/Push/Push.d.ts +1229 -104
  342. package/dist/Push/Push.d.ts.map +1 -1
  343. package/dist/Push/Push.js +1024 -95
  344. package/dist/RefArray.d.ts +2 -0
  345. package/dist/RefArray.d.ts.map +1 -0
  346. package/dist/RefArray.js +1 -0
  347. package/dist/RefBigDecimal.d.ts +2 -0
  348. package/dist/RefBigDecimal.d.ts.map +1 -0
  349. package/dist/RefBigDecimal.js +1 -0
  350. package/dist/RefBigInt.d.ts +2 -0
  351. package/dist/RefBigInt.d.ts.map +1 -0
  352. package/dist/RefBigInt.js +1 -0
  353. package/dist/RefBoolean.d.ts +2 -0
  354. package/dist/RefBoolean.d.ts.map +1 -0
  355. package/dist/RefBoolean.js +1 -0
  356. package/dist/RefCause.d.ts +2 -0
  357. package/dist/RefCause.d.ts.map +1 -0
  358. package/dist/RefCause.js +1 -0
  359. package/dist/RefChunk.d.ts +2 -0
  360. package/dist/RefChunk.d.ts.map +1 -0
  361. package/dist/RefChunk.js +1 -0
  362. package/dist/RefDateTime.d.ts +2 -0
  363. package/dist/RefDateTime.d.ts.map +1 -0
  364. package/dist/RefDateTime.js +1 -0
  365. package/dist/RefDuration.d.ts +2 -0
  366. package/dist/RefDuration.d.ts.map +1 -0
  367. package/dist/RefDuration.js +1 -0
  368. package/dist/RefGraph.d.ts +2 -0
  369. package/dist/RefGraph.d.ts.map +1 -0
  370. package/dist/RefGraph.js +1 -0
  371. package/dist/RefHashMap.d.ts +2 -0
  372. package/dist/RefHashMap.d.ts.map +1 -0
  373. package/dist/RefHashMap.js +1 -0
  374. package/dist/RefHashRing.d.ts +2 -0
  375. package/dist/RefHashRing.d.ts.map +1 -0
  376. package/dist/RefHashRing.js +1 -0
  377. package/dist/RefHashSet.d.ts +2 -0
  378. package/dist/RefHashSet.d.ts.map +1 -0
  379. package/dist/RefHashSet.js +1 -0
  380. package/dist/RefIterable.d.ts +2 -0
  381. package/dist/RefIterable.d.ts.map +1 -0
  382. package/dist/RefIterable.js +1 -0
  383. package/dist/RefOption.d.ts +2 -0
  384. package/dist/RefOption.d.ts.map +1 -0
  385. package/dist/RefOption.js +1 -0
  386. package/dist/RefRecord.d.ts +2 -0
  387. package/dist/RefRecord.d.ts.map +1 -0
  388. package/dist/RefRecord.js +1 -0
  389. package/dist/RefResult.d.ts +2 -0
  390. package/dist/RefResult.d.ts.map +1 -0
  391. package/dist/RefResult.js +1 -0
  392. package/dist/RefString.d.ts +2 -0
  393. package/dist/RefString.d.ts.map +1 -0
  394. package/dist/RefString.js +1 -0
  395. package/dist/RefStruct.d.ts +2 -0
  396. package/dist/RefStruct.d.ts.map +1 -0
  397. package/dist/RefStruct.js +1 -0
  398. package/dist/RefSubject/Hydration.d.ts +504 -0
  399. package/dist/RefSubject/Hydration.d.ts.map +1 -0
  400. package/dist/RefSubject/Hydration.js +300 -0
  401. package/dist/RefSubject/RefArray.d.ts +382 -35
  402. package/dist/RefSubject/RefArray.d.ts.map +1 -1
  403. package/dist/RefSubject/RefArray.js +374 -40
  404. package/dist/RefSubject/RefBigDecimal.d.ts +241 -21
  405. package/dist/RefSubject/RefBigDecimal.d.ts.map +1 -1
  406. package/dist/RefSubject/RefBigDecimal.js +229 -20
  407. package/dist/RefSubject/RefBigInt.d.ts +181 -16
  408. package/dist/RefSubject/RefBigInt.d.ts.map +1 -1
  409. package/dist/RefSubject/RefBigInt.js +169 -15
  410. package/dist/RefSubject/RefBoolean.d.ts +181 -16
  411. package/dist/RefSubject/RefBoolean.d.ts.map +1 -1
  412. package/dist/RefSubject/RefBoolean.js +169 -15
  413. package/dist/RefSubject/RefCause.d.ts +133 -12
  414. package/dist/RefSubject/RefCause.d.ts.map +1 -1
  415. package/dist/RefSubject/RefCause.js +121 -11
  416. package/dist/RefSubject/RefChunk.d.ts +481 -76
  417. package/dist/RefSubject/RefChunk.d.ts.map +1 -1
  418. package/dist/RefSubject/RefChunk.js +471 -75
  419. package/dist/RefSubject/RefDateTime.d.ts +133 -12
  420. package/dist/RefSubject/RefDateTime.d.ts.map +1 -1
  421. package/dist/RefSubject/RefDateTime.js +122 -12
  422. package/dist/RefSubject/RefDuration.d.ts +169 -15
  423. package/dist/RefSubject/RefDuration.d.ts.map +1 -1
  424. package/dist/RefSubject/RefDuration.js +157 -14
  425. package/dist/RefSubject/RefGraph.d.ts +349 -35
  426. package/dist/RefSubject/RefGraph.d.ts.map +1 -1
  427. package/dist/RefSubject/RefGraph.js +334 -32
  428. package/dist/RefSubject/RefHashMap.d.ts +323 -28
  429. package/dist/RefSubject/RefHashMap.d.ts.map +1 -1
  430. package/dist/RefSubject/RefHashMap.js +317 -29
  431. package/dist/RefSubject/RefHashRing.d.ts +159 -15
  432. package/dist/RefSubject/RefHashRing.d.ts.map +1 -1
  433. package/dist/RefSubject/RefHashRing.js +145 -12
  434. package/dist/RefSubject/RefHashSet.d.ts +251 -22
  435. package/dist/RefSubject/RefHashSet.d.ts.map +1 -1
  436. package/dist/RefSubject/RefHashSet.js +238 -20
  437. package/dist/RefSubject/RefIterable.d.ts +358 -32
  438. package/dist/RefSubject/RefIterable.d.ts.map +1 -1
  439. package/dist/RefSubject/RefIterable.js +350 -30
  440. package/dist/RefSubject/RefOption.d.ts +157 -14
  441. package/dist/RefSubject/RefOption.d.ts.map +1 -1
  442. package/dist/RefSubject/RefOption.js +145 -13
  443. package/dist/RefSubject/RefRecord.d.ts +402 -64
  444. package/dist/RefSubject/RefRecord.d.ts.map +1 -1
  445. package/dist/RefSubject/RefRecord.js +364 -39
  446. package/dist/RefSubject/RefResult.d.ts +167 -35
  447. package/dist/RefSubject/RefResult.d.ts.map +1 -1
  448. package/dist/RefSubject/RefResult.js +133 -12
  449. package/dist/RefSubject/RefString.d.ts +205 -18
  450. package/dist/RefSubject/RefString.d.ts.map +1 -1
  451. package/dist/RefSubject/RefString.js +193 -17
  452. package/dist/RefSubject/RefStruct.d.ts +169 -14
  453. package/dist/RefSubject/RefStruct.d.ts.map +1 -1
  454. package/dist/RefSubject/RefStruct.js +157 -13
  455. package/dist/RefSubject/RefSubject.d.ts +1197 -45
  456. package/dist/RefSubject/RefSubject.d.ts.map +1 -1
  457. package/dist/RefSubject/RefSubject.js +935 -88
  458. package/dist/RefSubject/RefTrie.d.ts +323 -37
  459. package/dist/RefSubject/RefTrie.d.ts.map +1 -1
  460. package/dist/RefSubject/RefTrie.js +311 -31
  461. package/dist/RefSubject/RefTuple.d.ts +127 -11
  462. package/dist/RefSubject/RefTuple.d.ts.map +1 -1
  463. package/dist/RefSubject/RefTuple.js +114 -9
  464. package/dist/RefSubject/index.d.ts +1 -0
  465. package/dist/RefSubject/index.d.ts.map +1 -1
  466. package/dist/RefSubject/index.js +1 -0
  467. package/dist/RefSubject.d.ts +2 -1
  468. package/dist/RefSubject.d.ts.map +1 -1
  469. package/dist/RefSubject.js +2 -1
  470. package/dist/RefTrie.d.ts +2 -0
  471. package/dist/RefTrie.d.ts.map +1 -0
  472. package/dist/RefTrie.js +1 -0
  473. package/dist/RefTuple.d.ts +2 -0
  474. package/dist/RefTuple.d.ts.map +1 -0
  475. package/dist/RefTuple.js +1 -0
  476. package/dist/Sink/Sink.d.ts +396 -23
  477. package/dist/Sink/Sink.d.ts.map +1 -1
  478. package/dist/Sink/Sink.js +55 -7
  479. package/dist/Sink/combinators.d.ts +740 -11
  480. package/dist/Sink/combinators.d.ts.map +1 -1
  481. package/dist/Sink/combinators.js +716 -14
  482. package/dist/Subject/Subject.d.ts +1022 -27
  483. package/dist/Subject/Subject.d.ts.map +1 -1
  484. package/dist/Subject/Subject.js +909 -43
  485. package/dist/Versioned/Versioned.d.ts +447 -27
  486. package/dist/Versioned/Versioned.d.ts.map +1 -1
  487. package/dist/Versioned/Versioned.js +282 -48
  488. package/dist/index.d.ts +22 -3
  489. package/dist/index.d.ts.map +1 -1
  490. package/dist/index.js +22 -3
  491. package/package.json +126 -16
  492. package/dist/Fx/constructors/fromYieldable.d.ts +0 -12
  493. package/dist/Fx/constructors/fromYieldable.d.ts.map +0 -1
  494. package/dist/Fx/constructors/fromYieldable.js +0 -12
  495. package/src/Fx/Fx.ts +0 -164
  496. package/src/Fx/TypeId.ts +0 -25
  497. package/src/Fx/combinators/additive.ts +0 -142
  498. package/src/Fx/combinators/catch.ts +0 -421
  499. package/src/Fx/combinators/causes.ts +0 -23
  500. package/src/Fx/combinators/changesWithEffect.ts +0 -66
  501. package/src/Fx/combinators/compact.ts +0 -15
  502. package/src/Fx/combinators/continueWith.ts +0 -78
  503. package/src/Fx/combinators/dropUntil.ts +0 -47
  504. package/src/Fx/combinators/ensuring.ts +0 -23
  505. package/src/Fx/combinators/exhaustLatestMap.ts +0 -74
  506. package/src/Fx/combinators/exhaustLatestMapEffect.ts +0 -25
  507. package/src/Fx/combinators/exhaustMap.ts +0 -36
  508. package/src/Fx/combinators/exhaustMapEffect.ts +0 -23
  509. package/src/Fx/combinators/exit.ts +0 -15
  510. package/src/Fx/combinators/filter.ts +0 -22
  511. package/src/Fx/combinators/filterEffect.ts +0 -31
  512. package/src/Fx/combinators/filterMap.ts +0 -23
  513. package/src/Fx/combinators/filterMapEffect.ts +0 -32
  514. package/src/Fx/combinators/filterMapLoop.ts +0 -35
  515. package/src/Fx/combinators/filterMapLoopCause.ts +0 -36
  516. package/src/Fx/combinators/filterMapLoopCauseEffect.ts +0 -46
  517. package/src/Fx/combinators/filterMapLoopEffect.ts +0 -36
  518. package/src/Fx/combinators/flatMap.ts +0 -51
  519. package/src/Fx/combinators/flatMapConcurrently.ts +0 -39
  520. package/src/Fx/combinators/flatMapConcurrentlyEffect.ts +0 -26
  521. package/src/Fx/combinators/flatMapEffect.ts +0 -42
  522. package/src/Fx/combinators/flip.ts +0 -14
  523. package/src/Fx/combinators/gen.ts +0 -24
  524. package/src/Fx/combinators/genScoped.ts +0 -24
  525. package/src/Fx/combinators/index.ts +0 -61
  526. package/src/Fx/combinators/keyed.ts +0 -369
  527. package/src/Fx/combinators/loop.ts +0 -27
  528. package/src/Fx/combinators/loopCause.ts +0 -34
  529. package/src/Fx/combinators/loopCauseEffect.ts +0 -36
  530. package/src/Fx/combinators/loopEffect.ts +0 -34
  531. package/src/Fx/combinators/map.ts +0 -22
  532. package/src/Fx/combinators/mapBoth.ts +0 -40
  533. package/src/Fx/combinators/mapEffect.ts +0 -32
  534. package/src/Fx/combinators/mapError.ts +0 -28
  535. package/src/Fx/combinators/mergeAll.ts +0 -22
  536. package/src/Fx/combinators/mergeOrdered.ts +0 -123
  537. package/src/Fx/combinators/onError.ts +0 -40
  538. package/src/Fx/combinators/onExit.ts +0 -82
  539. package/src/Fx/combinators/onInterrupt.ts +0 -87
  540. package/src/Fx/combinators/provide.ts +0 -124
  541. package/src/Fx/combinators/result.ts +0 -39
  542. package/src/Fx/combinators/scan.ts +0 -82
  543. package/src/Fx/combinators/skip.ts +0 -41
  544. package/src/Fx/combinators/skipRepeats.ts +0 -15
  545. package/src/Fx/combinators/skipRepeatsWith.ts +0 -40
  546. package/src/Fx/combinators/skipWhile.ts +0 -100
  547. package/src/Fx/combinators/slice.ts +0 -55
  548. package/src/Fx/combinators/switchMap.ts +0 -55
  549. package/src/Fx/combinators/switchMapEffect.ts +0 -25
  550. package/src/Fx/combinators/take.ts +0 -38
  551. package/src/Fx/combinators/takeUntil.ts +0 -88
  552. package/src/Fx/combinators/takeWhile.ts +0 -47
  553. package/src/Fx/combinators/tapEffect.ts +0 -39
  554. package/src/Fx/combinators/tuple.ts +0 -79
  555. package/src/Fx/combinators/unwrap.ts +0 -21
  556. package/src/Fx/combinators/unwrapScoped.ts +0 -26
  557. package/src/Fx/combinators/when.ts +0 -64
  558. package/src/Fx/combinators/withSpan.ts +0 -24
  559. package/src/Fx/combinators/zip.ts +0 -175
  560. package/src/Fx/constructors/at.ts +0 -23
  561. package/src/Fx/constructors/die.ts +0 -17
  562. package/src/Fx/constructors/empty.ts +0 -10
  563. package/src/Fx/constructors/fail.ts +0 -14
  564. package/src/Fx/constructors/failCause.ts +0 -14
  565. package/src/Fx/constructors/fn.ts +0 -245
  566. package/src/Fx/constructors/fromEffect.ts +0 -24
  567. package/src/Fx/constructors/fromFailures.ts +0 -19
  568. package/src/Fx/constructors/fromIterable.ts +0 -15
  569. package/src/Fx/constructors/fromSchedule.ts +0 -18
  570. package/src/Fx/constructors/fromYieldable.ts +0 -17
  571. package/src/Fx/constructors/index.ts +0 -15
  572. package/src/Fx/constructors/interrupt.ts +0 -13
  573. package/src/Fx/constructors/make.ts +0 -103
  574. package/src/Fx/constructors/periodic.ts +0 -15
  575. package/src/Fx/constructors/succeed.ts +0 -37
  576. package/src/Fx/constructors/suspend.ts +0 -6
  577. package/src/Fx/index.ts +0 -6
  578. package/src/Fx/internal/DeferredRef.ts +0 -87
  579. package/src/Fx/internal/UnionToTuple.ts +0 -12
  580. package/src/Fx/internal/diff.ts +0 -191
  581. package/src/Fx/internal/equivalence.ts +0 -12
  582. package/src/Fx/internal/multicast.ts +0 -51
  583. package/src/Fx/internal/ring-buffer.ts +0 -60
  584. package/src/Fx/internal/scope.ts +0 -58
  585. package/src/Fx/internal/yieldable.ts +0 -31
  586. package/src/Fx/run/collect.ts +0 -79
  587. package/src/Fx/run/first.ts +0 -20
  588. package/src/Fx/run/fork.ts +0 -40
  589. package/src/Fx/run/index.ts +0 -5
  590. package/src/Fx/run/observe.ts +0 -114
  591. package/src/Fx/run/runPromise.ts +0 -32
  592. package/src/Fx/stream.ts +0 -42
  593. package/src/Fx.additive-combinators.test.ts +0 -126
  594. package/src/Fx.catch-additive.test.ts +0 -206
  595. package/src/Fx.catch.test.ts +0 -60
  596. package/src/Fx.dropUntil.test.ts +0 -61
  597. package/src/Fx.fn.test.ts +0 -51
  598. package/src/Fx.lifecycle.test.ts +0 -79
  599. package/src/Fx.mapError-mapBoth.test.ts +0 -101
  600. package/src/Fx.provide-combinators.test.ts +0 -94
  601. package/src/Fx.result-changesWithEffect.test.ts +0 -112
  602. package/src/Fx.scan.test.ts +0 -73
  603. package/src/Fx.takeWhile-skipWhile.test.ts +0 -84
  604. package/src/Fx.test.ts +0 -71
  605. package/src/Fx.ts +0 -1
  606. package/src/Fx.zip-merge-additive.test.ts +0 -171
  607. package/src/Fx.zip.test.ts +0 -133
  608. package/src/Push/Push.ts +0 -1072
  609. package/src/Push/index.ts +0 -1
  610. package/src/Push.additive.test.ts +0 -256
  611. package/src/Push.test.ts +0 -26
  612. package/src/Push.ts +0 -1
  613. package/src/RefSubject/RefArray.ts +0 -512
  614. package/src/RefSubject/RefBigDecimal.test.ts +0 -56
  615. package/src/RefSubject/RefBigDecimal.ts +0 -295
  616. package/src/RefSubject/RefBigInt.test.ts +0 -56
  617. package/src/RefSubject/RefBigInt.ts +0 -189
  618. package/src/RefSubject/RefBoolean.test.ts +0 -57
  619. package/src/RefSubject/RefBoolean.ts +0 -185
  620. package/src/RefSubject/RefCause.test.ts +0 -53
  621. package/src/RefSubject/RefCause.ts +0 -146
  622. package/src/RefSubject/RefChunk.ts +0 -510
  623. package/src/RefSubject/RefDateTime.test.ts +0 -43
  624. package/src/RefSubject/RefDateTime.ts +0 -264
  625. package/src/RefSubject/RefDuration.test.ts +0 -49
  626. package/src/RefSubject/RefDuration.ts +0 -188
  627. package/src/RefSubject/RefGraph.ts +0 -650
  628. package/src/RefSubject/RefHashMap.ts +0 -465
  629. package/src/RefSubject/RefHashRing.ts +0 -262
  630. package/src/RefSubject/RefHashSet.ts +0 -308
  631. package/src/RefSubject/RefIterable.ts +0 -445
  632. package/src/RefSubject/RefOption.test.ts +0 -67
  633. package/src/RefSubject/RefOption.ts +0 -193
  634. package/src/RefSubject/RefRecord.ts +0 -612
  635. package/src/RefSubject/RefResult.test.ts +0 -63
  636. package/src/RefSubject/RefResult.ts +0 -209
  637. package/src/RefSubject/RefString.test.ts +0 -61
  638. package/src/RefSubject/RefString.ts +0 -256
  639. package/src/RefSubject/RefStruct.test.ts +0 -60
  640. package/src/RefSubject/RefStruct.ts +0 -253
  641. package/src/RefSubject/RefSubject.ts +0 -2646
  642. package/src/RefSubject/RefTrie.ts +0 -356
  643. package/src/RefSubject/RefTuple.test.ts +0 -60
  644. package/src/RefSubject/RefTuple.ts +0 -231
  645. package/src/RefSubject/index.ts +0 -21
  646. package/src/RefSubject.additive-parity.test.ts +0 -101
  647. package/src/RefSubject.test.ts +0 -65
  648. package/src/RefSubject.ts +0 -1
  649. package/src/Sink/Sink.ts +0 -159
  650. package/src/Sink/combinators.ts +0 -1115
  651. package/src/Sink/index.ts +0 -2
  652. package/src/Sink.combinators.test.ts +0 -88
  653. package/src/Sink.reduce-collect-head-last.test.ts +0 -107
  654. package/src/Sink.ts +0 -1
  655. package/src/Subject/Subject.ts +0 -441
  656. package/src/Subject/index.ts +0 -1
  657. package/src/Subject.test.ts +0 -47
  658. package/src/Subject.ts +0 -1
  659. package/src/Versioned/Versioned.ts +0 -597
  660. package/src/Versioned/index.ts +0 -1
  661. package/src/Versioned.filterMap.test.ts +0 -91
  662. package/src/Versioned.test.ts +0 -23
  663. package/src/Versioned.ts +0 -1
  664. package/src/index.ts +0 -7
@@ -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();
@@ -2,10 +2,42 @@ import type { FlatMapEffectLike } from "./flatMapEffect.js";
2
2
  /**
3
3
  * Maps each element of an Fx to an Effect, ignoring new elements until the current effect completes.
4
4
  *
5
+ * @remarks
6
+ * ## Why
7
+ *
8
+ * This Effect-producing form of {@link exhaustMap} prevents overlapping command
9
+ * Effects while deliberately applying no queue or latest-value replay policy.
10
+ *
11
+ * ## Admission and cardinality
12
+ *
13
+ * The first value while idle starts one Effect and emits its one successful
14
+ * result. For values received while it runs, `f` is still evaluated to construct
15
+ * an Effect, but that Effect is not run or queued.
16
+ *
17
+ * ## Ownership and lifetime
18
+ *
19
+ * Source and callback Effect failures remain typed and callback services are
20
+ * added to the output requirements. The active Effect is owned by the returned
21
+ * Fx's required `Scope`; completion waits for it and interruption runs its
22
+ * finalizers.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * import { Fx } from "@typed/fx"
27
+ * import { Effect } from "effect"
28
+ *
29
+ * const accepted = Fx.exhaustMapEffect(Fx.fromIterable([1, 2]), (id) =>
30
+ * Effect.as(Effect.sleep("20 millis"), `saved:${id}`)
31
+ * )
32
+ *
33
+ * Effect.runPromise(Effect.scoped(Fx.collectAll(accepted))).then(console.log)
34
+ * // ["saved:1"]: the second Effect is constructed but not admitted
35
+ * ```
36
+ *
5
37
  * @param f - A function that maps an element `A` to an `Effect<B>`.
6
38
  * @returns An `Fx` that emits the results of the active effect.
7
39
  * @since 1.0.0
8
- * @category combinators
40
+ * @category Concurrent work
9
41
  */
10
42
  export declare const exhaustMapEffect: FlatMapEffectLike;
11
43
  //# sourceMappingURL=exhaustMapEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exhaustMapEffect.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/exhaustMapEffect.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,iBAM9B,CAAC"}
1
+ {"version":3,"file":"exhaustMapEffect.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/exhaustMapEffect.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,gBAAgB,EAAE,iBAM9B,CAAC"}
@@ -4,9 +4,41 @@ import { exhaustMap } from "./exhaustMap.js";
4
4
  /**
5
5
  * Maps each element of an Fx to an Effect, ignoring new elements until the current effect completes.
6
6
  *
7
+ * @remarks
8
+ * ## Why
9
+ *
10
+ * This Effect-producing form of {@link exhaustMap} prevents overlapping command
11
+ * Effects while deliberately applying no queue or latest-value replay policy.
12
+ *
13
+ * ## Admission and cardinality
14
+ *
15
+ * The first value while idle starts one Effect and emits its one successful
16
+ * result. For values received while it runs, `f` is still evaluated to construct
17
+ * an Effect, but that Effect is not run or queued.
18
+ *
19
+ * ## Ownership and lifetime
20
+ *
21
+ * Source and callback Effect failures remain typed and callback services are
22
+ * added to the output requirements. The active Effect is owned by the returned
23
+ * Fx's required `Scope`; completion waits for it and interruption runs its
24
+ * finalizers.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import { Fx } from "@typed/fx"
29
+ * import { Effect } from "effect"
30
+ *
31
+ * const accepted = Fx.exhaustMapEffect(Fx.fromIterable([1, 2]), (id) =>
32
+ * Effect.as(Effect.sleep("20 millis"), `saved:${id}`)
33
+ * )
34
+ *
35
+ * Effect.runPromise(Effect.scoped(Fx.collectAll(accepted))).then(console.log)
36
+ * // ["saved:1"]: the second Effect is constructed but not admitted
37
+ * ```
38
+ *
7
39
  * @param f - A function that maps an element `A` to an `Effect<B>`.
8
40
  * @returns An `Fx` that emits the results of the active effect.
9
41
  * @since 1.0.0
10
- * @category combinators
42
+ * @category Concurrent work
11
43
  */
12
44
  export const exhaustMapEffect = dual(2, (self, f) => exhaustMap(self, flow(f, fromEffect)));
@@ -1,12 +1,33 @@
1
1
  import type * as Exit from "effect/Exit";
2
2
  import type { Fx } from "../Fx.js";
3
3
  /**
4
- * Materializes the success and failure of an Fx into `Exit` values.
4
+ * Materializes every success and the terminal failure as infallible `Exit` values.
5
+ *
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * Turning both channels into data lets downstream Fx composition inspect
10
+ * complete Effect causes without terminating the pipeline.
11
+ *
12
+ * ## Ownership and lifetime
13
+ *
14
+ * Each source value becomes `Exit.succeed` in arrival order. A source failure,
15
+ * including a defect or interrupt, becomes one `Exit.failCause`, after which
16
+ * the returned Fx completes with error type `never`. It acquires no resource
17
+ * beyond the single source subscription.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { exit } from "@typed/fx/Fx"
22
+ * import { fail } from "@typed/fx/Fx"
23
+ *
24
+ * const outcomes = exit(fail("offline"))
25
+ * ```
5
26
  *
6
27
  * @param fx - The `Fx` stream.
7
28
  * @returns An `Fx` emitting `Exit<A, E>`.
8
29
  * @since 1.0.0
9
- * @category combinators
30
+ * @category Errors and recovery
10
31
  */
11
32
  export declare const exit: <A, E, R>(fx: Fx<A, E, R>) => Fx<Exit.Exit<A, E>, never, R>;
12
33
  //# sourceMappingURL=exit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exit.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/exit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAC;AAGzC,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,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CACJ,CAAC"}
1
+ {"version":3,"file":"exit.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/exit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAC;AAGzC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CACJ,CAAC"}