@typed/fx 1.18.4 → 1.20.0

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 (423) hide show
  1. package/AsyncData/package.json +6 -0
  2. package/Emitter/package.json +6 -0
  3. package/Form/package.json +6 -0
  4. package/FormEntry/package.json +6 -0
  5. package/Fx/package.json +6 -0
  6. package/Guard/package.json +6 -0
  7. package/Idle/package.json +6 -0
  8. package/Match/package.json +6 -0
  9. package/Pull/package.json +6 -0
  10. package/Push/package.json +6 -0
  11. package/RefArray/package.json +6 -0
  12. package/RefChunk/package.json +6 -0
  13. package/RefHashMap/package.json +6 -0
  14. package/RefHashSet/package.json +6 -0
  15. package/RefSubject/package.json +6 -0
  16. package/Sink/package.json +6 -0
  17. package/Stream/package.json +6 -0
  18. package/Subject/package.json +6 -0
  19. package/TypeId/package.json +6 -0
  20. package/Typeclass/package.json +6 -0
  21. package/Versioned/package.json +6 -0
  22. package/dist/cjs/AsyncData.js +177 -0
  23. package/dist/cjs/AsyncData.js.map +1 -0
  24. package/dist/cjs/Emitter.js +24 -21
  25. package/dist/cjs/Emitter.js.map +1 -1
  26. package/dist/cjs/Form.js +78 -21
  27. package/dist/cjs/Form.js.map +1 -1
  28. package/dist/cjs/FormEntry.js +75 -48
  29. package/dist/cjs/FormEntry.js.map +1 -1
  30. package/dist/cjs/Fx.js +517 -872
  31. package/dist/cjs/Fx.js.map +1 -1
  32. package/dist/cjs/Guard.js +21 -13
  33. package/dist/cjs/Guard.js.map +1 -1
  34. package/dist/cjs/Idle.js +49 -37
  35. package/dist/cjs/Idle.js.map +1 -1
  36. package/dist/cjs/Match.js +99 -61
  37. package/dist/cjs/Match.js.map +1 -1
  38. package/dist/cjs/Pull.js.map +1 -1
  39. package/dist/cjs/Push.js +168 -0
  40. package/dist/cjs/Push.js.map +1 -0
  41. package/dist/cjs/RefArray.js +32 -30
  42. package/dist/cjs/RefArray.js.map +1 -1
  43. package/dist/cjs/RefChunk.js +26 -24
  44. package/dist/cjs/RefChunk.js.map +1 -1
  45. package/dist/cjs/RefHashMap.js +20 -20
  46. package/dist/cjs/RefHashMap.js.map +1 -1
  47. package/dist/cjs/RefHashSet.js +11 -8
  48. package/dist/cjs/RefHashSet.js.map +1 -1
  49. package/dist/cjs/RefSubject.js +899 -158
  50. package/dist/cjs/RefSubject.js.map +1 -1
  51. package/dist/cjs/Sink.js +588 -62
  52. package/dist/cjs/Sink.js.map +1 -1
  53. package/dist/cjs/Stream.js +15 -10
  54. package/dist/cjs/Stream.js.map +1 -1
  55. package/dist/cjs/Subject.js +153 -55
  56. package/dist/cjs/Subject.js.map +1 -1
  57. package/dist/cjs/TypeId.js +10 -5
  58. package/dist/cjs/TypeId.js.map +1 -1
  59. package/dist/cjs/Typeclass.js +28 -31
  60. package/dist/cjs/Typeclass.js.map +1 -1
  61. package/dist/cjs/Versioned.js +118 -57
  62. package/dist/cjs/Versioned.js.map +1 -1
  63. package/dist/cjs/index.js +44 -8
  64. package/dist/cjs/index.js.map +1 -1
  65. package/dist/cjs/internal/{deferred-ref.js → DeferredRef.js} +45 -13
  66. package/dist/cjs/internal/DeferredRef.js.map +1 -0
  67. package/dist/cjs/internal/UnionToTuple.js +6 -0
  68. package/dist/cjs/internal/UnionToTuple.js.map +1 -0
  69. package/dist/cjs/internal/core.js +1590 -779
  70. package/dist/cjs/internal/core.js.map +1 -1
  71. package/dist/cjs/internal/diff.js +114 -0
  72. package/dist/cjs/internal/diff.js.map +1 -0
  73. package/dist/cjs/internal/effect-loop-operator.js +288 -0
  74. package/dist/cjs/internal/effect-loop-operator.js.map +1 -0
  75. package/dist/cjs/internal/effect-operator.js +46 -37
  76. package/dist/cjs/internal/effect-operator.js.map +1 -1
  77. package/dist/cjs/internal/effect-producer.js +74 -0
  78. package/dist/cjs/internal/effect-producer.js.map +1 -0
  79. package/dist/cjs/internal/helpers.js +158 -128
  80. package/dist/cjs/internal/helpers.js.map +1 -1
  81. package/dist/cjs/internal/keyed.js +136 -173
  82. package/dist/cjs/internal/keyed.js.map +1 -1
  83. package/dist/cjs/internal/loop-operator.js +213 -0
  84. package/dist/cjs/internal/loop-operator.js.map +1 -0
  85. package/dist/cjs/internal/operator.js +79 -0
  86. package/dist/cjs/internal/operator.js.map +1 -0
  87. package/dist/cjs/internal/protos.js +19 -81
  88. package/dist/cjs/internal/protos.js.map +1 -1
  89. package/dist/cjs/internal/provide.js +47 -25
  90. package/dist/cjs/internal/provide.js.map +1 -1
  91. package/dist/cjs/internal/requestIdleCallback.js +5 -5
  92. package/dist/cjs/internal/requestIdleCallback.js.map +1 -1
  93. package/dist/cjs/internal/share.js +12 -15
  94. package/dist/cjs/internal/share.js.map +1 -1
  95. package/dist/cjs/internal/sync-operator.js +50 -22
  96. package/dist/cjs/internal/sync-operator.js.map +1 -1
  97. package/dist/cjs/internal/sync-producer.js +114 -0
  98. package/dist/cjs/internal/sync-producer.js.map +1 -0
  99. package/dist/cjs/internal/withKey.js +45 -51
  100. package/dist/cjs/internal/withKey.js.map +1 -1
  101. package/dist/dts/AsyncData.d.ts +185 -0
  102. package/dist/dts/AsyncData.d.ts.map +1 -0
  103. package/dist/dts/Emitter.d.ts +13 -20
  104. package/dist/dts/Emitter.d.ts.map +1 -1
  105. package/dist/dts/Form.d.ts +45 -28
  106. package/dist/dts/Form.d.ts.map +1 -1
  107. package/dist/dts/FormEntry.d.ts +25 -13
  108. package/dist/dts/FormEntry.d.ts.map +1 -1
  109. package/dist/dts/Fx.d.ts +983 -1387
  110. package/dist/dts/Fx.d.ts.map +1 -1
  111. package/dist/dts/Guard.d.ts +8 -1
  112. package/dist/dts/Guard.d.ts.map +1 -1
  113. package/dist/dts/Idle.d.ts +3 -3
  114. package/dist/dts/Idle.d.ts.map +1 -1
  115. package/dist/dts/Match.d.ts +8 -8
  116. package/dist/dts/Match.d.ts.map +1 -1
  117. package/dist/dts/Pull.d.ts +5 -5
  118. package/dist/dts/Pull.d.ts.map +1 -1
  119. package/dist/dts/Push.d.ts +170 -0
  120. package/dist/dts/Push.d.ts.map +1 -0
  121. package/dist/dts/RefArray.d.ts +21 -23
  122. package/dist/dts/RefArray.d.ts.map +1 -1
  123. package/dist/dts/RefChunk.d.ts +17 -19
  124. package/dist/dts/RefChunk.d.ts.map +1 -1
  125. package/dist/dts/RefHashMap.d.ts +19 -20
  126. package/dist/dts/RefHashMap.d.ts.map +1 -1
  127. package/dist/dts/RefHashSet.d.ts +12 -16
  128. package/dist/dts/RefHashSet.d.ts.map +1 -1
  129. package/dist/dts/RefSubject.d.ts +396 -187
  130. package/dist/dts/RefSubject.d.ts.map +1 -1
  131. package/dist/dts/Sink.d.ts +193 -93
  132. package/dist/dts/Sink.d.ts.map +1 -1
  133. package/dist/dts/Stream.d.ts +7 -1
  134. package/dist/dts/Stream.d.ts.map +1 -1
  135. package/dist/dts/Subject.d.ts +27 -36
  136. package/dist/dts/Subject.d.ts.map +1 -1
  137. package/dist/dts/TypeId.d.ts +10 -0
  138. package/dist/dts/TypeId.d.ts.map +1 -1
  139. package/dist/dts/Typeclass.d.ts +2 -2
  140. package/dist/dts/Typeclass.d.ts.map +1 -1
  141. package/dist/dts/Versioned.d.ts +50 -78
  142. package/dist/dts/Versioned.d.ts.map +1 -1
  143. package/dist/dts/index.d.ts +66 -6
  144. package/dist/dts/index.d.ts.map +1 -1
  145. package/dist/dts/internal/DeferredRef.d.ts +20 -0
  146. package/dist/dts/internal/DeferredRef.d.ts.map +1 -0
  147. package/dist/dts/internal/UnionToTuple.d.ts +6 -0
  148. package/dist/dts/internal/UnionToTuple.d.ts.map +1 -0
  149. package/dist/dts/internal/core.d.ts +218 -450
  150. package/dist/dts/internal/core.d.ts.map +1 -1
  151. package/dist/dts/internal/diff.d.ts +38 -0
  152. package/dist/dts/internal/diff.d.ts.map +1 -0
  153. package/dist/dts/internal/effect-loop-operator.d.ts +34 -0
  154. package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -0
  155. package/dist/dts/internal/effect-operator.d.ts +8 -5
  156. package/dist/dts/internal/effect-operator.d.ts.map +1 -1
  157. package/dist/dts/internal/effect-producer.d.ts +25 -0
  158. package/dist/dts/internal/effect-producer.d.ts.map +1 -0
  159. package/dist/dts/internal/helpers.d.ts +33 -24
  160. package/dist/dts/internal/helpers.d.ts.map +1 -1
  161. package/dist/dts/internal/keyed.d.ts +3 -3
  162. package/dist/dts/internal/keyed.d.ts.map +1 -1
  163. package/dist/dts/internal/loop-operator.d.ts +40 -0
  164. package/dist/dts/internal/loop-operator.d.ts.map +1 -0
  165. package/dist/dts/internal/operator.d.ts +16 -0
  166. package/dist/dts/internal/operator.d.ts.map +1 -0
  167. package/dist/dts/internal/protos.d.ts +16 -43
  168. package/dist/dts/internal/protos.d.ts.map +1 -1
  169. package/dist/dts/internal/provide.d.ts +7 -1
  170. package/dist/dts/internal/provide.d.ts.map +1 -1
  171. package/dist/dts/internal/share.d.ts +12 -9
  172. package/dist/dts/internal/share.d.ts.map +1 -1
  173. package/dist/dts/internal/sync-operator.d.ts +7 -3
  174. package/dist/dts/internal/sync-operator.d.ts.map +1 -1
  175. package/dist/dts/internal/sync-producer.d.ts +36 -0
  176. package/dist/dts/internal/sync-producer.d.ts.map +1 -0
  177. package/dist/dts/internal/withKey.d.ts +3 -3
  178. package/dist/dts/internal/withKey.d.ts.map +1 -1
  179. package/dist/esm/AsyncData.js +151 -0
  180. package/dist/esm/AsyncData.js.map +1 -0
  181. package/dist/esm/Emitter.js +24 -21
  182. package/dist/esm/Emitter.js.map +1 -1
  183. package/dist/esm/Form.js +69 -14
  184. package/dist/esm/Form.js.map +1 -1
  185. package/dist/esm/FormEntry.js +77 -52
  186. package/dist/esm/FormEntry.js.map +1 -1
  187. package/dist/esm/Fx.js +509 -874
  188. package/dist/esm/Fx.js.map +1 -1
  189. package/dist/esm/Guard.js +5 -1
  190. package/dist/esm/Guard.js.map +1 -1
  191. package/dist/esm/Idle.js +49 -39
  192. package/dist/esm/Idle.js.map +1 -1
  193. package/dist/esm/Match.js +103 -63
  194. package/dist/esm/Match.js.map +1 -1
  195. package/dist/esm/Pull.js.map +1 -1
  196. package/dist/esm/Push.js +159 -0
  197. package/dist/esm/Push.js.map +1 -0
  198. package/dist/esm/RefArray.js +32 -30
  199. package/dist/esm/RefArray.js.map +1 -1
  200. package/dist/esm/RefChunk.js +26 -24
  201. package/dist/esm/RefChunk.js.map +1 -1
  202. package/dist/esm/RefHashMap.js +20 -20
  203. package/dist/esm/RefHashMap.js.map +1 -1
  204. package/dist/esm/RefHashSet.js +11 -8
  205. package/dist/esm/RefHashSet.js.map +1 -1
  206. package/dist/esm/RefSubject.js +873 -150
  207. package/dist/esm/RefSubject.js.map +1 -1
  208. package/dist/esm/Sink.js +608 -57
  209. package/dist/esm/Sink.js.map +1 -1
  210. package/dist/esm/Stream.js +13 -9
  211. package/dist/esm/Stream.js.map +1 -1
  212. package/dist/esm/Subject.js +151 -56
  213. package/dist/esm/Subject.js.map +1 -1
  214. package/dist/esm/TypeId.js +9 -4
  215. package/dist/esm/TypeId.js.map +1 -1
  216. package/dist/esm/Typeclass.js +29 -29
  217. package/dist/esm/Typeclass.js.map +1 -1
  218. package/dist/esm/Versioned.js +110 -53
  219. package/dist/esm/Versioned.js.map +1 -1
  220. package/dist/esm/index.js +66 -6
  221. package/dist/esm/index.js.map +1 -1
  222. package/dist/esm/internal/DeferredRef.js +54 -0
  223. package/dist/esm/internal/DeferredRef.js.map +1 -0
  224. package/dist/esm/internal/UnionToTuple.js +2 -0
  225. package/dist/esm/internal/UnionToTuple.js.map +1 -0
  226. package/dist/esm/internal/core.js +1439 -719
  227. package/dist/esm/internal/core.js.map +1 -1
  228. package/dist/esm/internal/diff.js +82 -0
  229. package/dist/esm/internal/diff.js.map +1 -0
  230. package/dist/esm/internal/effect-loop-operator.js +269 -0
  231. package/dist/esm/internal/effect-loop-operator.js.map +1 -0
  232. package/dist/esm/internal/effect-operator.js +44 -37
  233. package/dist/esm/internal/effect-operator.js.map +1 -1
  234. package/dist/esm/internal/effect-producer.js +47 -0
  235. package/dist/esm/internal/effect-producer.js.map +1 -0
  236. package/dist/esm/internal/helpers.js +157 -129
  237. package/dist/esm/internal/helpers.js.map +1 -1
  238. package/dist/esm/internal/keyed.js +128 -139
  239. package/dist/esm/internal/keyed.js.map +1 -1
  240. package/dist/esm/internal/loop-operator.js +186 -0
  241. package/dist/esm/internal/loop-operator.js.map +1 -0
  242. package/dist/esm/internal/operator.js +68 -0
  243. package/dist/esm/internal/operator.js.map +1 -0
  244. package/dist/esm/internal/protos.js +16 -75
  245. package/dist/esm/internal/protos.js.map +1 -1
  246. package/dist/esm/internal/provide.js +33 -25
  247. package/dist/esm/internal/provide.js.map +1 -1
  248. package/dist/esm/internal/requestIdleCallback.js +5 -5
  249. package/dist/esm/internal/requestIdleCallback.js.map +1 -1
  250. package/dist/esm/internal/share.js +12 -12
  251. package/dist/esm/internal/share.js.map +1 -1
  252. package/dist/esm/internal/sync-operator.js +49 -21
  253. package/dist/esm/internal/sync-operator.js.map +1 -1
  254. package/dist/esm/internal/sync-producer.js +88 -0
  255. package/dist/esm/internal/sync-producer.js.map +1 -0
  256. package/dist/esm/internal/withKey.js +46 -47
  257. package/dist/esm/internal/withKey.js.map +1 -1
  258. package/package.json +22 -62
  259. package/src/AsyncData.ts +447 -0
  260. package/src/Emitter.ts +47 -38
  261. package/src/Form.ts +185 -65
  262. package/src/FormEntry.ts +142 -109
  263. package/src/Fx.ts +1685 -1851
  264. package/src/Guard.ts +12 -1
  265. package/src/Idle.ts +76 -62
  266. package/src/Match.ts +149 -93
  267. package/src/Pull.ts +8 -8
  268. package/src/Push.ts +472 -0
  269. package/src/RefArray.ts +53 -51
  270. package/src/RefChunk.ts +44 -41
  271. package/src/RefHashMap.ts +57 -43
  272. package/src/RefHashSet.ts +21 -31
  273. package/src/RefSubject.ts +1984 -457
  274. package/src/Sink.ts +922 -171
  275. package/src/Stream.ts +32 -20
  276. package/src/Subject.ts +230 -87
  277. package/src/TypeId.ts +16 -4
  278. package/src/Typeclass.ts +31 -32
  279. package/src/Versioned.ts +220 -168
  280. package/src/index.ts +78 -6
  281. package/src/internal/DeferredRef.ts +62 -0
  282. package/src/internal/UnionToTuple.ts +11 -0
  283. package/src/internal/core.ts +2491 -1950
  284. package/src/internal/diff.ts +157 -0
  285. package/src/internal/effect-loop-operator.ts +466 -0
  286. package/src/internal/effect-operator.ts +89 -54
  287. package/src/internal/effect-producer.ts +125 -0
  288. package/src/internal/helpers.ts +275 -205
  289. package/src/internal/keyed.ts +192 -241
  290. package/src/internal/loop-operator.ts +266 -0
  291. package/src/internal/operator.ts +87 -0
  292. package/src/internal/protos.ts +29 -104
  293. package/src/internal/provide.ts +48 -40
  294. package/src/internal/requestIdleCallback.ts +5 -6
  295. package/src/internal/share.ts +26 -24
  296. package/src/internal/sync-operator.ts +68 -27
  297. package/src/internal/sync-producer.ts +146 -0
  298. package/src/internal/withKey.ts +64 -74
  299. package/dist/cjs/Computed.js +0 -115
  300. package/dist/cjs/Computed.js.map +0 -1
  301. package/dist/cjs/Filtered.js +0 -95
  302. package/dist/cjs/Filtered.js.map +0 -1
  303. package/dist/cjs/Model.js +0 -119
  304. package/dist/cjs/Model.js.map +0 -1
  305. package/dist/cjs/RefAsyncData.js +0 -187
  306. package/dist/cjs/RefAsyncData.js.map +0 -1
  307. package/dist/cjs/RefAsyncDataArray.js +0 -38
  308. package/dist/cjs/RefAsyncDataArray.js.map +0 -1
  309. package/dist/cjs/RefBoolean.js +0 -45
  310. package/dist/cjs/RefBoolean.js.map +0 -1
  311. package/dist/cjs/RefNumber.js +0 -49
  312. package/dist/cjs/RefNumber.js.map +0 -1
  313. package/dist/cjs/internal/core-ref-subject.js +0 -254
  314. package/dist/cjs/internal/core-ref-subject.js.map +0 -1
  315. package/dist/cjs/internal/core-subject.js +0 -108
  316. package/dist/cjs/internal/core-subject.js.map +0 -1
  317. package/dist/cjs/internal/deferred-ref.js.map +0 -1
  318. package/dist/cjs/internal/effect-primitive.js +0 -47
  319. package/dist/cjs/internal/effect-primitive.js.map +0 -1
  320. package/dist/cjs/internal/fx-effect-proto.js +0 -58
  321. package/dist/cjs/internal/fx-effect-proto.js.map +0 -1
  322. package/dist/cjs/internal/fx-primitive.js +0 -193
  323. package/dist/cjs/internal/fx-primitive.js.map +0 -1
  324. package/dist/cjs/internal/fx.js +0 -240
  325. package/dist/cjs/internal/fx.js.map +0 -1
  326. package/dist/cjs/internal/matchers.js +0 -34
  327. package/dist/cjs/internal/matchers.js.map +0 -1
  328. package/dist/cjs/internal/run.js +0 -54
  329. package/dist/cjs/internal/run.js.map +0 -1
  330. package/dist/cjs/internal/schema-ref-subject.js +0 -132
  331. package/dist/cjs/internal/schema-ref-subject.js.map +0 -1
  332. package/dist/cjs/internal/versioned-transform.js +0 -46
  333. package/dist/cjs/internal/versioned-transform.js.map +0 -1
  334. package/dist/dts/Computed.d.ts +0 -106
  335. package/dist/dts/Computed.d.ts.map +0 -1
  336. package/dist/dts/Filtered.d.ts +0 -97
  337. package/dist/dts/Filtered.d.ts.map +0 -1
  338. package/dist/dts/Model.d.ts +0 -200
  339. package/dist/dts/Model.d.ts.map +0 -1
  340. package/dist/dts/RefAsyncData.d.ts +0 -236
  341. package/dist/dts/RefAsyncData.d.ts.map +0 -1
  342. package/dist/dts/RefAsyncDataArray.d.ts +0 -56
  343. package/dist/dts/RefAsyncDataArray.d.ts.map +0 -1
  344. package/dist/dts/RefBoolean.d.ts +0 -47
  345. package/dist/dts/RefBoolean.d.ts.map +0 -1
  346. package/dist/dts/RefNumber.d.ts +0 -48
  347. package/dist/dts/RefNumber.d.ts.map +0 -1
  348. package/dist/dts/internal/core-ref-subject.d.ts +0 -100
  349. package/dist/dts/internal/core-ref-subject.d.ts.map +0 -1
  350. package/dist/dts/internal/core-subject.d.ts +0 -5
  351. package/dist/dts/internal/core-subject.d.ts.map +0 -1
  352. package/dist/dts/internal/deferred-ref.d.ts +0 -12
  353. package/dist/dts/internal/deferred-ref.d.ts.map +0 -1
  354. package/dist/dts/internal/effect-primitive.d.ts +0 -6
  355. package/dist/dts/internal/effect-primitive.d.ts.map +0 -1
  356. package/dist/dts/internal/fx-effect-proto.d.ts +0 -30
  357. package/dist/dts/internal/fx-effect-proto.d.ts.map +0 -1
  358. package/dist/dts/internal/fx-primitive.d.ts +0 -109
  359. package/dist/dts/internal/fx-primitive.d.ts.map +0 -1
  360. package/dist/dts/internal/fx.d.ts +0 -245
  361. package/dist/dts/internal/fx.d.ts.map +0 -1
  362. package/dist/dts/internal/matchers.d.ts +0 -33
  363. package/dist/dts/internal/matchers.d.ts.map +0 -1
  364. package/dist/dts/internal/run.d.ts +0 -8
  365. package/dist/dts/internal/run.d.ts.map +0 -1
  366. package/dist/dts/internal/schema-ref-subject.d.ts +0 -5
  367. package/dist/dts/internal/schema-ref-subject.d.ts.map +0 -1
  368. package/dist/dts/internal/versioned-transform.d.ts +0 -17
  369. package/dist/dts/internal/versioned-transform.d.ts.map +0 -1
  370. package/dist/esm/Computed.js +0 -103
  371. package/dist/esm/Computed.js.map +0 -1
  372. package/dist/esm/Filtered.js +0 -83
  373. package/dist/esm/Filtered.js.map +0 -1
  374. package/dist/esm/Model.js +0 -100
  375. package/dist/esm/Model.js.map +0 -1
  376. package/dist/esm/RefAsyncData.js +0 -163
  377. package/dist/esm/RefAsyncData.js.map +0 -1
  378. package/dist/esm/RefAsyncDataArray.js +0 -27
  379. package/dist/esm/RefAsyncDataArray.js.map +0 -1
  380. package/dist/esm/RefBoolean.js +0 -31
  381. package/dist/esm/RefBoolean.js.map +0 -1
  382. package/dist/esm/RefNumber.js +0 -35
  383. package/dist/esm/RefNumber.js.map +0 -1
  384. package/dist/esm/internal/core-ref-subject.js +0 -242
  385. package/dist/esm/internal/core-ref-subject.js.map +0 -1
  386. package/dist/esm/internal/core-subject.js +0 -90
  387. package/dist/esm/internal/core-subject.js.map +0 -1
  388. package/dist/esm/internal/deferred-ref.js +0 -23
  389. package/dist/esm/internal/deferred-ref.js.map +0 -1
  390. package/dist/esm/internal/effect-primitive.js +0 -41
  391. package/dist/esm/internal/effect-primitive.js.map +0 -1
  392. package/dist/esm/internal/fx-effect-proto.js +0 -43
  393. package/dist/esm/internal/fx-effect-proto.js.map +0 -1
  394. package/dist/esm/internal/fx-primitive.js +0 -175
  395. package/dist/esm/internal/fx-primitive.js.map +0 -1
  396. package/dist/esm/internal/fx.js +0 -216
  397. package/dist/esm/internal/fx.js.map +0 -1
  398. package/dist/esm/internal/matchers.js +0 -38
  399. package/dist/esm/internal/matchers.js.map +0 -1
  400. package/dist/esm/internal/run.js +0 -32
  401. package/dist/esm/internal/run.js.map +0 -1
  402. package/dist/esm/internal/schema-ref-subject.js +0 -121
  403. package/dist/esm/internal/schema-ref-subject.js.map +0 -1
  404. package/dist/esm/internal/versioned-transform.js +0 -37
  405. package/dist/esm/internal/versioned-transform.js.map +0 -1
  406. package/src/Computed.ts +0 -289
  407. package/src/Filtered.ts +0 -274
  408. package/src/Model.ts +0 -483
  409. package/src/RefAsyncData.ts +0 -547
  410. package/src/RefAsyncDataArray.ts +0 -135
  411. package/src/RefBoolean.ts +0 -71
  412. package/src/RefNumber.ts +0 -77
  413. package/src/internal/core-ref-subject.ts +0 -528
  414. package/src/internal/core-subject.ts +0 -143
  415. package/src/internal/deferred-ref.ts +0 -26
  416. package/src/internal/effect-primitive.ts +0 -230
  417. package/src/internal/fx-effect-proto.ts +0 -56
  418. package/src/internal/fx-primitive.ts +0 -223
  419. package/src/internal/fx.ts +0 -619
  420. package/src/internal/matchers.ts +0 -83
  421. package/src/internal/run.ts +0 -51
  422. package/src/internal/schema-ref-subject.ts +0 -163
  423. package/src/internal/versioned-transform.ts +0 -48
