@typed/fx 2.0.0-beta.3 → 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 +364 -12
  3. package/dist/Fx/Fx.d.ts.map +1 -1
  4. package/dist/Fx/Fx.js +37 -6
  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 +68 -10
  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 +138 -17
  156. package/dist/Fx/combinators/provide.d.ts.map +1 -1
  157. package/dist/Fx/combinators/provide.js +134 -13
  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 +41 -2
  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 +42 -4
  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 +56 -5
  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 +108 -2
  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 +1219 -94
  341. package/dist/Push/Push.d.ts.map +1 -1
  342. package/dist/Push/Push.js +1015 -86
  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 +1168 -15
  455. package/dist/RefSubject/RefSubject.d.ts.map +1 -1
  456. package/dist/RefSubject/RefSubject.js +850 -58
  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 +385 -14
  476. package/dist/Sink/Sink.d.ts.map +1 -1
  477. package/dist/Sink/Sink.js +53 -6
  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 +707 -5
  481. package/dist/Subject/Subject.d.ts +1016 -22
  482. package/dist/Subject/Subject.d.ts.map +1 -1
  483. package/dist/Subject/Subject.js +904 -39
  484. package/dist/Versioned/Versioned.d.ts +426 -9
  485. package/dist/Versioned/Versioned.d.ts.map +1 -1
  486. package/dist/Versioned/Versioned.js +241 -15
  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 +120 -11
  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 -1072
  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 -2644
  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 -441
  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 -597
  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
@@ -1,4 +1,4 @@
1
- import type * as Cause from "effect/Cause";
1
+ import * as Cause from "effect/Cause";
2
2
  import * as Effect from "effect/Effect";
3
3
  import * as Exit from "effect/Exit";
4
4
  import * as Fiber from "effect/Fiber";
@@ -6,41 +6,268 @@ import * as Layer from "effect/Layer";
6
6
  import * as MutableRef from "effect/MutableRef";
7
7
  import * as Option from "effect/Option";
8
8
  import * as Scope from "effect/Scope";
9
- import * as ServiceMap from "effect/ServiceMap";
9
+ import * as Context from "effect/Context";
10
10
  import type * as Fx from "../Fx/index.js";
11
11
  import { RingBuffer } from "../Fx/internal/ring-buffer.js";
12
12
  import { FxTypeId } from "../Fx/TypeId.js";
13
13
  import type * as Sink from "../Sink/Sink.js";
14
14
  /**
15
- * A `Subject` is an `Fx` that allows for imperative pushing of values.
16
- * It also acts as a `Sink`, meaning you can `run` another `Fx` into it.
15
+ * A multicast boundary that is both an `Fx` of its publications and a `Sink` that accepts them.
16
+ * Successes and failures are pushed to every subscriber present when that publication begins.
17
+ *
18
+ * @remarks
19
+ * ## Why
20
+ *
21
+ * `Subject` connects imperative or independently owned producers to `Fx` without changing the
22
+ * producer-driven direction of the work. Because the same value is also a `Sink`, another `Fx` can
23
+ * publish into it with `run` while any number of consumers subscribe through the ordinary `Fx`
24
+ * surface.
25
+ *
26
+ * ## Publication order
27
+ *
28
+ * Publications are serialized in FIFO order, including publications made concurrently or from
29
+ * inside a subscriber callback. The subscriber set is snapshotted once per publication: a
30
+ * subscriber removed during a delivery receives no later publication, and a subscriber added
31
+ * during a delivery begins with the next publication. A failure publication uses the error channel
32
+ * but does not permanently terminate the subject. A reentrant `onSuccess` or `onFailure` call from
33
+ * the fiber currently draining subscribers enqueues its publication and returns before that queued
34
+ * publication is delivered; the outer drain still delivers it in FIFO order.
35
+ *
36
+ * ## Ownership and lifetime
37
+ *
38
+ * Each call to `run` registers its sink in the caller's `Scope`; closing that scope removes only
39
+ * that subscription. `interrupt` closes all current subscriber scopes and clears retained replay
40
+ * state. A subject created by `make` is interrupted automatically when its owning scope closes;
41
+ * `unsafeMake` leaves that responsibility with the caller.
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * import { Effect, Fiber } from "effect"
46
+ * import { Fx } from "@typed/fx"
47
+ * import * as Subject from "@typed/fx/Subject"
48
+ *
49
+ * const program = Effect.gen(function* () {
50
+ * const events = yield* Subject.make<string>(2)
51
+ * const collected = yield* Effect.forkScoped(Fx.collectAll(Fx.take(events, 2)))
52
+ *
53
+ * yield* events.onSuccess("connected")
54
+ * yield* events.onSuccess("ready")
55
+ *
56
+ * return yield* Fiber.join(collected)
57
+ * }).pipe(Effect.scoped)
58
+ * ```
17
59
  *
18
60
  * @since 1.0.0
19
61
  * @category models
20
62
  */
21
63
  export interface Subject<A, E = never, R = never> extends Fx.Fx<A, E, R | Scope.Scope>, Sink.Sink<A, E, R> {
22
64
  /**
23
- * The number of current subscribers to this Subject.
65
+ * Samples the number of sinks currently registered with this subject.
66
+ *
67
+ * @remarks
68
+ * ## Why
69
+ *
70
+ * Exposes demand for diagnostics and demand-sensitive coordination without coupling producers to
71
+ * the subject implementation.
72
+ *
73
+ * ## Ownership and lifetime
74
+ *
75
+ * The returned `Effect` does not subscribe or retain anything. It reads the count when executed
76
+ * and requires the same services `R` as the subject implementation.
77
+ *
78
+ * @since 1.0.0
79
+ * @category utilities
24
80
  */
25
81
  readonly subscriberCount: Effect.Effect<number, never, R>;
26
82
  /**
27
- * Interrupts all subscribers and clears the subject.
83
+ * Interrupts every current subscription and clears any retained replay values.
84
+ *
85
+ * @remarks
86
+ * ## Why
87
+ *
88
+ * Gives the subject owner one deterministic shutdown operation for all active consumers and
89
+ * retained publications.
90
+ *
91
+ * ## Ownership and lifetime
92
+ *
93
+ * Closing subscriber scopes runs their finalizers. The effect cannot fail, and the subject may be
94
+ * subscribed to and published through again after the interruption.
95
+ *
96
+ * @since 1.0.0
97
+ * @category utilities
28
98
  */
29
99
  readonly interrupt: Effect.Effect<void, never, R>;
30
100
  }
