@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,76 @@
1
+ import * as Duration from "effect/Duration";
2
+ import type * as Scope from "effect/Scope";
3
+ import type { Fx } from "../Fx.js";
4
+ /**
5
+ * Completes the stream if it does not produce a value (or complete) within
6
+ * `duration` of the previous event. Matches Effect `Stream.timeout`.
7
+ *
8
+ * The timeout is reset after each emission. An infinite duration is a no-op;
9
+ * a zero duration completes immediately.
10
+ *
11
+ * @remarks
12
+ * ## Why
13
+ *
14
+ * Silence is meaningful in push systems. This operator turns an idle period
15
+ * into normal completion without inventing an error type.
16
+ *
17
+ * ## Ownership and lifetime
18
+ *
19
+ * Subscription starts the source and one scoped timer. Each delivered value
20
+ * forwards immediately and rearms the timer. If the timer wins, it interrupts
21
+ * the source and the result completes; the interrupt caused by that timeout is
22
+ * not forwarded. Source failure before the deadline propagates. Interruption
23
+ * clears both source fiber and timer. Infinite duration returns the source;
24
+ * zero duration never starts it.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import { timeout } from "@typed/fx/Fx"
29
+ * import { periodic } from "@typed/fx/Fx"
30
+ *
31
+ * const bounded = timeout(periodic("1 second"), "250 millis")
32
+ * ```
33
+ *
34
+ * @since 1.0.0
35
+ * @category Time and rate
36
+ */
37
+ export declare const timeout: {
38
+ (duration: Duration.Input): <A, E, R>(self: Fx<A, E, R>) => Fx<A, E, R | Scope.Scope>;
39
+ <A, E, R>(self: Fx<A, E, R>, duration: Duration.Input): Fx<A, E, R | Scope.Scope>;
40
+ };
41
+ /**
42
+ * Switches to `fallback` if the source does not produce a value within
43
+ * `duration` of the previous event. Matches Effect `Stream.timeoutOrElse`
44
+ * and RxJS `timeoutTo`.
45
+ *
46
+ * @remarks
47
+ * ## Why
48
+ *
49
+ * A fallback lets an idle producer hand ownership to another push source while
50
+ * preserving both sources' precise values, failures, and services.
51
+ *
52
+ * ## Ownership and lifetime
53
+ *
54
+ * The source and resettable timer start first. On timeout the source is
55
+ * interrupted, then one fallback subscription starts; the two producers never
56
+ * overlap. A source failure before timeout propagates and does not start the
57
+ * fallback. Interruption stops the active producer and timer. Infinite duration
58
+ * returns the source unchanged; zero duration returns the fallback without
59
+ * starting the source.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * import { timeoutTo } from "@typed/fx/Fx"
64
+ * import { periodic, succeed } from "@typed/fx/Fx"
65
+ *
66
+ * const available = timeoutTo(periodic("1 second"), "250 millis", succeed("offline"))
67
+ * ```
68
+ *
69
+ * @since 1.0.0
70
+ * @category Time and rate
71
+ */
72
+ export declare const timeoutTo: {
73
+ <B, E2, R2>(duration: Duration.Input, fallback: Fx<B, E2, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A | B, E | E2, R | R2 | Scope.Scope>;
74
+ <A, E, R, B, E2, R2>(self: Fx<A, E, R>, duration: Duration.Input, fallback: Fx<B, E2, R2>): Fx<A | B, E | E2, R | R2 | Scope.Scope>;
75
+ };
76
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAM5C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAI3C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AA6CnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,OAAO,EAAE;IACpB,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,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,KAAK,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;CAMlF,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,SAAS,EAAE;IACtB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EACR,QAAQ,EAAE,QAAQ,CAAC,KAAK,EACxB,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GACtB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACjB,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjB,QAAQ,EAAE,QAAQ,CAAC,KAAK,EACxB,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GACtB,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;CAa5C,CAAC"}
@@ -0,0 +1,110 @@
1
+ import * as Duration from "effect/Duration";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Fiber from "effect/Fiber";
4
+ import * as FiberHandle from "effect/FiberHandle";
5
+ import { dual } from "effect/Function";
6
+ import * as Ref from "effect/Ref";
7
+ import { make as makeSink } from "../../Sink/Sink.js";
8
+ import { empty } from "../constructors/empty.js";
9
+ import { make } from "../constructors/make.js";
10
+ import { extendScope } from "../internal/scope.js";
11
+ const runTimed = (self, duration, fallback) => make(Effect.fn(function* (sink) {
12
+ const timedOut = yield* Ref.make(false);
13
+ const sourceFiber = yield* Ref.make(null);
14
+ const timer = yield* FiberHandle.make();
15
+ const onTimeout = Effect.gen(function* () {
16
+ yield* Ref.set(timedOut, true);
17
+ const fiber = yield* Ref.get(sourceFiber);
18
+ if (fiber)
19
+ yield* Fiber.interrupt(fiber);
20
+ });
21
+ const arm = FiberHandle.run(timer, Effect.sleep(duration).pipe(Effect.andThen(onTimeout)));
22
+ const fiber = yield* Effect.forkChild(self.run(makeSink((cause) => Effect.flatMap(Ref.get(timedOut), (didTimeout) => didTimeout ? Effect.void : sink.onFailure(cause)), (a) => sink.onSuccess(a).pipe(Effect.andThen(arm)))));
23
+ yield* Ref.set(sourceFiber, fiber);
24
+ yield* arm;
25
+ yield* Fiber.join(fiber).pipe(Effect.catchCause(() => Effect.void));
26
+ yield* FiberHandle.clear(timer);
27
+ if ((yield* Ref.get(timedOut)) && fallback !== undefined) {
28
+ yield* fallback.run(sink);
29
+ }
30
+ }, extendScope));
31
+ /**
32
+ * Completes the stream if it does not produce a value (or complete) within
33
+ * `duration` of the previous event. Matches Effect `Stream.timeout`.
34
+ *
35
+ * The timeout is reset after each emission. An infinite duration is a no-op;
36
+ * a zero duration completes immediately.
37
+ *
38
+ * @remarks
39
+ * ## Why
40
+ *
41
+ * Silence is meaningful in push systems. This operator turns an idle period
42
+ * into normal completion without inventing an error type.
43
+ *
44
+ * ## Ownership and lifetime
45
+ *
46
+ * Subscription starts the source and one scoped timer. Each delivered value
47
+ * forwards immediately and rearms the timer. If the timer wins, it interrupts
48
+ * the source and the result completes; the interrupt caused by that timeout is
49
+ * not forwarded. Source failure before the deadline propagates. Interruption
50
+ * clears both source fiber and timer. Infinite duration returns the source;
51
+ * zero duration never starts it.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import { timeout } from "@typed/fx/Fx"
56
+ * import { periodic } from "@typed/fx/Fx"
57
+ *
58
+ * const bounded = timeout(periodic("1 second"), "250 millis")
59
+ * ```
60
+ *
61
+ * @since 1.0.0
62
+ * @category Time and rate
63
+ */
64
+ export const timeout = dual(2, (self, duration) => {
65
+ const d = Duration.fromInputUnsafe(duration);
66
+ if (!Duration.isFinite(d))
67
+ return self;
68
+ if (Duration.isZero(d))
69
+ return empty;
70
+ return runTimed(self, d, undefined);
71
+ });
72
+ /**
73
+ * Switches to `fallback` if the source does not produce a value within
74
+ * `duration` of the previous event. Matches Effect `Stream.timeoutOrElse`
75
+ * and RxJS `timeoutTo`.
76
+ *
77
+ * @remarks
78
+ * ## Why
79
+ *
80
+ * A fallback lets an idle producer hand ownership to another push source while
81
+ * preserving both sources' precise values, failures, and services.
82
+ *
83
+ * ## Ownership and lifetime
84
+ *
85
+ * The source and resettable timer start first. On timeout the source is
86
+ * interrupted, then one fallback subscription starts; the two producers never
87
+ * overlap. A source failure before timeout propagates and does not start the
88
+ * fallback. Interruption stops the active producer and timer. Infinite duration
89
+ * returns the source unchanged; zero duration returns the fallback without
90
+ * starting the source.
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * import { timeoutTo } from "@typed/fx/Fx"
95
+ * import { periodic, succeed } from "@typed/fx/Fx"
96
+ *
97
+ * const available = timeoutTo(periodic("1 second"), "250 millis", succeed("offline"))
98
+ * ```
99
+ *
100
+ * @since 1.0.0
101
+ * @category Time and rate
102
+ */
103
+ export const timeoutTo = dual(3, (self, duration, fallback) => {
104
+ const d = Duration.fromInputUnsafe(duration);
105
+ if (!Duration.isFinite(d))
106
+ return self;
107
+ if (Duration.isZero(d))
108
+ return fallback;
109
+ return runTimed(self, d, fallback);
110
+ });
@@ -4,10 +4,25 @@ import type { Fx } from "../Fx.js";
4
4
  * The resulting Fx waits for all input streams to emit at least once before emitting the first tuple.
5
5
  * Afterwards, it emits a new tuple whenever any input stream emits a new value.
6
6
  *
7
+ * @remarks
8
+ * ## Why
9
+ * `tuple` combines independent push sources by latest value while retaining their positional types.
10
+ * It emits nothing until every source has produced once, then emits a snapshot after any update.
11
+ *
12
+ * ## Ownership and lifetime
13
+ * All inputs run concurrently as children of the consumer and one latest value per input is retained
14
+ * for that run. Failure/interruption stops the group; normal completion waits for every input.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { Fx } from "@typed/fx"
19
+ * const point = Fx.tuple(Fx.succeed(10), Fx.succeed(20))
20
+ * ```
21
+ *
7
22
  * @param fxs - The Fx streams to combine.
8
23
  * @returns An `Fx` emitting tuples of values.
9
24
  * @since 1.0.0
10
- * @category combinators
25
+ * @category Combining sources
11
26
  */
12
27
  export declare function tuple<FX extends ReadonlyArray<Fx<any, any, any>>>(...fxs: FX): Fx<{
13
28
  readonly [K in keyof FX]: Fx.Success<FX[K]>;
@@ -16,10 +31,25 @@ export declare function tuple<FX extends ReadonlyArray<Fx<any, any, any>>>(...fx
16
31
  * Combines a record of Fx streams into a single Fx that emits a record of the latest values.
17
32
  * Similar to `tuple`, but for objects.
18
33
  *
34
+ * @remarks
35
+ * ## Why
36
+ * `struct` gives latest-value combination stable field names. It waits for every field once and
37
+ * then emits a new immutable record when any field source updates.
38
+ *
39
+ * ## Ownership and lifetime
40
+ * It delegates concurrent ownership and retained latest values to `tuple`. Input failures and
41
+ * services are unioned, and all runs end with the consuming Fx.
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * import { Fx } from "@typed/fx"
46
+ * const user = Fx.struct({ name: Fx.succeed("Ada"), online: Fx.succeed(true) })
47
+ * ```
48
+ *
19
49
  * @param fxs - A record of Fx streams.
20
50
  * @returns An `Fx` emitting records of values.
21
51
  * @since 1.0.0
22
- * @category combinators
52
+ * @category Combining sources
23
53
  */
24
54
  export declare function struct<FXS extends Readonly<Record<string, Fx<any, any, any>>>>(fxs: FXS): Fx<{
25
55
  readonly [K in keyof FXS]: Fx.Success<FXS[K]>;
@@ -1 +1 @@
1
- {"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/tuple.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAGnC;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAC/D,GAAG,GAAG,EAAE,EAAE,GACT,EAAE,CACH;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAAE,EAC/C,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EACpB,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CACxB,CA+BA;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAC5E,GAAG,EAAE,GAAG,GACP,EAAE,CACH;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,EACjD,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EACxB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAC5B,CAOA"}
1
+ {"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/tuple.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAGnC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAC/D,GAAG,GAAG,EAAE,EAAE,GACT,EAAE,CACH;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAAE,EAC/C,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EACpB,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CACxB,CAiCA;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,MAAM,CAAC,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAC5E,GAAG,EAAE,GAAG,GACP,EAAE,CACH;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,EACjD,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EACxB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAC5B,CAOA"}
@@ -8,16 +8,32 @@ import { map } from "./map.js";
8
8
  * The resulting Fx waits for all input streams to emit at least once before emitting the first tuple.
9
9
  * Afterwards, it emits a new tuple whenever any input stream emits a new value.
10
10
  *
11
+ * @remarks
12
+ * ## Why
13
+ * `tuple` combines independent push sources by latest value while retaining their positional types.
14
+ * It emits nothing until every source has produced once, then emits a snapshot after any update.
15
+ *
16
+ * ## Ownership and lifetime
17
+ * All inputs run concurrently as children of the consumer and one latest value per input is retained
18
+ * for that run. Failure/interruption stops the group; normal completion waits for every input.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { Fx } from "@typed/fx"
23
+ * const point = Fx.tuple(Fx.succeed(10), Fx.succeed(20))
24
+ * ```
25
+ *
11
26
  * @param fxs - The Fx streams to combine.
12
27
  * @returns An `Fx` emitting tuples of values.
13
28
  * @since 1.0.0
14
- * @category combinators
29
+ * @category Combining sources
15
30
  */
16
31
  export function tuple(...fxs) {
17
32
  if (fxs.length === 0)
18
33
  return succeed([]);
19
- if (fxs.length === 1)
20
- return fxs[0];
34
+ if (fxs.length === 1) {
35
+ return map(fxs[0], (value) => [value]);
36
+ }
21
37
  return make(Effect.fn(function* (sink) {
22
38
  const len = fxs.length;
23
39
  // oxlint-disable-next-line unicorn/no-new-array
@@ -27,7 +43,7 @@ export function tuple(...fxs) {
27
43
  result[i] = value;
28
44
  filled.add(i);
29
45
  if (filled.size === len) {
30
- yield* sink.onSuccess(result);
46
+ yield* sink.onSuccess(result.slice(0));
31
47
  }
32
48
  }))), { concurrency: "unbounded", discard: true });
33
49
  }));
@@ -36,10 +52,25 @@ export function tuple(...fxs) {
36
52
  * Combines a record of Fx streams into a single Fx that emits a record of the latest values.
37
53
  * Similar to `tuple`, but for objects.
38
54
  *
55
+ * @remarks
56
+ * ## Why
57
+ * `struct` gives latest-value combination stable field names. It waits for every field once and
58
+ * then emits a new immutable record when any field source updates.
59
+ *
60
+ * ## Ownership and lifetime
61
+ * It delegates concurrent ownership and retained latest values to `tuple`. Input failures and
62
+ * services are unioned, and all runs end with the consuming Fx.
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * import { Fx } from "@typed/fx"
67
+ * const user = Fx.struct({ name: Fx.succeed("Ada"), online: Fx.succeed(true) })
68
+ * ```
69
+ *
39
70
  * @param fxs - A record of Fx streams.
40
71
  * @returns An `Fx` emitting records of values.
41
72
  * @since 1.0.0
42
- * @category combinators
73
+ * @category Combining sources
43
74
  */
44
75
  export function struct(fxs) {
45
76
  return map(tuple(...Object.entries(fxs).map(([key, fx]) => map(fx, (value) => [key, value]))), Object.fromEntries);
@@ -0,0 +1,27 @@
1
+ import type { Fx } from "../Fx.js";
2
+ /**
3
+ * Forwards `events` until `signal` emits, then interrupts `events`.
4
+ *
5
+ * @remarks
6
+ * ## Why
7
+ * `until` gives an event source an external stop boundary. Event values retain their order until
8
+ * the first signal; the signal itself is not emitted and the event run then completes by interruption.
9
+ *
10
+ * ## Ownership and lifetime
11
+ * Both sources start behind one gate in a private Scope. Event completion cancels the signal;
12
+ * signaling cancels events; failures are forwarded unless they are the expected cancellation.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { Fx } from "@typed/fx"
17
+ * const bounded = Fx.until(Fx.fromIterable([1, 2, 3]), Fx.succeed("stop"))
18
+ * ```
19
+ *
20
+ * @since 1.0.0
21
+ * @category Time and rate
22
+ */
23
+ export declare const until: {
24
+ <B, E2, R2>(signal: Fx<B, E2, R2>): <A, E, R>(events: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
25
+ <A, E, R, B, E2, R2>(events: Fx<A, E, R>, signal: Fx<B, E2, R2>): Fx<A, E | E2, R | R2>;
26
+ };
27
+ //# sourceMappingURL=until.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"until.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/until.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAInC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,KAAK,EAAE;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5F,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAmEzF,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { Cause, Deferred, Effect, Exit, Fiber, Ref, Scope } from "effect";
2
+ import { dual } from "effect/Function";
3
+ import { make } from "../constructors/make.js";
4
+ import { observe } from "../run/observe.js";
5
+ import { take } from "./take.js";
6
+ /**
7
+ * Forwards `events` until `signal` emits, then interrupts `events`.
8
+ *
9
+ * @remarks
10
+ * ## Why
11
+ * `until` gives an event source an external stop boundary. Event values retain their order until
12
+ * the first signal; the signal itself is not emitted and the event run then completes by interruption.
13
+ *
14
+ * ## Ownership and lifetime
15
+ * Both sources start behind one gate in a private Scope. Event completion cancels the signal;
16
+ * signaling cancels events; failures are forwarded unless they are the expected cancellation.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * import { Fx } from "@typed/fx"
21
+ * const bounded = Fx.until(Fx.fromIterable([1, 2, 3]), Fx.succeed("stop"))
22
+ * ```
23
+ *
24
+ * @since 1.0.0
25
+ * @category Time and rate
26
+ */
27
+ export const until = dual(2, (events, signal) => make(Effect.fn(function* (sink) {
28
+ const scope = yield* Scope.make();
29
+ const cancellingSignal = yield* Ref.make(false);
30
+ yield* Effect.gen(function* () {
31
+ const startupGate = yield* Deferred.make();
32
+ const eventsFiberRef = yield* Ref.make(null);
33
+ const signaled = yield* Ref.make(false);
34
+ const stopEvents = Effect.uninterruptible(Effect.gen(function* () {
35
+ yield* Ref.set(signaled, true);
36
+ const eventsFiber = yield* Ref.get(eventsFiberRef);
37
+ if (eventsFiber !== null)
38
+ yield* Fiber.interrupt(eventsFiber);
39
+ }));
40
+ const signalFiber = yield* Effect.forkIn(Deferred.await(startupGate).pipe(Effect.andThen(signal.pipe(take(1), observe(() => stopEvents))), Effect.catchCause((cause) => Effect.flatMap(Ref.get(cancellingSignal), (didCancelSignal) => didCancelSignal
41
+ ? Effect.failCause(cause)
42
+ : Effect.uninterruptible(sink.onFailure(cause).pipe(Effect.andThen(stopEvents)))))), scope);
43
+ const eventsFiber = yield* Effect.forkIn(Deferred.await(startupGate).pipe(Effect.andThen(events.run(sink))), scope);
44
+ yield* Ref.set(eventsFiberRef, eventsFiber);
45
+ yield* Deferred.succeed(startupGate, undefined);
46
+ const eventsExit = yield* Fiber.await(eventsFiber);
47
+ yield* Ref.set(cancellingSignal, true);
48
+ yield* Fiber.interrupt(signalFiber);
49
+ if (Exit.isFailure(eventsExit)) {
50
+ const didSignal = yield* Ref.get(signaled);
51
+ if (!(didSignal && Cause.hasInterruptsOnly(eventsExit.cause))) {
52
+ return yield* Effect.failCause(eventsExit.cause);
53
+ }
54
+ }
55
+ }).pipe(Effect.onExit((exit) => Ref.set(cancellingSignal, true).pipe(Effect.andThen(Scope.close(scope, exit)))));
56
+ })));
@@ -3,10 +3,39 @@ import type { Fx } from "../Fx.js";
3
3
  /**
4
4
  * Unwraps an Effect that produces an Fx into a single Fx.
5
5
  *
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * `unwrap` defers choosing or acquiring a producer until observation, while
10
+ * keeping the Effect and the selected Fx in one typed push pipeline.
11
+ *
12
+ * ## Execution and cardinality
13
+ *
14
+ * Each observation runs `effect` once. On success, the produced Fx is observed
15
+ * and all of its values are forwarded in order. The acquisition Effect itself
16
+ * emits no value, and the inner is never started if acquisition fails.
17
+ *
18
+ * ## Ownership and lifetime
19
+ *
20
+ * Acquisition and inner failures are forwarded and both environments remain in
21
+ * the returned type. `unwrap` does not create a Scope or hide one: interruption
22
+ * stops whichever phase is active, and any resourceful Effect or inner Fx must
23
+ * expose and receive its own `Scope` requirement.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * import { Fx } from "@typed/fx"
28
+ * import { Effect } from "effect"
29
+ *
30
+ * const selected = Fx.unwrap(
31
+ * Effect.succeed(Fx.fromIterable(["ready", "running"]))
32
+ * )
33
+ * ```
34
+ *
6
35
  * @param effect - An `Effect` that produces an `Fx`.
7
36
  * @returns An `Fx` that runs the effect and then the produced Fx.
8
37
  * @since 1.0.0
9
- * @category combinators
38
+ * @category Generator composition
10
39
  */
11
- export declare const unwrap: <A, E, R, E2, R2>(effect: Effect.Effect<Fx<A, E, R>, E2, R2>) => Fx<A, E | E2, R | R2>;
40
+ export declare const unwrap: <A = never, E = never, R = never, E2 = never, R2 = never>(effect: Effect.Effect<Fx<A, E, R>, E2, R2>) => Fx<A, E | E2, R | R2>;
12
41
  //# sourceMappingURL=unwrap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unwrap.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/unwrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACpC,QAAQ,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,KACzC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAMpB,CAAC"}
1
+ {"version":3,"file":"unwrap.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/unwrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,UACpE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,KACzC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAMpB,CAAC"}
@@ -3,10 +3,39 @@ import { make } from "../constructors/make.js";
3
3
  /**
4
4
  * Unwraps an Effect that produces an Fx into a single Fx.
5
5
  *
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * `unwrap` defers choosing or acquiring a producer until observation, while
10
+ * keeping the Effect and the selected Fx in one typed push pipeline.
11
+ *
12
+ * ## Execution and cardinality
13
+ *
14
+ * Each observation runs `effect` once. On success, the produced Fx is observed
15
+ * and all of its values are forwarded in order. The acquisition Effect itself
16
+ * emits no value, and the inner is never started if acquisition fails.
17
+ *
18
+ * ## Ownership and lifetime
19
+ *
20
+ * Acquisition and inner failures are forwarded and both environments remain in
21
+ * the returned type. `unwrap` does not create a Scope or hide one: interruption
22
+ * stops whichever phase is active, and any resourceful Effect or inner Fx must
23
+ * expose and receive its own `Scope` requirement.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * import { Fx } from "@typed/fx"
28
+ * import { Effect } from "effect"
29
+ *
30
+ * const selected = Fx.unwrap(
31
+ * Effect.succeed(Fx.fromIterable(["ready", "running"]))
32
+ * )
33
+ * ```
34
+ *
6
35
  * @param effect - An `Effect` that produces an `Fx`.
7
36
  * @returns An `Fx` that runs the effect and then the produced Fx.
8
37
  * @since 1.0.0
9
- * @category combinators
38
+ * @category Generator composition
10
39
  */
11
40
  export const unwrap = (effect) => make((sink) => Effect.matchCauseEffect(effect, {
12
41
  onFailure: (cause) => sink.onFailure(cause),
@@ -6,10 +6,43 @@ import type { Fx } from "../Fx.js";
6
6
  *
7
7
  * The scope of the effect is closed when the Fx completes or is interrupted.
8
8
  *
9
+ * @remarks
10
+ * ## Why
11
+ *
12
+ * `unwrapScoped` is the safe boundary for an Effect that acquires resources
13
+ * while choosing an Fx. It discharges the inner `Scope` requirement instead of
14
+ * leaking acquisition lifetime to every consumer.
15
+ *
16
+ * ## Execution and cardinality
17
+ *
18
+ * Each observation opens one Scope, runs `effect` once, then forwards every
19
+ * value from the produced Fx in order. The inner never starts if acquisition
20
+ * fails, and the acquisition Effect adds no output value.
21
+ *
22
+ * ## Ownership and lifetime
23
+ *
24
+ * Acquisition and inner failures are forwarded. Non-Scope services from both
25
+ * phases remain required. The opened Scope owns resources acquired by both the
26
+ * Effect and produced Fx; it closes after normal completion, failure, or
27
+ * interruption, running finalizers exactly at the observation boundary.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * import { Fx } from "@typed/fx"
32
+ * import { Effect } from "effect"
33
+ *
34
+ * const scoped = Fx.unwrapScoped(
35
+ * Effect.acquireRelease(
36
+ * Effect.succeed(Fx.succeed("connected")),
37
+ * () => Effect.void
38
+ * )
39
+ * )
40
+ * ```
41
+ *
9
42
  * @param effect - An `Effect` that produces an `Fx`.
10
43
  * @returns An `Fx` that runs the effect and then the produced Fx.
11
44
  * @since 1.0.0
12
- * @category combinators
45
+ * @category Generator composition
13
46
  */
14
47
  export declare const unwrapScoped: <A, E, R, E2, R2>(effect: Effect.Effect<Fx<A, E, R>, E2, R2 | Scope.Scope>) => Fx<A, E | E2, Exclude<R | R2, Scope.Scope>>;
15
48
  //# sourceMappingURL=unwrapScoped.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unwrapScoped.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/unwrapScoped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAC1C,QAAQ,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,KACvD,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAQ1C,CAAC"}
1
+ {"version":3,"file":"unwrapScoped.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/unwrapScoped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,UAClC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,KACvD,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAQ1C,CAAC"}
@@ -5,10 +5,43 @@ import { make } from "../constructors/make.js";
5
5
  *
6
6
  * The scope of the effect is closed when the Fx completes or is interrupted.
7
7
  *
8
+ * @remarks
9
+ * ## Why
10
+ *
11
+ * `unwrapScoped` is the safe boundary for an Effect that acquires resources
12
+ * while choosing an Fx. It discharges the inner `Scope` requirement instead of
13
+ * leaking acquisition lifetime to every consumer.
14
+ *
15
+ * ## Execution and cardinality
16
+ *
17
+ * Each observation opens one Scope, runs `effect` once, then forwards every
18
+ * value from the produced Fx in order. The inner never starts if acquisition
19
+ * fails, and the acquisition Effect adds no output value.
20
+ *
21
+ * ## Ownership and lifetime
22
+ *
23
+ * Acquisition and inner failures are forwarded. Non-Scope services from both
24
+ * phases remain required. The opened Scope owns resources acquired by both the
25
+ * Effect and produced Fx; it closes after normal completion, failure, or
26
+ * interruption, running finalizers exactly at the observation boundary.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * import { Fx } from "@typed/fx"
31
+ * import { Effect } from "effect"
32
+ *
33
+ * const scoped = Fx.unwrapScoped(
34
+ * Effect.acquireRelease(
35
+ * Effect.succeed(Fx.succeed("connected")),
36
+ * () => Effect.void
37
+ * )
38
+ * )
39
+ * ```
40
+ *
8
41
  * @param effect - An `Effect` that produces an `Fx`.
9
42
  * @returns An `Fx` that runs the effect and then the produced Fx.
10
43
  * @since 1.0.0
11
- * @category combinators
44
+ * @category Generator composition
12
45
  */
13
46
  export const unwrapScoped = (effect) => make((sink) => Effect.scoped(Effect.matchCauseEffect(effect, {
14
47
  onFailure: (cause) => sink.onFailure(cause),
@@ -3,11 +3,27 @@ import type { Fx } from "../Fx.js";
3
3
  /**
4
4
  * Conditionally runs one of two Fx streams based on the boolean value emitted by the condition stream.
5
5
  *
6
+ * @remarks
7
+ * ## Why
8
+ * `if` turns boolean pushes into a switchable branch. Each condition value selects one branch,
9
+ * interrupts the previous branch, and forwards only values from the currently selected Fx.
10
+ *
11
+ * ## Ownership and lifetime
12
+ * The required Scope owns the active branch. Replacement interrupts and awaits the previous branch;
13
+ * consumer interruption closes the active work. Failures are delivered to the Sink and only become
14
+ * terminal when the chosen Sink policy interrupts observation.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { Fx } from "@typed/fx"
19
+ * const status = Fx.if(Fx.fromIterable([true, false]), { onTrue: Fx.succeed("on"), onFalse: Fx.succeed("off") })
20
+ * ```
21
+ *
6
22
  * @param condition - An `Fx` emitting booleans.
7
23
  * @param matchers - An object containing `onTrue` and `onFalse` Fx streams.
8
24
  * @returns An `Fx` that switches between `onTrue` and `onFalse` based on the condition.
9
25
  * @since 1.0.0
10
- * @category combinators
26
+ * @category Conditional sources
11
27
  */
12
28
  declare const if_: {
13
29
  <B, E2, R2, C, E3, R3>(matchers: {
@@ -23,11 +39,30 @@ export { if_ as if };
23
39
  /**
24
40
  * Conditionally emits one of two values based on the boolean value emitted by the condition stream.
25
41
  *
42
+ * @remarks
43
+ * ## Why
44
+ * `when` is the value-only form of `if`, implemented with `switchMap`. Each condition push selects a
45
+ * constant inner Fx, but a newer condition can interrupt that inner before it emits; output
46
+ * cardinality can therefore be lower than the number of condition values.
47
+ *
48
+ * ## Ownership and lifetime
49
+ * It delegates branch switching to `if`; its constant branches acquire no resources. The Scope owns
50
+ * scheduled branch fibers, replacement awaits their interruption, and source completion waits for
51
+ * the latest selected branch.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import { Fx } from "@typed/fx"
56
+ * const program = Fx.collectAll(
57
+ * Fx.when(Fx.fromIterable([true, false]), { onTrue: "yes", onFalse: "no" })
58
+ * ) // the later `false` may replace `true` before "yes" is emitted
59
+ * ```
60
+ *
26
61
  * @param condition - An `Fx` emitting booleans.
27
62
  * @param matchers - An object containing `onTrue` and `onFalse` values.
28
63
  * @returns An `Fx` that emits the matched value.
29
64
  * @since 1.0.0
30
- * @category combinators
65
+ * @category Conditional sources
31
66
  */
32
67
  export declare const when: <E, R, B, C>(condition: Fx<boolean, E, R>, matchers: {
33
68
  onTrue: B;