@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/Versioned.ts CHANGED
@@ -1,147 +1,162 @@
1
1
  /**
2
- * This module provides a data type which is both an Fx and an Effect. This is a more advanced types, and is the basis
3
- * for creating Computed + Filtered types from a RefSubject which is the canonical implementation of
4
- * an at type which is both Fx + Effect.
5
- * @since 1.18.0
2
+ * Versioned is a special Fx which is also an Effect, and keeps track of a version number of the
3
+ * current value it holds. The Fx portion is used to subscribe to changes, the Effect portion to
4
+ * sample the current value. The version can be utilized to avoid computing work related to this value.
5
+ * @since 1.0.0
6
6
  */
7
7
 
8
- import type { Context, Layer, Runtime } from "effect"
9
- import { Effect, identity } from "effect"
10
- import { dual } from "effect/Function"
8
+ import type * as Context from "@typed/context"
9
+ import type { Layer, Runtime, Scope } from "effect"
10
+ import * as Effect from "effect/Effect"
11
+ import { dual, flow } from "effect/Function"
11
12
  import { sum } from "effect/Number"
12
- import type * as Fx from "./Fx.js"
13
+ import * as Option from "effect/Option"
14
+ import type { Fx } from "./Fx.js"
13
15
  import * as core from "./internal/core.js"
14
- import * as fxEffectProto from "./internal/fx-effect-proto.js"
15
- import { VersionedTransform } from "./internal/versioned-transform.js"
16
+ import { MulticastEffect } from "./internal/helpers.js"
17
+ import { FxEffectBase } from "./internal/protos.js"
18
+ import * as coreShare from "./internal/share.js"
19
+ import type { Sink } from "./Sink.js"
20
+
21
+ // TODO: dualize
22
+ // TODO: context abstraction
23
+ // TODO: More operators
16
24
 
17
25
  /**
18
- * A data type which is both an Fx and an Effect. This is a more advanced type, and is the basis
19
- * for creating Computed + Filtered types from a RefSubject which is the canonical implementation of
20
- * an at type which is both an Fx and an Effect.
21
- *
22
- * The Fx portion naturally has representations for dealing with keeping things up-to-date and
23
- * avoiding doing any work that is not necessary. The Effect, or "pull", portion utilizes the
24
- * version to determine if the current value is up to date. If it is not, then the Fx portion
25
- * will be run to update the value. This allows for derived types to cache values locally and
26
- * avoid doing any work if the value is up to date.
27
- * @since 1.18.0
28
- * @category models
26
+ * @since 1.0.0
29
27
  */