31
101
  export declare namespace Subject {
102
+ /**
103
+ * The service-shaped form of a `Subject` created by `Subject.Service`.
104
+ *
105
+ * @remarks
106
+ * ## Why
107
+ *
108
+ * A service form lets producers and consumers refer to one shared subject through Effect's
109
+ * context instead of passing the concrete instance through every call.
110
+ *
111
+ * ## Ownership and lifetime
112
+ *
113
+ * Static Subject operations require `Self` and delegate to the instance installed by `make`.
114
+ * The layer owns that instance in a `Scope` and interrupts it when the layer is released.
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * import * as Subject from "@typed/fx/Subject"
119
+ *
120
+ * class Events extends Subject.Service<Events, string>()("Events") {}
121
+ * const EventsLive = Events.make()
122
+ * ```
123
+ *
124
+ * @since 1.0.0
125
+ * @category models
126
+ */
32
127
  interface Service<Self, Id extends string, A, E> extends Subject<A, E, Self> {
128
+ /**
129
+ * The literal context identifier supplied to `Subject.Service`.
130
+ *
131
+ * @remarks
132
+ * ## Why
133
+ *
134
+ * Preserves the service's stable identity for diagnostics and layer composition.
135
+ *
136
+ * ## Ownership and lifetime
137
+ *
138
+ * This string literal acquires and retains no resources.
139
+ *
140
+ * @since 1.0.0
141
+ * @category identifiers
142
+ */
33
143
  readonly id: Id;
34
- readonly service: ServiceMap.Service<Self, Subject<A, E>>;
35
- readonly make: (replay?: number) => Layer.Layer<Self, never, Scope.Scope>;
144
+ /**
145
+ * The Effect context service used to retrieve the live subject instance.
146
+ *
147
+ * @remarks
148
+ * ## Why
149
+ *
150
+ * Provides the standard Effect service lookup used by every static Subject operation.
151
+ *
152
+ * ## Ownership and lifetime
153
+ *
154
+ * The tag acquires nothing; the layer installed for it owns the concrete subject.
155
+ *
156
+ * @since 1.0.0
157
+ * @category context
158
+ */
159
+ readonly service: Context.Service<Self, Subject<A, E>>;
160
+ /**
161
+ * Builds a scoped layer containing one subject with the requested replay capacity.
162
+ *
163
+ * @remarks
164
+ * ## Why
165
+ *
166
+ * Packages one shared subject as a normal Effect layer for dependency composition.
167
+ *
168
+ * ## Ownership and lifetime
169
+ *
170
+ * Invalid capacities fail layer construction with `Cause.IllegalArgumentError`. The layer's
171
+ * scope owns the subject and interrupts its subscribers and clears its replay buffer on release.
172
+ *
173
+ * @example
174
+ * ```ts
175
+ * import * as Subject from "@typed/fx/Subject"
176
+ *
177
+ * class Events extends Subject.Service<Events, string>()("Events") {}
178
+ * const EventsLive = Events.make(1)
179
+ * ```
180
+ *
181
+ * @since 1.0.0
182
+ * @category layers
183
+ */
184
+ readonly make: (replay?: number) => Layer.Layer<Self, Cause.IllegalArgumentError, Scope.Scope>;
36
185
  }
186
+ /**
187
+ * A constructible service facade whose static side is also the contextual `Subject`.
188
+ *
189
+ * @remarks
190
+ * ## Why
191
+ *
192
+ * Supports the class-based Effect service declaration pattern without creating a second runtime
193
+ * object distinct from the static Subject facade.
194
+ *
195
+ * ## Ownership and lifetime
196
+ *
197
+ * Constructing the class returns its service facade; it does not allocate a subject. Use the
198
+ * static `make` layer to allocate and scope the backing instance.
199
+ *
200
+ * @since 1.0.0
201
+ * @category models
202
+ */
37
203
  interface Class<Self, Id extends string, A, E> extends Service<Self, Id, A, E> {
204
+ /**
205
+ * Returns the contextual service facade without allocating a subject.
206
+ *
207
+ * @remarks
208
+ * ## Why
209
+ *
210
+ * Enables `class Events extends Subject.Service<...>()("Events") {}` while retaining the
211
+ * facade's static `Fx`, `Sink`, and layer operations.
212
+ *
213
+ * ## Ownership and lifetime
214
+ *
215
+ * Construction acquires no resources; the static `make` layer owns the backing subject.
216
+ *
217
+ * @example
218
+ * ```ts
219
+ * import * as Subject from "@typed/fx/Subject"
220
+ *
221
+ * class Events extends Subject.Service<Events, string>()("Events") {}
222
+ * const facade = new Events()
223
+ * ```
224
+ *
225
+ * @since 1.0.0
226
+ * @category constructors
227
+ */
38
228
  new (): Service<Self, Id, A, E>;
39
229
  }
40
230
  }
