@typed/fx 2.0.0-beta.1 → 2.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (664) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +35 -21
  3. package/dist/Fx/Fx.d.ts +371 -19
  4. package/dist/Fx/Fx.d.ts.map +1 -1
  5. package/dist/Fx/Fx.js +37 -6
  6. package/dist/Fx/TypeId.d.ts +52 -6
  7. package/dist/Fx/TypeId.d.ts.map +1 -1
  8. package/dist/Fx/TypeId.js +41 -4
  9. package/dist/Fx/combinators/additive.d.ts +162 -11
  10. package/dist/Fx/combinators/additive.d.ts.map +1 -1
  11. package/dist/Fx/combinators/additive.js +162 -11
  12. package/dist/Fx/combinators/catch.d.ts +202 -29
  13. package/dist/Fx/combinators/catch.d.ts.map +1 -1
  14. package/dist/Fx/combinators/catch.js +193 -23
  15. package/dist/Fx/combinators/causes.d.ts +25 -2
  16. package/dist/Fx/combinators/causes.d.ts.map +1 -1
  17. package/dist/Fx/combinators/causes.js +25 -2
  18. package/dist/Fx/combinators/changesWithEffect.d.ts +21 -1
  19. package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -1
  20. package/dist/Fx/combinators/changesWithEffect.js +21 -1
  21. package/dist/Fx/combinators/compact.d.ts +18 -1
  22. package/dist/Fx/combinators/compact.d.ts.map +1 -1
  23. package/dist/Fx/combinators/compact.js +18 -1
  24. package/dist/Fx/combinators/concatMap.d.ts +86 -0
  25. package/dist/Fx/combinators/concatMap.d.ts.map +1 -0
  26. package/dist/Fx/combinators/concatMap.js +86 -0
  27. package/dist/Fx/combinators/continueWith.d.ts +113 -5
  28. package/dist/Fx/combinators/continueWith.d.ts.map +1 -1
  29. package/dist/Fx/combinators/continueWith.js +113 -5
  30. package/dist/Fx/combinators/debounce.d.ts +34 -0
  31. package/dist/Fx/combinators/debounce.d.ts.map +1 -0
  32. package/dist/Fx/combinators/debounce.js +35 -0
  33. package/dist/Fx/combinators/delay.d.ts +36 -0
  34. package/dist/Fx/combinators/delay.d.ts.map +1 -0
  35. package/dist/Fx/combinators/delay.js +33 -0
  36. package/dist/Fx/combinators/dropUntil.d.ts +44 -2
  37. package/dist/Fx/combinators/dropUntil.d.ts.map +1 -1
  38. package/dist/Fx/combinators/dropUntil.js +44 -2
  39. package/dist/Fx/combinators/during.d.ts +38 -0
  40. package/dist/Fx/combinators/during.d.ts.map +1 -0
  41. package/dist/Fx/combinators/during.js +85 -0
  42. package/dist/Fx/combinators/ensuring.d.ts +34 -4
  43. package/dist/Fx/combinators/ensuring.d.ts.map +1 -1
  44. package/dist/Fx/combinators/ensuring.js +34 -4
  45. package/dist/Fx/combinators/exhaustLatestMap.d.ts +41 -5
  46. package/dist/Fx/combinators/exhaustLatestMap.d.ts.map +1 -1
  47. package/dist/Fx/combinators/exhaustLatestMap.js +41 -5
  48. package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts +40 -4
  49. package/dist/Fx/combinators/exhaustLatestMapEffect.d.ts.map +1 -1
  50. package/dist/Fx/combinators/exhaustLatestMapEffect.js +40 -4
  51. package/dist/Fx/combinators/exhaustMap.d.ts +38 -1
  52. package/dist/Fx/combinators/exhaustMap.d.ts.map +1 -1
  53. package/dist/Fx/combinators/exhaustMap.js +38 -1
  54. package/dist/Fx/combinators/exhaustMapEffect.d.ts +33 -1
  55. package/dist/Fx/combinators/exhaustMapEffect.d.ts.map +1 -1
  56. package/dist/Fx/combinators/exhaustMapEffect.js +33 -1
  57. package/dist/Fx/combinators/exit.d.ts +23 -2
  58. package/dist/Fx/combinators/exit.d.ts.map +1 -1
  59. package/dist/Fx/combinators/exit.js +23 -2
  60. package/dist/Fx/combinators/filter.d.ts +17 -1
  61. package/dist/Fx/combinators/filter.d.ts.map +1 -1
  62. package/dist/Fx/combinators/filter.js +17 -1
  63. package/dist/Fx/combinators/filterEffect.d.ts +22 -1
  64. package/dist/Fx/combinators/filterEffect.d.ts.map +1 -1
  65. package/dist/Fx/combinators/filterEffect.js +22 -1
  66. package/dist/Fx/combinators/filterMap.d.ts +20 -1
  67. package/dist/Fx/combinators/filterMap.d.ts.map +1 -1
  68. package/dist/Fx/combinators/filterMap.js +20 -1
  69. package/dist/Fx/combinators/filterMapEffect.d.ts +21 -1
  70. package/dist/Fx/combinators/filterMapEffect.d.ts.map +1 -1
  71. package/dist/Fx/combinators/filterMapEffect.js +21 -1
  72. package/dist/Fx/combinators/filterMapLoop.d.ts +20 -1
  73. package/dist/Fx/combinators/filterMapLoop.d.ts.map +1 -1
  74. package/dist/Fx/combinators/filterMapLoop.js +20 -1
  75. package/dist/Fx/combinators/filterMapLoopCause.d.ts +21 -1
  76. package/dist/Fx/combinators/filterMapLoopCause.d.ts.map +1 -1
  77. package/dist/Fx/combinators/filterMapLoopCause.js +21 -1
  78. package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts +21 -1
  79. package/dist/Fx/combinators/filterMapLoopCauseEffect.d.ts.map +1 -1
  80. package/dist/Fx/combinators/filterMapLoopCauseEffect.js +21 -1
  81. package/dist/Fx/combinators/filterMapLoopEffect.d.ts +21 -1
  82. package/dist/Fx/combinators/filterMapLoopEffect.d.ts.map +1 -1
  83. package/dist/Fx/combinators/filterMapLoopEffect.js +21 -1
  84. package/dist/Fx/combinators/flatMap.d.ts +50 -5
  85. package/dist/Fx/combinators/flatMap.d.ts.map +1 -1
  86. package/dist/Fx/combinators/flatMap.js +36 -3
  87. package/dist/Fx/combinators/flatMapConcurrently.d.ts +51 -4
  88. package/dist/Fx/combinators/flatMapConcurrently.d.ts.map +1 -1
  89. package/dist/Fx/combinators/flatMapConcurrently.js +48 -2
  90. package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts +48 -4
  91. package/dist/Fx/combinators/flatMapConcurrentlyEffect.d.ts.map +1 -1
  92. package/dist/Fx/combinators/flatMapConcurrentlyEffect.js +40 -2
  93. package/dist/Fx/combinators/flatMapEffect.d.ts +46 -4
  94. package/dist/Fx/combinators/flatMapEffect.d.ts.map +1 -1
  95. package/dist/Fx/combinators/flatMapEffect.js +32 -2
  96. package/dist/Fx/combinators/flip.d.ts +34 -2
  97. package/dist/Fx/combinators/flip.d.ts.map +1 -1
  98. package/dist/Fx/combinators/flip.js +34 -2
  99. package/dist/Fx/combinators/gen.d.ts +29 -10
  100. package/dist/Fx/combinators/gen.d.ts.map +1 -1
  101. package/dist/Fx/combinators/gen.js +28 -4
  102. package/dist/Fx/combinators/genScoped.d.ts +33 -10
  103. package/dist/Fx/combinators/genScoped.d.ts.map +1 -1
  104. package/dist/Fx/combinators/genScoped.js +31 -3
  105. package/dist/Fx/combinators/grouped.d.ts +89 -0
  106. package/dist/Fx/combinators/grouped.d.ts.map +1 -0
  107. package/dist/Fx/combinators/grouped.js +146 -0
  108. package/dist/Fx/combinators/index.d.ts +35 -0
  109. package/dist/Fx/combinators/index.d.ts.map +1 -1
  110. package/dist/Fx/combinators/index.js +35 -0
  111. package/dist/Fx/combinators/keyed.d.ts +123 -9
  112. package/dist/Fx/combinators/keyed.d.ts.map +1 -1
  113. package/dist/Fx/combinators/keyed.js +69 -11
  114. package/dist/Fx/combinators/loop.d.ts +17 -1
  115. package/dist/Fx/combinators/loop.d.ts.map +1 -1
  116. package/dist/Fx/combinators/loop.js +17 -1
  117. package/dist/Fx/combinators/loopCause.d.ts +18 -1
  118. package/dist/Fx/combinators/loopCause.d.ts.map +1 -1
  119. package/dist/Fx/combinators/loopCause.js +18 -1
  120. package/dist/Fx/combinators/loopCauseEffect.d.ts +19 -1
  121. package/dist/Fx/combinators/loopCauseEffect.d.ts.map +1 -1
  122. package/dist/Fx/combinators/loopCauseEffect.js +19 -1
  123. package/dist/Fx/combinators/loopEffect.d.ts +24 -1
  124. package/dist/Fx/combinators/loopEffect.d.ts.map +1 -1
  125. package/dist/Fx/combinators/loopEffect.js +24 -1
  126. package/dist/Fx/combinators/map.d.ts +46 -1
  127. package/dist/Fx/combinators/map.d.ts.map +1 -1
  128. package/dist/Fx/combinators/map.js +43 -1
  129. package/dist/Fx/combinators/mapBoth.d.ts +20 -1
  130. package/dist/Fx/combinators/mapBoth.d.ts.map +1 -1
  131. package/dist/Fx/combinators/mapBoth.js +20 -1
  132. package/dist/Fx/combinators/mapEffect.d.ts +25 -1
  133. package/dist/Fx/combinators/mapEffect.d.ts.map +1 -1
  134. package/dist/Fx/combinators/mapEffect.js +25 -1
  135. package/dist/Fx/combinators/mapError.d.ts +21 -5
  136. package/dist/Fx/combinators/mapError.d.ts.map +1 -1
  137. package/dist/Fx/combinators/mapError.js +21 -5
  138. package/dist/Fx/combinators/mergeAll.d.ts +35 -1
  139. package/dist/Fx/combinators/mergeAll.d.ts.map +1 -1
  140. package/dist/Fx/combinators/mergeAll.js +35 -1
  141. package/dist/Fx/combinators/mergeOrdered.d.ts +36 -4
  142. package/dist/Fx/combinators/mergeOrdered.d.ts.map +1 -1
  143. package/dist/Fx/combinators/mergeOrdered.js +68 -14
  144. package/dist/Fx/combinators/onError.d.ts +34 -4
  145. package/dist/Fx/combinators/onError.d.ts.map +1 -1
  146. package/dist/Fx/combinators/onError.js +34 -4
  147. package/dist/Fx/combinators/onExit.d.ts +29 -3
  148. package/dist/Fx/combinators/onExit.d.ts.map +1 -1
  149. package/dist/Fx/combinators/onExit.js +29 -3
  150. package/dist/Fx/combinators/onInterrupt.d.ts +49 -4
  151. package/dist/Fx/combinators/onInterrupt.d.ts.map +1 -1
  152. package/dist/Fx/combinators/onInterrupt.js +49 -4
  153. package/dist/Fx/combinators/pairwise.d.ts +28 -0
  154. package/dist/Fx/combinators/pairwise.d.ts.map +1 -0
  155. package/dist/Fx/combinators/pairwise.js +31 -0
  156. package/dist/Fx/combinators/provide.d.ts +141 -20
  157. package/dist/Fx/combinators/provide.d.ts.map +1 -1
  158. package/dist/Fx/combinators/provide.js +137 -16
  159. package/dist/Fx/combinators/race.d.ts +92 -0
  160. package/dist/Fx/combinators/race.d.ts.map +1 -0
  161. package/dist/Fx/combinators/race.js +149 -0
  162. package/dist/Fx/combinators/repeat.d.ts +41 -0
  163. package/dist/Fx/combinators/repeat.d.ts.map +1 -0
  164. package/dist/Fx/combinators/repeat.js +57 -0
  165. package/dist/Fx/combinators/result.d.ts +23 -1
  166. package/dist/Fx/combinators/result.d.ts.map +1 -1
  167. package/dist/Fx/combinators/result.js +27 -13
  168. package/dist/Fx/combinators/retry.d.ts +53 -0
  169. package/dist/Fx/combinators/retry.d.ts.map +1 -0
  170. package/dist/Fx/combinators/retry.js +71 -0
  171. package/dist/Fx/combinators/sample.d.ts +31 -0
  172. package/dist/Fx/combinators/sample.d.ts.map +1 -0
  173. package/dist/Fx/combinators/sample.js +42 -0
  174. package/dist/Fx/combinators/scan.d.ts +41 -2
  175. package/dist/Fx/combinators/scan.d.ts.map +1 -1
  176. package/dist/Fx/combinators/scan.js +43 -4
  177. package/dist/Fx/combinators/since.d.ts +30 -0
  178. package/dist/Fx/combinators/since.d.ts.map +1 -0
  179. package/dist/Fx/combinators/since.js +39 -0
  180. package/dist/Fx/combinators/skip.d.ts +33 -2
  181. package/dist/Fx/combinators/skip.d.ts.map +1 -1
  182. package/dist/Fx/combinators/skip.js +33 -2
  183. package/dist/Fx/combinators/skipRepeats.d.ts +17 -1
  184. package/dist/Fx/combinators/skipRepeats.d.ts.map +1 -1
  185. package/dist/Fx/combinators/skipRepeats.js +17 -1
  186. package/dist/Fx/combinators/skipRepeatsWith.d.ts +18 -1
  187. package/dist/Fx/combinators/skipRepeatsWith.d.ts.map +1 -1
  188. package/dist/Fx/combinators/skipRepeatsWith.js +18 -1
  189. package/dist/Fx/combinators/skipWhile.d.ts +72 -4
  190. package/dist/Fx/combinators/skipWhile.d.ts.map +1 -1
  191. package/dist/Fx/combinators/skipWhile.js +72 -4
  192. package/dist/Fx/combinators/slice.d.ts +85 -3
  193. package/dist/Fx/combinators/slice.d.ts.map +1 -1
  194. package/dist/Fx/combinators/slice.js +35 -2
  195. package/dist/Fx/combinators/switchMap.d.ts +39 -1
  196. package/dist/Fx/combinators/switchMap.d.ts.map +1 -1
  197. package/dist/Fx/combinators/switchMap.js +43 -5
  198. package/dist/Fx/combinators/switchMapEffect.d.ts +38 -1
  199. package/dist/Fx/combinators/switchMapEffect.d.ts.map +1 -1
  200. package/dist/Fx/combinators/switchMapEffect.js +38 -1
  201. package/dist/Fx/combinators/take.d.ts +34 -2
  202. package/dist/Fx/combinators/take.d.ts.map +1 -1
  203. package/dist/Fx/combinators/take.js +34 -2
  204. package/dist/Fx/combinators/takeUntil.d.ts +49 -3
  205. package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
  206. package/dist/Fx/combinators/takeUntil.js +49 -3
  207. package/dist/Fx/combinators/takeWhile.d.ts +33 -2
  208. package/dist/Fx/combinators/takeWhile.d.ts.map +1 -1
  209. package/dist/Fx/combinators/takeWhile.js +33 -2
  210. package/dist/Fx/combinators/tapEffect.d.ts +17 -1
  211. package/dist/Fx/combinators/tapEffect.d.ts.map +1 -1
  212. package/dist/Fx/combinators/tapEffect.js +17 -1
  213. package/dist/Fx/combinators/throttle.d.ts +79 -0
  214. package/dist/Fx/combinators/throttle.d.ts.map +1 -0
  215. package/dist/Fx/combinators/throttle.js +99 -0
  216. package/dist/Fx/combinators/timeout.d.ts +76 -0
  217. package/dist/Fx/combinators/timeout.d.ts.map +1 -0
  218. package/dist/Fx/combinators/timeout.js +110 -0
  219. package/dist/Fx/combinators/tuple.d.ts +32 -2
  220. package/dist/Fx/combinators/tuple.d.ts.map +1 -1
  221. package/dist/Fx/combinators/tuple.js +36 -5
  222. package/dist/Fx/combinators/until.d.ts +27 -0
  223. package/dist/Fx/combinators/until.d.ts.map +1 -0
  224. package/dist/Fx/combinators/until.js +56 -0
  225. package/dist/Fx/combinators/unwrap.d.ts +31 -2
  226. package/dist/Fx/combinators/unwrap.d.ts.map +1 -1
  227. package/dist/Fx/combinators/unwrap.js +30 -1
  228. package/dist/Fx/combinators/unwrapScoped.d.ts +34 -1
  229. package/dist/Fx/combinators/unwrapScoped.d.ts.map +1 -1
  230. package/dist/Fx/combinators/unwrapScoped.js +34 -1
  231. package/dist/Fx/combinators/when.d.ts +37 -2
  232. package/dist/Fx/combinators/when.d.ts.map +1 -1
  233. package/dist/Fx/combinators/when.js +38 -3
  234. package/dist/Fx/combinators/withLatestFrom.d.ts +58 -0
  235. package/dist/Fx/combinators/withLatestFrom.d.ts.map +1 -0
  236. package/dist/Fx/combinators/withLatestFrom.js +68 -0
  237. package/dist/Fx/combinators/withSpan.d.ts +35 -1
  238. package/dist/Fx/combinators/withSpan.d.ts.map +1 -1
  239. package/dist/Fx/combinators/withSpan.js +34 -3
  240. package/dist/Fx/combinators/zip.d.ts +64 -4
  241. package/dist/Fx/combinators/zip.d.ts.map +1 -1
  242. package/dist/Fx/combinators/zip.js +64 -4
  243. package/dist/Fx/constructors/at.d.ts +21 -1
  244. package/dist/Fx/constructors/at.d.ts.map +1 -1
  245. package/dist/Fx/constructors/at.js +21 -1
  246. package/dist/Fx/constructors/die.d.ts +22 -1
  247. package/dist/Fx/constructors/die.d.ts.map +1 -1
  248. package/dist/Fx/constructors/die.js +22 -1
  249. package/dist/Fx/constructors/empty.d.ts +19 -1
  250. package/dist/Fx/constructors/empty.d.ts.map +1 -1
  251. package/dist/Fx/constructors/empty.js +19 -1
  252. package/dist/Fx/constructors/fail.d.ts +22 -1
  253. package/dist/Fx/constructors/fail.d.ts.map +1 -1
  254. package/dist/Fx/constructors/fail.js +22 -1
  255. package/dist/Fx/constructors/failCause.d.ts +23 -1
  256. package/dist/Fx/constructors/failCause.d.ts.map +1 -1
  257. package/dist/Fx/constructors/failCause.js +23 -1
  258. package/dist/Fx/constructors/fn.d.ts +116 -16
  259. package/dist/Fx/constructors/fn.d.ts.map +1 -1
  260. package/dist/Fx/constructors/fn.js +36 -0
  261. package/dist/Fx/constructors/fromEffect.d.ts +45 -3
  262. package/dist/Fx/constructors/fromEffect.d.ts.map +1 -1
  263. package/dist/Fx/constructors/fromEffect.js +45 -3
  264. package/dist/Fx/constructors/fromFailures.d.ts +25 -1
  265. package/dist/Fx/constructors/fromFailures.d.ts.map +1 -1
  266. package/dist/Fx/constructors/fromFailures.js +25 -1
  267. package/dist/Fx/constructors/fromIterable.d.ts +23 -1
  268. package/dist/Fx/constructors/fromIterable.d.ts.map +1 -1
  269. package/dist/Fx/constructors/fromIterable.js +23 -1
  270. package/dist/Fx/constructors/fromSchedule.d.ts +26 -1
  271. package/dist/Fx/constructors/fromSchedule.d.ts.map +1 -1
  272. package/dist/Fx/constructors/fromSchedule.js +28 -3
  273. package/dist/Fx/constructors/index.d.ts +2 -1
  274. package/dist/Fx/constructors/index.d.ts.map +1 -1
  275. package/dist/Fx/constructors/index.js +2 -1
  276. package/dist/Fx/constructors/interrupt.d.ts +22 -2
  277. package/dist/Fx/constructors/interrupt.d.ts.map +1 -1
  278. package/dist/Fx/constructors/interrupt.js +22 -2
  279. package/dist/Fx/constructors/make.d.ts +151 -4
  280. package/dist/Fx/constructors/make.d.ts.map +1 -1
  281. package/dist/Fx/constructors/make.js +60 -7
  282. package/dist/Fx/constructors/periodic.d.ts +30 -1
  283. package/dist/Fx/constructors/periodic.d.ts.map +1 -1
  284. package/dist/Fx/constructors/periodic.js +30 -1
  285. package/dist/Fx/constructors/succeed.d.ts +79 -7
  286. package/dist/Fx/constructors/succeed.d.ts.map +1 -1
  287. package/dist/Fx/constructors/succeed.js +79 -7
  288. package/dist/Fx/constructors/suspend.d.ts +28 -0
  289. package/dist/Fx/constructors/suspend.d.ts.map +1 -1
  290. package/dist/Fx/constructors/suspend.js +28 -0
  291. package/dist/Fx/constructors/sync.d.ts +32 -0
  292. package/dist/Fx/constructors/sync.d.ts.map +1 -0
  293. package/dist/Fx/constructors/sync.js +32 -0
  294. package/dist/Fx/internal/DeferredRef.d.ts +259 -7
  295. package/dist/Fx/internal/DeferredRef.d.ts.map +1 -1
  296. package/dist/Fx/internal/DeferredRef.js +260 -9
  297. package/dist/Fx/internal/UnionToTuple.d.ts +22 -0
  298. package/dist/Fx/internal/UnionToTuple.d.ts.map +1 -1
  299. package/dist/Fx/internal/diff.d.ts +586 -0
  300. package/dist/Fx/internal/diff.d.ts.map +1 -1
  301. package/dist/Fx/internal/diff.js +120 -9
  302. package/dist/Fx/internal/effectableEvaluateKey.d.ts +30 -0
  303. package/dist/Fx/internal/effectableEvaluateKey.d.ts.map +1 -0
  304. package/dist/Fx/internal/effectableEvaluateKey.js +29 -0
  305. package/dist/Fx/internal/effectableWithOverride.d.ts +70 -0
  306. package/dist/Fx/internal/effectableWithOverride.d.ts.map +1 -0
  307. package/dist/Fx/internal/effectableWithOverride.js +54 -0
  308. package/dist/Fx/internal/equivalence.d.ts +29 -0
  309. package/dist/Fx/internal/equivalence.d.ts.map +1 -1
  310. package/dist/Fx/internal/equivalence.js +29 -0
  311. package/dist/Fx/internal/multicast.d.ts +145 -2
  312. package/dist/Fx/internal/multicast.d.ts.map +1 -1
  313. package/dist/Fx/internal/multicast.js +146 -4
  314. package/dist/Fx/internal/ring-buffer.d.ts +149 -0
  315. package/dist/Fx/internal/ring-buffer.d.ts.map +1 -1
  316. package/dist/Fx/internal/ring-buffer.js +155 -0
  317. package/dist/Fx/internal/scope.d.ts +184 -0
  318. package/dist/Fx/internal/scope.d.ts.map +1 -1
  319. package/dist/Fx/internal/scope.js +150 -0
  320. package/dist/Fx/internal/yieldable.d.ts +117 -2
  321. package/dist/Fx/internal/yieldable.d.ts.map +1 -1
  322. package/dist/Fx/internal/yieldable.js +86 -3
  323. package/dist/Fx/run/collect.d.ts +93 -4
  324. package/dist/Fx/run/collect.d.ts.map +1 -1
  325. package/dist/Fx/run/collect.js +94 -5
  326. package/dist/Fx/run/first.d.ts +23 -1
  327. package/dist/Fx/run/first.d.ts.map +1 -1
  328. package/dist/Fx/run/first.js +23 -1
  329. package/dist/Fx/run/fork.d.ts +52 -2
  330. package/dist/Fx/run/fork.d.ts.map +1 -1
  331. package/dist/Fx/run/fork.js +52 -2
  332. package/dist/Fx/run/observe.d.ts +112 -4
  333. package/dist/Fx/run/observe.d.ts.map +1 -1
  334. package/dist/Fx/run/observe.js +137 -16
  335. package/dist/Fx/run/runPromise.d.ts +45 -2
  336. package/dist/Fx/run/runPromise.d.ts.map +1 -1
  337. package/dist/Fx/run/runPromise.js +45 -2
  338. package/dist/Fx/stream.d.ts +92 -0
  339. package/dist/Fx/stream.d.ts.map +1 -1
  340. package/dist/Fx/stream.js +60 -1
  341. package/dist/Push/Push.d.ts +1229 -104
  342. package/dist/Push/Push.d.ts.map +1 -1
  343. package/dist/Push/Push.js +1024 -95
  344. package/dist/RefArray.d.ts +2 -0
  345. package/dist/RefArray.d.ts.map +1 -0
  346. package/dist/RefArray.js +1 -0
  347. package/dist/RefBigDecimal.d.ts +2 -0
  348. package/dist/RefBigDecimal.d.ts.map +1 -0
  349. package/dist/RefBigDecimal.js +1 -0
  350. package/dist/RefBigInt.d.ts +2 -0
  351. package/dist/RefBigInt.d.ts.map +1 -0
  352. package/dist/RefBigInt.js +1 -0
  353. package/dist/RefBoolean.d.ts +2 -0
  354. package/dist/RefBoolean.d.ts.map +1 -0
  355. package/dist/RefBoolean.js +1 -0
  356. package/dist/RefCause.d.ts +2 -0
  357. package/dist/RefCause.d.ts.map +1 -0
  358. package/dist/RefCause.js +1 -0
  359. package/dist/RefChunk.d.ts +2 -0
  360. package/dist/RefChunk.d.ts.map +1 -0
  361. package/dist/RefChunk.js +1 -0
  362. package/dist/RefDateTime.d.ts +2 -0
  363. package/dist/RefDateTime.d.ts.map +1 -0
  364. package/dist/RefDateTime.js +1 -0
  365. package/dist/RefDuration.d.ts +2 -0
  366. package/dist/RefDuration.d.ts.map +1 -0
  367. package/dist/RefDuration.js +1 -0
  368. package/dist/RefGraph.d.ts +2 -0
  369. package/dist/RefGraph.d.ts.map +1 -0
  370. package/dist/RefGraph.js +1 -0
  371. package/dist/RefHashMap.d.ts +2 -0
  372. package/dist/RefHashMap.d.ts.map +1 -0
  373. package/dist/RefHashMap.js +1 -0
  374. package/dist/RefHashRing.d.ts +2 -0
  375. package/dist/RefHashRing.d.ts.map +1 -0
  376. package/dist/RefHashRing.js +1 -0
  377. package/dist/RefHashSet.d.ts +2 -0
  378. package/dist/RefHashSet.d.ts.map +1 -0
  379. package/dist/RefHashSet.js +1 -0
  380. package/dist/RefIterable.d.ts +2 -0
  381. package/dist/RefIterable.d.ts.map +1 -0
  382. package/dist/RefIterable.js +1 -0
  383. package/dist/RefOption.d.ts +2 -0
  384. package/dist/RefOption.d.ts.map +1 -0
  385. package/dist/RefOption.js +1 -0
  386. package/dist/RefRecord.d.ts +2 -0
  387. package/dist/RefRecord.d.ts.map +1 -0
  388. package/dist/RefRecord.js +1 -0
  389. package/dist/RefResult.d.ts +2 -0
  390. package/dist/RefResult.d.ts.map +1 -0
  391. package/dist/RefResult.js +1 -0
  392. package/dist/RefString.d.ts +2 -0
  393. package/dist/RefString.d.ts.map +1 -0
  394. package/dist/RefString.js +1 -0
  395. package/dist/RefStruct.d.ts +2 -0
  396. package/dist/RefStruct.d.ts.map +1 -0
  397. package/dist/RefStruct.js +1 -0
  398. package/dist/RefSubject/Hydration.d.ts +504 -0
  399. package/dist/RefSubject/Hydration.d.ts.map +1 -0
  400. package/dist/RefSubject/Hydration.js +300 -0
  401. package/dist/RefSubject/RefArray.d.ts +382 -35
  402. package/dist/RefSubject/RefArray.d.ts.map +1 -1
  403. package/dist/RefSubject/RefArray.js +374 -40
  404. package/dist/RefSubject/RefBigDecimal.d.ts +241 -21
  405. package/dist/RefSubject/RefBigDecimal.d.ts.map +1 -1
  406. package/dist/RefSubject/RefBigDecimal.js +229 -20
  407. package/dist/RefSubject/RefBigInt.d.ts +181 -16
  408. package/dist/RefSubject/RefBigInt.d.ts.map +1 -1
  409. package/dist/RefSubject/RefBigInt.js +169 -15
  410. package/dist/RefSubject/RefBoolean.d.ts +181 -16
  411. package/dist/RefSubject/RefBoolean.d.ts.map +1 -1
  412. package/dist/RefSubject/RefBoolean.js +169 -15
  413. package/dist/RefSubject/RefCause.d.ts +133 -12
  414. package/dist/RefSubject/RefCause.d.ts.map +1 -1
  415. package/dist/RefSubject/RefCause.js +121 -11
  416. package/dist/RefSubject/RefChunk.d.ts +481 -76
  417. package/dist/RefSubject/RefChunk.d.ts.map +1 -1
  418. package/dist/RefSubject/RefChunk.js +471 -75
  419. package/dist/RefSubject/RefDateTime.d.ts +133 -12
  420. package/dist/RefSubject/RefDateTime.d.ts.map +1 -1
  421. package/dist/RefSubject/RefDateTime.js +122 -12
  422. package/dist/RefSubject/RefDuration.d.ts +169 -15
  423. package/dist/RefSubject/RefDuration.d.ts.map +1 -1
  424. package/dist/RefSubject/RefDuration.js +157 -14
  425. package/dist/RefSubject/RefGraph.d.ts +349 -35
  426. package/dist/RefSubject/RefGraph.d.ts.map +1 -1
  427. package/dist/RefSubject/RefGraph.js +334 -32
  428. package/dist/RefSubject/RefHashMap.d.ts +323 -28
  429. package/dist/RefSubject/RefHashMap.d.ts.map +1 -1
  430. package/dist/RefSubject/RefHashMap.js +317 -29
  431. package/dist/RefSubject/RefHashRing.d.ts +159 -15
  432. package/dist/RefSubject/RefHashRing.d.ts.map +1 -1
  433. package/dist/RefSubject/RefHashRing.js +145 -12
  434. package/dist/RefSubject/RefHashSet.d.ts +251 -22
  435. package/dist/RefSubject/RefHashSet.d.ts.map +1 -1
  436. package/dist/RefSubject/RefHashSet.js +238 -20
  437. package/dist/RefSubject/RefIterable.d.ts +358 -32
  438. package/dist/RefSubject/RefIterable.d.ts.map +1 -1
  439. package/dist/RefSubject/RefIterable.js +350 -30
  440. package/dist/RefSubject/RefOption.d.ts +157 -14
  441. package/dist/RefSubject/RefOption.d.ts.map +1 -1
  442. package/dist/RefSubject/RefOption.js +145 -13
  443. package/dist/RefSubject/RefRecord.d.ts +402 -64
  444. package/dist/RefSubject/RefRecord.d.ts.map +1 -1
  445. package/dist/RefSubject/RefRecord.js +364 -39
  446. package/dist/RefSubject/RefResult.d.ts +167 -35
  447. package/dist/RefSubject/RefResult.d.ts.map +1 -1
  448. package/dist/RefSubject/RefResult.js +133 -12
  449. package/dist/RefSubject/RefString.d.ts +205 -18
  450. package/dist/RefSubject/RefString.d.ts.map +1 -1
  451. package/dist/RefSubject/RefString.js +193 -17
  452. package/dist/RefSubject/RefStruct.d.ts +169 -14
  453. package/dist/RefSubject/RefStruct.d.ts.map +1 -1
  454. package/dist/RefSubject/RefStruct.js +157 -13
  455. package/dist/RefSubject/RefSubject.d.ts +1197 -45
  456. package/dist/RefSubject/RefSubject.d.ts.map +1 -1
  457. package/dist/RefSubject/RefSubject.js +935 -88
  458. package/dist/RefSubject/RefTrie.d.ts +323 -37
  459. package/dist/RefSubject/RefTrie.d.ts.map +1 -1
  460. package/dist/RefSubject/RefTrie.js +311 -31
  461. package/dist/RefSubject/RefTuple.d.ts +127 -11
  462. package/dist/RefSubject/RefTuple.d.ts.map +1 -1
  463. package/dist/RefSubject/RefTuple.js +114 -9
  464. package/dist/RefSubject/index.d.ts +1 -0
  465. package/dist/RefSubject/index.d.ts.map +1 -1
  466. package/dist/RefSubject/index.js +1 -0
  467. package/dist/RefSubject.d.ts +2 -1
  468. package/dist/RefSubject.d.ts.map +1 -1
  469. package/dist/RefSubject.js +2 -1
  470. package/dist/RefTrie.d.ts +2 -0
  471. package/dist/RefTrie.d.ts.map +1 -0
  472. package/dist/RefTrie.js +1 -0
  473. package/dist/RefTuple.d.ts +2 -0
  474. package/dist/RefTuple.d.ts.map +1 -0
  475. package/dist/RefTuple.js +1 -0
  476. package/dist/Sink/Sink.d.ts +396 -23
  477. package/dist/Sink/Sink.d.ts.map +1 -1
  478. package/dist/Sink/Sink.js +55 -7
  479. package/dist/Sink/combinators.d.ts +740 -11
  480. package/dist/Sink/combinators.d.ts.map +1 -1
  481. package/dist/Sink/combinators.js +716 -14
  482. package/dist/Subject/Subject.d.ts +1022 -27
  483. package/dist/Subject/Subject.d.ts.map +1 -1
  484. package/dist/Subject/Subject.js +909 -43
  485. package/dist/Versioned/Versioned.d.ts +447 -27
  486. package/dist/Versioned/Versioned.d.ts.map +1 -1
  487. package/dist/Versioned/Versioned.js +282 -48
  488. package/dist/index.d.ts +22 -3
  489. package/dist/index.d.ts.map +1 -1
  490. package/dist/index.js +22 -3
  491. package/package.json +126 -16
  492. package/dist/Fx/constructors/fromYieldable.d.ts +0 -12
  493. package/dist/Fx/constructors/fromYieldable.d.ts.map +0 -1
  494. package/dist/Fx/constructors/fromYieldable.js +0 -12
  495. package/src/Fx/Fx.ts +0 -164
  496. package/src/Fx/TypeId.ts +0 -25
  497. package/src/Fx/combinators/additive.ts +0 -142
  498. package/src/Fx/combinators/catch.ts +0 -421
  499. package/src/Fx/combinators/causes.ts +0 -23
  500. package/src/Fx/combinators/changesWithEffect.ts +0 -66
  501. package/src/Fx/combinators/compact.ts +0 -15
  502. package/src/Fx/combinators/continueWith.ts +0 -78
  503. package/src/Fx/combinators/dropUntil.ts +0 -47
  504. package/src/Fx/combinators/ensuring.ts +0 -23
  505. package/src/Fx/combinators/exhaustLatestMap.ts +0 -74
  506. package/src/Fx/combinators/exhaustLatestMapEffect.ts +0 -25
  507. package/src/Fx/combinators/exhaustMap.ts +0 -36
  508. package/src/Fx/combinators/exhaustMapEffect.ts +0 -23
  509. package/src/Fx/combinators/exit.ts +0 -15
  510. package/src/Fx/combinators/filter.ts +0 -22
  511. package/src/Fx/combinators/filterEffect.ts +0 -31
  512. package/src/Fx/combinators/filterMap.ts +0 -23
  513. package/src/Fx/combinators/filterMapEffect.ts +0 -32
  514. package/src/Fx/combinators/filterMapLoop.ts +0 -35
  515. package/src/Fx/combinators/filterMapLoopCause.ts +0 -36
  516. package/src/Fx/combinators/filterMapLoopCauseEffect.ts +0 -46
  517. package/src/Fx/combinators/filterMapLoopEffect.ts +0 -36
  518. package/src/Fx/combinators/flatMap.ts +0 -51
  519. package/src/Fx/combinators/flatMapConcurrently.ts +0 -39
  520. package/src/Fx/combinators/flatMapConcurrentlyEffect.ts +0 -26
  521. package/src/Fx/combinators/flatMapEffect.ts +0 -42
  522. package/src/Fx/combinators/flip.ts +0 -14
  523. package/src/Fx/combinators/gen.ts +0 -24
  524. package/src/Fx/combinators/genScoped.ts +0 -24
  525. package/src/Fx/combinators/index.ts +0 -61
  526. package/src/Fx/combinators/keyed.ts +0 -369
  527. package/src/Fx/combinators/loop.ts +0 -27
  528. package/src/Fx/combinators/loopCause.ts +0 -34
  529. package/src/Fx/combinators/loopCauseEffect.ts +0 -36
  530. package/src/Fx/combinators/loopEffect.ts +0 -34
  531. package/src/Fx/combinators/map.ts +0 -22
  532. package/src/Fx/combinators/mapBoth.ts +0 -40
  533. package/src/Fx/combinators/mapEffect.ts +0 -32
  534. package/src/Fx/combinators/mapError.ts +0 -28
  535. package/src/Fx/combinators/mergeAll.ts +0 -22
  536. package/src/Fx/combinators/mergeOrdered.ts +0 -123
  537. package/src/Fx/combinators/onError.ts +0 -40
  538. package/src/Fx/combinators/onExit.ts +0 -82
  539. package/src/Fx/combinators/onInterrupt.ts +0 -87
  540. package/src/Fx/combinators/provide.ts +0 -124
  541. package/src/Fx/combinators/result.ts +0 -39
  542. package/src/Fx/combinators/scan.ts +0 -82
  543. package/src/Fx/combinators/skip.ts +0 -41
  544. package/src/Fx/combinators/skipRepeats.ts +0 -15
  545. package/src/Fx/combinators/skipRepeatsWith.ts +0 -40
  546. package/src/Fx/combinators/skipWhile.ts +0 -100
  547. package/src/Fx/combinators/slice.ts +0 -55
  548. package/src/Fx/combinators/switchMap.ts +0 -55
  549. package/src/Fx/combinators/switchMapEffect.ts +0 -25
  550. package/src/Fx/combinators/take.ts +0 -38
  551. package/src/Fx/combinators/takeUntil.ts +0 -88
  552. package/src/Fx/combinators/takeWhile.ts +0 -47
  553. package/src/Fx/combinators/tapEffect.ts +0 -39
  554. package/src/Fx/combinators/tuple.ts +0 -79
  555. package/src/Fx/combinators/unwrap.ts +0 -21
  556. package/src/Fx/combinators/unwrapScoped.ts +0 -26
  557. package/src/Fx/combinators/when.ts +0 -64
  558. package/src/Fx/combinators/withSpan.ts +0 -24
  559. package/src/Fx/combinators/zip.ts +0 -175
  560. package/src/Fx/constructors/at.ts +0 -23
  561. package/src/Fx/constructors/die.ts +0 -17
  562. package/src/Fx/constructors/empty.ts +0 -10
  563. package/src/Fx/constructors/fail.ts +0 -14
  564. package/src/Fx/constructors/failCause.ts +0 -14
  565. package/src/Fx/constructors/fn.ts +0 -245
  566. package/src/Fx/constructors/fromEffect.ts +0 -24
  567. package/src/Fx/constructors/fromFailures.ts +0 -19
  568. package/src/Fx/constructors/fromIterable.ts +0 -15
  569. package/src/Fx/constructors/fromSchedule.ts +0 -18
  570. package/src/Fx/constructors/fromYieldable.ts +0 -17
  571. package/src/Fx/constructors/index.ts +0 -15
  572. package/src/Fx/constructors/interrupt.ts +0 -13
  573. package/src/Fx/constructors/make.ts +0 -103
  574. package/src/Fx/constructors/periodic.ts +0 -15
  575. package/src/Fx/constructors/succeed.ts +0 -37
  576. package/src/Fx/constructors/suspend.ts +0 -6
  577. package/src/Fx/index.ts +0 -6
  578. package/src/Fx/internal/DeferredRef.ts +0 -87
  579. package/src/Fx/internal/UnionToTuple.ts +0 -12
  580. package/src/Fx/internal/diff.ts +0 -191
  581. package/src/Fx/internal/equivalence.ts +0 -12
  582. package/src/Fx/internal/multicast.ts +0 -51
  583. package/src/Fx/internal/ring-buffer.ts +0 -60
  584. package/src/Fx/internal/scope.ts +0 -58
  585. package/src/Fx/internal/yieldable.ts +0 -31
  586. package/src/Fx/run/collect.ts +0 -79
  587. package/src/Fx/run/first.ts +0 -20
  588. package/src/Fx/run/fork.ts +0 -40
  589. package/src/Fx/run/index.ts +0 -5
  590. package/src/Fx/run/observe.ts +0 -114
  591. package/src/Fx/run/runPromise.ts +0 -32
  592. package/src/Fx/stream.ts +0 -42
  593. package/src/Fx.additive-combinators.test.ts +0 -126
  594. package/src/Fx.catch-additive.test.ts +0 -206
  595. package/src/Fx.catch.test.ts +0 -60
  596. package/src/Fx.dropUntil.test.ts +0 -61
  597. package/src/Fx.fn.test.ts +0 -51
  598. package/src/Fx.lifecycle.test.ts +0 -79
  599. package/src/Fx.mapError-mapBoth.test.ts +0 -101
  600. package/src/Fx.provide-combinators.test.ts +0 -94
  601. package/src/Fx.result-changesWithEffect.test.ts +0 -112
  602. package/src/Fx.scan.test.ts +0 -73
  603. package/src/Fx.takeWhile-skipWhile.test.ts +0 -84
  604. package/src/Fx.test.ts +0 -71
  605. package/src/Fx.ts +0 -1
  606. package/src/Fx.zip-merge-additive.test.ts +0 -171
  607. package/src/Fx.zip.test.ts +0 -133
  608. package/src/Push/Push.ts +0 -1072
  609. package/src/Push/index.ts +0 -1
  610. package/src/Push.additive.test.ts +0 -256
  611. package/src/Push.test.ts +0 -26
  612. package/src/Push.ts +0 -1
  613. package/src/RefSubject/RefArray.ts +0 -512
  614. package/src/RefSubject/RefBigDecimal.test.ts +0 -56
  615. package/src/RefSubject/RefBigDecimal.ts +0 -295
  616. package/src/RefSubject/RefBigInt.test.ts +0 -56
  617. package/src/RefSubject/RefBigInt.ts +0 -189
  618. package/src/RefSubject/RefBoolean.test.ts +0 -57
  619. package/src/RefSubject/RefBoolean.ts +0 -185
  620. package/src/RefSubject/RefCause.test.ts +0 -53
  621. package/src/RefSubject/RefCause.ts +0 -146
  622. package/src/RefSubject/RefChunk.ts +0 -510
  623. package/src/RefSubject/RefDateTime.test.ts +0 -43
  624. package/src/RefSubject/RefDateTime.ts +0 -264
  625. package/src/RefSubject/RefDuration.test.ts +0 -49
  626. package/src/RefSubject/RefDuration.ts +0 -188
  627. package/src/RefSubject/RefGraph.ts +0 -650
  628. package/src/RefSubject/RefHashMap.ts +0 -465
  629. package/src/RefSubject/RefHashRing.ts +0 -262
  630. package/src/RefSubject/RefHashSet.ts +0 -308
  631. package/src/RefSubject/RefIterable.ts +0 -445
  632. package/src/RefSubject/RefOption.test.ts +0 -67
  633. package/src/RefSubject/RefOption.ts +0 -193
  634. package/src/RefSubject/RefRecord.ts +0 -612
  635. package/src/RefSubject/RefResult.test.ts +0 -63
  636. package/src/RefSubject/RefResult.ts +0 -209
  637. package/src/RefSubject/RefString.test.ts +0 -61
  638. package/src/RefSubject/RefString.ts +0 -256
  639. package/src/RefSubject/RefStruct.test.ts +0 -60
  640. package/src/RefSubject/RefStruct.ts +0 -253
  641. package/src/RefSubject/RefSubject.ts +0 -2646
  642. package/src/RefSubject/RefTrie.ts +0 -356
  643. package/src/RefSubject/RefTuple.test.ts +0 -60
  644. package/src/RefSubject/RefTuple.ts +0 -231
  645. package/src/RefSubject/index.ts +0 -21
  646. package/src/RefSubject.additive-parity.test.ts +0 -101
  647. package/src/RefSubject.test.ts +0 -65
  648. package/src/RefSubject.ts +0 -1
  649. package/src/Sink/Sink.ts +0 -159
  650. package/src/Sink/combinators.ts +0 -1115
  651. package/src/Sink/index.ts +0 -2
  652. package/src/Sink.combinators.test.ts +0 -88
  653. package/src/Sink.reduce-collect-head-last.test.ts +0 -107
  654. package/src/Sink.ts +0 -1
  655. package/src/Subject/Subject.ts +0 -441
  656. package/src/Subject/index.ts +0 -1
  657. package/src/Subject.test.ts +0 -47
  658. package/src/Subject.ts +0 -1
  659. package/src/Versioned/Versioned.ts +0 -597
  660. package/src/Versioned/index.ts +0 -1
  661. package/src/Versioned.filterMap.test.ts +0 -91
  662. package/src/Versioned.test.ts +0 -23
  663. package/src/Versioned.ts +0 -1
  664. package/src/index.ts +0 -7
