@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
package/src/Sink/index.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from "./combinators.js";
2
- export * from "./Sink.js";
@@ -1,88 +0,0 @@
1
- import { assert, describe, it } from "vitest";
2
- import * as Cause from "effect/Cause";
3
- import * as Effect from "effect/Effect";
4
- import * as Ref from "effect/Ref";
5
- import { Fx, Sink } from "./index.js";
6
-
7
- describe("Sink.mapError", () => {
8
- it("maps failure cause before passing to inner sink", () =>
9
- Effect.gen(function* () {
10
- const failures = yield* Ref.make<Array<number>>([]);
11
- const sink = Sink.make<unknown, number, never>(
12
- (cause) =>
13
- Ref.update(failures, (list) => {
14
- const f = Cause.findFail(cause);
15
- if (f._tag === "Success") list.push(f.success.error as number);
16
- return list;
17
- }),
18
- () => Effect.void,
19
- );
20
- const mapped = Sink.mapError(sink, (s: string) => s.length);
21
- yield* Fx.fail("err").run(mapped);
22
- const list = yield* Ref.get(failures);
23
- assert.deepStrictEqual(list, [3]);
24
- }).pipe(Effect.scoped, Effect.runPromise));
25
-
26
- it("preserves success path", () =>
27
- Effect.gen(function* () {
28
- const out = yield* Ref.make<number[]>([]);
29
- const sink = Sink.make<number, string, never>(
30
- (_cause) => Effect.void,
31
- (n: number) => Ref.update(out, (arr) => [...arr, n]),
32
- );
33
- const mapped = Sink.mapError(sink, (e: string) => e);
34
- yield* Fx.fromIterable([1, 2, 3]).run(mapped);
35
- const list = yield* Ref.get(out);
36
- assert.deepStrictEqual(list, [1, 2, 3]);
37
- }).pipe(Effect.scoped, Effect.runPromise));
38
- });
39
-
40
- describe("Sink.mapInput", () => {
41
- it("transforms input before sink (same as map)", () =>
42
- Effect.gen(function* () {
43
- const out = yield* Ref.make<number[]>([]);
44
- const sink = Sink.make(
45
- () => Effect.void,
46
- (n: number) => Ref.update(out, (arr) => [...arr, n]),
47
- );
48
- const mapped = Sink.mapInput(sink, (s: string) => parseInt(s, 10));
49
- yield* Fx.fromIterable(["1", "2", "3"]).run(mapped);
50
- const list = yield* Ref.get(out);
51
- assert.deepStrictEqual(list, [1, 2, 3]);
52
- }).pipe(Effect.scoped, Effect.runPromise));
53
- });
54
-
55
- describe("Sink.mapInputEffect", () => {
56
- it("transforms input with effect before sink (same as mapEffect)", () =>
57
- Effect.gen(function* () {
58
- const out = yield* Ref.make<number[]>([]);
59
- const sink = Sink.make(
60
- () => Effect.void,
61
- (n: number) => Ref.update(out, (arr) => [...arr, n]),
62
- );
63
- const mapped = Sink.mapInputEffect(sink, (s: string) => Effect.succeed(parseInt(s, 10)));
64
- yield* Fx.fromIterable(["1", "2", "3"]).run(mapped);
65
- const list = yield* Ref.get(out);
66
- assert.deepStrictEqual(list, [1, 2, 3]);
67
- }).pipe(Effect.scoped, Effect.runPromise));
68
-
69
- it("propagates effect failure to sink onFailure", () =>
70
- Effect.gen(function* () {
71
- const failures = yield* Ref.make<Array<string>>([]);
72
- const sink = Sink.make<number, string, never>(
73
- (cause) =>
74
- Ref.update(failures, (list) => {
75
- const f = Cause.findFail(cause);
76
- if (f._tag === "Success") list.push(f.success.error as string);
77
- return list;
78
- }),
79
- (_n: number) => Effect.void,
80
- );
81
- const mapped = Sink.mapInputEffect(sink, (s: string) =>
82
- s === "bad" ? Effect.fail("parse failed") : Effect.succeed(parseInt(s, 10)),
83
- );
84
- yield* Fx.fromIterable(["1", "bad", "3"]).run(mapped);
85
- const list = yield* Ref.get(failures);
86
- assert.deepStrictEqual(list, ["parse failed"]);
87
- }).pipe(Effect.scoped, Effect.runPromise));
88
- });
@@ -1,107 +0,0 @@
1
- import { assert, describe, it } from "vitest";
2
- import * as Effect from "effect/Effect";
3
- import * as Option from "effect/Option";
4
- import * as Ref from "effect/Ref";
5
- import { Fx, Sink } from "./index.js";
6
-
7
- describe("Sink.reduce", () => {
8
- it("reduces values with pure function", () =>
9
- Effect.gen(function* () {
10
- const ref = yield* Ref.make(0);
11
- const sink = Sink.reduce(ref, (acc: number, n: number) => acc + n);
12
- yield* Fx.fromIterable([1, 2, 3]).run(sink);
13
- const result = yield* Ref.get(ref);
14
- assert.strictEqual(result, 6);
15
- }).pipe(Effect.scoped, Effect.runPromise));
16
-
17
- it("uses initial value when no elements", () =>
18
- Effect.gen(function* () {
19
- const ref = yield* Ref.make(10);
20
- const sink = Sink.reduce(ref, (acc: number, n: number) => acc + n);
21
- yield* Fx.fromIterable<number>([]).run(sink);
22
- const result = yield* Ref.get(ref);
23
- assert.strictEqual(result, 10);
24
- }).pipe(Effect.scoped, Effect.runPromise));
25
- });
26
-
27
- describe("Sink.reduceEffect", () => {
28
- it("reduces values with effectful function", () =>
29
- Effect.gen(function* () {
30
- const ref = yield* Ref.make(0);
31
- const sink = Sink.reduceEffect(ref, (acc: number, n: number) => Effect.succeed(acc + n));
32
- yield* Fx.fromIterable([1, 2, 3]).run(sink);
33
- const result = yield* Ref.get(ref);
34
- assert.strictEqual(result, 6);
35
- }).pipe(Effect.scoped, Effect.runPromise));
36
-
37
- it("skips step when reducer effect fails, continues with rest", () =>
38
- Effect.gen(function* () {
39
- const ref = yield* Ref.make(0);
40
- const sink = Sink.reduceEffect(ref, (acc: number, n: number) =>
41
- n === 2 ? Effect.fail("skip") : Effect.succeed(acc + n),
42
- );
43
- yield* Fx.fromIterable([1, 2, 3]).run(sink);
44
- const result = yield* Ref.get(ref);
45
- assert.strictEqual(result, 4);
46
- }).pipe(Effect.scoped, Effect.runPromise));
47
- });
48
-
49
- describe("Sink.collect", () => {
50
- it("collects all values into array", () =>
51
- Effect.gen(function* () {
52
- const ref = yield* Ref.make<ReadonlyArray<number>>([]);
53
- const sink = Sink.collect(ref);
54
- yield* Fx.fromIterable([1, 2, 3]).run(sink);
55
- const result = yield* Ref.get(ref);
56
- assert.deepStrictEqual(result, [1, 2, 3]);
57
- }).pipe(Effect.scoped, Effect.runPromise));
58
-
59
- it("returns empty array when no elements", () =>
60
- Effect.gen(function* () {
61
- const ref = yield* Ref.make<ReadonlyArray<number>>([]);
62
- const sink = Sink.collect(ref);
63
- yield* Fx.fromIterable<number>([]).run(sink);
64
- const result = yield* Ref.get(ref);
65
- assert.deepStrictEqual(result, []);
66
- }).pipe(Effect.scoped, Effect.runPromise));
67
- });
68
-
69
- describe("Sink.head", () => {
70
- it("keeps only first value", () =>
71
- Effect.gen(function* () {
72
- const ref = yield* Ref.make(Option.none<number>());
73
- const sink = Sink.head(ref);
74
- yield* Fx.fromIterable([1, 2, 3]).run(sink);
75
- const result = yield* Ref.get(ref);
76
- assert.deepStrictEqual(result, Option.some(1));
77
- }).pipe(Effect.scoped, Effect.runPromise));
78
-
79
- it("remains none when no elements", () =>
80
- Effect.gen(function* () {
81
- const ref = yield* Ref.make(Option.none<number>());
82
- const sink = Sink.head(ref);
83
- yield* Fx.fromIterable<number>([]).run(sink);
84
- const result = yield* Ref.get(ref);
85
- assert.deepStrictEqual(result, Option.none());
86
- }).pipe(Effect.scoped, Effect.runPromise));
87
- });
88
-
89
- describe("Sink.last", () => {
90
- it("keeps only last value", () =>
91
- Effect.gen(function* () {
92
- const ref = yield* Ref.make(Option.none<number>());
93
- const sink = Sink.last(ref);
94
- yield* Fx.fromIterable([1, 2, 3]).run(sink);
95
- const result = yield* Ref.get(ref);
96
- assert.deepStrictEqual(result, Option.some(3));
97
- }).pipe(Effect.scoped, Effect.runPromise));
98
-
99
- it("remains none when no elements", () =>
100
- Effect.gen(function* () {
101
- const ref = yield* Ref.make(Option.none<number>());
102
- const sink = Sink.last(ref);
103
- yield* Fx.fromIterable<number>([]).run(sink);
104
- const result = yield* Ref.get(ref);
105
- assert.deepStrictEqual(result, Option.none());
106
- }).pipe(Effect.scoped, Effect.runPromise));
107
- });
package/src/Sink.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./Sink/index.js";
@@ -1,441 +0,0 @@
1
- import type * as Cause from "effect/Cause";
2
- import * as Effect from "effect/Effect";
3
- import * as Exit from "effect/Exit";
4
- import * as Fiber from "effect/Fiber";
5
- import { dual, identity } from "effect/Function";
6
- import * as Layer from "effect/Layer";
7
- import * as MutableRef from "effect/MutableRef";
8
- import * as Option from "effect/Option";
9
- import { pipeArguments } from "effect/Pipeable";
10
- import * as Scope from "effect/Scope";
11
- import * as ServiceMap from "effect/ServiceMap";
12
- import type * as Fx from "../Fx/index.js";
13
- import { RingBuffer } from "../Fx/internal/ring-buffer.js";
14
- import { awaitScopeClose, withExtendedScope } from "../Fx/internal/scope.js";
15
- import { FxTypeId } from "../Fx/TypeId.js";
16
- import type * as Sink from "../Sink/Sink.js";
17
-
18
- /**
19
- * A `Subject` is an `Fx` that allows for imperative pushing of values.
20
- * It also acts as a `Sink`, meaning you can `run` another `Fx` into it.
21
- *
22
- * @since 1.0.0
23
- * @category models
24
- */
25
- export interface Subject<A, E = never, R = never>
26
- extends Fx.Fx<A, E, R | Scope.Scope>, Sink.Sink<A, E, R> {
27
- /**
28
- * The number of current subscribers to this Subject.
29
- */
30
- readonly subscriberCount: Effect.Effect<number, never, R>;
31
- /**
32
- * Interrupts all subscribers and clears the subject.
33
- */
34
- readonly interrupt: Effect.Effect<void, never, R>;
35
- }
36
-
37
- export declare namespace Subject {
38
- export interface Service<Self, Id extends string, A, E> extends Subject<A, E, Self> {
39
- readonly id: Id;
40
- readonly service: ServiceMap.Service<Self, Subject<A, E>>;
41
- readonly make: (replay?: number) => Layer.Layer<Self, never, Scope.Scope>;
42
- }
43
-
44
- export interface Class<Self, Id extends string, A, E> extends Service<Self, Id, A, E> {
45
- new (): Service<Self, Id, A, E>;
46
- }
47
- }
48
-
49
- /**
50
- * Shares the execution of an Fx among multiple subscribers using a Subject.
51
- * The source Fx is started when the first subscriber arrives and stopped when the last one leaves.
52
- *
53
- * @param fx - The source Fx.
54
- * @param subject - The subject to use for multicasting.
55
- * @returns A shared `Fx`.
56
- * @since 1.0.0
57
- * @category combinators
58
- */
59
- export function share<A, E, R, R2>(
60
- fx: Fx.Fx<A, E, R>,
61
- subject: Subject<A, E, R2>,
62
- ): Fx.Fx<A, E, R | R2 | Scope.Scope> {
63
- return new Share(fx, subject);
64
- }
65
-
66
- class RefCounter {
67
- _RefCount: MutableRef.MutableRef<number> = MutableRef.make(0);
68
-
69
- increment() {
70
- return MutableRef.updateAndGet(this._RefCount, (n) => n + 1);
71
- }
72
-
73
- decrement() {
74
- return MutableRef.updateAndGet(this._RefCount, (n) => Math.max(0, n - 1));
75
- }
76
- }
77
-
78
- const VARIANCE: Fx.Fx.Variance<any, any, any> = {
79
- _A: identity,
80
- _E: identity,
81
- _R: identity,
82
- };
83
-
84
- export class Share<A, E, R, R2> implements Fx.Fx<A, E, R | R2 | Scope.Scope> {
85
- readonly [FxTypeId]: Fx.Fx.Variance<A, E, R | R2 | Scope.Scope> = VARIANCE;
86
-
87
- _FxFiber: MutableRef.MutableRef<Option.Option<Fiber.Fiber<unknown>>> = MutableRef.make(
88
- Option.none(),
89
- );
90
- _RefCount = new RefCounter();
91
-
92
- readonly i0: Fx.Fx<A, E, R>;
93
- readonly i1: Subject<A, E, R2>;
94
-
95
- constructor(i0: Fx.Fx<A, E, R>, i1: Subject<A, E, R2>) {
96
- this.i0 = i0;
97
- this.i1 = i1;
98
- }
99
-
100
- pipe() {
101
- return pipeArguments(this, arguments);
102
- }
103
-
104
- run<R3>(sink: Sink.Sink<A, E, R3>): Effect.Effect<unknown, never, R | R2 | R3 | Scope.Scope> {
105
- return Effect.flatMap(this.initialize(), () =>
106
- Effect.onExit(this.i1.run(sink), () =>
107
- this._RefCount.decrement() === 0 ? this.interrupt() : Effect.void,
108
- ),
109
- );
110
- }
111
-
112
- private initialize(): Effect.Effect<unknown, never, R | R2> {
113
- return Effect.suspend((): Effect.Effect<unknown, never, R | R2> => {
114
- if (this._RefCount.increment() === 1) {
115
- return this.i0.run(this.i1).pipe(
116
- Effect.ensuring(
117
- Effect.suspend(() => {
118
- MutableRef.set(this._FxFiber, Option.none());
119
- return this.i1.interrupt;
120
- }),
121
- ),
122
- Effect.interruptible,
123
- Effect.forkDetach,
124
- Effect.tap((fiber) =>
125
- Effect.sync(() => MutableRef.set(this._FxFiber, Option.some(fiber))),
126
- ),
127
- );
128
- } else {
129
- return Effect.void;
130
- }
131
- });
132
- }
133
-
134
- private interrupt(): Effect.Effect<void, never, R | R2> {
135
- return Option.match(MutableRef.getAndSet(this._FxFiber, Option.none()), {
136
- onNone: () => Effect.void,
137
- onSome: Fiber.interrupt,
138
- });
139
- }
140
- }
141
-
142
- /**
143
- * Multicasts an Fx to multiple subscribers.
144
- * The source Fx is shared, so side effects only happen once per active session (ref count > 0).
145
- *
146
- * @param fx - The source Fx.
147
- * @returns A multicasted `Fx`.
148
- * @since 1.0.0
149
- * @category combinators
150
- */
151
- export function multicast<A, E, R>(fx: Fx.Fx<A, E, R>): Fx.Fx<A, E, R | Scope.Scope> {
152
- return new Share(fx, unsafeMake<A, E>(0));
153
- }
154
-
155
- /**
156
- * Holds the latest value emitted by the Fx and replays it to new subscribers.
157
- *
158
- * @param fx - The source Fx.
159
- * @returns A shared `Fx` that replays the latest value.
160
- * @since 1.0.0
161
- * @category combinators
162
- */
163
- export function hold<A, E, R>(fx: Fx.Fx<A, E, R>): Fx.Fx<A, E, R | Scope.Scope> {
164
- return new Share(fx, unsafeMake<A, E>(1));
165
- }
166
-
167
- /**
168
- * Replays the last `capacity` values emitted by the Fx to new subscribers.
169
- *
170
- * @param capacity - The number of values to buffer and replay.
171
- * @param fx - The source Fx.
172
- * @returns A shared `Fx` that replays values.
173
- * @since 1.0.0
174
- * @category combinators
175
- */
176
- export const replay: {
177
- (capacity: number): <A, E, R>(fx: Fx.Fx<A, E, R>) => Fx.Fx<A, E, R>;
178
- <A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Fx.Fx<A, E, R>;
179
- } = dual(2, function replay<A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Fx.Fx<
180
- A,
181
- E,
182
- R | Scope.Scope
183
- > {
184
- return new Share(fx, unsafeMake<A, E>(capacity));
185
- });
186
-
187
- const DISCARD = { discard: true } as const;
188
-
189
- /**
190
- * @internal
191
- */
192
- export class SubjectImpl<A, E> implements Subject<A, E> {
193
- readonly [FxTypeId]: Fx.Fx.Variance<A, E, Scope.Scope> = VARIANCE;
194
- protected sinks: Set<
195
- readonly [Sink.Sink<A, E, any>, ServiceMap.ServiceMap<any>, Scope.Closeable]
196
- > = new Set();
197
-
198
- constructor() {
199
- this.onFailure = this.onFailure.bind(this);
200
- this.onSuccess = this.onSuccess.bind(this);
201
- }
202
-
203
- pipe() {
204
- return pipeArguments(this, arguments);
205
- }
206
-
207
- run<R2>(sink: Sink.Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
208
- return this.addSink(sink, awaitScopeClose);
209
- }
210
-
211
- onFailure(cause: Cause.Cause<E>) {
212
- return this.onCause(cause);
213
- }
214
-
215
- onSuccess(a: A) {
216
- return this.onEvent(a);
217
- }
218
-
219
- protected interruptScopes = Effect.withFiber((fiber) =>
220
- Effect.forEach(
221
- Array.from(this.sinks),
222
- ([, , scope]) => Scope.close(scope, Exit.interrupt(fiber.id)),
223
- DISCARD,
224
- ),
225
- );
226
-
227
- readonly interrupt = this.interruptScopes;
228
-
229
- protected addSink<R, B, R2>(
230
- sink: Sink.Sink<A, E, R>,
231
- f: (scope: Scope.Scope) => Effect.Effect<B, never, R2>,
232
- ): Effect.Effect<B, never, R2 | Scope.Scope> {
233
- return withExtendedScope(
234
- (innerScope) =>
235
- Effect.servicesWith((ctx) => {
236
- const entry = [sink, ctx, innerScope] as const;
237
- this.sinks.add(entry);
238
- const remove = Effect.sync(() => this.sinks.delete(entry));
239
-
240
- return Effect.flatMap(Scope.addFinalizer(innerScope, remove), () => f(innerScope));
241
- }),
242
- "sequential",
243
- );
244
- }
245
-
246
- readonly subscriberCount: Effect.Effect<number> = Effect.sync(() => this.sinks.size);
247
-
248
- protected onEvent(a: A): Effect.Effect<void, never, never> {
249
- if (this.sinks.size === 0) return Effect.void;
250
- else if (this.sinks.size === 1) {
251
- const [sink, ctx] = this.sinks.values().next().value!;
252
- return runSinkEvent(sink, ctx, a);
253
- } else {
254
- return Effect.forEach(this.sinks, ([sink, ctx]) => runSinkEvent(sink, ctx, a), DISCARD);
255
- }
256
- }
257
-
258
- protected onCause(cause: Cause.Cause<E>) {
259
- if (this.sinks.size === 0) return Effect.void;
260
- else if (this.sinks.size === 1) {
261
- const [sink, ctx, scope] = this.sinks.values().next().value!;
262
- return runSinkCause(sink, ctx, scope, cause);
263
- } else {
264
- return Effect.forEach(
265
- this.sinks,
266
- ([sink, ctx, scope]) => runSinkCause(sink, ctx, scope, cause),
267
- DISCARD,
268
- );
269
- }
270
- }
271
- }
272
-
273
- function runSinkEvent<A, E>(
274
- sink: Sink.Sink<A, E, any>,
275
- ctx: ServiceMap.ServiceMap<any>,
276
- a: A,
277
- ): Effect.Effect<void, never, never> {
278
- return Effect.provide(Effect.catchCause(sink.onSuccess(a), sink.onFailure), ctx);
279
- }
280
-
281
- function runSinkCause<A, E>(
282
- sink: Sink.Sink<A, E, any>,
283
- ctx: ServiceMap.ServiceMap<any>,
284
- scope: Scope.Closeable,
285
- cause: Cause.Cause<E>,
286
- ): Effect.Effect<void, never, never> {
287
- return Effect.provide(
288
- Effect.catchCause(sink.onFailure(cause), (error) => Scope.close(scope, Exit.failCause(error))),
289
- ctx,
290
- );
291
- }
292
-
293
- /**
294
- * @internal
295
- */
296
- export class HoldSubjectImpl<A, E> extends SubjectImpl<A, E> implements Subject<A, E> {
297
- readonly lastValue: MutableRef.MutableRef<Option.Option<Exit.Exit<A, E>>> = MutableRef.make(
298
- Option.none(),
299
- );
300
-
301
- override onSuccess = (a: A): Effect.Effect<void, never, never> =>
302
- Effect.suspend(() => {
303
- // Keep track of the last value emitted by the subject
304
- MutableRef.set(this.lastValue, Option.some(Exit.succeed(a)));
305
-
306
- return this.onEvent(a);
307
- });
308
-
309
- override onFailure = (cause: Cause.Cause<E>): Effect.Effect<void, never, never> => {
310
- return Effect.suspend(() => {
311
- // Keep track of the last value emitted by the subject
312
- MutableRef.set(this.lastValue, Option.some(Exit.failCause(cause)));
313
-
314
- return this.onCause(cause);
315
- });
316
- };
317
-
318
- override run<R2>(sink: Sink.Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
319
- return this.addSink(sink, (scope) =>
320
- Option.match(MutableRef.get(this.lastValue), {
321
- onNone: () => awaitScopeClose(scope),
322
- // If we have a previous value, emit it first
323
- onSome: (exit) => Effect.flatMap(Exit.match(exit, sink), () => awaitScopeClose(scope)),
324
- }),
325
- );
326
- }
327
-
328
- override readonly interrupt = Effect.tap(
329
- this.interruptScopes,
330
- Effect.sync(() => MutableRef.set(this.lastValue, Option.none())),
331
- );
332
- }
333
-
334
- /**
335
- * @internal
336
- */
337
- export class ReplaySubjectImpl<A, E> extends SubjectImpl<A, E> {
338
- readonly buffer: RingBuffer<Exit.Exit<A, E>>;
339
-
340
- constructor(buffer: RingBuffer<Exit.Exit<A, E>>) {
341
- super();
342
- this.buffer = buffer;
343
- }
344
-
345
- override onSuccess = (a: A): Effect.Effect<void, never, never> =>
346
- Effect.suspend(() => {
347
- // Keep track of the last value emitted by the subject
348
- this.buffer.push(Exit.succeed(a));
349
- return this.onEvent(a);
350
- });
351
-
352
- override onFailure = (cause: Cause.Cause<E>): Effect.Effect<void, never, never> =>
353
- Effect.suspend(() => {
354
- this.buffer.push(Exit.failCause(cause));
355
- return this.onCause(cause);
356
- });
357
-
358
- override run<R2>(sink: Sink.Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
359
- return this.addSink(sink, (scope) =>
360
- Effect.flatMap(this.buffer.forEach(Exit.match(sink)), () => awaitScopeClose(scope)),
361
- );
362
- }
363
-
364
- override readonly interrupt = Effect.tap(
365
- this.interruptScopes,
366
- Effect.sync(() => this.buffer.clear()),
367
- );
368
- }
369
-
370
- /**
371
- * Creates a `Subject` that replays the last `replay` values. You will need to manually call `interrupt` on the subject to clear resources.
372
- * @param replay - The number of values to replay.
373
- * @returns A `Subject` that replays the last `replay` values.
374
- */
375
- export function unsafeMake<A, E = never>(replay: number = 0): Subject<A, E> {
376
- replay = Math.max(0, replay);
377
-
378
- if (replay === 0) {
379
- return new SubjectImpl<A, E>();
380
- } else if (replay === 1) {
381
- return new HoldSubjectImpl<A, E>();
382
- } else {
383
- return new ReplaySubjectImpl<A, E>(new RingBuffer(replay));
384
- }
385
- }
386
-
387
- /**
388
- * Create a Subject which utilizes a Scope to manage the lifecycle of the subject's resources.
389
- */
390
- export function make<A, E = never>(
391
- replay?: number,
392
- ): Effect.Effect<Subject<A, E>, never, Scope.Scope> {
393
- return Effect.acquireRelease(
394
- Effect.sync(() => unsafeMake(replay)),
395
- (subject) => subject.interrupt,
396
- );
397
- }
398
-
399
- export function Service<Self, A, E = never>() {
400
- return <const Id extends string>(id: Id): Subject.Class<Self, Id, A, E> => {
401
- const service = ServiceMap.Service<Self, Subject<A, E>>(id);
402
-
403
- // eslint-disable-next-line @typescript-eslint/no-extraneous-class
404
- return class SubjectService {
405
- static readonly id = id;
406
- static readonly service = service;
407
-
408
- static readonly make = (replay?: number): Layer.Layer<Self, never, Scope.Scope> =>
409
- Layer.effect(service, make<A, E>(replay));
410
-
411
- static readonly [FxTypeId] = VARIANCE;
412
- static readonly pipe = function (this: any) {
413
- return pipeArguments(this, arguments);
414
- };
415
-
416
- // Fx
417
- static readonly run = <RSink>(sink: Sink.Sink<A, E, RSink>) =>
418
- Effect.flatMap(service.asEffect(), (subject) => subject.run(sink));
419
-
420
- // Sink
421
- static readonly onSuccess = (value: A) =>
422
- Effect.flatMap(service.asEffect(), (subject) => subject.onSuccess(value));
423
- static readonly onFailure = (cause: Cause.Cause<E>) =>
424
- Effect.flatMap(service.asEffect(), (subject) => subject.onFailure(cause));
425
-
426
- // Subject
427
- static readonly subscriberCount = Effect.flatMap(
428
- service.asEffect(),
429
- (subject) => subject.subscriberCount,
430
- );
431
- static readonly interrupt = Effect.flatMap(
432
- service.asEffect(),
433
- (subject) => subject.interrupt,
434
- );
435
-
436
- constructor() {
437
- return SubjectService;
438
- }
439
- } as unknown as Subject.Class<Self, Id, A, E>;
440
- };
441
- }
@@ -1 +0,0 @@
1
- export * from "./Subject.js";
@@ -1,47 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import * as Effect from "effect/Effect";
3
- import * as Fiber from "effect/Fiber";
4
- import * as Fx from "./Fx/index.js";
5
- import * as Subject from "./Subject.js";
6
-
7
- describe("Subject", () => {
8
- it("allows multicasting values", () =>
9
- Effect.gen(function* () {
10
- const subject = Subject.unsafeMake<number>();
11
- const fiber = yield* Fx.collectAllFork(subject);
12
- yield* Effect.yieldNow;
13
-
14
- yield* subject.onSuccess(1);
15
- yield* subject.onSuccess(2);
16
- yield* subject.onSuccess(3);
17
- yield* subject.interrupt;
18
-
19
- expect(yield* Fiber.join(fiber)).toEqual([1, 2, 3]);
20
- }).pipe(Effect.scoped, Effect.runPromise));
21
-
22
- it("allows replay of values", () =>
23
- Effect.gen(function* () {
24
- const subject = Subject.unsafeMake<number>(2);
25
-
26
- yield* subject.onSuccess(1);
27
- yield* subject.onSuccess(2);
28
- yield* subject.onSuccess(3);
29
-
30
- expect(yield* Fx.collectAll(Fx.take(subject, 2))).toEqual([2, 3]);
31
- }).pipe(Effect.scoped, Effect.runPromise));
32
-
33
- describe("Service", () => {
34
- it("should allow defining a Subject as a Service", () =>
35
- Effect.gen(function* () {
36
- class MySubject extends Subject.Service<MySubject, number>()("MySubject") {}
37
-
38
- const layer = MySubject.make(1);
39
-
40
- yield* Effect.gen(function* () {
41
- yield* MySubject.onSuccess(1);
42
- const result = yield* Fx.collectAll(Fx.take(MySubject, 1));
43
- expect(result).toEqual([1]);
44
- }).pipe(Effect.provide(layer));
45
- }).pipe(Effect.scoped, Effect.runPromise));
46
- });
47
- });
package/src/Subject.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./Subject/index.js";