30
- export interface Versioned<R0, E0, R, E, A, R2, E2, B> extends Fx.Fx<R, E, A>, Effect.Effect<R2, E2, B> {
31
- /**
32
- * The current version of this FxEffect. This is used to determine if the current value
33
- * is up to date to allow localized caching of value.
34
- */
35
- readonly version: Effect.Effect<R0, E0, number>
28
+ export interface Versioned<R1, E1, R2, E2, A2, R3, E3, A3> extends Fx<R2, E2, A2>, Effect.Effect<R3, E3, A3> {
29
+ readonly version: Effect.Effect<R1, E1, number>
36
30
  }
37
31
 
38
32
  /**
39
- * @since 1.18.0
33
+ * @since 1.0.0
40
34
  */
41
35
  export namespace Versioned {
42
36
  /**
43
- * @since 1.18.0
37
+ * @category models
38
+ * @since 1.0.0
39
+ */
40
+ export type Unify<T> = T extends
41
+ Versioned<infer R1, infer E1, infer R2, infer E2, infer A2, infer R3, infer E3, infer A3> | infer _
42
+ ? Versioned<R1, E1, R2, E2, A2, R3, E3, A3>
43
+ : never
44
+
45
+ /**
46
+ * @since 1.0.0
44
47
  */
45
- export type VersionContext<T> = T extends
46
- Versioned<infer R0, infer _E0, infer _R, infer _E, infer _A, infer _R2, infer _E2, infer _B> ? R0 : never
48
+ export type VersionContext<T> = T extends Versioned<infer R, any, any, any, any, any, any, any> ? R : never
47
49
 
48
50
  /**
49
- * @since 1.18.0
51
+ * @since 1.0.0
50
52
  */
51
- export type VersionError<T> = T extends
52
- Versioned<infer _R0, infer E0, infer _R, infer _E, infer _A, infer _R2, infer _E2, infer _B> ? E0 : never
53
+ export type VersionError<T> = T extends Versioned<any, infer E, any, any, any, any, any, any> ? E : never
53
54
  }
54
55
 
55
56
  /**
56
- * Construct a Versioned type.
57
- * @since 1.18.0
58
- * @category constructors
57
+ * @since 1.0.0
59
58
  */
60
- export const make: <R0, E0, R, E, A, R2, E2, B>(
61
- { effect, fx, version }: {
62
- version: Effect.Effect<R0, E0, number>
63
- fx: Fx.Fx<R, E, A>
64
- effect: Effect.Effect<R2, E2, B>
59
+ export function make<R1, E1, R2, E2, A2, R3, E3, A3>(
60
+ version: Effect.Effect<R1, E1, number>,
61
+ fx: Fx<R2, E2, A2>,
62
+ effect: Effect.Effect<R3, E3, A3>
63
+ ): Versioned<R1, E1, R2, E2, A2, R3, E3, A3> {
64
+ return new VersionedImpl(version, fx, effect)
65
+ }
66
+
67
+ class VersionedImpl<R1, E1, R2, E2, A2, R3, E3, A3> extends FxEffectBase<R2, E2, A2, R3, E3, A3>
68
+ implements Versioned<R1, E1, R2, E2, A2, R3, E3, A3>
69
+ {
70
+ constructor(
71
+ readonly version: Effect.Effect<R1, E1, number>,
72
+ readonly fx: Fx<R2, E2, A2>,
73
+ readonly effect: Effect.Effect<R3, E3, A3>
74
+ ) {
75
+ super()
65
76
  }
66
- ) => Versioned<R0, E0, R, E, A, R2, E2, B> = fxEffectProto.makeVersioned
67
77
 
68
- /**
69
- * Construct a Versioned type from a static value.
70
- * @since 1.18.0
71
- * @category constructors
72
- */
73
- export const of: <A>(value: A) => Versioned<never, never, never, never, A, never, never, A> = fxEffectProto.versionedOf
78
+ run<R3>(sink: Sink<R3, E2, A2>): Effect.Effect<R2 | R3, never, unknown> {
79
+ return this.fx.run(sink)
80
+ }
81
+
82
+ toEffect(): Effect.Effect<R3, E3, A3> {
83
+ return this.effect
84
+ }
85
+ }
74
86
 
75
87
  /**
76
- * Transform a Versioned as an Fx and as an Effect separately.
77
- * @since 1.18.0
78
- * @category combinators
88
+ * @since 1.0.0
79
89
  */
80
- export const transform: {
81
- <R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>(
82
- transformFx: (fx: Fx.Fx<R, E, A>) => Fx.Fx<R3, E3, C>,
83
- transformGet: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R4, E4, D>
84
- ): <R0, E0>(
85
- versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
86
- ) => Versioned<never, never, R3, E3, C, R0 | R4, E0 | E4, D>
87
- <R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>(
88
- versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
89
- transformFx: (fx: Fx.Fx<R, E, A>) => Fx.Fx<R3, E3, C>,
90
- transformGet: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R4, E4, D>
91
- ): Versioned<never, never, R3, E3, C, R0 | R4, E0 | E4, D>
92
- } = dual(3, function transform<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>(
93
- versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
94
- transformFx: (fx: Fx.Fx<R, E, A>) => Fx.Fx<R3, E3, C>,
90
+ export function transform<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>(
91
+ input: Versioned<R0, E0, R, E, A, R2, E2, B>,
92
+ transformFx: (fx: Fx<R, E, A>) => Fx<R3, E3, C>,
95
93
  transformGet: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R4, E4, D>
96
94
  ): Versioned<never, never, R3, E3, C, R0 | R4, E0 | E4, D> {
97
- return new VersionedTransform(versioned, transformFx, transformGet)
98
- })
95
+ if (isVersionedTransform(input)) {
96
+ return new VersionedTransform(
97
+ input.input,
98
+ flow(input._transformFx, transformFx),
99
+ flow(input._transformEffect, transformGet)
100
+ )
101
+ } else {
102
+ return new VersionedTransform(input, transformFx, transformGet)
103
+ }
104
+ }
99
105
 
100
106
  /**
101
- * Transform a Versioned as an Fx separately from its Effect interface.
102
- * @since 1.18.0
103
- * @category combinators
107
+ * @internal
104
108
  */
105
- export const transformFx: {
106
- <R, E, A, R3, E3, C>(
107
- f: (fx: Fx.Fx<R, E, A>) => Fx.Fx<R3, E3, C>
108
- ): <R0, E0, R2, E2, B>(
109
- versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
110
- ) => Versioned<never, never, R3, E3, C, R0 | R2, E0 | E2, B>
109
+ export class VersionedTransform<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>
110
+ extends FxEffectBase<R3, E3, C, R0 | R4, E0 | E4, D>
111
+ implements Versioned<never, never, R3, E3, C, R0 | R4, E0 | E4, D>
112
+ {
113
+ protected _version = -1
114
+ protected _currentValue: Option.Option<D> = Option.none()
115
+ private _fx: Fx<R3, E3, C>
111
116
 
112
- <R0, E0, R, E, A, R2, E2, B, R3, E3, C>(
113
- versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
114
- f: (fx: Fx.Fx<R, E, A>) => Fx.Fx<R3, E3, C>
115
- ): Versioned<never, never, R3, E3, C, R0 | R2, E0 | E2, B>
116
- } = dual(2, function transformFx<R0, E0, R, E, A, R2, E2, B, R3, E3, C>(
117
- versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
118
- f: (fx: Fx.Fx<R, E, A>) => Fx.Fx<R3, E3, C>
119
- ): Versioned<never, never, R3, E3, C, R0 | R2, E0 | E2, B> {
120
- return transform(versioned, f, identity)
121
- })
117
+ constructor(
118
+ readonly input: Versioned<R0, E0, R, E, A, R2, E2, B>,
119
+ readonly _transformFx: (fx: Fx<R, E, A>) => Fx<R3, E3, C>,
120
+ readonly _transformEffect: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R4, E4, D>
121
+ ) {
122
+ super()
122
123
 
123
- /**
124
- * Transform a Versioned as an Effect separately from its Fx interface.
125
- * @since 1.18.0
126
- * @category combinators
127
- */
128
- export const transformEffect: {
129
- <R2, E2, B, R3, E3, C>(
130
- f: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R3, E3, C>
131
- ): <R0, E0, R, E, A>(
132
- versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
133
- ) => Versioned<never, never, R, E, A, R0 | R3, E0 | E3, C>
124
+ this._fx = _transformFx(this.input)
125
+ }
134
126
 
135
- <R0, E0, R, E, A, R2, E2, B, R3, E3, C>(
136
- versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
137
- f: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R3, E3, C>
138
- ): Versioned<never, never, R, E, A, R0 | R3, E0 | E3, C>
139
- } = dual(2, function transformEffect<R0, E0, R, E, A, R2, E2, B, R3, E3, C>(
140
- versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
141
- f: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R3, E3, C>
142
- ): Versioned<never, never, R, E, A, R0 | R3, E0 | E3, C> {
143
- return transform(versioned, identity, f)
144
- })
127
+ readonly version = Effect.sync(() => this._version)
128
+
129
+ run<R5>(sink: Sink<R5, E3, C>): Effect.Effect<R3 | R5, never, unknown> {
130
+ return this._fx.run(sink)
131
+ }
132
+
133
+ toEffect(): Effect.Effect<R0 | R4, E0 | E4, D> {
134
+ const transformed = this._transformEffect(this.input as any as Effect.Effect<R2, E2, B>)
135
+ const update = (v: number) =>
136
+ Effect.tap(
137
+ transformed,
138
+ (value) =>
139
+ Effect.sync(() => {
140
+ this._currentValue = Option.some(value)
141
+ this._version = v
142
+ })
143
+ )
144
+
145
+ return new MulticastEffect(Effect.flatMap(this.input.version, (version) => {
146
+ if (version === this._version && Option.isSome(this._currentValue)) {
147
+ return Effect.succeed(this._currentValue.value)
148
+ }
149
+
150
+ return update(version)
151
+ }))
152
+ }
153
+ }
154
+
155
+ function isVersionedTransform(
156
+ u: unknown
157
+ ): u is VersionedTransform<any, any, any, any, any, any, any, any, any, any, any, any, any, any> {
158
+ return u instanceof VersionedTransform
159
+ }
145
160
 
146
161
  /**
147
162
  * Transform a Versioned's output value as both an Fx and Effect.
@@ -172,7 +187,7 @@ export const map: {
172
187
  onEffect: (b: B) => D
173
188
  }
174
189
  ): Versioned<never, never, R, E, C, R0 | R2, E0 | E2, D> {
175
- return transform(versioned, core.map(options.onFx), Effect.map(options.onEffect))
190
+ return transform(versioned, (fx) => core.map(fx, options.onFx), Effect.map(options.onEffect))
176
191
  })
177
192
 
178
193
  /**
@@ -198,29 +213,29 @@ export const mapEffect: {
198
213
  onEffect: (b: B) => Effect.Effect<R4, E4, D>
199
214
  }
200
215
  ): Versioned<never, never, R | R3, E | E3, C, R0 | R2 | R4, E0 | E2 | E4, D> {
201
- return transform(versioned, core.mapEffect(options.onFx), Effect.flatMap(options.onEffect))
216
+ return transform(versioned, (fx) => core.mapEffect(fx, options.onFx), Effect.flatMap(options.onEffect))
202
217
  })
203
218
 
204
219
  /**
205
220
  * @since 1.0.0
206
221
  */
207
- export function combine<const VS extends ReadonlyArray<Versioned<any, any, any, any, any, any, any, any>>>(
222
+ export function tuple<const VS extends ReadonlyArray<Versioned<any, any, any, any, any, any, any, any>>>(
208
223
  versioneds: VS
209
224
  ): Versioned<
210
225
  Versioned.VersionContext<VS[number]>,
211
226
  Versioned.VersionError<VS[number]>,
212
- Fx.Fx.Context<VS[number]>,
213
- Fx.Fx.Error<VS[number]>,
214
- { readonly [K in keyof VS]: Fx.Fx.Success<VS[K]> },
227
+ Fx.Context<VS[number]>,
228
+ Fx.Error<VS[number]>,
229
+ { readonly [K in keyof VS]: Fx.Success<VS[K]> },
215
230
  Effect.Effect.Context<VS[number]>,
216
231
  Effect.Effect.Error<VS[number]>,
217
232
  { readonly [K in keyof VS]: Effect.Effect.Success<VS[K]> }
218
233
  > {
219
- return make({
220
- fx: core.combine(versioneds),
221
- effect: Effect.all(versioneds, { concurrency: "unbounded" }) as any,
222
- version: Effect.map(Effect.all(versioneds.map((v) => v.version)), (versions) => versions.reduce(sum, 0))
223
- })
234
+ return make(
235
+ Effect.map(Effect.all(versioneds.map((v) => v.version)), (versions) => versions.reduce(sum, 0)),
236
+ core.tuple(versioneds),
237
+ Effect.all(versioneds, { concurrency: "unbounded" }) as any
238
+ )
224
239
  }
225
240
 
226
241
  /**
@@ -231,17 +246,20 @@ export function struct<const VS extends Readonly<Record<string, Versioned<any, a
231
246
  ): Versioned<
232
247
  Versioned.VersionContext<VS[keyof VS]>,
233
248
  Versioned.VersionError<VS[keyof VS]>,
234
- Fx.Fx.Context<VS[keyof VS]>,
235
- Fx.Fx.Error<VS[keyof VS]>,
236
- { readonly [K in keyof VS]: Fx.Fx.Success<VS[K]> },
249
+ Fx.Context<VS[keyof VS]>,
250
+ Fx.Error<VS[keyof VS]>,
251
+ { readonly [K in keyof VS]: Fx.Success<VS[K]> },
237
252
  Effect.Effect.Context<VS[keyof VS]>,
238
253
  Effect.Effect.Error<VS[keyof VS]>,
239
254
  { readonly [K in keyof VS]: Effect.Effect.Success<VS[K]> }
240
255
  > {
241
256
  return map(
242
- combine(
257
+ tuple(
243
258
  Object.entries(versioneds).map(([k, v]) =>
244
- map(v, { onFx: (x) => [k, x] as const, onEffect: (x) => [k, x] as const })
259
+ map(v, {
260
+ onFx: (x) => [k, x] as const,
261
+ onEffect: (x) => [k, x] as const
262
+ })
245
263
  )
246
264
  ),
247
265
  {
@@ -255,48 +273,82 @@ export function struct<const VS extends Readonly<Record<string, Versioned<any, a
255
273
  * @since 1.0.0
256
274
  */
257
275
  export const provide: {
258
- <R3, E3, C3>(
259
- layer: Layer.Layer<R3, E3, C3>
260
- ): <R0, E0, R1, E1, A1, R2, E2, B2>(
261
- versioned: Versioned<R0, E0, R1, E1, A1, R2, E2, B2>
262
- ) => Versioned<never, never, R3 | Exclude<R1, C3>, E1 | E3, A1, R3 | Exclude<R0 | R2, C3>, E0 | E2 | E3, B2>
263
- <C3>(
264
- runtime: Runtime.Runtime<C3>
265
- ): <R0, E0, R1, E1, A1, R2, E2, B2>(
266
- versioned: Versioned<R0, E0, R1, E1, A1, R2, E2, B2>
267
- ) => Versioned<never, never, Exclude<R1, C3>, E1, A1, Exclude<R0 | R2, C3>, E0 | E2, B2>
268
-
269
- <C3>(
270
- context: Context.Context<C3>
271
- ): <R0, E0, R1, E1, A1, R2, E2, B2>(
272
- versioned: Versioned<R0, E0, R1, E1, A1, R2, E2, B2>
273
- ) => Versioned<never, never, Exclude<R1, C3>, E1, A1, Exclude<R0 | R2, C3>, E0 | E2, B2>
274
-
275
- <R0, E0, R1, E1, A1, R2, E2, B2, R3, E3, C3>(
276
- versioned: Versioned<R0, E0, R1, E1, A1, R2, E2, B2>,
277
- layer: Layer.Layer<R3, E3, C3>
278
- ): Versioned<never, never, R3 | Exclude<R1, C3>, E1 | E3, A1, R3 | Exclude<R0 | R2, C3>, E0 | E2 | E3, B2>
279
-
280
- <R0, E0, R1, E1, A1, R2, E2, B2, C3>(
281
- versioned: Versioned<R0, E0, R1, E1, A1, R2, E2, B2>,
282
- runtime: Runtime.Runtime<C3>
283
- ): Versioned<never, never, Exclude<R1, C3>, E1, A1, Exclude<R0 | R2, C3>, E0 | E2, B2>
284
-
285
- <R0, E0, R1, E1, A1, R2, E2, B2, C3>(
286
- versioned: Versioned<R0, E0, R1, E1, A1, R2, E2, B2>,
287
- context: Context.Context<C3>
288
- ): Versioned<never, never, Exclude<R1, C3>, E1, A1, Exclude<R0 | R2, C3>, E0 | E2, B2>
289
- } = dual(2, function provide<R0, E0, R1, E1, A1, R2, E2, B2, R3, E3, C3>(
290
- versioned: Versioned<R0, E0, R1, E1, A1, R2, E2, B2>,
291
- layer: Layer.Layer<R3, E3, C3>
292
- ): Versioned<never, never, R3 | Exclude<R1, C3>, E1 | E3, A1, R3 | Exclude<R0 | R2, C3>, E0 | E2 | E3, B2> {
293
- return transform(
294
- make({
295
- effect: versioned,
296
- fx: versioned,
297
- version: Effect.provide(versioned.version, layer)
298
- }),
299
- core.provide(layer),
300
- Effect.provide(layer)
276
+ <S>(ctx: Context.Context<S> | Runtime.Runtime<S>): <R0, E0, R, E, A, R2, E2, B>(
277
+ versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
278
+ ) => Versioned<Exclude<R0, S>, E0, Exclude<R, S>, E, A, Exclude<R2, S>, E2, B>
279
+
280
+ <R3, S>(layer: Layer.Layer<R3, never, S>): <R0, E0, R, E, A, R2, E2, B>(
281
+ versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
282
+ ) => Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B>
283
+
284
+ <R0, E0, R, E, A, R2, E2, B, S>(
285
+ versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
286
+ context: Context.Context<S> | Runtime.Runtime<S>
287
+ ): Versioned<Exclude<R0, S>, E0, Exclude<R, S>, E, A, Exclude<R2, S>, E2, B>
288
+
289
+ <R0, E0, R, E, A, R2, E2, B, R3 = never, S = never>(
290
+ versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
291
+ context: Layer.Layer<R3, never, S>
292
+ ): Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B>
293
+
294
+ <R0, E0, R, E, A, R2, E2, B, R3 = never, S = never>(
295
+ versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
296
+ context: Context.Context<S> | Runtime.Runtime<S> | Layer.Layer<R3, never, S>
297
+ ): Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B>
298
+ } = dual(2, function provide<R0, E0, R, E, A, R2, E2, B, R3 = never, S = never>(
299
+ versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
300
+ context: Context.Context<S> | Runtime.Runtime<S> | Layer.Layer<R3, never, S>
301
+ ): Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B> {
302
+ return make(
303
+ Effect.provide(versioned.version, context as Layer.Layer<R3, never, S>),
304
+ core.provide(versioned, context),
305
+ Effect.provide(versioned, context as Layer.Layer<R3, never, S>)
301
306
  )
302
307
  })
308
+
309
+ /**
310
+ * @since 1.0.0
311
+ */
312
+ export function of<A>(value: A): Versioned<never, never, never, never, A, never, never, A> {
313
+ return make(Effect.succeed(1), core.succeed(value), Effect.succeed(value))
314
+ }
315
+
316
+ /**
317
+ * @since 1.0.0
318
+ */
319
+ export function hold<R0, E0, R, E, A, R2, E2, B>(
320
+ versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
321
+ ): Versioned<R0, E0, R | Scope.Scope, E, A, R2, E2, B> {
322
+ return make(
323
+ versioned.version,
324
+ coreShare.hold(versioned),
325
+ versioned
326
+ )
327
+ }
328
+
329
+ /**
330
+ * @since 1.0.0
331
+ */
332
+ export function multicast<R0, E0, R, E, A, R2, E2, B>(
333
+ versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
334
+ ): Versioned<R0, E0, R | Scope.Scope, E, A, R2, E2, B> {
335
+ return make(
336
+ versioned.version,
337
+ coreShare.multicast(versioned),
338
+ versioned
339
+ )
340
+ }
341
+
342
+ /**
343
+ * @since 1.0.0
344
+ */
345
+ export function replay<R0, E0, R, E, A, R2, E2, B>(
346
+ versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
347
+ bufferSize: number
348
+ ): Versioned<R0, E0, R | Scope.Scope, E, A, R2, E2, B> {
349
+ return make(
350
+ versioned.version,
351
+ coreShare.replay(versioned, bufferSize),
352
+ versioned
353
+ )
354
+ }
package/src/index.ts CHANGED
@@ -10,22 +10,64 @@
10
10
  */
11
11
 
12
12
  /**
13
- * [Computed documentation](https://tylors.github.io/typed/fx/Computed.ts.html)
13
+ * [Fx documentation](https://tylors.github.io/typed/fx/Fx.ts.html)
14
14
  * @since 1.18.0
15
15
  */
16
- export * as Computed from "./Computed.js"
16
+ export * from "./Fx.js"
17
17
 
18
18
  /**
19
- * [Filtered documentation](https://tylors.github.io/typed/fx/Filtered.ts.html)
19
+ * [AsyncData documentation](https://tylors.github.io/typed/fx/AsyncData.ts.html)
20
20
  * @since 1.18.0
21
21
  */
22
- export * as Filtered from "./Filtered.js"
22
+ export * as AsyncData from "./AsyncData.js"
23
23
 
24
24
  /**
25
- * [Fx documentation](https://tylors.github.io/typed/fx/Fx.ts.html)
25
+ * [Emitter documentation](https://tylors.github.io/typed/fx/Emitter.ts.html)
26
26
  * @since 1.18.0
27
27
  */
28
- export * from "./Fx.js"
28
+ export * as Emitter from "./Emitter.js"
29
+
30
+ /**
31
+ * [Form documentation](https://tylors.github.io/typed/fx/Form.ts.html)
32
+ * @since 1.18.0
33
+ */
34
+ export * as Form from "./Form.js"
35
+
36
+ /**
37
+ * [FormEntry documentation](https://tylors.github.io/typed/fx/FormEntry.ts.html)
38
+ * @since 1.18.0
39
+ */
40
+ export * as FormEntry from "./FormEntry.js"
41
+
42
+ /**
43
+ * [Guard documentation](https://tylors.github.io/typed/fx/Guard.ts.html)
44
+ * @since 1.18.0
45
+ */
46
+ export * as Guard from "./Guard.js"
47
+
48
+ /**
49
+ * [Idle documentation](https://tylors.github.io/typed/fx/Idle.ts.html)
50
+ * @since 1.18.0
51
+ */
52
+ export * as Idle from "./Idle.js"
53
+
54
+ /**
55
+ * [Match documentation](https://tylors.github.io/typed/fx/Match.ts.html)
56
+ * @since 1.18.0
57
+ */
58
+ export * as Match from "./Match.js"
59
+
60
+ /**
61
+ * [Pull documentation](https://tylors.github.io/typed/fx/Pull.ts.html)
62
+ * @since 1.18.0
63
+ */
64
+ export * as Pull from "./Pull.js"
65
+
66
+ /**
67
+ * [Push documentation](https://tylors.github.io/typed/fx/Push.ts.html)
68
+ * @since 1.18.0
69
+ */
70
+ export * as Push from "./Push.js"
29
71
 
30
72
  /**
31
73
  * [RefArray documentation](https://tylors.github.io/typed/fx/RefArray.ts.html)
@@ -33,6 +75,24 @@ export * from "./Fx.js"
33
75
  */
34
76
  export * as RefArray from "./RefArray.js"
35
77
 
78
+ /**
79
+ * [RefChunk documentation](https://tylors.github.io/typed/fx/RefChunk.ts.html)
80
+ * @since 1.18.0
81
+ */
82
+ export * as RefChunk from "./RefChunk.js"
83
+
84
+ /**
85
+ * [RefHashMap documentation](https://tylors.github.io/typed/fx/RefHashMap.ts.html)
86
+ * @since 1.18.0
87
+ */
88
+ export * as RefHashMap from "./RefHashMap.js"
89
+
90
+ /**
91
+ * [RefHashSet documentation](https://tylors.github.io/typed/fx/RefHashSet.ts.html)
92
+ * @since 1.18.0
93
+ */
94
+ export * as RefHashSet from "./RefHashSet.js"
95
+
36
96
  /**
37
97
  * [RefSubject documentation](https://tylors.github.io/typed/fx/RefSubject.ts.html)
38
98
  * @since 1.18.0
@@ -45,6 +105,12 @@ export * as RefSubject from "./RefSubject.js"
45
105
  */
46
106
  export * as Sink from "./Sink.js"
47
107
 
108
+ /**
109
+ * [Stream documentation](https://tylors.github.io/typed/fx/Stream.ts.html)
110
+ * @since 1.18.0
111
+ */
112
+ export * as Stream from "./Stream.js"
113
+
48
114
  /**
49
115
  * [Subject documentation](https://tylors.github.io/typed/fx/Subject.ts.html)
50
116
  * @since 1.18.0
@@ -62,3 +128,9 @@ export * as Typeclass from "./Typeclass.js"
62
128
  * @since 1.18.0
63
129
  */
64
130
  export * from "./TypeId.js"
131
+
132
+ /**
133
+ * [Versioned documentation](https://tylors.github.io/typed/fx/Versioned.ts.html)
134
+ * @since 1.18.0
135
+ */
136
+ export * as Versioned from "./Versioned.js"
@@ -0,0 +1,62 @@
1
+ import type { Equivalence, FiberId } from "effect"
2
+ import * as Deferred from "effect/Deferred"
3
+ import * as Effect from "effect/Effect"
4
+ import * as Exit from "effect/Exit"
5
+ import * as Option from "effect/Option"
6
+ import { EffectBase } from "./protos.js"
7
+
8
+ export class DeferredRef<E, A> extends EffectBase<never, E, A> {
9
+ // Keep track of the latest value emitted by the stream
10
+ public current!: Option.Option<Exit.Exit<E, A>>
11
+ public version!: number
12
+ public deferred!: Deferred.Deferred<E, A>
13
+
14
+ constructor(private id: FiberId.FiberId, private eq: Equivalence.Equivalence<Exit.Exit<E, A>>) {
15
+ super()
16
+ this.reset()
17
+ }
18
+
19
+ toEffect() {
20
+ return Effect.suspend(() => {
21
+ if (Option.isNone(this.current)) {
22
+ return Deferred.await(this.deferred)
23
+ } else {
24
+ return this.current.value
25
+ }
26
+ })
27
+ }
28
+
29
+ done(exit: Exit.Exit<E, A>) {
30
+ const current = this.current
31
+
32
+ this.current = Option.some(exit)
33
+
34
+ if (Option.isSome(current) && this.eq(current.value, exit)) {
35
+ return false
36
+ }
37
+
38
+ Deferred.unsafeDone(this.deferred, exit)
39
+ this.version += 1
40
+
41
+ return true
42
+ }
43
+
44
+ reset() {
45
+ this.current = Option.none()
46
+ this.version = 0
47
+
48
+ if (this.deferred) {
49
+ Deferred.unsafeDone(this.deferred, Exit.interrupt(this.id))
50
+ }
51
+
52
+ this.deferred = Deferred.unsafeMake(this.id)
53
+ }
54
+ }
55
+
56
+ export function make<E, A>(eq: Equivalence.Equivalence<Exit.Exit<E, A>>) {
57
+ return Effect.map(Effect.fiberId, (id) => new DeferredRef(id, eq))
58
+ }
59
+
60
+ export function unsafeMake<E, A>(id: FiberId.FiberId, eq: Equivalence.Equivalence<Exit.Exit<E, A>>) {
61
+ return new DeferredRef(id, eq)
62
+ }
@@ -0,0 +1,11 @@
1
+ type Contra<T> = T extends any ? (arg: T) => void
2
+ : never
3
+
4
+ type InferContra<T> = [T] extends [(arg: infer I) => void] ? I
5
+ : never
6
+
7
+ type PickOne<T> = InferContra<InferContra<Contra<Contra<T>>>>
8
+
9
+ export type UnionToTuple<T> = PickOne<T> extends infer U ? Exclude<T, U> extends never ? [T]
10
+ : [...UnionToTuple<Exclude<T, U>>, U]
11
+ : never