41
231
  /**
42
- * Shares the execution of an Fx among multiple subscribers using a Subject.
43
- * The source Fx is started when the first subscriber arrives and stopped when the last one leaves.
232
+ * Shares one active execution of an `Fx` among subscribers through the supplied `Subject`.
233
+ *
234
+ * @remarks
235
+ * ## Why
236
+ *
237
+ * Use `share` when the caller must choose the multicast boundary—for example, a replaying subject,
238
+ * a renderer-independent state object, or a service-backed subject—while ensuring that simultaneous
239
+ * consumers do not duplicate the source's effects.
240
+ *
241
+ * ## Subscription and publication
242
+ *
243
+ * A subscriber is registered with the subject before the source starts, so the first subscriber
244
+ * observes synchronous first values and failures. The first active subscriber starts the source;
245
+ * later subscribers join that execution. When the last subscriber leaves, the source fiber is
246
+ * interrupted. A later subscriber starts a fresh session.
247
+ *
248
+ * ## Errors, services, and interruption
249
+ *
250
+ * Source successes and failures are pushed unchanged through the subject. The returned `Fx`
251
+ * requires the union of source services and subject services.
252
+ *
253
+ * ## Ownership and lifetime
254
+ *
255
+ * `Scope` owns each individual subscription. The shared source is finalized exactly once when the
256
+ * active session ends or the source itself exits. `share` takes session ownership of the supplied
257
+ * subject: source exit calls its `interrupt`, closing all of that subject's subscribers and clearing
258
+ * retained state. Do not concurrently reuse the same subject for an independently owned producer
259
+ * or subscriber population.
260
+ *
261
+ * @example
262
+ * ```ts
263
+ * import { Effect } from "effect"
264
+ * import { Fx } from "@typed/fx"
265
+ * import * as Subject from "@typed/fx/Subject"
266
+ *
267
+ * const backing = Subject.unsafeMake<number>(1)
268
+ * const request = Fx.fromEffect(Effect.succeed(42))
269
+ * const shared = Subject.share(request, backing)
270
+ * ```
44
271
  *
45
272
  * @param fx - The source Fx.
46
273
  * @param subject - The subject to use for multicasting.
@@ -54,21 +281,230 @@ declare class RefCounter {
54
281
  increment(): number;
55
282
  decrement(): number;
56
283
  }
284
+ /**
285
+ * The concrete lazy `Fx` returned by `share`.
286
+ *
287
+ * @remarks
288
+ * ## Why
289
+ *
290
+ * `Share` exposes the ref-counted sharing mechanism as an ordinary `Fx`: one source execution feeds
291
+ * the selected subject while each caller has an independently scoped subscription to that subject.
292
+ * Most callers should prefer `share`, `multicast`, `hold`, or `replay` for clearer intent.
293
+ *
294
+ * ## Ownership and lifetime
295
+ *
296
+ * Construction acquires nothing. The first executing `run` starts a detached source fiber; the
297
+ * final executing `run` interrupts it. Source completion interrupts the subject's current
298
+ * subscribers. Source, subject, and sink services are required only when `run` executes.
299
+ *
300
+ * @example
301
+ * ```ts
302
+ * import { Fx } from "@typed/fx"
303
+ * import { Share, unsafeMake } from "@typed/fx/Subject"
304
+ *
305
+ * const shared = new Share(Fx.succeed(1), unsafeMake<number>())
306
+ * ```
307
+ *
308
+ * @since 1.0.0
309
+ * @category models
310
+ */
57
311
  export declare class Share<A, E, R, R2> implements Fx.Fx<A, E, R | R2 | Scope.Scope> {
312
+ /**
313
+ * Carries `Fx` variance information for the shared output, error, and service channels.
314
+ *
315
+ * @remarks
316
+ * ## Why
317
+ *
318
+ * Lets generic `Fx` utilities recognize and infer a `Share` without inspecting its runtime fields.
319
+ *
320
+ * ## Ownership and lifetime
321
+ *
322
+ * The marker is immutable metadata and acquires no resources.
323
+ *
324
+ * @since 1.0.0
325
+ * @category type-level
326
+ */
58
327
  readonly [FxTypeId]: Fx.Fx.Variance<A, E, R | R2 | Scope.Scope>;
328
+ /**
329
+ * Tracks the source fiber for the current active subscriber session.
330
+ *
331
+ * @remarks
332
+ * ## Why
333
+ *
334
+ * Gives the final departing subscriber an exact fiber to interrupt without restarting or
335
+ * duplicating the source.
336
+ *
337
+ * ## Ownership and lifetime
338
+ *
339
+ * The reference is empty before a session, set after the first subscriber starts the source, and
340
+ * cleared before or when that session ends. It does not outlive the `Share` instance.
341
+ *
342
+ * @since 1.0.0
343
+ * @category state
344
+ */
59
345
  _FxFiber: MutableRef.MutableRef<Option.Option<Fiber.Fiber<unknown>>>;
346
+ /**
347
+ * Tracks how many executing `run` effects participate in the active source session.
348
+ *
349
+ * @remarks
350
+ * ## Why
351
+ *
352
+ * Implements the first-subscriber start and last-subscriber stop boundary.
353
+ *
354
+ * ## Ownership and lifetime
355
+ *
356
+ * The counter is owned by the `Share` instance and never falls below zero. Each executing `run`
357
+ * increments once and decrements in its exit finalizer.
358
+ *
359
+ * @since 1.0.0
360
+ * @category state
361
+ */
60
362
  _RefCount: RefCounter;
363
+ /**
364
+ * The source whose execution is shared.
365
+ *
366
+ * @remarks
367
+ * ## Why
368
+ *
369
+ * Retains the original source so every active session can start exactly that `Fx`.
370
+ *
371
+ * ## Ownership and lifetime
372
+ *
373
+ * Holding the `Fx` value starts no work. Its `R` services and cleanup participate only while a
374
+ * subscriber session is active.
375
+ *
376
+ * @since 1.0.0
377
+ * @category inputs
378
+ */
61
379
  readonly i0: Fx.Fx<A, E, R>;
380
+ /**
381
+ * The multicast subject receiving source publications.
382
+ *
383
+ * @remarks
384
+ * ## Why
385
+ *
386
+ * Separates source sharing from retention and publication policy.
387
+ *
388
+ * ## Ownership and lifetime
389
+ *
390
+ * `Share` does not allocate this subject. It subscribes sinks to it and interrupts it when the
391
+ * source session exits; the subject's `R2` services remain required by `run`.
392
+ *
393
+ * @since 1.0.0
394
+ * @category inputs
395
+ */
62
396
  readonly i1: Subject<A, E, R2>;
397
+ /**
398
+ * Creates the lazy shared `Fx`; source acquisition waits until the first call to `run` executes.
399
+ *
400
+ * @remarks
401
+ * ## Why
402
+ *
403
+ * Keeps selection of the source and multicast policy separate from their execution.
404
+ *
405
+ * ## Ownership and lifetime
406
+ *
407
+ * The constructor only stores `i0` and `i1`; it starts no fiber and installs no finalizer.
408
+ *
409
+ * @example
410
+ * ```ts
411
+ * import { Fx } from "@typed/fx"
412
+ * import { Share, unsafeMake } from "@typed/fx/Subject"
413
+ *
414
+ * const shared = new Share(Fx.succeed("ready"), unsafeMake<string>())
415
+ * ```
416
+ *
417
+ * @since 1.0.0
418
+ * @category constructors
419
+ */
63
420
  constructor(i0: Fx.Fx<A, E, R>, i1: Subject<A, E, R2>);
421
+ /**
422
+ * Returns this value through the concrete class's zero-argument pipe entrypoint.
423
+ *
424
+ * @remarks
425
+ * ## Why
426
+ *
427
+ * Supplies the runtime pipe hook required by `Fx`; the concrete `Share` declaration currently
428
+ * publishes only its zero-argument signature, so typed combinator composition should target the
429
+ * `Fx` returned by `share`, `multicast`, `hold`, or `replay`.
430
+ *
431
+ * ## Ownership and lifetime
432
+ *
433
+ * Calling `pipe` itself acquires no resources; only an executing downstream `run` starts work.
434
+ *
435
+ * @example
436
+ * ```ts
437
+ * import { Fx } from "@typed/fx"
438
+ * import { Share, unsafeMake } from "@typed/fx/Subject"
439
+ *
440
+ * const shared = new Share(Fx.succeed(1), unsafeMake<number>())
441
+ * const same = shared.pipe()
442
+ * ```
443
+ *
444
+ * @since 1.0.0
445
+ * @category utilities
446
+ */
64
447
  pipe(): unknown;
448
+ /**
449
+ * Registers `sink`, joins or starts the active source session, and remains active until the
450
+ * subscription ends. Interruption removes this subscriber and stops the source if it was last.
451
+ *
452
+ * @remarks
453
+ * ## Why
454
+ *
455
+ * Implements `Fx` consumption while coordinating one source execution across independent sinks.
456
+ *
457
+ * ## Ownership and lifetime
458
+ *
459
+ * The caller's `Scope` owns its subject subscription. Source `R`, subject `R2`, and sink `R3`
460
+ * services are required during execution. Source failures are published to the sink rather than
461
+ * failing this returned Effect, whose error channel is `never`.
462
+ *
463
+ * @example
464
+ * ```ts
465
+ * import { Effect } from "effect"
466
+ * import { Fx } from "@typed/fx"
467
+ * import * as Sink from "@typed/fx/Sink"
468
+ * import { Share, unsafeMake } from "@typed/fx/Subject"
469
+ *
470
+ * const shared = new Share(Fx.succeed(1), unsafeMake<number>())
471
+ * const run = shared.run(
472
+ * Sink.make(
473
+ * () => Effect.void,
474
+ * (value) => Effect.sync(() => console.log(value))
475
+ * )
476
+ * )
477
+ * ```
478
+ *
479
+ * @since 1.0.0
480
+ * @category runners
481
+ */
65
482
  run<R3>(sink: Sink.Sink<A, E, R3>): Effect.Effect<unknown, never, R | R2 | R3 | Scope.Scope>;
66
483
  private initialize;
67
484
  private interrupt;
68
485
  }
