@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
@@ -3,18 +3,42 @@ import * as Exit from "effect/Exit";
3
3
  import { dual } from "effect/Function";
4
4
  import * as Layer from "effect/Layer";
5
5
  import * as Scope from "effect/Scope";
6
- import * as ServiceMap from "effect/ServiceMap";
6
+ import * as Context from "effect/Context";
7
7
  import { make } from "../constructors/make.js";
8
8
  /**
9
- * Provides context to an Fx from a Layer.
9
+ * Builds a Layer for each subscription and provides it to the entire Fx run.
10
10
  *
11
- * The context is provided to the entire Fx stream, including any effects run
12
- * during its execution. The context is scoped to the lifetime of the stream.
11
+ * @remarks
12
+ * ## Why
13
+ *
14
+ * Fx preserves Effect service requirements in `R`; providing a Layer closes
15
+ * those requirements while retaining acquisition failures and dependencies in
16
+ * the resulting type.
17
+ *
18
+ * ## Ownership and lifetime
19
+ *
20
+ * Each subscription creates a private Scope and builds the Layer inside it
21
+ * before the source starts. A build failure is sent to the sink and the source
22
+ * never runs. Otherwise the built Context is available to every source Effect,
23
+ * and the Scope closes with the source's success, failure, defect, or
24
+ * interruption. Provided services are removed from `R`; Layer dependencies and
25
+ * errors are added.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * import { Context, Effect, Layer } from "effect"
30
+ * import { provide } from "@typed/fx/Fx"
31
+ * import { fromEffect } from "@typed/fx/Fx"
32
+ *
33
+ * class Config extends Context.Service<Config, { readonly url: string }>()("Config") {}
34
+ * const request = fromEffect(Effect.map(Config, ({ url }) => url))
35
+ * const runnable = provide(request, Layer.succeed(Config, { url: "/api" }))
36
+ * ```
13
37
  *
14
38
  * @param layer - The Layer to provide.
15
39
  * @returns An `Fx` with the required context provided.
16
40
  * @since 1.0.0
17
- * @category combinators
41
+ * @category Providing services
18
42
  */