@@ -4,26 +4,278 @@ import type * as Equivalence from "effect/Equivalence";
4
4
  import * as Exit from "effect/Exit";
5
5
  import * as MutableRef from "effect/MutableRef";
6
6
  import * as Option from "effect/Option";
7
+ import { EffectableWithOverride } from "./effectableWithOverride.js";
7
8
  /**
8
- * This is the core piece of state for {@link RefSubject}. It presents an Yieldable/Effect interface
9
- * which supports retrieving the latest Exit<A, E> or waiting for an initial Exit<A, E> to be set otherwise.
9
+ * A mutable, Effect-compatible cell that waits for its first `Exit` and samples the latest one
10
+ * thereafter.
10
11
  *
11
- * It utilizes a Equivalence to determine if the latest Exit<A, E> is the same as the current Exit<A, E> through the
12
- * done method.
12
+ * @remarks
13
+ * ## Why
13
14
  *
14
- * @internal
15
+ * RefSubject needs one object that can be yielded as an Effect before initialization and read
16
+ * synchronously from retained state after initialization. `DeferredRef` combines those two phases
17
+ * without starting a polling fiber or allocating a new Deferred for every update.
18
+ *
19
+ * ## Ownership and lifetime
20
+ *
21
+ * An instance owns its current Deferred and mutates the supplied `MutableRef`. It acquires no
22
+ * Scope. Callers must ensure that mutation is serialized when updates can race. `reset` interrupts
23
+ * waiters on the previous Deferred and replaces it; dropping the instance releases the retained
24
+ * `Exit` for garbage collection.
25
+ *
26
+ * ## Errors and interruption
27
+ *
28
+ * Executing the instance waits while `current` is `None`, then succeeds or fails exactly as the
29
+ * stored `Exit`. `reset` completes the old Deferred with interruption attributed to `fiberId`.
30
+ * The equality function controls version changes and the boolean returned by `done`; it does not
31
+ * erase or transform typed failures.
32
+ *
33
+ * This import path is published for advanced state implementations, but its shape follows
34
+ * RefSubject and Effect runtime details and may change between prereleases.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * import { DeferredRef } from "@typed/fx/Fx/internal/DeferredRef"
39
+ * import { getExitEquivalence } from "@typed/fx/Fx/internal/equivalence"
40
+ * import * as Effect from "effect/Effect"
41
+ * import * as Equivalence from "effect/Equivalence"
42
+ * import * as Exit from "effect/Exit"
43
+ * import * as MutableRef from "effect/MutableRef"
44
+ * import * as Option from "effect/Option"
45
+ *
46
+ * const current = MutableRef.make<Option.Option<Exit.Exit<number, never>>>(Option.none())
47
+ * const ref = new DeferredRef(undefined, getExitEquivalence(Equivalence.Number), current)
48
+ * ref.done(Exit.succeed(1))
49
+ * const value = Effect.runSync(ref) // 1
50
+ * ```
51
+ *
52
+ * @since 1.0.0
53
+ * @category advanced
54
+ * @stability internal-but-published
15
55
  */