69
486
  /**
70
- * Multicasts an Fx to multiple subscribers.
71
- * The source Fx is shared, so side effects only happen once per active session (ref count > 0).
487
+ * Multicasts an `Fx` without replaying values that arrived before a subscriber joined.
488
+ *
489
+ * @remarks
490
+ * ## Why
491
+ *
492
+ * `multicast` is the zero-retention sharing policy: simultaneous subscribers share source work,
493
+ * while consumers that arrive later receive only later publications.
494
+ *
495
+ * ## Ownership and lifetime
496
+ *
497
+ * The first subscriber starts one source execution and the last subscriber interrupts it. A later
498
+ * subscriber starts a fresh execution. No replay buffer is retained. Source errors and services
499
+ * are preserved, and `Scope` owns each subscription.
500
+ *
501
+ * @example
502
+ * ```ts
503
+ * import { Fx } from "@typed/fx"
504
+ * import * as Subject from "@typed/fx/Subject"
505
+ *
506
+ * const sharedTicks = Subject.multicast(Fx.periodic("1 second"))
507
+ * ```
72
508
  *
73
509
  * @param fx - The source Fx.
74
510
  * @returns A multicasted `Fx`.
@@ -77,7 +513,34 @@ export declare class Share<A, E, R, R2> implements Fx.Fx<A, E, R | R2 | Scope.Sc
77
513
  */
78
514
  export declare function multicast<A, E, R>(fx: Fx.Fx<A, E, R>): Fx.Fx<A, E, R | Scope.Scope>;
79
515
  /**
80
- * Holds the latest value emitted by the Fx and replays it to new subscribers.
516
+ * Shares an `Fx` and immediately replays its latest success or failure to each new subscriber.
517
+ *
518
+ * @remarks
519
+ * ## Why
520
+ *
521
+ * `hold` gives late subscribers the current publication without restarting an already active
522
+ * source, making it suitable for current-value streams and state-like projections.
523
+ *
524
+ * ## Ownership and lifetime
525
+ *
526
+ * One retained `Exit` belongs to the active shared subject. The first subscriber starts the source,
527
+ * the last subscriber interrupts it, and interruption clears the retained exit. Source errors and
528
+ * services remain visible in the returned `Fx`; subscription cleanup belongs to `Scope`.
529
+ *
530
+ * ## Join-during-publication behavior
531
+ *
532
+ * The latest `Exit` is retained before it enters the serialized publication queue. If a subscriber
533
+ * joins while an earlier publication is still draining, it can receive that queued exit immediately
534
+ * as replay and then receive it again when the queue reaches it. Consumers that require exactly-once
535
+ * delivery across concurrent subscription and publication must coordinate that boundary externally.
536
+ *
537
+ * @example
538
+ * ```ts
539
+ * import { Fx } from "@typed/fx"
540
+ * import * as Subject from "@typed/fx/Subject"
541
+ *
542
+ * const currentStatus = Subject.hold(Fx.succeed("ready"))
543
+ * ```
81
544
  *
82
545
  * @param fx - The source Fx.
83
546
  * @returns A shared `Fx` that replays the latest value.
@@ -86,67 +549,598 @@ export declare function multicast<A, E, R>(fx: Fx.Fx<A, E, R>): Fx.Fx<A, E, R |
86
549
  */
87
550
  export declare function hold<A, E, R>(fx: Fx.Fx<A, E, R>): Fx.Fx<A, E, R | Scope.Scope>;