package/src/RefBoolean.ts DELETED
@@ -1,71 +0,0 @@
1
- /**
2
- * @since 1.18.0
3
- */
4
-
5
- import type { IdentifierConstructor, IdentifierOf } from "@typed/context/Identifier"
6
- import type { Effect } from "effect"
7
- import { not } from "effect/Boolean"
8
- import { strict } from "effect/Equivalence"
9
- import type { Scope } from "effect/Scope"
10
- import type * as Fx from "./Fx.js"
11
- import * as RefSubject from "./RefSubject.js"
12
-
13
- /**
14
- * A RefSubject holding a boolean values
15
- * @since 1.18.0
16
- * @category models
17
- */
18
- export interface RefBoolean<R, E> extends RefSubject.RefSubject<R, E, boolean> {}
19
-
20
- /**
21
- * Construct a new RefArray with the given initial value.
22
- * @since 1.18.0
23
- * @category constructors
24
- */
25
- export function make<R, E>(
26
- initial: Effect.Effect<R, E, boolean>
27
- ): Effect.Effect<R | Scope, never, RefBoolean<never, E>>
28
- export function make<R, E>(
29
- initial: Fx.Fx<R, E, boolean>
30
- ): Effect.Effect<R | Scope, never, RefBoolean<never, E>>
31
-
32
- export function make<R, E>(
33
- initial: Fx.FxInput<R, E, boolean>
34
- ): Effect.Effect<R | Scope, never, RefBoolean<never, E>> {
35
- return RefSubject.make(initial, strict())
36
- }
37
-
38
- /**
39
- * Create a Tagged RefBoolean
40
- * @since 1.18.0
41
- * @category constructors
42
- */
43
- export const tagged: {
44
- <const I extends IdentifierConstructor<any>>(
45
- identifier: I
46
- ): RefSubject.RefSubject.Tagged<IdentifierOf<I>, never, boolean>
47
- <const I>(identifier: I): RefSubject.RefSubject.Tagged<IdentifierOf<I>, never, boolean>
48
- } = RefSubject.tagged<never, boolean>(strict())
49
-
50
- /**
51
- * Set the value to true
52
- * @since 1.18.0
53
- */
54
- export const asTrue: <R, E>(ref: RefBoolean<R, E>) => Effect.Effect<R, never, boolean> = <R, E>(
55
- ref: RefBoolean<R, E>
56
- ) => ref.set(true)
57
-
58
- /**
59
- * Set the value to false
60
- * @since 1.18.0
61
- */
62
- export const asFalse: <R, E>(ref: RefBoolean<R, E>) => Effect.Effect<R, never, boolean> = <R, E>(
63
- ref: RefBoolean<R, E>
64
- ) => ref.set(false)
65
-
66
- /**
67
- * Toggle the boolean value between true and false
68
- * @since 1.18.0
69
- */
70
- export const toggle: <R, E>(ref: RefBoolean<R, E>) => Effect.Effect<R, E, boolean> = <R, E>(ref: RefBoolean<R, E>) =>
71
- ref.update(not)
package/src/RefNumber.ts DELETED
@@ -1,77 +0,0 @@
1
- /**
2
- * @since 1.18.0
3
- */
4
-
5
- import type { IdentifierConstructor, IdentifierOf } from "@typed/context/Identifier"
6
- import type { Effect } from "effect"
7
- import { strict } from "effect/Equivalence"
8
- import type { Scope } from "effect/Scope"
9
- import type * as Fx from "./Fx.js"
10
- import * as RefSubject from "./RefSubject.js"
11
-
12
- const add = (x: number): number => x + 1
13
- const sub = (x: number): number => x - 1
14
-
15
- /**
16
- * A RefSubject holding a number values
17
- * @since 1.18.0
18
- * @category models
19
- */
20
- export interface RefNumber<R, E> extends RefSubject.RefSubject<R, E, number> {}
21
-
22
- /**
23
- * Construct a new RefArray with the given initial value.
24
- * @since 1.18.0
25
- * @category constructors
26
- */
27
- export function make<R, E>(
28
- initial: Effect.Effect<R, E, number>
29
- ): Effect.Effect<R | Scope, never, RefNumber<never, E>>
30
- export function make<R, E>(
31
- initial: Fx.Fx<R, E, number>
32
- ): Effect.Effect<R | Scope, never, RefNumber<never, E>>
33
-
34
- export function make<R, E>(
35
- initial: Fx.FxInput<R, E, number>
36
- ): Effect.Effect<R | Scope, never, RefNumber<never, E>> {
37
- return RefSubject.make(initial, strict())
38
- }
39
-
40
- /**
41
- * Construct a new RefArray with the given initial value.
42
- * @since 1.18.0
43
- * @category constructors
44
- */
45
- export function of(
46
- initial: number
47
- ): Effect.Effect<Scope, never, RefNumber<never, never>> {
48
- return RefSubject.of(initial, strict())
49
- }
50
-
51
- /**
52
- * Create a Tagged RefNumber
53
- * @since 1.18.0
54
- * @category constructors
55
- */
56
- export const tagged: {
57
- <const I extends IdentifierConstructor<any>>(
58
- identifier: I
59
- ): RefSubject.RefSubject.Tagged<IdentifierOf<I>, never, number>
60
- <const I>(identifier: I): RefSubject.RefSubject.Tagged<IdentifierOf<I>, never, number>
61
- } = RefSubject.tagged<never, number>(strict())
62
-
63
- /**
64
- * Set the value to true
65
- * @since 1.18.0
66
- */
67
- export const increment: <R, E>(ref: RefNumber<R, E>) => Effect.Effect<R, E, number> = <R, E>(
68
- ref: RefNumber<R, E>
69
- ) => ref.update(add)
70
-
71
- /**
72
- * Set the value to false
73
- * @since 1.18.0
74
- */
75
- export const decrement: <R, E>(ref: RefNumber<R, E>) => Effect.Effect<R, E, number> = <R, E>(
76
- ref: RefNumber<R, E>
77
- ) => ref.update(sub)
@@ -1,528 +0,0 @@
1
- import { Ref, SubscriptionRef } from "effect"
2
- import { type Cause, isInterrupted } from "effect/Cause"
3
- import * as Deferred from "effect/Deferred"
4
- import * as Effect from "effect/Effect"
5
- import { equals } from "effect/Equal"
6
- import type { Equivalence } from "effect/Equivalence"
7
- import * as Exit from "effect/Exit"
8
- import * as Fiber from "effect/Fiber"
9
- import { sum } from "effect/Number"
10
- import * as Option from "effect/Option"
11
- import { getEquivalence } from "effect/ReadonlyArray"
12
- import type * as Scope from "effect/Scope"
13
- import { Computed } from "../Computed.js"
14
- import { Filtered } from "../Filtered.js"
15
- import type { Fx, FxInput } from "../Fx.js"
16
- import { type RefSubject } from "../RefSubject.js"
17
- import { Sink, WithContext } from "../Sink.js"
18
- import type * as Subject from "../Subject.js"
19
- import { ComputedTypeId, RefSubjectTypeId } from "../TypeId.js"
20
- import { transformFx } from "../Versioned.js"
21
- import { makeHoldSubject } from "./core-subject.js"
22
- import * as core from "./core.js"
23
- import { DeferredRef } from "./deferred-ref.js"
24
- import { fromFxEffect } from "./fx.js"
25
- import { matchFxInput } from "./matchers.js"
26
- import { FxEffectBase } from "./protos.js"
27
- import { run } from "./run.js"
28
- import { share } from "./share.js"
29
-
30
- export class RefSubjectImpl<R, E, A> extends FxEffectBase<R, E, A, R, E, A> implements RefSubject<R, E, A> {
31
- readonly [RefSubjectTypeId]: RefSubjectTypeId = RefSubjectTypeId
32
- readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
33
-
34
- private _version = 0
35
- private _lock: <R, E, A>(self: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>
36
-
37
- constructor(
38
- readonly initial: Effect.Effect<R, E, A>,
39
- readonly eq: Equivalence<A>,
40
- readonly ref: Ref.Ref<Option.Option<Fiber.Fiber<E, A>>>,
41
- readonly semaphore: Effect.Semaphore,
42
- readonly subject: Subject.Subject<R, E, A>
43
- ) {
44
- super()
45
-
46
- this.onSuccess = this.onSuccess.bind(this)
47
- this.onFailure = this.onFailure.bind(this)
48
-
49
- this._lock = semaphore.withPermits(1)
50
- this.subscriberCount = subject.subscriberCount
51
- }
52
-
53
- static make<R, E, A>(
54
- initial: Effect.Effect<R, E, A>,
55
- eq: Equivalence<A>,
56
- ref: Ref.Ref<Option.Option<Fiber.Fiber<E, A>>>,
57
- subject: Subject.Subject<R, E, A>,
58
- semaphore: Effect.Semaphore = Effect.unsafeMakeSemaphore(1)
59
- ): RefSubject<R, E, A> {
60
- return new RefSubjectImpl(initial, eq, ref, semaphore, subject) as any
61
- }
62
-
63
- onSuccess(a: A): Effect.Effect<R, never, unknown> {
64
- return this.set(a)
65
- }
66
-
67
- onFailure(cause: Cause<E>): Effect.Effect<R, never, unknown> {
68
- return Effect.tap(
69
- Ref.set(this.ref, Option.some(Fiber.failCause(cause))),
70
- () => this.subject.onFailure(cause)
71
- )
72
- }
73
-
74
- readonly version = Effect.sync((): number => this._version)
75
-
76
- readonly subscriberCount: Effect.Effect<R, never, number>
77
-
78
- readonly interrupt = Effect.suspend(() =>
79
- Effect.all([
80
- this.subject.interrupt,
81
- Ref.getAndSet(this.ref, Option.none()).pipe(
82
- Effect.flatten,
83
- Effect.flatMap(Fiber.interrupt),
84
- Effect.optionFromOptional
85
- )
86
- ])
87
- )
88
-
89
- toFx(): Fx<R, E, A> {
90
- return fromFxEffect(
91
- Effect.as(
92
- Ref.get(this.ref).pipe(Effect.flatMap((fiber) => Effect.asSome(this.getOrInitialize(fiber)))),
93
- this.subject
94
- )
95
- )
96
- }
97
-
98
- toEffect() {
99
- return this.get
100
- }
101
-
102
- readonly get: RefSubject<R, E, A>["get"] = Effect.suspend(() =>
103
- Effect.fromFiberEffect(
104
- Effect.flatMap(Ref.get(this.ref), (fiber) => this.getOrInitialize(fiber))
105
- )
106
- )
107
-
108
- readonly modifyEffect: RefSubject<R, E, A>["modifyEffect"] = (f) =>
109
- this._lock(
110
- this.get.pipe(
111
- Effect.flatMap((a) =>
112
- f(a).pipe(
113
- Effect.tap(([, a2]) =>
114
- Effect.if(this.eq(a, a2), {
115
- onTrue: this.setValue(a2),
116
- onFalse: Effect.zipRight(this.setValue(a2), this.emitValue(a2))
117
- })
118
- ),
119
- Effect.map(([b]) => b)
120
- )
121
- )
122
- )
123
- )
124
-
125
- readonly runUpdate: RefSubject<R, E, A>["runUpdate"] = (updates, onInterrupt) =>
126
- Effect.uninterruptibleMask((restore) =>
127
- Effect.flatMap(this.get, (initial) =>
128
- updates(this.get, this.setUnlocked).pipe(
129
- this._lock,
130
- restore,
131
- Effect.tapErrorCause(
132
- (cause) =>
133
- isInterrupted(cause)
134
- ? onInterrupt ?
135
- Effect.flatMap(Effect.flatMap(this.get, onInterrupt), this.setUnlocked) :
136
- this.setUnlocked(initial) :
137
- Effect.unit
138
- )
139
- ))
140
- )
141
-
142
- private setUnlocked = (a: A) =>
143
- this.get.pipe(
144
- Effect.matchCauseEffect({
145
- onFailure: () => Effect.zipLeft(this.setValue(a), this.emitValue(a)),
146
- onSuccess: (current) =>
147
- this.eq(current, a) ? this.setValue(a) : Effect.zipLeft(this.setValue(a), this.emitValue(a))
148
- })
149
- )
150
-
151
- readonly set = (a: A) =>
152
- Effect.catchAllCause(
153
- this.update(() => a),
154
- () => this._lock(Effect.tap(this.setValue(a), () => this.emitValue(a)))
155
- )
156
-
157
- readonly updateEffect = <R2, E2>(f: (a: A) => Effect.Effect<R2, E2, A>) =>
158
- this.modifyEffect((a) => f(a).pipe(Effect.map((a2) => [a2, a2] as const)))
159
-
160
- readonly modify = <B>(f: (a: A) => readonly [B, A]) => this.modifyEffect((a) => Effect.sync(() => f(a)))
161
-
162
- readonly update = (f: (a: A) => A) =>
163
- this.modify((a) => {
164
- const a2 = f(a)
165
-
166
- return [a2, a2]
167
- })
168
-
169
- readonly delete: Effect.Effect<R, never, Option.Option<A>> = this.modifyRef((fiber) => {
170
- // eslint-disable-next-line @typescript-eslint/no-this-alias
171
- const that = this
172
-
173
- return Effect.gen(function*(_) {
174
- const refCount = yield* _(that.subscriberCount)
175
- const currentValue = yield* _(that.getCurrentValue(fiber))
176
-
177
- that._version = 0
178
-
179
- if (refCount === 0) {
180
- return [currentValue, Option.none()] as const
181
- }
182
-
183
- // If we have active subscribers, we should re-initialize the ref
184
- return [currentValue, yield* _(Effect.asSome(that.initialize()))] as const
185
- }).pipe(
186
- Effect.catchAllCause((cause) => Effect.succeed([Option.none<A>(), Option.some(Fiber.failCause(cause))] as const))
187
- )
188
- })
189
-
190
- mapEffect: <R2, E2, B>(f: (a: A) => Effect.Effect<R2, E2, B>) => Computed<R | R2, E | E2, B> = (f) =>
191
- Computed(this, f)
192
-
193
- map: <B>(f: (a: A) => B) => Computed<R, E, B> = (f) => this.mapEffect((a) => Effect.sync(() => f(a)))
194
-
195
- filterMapEffect: <R2, E2, B>(f: (a: A) => Effect.Effect<R2, E2, Option.Option<B>>) => Filtered<R | R2, E | E2, B> = (
196
- f
197
- ) => Filtered(this, f)
198
-
199
- filterMap: <B>(f: (a: A) => Option.Option<B>) => Filtered<R, E, B> = (f) =>
200
- this.filterMapEffect((a) => Effect.sync(() => f(a)))
201
-
202
- filterEffect: <R2, E2>(
203
- f: (a: A) => Effect.Effect<R2, E2, boolean>
204
- ) => Filtered<R | R2, E | E2, A> = (f) =>
205
- this.filterMapEffect((a) => Effect.map(f(a), (b) => (b ? Option.some(a) : Option.none())))
206
-
207
- filter = (f: (a: A) => boolean) => this.filterMap(Option.liftPredicate(f))
208
-
209
- skipRepeats: (eq?: Equivalence<A> | undefined) => Computed<R, E, A> = (eq = equals) =>
210
- Computed<R, E, A, never, never, A>(
211
- transformFx<R, never, R, E, A, R, E, A, R, E, A>(
212
- this,
213
- core.skipRepeatsWith(eq)
214
- ),
215
- Effect.succeed
216
- )
217
-
218
- private getCurrentValue = (fiber: Option.Option<Fiber.Fiber<E, A>>) => {
219
- return Option.match(fiber, {
220
- onNone: () => Effect.succeedNone,
221
- onSome: (f) => Effect.asSome(Fiber.join(f))
222
- })
223
- }
224
-
225
- private getOrInitialize(fiber: Option.Option<Fiber.Fiber<E, A>>) {
226
- return Option.match(fiber, {
227
- onNone: () => this.initialize(),
228
- onSome: Effect.succeed
229
- })
230
- }
231
-
232
- private setValue(a: A) {
233
- return Effect.as(Ref.set(this.ref, Option.some(Fiber.succeed(a))), a)
234
- }
235
-
236
- private emitValue(a: A) {
237
- return Effect.suspend(() => {
238
- this._version++
239
-
240
- return this.subject.onSuccess(a)
241
- })
242
- }
243
-
244
- private initialize(): Effect.Effect<R, never, Fiber.Fiber<E, A>> {
245
- return this.initial.pipe(
246
- Effect.tap((a) => this.emitValue(a)),
247
- Effect.tapErrorCause((cause) => this.subject.onFailure(cause)),
248
- Effect.forkDaemon,
249
- Effect.tap((fiber) => Ref.set(this.ref, Option.some(fiber)))
250
- )
251
- }
252
-
253
- private modifyRef<R2, E2, B>(
254
- f: (
255
- fiber: Option.Option<Fiber.Fiber<E, A>>
256
- ) => Effect.Effect<R2, E2, readonly [B, Option.Option<Fiber.Fiber<E, A>>]>
257
- ) {
258
- return Effect.suspend(() =>
259
- this._lock(
260
- Ref.get(this.ref).pipe(
261
- Effect.flatMap((fiber) =>
262
- f(fiber).pipe(Effect.flatMap(([b, a2]) => Ref.set(this.ref, a2).pipe(Effect.as(b))))
263
- )
264
- )
265
- )
266
- )
267
- }
268
- }
269
-
270
- /**
271
- * Construct a RefSubject from any Fx value.
272
-
273
- /**
274
- * Construct a RefSubject with a lazily initialized value.
275
- * @since 1.18.0
276
- * @category constructors
277
- */
278
- export function fromEffect<R, E, A>(
279
- initial: Effect.Effect<R, E, A>,
280
- eq?: Equivalence<A>
281
- ): Effect.Effect<R | Scope.Scope, never, RefSubject<never, E, A>> {
282
- return Effect.contextWithEffect((ctx) =>
283
- Effect.suspend(() => {
284
- const ref = unsafeMake(Effect.provide(initial, ctx), makeHoldSubject<E, A>(), eq)
285
-
286
- return Effect.as(Effect.addFinalizer(() => ref.interrupt), ref)
287
- })
288
- )
289
- }
290
-
291
- /**
292
- * Construct a RefSubject from a synchronous value.
293
- * @since 1.18.0
294
- * @category constructors
295
- */
296
- export function of<A, E = never>(
297
- initial: A,
298
- eq?: Equivalence<A>
299
- ): Effect.Effect<Scope.Scope, never, RefSubject<never, E, A>> {
300
- return fromEffect<never, E, A>(Effect.succeed(initial), eq)
301
- }
302
-
303
- /**
304
- * @since 1.18.0
305
- * @category constructors
306
- */
307
- export function make<A, E = never>(
308
- iterable: Iterable<A>,
309
- eq?: Equivalence<A>
310
- ): Effect.Effect<Scope.Scope, never, RefSubject<never, E, ReadonlyArray<A>>>
311
- export function make<R, E, A>(
312
- refSubject: RefSubject<R, E, A>,
313
- eq?: Equivalence<A>
314
- ): Effect.Effect<R | Scope.Scope, never, RefSubject.Derived<R, never, E, A>>
315
- export function make<R, E, A>(
316
- effect: Effect.Effect<R, E, A>,
317
- eq?: Equivalence<A>
318
- ): Effect.Effect<R | Scope.Scope, never, RefSubject<never, E, A>>
319
- export function make<R, E, A>(
320
- fx: FxInput<R, E, A>,
321
- eq?: Equivalence<A>
322
- ): Effect.Effect<R | Scope.Scope, never, RefSubject<never, E, A>>
323
-
324
- export function make<R, E, A>(
325
- fx: FxInput<R, E, A>,
326
- eq?: Equivalence<A>
327
- ): Effect.Effect<R | Scope.Scope, never, RefSubject<never, E, any>> {
328
- return matchFxInput(fx, {
329
- RefSubject: (ref) => derivedRefSubject(ref, eq),
330
- Fx: (fx) => fxAsRef(fx, eq),
331
- Effect: (effect) => fromEffect(effect, eq),
332
- Cause: (cause) => fromEffect(Effect.failCause(cause), eq),
333
- Iterable: (iterable) => fromEffect<R, E, any>(Effect.succeed(Array.from(iterable)), getEquivalence(eq || equals)),
334
- Otherwise: (value) => of(value, eq)
335
- })
336
- }
337
-
338
- const fxAsRef = <R, E, A>(
339
- fx: Fx<R, E, A>,
340
- eq?: Equivalence<A>
341
- ): Effect.Effect<R | Scope.Scope, never, RefSubject<never, E, A>> =>
342
- Effect.gen(function*($) {
343
- const deferred = new DeferredRef<E, A>(yield* $(Deferred.make<E, A>()))
344
- const ref = yield* $(fromEffect<never, E, A>(deferred, eq))
345
-
346
- const done = (exit: Exit.Exit<E, A>) =>
347
- Effect.flatMap(deferred.done(exit), (closed) => closed ? Effect.unit : Exit.match(exit, ref))
348
-
349
- yield* $(Effect.forkScoped(run(
350
- fx,
351
- Sink(
352
- (e) => done(Exit.failCause(e)),
353
- (a) => done(Exit.succeed(a))
354
- )
355
- )))
356
-
357
- yield* $(Effect.addFinalizer(() => ref.interrupt))
358
-
359
- return ref
360
- })
361
-
362
- const derivedRefSubject = <R, E, A>(
363
- source: RefSubject<R, E, A>,
364
- eq?: Equivalence<A>
365
- ): Effect.Effect<R | Scope.Scope, never, RefSubject.Derived<R, never, E, A>> =>
366
- Effect.gen(function*($) {
367
- const deferred = new DeferredRef<E, A>(yield* $(Deferred.make<E, A>()))
368
- const ref = yield* $(fromEffect<never, E, A>(deferred, eq))
369
-
370
- const done = (exit: Exit.Exit<E, A>) =>
371
- Effect.flatMap(deferred.done(exit), (closed) => closed ? Effect.unit : Exit.match(exit, ref))
372
-
373
- yield* $(Effect.forkScoped(run(
374
- source,
375
- Sink(
376
- (e) => done(Exit.failCause(e)),
377
- (a) => done(Exit.succeed(a))
378
- )
379
- )))
380
-
381
- yield* $(Effect.addFinalizer(() => ref.interrupt))
382
-
383
- const derived: RefSubject.Derived<R, never, E, A> = Object.assign(ref, {
384
- persist: Effect.matchCauseEffect(ref, source)
385
- })
386
-
387
- return derived
388
- })
389
-
390
- /**
391
- * @since 1.18.0
392
- * @category constructors
393
- */
394
- export function makeWithExtension<R, E, A, B>(
395
- effect: Effect.Effect<R, E, A>,
396
- f: (ref: RefSubject<never, E, A>) => B,
397
- eq?: Equivalence<A>
398
- ): Effect.Effect<R, never, RefSubject<never, E, A> & B>
399
- export function makeWithExtension<R, E, A, B>(
400
- fx: FxInput<R, E, A>,
401
- f: (ref: RefSubject<never, E, A>) => B,
402
- eq?: Equivalence<A>
403
- ): Effect.Effect<R | Scope.Scope, never, RefSubject<never, E, A> & B>
404
-
405
- export function makeWithExtension<R, E, A, B>(
406
- fx: FxInput<R, E, A>,
407
- f: (ref: RefSubject<never, E, A>) => B,
408
- eq?: Equivalence<A>
409
- ): Effect.Effect<R | Scope.Scope, never, RefSubject<never, E, any> & B> {
410
- return Effect.map(make(fx, eq), (ref) => Object.assign(ref, f(ref)))
411
- }
412
-
413
- /**
414
- * Construct a RefSubject with an initial value and the specified subject.
415
- * @since 1.18.0
416
- * @category constructors
417
- */
418
- export function unsafeMake<R, E, A>(
419
- initial: Effect.Effect<R, E, A>,
420
- subject: Subject.Subject<R, E, A>,
421
- eq: Equivalence<A> = equals
422
- ): RefSubject<R, E, A> {
423
- return RefSubjectImpl.make(
424
- initial,
425
- eq,
426
- Ref.unsafeMake<Option.Option<Fiber.Fiber<E, A>>>(Option.none()),
427
- subject
428
- )
429
- }
430
-
431
- const UNBOUNDED = { concurrency: "unbounded" } as const
432
-
433
- export function tuple<const REFS extends ReadonlyArray<RefSubject.Any>>(...refs: REFS): RefSubject<
434
- RefSubject.Context<REFS[number]>,
435
- RefSubject.Error<REFS[number]>,
436
- { readonly [K in keyof REFS]: RefSubject.Success<REFS[K]> }
437
- > {
438
- type _R = RefSubject.Context<REFS[number]>
439
- type _E = RefSubject.Error<REFS[number]>
440
- type _A = { readonly [K in keyof REFS]: RefSubject.Success<REFS[K]> }
441
-
442
- const effect = Effect.all(refs, UNBOUNDED) as Effect.Effect<
443
- _R,
444
- _E,
445
- _A
446
- >
447
-
448
- const fx = core.combine(refs) as Fx<_R, _E, _A>
449
- const sink: WithContext<_R, _E, _A> = WithContext(
450
- (cause) => Effect.all(refs.map((ref) => ref.onFailure(cause as any))),
451
- (values) => Effect.all(refs.map((ref, i) => ref.onSuccess(values[i])))
452
- )
453
-
454
- return unsafeMake(
455
- effect,
456
- {
457
- ...fx,
458
- ...sink,
459
- subscriberCount: Effect.map(
460
- Effect.all(refs.map((ref) => ref.subscriberCount)),
461
- (counts) => counts.reduce((a, b) => a + b, 0)
462
- ),
463
- interrupt: Effect.all(refs.map((ref) => ref.interrupt))
464
- }
465
- )
466
- }
467
-
468
- export function struct<const REFS extends Readonly<Record<PropertyKey, RefSubject.Any>>>(
469
- refs: REFS
470
- ): RefSubject<
471
- RefSubject.Context<REFS[string]>,
472
- RefSubject.Error<REFS[string]>,
473
- { readonly [K in keyof REFS]: RefSubject.Success<REFS[K]> }
474
- > {
475
- type _R = RefSubject.Context<REFS[string]>
476
- type _E = RefSubject.Error<REFS[string]>
477
- type _A = { readonly [K in keyof REFS]: RefSubject.Success<REFS[K]> }
478
-
479
- const effect = Effect.all(refs, UNBOUNDED) as Effect.Effect<
480
- _R,
481
- _E,
482
- _A
483
- >
484
-
485
- const fx = core.struct(refs) as Fx<_R, _E, _A>
486
- const entries = Object.entries(refs)
487
- const values = Object.values(refs)
488
- const sink: WithContext<_R, _E, _A> = WithContext(
489
- (cause) => Effect.all(values.map((ref) => ref.onFailure(cause as any))),
490
- (values) => Effect.all(entries.map(([k, ref]) => ref.onSuccess(values[k])))
491
- )
492
-
493
- return unsafeMake(
494
- effect,
495
- {
496
- ...fx,
497
- ...sink,
498
- subscriberCount: Effect.map(
499
- Effect.all(values.map((ref) => ref.subscriberCount)),
500
- (counts) => counts.reduce(sum, 0)
501
- ),
502
- interrupt: Effect.all(values.map((ref) => ref.interrupt))
503
- }
504
- )
505
- }
506
-
507
- export function fromSubscriptionRef<A>(
508
- subscriptionRef: SubscriptionRef.SubscriptionRef<A>
509
- ): Effect.Effect<Scope.Scope, never, RefSubject.Derived<never, never, never, A>> {
510
- return Effect.suspend(() => {
511
- const effect = SubscriptionRef.get(subscriptionRef)
512
- const subject = makeHoldSubject<never, A>()
513
- const fx = share(core.fromStream(subscriptionRef.changes), subject)
514
- const ref: RefSubject<never, never, A> = unsafeMake(effect, {
515
- ...fx,
516
- onSuccess: subject.onSuccess,
517
- onFailure: subject.onFailure,
518
- subscriberCount: subject.subscriberCount,
519
- interrupt: subject.interrupt
520
- })
521
-
522
- const derived: RefSubject.Derived<never, never, never, A> = Object.assign(ref, {
523
- persist: ref.updateEffect((value) => SubscriptionRef.setAndGet(subscriptionRef, value))
524
- })
525
-
526
- return Effect.as(Effect.addFinalizer(() => ref.interrupt), derived)
527
- })
528
- }