16
- export declare class DeferredRef<E, A> extends Effect.YieldableClass<A, E, never> {
56
+ export declare class DeferredRef<E, A> extends EffectableWithOverride<A, E, never> {
57
+ /** The zero-based version of the latest distinct `Exit` since the last reset.
58
+ *
59
+ * @remarks
60
+ * ## Why
61
+ *
62
+ * `reset` sets this to `-1`; the first distinct `done` call changes it to `0`, the next to `1`,
63
+ * and so on. It is an ordinal, not a count.
64
+ *
65
+ * ## Ownership and lifetime
66
+ *
67
+ * The instance mutates this counter; reading it acquires no resources.
68
+ *
69
+ * @since 1.0.0
70
+ * @category state
71
+ */
17
72
  version: number;
73
+ /** The one-shot gate used by Effects waiting for the first value after a reset.
74
+ *
75
+ * @remarks
76
+ * ## Why
77
+ *
78
+ * This field is replaced by `reset`. Mutating or completing it externally can violate the
79
+ * `current`/Deferred invariant.
80
+ *
81
+ * ## Ownership and lifetime
82
+ *
83
+ * The instance owns the gate until reset or collection; waiters borrow it through `override`.
84
+ *
85
+ * @since 1.0.0
86
+ * @category state
87
+ */
18
88
  deferred: Deferred.Deferred<A, E>;
89
+ /** Fiber identifier used to attribute interruption when `reset` closes the old gate.
90
+ *
91
+ * @remarks
92
+ * ## Why
93
+ *
94
+ * Retaining the creator's identifier makes reset interruption attributable in an Effect Cause.
95
+ *
96
+ * ## Ownership and lifetime
97
+ *
98
+ * Immutable scalar metadata retained for the instance lifetime.
99
+ *
100
+ * @since 1.0.0
101
+ * @category state
102
+ */
19
103
  readonly fiberId: number | undefined;
104
+ /** Equivalence used to suppress version changes for repeated Exits.
105
+ *
106
+ * @remarks
107
+ * ## Why
108
+ *
109
+ * State implementations can define semantic equality independently from object identity.
110
+ *
111
+ * ## Ownership and lifetime
112
+ *
113
+ * The instance retains and invokes the pure function; it acquires no services.
114
+ *
115
+ * @since 1.0.0
116
+ * @category state
117
+ */
20
118
  readonly eq: Equivalence.Equivalence<Exit.Exit<A, E>>;
119
+ /** Shared mutable storage containing the latest success or failure, if initialized.
120
+ *
121
+ * @remarks
122
+ * ## Why
123
+ *
124
+ * Sharing one cell lets RefSubject publication and Effect sampling observe the same latest Exit.
125
+ *
126
+ * ## Ownership and lifetime
127
+ *
128
+ * The constructor borrows this cell and clears it; external owners must coordinate mutation.
129
+ *
130
+ * @since 1.0.0
131
+ * @category state
132
+ */
21
133
  readonly current: MutableRef.MutableRef<Option.Option<Exit.Exit<A, E>>>;
134
+ /** Constructs a cell over caller-supplied storage and immediately starts an empty version.
135
+ *
136
+ * @remarks
137
+ * ## Why
138
+ *
139
+ * Advanced state implementations can share their existing current-Exit cell with the yieldable
140
+ * Effect view while choosing the equality and interruption identity used by publication.
141
+ *
142
+ * ## Ownership and lifetime
143
+ *
144
+ * The constructor borrows and clears `current`, sets `version` to `-1`, and owns the newly created
145
+ * one-shot Deferred until reset or collection. It does not clone storage, acquire a Scope, or
146
+ * synchronize external mutation.
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * import { DeferredRef } from "@typed/fx/Fx/internal/DeferredRef"
151
+ * import { getExitEquivalence } from "@typed/fx/Fx/internal/equivalence"
152
+ * import * as Equivalence from "effect/Equivalence"
153
+ * import type * as Exit from "effect/Exit"
154
+ * import * as MutableRef from "effect/MutableRef"
155
+ * import * as Option from "effect/Option"
156
+ *
157
+ * const current = MutableRef.make<Option.Option<Exit.Exit<number, never>>>(Option.none())
158
+ * const ref = new DeferredRef(undefined, getExitEquivalence(Equivalence.Number), current)
159
+ * ref.version // -1 until the first distinct Exit is published
160
+ * ```
161
+ *
162
+ * @since 1.0.0
163
+ * @category constructors
164
+ */
22
165
  constructor(fiberId: number | undefined, eq: Equivalence.Equivalence<Exit.Exit<A, E>>, current: MutableRef.MutableRef<Option.Option<Exit.Exit<A, E>>>);
23
- asEffect(): Effect.Effect<A, E, never>;
166
+ /** Effect view that awaits initialization or evaluates the latest stored `Exit`.
167
+ *
168
+ * @remarks
169
+ * ## Why
170
+ *
171
+ * Each execution reads `current`. Once initialized, reads are O(1) and do not wait on the
172
+ * Deferred.
173
+ *
174
+ * ## Ownership and lifetime
175
+ *
176
+ * The Effect borrows instance state and retains no per-execution resource after it completes.
177
+ *
178
+ * @since 1.0.0
179
+ * @category effects
180
+ */
181
+ readonly override: Effect.Effect<A, E, never>;
182
+ /** Stores an `Exit` and reports whether it differs from the previously stored value.
183
+ *
184
+ * @remarks
185
+ * ## Why
186
+ *
187
+ * The current cell is updated even when `eq` reports equality. The first distinct value after a
188
+ * reset completes the one-shot Deferred, changes `version` from `-1` to `0`, and releases waiters.
189
+ * Later distinct values replace `current` and advance the zero-based version, but the already
190
+ * completed Deferred is not re-completed and existing executions sample `current` directly.
191
+ * An equivalent value leaves the version unchanged and returns `false`. The operation is O(1)
192
+ * plus the cost of `eq`.
193
+ *
194
+ * ## Ownership and lifetime
195
+ *
196
+ * Mutates only this cell's current value, Deferred, and version; it starts no fiber or Scope.
197
+ *
198
+ * @since 1.0.0
199
+ * @category mutations
200
+ */
24
201
  done(exit: Exit.Exit<A, E>): boolean;
202
+ /** Clears the sampled value and starts a fresh initialization phase.
203
+ *
204
+ * @remarks
205
+ * ## Why
206
+ *
207
+ * Existing waiters are interrupted before the replacement Deferred is installed. The method is
208
+ * synchronous and acquires no Scope.
209
+ *
210
+ * ## Ownership and lifetime
211
+ *
212
+ * Releases the old current Exit and gate from this instance after interrupting its waiters.
213
+ *
214
+ * @since 1.0.0
215
+ * @category mutations
216
+ */
25
217
  reset(): void;
26
218
  }
219
+ /** Creates a fresh `DeferredRef` and records the creating fiber for reset interruption.
220
+ *
221
+ * @remarks
222
+ * ## Why
223
+ *
224
+ * Capturing the current fiber gives interruption of pre-reset waiters an attributable origin while
225
+ * keeping ordinary construction inside Effect.
226
+ *
227
+ * ## Ownership and lifetime
228
+ *
229
+ * The returned instance owns its Deferred and mutable cell but acquires no Scope. Its state remains
230
+ * reachable for exactly as long as callers retain the instance.
231
+ *
232
+ * @example
233
+ * ```ts
234
+ * import { make } from "@typed/fx/Fx/internal/DeferredRef"
235
+ * import { getExitEquivalence } from "@typed/fx/Fx/internal/equivalence"
236
+ * import * as Effect from "effect/Effect"
237
+ * import * as Equivalence from "effect/Equivalence"
238
+ *
239
+ * const program = Effect.gen(function* () {
240
+ * const ref = yield* make(getExitEquivalence<never, number>(Equivalence.Number))
241
+ * return ref
242
+ * })
243
+ * ```
244
+ *
245
+ * @since 1.0.0
246
+ * @category constructors
247
+ * @stability internal-but-published
248
+ */
27
249
  export declare function make<E, A>(eq: Equivalence.Equivalence<Exit.Exit<A, E>>): Effect.Effect<DeferredRef<E, A>, never, never>;
250
+ /** Constructs a `DeferredRef` over existing mutable storage without entering Effect.
251
+ *
252
+ * @remarks
253
+ * ## Why
254
+ *
255
+ * State implementations that already own an `Exit` cell can share it with the Effect view instead
256
+ * of copying or synchronizing two stores.
257
+ *
258
+ * ## Ownership and lifetime
259
+ *
260
+ * The returned instance borrows `current` and immediately resets it to `None`. Callers own all
261
+ * synchronization and must not assume that the previous cell value survives construction.
262
+ *
263
+ * @example
264
+ * ```ts
265
+ * import { unsafeMake } from "@typed/fx/Fx/internal/DeferredRef"
266
+ * import { getExitEquivalence } from "@typed/fx/Fx/internal/equivalence"
267
+ * import * as Equivalence from "effect/Equivalence"
268
+ * import * as Exit from "effect/Exit"
269
+ * import * as MutableRef from "effect/MutableRef"
270
+ * import * as Option from "effect/Option"
271
+ *
272
+ * const current = MutableRef.make<Option.Option<Exit.Exit<number, never>>>(Option.none())
273
+ * const ref = unsafeMake(undefined, getExitEquivalence(Equivalence.Number), current)
274
+ * ```
275
+ *
276
+ * @since 1.0.0
277
+ * @category constructors
278
+ * @stability internal-but-published
279
+ */
28
280
  export declare function unsafeMake<E, A>(id: number | undefined, eq: Equivalence.Equivalence<Exit.Exit<A, E>>, current: MutableRef.MutableRef<Option.Option<Exit.Exit<A, E>>>): DeferredRef<E, A>;
29
281
  //# sourceMappingURL=DeferredRef.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DeferredRef.d.ts","sourceRoot":"","sources":["../../../src/Fx/internal/DeferredRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,WAAW,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC;;;;;;;;GAQG;AACH,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;IAChE,OAAO,EAAG,MAAM,CAAC;IACjB,QAAQ,EAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAGtE,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC5C,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAShE,QAAQ;IAWR,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;IAepC,KAAK;CAUN;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kDAItE;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAC7B,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC5C,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qBAG/D"}
1
+ {"version":3,"file":"DeferredRef.d.ts","sourceRoot":"","sources":["../../../src/Fx/internal/DeferredRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,WAAW,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;IACxE;;;;;;;;;;;;;;OAcG;IACI,OAAO,EAAG,MAAM,CAAC;IAExB;;;;;;;;;;;;;;OAcG;IACI,QAAQ,EAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1C;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEtD;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,YACE,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC5C,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAgB/D;IAED;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAE9C;;;;;;;;;;;;;;;;;;OAkBG;IACH,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAanC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,SASJ;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kDAItE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAC7B,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC5C,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qBAG/D"}
@@ -3,30 +3,171 @@ import * as Effect from "effect/Effect";
3
3
  import * as Exit from "effect/Exit";
4
4
  import * as MutableRef from "effect/MutableRef";
5
5
  import * as Option from "effect/Option";
6
+ import { EffectableWithOverride } from "./effectableWithOverride.js";
6
7
  /**
7
- * This is the core piece of state for {@link RefSubject}. It presents an Yieldable/Effect interface
8
- * which supports retrieving the latest Exit<A, E> or waiting for an initial Exit<A, E> to be set otherwise.
8
+ * A mutable, Effect-compatible cell that waits for its first `Exit` and samples the latest one
9
+ * thereafter.
9
10
  *
10
- * It utilizes a Equivalence to determine if the latest Exit<A, E> is the same as the current Exit<A, E> through the
11
- * done method.
11
+ * @remarks
12
+ * ## Why
12
13
  *
13
- * @internal
14
+ * RefSubject needs one object that can be yielded as an Effect before initialization and read
15
+ * synchronously from retained state after initialization. `DeferredRef` combines those two phases
16
+ * without starting a polling fiber or allocating a new Deferred for every update.
17
+ *
18
+ * ## Ownership and lifetime
19
+ *
20
+ * An instance owns its current Deferred and mutates the supplied `MutableRef`. It acquires no
21
+ * Scope. Callers must ensure that mutation is serialized when updates can race. `reset` interrupts
22
+ * waiters on the previous Deferred and replaces it; dropping the instance releases the retained
23
+ * `Exit` for garbage collection.
24
+ *
25
+ * ## Errors and interruption
26
+ *
27
+ * Executing the instance waits while `current` is `None`, then succeeds or fails exactly as the
28
+ * stored `Exit`. `reset` completes the old Deferred with interruption attributed to `fiberId`.
29
+ * The equality function controls version changes and the boolean returned by `done`; it does not
30
+ * erase or transform typed failures.
31
+ *
32
+ * This import path is published for advanced state implementations, but its shape follows
33
+ * RefSubject and Effect runtime details and may change between prereleases.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * import { DeferredRef } from "@typed/fx/Fx/internal/DeferredRef"
38
+ * import { getExitEquivalence } from "@typed/fx/Fx/internal/equivalence"
39
+ * import * as Effect from "effect/Effect"
40
+ * import * as Equivalence from "effect/Equivalence"
41
+ * import * as Exit from "effect/Exit"
42
+ * import * as MutableRef from "effect/MutableRef"
43
+ * import * as Option from "effect/Option"
44
+ *
45
+ * const current = MutableRef.make<Option.Option<Exit.Exit<number, never>>>(Option.none())
46
+ * const ref = new DeferredRef(undefined, getExitEquivalence(Equivalence.Number), current)
47
+ * ref.done(Exit.succeed(1))
48
+ * const value = Effect.runSync(ref) // 1
49
+ * ```
50
+ *
51
+ * @since 1.0.0
52
+ * @category advanced
53
+ * @stability internal-but-published
14
54
  */
15
- export class DeferredRef extends Effect.YieldableClass {
55
+ export class DeferredRef extends EffectableWithOverride {
56
+ /** The zero-based version of the latest distinct `Exit` since the last reset.
57
+ *
58
+ * @remarks
59
+ * ## Why
60
+ *
61
+ * `reset` sets this to `-1`; the first distinct `done` call changes it to `0`, the next to `1`,
62
+ * and so on. It is an ordinal, not a count.
63
+ *
64
+ * ## Ownership and lifetime
65
+ *
66
+ * The instance mutates this counter; reading it acquires no resources.
67
+ *
68
+ * @since 1.0.0
69
+ * @category state
70
+ */
16
71
  version;
72
+ /** The one-shot gate used by Effects waiting for the first value after a reset.
73
+ *
74
+ * @remarks
75
+ * ## Why
76
+ *
77
+ * This field is replaced by `reset`. Mutating or completing it externally can violate the
78
+ * `current`/Deferred invariant.
79
+ *
80
+ * ## Ownership and lifetime
81
+ *
82
+ * The instance owns the gate until reset or collection; waiters borrow it through `override`.
83
+ *
84
+ * @since 1.0.0
85
+ * @category state
86
+ */
17
87
  deferred;
88
+ /** Fiber identifier used to attribute interruption when `reset` closes the old gate.
89
+ *
90
+ * @remarks
91
+ * ## Why
92
+ *
93
+ * Retaining the creator's identifier makes reset interruption attributable in an Effect Cause.
94
+ *
95
+ * ## Ownership and lifetime
96
+ *
97
+ * Immutable scalar metadata retained for the instance lifetime.
98
+ *
99
+ * @since 1.0.0
100
+ * @category state
101
+ */
18
102
  fiberId;
103
+ /** Equivalence used to suppress version changes for repeated Exits.
104
+ *
105
+ * @remarks
106
+ * ## Why
107
+ *
108
+ * State implementations can define semantic equality independently from object identity.
109
+ *
110
+ * ## Ownership and lifetime
111
+ *
112
+ * The instance retains and invokes the pure function; it acquires no services.
113
+ *
114
+ * @since 1.0.0
115
+ * @category state
116
+ */
19
117
  eq;
118
+ /** Shared mutable storage containing the latest success or failure, if initialized.
119
+ *
120
+ * @remarks
121
+ * ## Why
122
+ *
123
+ * Sharing one cell lets RefSubject publication and Effect sampling observe the same latest Exit.
124
+ *
125
+ * ## Ownership and lifetime
126
+ *
127
+ * The constructor borrows this cell and clears it; external owners must coordinate mutation.
128
+ *
129
+ * @since 1.0.0
130
+ * @category state
131
+ */
20
132
  current;
133
+ /** Constructs a cell over caller-supplied storage and immediately starts an empty version.
134
+ *
135
+ * @remarks
136
+ * ## Why
137
+ *
138
+ * Advanced state implementations can share their existing current-Exit cell with the yieldable
139
+ * Effect view while choosing the equality and interruption identity used by publication.
140
+ *
141
+ * ## Ownership and lifetime
142
+ *
143
+ * The constructor borrows and clears `current`, sets `version` to `-1`, and owns the newly created
144
+ * one-shot Deferred until reset or collection. It does not clone storage, acquire a Scope, or
145
+ * synchronize external mutation.
146
+ *
147
+ * @example
148
+ * ```ts
149
+ * import { DeferredRef } from "@typed/fx/Fx/internal/DeferredRef"
150
+ * import { getExitEquivalence } from "@typed/fx/Fx/internal/equivalence"
151
+ * import * as Equivalence from "effect/Equivalence"
152
+ * import type * as Exit from "effect/Exit"
153
+ * import * as MutableRef from "effect/MutableRef"
154
+ * import * as Option from "effect/Option"
155
+ *
156
+ * const current = MutableRef.make<Option.Option<Exit.Exit<number, never>>>(Option.none())
157
+ * const ref = new DeferredRef(undefined, getExitEquivalence(Equivalence.Number), current)
158
+ * ref.version // -1 until the first distinct Exit is published
159
+ * ```
160
+ *
161
+ * @since 1.0.0
162
+ * @category constructors
163
+ */
21
164
  constructor(fiberId, eq, current) {
22
165
  super();
23
166
  this.fiberId = fiberId;
24
167
  this.eq = eq;
25
168
  this.current = current;
26
169
  this.reset();
27
- }
28
- asEffect() {
29
- return Effect.suspend(() => {
170
+ this.override = Effect.suspend(() => {
30
171
  const current = MutableRef.get(this.current);
31
172
  if (Option.isNone(current)) {
32
173
  return Deferred.await(this.deferred);
@@ -36,6 +177,41 @@ export class DeferredRef extends Effect.YieldableClass {
36
177
  }
37
178
  });
38
179
  }
180
+ /** Effect view that awaits initialization or evaluates the latest stored `Exit`.
181
+ *
182
+ * @remarks
183
+ * ## Why
184
+ *
185
+ * Each execution reads `current`. Once initialized, reads are O(1) and do not wait on the
186
+ * Deferred.
187
+ *
188
+ * ## Ownership and lifetime
189
+ *
190
+ * The Effect borrows instance state and retains no per-execution resource after it completes.
191
+ *
192
+ * @since 1.0.0
193
+ * @category effects
194
+ */
195
+ override;
196
+ /** Stores an `Exit` and reports whether it differs from the previously stored value.
197
+ *
198
+ * @remarks
199
+ * ## Why
200
+ *
201
+ * The current cell is updated even when `eq` reports equality. The first distinct value after a
202
+ * reset completes the one-shot Deferred, changes `version` from `-1` to `0`, and releases waiters.
203
+ * Later distinct values replace `current` and advance the zero-based version, but the already
204
+ * completed Deferred is not re-completed and existing executions sample `current` directly.
205
+ * An equivalent value leaves the version unchanged and returns `false`. The operation is O(1)
206
+ * plus the cost of `eq`.
207
+ *
208
+ * ## Ownership and lifetime
209
+ *
210
+ * Mutates only this cell's current value, Deferred, and version; it starts no fiber or Scope.
211
+ *
212
+ * @since 1.0.0
213
+ * @category mutations
214
+ */
39
215
  done(exit) {
40
216
  const current = MutableRef.get(this.current);
41
217
  MutableRef.set(this.current, Option.some(exit));
@@ -46,6 +222,21 @@ export class DeferredRef extends Effect.YieldableClass {
46
222
  this.version += 1;
47
223
  return true;
48
224
  }
225
+ /** Clears the sampled value and starts a fresh initialization phase.
226
+ *
227
+ * @remarks
228
+ * ## Why
229
+ *
230
+ * Existing waiters are interrupted before the replacement Deferred is installed. The method is
231
+ * synchronous and acquires no Scope.
232
+ *
233
+ * ## Ownership and lifetime
234
+ *
235
+ * Releases the old current Exit and gate from this instance after interrupting its waiters.
236
+ *
237
+ * @since 1.0.0
238
+ * @category mutations
239
+ */
49
240
  reset() {
50
241
  MutableRef.set(this.current, Option.none());
51
242
  this.version = -1;
@@ -55,9 +246,69 @@ export class DeferredRef extends Effect.YieldableClass {
55
246
  this.deferred = Deferred.makeUnsafe();
56
247
  }
57
248
  }
249
+ /** Creates a fresh `DeferredRef` and records the creating fiber for reset interruption.
250
+ *
251
+ * @remarks
252
+ * ## Why
253
+ *
254
+ * Capturing the current fiber gives interruption of pre-reset waiters an attributable origin while
255
+ * keeping ordinary construction inside Effect.
256
+ *
257
+ * ## Ownership and lifetime
258
+ *
259
+ * The returned instance owns its Deferred and mutable cell but acquires no Scope. Its state remains
260
+ * reachable for exactly as long as callers retain the instance.
261
+ *
262
+ * @example
263
+ * ```ts
264
+ * import { make } from "@typed/fx/Fx/internal/DeferredRef"
265
+ * import { getExitEquivalence } from "@typed/fx/Fx/internal/equivalence"
266
+ * import * as Effect from "effect/Effect"
267
+ * import * as Equivalence from "effect/Equivalence"
268
+ *
269
+ * const program = Effect.gen(function* () {
270
+ * const ref = yield* make(getExitEquivalence<never, number>(Equivalence.Number))
271
+ * return ref
272
+ * })
273
+ * ```
274
+ *
275
+ * @since 1.0.0
276
+ * @category constructors
277
+ * @stability internal-but-published
278
+ */
58
279
  export function make(eq) {
59
280
  return Effect.withFiber((fiber) => Effect.succeed(new DeferredRef(fiber.id, eq, MutableRef.make(Option.none()))));
60
281
  }
282
+ /** Constructs a `DeferredRef` over existing mutable storage without entering Effect.
283
+ *
284
+ * @remarks
285
+ * ## Why
286
+ *
287
+ * State implementations that already own an `Exit` cell can share it with the Effect view instead
288
+ * of copying or synchronizing two stores.
289
+ *
290
+ * ## Ownership and lifetime
291
+ *
292
+ * The returned instance borrows `current` and immediately resets it to `None`. Callers own all
293
+ * synchronization and must not assume that the previous cell value survives construction.
294
+ *
295
+ * @example
296
+ * ```ts
297
+ * import { unsafeMake } from "@typed/fx/Fx/internal/DeferredRef"
298
+ * import { getExitEquivalence } from "@typed/fx/Fx/internal/equivalence"
299
+ * import * as Equivalence from "effect/Equivalence"
300
+ * import * as Exit from "effect/Exit"
301
+ * import * as MutableRef from "effect/MutableRef"
302
+ * import * as Option from "effect/Option"
303
+ *
304
+ * const current = MutableRef.make<Option.Option<Exit.Exit<number, never>>>(Option.none())
305
+ * const ref = unsafeMake(undefined, getExitEquivalence(Equivalence.Number), current)
306
+ * ```
307
+ *
308
+ * @since 1.0.0
309
+ * @category constructors
310
+ * @stability internal-but-published
311
+ */
61
312
  export function unsafeMake(id, eq, current) {
62
313
  return new DeferredRef(id, eq, current);
63
314
  }
@@ -1,6 +1,28 @@
1
1
  type Contra<T> = T extends any ? (arg: T) => void : never;
2
2
  type InferContra<T> = [T] extends [(arg: infer I) => void] ? I : never;
3
3
  type PickOne<T> = InferContra<InferContra<Contra<Contra<T>>>>;
4
+ /** Converts a union to a tuple so recursive type-level folds can visit each member.
5
+ *
6
+ * @remarks
7
+ * ## Why
8
+ *
9
+ * TypeScript cannot directly reduce a union while accumulating state. This helper repeatedly
10
+ * selects one member through contravariant inference, excludes it, and appends it to a tuple. Typed
11
+ * uses that tuple to merge RefSubject structure kinds.
12
+ *
13
+ * ## Ownership and lifetime
14
+ *
15
+ * This is a compile-time transformation. It emits no JavaScript, acquires no services, and retains
16
+ * no runtime resources.
17
+ *
18
+ * Union member order is an implementation detail of TypeScript inference and must not be used as a
19
+ * stable ordering contract. Very large unions may also reach the compiler's instantiation-depth
20
+ * limit. This published helper follows compiler internals and may change between prereleases.
21
+ *
22
+ * @since 1.0.0
23
+ * @category type-level
24
+ * @stability internal-but-published
25
+ */
4
26
  export type UnionToTuple<T> = PickOne<T> extends infer U ? Exclude<T, U> extends never ? [T] : [...UnionToTuple<Exclude<T, U>>, U] : never;
5
27
  export {};
6
28
  //# sourceMappingURL=UnionToTuple.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UnionToTuple.d.ts","sourceRoot":"","sources":["../../../src/Fx/internal/UnionToTuple.ts"],"names":[],"mappings":"AAAA,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC;AAE1D,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEvE,KAAK,OAAO,CAAC,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,YAAY,CAAC,CAAC,IACxB,OAAO,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GACtB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,KAAK,GACzB,CAAC,CAAC,CAAC,GACH,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACrC,KAAK,CAAC"}
1
+ {"version":3,"file":"UnionToTuple.d.ts","sourceRoot":"","sources":["../../../src/Fx/internal/UnionToTuple.ts"],"names":[],"mappings":"AAAA,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC;AAE1D,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEvE,KAAK,OAAO,CAAC,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IACxB,OAAO,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GACtB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,KAAK,GACzB,CAAC,CAAC,CAAC,GACH,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACrC,KAAK,CAAC"}