88
551
  /**
89
- * Replays the last `capacity` values emitted by the Fx to new subscribers.
552
+ * Shares an `Fx` and replays up to the last `capacity` successes or failures to new subscribers.
553
+ *
554
+ * @remarks
555
+ * ## Why
90
556
  *
91
- * @param capacity - The number of values to buffer and replay.
557
+ * `replay` makes retention an explicit caller-selected policy rather than an implicit property of
558
+ * every shared stream. Capacity `0` is equivalent to multicast retention; capacity `1` has hold
559
+ * semantics; larger values replay the retained window from oldest to newest.
560
+ *
561
+ * ## Errors and interruption
562
+ *
563
+ * A non-integer, negative, or larger-than-32-bit capacity produces an `Fx` that fails with
564
+ * `Cause.IllegalArgumentError` without starting the source. Valid buffers retain `Exit` values, so
565
+ * typed failures keep their original causes and order. The last subscriber interrupts the source
566
+ * and clears the buffer; source services remain in the return type.
567
+ *
568
+ * ## Ownership and lifetime
569
+ *
570
+ * `Scope` owns each subscription and the final subscriber owns shutdown of the active source
571
+ * session. Buffer memory belongs to that session and is cleared when it is interrupted.
572
+ *
573
+ * ## Join-during-publication behavior
574
+ *
575
+ * Each `Exit` enters the replay buffer before it enters the serialized publication queue. A
576
+ * subscriber joining while an earlier publication is still draining can replay a later queued exit
577
+ * and then receive the same exit again when normal delivery reaches it. Replay guarantees retained
578
+ * order, not exactly-once delivery across a concurrent subscribe/publish race.
579
+ *
580
+ * @example
581
+ * ```ts
582
+ * import { Fx } from "@typed/fx"
583
+ * import * as Subject from "@typed/fx/Subject"
584
+ *
585
+ * const recent = Fx.fromIterable([1, 2, 3]).pipe(Subject.replay(2))
586
+ * ```
587
+ *
588
+ * @param capacity - An integer from 0 through 4,294,967,295. The buffer can retain up to
589
+ * `capacity` values, so callers own the memory policy for valid capacities. Invalid capacities
590
+ * fail through the Fx error channel with `Cause.IllegalArgumentError`.
92
591
  * @param fx - The source Fx.
93
592
  * @returns A shared `Fx` that replays values.
94
593
  * @since 1.0.0
95
594
  * @category combinators
96
595
  */
97
596
  export declare const replay: {
98
- (capacity: number): <A, E, R>(fx: Fx.Fx<A, E, R>) => Fx.Fx<A, E, R>;
99
- <A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Fx.Fx<A, E, R>;
597
+ (capacity: number): <A, E, R>(fx: Fx.Fx<A, E, R>) => Fx.Fx<A, E | Cause.IllegalArgumentError, R | Scope.Scope>;
598
+ <A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Fx.Fx<A, E | Cause.IllegalArgumentError, R | Scope.Scope>;
100
599
  };
101
600
  /**
601
+ * Implements a zero-replay subject with scoped subscribers and serialized publication delivery.
602
+ *
603
+ * @remarks
604
+ * ## Why
605
+ *
606
+ * This is the queueing core behind public subjects. It snapshots subscribers per publication and
607
+ * drains successes and failures in FIFO order without recursive stack growth.
608
+ *
609
+ * ## Publication and errors
610
+ *
611
+ * A non-reentrant publisher waits for its publication to finish delivery. A publisher called from
612
+ * the active drain fiber enqueues and returns immediately so subscriber callbacks cannot deadlock;
613
+ * the outer drain subsequently delivers that publication. Sink callback defects or interruption
614
+ * are handled by the sink boundary and do not become a typed Subject failure.
615
+ *
616
+ * ## Ownership and lifetime
617
+ *
618
+ * Each `run` call creates a child scope for its sink and removes it on closure. `interrupt` closes
619
+ * all current child scopes. The instance may accept later subscriptions and publications.
620
+ *
621
+ * This class remains marked `@internal` and is not a supported construction API even though the
622
+ * current wildcard package export makes it import-reachable. Use `make` or `unsafeMake`.
623
+ *
624
+ * @example
625
+ * ```ts
626
+ * import { Effect } from "effect"
627
+ * import * as Subject from "@typed/fx/Subject"
628
+ *
629
+ * const supported = Effect.scoped(Subject.make<number>())
630
+ * ```
631
+ *
632
+ * @since 1.0.0
633
+ * @category internal
102
634
  * @internal
103
635
  */
