@typed/fx 2.0.0-beta.4 → 2.0.0-beta.5

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 (663) hide show
  1. package/README.md +34 -20
  2. package/dist/Fx/Fx.d.ts +362 -10
  3. package/dist/Fx/Fx.d.ts.map +1 -1
  4. package/dist/Fx/Fx.js +32 -1
  5. package/dist/Fx/TypeId.d.ts +49 -3
  6. package/dist/Fx/TypeId.d.ts.map +1 -1
  7. package/dist/Fx/TypeId.js +39 -2
  8. package/dist/Fx/combinators/additive.d.ts +156 -5
  9. package/dist/Fx/combinators/additive.d.ts.map +1 -1
  10. package/dist/Fx/combinators/additive.js +156 -5
  11. package/dist/Fx/combinators/catch.d.ts +195 -22
  12. package/dist/Fx/combinators/catch.d.ts.map +1 -1
  13. package/dist/Fx/combinators/catch.js +186 -16
  14. package/dist/Fx/combinators/causes.d.ts +24 -1
  15. package/dist/Fx/combinators/causes.d.ts.map +1 -1
  16. package/dist/Fx/combinators/causes.js +24 -1
  17. package/dist/Fx/combinators/changesWithEffect.d.ts +20 -0
  18. package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -1
  19. package/dist/Fx/combinators/changesWithEffect.js +20 -0
  20. package/dist/Fx/combinators/compact.d.ts +17 -0
  21. package/dist/Fx/combinators/compact.d.ts.map +1 -1
  22. package/dist/Fx/combinators/compact.js +17 -0
  23. package/dist/Fx/combinators/concatMap.d.ts +86 -0
  24. package/dist/Fx/combinators/concatMap.d.ts.map +1 -0
  25. package/dist/Fx/combinators/concatMap.js +86 -0
  26. package/dist/Fx/combinators/continueWith.d.ts +109 -1
  27. package/dist/Fx/combinators/continueWith.d.ts.map +1 -1
  28. package/dist/Fx/combinators/continueWith.js +109 -1
  29. package/dist/Fx/combinators/debounce.d.ts +34 -0
  30. package/dist/Fx/combinators/debounce.d.ts.map +1 -0
  31. package/dist/Fx/combinators/debounce.js +35 -0
  32. package/dist/Fx/combinators/delay.d.ts +34 -0
  33. package/dist/Fx/combinators/delay.d.ts.map +1 -0
  34. package/dist/Fx/combinators/delay.js +31 -0
  35. package/dist/Fx/combinators/dropUntil.d.ts +42 -0
  36. package/dist/Fx/combinators/dropUntil.d.ts.map +1 -1
  37. package/dist/Fx/combinators/dropUntil.js +42 -0
  38. package/dist/Fx/combinators/during.d.ts +38 -0
  39. package/dist/Fx/combinators/during.d.ts.map +1 -0
  40. package/dist/Fx/combinators/during.js +85 -0
  41. package/dist/Fx/combinators/ensuring.d.ts +33 -3
  42. package/dist/Fx/combinators/ensuring.d.ts.map +1 -1
  43. package/dist/Fx/combinators/ensuring.js +33 -3
  44. package/dist/Fx/combinators/exhaustLatestMap.d.ts +40 -4
  45. package/dist/Fx/combinators/exhaustLatestMap.d.ts.map +1 -1
  46. package/dist/Fx/combinators/exhaustLatestMap.js +40 -4
  47. package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts +39 -3
  48. package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts.map +1 -1
  49. package/dist/Fx/combinators/exhaustLatestMapEffect.js +39 -3
  50. package/dist/Fx/combinators/exhaustMap.d.ts +37 -0
  51. package/dist/Fx/combinators/exhaustMap.d.ts.map +1 -1
  52. package/dist/Fx/combinators/exhaustMap.js +37 -0
  53. package/dist/Fx/combinators/exhaustMapEffect.d.ts +32 -0
  54. package/dist/Fx/combinators/exhaustMapEffect.d.ts.map +1 -1
  55. package/dist/Fx/combinators/exhaustMapEffect.js +32 -0
  56. package/dist/Fx/combinators/exit.d.ts +22 -1
  57. package/dist/Fx/combinators/exit.d.ts.map +1 -1
  58. package/dist/Fx/combinators/exit.js +22 -1
  59. package/dist/Fx/combinators/filter.d.ts +16 -0
  60. package/dist/Fx/combinators/filter.d.ts.map +1 -1
  61. package/dist/Fx/combinators/filter.js +16 -0
  62. package/dist/Fx/combinators/filterEffect.d.ts +21 -0
  63. package/dist/Fx/combinators/filterEffect.d.ts.map +1 -1
  64. package/dist/Fx/combinators/filterEffect.js +21 -0
  65. package/dist/Fx/combinators/filterMap.d.ts +19 -0
  66. package/dist/Fx/combinators/filterMap.d.ts.map +1 -1
  67. package/dist/Fx/combinators/filterMap.js +19 -0
  68. package/dist/Fx/combinators/filterMapEffect.d.ts +20 -0
  69. package/dist/Fx/combinators/filterMapEffect.d.ts.map +1 -1
  70. package/dist/Fx/combinators/filterMapEffect.js +20 -0
  71. package/dist/Fx/combinators/filterMapLoop.d.ts +19 -0
  72. package/dist/Fx/combinators/filterMapLoop.d.ts.map +1 -1
  73. package/dist/Fx/combinators/filterMapLoop.js +19 -0
  74. package/dist/Fx/combinators/filterMapLoopCause.d.ts +20 -0
  75. package/dist/Fx/combinators/filterMapLoopCause.d.ts.map +1 -1
  76. package/dist/Fx/combinators/filterMapLoopCause.js +20 -0
  77. package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts +20 -0
  78. package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts.map +1 -1
  79. package/dist/Fx/combinators/filterMapLoopCauseEffect.js +20 -0
  80. package/dist/Fx/combinators/filterMapLoopEffect.d.ts +20 -0
  81. package/dist/Fx/combinators/filterMapLoopEffect.d.ts.map +1 -1
  82. package/dist/Fx/combinators/filterMapLoopEffect.js +20 -0
  83. package/dist/Fx/combinators/flatMap.d.ts +48 -3
  84. package/dist/Fx/combinators/flatMap.d.ts.map +1 -1
  85. package/dist/Fx/combinators/flatMap.js +35 -2
  86. package/dist/Fx/combinators/flatMapConcurrently.d.ts +50 -3
  87. package/dist/Fx/combinators/flatMapConcurrently.d.ts.map +1 -1
  88. package/dist/Fx/combinators/flatMapConcurrently.js +47 -1
  89. package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts +47 -3
  90. package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts.map +1 -1
  91. package/dist/Fx/combinators/flatMapConcurrentlyEffect.js +39 -1
  92. package/dist/Fx/combinators/flatMapEffect.d.ts +44 -2
  93. package/dist/Fx/combinators/flatMapEffect.d.ts.map +1 -1
  94. package/dist/Fx/combinators/flatMapEffect.js +31 -1
  95. package/dist/Fx/combinators/flip.d.ts +33 -1
  96. package/dist/Fx/combinators/flip.d.ts.map +1 -1
  97. package/dist/Fx/combinators/flip.js +33 -1
  98. package/dist/Fx/combinators/gen.d.ts +28 -9
  99. package/dist/Fx/combinators/gen.d.ts.map +1 -1
  100. package/dist/Fx/combinators/gen.js +27 -3
  101. package/dist/Fx/combinators/genScoped.d.ts +32 -9
  102. package/dist/Fx/combinators/genScoped.d.ts.map +1 -1
  103. package/dist/Fx/combinators/genScoped.js +30 -2
  104. package/dist/Fx/combinators/grouped.d.ts +89 -0
  105. package/dist/Fx/combinators/grouped.d.ts.map +1 -0
  106. package/dist/Fx/combinators/grouped.js +146 -0
  107. package/dist/Fx/combinators/index.d.ts +35 -0
  108. package/dist/Fx/combinators/index.d.ts.map +1 -1
  109. package/dist/Fx/combinators/index.js +35 -0
  110. package/dist/Fx/combinators/keyed.d.ts +121 -7
  111. package/dist/Fx/combinators/keyed.d.ts.map +1 -1
  112. package/dist/Fx/combinators/keyed.js +64 -6
  113. package/dist/Fx/combinators/loop.d.ts +16 -0
  114. package/dist/Fx/combinators/loop.d.ts.map +1 -1
  115. package/dist/Fx/combinators/loop.js +16 -0
  116. package/dist/Fx/combinators/loopCause.d.ts +17 -0
  117. package/dist/Fx/combinators/loopCause.d.ts.map +1 -1
  118. package/dist/Fx/combinators/loopCause.js +17 -0
  119. package/dist/Fx/combinators/loopCauseEffect.d.ts +18 -0
  120. package/dist/Fx/combinators/loopCauseEffect.d.ts.map +1 -1
  121. package/dist/Fx/combinators/loopCauseEffect.js +18 -0
  122. package/dist/Fx/combinators/loopEffect.d.ts +23 -0
  123. package/dist/Fx/combinators/loopEffect.d.ts.map +1 -1
  124. package/dist/Fx/combinators/loopEffect.js +23 -0
  125. package/dist/Fx/combinators/map.d.ts +45 -0
  126. package/dist/Fx/combinators/map.d.ts.map +1 -1
  127. package/dist/Fx/combinators/map.js +42 -0
  128. package/dist/Fx/combinators/mapBoth.d.ts +19 -0
  129. package/dist/Fx/combinators/mapBoth.d.ts.map +1 -1
  130. package/dist/Fx/combinators/mapBoth.js +19 -0
  131. package/dist/Fx/combinators/mapEffect.d.ts +24 -0
  132. package/dist/Fx/combinators/mapEffect.d.ts.map +1 -1
  133. package/dist/Fx/combinators/mapEffect.js +24 -0
  134. package/dist/Fx/combinators/mapError.d.ts +20 -4
  135. package/dist/Fx/combinators/mapError.d.ts.map +1 -1
  136. package/dist/Fx/combinators/mapError.js +20 -4
  137. package/dist/Fx/combinators/mergeAll.d.ts +34 -0
  138. package/dist/Fx/combinators/mergeAll.d.ts.map +1 -1
  139. package/dist/Fx/combinators/mergeAll.js +34 -0
  140. package/dist/Fx/combinators/mergeOrdered.d.ts +35 -3
  141. package/dist/Fx/combinators/mergeOrdered.d.ts.map +1 -1
  142. package/dist/Fx/combinators/mergeOrdered.js +35 -3
  143. package/dist/Fx/combinators/onError.d.ts +33 -3
  144. package/dist/Fx/combinators/onError.d.ts.map +1 -1
  145. package/dist/Fx/combinators/onError.js +33 -3
  146. package/dist/Fx/combinators/onExit.d.ts +28 -2
  147. package/dist/Fx/combinators/onExit.d.ts.map +1 -1
  148. package/dist/Fx/combinators/onExit.js +28 -2
  149. package/dist/Fx/combinators/onInterrupt.d.ts +48 -3
  150. package/dist/Fx/combinators/onInterrupt.d.ts.map +1 -1
  151. package/dist/Fx/combinators/onInterrupt.js +48 -3
  152. package/dist/Fx/combinators/pairwise.d.ts +28 -0
  153. package/dist/Fx/combinators/pairwise.d.ts.map +1 -0
  154. package/dist/Fx/combinators/pairwise.js +31 -0
  155. package/dist/Fx/combinators/provide.d.ts +130 -9
  156. package/dist/Fx/combinators/provide.d.ts.map +1 -1
  157. package/dist/Fx/combinators/provide.js +130 -9
  158. package/dist/Fx/combinators/race.d.ts +92 -0
  159. package/dist/Fx/combinators/race.d.ts.map +1 -0
  160. package/dist/Fx/combinators/race.js +149 -0
  161. package/dist/Fx/combinators/repeat.d.ts +41 -0
  162. package/dist/Fx/combinators/repeat.d.ts.map +1 -0
  163. package/dist/Fx/combinators/repeat.js +57 -0
  164. package/dist/Fx/combinators/result.d.ts +22 -0
  165. package/dist/Fx/combinators/result.d.ts.map +1 -1
  166. package/dist/Fx/combinators/result.js +26 -12
  167. package/dist/Fx/combinators/retry.d.ts +53 -0
  168. package/dist/Fx/combinators/retry.d.ts.map +1 -0
  169. package/dist/Fx/combinators/retry.js +71 -0
  170. package/dist/Fx/combinators/sample.d.ts +31 -0
  171. package/dist/Fx/combinators/sample.d.ts.map +1 -0
  172. package/dist/Fx/combinators/sample.js +42 -0
  173. package/dist/Fx/combinators/scan.d.ts +39 -0
  174. package/dist/Fx/combinators/scan.d.ts.map +1 -1
  175. package/dist/Fx/combinators/scan.js +39 -0
  176. package/dist/Fx/combinators/since.d.ts +30 -0
  177. package/dist/Fx/combinators/since.d.ts.map +1 -0
  178. package/dist/Fx/combinators/since.js +39 -0
  179. package/dist/Fx/combinators/skip.d.ts +31 -0
  180. package/dist/Fx/combinators/skip.d.ts.map +1 -1
  181. package/dist/Fx/combinators/skip.js +31 -0
  182. package/dist/Fx/combinators/skipRepeats.d.ts +16 -0
  183. package/dist/Fx/combinators/skipRepeats.d.ts.map +1 -1
  184. package/dist/Fx/combinators/skipRepeats.js +16 -0
  185. package/dist/Fx/combinators/skipRepeatsWith.d.ts +17 -0
  186. package/dist/Fx/combinators/skipRepeatsWith.d.ts.map +1 -1
  187. package/dist/Fx/combinators/skipRepeatsWith.js +17 -0
  188. package/dist/Fx/combinators/skipWhile.d.ts +68 -0
  189. package/dist/Fx/combinators/skipWhile.d.ts.map +1 -1
  190. package/dist/Fx/combinators/skipWhile.js +68 -0
  191. package/dist/Fx/combinators/slice.d.ts +82 -0
  192. package/dist/Fx/combinators/slice.d.ts.map +1 -1
  193. package/dist/Fx/combinators/slice.js +33 -0
  194. package/dist/Fx/combinators/switchMap.d.ts +38 -0
  195. package/dist/Fx/combinators/switchMap.d.ts.map +1 -1
  196. package/dist/Fx/combinators/switchMap.js +38 -0
  197. package/dist/Fx/combinators/switchMapEffect.d.ts +37 -0
  198. package/dist/Fx/combinators/switchMapEffect.d.ts.map +1 -1
  199. package/dist/Fx/combinators/switchMapEffect.js +37 -0
  200. package/dist/Fx/combinators/take.d.ts +32 -0
  201. package/dist/Fx/combinators/take.d.ts.map +1 -1
  202. package/dist/Fx/combinators/take.js +32 -0
  203. package/dist/Fx/combinators/takeUntil.d.ts +46 -0
  204. package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
  205. package/dist/Fx/combinators/takeUntil.js +46 -0
  206. package/dist/Fx/combinators/takeWhile.d.ts +31 -0
  207. package/dist/Fx/combinators/takeWhile.d.ts.map +1 -1
  208. package/dist/Fx/combinators/takeWhile.js +31 -0
  209. package/dist/Fx/combinators/tapEffect.d.ts +16 -0
  210. package/dist/Fx/combinators/tapEffect.d.ts.map +1 -1
  211. package/dist/Fx/combinators/tapEffect.js +16 -0
  212. package/dist/Fx/combinators/throttle.d.ts +79 -0
  213. package/dist/Fx/combinators/throttle.d.ts.map +1 -0
  214. package/dist/Fx/combinators/throttle.js +99 -0
  215. package/dist/Fx/combinators/timeout.d.ts +76 -0
  216. package/dist/Fx/combinators/timeout.d.ts.map +1 -0
  217. package/dist/Fx/combinators/timeout.js +110 -0
  218. package/dist/Fx/combinators/tuple.d.ts +30 -0
  219. package/dist/Fx/combinators/tuple.d.ts.map +1 -1
  220. package/dist/Fx/combinators/tuple.js +34 -3
  221. package/dist/Fx/combinators/until.d.ts +27 -0
  222. package/dist/Fx/combinators/until.d.ts.map +1 -0
  223. package/dist/Fx/combinators/until.js +56 -0
  224. package/dist/Fx/combinators/unwrap.d.ts +29 -0
  225. package/dist/Fx/combinators/unwrap.d.ts.map +1 -1
  226. package/dist/Fx/combinators/unwrap.js +29 -0
  227. package/dist/Fx/combinators/unwrapScoped.d.ts +33 -0
  228. package/dist/Fx/combinators/unwrapScoped.d.ts.map +1 -1
  229. package/dist/Fx/combinators/unwrapScoped.js +33 -0
  230. package/dist/Fx/combinators/when.d.ts +35 -0
  231. package/dist/Fx/combinators/when.d.ts.map +1 -1
  232. package/dist/Fx/combinators/when.js +36 -1
  233. package/dist/Fx/combinators/withLatestFrom.d.ts +58 -0
  234. package/dist/Fx/combinators/withLatestFrom.d.ts.map +1 -0
  235. package/dist/Fx/combinators/withLatestFrom.js +68 -0
  236. package/dist/Fx/combinators/withSpan.d.ts +35 -1
  237. package/dist/Fx/combinators/withSpan.d.ts.map +1 -1
  238. package/dist/Fx/combinators/withSpan.js +34 -3
  239. package/dist/Fx/combinators/zip.d.ts +60 -0
  240. package/dist/Fx/combinators/zip.d.ts.map +1 -1
  241. package/dist/Fx/combinators/zip.js +60 -0
  242. package/dist/Fx/constructors/at.d.ts +20 -0
  243. package/dist/Fx/constructors/at.d.ts.map +1 -1
  244. package/dist/Fx/constructors/at.js +20 -0
  245. package/dist/Fx/constructors/die.d.ts +21 -0
  246. package/dist/Fx/constructors/die.d.ts.map +1 -1
  247. package/dist/Fx/constructors/die.js +21 -0
  248. package/dist/Fx/constructors/empty.d.ts +18 -0
  249. package/dist/Fx/constructors/empty.d.ts.map +1 -1
  250. package/dist/Fx/constructors/empty.js +18 -0
  251. package/dist/Fx/constructors/fail.d.ts +21 -0
  252. package/dist/Fx/constructors/fail.d.ts.map +1 -1
  253. package/dist/Fx/constructors/fail.js +21 -0
  254. package/dist/Fx/constructors/failCause.d.ts +22 -0
  255. package/dist/Fx/constructors/failCause.d.ts.map +1 -1
  256. package/dist/Fx/constructors/failCause.js +22 -0
  257. package/dist/Fx/constructors/fn.d.ts +113 -13
  258. package/dist/Fx/constructors/fn.d.ts.map +1 -1
  259. package/dist/Fx/constructors/fn.js +36 -0
  260. package/dist/Fx/constructors/fromEffect.d.ts +43 -1
  261. package/dist/Fx/constructors/fromEffect.d.ts.map +1 -1
  262. package/dist/Fx/constructors/fromEffect.js +43 -1
  263. package/dist/Fx/constructors/fromFailures.d.ts +24 -0
  264. package/dist/Fx/constructors/fromFailures.d.ts.map +1 -1
  265. package/dist/Fx/constructors/fromFailures.js +24 -0
  266. package/dist/Fx/constructors/fromIterable.d.ts +22 -0
  267. package/dist/Fx/constructors/fromIterable.d.ts.map +1 -1
  268. package/dist/Fx/constructors/fromIterable.js +22 -0
  269. package/dist/Fx/constructors/fromSchedule.d.ts +23 -0
  270. package/dist/Fx/constructors/fromSchedule.d.ts.map +1 -1
  271. package/dist/Fx/constructors/fromSchedule.js +25 -2
  272. package/dist/Fx/constructors/index.d.ts +2 -1
  273. package/dist/Fx/constructors/index.d.ts.map +1 -1
  274. package/dist/Fx/constructors/index.js +2 -1
  275. package/dist/Fx/constructors/interrupt.d.ts +21 -1
  276. package/dist/Fx/constructors/interrupt.d.ts.map +1 -1
  277. package/dist/Fx/constructors/interrupt.js +21 -1
  278. package/dist/Fx/constructors/make.d.ts +146 -1
  279. package/dist/Fx/constructors/make.d.ts.map +1 -1
  280. package/dist/Fx/constructors/make.js +54 -3
  281. package/dist/Fx/constructors/periodic.d.ts +29 -0
  282. package/dist/Fx/constructors/periodic.d.ts.map +1 -1
  283. package/dist/Fx/constructors/periodic.js +29 -0
  284. package/dist/Fx/constructors/succeed.d.ts +75 -3
  285. package/dist/Fx/constructors/succeed.d.ts.map +1 -1
  286. package/dist/Fx/constructors/succeed.js +75 -3
  287. package/dist/Fx/constructors/suspend.d.ts +28 -0
  288. package/dist/Fx/constructors/suspend.d.ts.map +1 -1
  289. package/dist/Fx/constructors/suspend.js +28 -0
  290. package/dist/Fx/constructors/sync.d.ts +32 -0
  291. package/dist/Fx/constructors/sync.d.ts.map +1 -0
  292. package/dist/Fx/constructors/sync.js +32 -0
  293. package/dist/Fx/internal/DeferredRef.d.ts +259 -7
  294. package/dist/Fx/internal/DeferredRef.d.ts.map +1 -1
  295. package/dist/Fx/internal/DeferredRef.js +260 -9
  296. package/dist/Fx/internal/UnionToTuple.d.ts +22 -0
  297. package/dist/Fx/internal/UnionToTuple.d.ts.map +1 -1
  298. package/dist/Fx/internal/diff.d.ts +586 -0
  299. package/dist/Fx/internal/diff.d.ts.map +1 -1
  300. package/dist/Fx/internal/diff.js +120 -9
  301. package/dist/Fx/internal/effectableEvaluateKey.d.ts +30 -0
  302. package/dist/Fx/internal/effectableEvaluateKey.d.ts.map +1 -0
  303. package/dist/Fx/internal/effectableEvaluateKey.js +29 -0
  304. package/dist/Fx/internal/effectableWithOverride.d.ts +55 -0
  305. package/dist/Fx/internal/effectableWithOverride.d.ts.map +1 -0
  306. package/dist/Fx/internal/effectableWithOverride.js +46 -0
  307. package/dist/Fx/internal/equivalence.d.ts +29 -0
  308. package/dist/Fx/internal/equivalence.d.ts.map +1 -1
  309. package/dist/Fx/internal/equivalence.js +29 -0
  310. package/dist/Fx/internal/multicast.d.ts +145 -2
  311. package/dist/Fx/internal/multicast.d.ts.map +1 -1
  312. package/dist/Fx/internal/multicast.js +146 -4
  313. package/dist/Fx/internal/ring-buffer.d.ts +149 -0
  314. package/dist/Fx/internal/ring-buffer.d.ts.map +1 -1
  315. package/dist/Fx/internal/ring-buffer.js +155 -0
  316. package/dist/Fx/internal/scope.d.ts +184 -0
  317. package/dist/Fx/internal/scope.d.ts.map +1 -1
  318. package/dist/Fx/internal/scope.js +150 -0
  319. package/dist/Fx/internal/yieldable.d.ts +117 -2
  320. package/dist/Fx/internal/yieldable.d.ts.map +1 -1
  321. package/dist/Fx/internal/yieldable.js +86 -3
  322. package/dist/Fx/run/collect.d.ts +89 -0
  323. package/dist/Fx/run/collect.d.ts.map +1 -1
  324. package/dist/Fx/run/collect.js +90 -1
  325. package/dist/Fx/run/first.d.ts +22 -0
  326. package/dist/Fx/run/first.d.ts.map +1 -1
  327. package/dist/Fx/run/first.js +22 -0
  328. package/dist/Fx/run/fork.d.ts +50 -0
  329. package/dist/Fx/run/fork.d.ts.map +1 -1
  330. package/dist/Fx/run/fork.js +50 -0
  331. package/dist/Fx/run/observe.d.ts +106 -0
  332. package/dist/Fx/run/observe.d.ts.map +1 -1
  333. package/dist/Fx/run/observe.js +106 -0
  334. package/dist/Fx/run/runPromise.d.ts +43 -0
  335. package/dist/Fx/run/runPromise.d.ts.map +1 -1
  336. package/dist/Fx/run/runPromise.js +43 -0
  337. package/dist/Fx/stream.d.ts +92 -0
  338. package/dist/Fx/stream.d.ts.map +1 -1
  339. package/dist/Fx/stream.js +60 -1
  340. package/dist/Push/Push.d.ts +1216 -91
  341. package/dist/Push/Push.d.ts.map +1 -1
  342. package/dist/Push/Push.js +1012 -83
  343. package/dist/RefArray.d.ts +2 -0
  344. package/dist/RefArray.d.ts.map +1 -0
  345. package/dist/RefArray.js +1 -0
  346. package/dist/RefBigDecimal.d.ts +2 -0
  347. package/dist/RefBigDecimal.d.ts.map +1 -0
  348. package/dist/RefBigDecimal.js +1 -0
  349. package/dist/RefBigInt.d.ts +2 -0
  350. package/dist/RefBigInt.d.ts.map +1 -0
  351. package/dist/RefBigInt.js +1 -0
  352. package/dist/RefBoolean.d.ts +2 -0
  353. package/dist/RefBoolean.d.ts.map +1 -0
  354. package/dist/RefBoolean.js +1 -0
  355. package/dist/RefCause.d.ts +2 -0
  356. package/dist/RefCause.d.ts.map +1 -0
  357. package/dist/RefCause.js +1 -0
  358. package/dist/RefChunk.d.ts +2 -0
  359. package/dist/RefChunk.d.ts.map +1 -0
  360. package/dist/RefChunk.js +1 -0
  361. package/dist/RefDateTime.d.ts +2 -0
  362. package/dist/RefDateTime.d.ts.map +1 -0
  363. package/dist/RefDateTime.js +1 -0
  364. package/dist/RefDuration.d.ts +2 -0
  365. package/dist/RefDuration.d.ts.map +1 -0
  366. package/dist/RefDuration.js +1 -0
  367. package/dist/RefGraph.d.ts +2 -0
  368. package/dist/RefGraph.d.ts.map +1 -0
  369. package/dist/RefGraph.js +1 -0
  370. package/dist/RefHashMap.d.ts +2 -0
  371. package/dist/RefHashMap.d.ts.map +1 -0
  372. package/dist/RefHashMap.js +1 -0
  373. package/dist/RefHashRing.d.ts +2 -0
  374. package/dist/RefHashRing.d.ts.map +1 -0
  375. package/dist/RefHashRing.js +1 -0
  376. package/dist/RefHashSet.d.ts +2 -0
  377. package/dist/RefHashSet.d.ts.map +1 -0
  378. package/dist/RefHashSet.js +1 -0
  379. package/dist/RefIterable.d.ts +2 -0
  380. package/dist/RefIterable.d.ts.map +1 -0
  381. package/dist/RefIterable.js +1 -0
  382. package/dist/RefOption.d.ts +2 -0
  383. package/dist/RefOption.d.ts.map +1 -0
  384. package/dist/RefOption.js +1 -0
  385. package/dist/RefRecord.d.ts +2 -0
  386. package/dist/RefRecord.d.ts.map +1 -0
  387. package/dist/RefRecord.js +1 -0
  388. package/dist/RefResult.d.ts +2 -0
  389. package/dist/RefResult.d.ts.map +1 -0
  390. package/dist/RefResult.js +1 -0
  391. package/dist/RefString.d.ts +2 -0
  392. package/dist/RefString.d.ts.map +1 -0
  393. package/dist/RefString.js +1 -0
  394. package/dist/RefStruct.d.ts +2 -0
  395. package/dist/RefStruct.d.ts.map +1 -0
  396. package/dist/RefStruct.js +1 -0
  397. package/dist/RefSubject/Hydration.d.ts +504 -0
  398. package/dist/RefSubject/Hydration.d.ts.map +1 -0
  399. package/dist/RefSubject/Hydration.js +300 -0
  400. package/dist/RefSubject/RefArray.d.ts +351 -4
  401. package/dist/RefSubject/RefArray.d.ts.map +1 -1
  402. package/dist/RefSubject/RefArray.js +339 -3
  403. package/dist/RefSubject/RefBigDecimal.d.ts +221 -1
  404. package/dist/RefSubject/RefBigDecimal.d.ts.map +1 -1
  405. package/dist/RefSubject/RefBigDecimal.js +210 -1
  406. package/dist/RefSubject/RefBigInt.d.ts +166 -1
  407. package/dist/RefSubject/RefBigInt.d.ts.map +1 -1
  408. package/dist/RefSubject/RefBigInt.js +155 -1
  409. package/dist/RefSubject/RefBoolean.d.ts +166 -1
  410. package/dist/RefSubject/RefBoolean.d.ts.map +1 -1
  411. package/dist/RefSubject/RefBoolean.js +155 -1
  412. package/dist/RefSubject/RefCause.d.ts +122 -1
  413. package/dist/RefSubject/RefCause.d.ts.map +1 -1
  414. package/dist/RefSubject/RefCause.js +111 -1
  415. package/dist/RefSubject/RefChunk.d.ts +406 -1
  416. package/dist/RefSubject/RefChunk.d.ts.map +1 -1
  417. package/dist/RefSubject/RefChunk.js +394 -0
  418. package/dist/RefSubject/RefDateTime.d.ts +122 -1
  419. package/dist/RefSubject/RefDateTime.d.ts.map +1 -1
  420. package/dist/RefSubject/RefDateTime.js +111 -1
  421. package/dist/RefSubject/RefDuration.d.ts +155 -1
  422. package/dist/RefSubject/RefDuration.d.ts.map +1 -1
  423. package/dist/RefSubject/RefDuration.js +144 -1
  424. package/dist/RefSubject/RefGraph.d.ts +320 -6
  425. package/dist/RefSubject/RefGraph.d.ts.map +1 -1
  426. package/dist/RefSubject/RefGraph.js +303 -0
  427. package/dist/RefSubject/RefHashMap.d.ts +296 -1
  428. package/dist/RefSubject/RefHashMap.d.ts.map +1 -1
  429. package/dist/RefSubject/RefHashMap.js +284 -0
  430. package/dist/RefSubject/RefHashRing.d.ts +146 -2
  431. package/dist/RefSubject/RefHashRing.d.ts.map +1 -1
  432. package/dist/RefSubject/RefHashRing.js +133 -0
  433. package/dist/RefSubject/RefHashSet.d.ts +230 -1
  434. package/dist/RefSubject/RefHashSet.d.ts.map +1 -1
  435. package/dist/RefSubject/RefHashSet.js +218 -0
  436. package/dist/RefSubject/RefIterable.d.ts +327 -1
  437. package/dist/RefSubject/RefIterable.d.ts.map +1 -1
  438. package/dist/RefSubject/RefIterable.js +315 -0
  439. package/dist/RefSubject/RefOption.d.ts +144 -1
  440. package/dist/RefSubject/RefOption.d.ts.map +1 -1
  441. package/dist/RefSubject/RefOption.js +133 -1
  442. package/dist/RefSubject/RefRecord.d.ts +339 -1
  443. package/dist/RefSubject/RefRecord.d.ts.map +1 -1
  444. package/dist/RefSubject/RefRecord.js +327 -0
  445. package/dist/RefSubject/RefResult.d.ts +155 -23
  446. package/dist/RefSubject/RefResult.d.ts.map +1 -1
  447. package/dist/RefSubject/RefResult.js +122 -1
  448. package/dist/RefSubject/RefString.d.ts +188 -1
  449. package/dist/RefSubject/RefString.d.ts.map +1 -1
  450. package/dist/RefSubject/RefString.js +177 -1
  451. package/dist/RefSubject/RefStruct.d.ts +156 -1
  452. package/dist/RefSubject/RefStruct.d.ts.map +1 -1
  453. package/dist/RefSubject/RefStruct.js +145 -1
  454. package/dist/RefSubject/RefSubject.d.ts +1166 -13
  455. package/dist/RefSubject/RefSubject.d.ts.map +1 -1
  456. package/dist/RefSubject/RefSubject.js +843 -51
  457. package/dist/RefSubject/RefTrie.d.ts +290 -4
  458. package/dist/RefSubject/RefTrie.d.ts.map +1 -1
  459. package/dist/RefSubject/RefTrie.js +278 -3
  460. package/dist/RefSubject/RefTuple.d.ts +117 -1
  461. package/dist/RefSubject/RefTuple.d.ts.map +1 -1
  462. package/dist/RefSubject/RefTuple.js +106 -1
  463. package/dist/RefSubject/index.d.ts +1 -0
  464. package/dist/RefSubject/index.d.ts.map +1 -1
  465. package/dist/RefSubject/index.js +1 -0
  466. package/dist/RefSubject.d.ts +2 -1
  467. package/dist/RefSubject.d.ts.map +1 -1
  468. package/dist/RefSubject.js +2 -1
  469. package/dist/RefTrie.d.ts +2 -0
  470. package/dist/RefTrie.d.ts.map +1 -0
  471. package/dist/RefTrie.js +1 -0
  472. package/dist/RefTuple.d.ts +2 -0
  473. package/dist/RefTuple.d.ts.map +1 -0
  474. package/dist/RefTuple.js +1 -0
  475. package/dist/Sink/Sink.d.ts +381 -10
  476. package/dist/Sink/Sink.d.ts.map +1 -1
  477. package/dist/Sink/Sink.js +49 -2
  478. package/dist/Sink/combinators.d.ts +731 -2
  479. package/dist/Sink/combinators.d.ts.map +1 -1
  480. package/dist/Sink/combinators.js +706 -4
  481. package/dist/Subject/Subject.d.ts +1013 -19
  482. package/dist/Subject/Subject.d.ts.map +1 -1
  483. package/dist/Subject/Subject.js +901 -36
  484. package/dist/Versioned/Versioned.d.ts +424 -7
  485. package/dist/Versioned/Versioned.d.ts.map +1 -1
  486. package/dist/Versioned/Versioned.js +238 -12
  487. package/dist/index.d.ts +22 -3
  488. package/dist/index.d.ts.map +1 -1
  489. package/dist/index.js +22 -3
  490. package/package.json +123 -14
  491. package/dist/Fx/constructors/fromYieldable.d.ts +0 -12
  492. package/dist/Fx/constructors/fromYieldable.d.ts.map +0 -1
  493. package/dist/Fx/constructors/fromYieldable.js +0 -12
  494. package/src/Fx/Fx.ts +0 -164
  495. package/src/Fx/TypeId.ts +0 -25
  496. package/src/Fx/combinators/additive.ts +0 -142
  497. package/src/Fx/combinators/catch.ts +0 -416
  498. package/src/Fx/combinators/causes.ts +0 -23
  499. package/src/Fx/combinators/changesWithEffect.ts +0 -66
  500. package/src/Fx/combinators/compact.ts +0 -15
  501. package/src/Fx/combinators/continueWith.ts +0 -78
  502. package/src/Fx/combinators/dropUntil.ts +0 -47
  503. package/src/Fx/combinators/ensuring.ts +0 -23
  504. package/src/Fx/combinators/exhaustLatestMap.ts +0 -74
  505. package/src/Fx/combinators/exhaustLatestMapEffect.ts +0 -25
  506. package/src/Fx/combinators/exhaustMap.ts +0 -36
  507. package/src/Fx/combinators/exhaustMapEffect.ts +0 -23
  508. package/src/Fx/combinators/exit.ts +0 -15
  509. package/src/Fx/combinators/filter.ts +0 -22
  510. package/src/Fx/combinators/filterEffect.ts +0 -31
  511. package/src/Fx/combinators/filterMap.ts +0 -23
  512. package/src/Fx/combinators/filterMapEffect.ts +0 -32
  513. package/src/Fx/combinators/filterMapLoop.ts +0 -35
  514. package/src/Fx/combinators/filterMapLoopCause.ts +0 -36
  515. package/src/Fx/combinators/filterMapLoopCauseEffect.ts +0 -46
  516. package/src/Fx/combinators/filterMapLoopEffect.ts +0 -36
  517. package/src/Fx/combinators/flatMap.ts +0 -51
  518. package/src/Fx/combinators/flatMapConcurrently.ts +0 -39
  519. package/src/Fx/combinators/flatMapConcurrentlyEffect.ts +0 -26
  520. package/src/Fx/combinators/flatMapEffect.ts +0 -42
  521. package/src/Fx/combinators/flip.ts +0 -14
  522. package/src/Fx/combinators/gen.ts +0 -24
  523. package/src/Fx/combinators/genScoped.ts +0 -24
  524. package/src/Fx/combinators/index.ts +0 -61
  525. package/src/Fx/combinators/keyed.ts +0 -369
  526. package/src/Fx/combinators/loop.ts +0 -27
  527. package/src/Fx/combinators/loopCause.ts +0 -34
  528. package/src/Fx/combinators/loopCauseEffect.ts +0 -36
  529. package/src/Fx/combinators/loopEffect.ts +0 -34
  530. package/src/Fx/combinators/map.ts +0 -22
  531. package/src/Fx/combinators/mapBoth.ts +0 -40
  532. package/src/Fx/combinators/mapEffect.ts +0 -32
  533. package/src/Fx/combinators/mapError.ts +0 -28
  534. package/src/Fx/combinators/mergeAll.ts +0 -22
  535. package/src/Fx/combinators/mergeOrdered.ts +0 -123
  536. package/src/Fx/combinators/onError.ts +0 -40
  537. package/src/Fx/combinators/onExit.ts +0 -82
  538. package/src/Fx/combinators/onInterrupt.ts +0 -87
  539. package/src/Fx/combinators/provide.ts +0 -124
  540. package/src/Fx/combinators/result.ts +0 -39
  541. package/src/Fx/combinators/scan.ts +0 -82
  542. package/src/Fx/combinators/skip.ts +0 -41
  543. package/src/Fx/combinators/skipRepeats.ts +0 -15
  544. package/src/Fx/combinators/skipRepeatsWith.ts +0 -40
  545. package/src/Fx/combinators/skipWhile.ts +0 -100
  546. package/src/Fx/combinators/slice.ts +0 -55
  547. package/src/Fx/combinators/switchMap.ts +0 -55
  548. package/src/Fx/combinators/switchMapEffect.ts +0 -25
  549. package/src/Fx/combinators/take.ts +0 -38
  550. package/src/Fx/combinators/takeUntil.ts +0 -88
  551. package/src/Fx/combinators/takeWhile.ts +0 -47
  552. package/src/Fx/combinators/tapEffect.ts +0 -39
  553. package/src/Fx/combinators/tuple.ts +0 -79
  554. package/src/Fx/combinators/unwrap.ts +0 -21
  555. package/src/Fx/combinators/unwrapScoped.ts +0 -26
  556. package/src/Fx/combinators/when.ts +0 -64
  557. package/src/Fx/combinators/withSpan.ts +0 -24
  558. package/src/Fx/combinators/zip.ts +0 -175
  559. package/src/Fx/constructors/at.ts +0 -23
  560. package/src/Fx/constructors/die.ts +0 -17
  561. package/src/Fx/constructors/empty.ts +0 -10
  562. package/src/Fx/constructors/fail.ts +0 -14
  563. package/src/Fx/constructors/failCause.ts +0 -14
  564. package/src/Fx/constructors/fn.ts +0 -245
  565. package/src/Fx/constructors/fromEffect.ts +0 -24
  566. package/src/Fx/constructors/fromFailures.ts +0 -19
  567. package/src/Fx/constructors/fromIterable.ts +0 -15
  568. package/src/Fx/constructors/fromSchedule.ts +0 -18
  569. package/src/Fx/constructors/fromYieldable.ts +0 -17
  570. package/src/Fx/constructors/index.ts +0 -15
  571. package/src/Fx/constructors/interrupt.ts +0 -13
  572. package/src/Fx/constructors/make.ts +0 -103
  573. package/src/Fx/constructors/periodic.ts +0 -15
  574. package/src/Fx/constructors/succeed.ts +0 -37
  575. package/src/Fx/constructors/suspend.ts +0 -6
  576. package/src/Fx/index.ts +0 -6
  577. package/src/Fx/internal/DeferredRef.ts +0 -87
  578. package/src/Fx/internal/UnionToTuple.ts +0 -12
  579. package/src/Fx/internal/diff.ts +0 -191
  580. package/src/Fx/internal/equivalence.ts +0 -12
  581. package/src/Fx/internal/multicast.ts +0 -51
  582. package/src/Fx/internal/ring-buffer.ts +0 -60
  583. package/src/Fx/internal/scope.ts +0 -58
  584. package/src/Fx/internal/yieldable.ts +0 -31
  585. package/src/Fx/run/collect.ts +0 -79
  586. package/src/Fx/run/first.ts +0 -20
  587. package/src/Fx/run/fork.ts +0 -40
  588. package/src/Fx/run/index.ts +0 -5
  589. package/src/Fx/run/observe.ts +0 -114
  590. package/src/Fx/run/runPromise.ts +0 -32
  591. package/src/Fx/stream.ts +0 -42
  592. package/src/Fx.additive-combinators.test.ts +0 -126
  593. package/src/Fx.catch-additive.test.ts +0 -206
  594. package/src/Fx.catch.test.ts +0 -60
  595. package/src/Fx.dropUntil.test.ts +0 -61
  596. package/src/Fx.fn.test.ts +0 -51
  597. package/src/Fx.lifecycle.test.ts +0 -79
  598. package/src/Fx.mapError-mapBoth.test.ts +0 -101
  599. package/src/Fx.provide-combinators.test.ts +0 -94
  600. package/src/Fx.result-changesWithEffect.test.ts +0 -112
  601. package/src/Fx.scan.test.ts +0 -73
  602. package/src/Fx.takeWhile-skipWhile.test.ts +0 -84
  603. package/src/Fx.test.ts +0 -71
  604. package/src/Fx.ts +0 -1
  605. package/src/Fx.zip-merge-additive.test.ts +0 -171
  606. package/src/Fx.zip.test.ts +0 -133
  607. package/src/Push/Push.ts +0 -1093
  608. package/src/Push/index.ts +0 -1
  609. package/src/Push.additive.test.ts +0 -256
  610. package/src/Push.test.ts +0 -26
  611. package/src/Push.ts +0 -1
  612. package/src/RefSubject/RefArray.ts +0 -516
  613. package/src/RefSubject/RefBigDecimal.test.ts +0 -56
  614. package/src/RefSubject/RefBigDecimal.ts +0 -295
  615. package/src/RefSubject/RefBigInt.test.ts +0 -56
  616. package/src/RefSubject/RefBigInt.ts +0 -189
  617. package/src/RefSubject/RefBoolean.test.ts +0 -57
  618. package/src/RefSubject/RefBoolean.ts +0 -185
  619. package/src/RefSubject/RefCause.test.ts +0 -53
  620. package/src/RefSubject/RefCause.ts +0 -146
  621. package/src/RefSubject/RefChunk.ts +0 -516
  622. package/src/RefSubject/RefDateTime.test.ts +0 -43
  623. package/src/RefSubject/RefDateTime.ts +0 -261
  624. package/src/RefSubject/RefDuration.test.ts +0 -49
  625. package/src/RefSubject/RefDuration.ts +0 -188
  626. package/src/RefSubject/RefGraph.ts +0 -649
  627. package/src/RefSubject/RefHashMap.ts +0 -474
  628. package/src/RefSubject/RefHashRing.ts +0 -262
  629. package/src/RefSubject/RefHashSet.ts +0 -308
  630. package/src/RefSubject/RefIterable.ts +0 -454
  631. package/src/RefSubject/RefOption.test.ts +0 -67
  632. package/src/RefSubject/RefOption.ts +0 -193
  633. package/src/RefSubject/RefRecord.ts +0 -621
  634. package/src/RefSubject/RefResult.test.ts +0 -63
  635. package/src/RefSubject/RefResult.ts +0 -209
  636. package/src/RefSubject/RefString.test.ts +0 -61
  637. package/src/RefSubject/RefString.ts +0 -256
  638. package/src/RefSubject/RefStruct.test.ts +0 -60
  639. package/src/RefSubject/RefStruct.ts +0 -253
  640. package/src/RefSubject/RefSubject.ts +0 -2642
  641. package/src/RefSubject/RefTrie.ts +0 -365
  642. package/src/RefSubject/RefTuple.test.ts +0 -60
  643. package/src/RefSubject/RefTuple.ts +0 -231
  644. package/src/RefSubject/index.ts +0 -21
  645. package/src/RefSubject.additive-parity.test.ts +0 -101
  646. package/src/RefSubject.test.ts +0 -65
  647. package/src/RefSubject.ts +0 -1
  648. package/src/Sink/Sink.ts +0 -159
  649. package/src/Sink/combinators.ts +0 -1115
  650. package/src/Sink/index.ts +0 -2
  651. package/src/Sink.combinators.test.ts +0 -88
  652. package/src/Sink.reduce-collect-head-last.test.ts +0 -107
  653. package/src/Sink.ts +0 -1
  654. package/src/Subject/Subject.ts +0 -440
  655. package/src/Subject/index.ts +0 -1
  656. package/src/Subject.test.ts +0 -47
  657. package/src/Subject.ts +0 -1
  658. package/src/Versioned/Versioned.ts +0 -595
  659. package/src/Versioned/index.ts +0 -1
  660. package/src/Versioned.filterMap.test.ts +0 -91
  661. package/src/Versioned.test.ts +0 -23
  662. package/src/Versioned.ts +0 -1
  663. 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,440 +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 Context from "effect/Context";
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: Context.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<readonly [Sink.Sink<A, E, any>, Context.Context<any>, Scope.Closeable]> =
195
- new Set();
196
-
197
- constructor() {
198
- this.onFailure = this.onFailure.bind(this);
199
- this.onSuccess = this.onSuccess.bind(this);
200
- }
201
-
202
- pipe() {
203
- return pipeArguments(this, arguments);
204
- }
205
-
206
- run<R2>(sink: Sink.Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
207
- return this.addSink(sink, awaitScopeClose);
208
- }
209
-
210
- onFailure(cause: Cause.Cause<E>) {
211
- return this.onCause(cause);
212
- }
213
-
214
- onSuccess(a: A) {
215
- return this.onEvent(a);
216
- }
217
-
218
- protected interruptScopes = Effect.withFiber((fiber) =>
219
- Effect.forEach(
220
- Array.from(this.sinks),
221
- ([, , scope]) => Scope.close(scope, Exit.interrupt(fiber.id)),
222
- DISCARD,
223
- ),
224
- );
225
-
226
- readonly interrupt = this.interruptScopes;
227
-
228
- protected addSink<R, B, R2>(
229
- sink: Sink.Sink<A, E, R>,
230
- f: (scope: Scope.Scope) => Effect.Effect<B, never, R2>,
231
- ): Effect.Effect<B, never, R2 | Scope.Scope> {
232
- return withExtendedScope(
233
- (innerScope) =>
234
- Effect.contextWith((ctx) => {
235
- const entry = [sink, ctx, innerScope] as const;
236
- this.sinks.add(entry);
237
- const remove = Effect.sync(() => this.sinks.delete(entry));
238
-
239
- return Effect.flatMap(Scope.addFinalizer(innerScope, remove), () => f(innerScope));
240
- }),
241
- "sequential",
242
- );
243
- }
244
-
245
- readonly subscriberCount: Effect.Effect<number> = Effect.sync(() => this.sinks.size);
246
-
247
- protected onEvent(a: A): Effect.Effect<void, never, never> {
248
- if (this.sinks.size === 0) return Effect.void;
249
- else if (this.sinks.size === 1) {
250
- const [sink, ctx] = this.sinks.values().next().value!;
251
- return runSinkEvent(sink, ctx, a);
252
- } else {
253
- return Effect.forEach(this.sinks, ([sink, ctx]) => runSinkEvent(sink, ctx, a), DISCARD);
254
- }
255
- }
256
-
257
- protected onCause(cause: Cause.Cause<E>) {
258
- if (this.sinks.size === 0) return Effect.void;
259
- else if (this.sinks.size === 1) {
260
- const [sink, ctx, scope] = this.sinks.values().next().value!;
261
- return runSinkCause(sink, ctx, scope, cause);
262
- } else {
263
- return Effect.forEach(
264
- this.sinks,
265
- ([sink, ctx, scope]) => runSinkCause(sink, ctx, scope, cause),
266
- DISCARD,
267
- );
268
- }
269
- }
270
- }
271
-
272
- function runSinkEvent<A, E>(
273
- sink: Sink.Sink<A, E, any>,
274
- ctx: Context.Context<any>,
275
- a: A,
276
- ): Effect.Effect<void, never, never> {
277
- return Effect.provide(Effect.catchCause(sink.onSuccess(a), sink.onFailure), ctx);
278
- }
279
-
280
- function runSinkCause<A, E>(
281
- sink: Sink.Sink<A, E, any>,
282
- ctx: Context.Context<any>,
283
- scope: Scope.Closeable,
284
- cause: Cause.Cause<E>,
285
- ): Effect.Effect<void, never, never> {
286
- return Effect.provide(
287
- Effect.catchCause(sink.onFailure(cause), (error) => Scope.close(scope, Exit.failCause(error))),
288
- ctx,
289
- );
290
- }
291
-
292
- /**
293
- * @internal
294
- */
295
- export class HoldSubjectImpl<A, E> extends SubjectImpl<A, E> implements Subject<A, E> {
296
- readonly lastValue: MutableRef.MutableRef<Option.Option<Exit.Exit<A, E>>> = MutableRef.make(
297
- Option.none(),
298
- );
299
-
300
- override onSuccess = (a: A): Effect.Effect<void, never, never> =>
301
- Effect.suspend(() => {
302
- // Keep track of the last value emitted by the subject
303
- MutableRef.set(this.lastValue, Option.some(Exit.succeed(a)));
304
-
305
- return this.onEvent(a);
306
- });
307
-
308
- override onFailure = (cause: Cause.Cause<E>): Effect.Effect<void, never, never> => {
309
- return Effect.suspend(() => {
310
- // Keep track of the last value emitted by the subject
311
- MutableRef.set(this.lastValue, Option.some(Exit.failCause(cause)));
312
-
313
- return this.onCause(cause);
314
- });
315
- };
316
-
317
- override run<R2>(sink: Sink.Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
318
- return this.addSink(sink, (scope) =>
319
- Option.match(MutableRef.get(this.lastValue), {
320
- onNone: () => awaitScopeClose(scope),
321
- // If we have a previous value, emit it first
322
- onSome: (exit) => Effect.flatMap(Exit.match(exit, sink), () => awaitScopeClose(scope)),
323
- }),
324
- );
325
- }
326
-
327
- override readonly interrupt = Effect.tap(
328
- this.interruptScopes,
329
- Effect.sync(() => MutableRef.set(this.lastValue, Option.none())),
330
- );
331
- }
332
-
333
- /**
334
- * @internal
335
- */
336
- export class ReplaySubjectImpl<A, E> extends SubjectImpl<A, E> {
337
- readonly buffer: RingBuffer<Exit.Exit<A, E>>;
338
-
339
- constructor(buffer: RingBuffer<Exit.Exit<A, E>>) {
340
- super();
341
- this.buffer = buffer;
342
- }
343
-
344
- override onSuccess = (a: A): Effect.Effect<void, never, never> =>
345
- Effect.suspend(() => {
346
- // Keep track of the last value emitted by the subject
347
- this.buffer.push(Exit.succeed(a));
348
- return this.onEvent(a);
349
- });
350
-
351
- override onFailure = (cause: Cause.Cause<E>): Effect.Effect<void, never, never> =>
352
- Effect.suspend(() => {
353
- this.buffer.push(Exit.failCause(cause));
354
- return this.onCause(cause);
355
- });
356
-
357
- override run<R2>(sink: Sink.Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
358
- return this.addSink(sink, (scope) =>
359
- Effect.flatMap(this.buffer.forEach(Exit.match(sink)), () => awaitScopeClose(scope)),
360
- );
361
- }
362
-
363
- override readonly interrupt = Effect.tap(
364
- this.interruptScopes,
365
- Effect.sync(() => this.buffer.clear()),
366
- );
367
- }
368
-
369
- /**
370
- * Creates a `Subject` that replays the last `replay` values. You will need to manually call `interrupt` on the subject to clear resources.
371
- * @param replay - The number of values to replay.
372
- * @returns A `Subject` that replays the last `replay` values.
373
- */
374
- export function unsafeMake<A, E = never>(replay: number = 0): Subject<A, E> {
375
- replay = Math.max(0, replay);
376
-
377
- if (replay === 0) {
378
- return new SubjectImpl<A, E>();
379
- } else if (replay === 1) {
380
- return new HoldSubjectImpl<A, E>();
381
- } else {
382
- return new ReplaySubjectImpl<A, E>(new RingBuffer(replay));
383
- }
384
- }
385
-
386
- /**
387
- * Create a Subject which utilizes a Scope to manage the lifecycle of the subject's resources.
388
- */
389
- export function make<A, E = never>(
390
- replay?: number,
391
- ): Effect.Effect<Subject<A, E>, never, Scope.Scope> {
392
- return Effect.acquireRelease(
393
- Effect.sync(() => unsafeMake(replay)),
394
- (subject) => subject.interrupt,
395
- );
396
- }
397
-
398
- export function Service<Self, A, E = never>() {
399
- return <const Id extends string>(id: Id): Subject.Class<Self, Id, A, E> => {
400
- const service = Context.Service<Self, Subject<A, E>>(id);
401
-
402
- // eslint-disable-next-line @typescript-eslint/no-extraneous-class
403
- return class SubjectService {
404
- static readonly id = id;
405
- static readonly service = service;
406
-
407
- static readonly make = (replay?: number): Layer.Layer<Self, never, Scope.Scope> =>
408
- Layer.effect(service, make<A, E>(replay));
409
-
410
- static readonly [FxTypeId] = VARIANCE;
411
- static readonly pipe = function (this: any) {
412
- return pipeArguments(this, arguments);
413
- };
414
-
415
- // Fx
416
- static readonly run = <RSink>(sink: Sink.Sink<A, E, RSink>) =>
417
- Effect.flatMap(service.asEffect(), (subject) => subject.run(sink));
418
-
419
- // Sink
420
- static readonly onSuccess = (value: A) =>
421
- Effect.flatMap(service.asEffect(), (subject) => subject.onSuccess(value));
422
- static readonly onFailure = (cause: Cause.Cause<E>) =>
423
- Effect.flatMap(service.asEffect(), (subject) => subject.onFailure(cause));
424
-
425
- // Subject
426
- static readonly subscriberCount = Effect.flatMap(
427
- service.asEffect(),
428
- (subject) => subject.subscriberCount,
429
- );
430
- static readonly interrupt = Effect.flatMap(
431
- service.asEffect(),
432
- (subject) => subject.interrupt,
433
- );
434
-
435
- constructor() {
436
- return SubjectService;
437
- }
438
- } as unknown as Subject.Class<Self, Id, A, E>;
439
- };
440
- }
@@ -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";