19
43
  export const provide = dual(2, (fx, layer) => make(Effect.fnUntraced(function* (sink) {
20
44
  const scope = yield* Scope.make();
@@ -23,32 +47,129 @@ export const provide = dual(2, (fx, layer) => make(Effect.fnUntraced(function* (
23
47
  yield* Scope.close(scope, servicesExit);
24
48
  return yield* sink.onFailure(servicesExit.cause);
25
49
  }
26
- return yield* fx.run(sink).pipe(Effect.provideServices(servicesExit.value), Effect.onExit((exit) => Scope.close(scope, exit)));
50
+ return yield* fx.run(sink).pipe(Effect.provideContext(servicesExit.value), Effect.onExit((exit) => Scope.close(scope, exit)));
27
51
  })));
28
- export const provideServices = dual(2, (fx, services) => provide(fx, Layer.succeedServices(services)));
29
52
  /**
30
- * Provides a single service to an Fx.
53
+ * Provides an already-built Effect Context to the entire Fx run.
54
+ *
55
+ * @remarks
56
+ * ## Why
57
+ *
58
+ * Callers that already own service instances should not rebuild them through a
59
+ * resourceful Layer merely to satisfy an Fx's environment.
31
60
  *
32
- * Equivalent to `provideServices(fx, ServiceMap.make(tag, service))`. The service
33
- * is available for the entire Fx stream, scoped to the stream lifetime.
61
+ * ## Ownership and lifetime
62
+ *
63
+ * The Context is captured when this combinator is created and reused for each
64
+ * subscription. Its services are available to all source Effects and removed
65
+ * from `R`. This function does not acquire or release those service values;
66
+ * their owner must keep them valid for every subscription that uses the result.
67
+ * Source completion, failure, and interruption are unchanged.
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * import { Context, Effect } from "effect"
72
+ * import { provideContext } from "@typed/fx/Fx"
73
+ * import { fromEffect } from "@typed/fx/Fx"
74
+ *
75
+ * class Config extends Context.Service<Config, { readonly url: string }>()("Config") {}
76
+ * const context = Context.make(Config, { url: "/api" })
77
+ * const runnable = provideContext(fromEffect(Effect.map(Config, (x) => x.url)), context)
78
+ * ```
79
+ *
80
+ * @since 1.0.0
81
+ * @category Providing services
82
+ */
83
+ export const provideContext = dual(2, (fx, services) => provide(fx, Layer.succeedContext(services)));
84
+ /**
85
+ * Provides one existing service value to the entire Fx run.
86
+ *
87
+ * @remarks
88
+ * ## Why
89
+ *
90
+ * This is the precise single-service form of {@link provideContext}, useful for
91
+ * tests and application edges where the instance is already owned.
92
+ *
93
+ * ## Ownership and lifetime
94
+ *
95
+ * The service value is captured and reused for every subscription. It is not
96
+ * acquired or finalized here; its caller owns its lifetime. The matching
97
+ * service identifier is removed from `R`, while values, errors, ordering, and
98
+ * interruption remain those of the source.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * import { Context, Effect } from "effect"
103
+ * import { provideService } from "@typed/fx/Fx"
104
+ * import { fromEffect } from "@typed/fx/Fx"
105
+ *
106
+ * class Config extends Context.Service<Config, { readonly url: string }>()("Config") {}
107
+ * const runnable = provideService(
108
+ * fromEffect(Effect.map(Config, (x) => x.url)),
109
+ * Config,
110
+ * { url: "/api" }
111
+ * )
112
+ * ```
34
113
  *
35
114
  * @param tag - The service tag (identifier).
36
115
  * @param service - The service implementation.
37
116
  * @returns An `Fx` with the required service provided.
38
117
  * @since 1.0.0
39
- * @category combinators
118
+ * @category Providing services
40
119
  */
41
- export const provideService = dual(3, (fx, tag, service) => provideServices(fx, ServiceMap.make(tag, service)));
120
+ export const provideService = dual(3, (fx, tag, service) => provideContext(fx, Context.make(tag, service)));
42
121
  /**
43
- * Provides a single service to an Fx by running an effect that produces the service.
122
+ * Acquires one service with an Effect before running the Fx.
123
+ *
124
+ * @remarks
125
+ * ## Why
126
+ *
127
+ * Some service instances require effectful configuration but do not warrant a
128
+ * separately named Layer. This keeps acquisition failure and dependencies
129
+ * explicit in the returned Fx type.
130
+ *
131
+ * ## Ownership and lifetime
132
+ *
133
+ * The service Effect runs once per subscription while {@link provide} builds
134
+ * its Layer. A failure prevents the source from starting. On success, the
135
+ * service is available for the whole source run and its identifier is removed
136
+ * from `R`; acquisition errors and every requirement in `R2` are added. In
137
+ * particular, an `Effect.acquireRelease` service Effect still leaves
138
+ * `Scope.Scope` in the returned Fx requirements—the private Layer Scope does
139
+ * not erase that public requirement. The caller must provide that Scope.
140
+ *
141
+ * @example
142
+ * ```ts
143
+ * import { Context, Effect } from "effect"
144
+ * import { provideServiceEffect } from "@typed/fx/Fx"
145
+ * import { fromEffect } from "@typed/fx/Fx"
146
+ *
147
+ * class Config extends Context.Service<Config, { readonly url: string }>()("Config") {}
148
+ * const request = fromEffect(Effect.map(Config, (x) => x.url))
149
+ * const runnable = provideServiceEffect(request, Config, Effect.succeed({ url: "/api" }))
150
+ * ```
151
+ *
152
+ * @example Scoped acquisition keeps `Scope` in the returned Fx requirements
153
+ * ```ts
154
+ * import { Context, Effect } from "effect"
155
+ * import { provideServiceEffect } from "@typed/fx/Fx"
156
+ * import { fromEffect } from "@typed/fx/Fx"
157
+ * import { collectAll } from "@typed/fx/Fx"
44
158
  *
45
- * The effect is run when the Fx is run; the resulting service is provided to the
46
- * entire stream. Equivalent to `provide(fx, Layer.effect(tag, serviceEffect))`.
159
+ * class Config extends Context.Service<Config, { readonly url: string }>()("Config") {}
160
+ * const request = fromEffect(Effect.map(Config, (x) => x.url))
161
+ * const acquired = Effect.acquireRelease(
162
+ * Effect.succeed({ url: "/api" }),
163
+ * () => Effect.void
164
+ * )
165
+ * const scopedFx = provideServiceEffect(request, Config, acquired)
166
+ * const program = Effect.scoped(collectAll(scopedFx))
167
+ * ```
47
168
  *
48
169
  * @param tag - The service tag (identifier).
49
170
  * @param serviceEffect - Effect that produces the service (may have its own requirements).
50
171
  * @returns An `Fx` with the required service provided.
51
172
  * @since 1.0.0
52
- * @category combinators
173
+ * @category Providing services
53
174
  */
54
175
  export const provideServiceEffect = dual(3, (fx, tag, serviceEffect) => provide(fx, Layer.effect(tag, serviceEffect)));
@@ -0,0 +1,92 @@
1
+ import type { Fx } from "../Fx.js";
2
+ /**
3
+ * Runs two streams concurrently until one emits, then mirrors the winner and
4
+ * interrupts the other.
5
+ *
6
+ * A failure or completion from one side before the other emits does **not**
7
+ * win unless every side ends without emitting. After a winner is chosen, that
8
+ * stream's later failures are propagated.
9
+ *
10
+ * @remarks
11
+ * ## Why
12
+ *
13
+ * `race` selects a live producer by its first useful value rather than by setup,
14
+ * completion, or a fast failure. This is suitable for redundant sources where a
15
+ * producer that ends silently should not prevent another from becoming useful.
16
+ *
17
+ * ## Selection, ordering, and cardinality
18
+ *
19
+ * Both inputs start concurrently. The first emitted value atomically selects its
20
+ * producer; that value and all later values from the winner are forwarded in
21
+ * order. The loser emits nothing after selection and is interrupted. There is no
22
+ * buffering or replay.
23
+ *
24
+ * ## Ownership and lifetime
25
+ *
26
+ * Before a winner, a non-interruption failure is remembered but does not win; it
27
+ * is reported only if both inputs end without a value. After selection, winner
28
+ * failures are forwarded. Both environments remain required. The observing
29
+ * fiber owns both child fibers and interruption cancels the race and finalizers.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import { Fx } from "@typed/fx"
34
+ * import { Effect } from "effect"
35
+ *
36
+ * const response = Fx.race(
37
+ * Fx.ensuring(Fx.at("slow", "50 millis"), Effect.log("slow closed")),
38
+ * Fx.ensuring(Fx.at("fast", "5 millis"), Effect.log("fast closed"))
39
+ * )
40
+ * Effect.runPromise(Fx.collectAll(response)).then(console.log)
41
+ * // "slow closed" proves loser cleanup; the winning finalizer also runs
42
+ * // resolves ["fast"]
43
+ * ```
44
+ *
45
+ * @since 1.0.0
46
+ * @category Concurrent work
47
+ */
48
+ export declare const race: {
49
+ <AR, ER, RR>(that: Fx<AR, ER, RR>): <AL, EL, RL>(self: Fx<AL, EL, RL>) => Fx<AL | AR, EL | ER, RL | RR>;
50
+ <AL, EL, RL, AR, ER, RR>(self: Fx<AL, EL, RL>, that: Fx<AR, ER, RR>): Fx<AL | AR, EL | ER, RL | RR>;
51
+ };
52
+ /**
53
+ * Races many streams: the first to emit wins and the rest are interrupted.
54
+ *
55
+ * @remarks
56
+ * ## Why
57
+ *
58
+ * `raceAll` extends {@link race} to a runtime-sized set while preserving the
59
+ * first-value selection rule.
60
+ *
61
+ * ## Selection, ordering, and cardinality
62
+ *
63
+ * All inputs start concurrently. The first emitted value selects one input and
64
+ * only that input's values are forwarded afterward. Zero inputs produce the
65
+ * empty Fx; one input is returned unchanged. No result buffer is retained.
66
+ *
67
+ * ## Ownership and lifetime
68
+ *
69
+ * Before selection, the first non-interruption failure is retained and reported
70
+ * only if every input ends without emitting. After selection, winner failures
71
+ * are forwarded. All environments are required. Losers are interrupted and the
72
+ * observing fiber owns cleanup for every child.
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * import { Fx } from "@typed/fx"
77
+ * import { Effect } from "effect"
78
+ *
79
+ * const response = Fx.raceAll(
80
+ * Fx.at("cache", "30 millis"),
81
+ * Fx.at("primary", "5 millis"),
82
+ * Fx.at("replica", "20 millis")
83
+ * )
84
+ * Effect.runPromise(Fx.collectAll(response)).then(console.log)
85
+ * // ["primary"]
86
+ * ```
87
+ *
88
+ * @since 1.0.0
89
+ * @category Concurrent work
90
+ */
91
+ export declare const raceAll: <FX extends ReadonlyArray<Fx<any, any, any>>>(...fxs: FX) => Fx<Fx.Success<FX[number]>, Fx.Error<FX[number]>, Fx.Services<FX[number]>>;
92
+ //# sourceMappingURL=race.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"race.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/race.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,eAAO,MAAM,IAAI,EAAE;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACxG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EACrB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACpB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GACnB,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;CAOlC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,eAAO,MAAM,OAAO,GAAI,EAAE,SAAS,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,UACzD,EAAE,KACT,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAwF1E,CAAC"}
@@ -0,0 +1,149 @@
1
+ import * as Cause from "effect/Cause";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Fiber from "effect/Fiber";
4
+ import { dual } from "effect/Function";
5
+ import * as Ref from "effect/Ref";
6
+ import * as SynchronizedRef from "effect/SynchronizedRef";
7
+ import { make as makeSink } from "../../Sink/Sink.js";
8
+ import { empty } from "../constructors/empty.js";
9
+ import { make } from "../constructors/make.js";
10
+ /**
11
+ * Runs two streams concurrently until one emits, then mirrors the winner and
12
+ * interrupts the other.
13
+ *
14
+ * A failure or completion from one side before the other emits does **not**
15
+ * win unless every side ends without emitting. After a winner is chosen, that
16
+ * stream's later failures are propagated.
17
+ *
18
+ * @remarks
19
+ * ## Why
20
+ *
21
+ * `race` selects a live producer by its first useful value rather than by setup,
22
+ * completion, or a fast failure. This is suitable for redundant sources where a
23
+ * producer that ends silently should not prevent another from becoming useful.
24
+ *
25
+ * ## Selection, ordering, and cardinality
26
+ *
27
+ * Both inputs start concurrently. The first emitted value atomically selects its
28
+ * producer; that value and all later values from the winner are forwarded in
29
+ * order. The loser emits nothing after selection and is interrupted. There is no
30
+ * buffering or replay.
31
+ *
32
+ * ## Ownership and lifetime
33
+ *
34
+ * Before a winner, a non-interruption failure is remembered but does not win; it
35
+ * is reported only if both inputs end without a value. After selection, winner
36
+ * failures are forwarded. Both environments remain required. The observing
37
+ * fiber owns both child fibers and interruption cancels the race and finalizers.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * import { Fx } from "@typed/fx"
42
+ * import { Effect } from "effect"
43
+ *
44
+ * const response = Fx.race(
45
+ * Fx.ensuring(Fx.at("slow", "50 millis"), Effect.log("slow closed")),
46
+ * Fx.ensuring(Fx.at("fast", "5 millis"), Effect.log("fast closed"))
47
+ * )
48
+ * Effect.runPromise(Fx.collectAll(response)).then(console.log)
49
+ * // "slow closed" proves loser cleanup; the winning finalizer also runs
50
+ * // resolves ["fast"]
51
+ * ```
52
+ *
53
+ * @since 1.0.0
54
+ * @category Concurrent work
55
+ */
56
+ export const race = dual(2, (self, that) => raceAll(self, that));
57
+ /**
58
+ * Races many streams: the first to emit wins and the rest are interrupted.
59
+ *
60
+ * @remarks
61
+ * ## Why
62
+ *
63
+ * `raceAll` extends {@link race} to a runtime-sized set while preserving the
64
+ * first-value selection rule.
65
+ *
66
+ * ## Selection, ordering, and cardinality
67
+ *
68
+ * All inputs start concurrently. The first emitted value selects one input and
69
+ * only that input's values are forwarded afterward. Zero inputs produce the
70
+ * empty Fx; one input is returned unchanged. No result buffer is retained.
71
+ *
72
+ * ## Ownership and lifetime
73
+ *
74
+ * Before selection, the first non-interruption failure is retained and reported
75
+ * only if every input ends without emitting. After selection, winner failures
76
+ * are forwarded. All environments are required. Losers are interrupted and the
77
+ * observing fiber owns cleanup for every child.
78
+ *
79
+ * @example
80
+ * ```ts
81
+ * import { Fx } from "@typed/fx"
82
+ * import { Effect } from "effect"
83
+ *
84
+ * const response = Fx.raceAll(
85
+ * Fx.at("cache", "30 millis"),
86
+ * Fx.at("primary", "5 millis"),
87
+ * Fx.at("replica", "20 millis")
88
+ * )
89
+ * Effect.runPromise(Fx.collectAll(response)).then(console.log)
90
+ * // ["primary"]
91
+ * ```
92
+ *
93
+ * @since 1.0.0
94
+ * @category Concurrent work
95
+ */
96
+ export const raceAll = (...fxs) => {
97
+ if (fxs.length === 0) {
98
+ return empty;
99
+ }
100
+ if (fxs.length === 1) {
101
+ return fxs[0];
102
+ }
103
+ return make((sink) => Effect.gen(function* () {
104
+ const winner = yield* SynchronizedRef.make(null);
105
+ const ended = yield* Ref.make(0);
106
+ const firstFail = yield* Ref.make(null);
107
+ const fibersRef = yield* Ref.make([]);
108
+ const interruptOthers = (except) => Effect.flatMap(Ref.get(fibersRef), (fibers) => Effect.forEach(fibers, (fiber, i) => (i === except ? Effect.void : Fiber.interrupt(fiber)), { discard: true }));
109
+ const markEnded = Effect.gen(function* () {
110
+ const current = yield* SynchronizedRef.get(winner);
111
+ if (current !== null)
112
+ return;
113
+ const n = yield* Ref.updateAndGet(ended, (count) => count + 1);
114
+ if (n === fxs.length) {
115
+ const cause = yield* Ref.get(firstFail);
116
+ if (cause !== null) {
117
+ yield* sink.onFailure(cause);
118
+ }
119
+ }
120
+ });
121
+ const fibers = [];
122
+ for (let i = 0; i < fxs.length; i++) {
123
+ const fx = fxs[i];
124
+ const fiber = yield* Effect.forkChild(Effect.flatMap(SynchronizedRef.get(winner), (already) => already !== null
125
+ ? Effect.void
126
+ : fx
127
+ .run(makeSink((cause) => Effect.flatMap(SynchronizedRef.get(winner), (w) => {
128
+ if (w === i)
129
+ return sink.onFailure(cause);
130
+ if (w === null && !Cause.hasInterruptsOnly(cause)) {
131
+ return Ref.update(firstFail, (prev) => prev ?? cause);
132
+ }
133
+ return Effect.void;
134
+ }), (a) => SynchronizedRef.updateEffect(winner, (w) => {
135
+ if (w === null) {
136
+ return interruptOthers(i).pipe(Effect.andThen(sink.onSuccess(a)), Effect.as(i));
137
+ }
138
+ if (w === i) {
139
+ return sink.onSuccess(a).pipe(Effect.as(w));
140
+ }
141
+ return Effect.succeed(w);
142
+ })))
143
+ .pipe(Effect.ensuring(markEnded))), { startImmediately: true, uninterruptible: false });
144
+ fibers.push(fiber);
145
+ }
146
+ yield* Ref.set(fibersRef, fibers);
147
+ yield* Effect.forEach(fibers, (fiber) => Fiber.join(fiber).pipe(Effect.catchCause(() => Effect.void)), { concurrency: "unbounded", discard: true });
148
+ }));
149
+ };
@@ -0,0 +1,41 @@
1
+ import * as Schedule from "effect/Schedule";
2
+ import type { Fx } from "../Fx.js";
3
+ /**
4
+ * Repeats the entire stream according to `schedule` after each successful
5
+ * completion. Failures are not repeated.
6
+ *
7
+ * `Schedule.recurs(n)` runs the stream `n + 1` times (the original plus `n`
8
+ * repeats), matching Effect `Stream.repeat`.
9
+ *
10
+ * @remarks
11
+ * ## Why
12
+ *
13
+ * Repetition is a subscription-level decision: after one producer completes,
14
+ * a Schedule decides whether and when a fresh run should begin. Keeping that
15
+ * decision in Effect's Schedule preserves typed timing services and failures.
16
+ *
17
+ * ## Ownership and lifetime
18
+ *
19
+ * Runs are strictly sequential. Every source value is forwarded before the
20
+ * Schedule is stepped with `void`; a successful step sleeps as configured and
21
+ * starts a new source run. A source failure stops immediately and is never
22
+ * repeated. Schedule failure is forwarded; Schedule completion ends normally.
23
+ * Interruption cancels the active source or schedule sleep. No runs overlap.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * import { Schedule } from "effect"
28
+ * import { repeat } from "@typed/fx/Fx"
29
+ * import { succeed } from "@typed/fx/Fx"
30
+ *
31
+ * const threeTicks = repeat(succeed("tick"), Schedule.recurs(2))
32
+ * ```
33
+ *
34
+ * @since 1.0.0
35
+ * @category Time and rate
36
+ */
37
+ export declare const repeat: {
38
+ <X, E2, R2>(schedule: Schedule.Schedule<X, void, E2, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
39
+ <A, E, R, X, E2, R2>(self: Fx<A, E, R>, schedule: Schedule.Schedule<X, void, E2, R2>): Fx<A, E | E2, R | R2>;
40
+ };
41
+ //# sourceMappingURL=repeat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repeat.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/repeat.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAG5C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,MAAM,EAAE;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EACR,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,GAC3C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,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,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,GAC3C,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAoC1B,CAAC"}
@@ -0,0 +1,57 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { dual } from "effect/Function";
3
+ import * as Pull from "effect/Pull";
4
+ import * as Ref from "effect/Ref";
5
+ import * as Schedule from "effect/Schedule";
6
+ import { make as makeSink } from "../../Sink/Sink.js";
7
+ import { make } from "../constructors/make.js";
8
+ /**
9
+ * Repeats the entire stream according to `schedule` after each successful
10
+ * completion. Failures are not repeated.
11
+ *
12
+ * `Schedule.recurs(n)` runs the stream `n + 1` times (the original plus `n`
13
+ * repeats), matching Effect `Stream.repeat`.
14
+ *
15
+ * @remarks
16
+ * ## Why
17
+ *
18
+ * Repetition is a subscription-level decision: after one producer completes,
19
+ * a Schedule decides whether and when a fresh run should begin. Keeping that
20
+ * decision in Effect's Schedule preserves typed timing services and failures.
21
+ *
22
+ * ## Ownership and lifetime
23
+ *
24
+ * Runs are strictly sequential. Every source value is forwarded before the
25
+ * Schedule is stepped with `void`; a successful step sleeps as configured and
26
+ * starts a new source run. A source failure stops immediately and is never
27
+ * repeated. Schedule failure is forwarded; Schedule completion ends normally.
28
+ * Interruption cancels the active source or schedule sleep. No runs overlap.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * import { Schedule } from "effect"
33
+ * import { repeat } from "@typed/fx/Fx"
34
+ * import { succeed } from "@typed/fx/Fx"
35
+ *
36
+ * const threeTicks = repeat(succeed("tick"), Schedule.recurs(2))
37
+ * ```
38
+ *
39
+ * @since 1.0.0
40
+ * @category Time and rate
41
+ */
42
+ export const repeat = dual(2, (self, schedule) => make((sink) => Effect.gen(function* () {
43
+ const step = yield* Schedule.toStepWithSleep(schedule);
44
+ const failed = yield* Ref.make(false);
45
+ const run = () => self
46
+ .run(makeSink((cause) => Ref.set(failed, true).pipe(Effect.andThen(sink.onFailure(cause))), sink.onSuccess))
47
+ .pipe(Effect.flatMap(() => Effect.flatMap(Ref.get(failed), (didFail) => {
48
+ if (didFail)
49
+ return Effect.void;
50
+ return Pull.matchEffect(step(undefined), {
51
+ onSuccess: run,
52
+ onFailure: sink.onFailure,
53
+ onDone: () => Effect.void,
54
+ });
55
+ })));
56
+ yield* run();
57
+ })));
@@ -14,10 +14,32 @@ import type { Fx } from "../Fx.js";
14
14
  * `Result<A, Cause<E>>`. Consumers can use `Result.match` or `Result.isSuccess` /
15
15
  * `Result.isFailure` to handle success vs failure (including defect/interrupt).
16
16
  *
17
+ * @remarks
18
+ * ## Why
19
+ *
20
+ * `Result` is convenient when success and failure should travel through one
21
+ * data channel, while retaining the complete Cause rather than flattening it
22
+ * into the typed error alone.
23
+ *
24
+ * ## Ownership and lifetime
25
+ *
26
+ * Each source value emits one successful Result in order. A terminal cause
27
+ * emits one failed Result and ends normally. The source is subscribed once;
28
+ * no resource is acquired and an interrupt reported by the source becomes
29
+ * data, although interrupting the outer running fiber still stops the run.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import { result } from "@typed/fx/Fx"
34
+ * import { fail } from "@typed/fx/Fx"
35
+ *
36
+ * const outcomes = result(fail("offline"))
37
+ * ```
38
+ *
17
39
  * @param fx - The `Fx` stream.
18
40
  * @returns An `Fx` emitting `Result<A, Cause<E>>`.
19
41
  * @since 1.0.0
20
- * @category combinators
42
+ * @category Errors and recovery
21
43
  */
22
44
  export declare const result: <A, E, R>(fx: Fx<A, E, R>) => Fx<Result.Result<A, Cause.Cause<E>>, never, R>;
23
45
  //# sourceMappingURL=result.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CACL,CAAC"}
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAM5F,CAAC"}
@@ -13,20 +13,34 @@ import { make } from "../constructors/make.js";
13
13
  * `Result<A, Cause<E>>`. Consumers can use `Result.match` or `Result.isSuccess` /
14
14
  * `Result.isFailure` to handle success vs failure (including defect/interrupt).
15
15
  *
16
+ * @remarks
17
+ * ## Why
18
+ *
19
+ * `Result` is convenient when success and failure should travel through one
20
+ * data channel, while retaining the complete Cause rather than flattening it
21
+ * into the typed error alone.
22
+ *
23
+ * ## Ownership and lifetime
24
+ *
25
+ * Each source value emits one successful Result in order. A terminal cause
26
+ * emits one failed Result and ends normally. The source is subscribed once;
27
+ * no resource is acquired and an interrupt reported by the source becomes
28
+ * data, although interrupting the outer running fiber still stops the run.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * import { result } from "@typed/fx/Fx"
33
+ * import { fail } from "@typed/fx/Fx"
34
+ *
35
+ * const outcomes = result(fail("offline"))
36
+ * ```
37
+ *
16
38
  * @param fx - The `Fx` stream.
17
39
  * @returns An `Fx` emitting `Result<A, Cause<E>>`.
18
40
  * @since 1.0.0
19
- * @category combinators
41
+ * @category Errors and recovery
20
42
  */
21
- export const result = (fx) => make((sink) => fx.run(new ResultSink(sink)));
22
- class ResultSink {
23
- sink;
24
- onSuccess;
25
- onFailure;
26
- constructor(sink) {
27
- this.sink = sink;
28
- const s = sink;
29
- this.onSuccess = (value) => s.onSuccess(Result.succeed(value));
30
- this.onFailure = (cause) => s.onSuccess(Result.fail(cause));
31
- }
32
- }
43
+ export const result = (fx) => make((sink) => fx.run({
44
+ onSuccess: (value) => sink.onSuccess(Result.succeed(value)),
45
+ onFailure: (cause) => sink.onSuccess(Result.fail(cause)),
46
+ }));