104
636
  export declare class SubjectImpl<A, E> implements Subject<A, E> {
637
+ /**
638
+ * Carries the `Fx` variance channels implemented by this subject.
639
+ *
640
+ * @remarks
641
+ * ## Why
642
+ *
643
+ * Allows the implementation to satisfy the runtime `Fx` protocol.
644
+ *
645
+ * ## Ownership and lifetime
646
+ *
647
+ * Immutable metadata; it acquires no resources.
648
+ *
649
+ * @since 1.0.0
650
+ * @category internal
651
+ */
105
652
  readonly [FxTypeId]: Fx.Fx.Variance<A, E, Scope.Scope>;
106
- protected sinks: Set<readonly [Sink.Sink<A, E, any>, ServiceMap.ServiceMap<any>, Scope.Closeable]>;
653
+ protected sinks: Set<readonly [Sink.Sink<A, E, any>, Context.Context<any>, Scope.Closeable]>;
654
+ private readonly publications;
655
+ private publicationIndex;
656
+ private activePublication;
657
+ private activeDrainFiberId;
658
+ /**
659
+ * Creates an empty zero-replay subject and binds its producer callbacks.
660
+ *
661
+ * @remarks
662
+ * ## Why
663
+ *
664
+ * Initializes the internal queueing boundary without starting work.
665
+ *
666
+ * ## Ownership and lifetime
667
+ *
668
+ * Construction acquires no fibers or scopes; later `run` calls own subscriptions.
669
+ *
670
+ * @since 1.0.0
671
+ * @category internal
672
+ */
107
673
  constructor();
674
+ /**
675
+ * Delegates to the Effect pipeable protocol.
676
+ *
677
+ * @remarks
678
+ * ## Why
679
+ *
680
+ * Lets the implementation participate in ordinary `Fx` composition.
681
+ *
682
+ * ## Ownership and lifetime
683
+ *
684
+ * Piping starts no subscription; execution begins only when the resulting `Fx` is run.
685
+ *
686
+ * @since 1.0.0
687
+ * @category internal
688
+ */
108
689
  pipe(): unknown;
690
+ /**
691
+ * Registers a sink until its child scope closes.
692
+ *
693
+ * @remarks
694
+ * ## Why
695
+ *
696
+ * Implements the subscription side of the `Fx` contract.
697
+ *
698
+ * ## Ownership and lifetime
699
+ *
700
+ * The caller's `Scope` owns this subscription and its captured `R2` context. Publications deliver
701
+ * `A` or `Cause<E>` to the sink; the returned Effect itself cannot fail.
702
+ *
703
+ * @since 1.0.0
704
+ * @category internal
705
+ */
109
706
  run<R2>(sink: Sink.Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope>;
707
+ /**
708
+ * Enqueues a failure publication for the current subscriber snapshot.
709
+ *
710
+ * @remarks
711
+ * ## Why
712
+ *
713
+ * Preserves the complete Effect `Cause`, including defects and interruption, at the Sink boundary.
714
+ *
715
+ * ## Ownership and lifetime
716
+ *
717
+ * Non-reentrant callers wait for delivery; a call from the active drain fiber returns after
718
+ * enqueueing. The publication is not retained for later subscribers.
719
+ *
720
+ * @since 1.0.0
721
+ * @category internal
722
+ */
110
723
  onFailure(cause: Cause.Cause<E>): Effect.Effect<void, never, never>;
724
+ /**
725
+ * Enqueues a successful value for the current subscriber snapshot.
726
+ *
727
+ * @remarks
728
+ * ## Why
729
+ *
730
+ * Provides the producer-facing push operation while preserving FIFO delivery.
731
+ *
732
+ * ## Ownership and lifetime
733
+ *
734
+ * Non-reentrant callers wait for delivery; a call from the active drain fiber returns after
735
+ * enqueueing. The value is not retained for later subscribers.
736
+ *
737
+ * @since 1.0.0
738
+ * @category internal
739
+ */
111
740
  onSuccess(a: A): Effect.Effect<void, never, never>;
112
741
  protected interruptScopes: Effect.Effect<void, never, never>;
742
+ /**
743
+ * Closes every currently registered subscriber scope.
744
+ *
745
+ * @remarks
746
+ * ## Why
747
+ *
748
+ * Gives the owner one cleanup boundary for all active subscriptions.
749
+ *
750
+ * ## Ownership and lifetime
751
+ *
752
+ * Finalizers run for current subscribers; later subscriptions remain possible. This base class
753
+ * retains no replay state.
754
+ *
755
+ * @since 1.0.0
756
+ * @category internal
757
+ */
113
758
  readonly interrupt: Effect.Effect<void, never, never>;
114
759
  protected addSink<R, B, R2>(sink: Sink.Sink<A, E, R>, f: (scope: Scope.Scope) => Effect.Effect<B, never, R2>): Effect.Effect<B, never, R2 | Scope.Scope>;
760
+ /**
761
+ * Samples the number of currently registered sinks without subscribing.
762
+ *
763
+ * @remarks
764
+ * ## Why
765
+ *
766
+ * Exposes current demand for diagnostics and coordination.
767
+ *
768
+ * ## Ownership and lifetime
769
+ *
770
+ * The Effect reads the owned sink set when executed and retains no additional state.
771
+ *
772
+ * @since 1.0.0
773
+ * @category internal
774
+ */
115
775
  readonly subscriberCount: Effect.Effect<number>;
116
776
  protected onEvent(a: A): Effect.Effect<void, never, never>;
117
777
  protected onCause(cause: Cause.Cause<E>): Effect.Effect<void, never, never>;
778
+ private enqueue;
779
+ private drain;
780
+ private clearDrain;
118
781
  }
119
782
  /**
783
+ * Internal one-exit replay implementation used for public hold semantics.
784
+ *
785
+ * @remarks
786
+ * ## Why
787
+ *
788
+ * Extends the serialized Subject core with a current `Exit`, allowing a new subscriber to observe
789
+ * the latest success or failure immediately.
790
+ *
791
+ * ## Join-during-publication behavior
792
+ *
793
+ * The current exit is updated before queue delivery. A subscriber joining while another
794
+ * publication drains can replay a later queued exit and receive it again when the queue reaches it.
795
+ *
796
+ * ## Ownership and lifetime
797
+ *
798
+ * The instance owns one retained exit. `interrupt` closes subscribers and clears it. This class is
799
+ * import-reachable under the current wildcard export but remains `@internal`; use `hold`, `make(1)`,
800
+ * or `unsafeMake(1)`.
801
+ *
802
+ * @example
803
+ * ```ts
804
+ * import { Fx } from "@typed/fx"
805
+ * import * as Subject from "@typed/fx/Subject"
806
+ *
807
+ * const supported = Subject.hold(Fx.succeed("ready"))
808
+ * ```
809
+ *
810
+ * @since 1.0.0
811
+ * @category internal
120
812
  * @internal
121
813
  */
122
814
  export declare class HoldSubjectImpl<A, E> extends SubjectImpl<A, E> implements Subject<A, E> {
815
+ /**
816
+ * Stores the most recently published success or failure.
817
+ *
818
+ * @remarks
819
+ * ## Why
820
+ *
821
+ * Supplies the immediate current-state replay used when a sink subscribes.
822
+ *
823
+ * ## Ownership and lifetime
824
+ *
825
+ * Updated before enqueueing each publication and cleared by `interrupt`; it retains at most one
826
+ * `Exit<A, E>`.
827
+ *
828
+ * @since 1.0.0
829
+ * @category internal
830
+ */
123
831
  readonly lastValue: MutableRef.MutableRef<Option.Option<Exit.Exit<A, E>>>;
832
+ /**
833
+ * Retains a success, then enqueues it for serialized delivery.
834
+ *
835
+ * @remarks
836
+ * ## Why
837
+ *
838
+ * Makes the latest value immediately visible to subscribers without bypassing FIFO live delivery.
839
+ *
840
+ * ## Ownership and lifetime
841
+ *
842
+ * The retained value remains until replaced or interrupted. A reentrant call returns after
843
+ * enqueueing; a joining subscriber can therefore observe the queued value twice.
844
+ *
845
+ * @since 1.0.0
846
+ * @category internal
847
+ */
124
848
  onSuccess: (a: A) => Effect.Effect<void, never, never>;
849
+ /**
850
+ * Retains a failure cause, then enqueues it for serialized delivery.
851
+ *
852
+ * @remarks
853
+ * ## Why
854
+ *
855
+ * Gives late subscribers the same current failure, preserving its complete `Cause`.
856
+ *
857
+ * ## Ownership and lifetime
858
+ *
859
+ * The retained failure remains until replaced or interrupted. A joining subscriber can replay a
860
+ * queued cause and receive it again from the live drain.
861
+ *
862
+ * @since 1.0.0
863
+ * @category internal
864
+ */
125
865
  onFailure: (cause: Cause.Cause<E>) => Effect.Effect<void, never, never>;
866
+ /**
867
+ * Registers a sink, delivers the retained exit if present, then awaits scope closure.
868
+ *
869
+ * @remarks
870
+ * ## Why
871
+ *
872
+ * Combines a current-state read with the live Subject subscription.
873
+ *
874
+ * ## Ownership and lifetime
875
+ *
876
+ * The caller's `Scope` owns registration and captured `R2` services. Replay occurs before waiting
877
+ * for later publications; concurrent queued publication can duplicate that replay as described on
878
+ * the class.
879
+ *
880
+ * @since 1.0.0
881
+ * @category internal
882
+ */
126
883
  run<R2>(sink: Sink.Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope>;
884
+ /**
885
+ * Closes current subscribers and clears the retained exit.
886
+ *
887
+ * @remarks
888
+ * ## Why
889
+ *
890
+ * Couples subscription cleanup with current-state cleanup.
891
+ *
892
+ * ## Ownership and lifetime
893
+ *
894
+ * Later subscriptions remain possible but have no replay until another publication arrives.
895
+ *
896
+ * @since 1.0.0
897
+ * @category internal
898
+ */
127
899
  readonly interrupt: Effect.Effect<void, never, never>;
128
900
  }
129
901
  /**
902
+ * Internal bounded replay implementation used for public replay semantics.
903
+ *
904
+ * @remarks
905
+ * ## Why
906
+ *
907
+ * Extends the serialized Subject core with an explicit-capacity FIFO window of successful and
908
+ * failed publications.
909
+ *
910
+ * ## Join-during-publication behavior
911
+ *
912
+ * Each exit enters the ring buffer before queue delivery. A subscriber joining while another
913
+ * publication drains can replay a later queued exit and receive it again when the queue reaches it.
914
+ *
915
+ * ## Ownership and lifetime
916
+ *
917
+ * The instance owns the supplied ring buffer. `interrupt` closes subscribers and clears the buffer.
918
+ * This class is import-reachable under the current wildcard export but remains `@internal`; use
919
+ * `replay`, `make`, or `unsafeMake`.
920
+ *
921
+ * @example
922
+ * ```ts
923
+ * import { Fx } from "@typed/fx"
924
+ * import * as Subject from "@typed/fx/Subject"
925
+ *
926
+ * const supported = Fx.fromIterable([1, 2, 3]).pipe(Subject.replay(2))
927
+ * ```
928
+ *
929
+ * @since 1.0.0
930
+ * @category internal
130
931
  * @internal
131
932
  */
132
933
  export declare class ReplaySubjectImpl<A, E> extends SubjectImpl<A, E> {
934
+ /**
935
+ * Stores the bounded FIFO window of retained successes and failures.
936
+ *
937
+ * @remarks
938
+ * ## Why
939
+ *
940
+ * Makes replay capacity and eviction explicit in the implementation.
941
+ *
942
+ * ## Ownership and lifetime
943
+ *
944
+ * Owned by this subject, filled before live queue delivery, and emptied by `interrupt`.
945
+ *
946
+ * @since 1.0.0
947
+ * @category internal
948
+ */
133
949
  readonly buffer: RingBuffer<Exit.Exit<A, E>>;
950
+ /**
951
+ * Creates a replay subject around an already allocated ring buffer.
952
+ *
953
+ * @remarks
954
+ * ## Why
955
+ *
956
+ * Keeps capacity validation and allocation in the public factories while this class owns replay.
957
+ *
958
+ * ## Ownership and lifetime
959
+ *
960
+ * Construction starts no fibers. The instance retains and later clears the supplied buffer.
961
+ *
962
+ * @since 1.0.0
963
+ * @category internal
964
+ */
134
965
  constructor(buffer: RingBuffer<Exit.Exit<A, E>>);
966
+ /**
967
+ * Appends a success to the ring buffer, then enqueues it for live delivery.
968
+ *
969
+ * @remarks
970
+ * ## Why
971
+ *
972
+ * Preserves one order for retained and live values while bounding memory by capacity.
973
+ *
974
+ * ## Ownership and lifetime
975
+ *
976
+ * The buffer evicts its oldest exit when full. A joining subscriber can replay this queued value
977
+ * and receive it again from the live drain.
978
+ *
979
+ * @since 1.0.0
980
+ * @category internal
981
+ */
135
982
  onSuccess: (a: A) => Effect.Effect<void, never, never>;
983
+ /**
984
+ * Appends a failure cause to the ring buffer, then enqueues it for live delivery.
985
+ *
986
+ * @remarks
987
+ * ## Why
988
+ *
989
+ * Replays failures in causal order without reducing them to typed error values.
990
+ *
991
+ * ## Ownership and lifetime
992
+ *
993
+ * The complete `Cause` remains retained until eviction or interruption. A joining subscriber can
994
+ * replay the queued cause and receive it again from the live drain.
995
+ *
996
+ * @since 1.0.0
997
+ * @category internal
998
+ */
136
999
  onFailure: (cause: Cause.Cause<E>) => Effect.Effect<void, never, never>;
1000
+ /**
1001
+ * Registers a sink, replays the retained window oldest-to-newest, then awaits scope closure.
1002
+ *
1003
+ * @remarks
1004
+ * ## Why
1005
+ *
1006
+ * Gives late subscribers bounded history before they consume subsequent live publications.
1007
+ *
1008
+ * ## Ownership and lifetime
1009
+ *
1010
+ * The caller's `Scope` owns registration and captured `R2` services. Replay itself does not remove
1011
+ * entries. Concurrent queued publication can duplicate an exit as described on the class.
1012
+ *
1013
+ * @since 1.0.0
1014
+ * @category internal
1015
+ */
137
1016
  run<R2>(sink: Sink.Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope>;
1017
+ /**
1018
+ * Closes current subscribers and empties the replay buffer.
1019
+ *
1020
+ * @remarks
1021
+ * ## Why
1022
+ *
1023
+ * Releases both subscriber lifetimes and caller-selected retained memory at one boundary.
1024
+ *
1025
+ * ## Ownership and lifetime
1026
+ *
1027
+ * Later subscriptions remain possible but have no history until new publications arrive.
1028
+ *
1029
+ * @since 1.0.0
1030
+ * @category internal
1031
+ */
138
1032
  readonly interrupt: Effect.Effect<void, never, never>;
139
1033
  }
140
1034
  /**
141
- * Creates a `Subject` that replays the last `replay` values. You will need to manually call `interrupt` on the subject to clear resources.
142
- * @param replay - The number of values to replay.
1035
+ * Immediately allocates a `Subject` with the requested replay capacity and manual ownership.
1036
+ *
1037
+ * @remarks
1038
+ * ## Why
1039
+ *
1040
+ * `unsafeMake` is the escape hatch for owners that cannot acquire through an Effect `Scope`, such
1041
+ * as a long-lived host object with its own explicit teardown. Prefer `make` inside Effect programs.
1042
+ *
1043
+ * ## Ownership and lifetime
1044
+ *
1045
+ * Allocation is synchronous and starts no fibers. The caller must execute `interrupt` to close
1046
+ * subscribers and clear retained `Exit` values. Capacity `0` retains nothing, capacity `1` retains
1047
+ * the latest publication, and larger capacities retain the newest window in FIFO replay order.
1048
+ *
1049
+ * ## Errors
1050
+ *
1051
+ * Invalid capacities throw `Cause.IllegalArgumentError` synchronously; this function has no typed
1052
+ * Effect error channel. Publishing and subscribing use the `E` and service channels of the returned
1053
+ * subject.
1054
+ *
1055
+ * @example
1056
+ * ```ts
1057
+ * import { Effect } from "effect"
1058
+ * import * as Subject from "@typed/fx/Subject"
1059
+ *
1060
+ * const events = Subject.unsafeMake<string>(10)
1061
+ *
1062
+ * const shutdown = events.interrupt
1063
+ * const publish = events.onSuccess("ready").pipe(Effect.asVoid)
1064
+ * ```
1065
+ *
1066
+ * @param replay - An integer from 0 through 4,294,967,295. The buffer can retain up to
1067
+ * `replay` values, so callers own the memory policy for valid capacities.
143
1068
  * @returns A `Subject` that replays the last `replay` values.
1069
+ * @since 1.0.0
1070
+ * @category constructors
144
1071
  */
145
1072
  export declare function unsafeMake<A, E = never>(replay?: number): Subject<A, E>;
146
1073
  /**
147
- * Create a Subject which utilizes a Scope to manage the lifecycle of the subject's resources.
1074
+ * Acquires a `Subject` whose subscribers and replay state are released with the current `Scope`.
1075
+ *
1076
+ * @remarks
1077
+ * ## Why
1078
+ *
1079
+ * `make` places the imperative subject boundary under Effect's structured resource ownership, so
1080
+ * cancellation and scope closure cannot leave subscriptions or retained values behind.
1081
+ *
1082
+ * ## Ownership and lifetime
1083
+ *
1084
+ * The effect allocates when executed, not when described. Its required `Scope` installs a finalizer
1085
+ * that runs `interrupt`, closing all subscriber scopes and clearing the replay buffer. Individual
1086
+ * subscriber scopes may still end earlier without affecting other subscribers.
1087
+ *
1088
+ * ## Errors
1089
+ *
1090
+ * Invalid capacities fail in the typed error channel with `Cause.IllegalArgumentError`; no subject
1091
+ * is allocated. Once acquired, publication callbacks cannot fail and the subject's `E` parameter
1092
+ * describes failures that producers may publish to sinks.
1093
+ *
1094
+ * @example
1095
+ * ```ts
1096
+ * import { Effect } from "effect"
1097
+ * import * as Subject from "@typed/fx/Subject"
1098
+ *
1099
+ * const program = Effect.gen(function* () {
1100
+ * const messages = yield* Subject.make<string>(1)
1101
+ * yield* messages.onSuccess("online")
1102
+ * return yield* messages.subscriberCount
1103
+ * }).pipe(Effect.scoped)
1104
+ * ```
1105
+ *
1106
+ * @since 1.0.0
1107
+ * @category constructors
1108
+ */
1109
+ export declare function make<A, E = never>(replay?: number): Effect.Effect<Subject<A, E>, Cause.IllegalArgumentError, Scope.Scope>;
1110
+ /**
1111
+ * Defines an Effect context service that is simultaneously a `Subject`, `Fx`, and `Sink` facade.
1112
+ *
1113
+ * @remarks
1114
+ * ## Why
1115
+ *
1116
+ * A named subject often represents an application-wide event boundary. `Service` keeps that
1117
+ * boundary type-safe and lets producers, consumers, and layers compose through Effect's normal
1118
+ * service channel instead of a module-global mutable instance.
1119
+ *
1120
+ * ## Ownership and lifetime
1121
+ *
1122
+ * Defining the class acquires nothing. Calling its static `make` creates a layer backed by scoped
1123
+ * `Subject.make`; releasing the layer interrupts subscriptions and clears replay. Static `Fx` and
1124
+ * `Sink` operations require `Self`, then delegate to the installed subject. Invalid replay
1125
+ * capacities fail layer construction with `Cause.IllegalArgumentError`.
1126
+ *
1127
+ * @example
1128
+ * ```ts
1129
+ * import { Effect } from "effect"
1130
+ * import { Fx } from "@typed/fx"
1131
+ * import * as Subject from "@typed/fx/Subject"
1132
+ *
1133
+ * class Notifications extends Subject.Service<Notifications, string>()("Notifications") {}
1134
+ *
1135
+ * const program = Effect.gen(function* () {
1136
+ * yield* Notifications.onSuccess("saved")
1137
+ * return yield* Fx.first(Notifications)
1138
+ * }).pipe(Effect.provide(Notifications.make(1)), Effect.scoped)
1139
+ * ```
1140
+ *
1141
+ * @since 1.0.0
1142
+ * @category context
148
1143
  */
149
- export declare function make<A, E = never>(replay?: number): Effect.Effect<Subject<A, E>, never, Scope.Scope>;
150
1144
  export declare function Service<Self, A, E = never>(): <const Id extends string>(id: Id) => Subject.Class<Self, Id, A, E>;
151
1145
  export {};
152
1146
  //# sourceMappingURL=Subject.d.ts.map