@typed/fx 1.19.0 → 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 (411) hide show
  1. package/AsyncData/package.json +6 -0
  2. package/Push/package.json +6 -0
  3. package/dist/cjs/AsyncData.js +177 -0
  4. package/dist/cjs/AsyncData.js.map +1 -0
  5. package/dist/cjs/Emitter.js +24 -21
  6. package/dist/cjs/Emitter.js.map +1 -1
  7. package/dist/cjs/Form.js +78 -21
  8. package/dist/cjs/Form.js.map +1 -1
  9. package/dist/cjs/FormEntry.js +75 -48
  10. package/dist/cjs/FormEntry.js.map +1 -1
  11. package/dist/cjs/Fx.js +517 -872
  12. package/dist/cjs/Fx.js.map +1 -1
  13. package/dist/cjs/Guard.js +21 -13
  14. package/dist/cjs/Guard.js.map +1 -1
  15. package/dist/cjs/Idle.js +49 -37
  16. package/dist/cjs/Idle.js.map +1 -1
  17. package/dist/cjs/Match.js +99 -61
  18. package/dist/cjs/Match.js.map +1 -1
  19. package/dist/cjs/Pull.js.map +1 -1
  20. package/dist/cjs/Push.js +168 -0
  21. package/dist/cjs/Push.js.map +1 -0
  22. package/dist/cjs/RefArray.js +32 -30
  23. package/dist/cjs/RefArray.js.map +1 -1
  24. package/dist/cjs/RefChunk.js +26 -24
  25. package/dist/cjs/RefChunk.js.map +1 -1
  26. package/dist/cjs/RefHashMap.js +20 -20
  27. package/dist/cjs/RefHashMap.js.map +1 -1
  28. package/dist/cjs/RefHashSet.js +11 -8
  29. package/dist/cjs/RefHashSet.js.map +1 -1
  30. package/dist/cjs/RefSubject.js +899 -158
  31. package/dist/cjs/RefSubject.js.map +1 -1
  32. package/dist/cjs/Sink.js +588 -62
  33. package/dist/cjs/Sink.js.map +1 -1
  34. package/dist/cjs/Stream.js +15 -10
  35. package/dist/cjs/Stream.js.map +1 -1
  36. package/dist/cjs/Subject.js +153 -55
  37. package/dist/cjs/Subject.js.map +1 -1
  38. package/dist/cjs/TypeId.js +10 -5
  39. package/dist/cjs/TypeId.js.map +1 -1
  40. package/dist/cjs/Typeclass.js +28 -31
  41. package/dist/cjs/Typeclass.js.map +1 -1
  42. package/dist/cjs/Versioned.js +118 -57
  43. package/dist/cjs/Versioned.js.map +1 -1
  44. package/dist/cjs/index.js +44 -8
  45. package/dist/cjs/index.js.map +1 -1
  46. package/dist/cjs/internal/{deferred-ref.js → DeferredRef.js} +45 -13
  47. package/dist/cjs/internal/DeferredRef.js.map +1 -0
  48. package/dist/cjs/internal/UnionToTuple.js +6 -0
  49. package/dist/cjs/internal/UnionToTuple.js.map +1 -0
  50. package/dist/cjs/internal/core.js +1590 -779
  51. package/dist/cjs/internal/core.js.map +1 -1
  52. package/dist/cjs/internal/diff.js +114 -0
  53. package/dist/cjs/internal/diff.js.map +1 -0
  54. package/dist/cjs/internal/effect-loop-operator.js +288 -0
  55. package/dist/cjs/internal/effect-loop-operator.js.map +1 -0
  56. package/dist/cjs/internal/effect-operator.js +46 -37
  57. package/dist/cjs/internal/effect-operator.js.map +1 -1
  58. package/dist/cjs/internal/effect-producer.js +74 -0
  59. package/dist/cjs/internal/effect-producer.js.map +1 -0
  60. package/dist/cjs/internal/helpers.js +158 -128
  61. package/dist/cjs/internal/helpers.js.map +1 -1
  62. package/dist/cjs/internal/keyed.js +136 -173
  63. package/dist/cjs/internal/keyed.js.map +1 -1
  64. package/dist/cjs/internal/loop-operator.js +213 -0
  65. package/dist/cjs/internal/loop-operator.js.map +1 -0
  66. package/dist/cjs/internal/operator.js +79 -0
  67. package/dist/cjs/internal/operator.js.map +1 -0
  68. package/dist/cjs/internal/protos.js +19 -81
  69. package/dist/cjs/internal/protos.js.map +1 -1
  70. package/dist/cjs/internal/provide.js +47 -25
  71. package/dist/cjs/internal/provide.js.map +1 -1
  72. package/dist/cjs/internal/requestIdleCallback.js +5 -5
  73. package/dist/cjs/internal/requestIdleCallback.js.map +1 -1
  74. package/dist/cjs/internal/share.js +12 -15
  75. package/dist/cjs/internal/share.js.map +1 -1
  76. package/dist/cjs/internal/sync-operator.js +50 -22
  77. package/dist/cjs/internal/sync-operator.js.map +1 -1
  78. package/dist/cjs/internal/sync-producer.js +114 -0
  79. package/dist/cjs/internal/sync-producer.js.map +1 -0
  80. package/dist/cjs/internal/withKey.js +45 -51
  81. package/dist/cjs/internal/withKey.js.map +1 -1
  82. package/dist/dts/AsyncData.d.ts +185 -0
  83. package/dist/dts/AsyncData.d.ts.map +1 -0
  84. package/dist/dts/Emitter.d.ts +13 -20
  85. package/dist/dts/Emitter.d.ts.map +1 -1
  86. package/dist/dts/Form.d.ts +45 -28
  87. package/dist/dts/Form.d.ts.map +1 -1
  88. package/dist/dts/FormEntry.d.ts +25 -13
  89. package/dist/dts/FormEntry.d.ts.map +1 -1
  90. package/dist/dts/Fx.d.ts +980 -1390
  91. package/dist/dts/Fx.d.ts.map +1 -1
  92. package/dist/dts/Guard.d.ts +8 -1
  93. package/dist/dts/Guard.d.ts.map +1 -1
  94. package/dist/dts/Idle.d.ts +3 -3
  95. package/dist/dts/Idle.d.ts.map +1 -1
  96. package/dist/dts/Match.d.ts +8 -8
  97. package/dist/dts/Match.d.ts.map +1 -1
  98. package/dist/dts/Pull.d.ts +5 -5
  99. package/dist/dts/Pull.d.ts.map +1 -1
  100. package/dist/dts/Push.d.ts +170 -0
  101. package/dist/dts/Push.d.ts.map +1 -0
  102. package/dist/dts/RefArray.d.ts +21 -23
  103. package/dist/dts/RefArray.d.ts.map +1 -1
  104. package/dist/dts/RefChunk.d.ts +17 -19
  105. package/dist/dts/RefChunk.d.ts.map +1 -1
  106. package/dist/dts/RefHashMap.d.ts +19 -20
  107. package/dist/dts/RefHashMap.d.ts.map +1 -1
  108. package/dist/dts/RefHashSet.d.ts +12 -16
  109. package/dist/dts/RefHashSet.d.ts.map +1 -1
  110. package/dist/dts/RefSubject.d.ts +396 -187
  111. package/dist/dts/RefSubject.d.ts.map +1 -1
  112. package/dist/dts/Sink.d.ts +193 -93
  113. package/dist/dts/Sink.d.ts.map +1 -1
  114. package/dist/dts/Stream.d.ts +7 -1
  115. package/dist/dts/Stream.d.ts.map +1 -1
  116. package/dist/dts/Subject.d.ts +27 -36
  117. package/dist/dts/Subject.d.ts.map +1 -1
  118. package/dist/dts/TypeId.d.ts +10 -0
  119. package/dist/dts/TypeId.d.ts.map +1 -1
  120. package/dist/dts/Typeclass.d.ts +2 -2
  121. package/dist/dts/Typeclass.d.ts.map +1 -1
  122. package/dist/dts/Versioned.d.ts +50 -78
  123. package/dist/dts/Versioned.d.ts.map +1 -1
  124. package/dist/dts/index.d.ts +66 -6
  125. package/dist/dts/index.d.ts.map +1 -1
  126. package/dist/dts/internal/DeferredRef.d.ts +20 -0
  127. package/dist/dts/internal/DeferredRef.d.ts.map +1 -0
  128. package/dist/dts/internal/UnionToTuple.d.ts +6 -0
  129. package/dist/dts/internal/UnionToTuple.d.ts.map +1 -0
  130. package/dist/dts/internal/core.d.ts +218 -450
  131. package/dist/dts/internal/core.d.ts.map +1 -1
  132. package/dist/dts/internal/diff.d.ts +38 -0
  133. package/dist/dts/internal/diff.d.ts.map +1 -0
  134. package/dist/dts/internal/effect-loop-operator.d.ts +34 -0
  135. package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -0
  136. package/dist/dts/internal/effect-operator.d.ts +8 -5
  137. package/dist/dts/internal/effect-operator.d.ts.map +1 -1
  138. package/dist/dts/internal/effect-producer.d.ts +25 -0
  139. package/dist/dts/internal/effect-producer.d.ts.map +1 -0
  140. package/dist/dts/internal/helpers.d.ts +33 -24
  141. package/dist/dts/internal/helpers.d.ts.map +1 -1
  142. package/dist/dts/internal/keyed.d.ts +3 -3
  143. package/dist/dts/internal/keyed.d.ts.map +1 -1
  144. package/dist/dts/internal/loop-operator.d.ts +40 -0
  145. package/dist/dts/internal/loop-operator.d.ts.map +1 -0
  146. package/dist/dts/internal/operator.d.ts +16 -0
  147. package/dist/dts/internal/operator.d.ts.map +1 -0
  148. package/dist/dts/internal/protos.d.ts +16 -43
  149. package/dist/dts/internal/protos.d.ts.map +1 -1
  150. package/dist/dts/internal/provide.d.ts +7 -1
  151. package/dist/dts/internal/provide.d.ts.map +1 -1
  152. package/dist/dts/internal/share.d.ts +12 -9
  153. package/dist/dts/internal/share.d.ts.map +1 -1
  154. package/dist/dts/internal/sync-operator.d.ts +7 -3
  155. package/dist/dts/internal/sync-operator.d.ts.map +1 -1
  156. package/dist/dts/internal/sync-producer.d.ts +36 -0
  157. package/dist/dts/internal/sync-producer.d.ts.map +1 -0
  158. package/dist/dts/internal/withKey.d.ts +3 -3
  159. package/dist/dts/internal/withKey.d.ts.map +1 -1
  160. package/dist/esm/AsyncData.js +151 -0
  161. package/dist/esm/AsyncData.js.map +1 -0
  162. package/dist/esm/Emitter.js +24 -21
  163. package/dist/esm/Emitter.js.map +1 -1
  164. package/dist/esm/Form.js +69 -14
  165. package/dist/esm/Form.js.map +1 -1
  166. package/dist/esm/FormEntry.js +77 -52
  167. package/dist/esm/FormEntry.js.map +1 -1
  168. package/dist/esm/Fx.js +509 -874
  169. package/dist/esm/Fx.js.map +1 -1
  170. package/dist/esm/Guard.js +5 -1
  171. package/dist/esm/Guard.js.map +1 -1
  172. package/dist/esm/Idle.js +49 -39
  173. package/dist/esm/Idle.js.map +1 -1
  174. package/dist/esm/Match.js +103 -63
  175. package/dist/esm/Match.js.map +1 -1
  176. package/dist/esm/Pull.js.map +1 -1
  177. package/dist/esm/Push.js +159 -0
  178. package/dist/esm/Push.js.map +1 -0
  179. package/dist/esm/RefArray.js +32 -30
  180. package/dist/esm/RefArray.js.map +1 -1
  181. package/dist/esm/RefChunk.js +26 -24
  182. package/dist/esm/RefChunk.js.map +1 -1
  183. package/dist/esm/RefHashMap.js +20 -20
  184. package/dist/esm/RefHashMap.js.map +1 -1
  185. package/dist/esm/RefHashSet.js +11 -8
  186. package/dist/esm/RefHashSet.js.map +1 -1
  187. package/dist/esm/RefSubject.js +873 -150
  188. package/dist/esm/RefSubject.js.map +1 -1
  189. package/dist/esm/Sink.js +608 -57
  190. package/dist/esm/Sink.js.map +1 -1
  191. package/dist/esm/Stream.js +13 -9
  192. package/dist/esm/Stream.js.map +1 -1
  193. package/dist/esm/Subject.js +151 -56
  194. package/dist/esm/Subject.js.map +1 -1
  195. package/dist/esm/TypeId.js +9 -4
  196. package/dist/esm/TypeId.js.map +1 -1
  197. package/dist/esm/Typeclass.js +29 -29
  198. package/dist/esm/Typeclass.js.map +1 -1
  199. package/dist/esm/Versioned.js +110 -53
  200. package/dist/esm/Versioned.js.map +1 -1
  201. package/dist/esm/index.js +66 -6
  202. package/dist/esm/index.js.map +1 -1
  203. package/dist/esm/internal/DeferredRef.js +54 -0
  204. package/dist/esm/internal/DeferredRef.js.map +1 -0
  205. package/dist/esm/internal/UnionToTuple.js +2 -0
  206. package/dist/esm/internal/UnionToTuple.js.map +1 -0
  207. package/dist/esm/internal/core.js +1439 -719
  208. package/dist/esm/internal/core.js.map +1 -1
  209. package/dist/esm/internal/diff.js +82 -0
  210. package/dist/esm/internal/diff.js.map +1 -0
  211. package/dist/esm/internal/effect-loop-operator.js +269 -0
  212. package/dist/esm/internal/effect-loop-operator.js.map +1 -0
  213. package/dist/esm/internal/effect-operator.js +44 -37
  214. package/dist/esm/internal/effect-operator.js.map +1 -1
  215. package/dist/esm/internal/effect-producer.js +47 -0
  216. package/dist/esm/internal/effect-producer.js.map +1 -0
  217. package/dist/esm/internal/helpers.js +157 -129
  218. package/dist/esm/internal/helpers.js.map +1 -1
  219. package/dist/esm/internal/keyed.js +128 -139
  220. package/dist/esm/internal/keyed.js.map +1 -1
  221. package/dist/esm/internal/loop-operator.js +186 -0
  222. package/dist/esm/internal/loop-operator.js.map +1 -0
  223. package/dist/esm/internal/operator.js +68 -0
  224. package/dist/esm/internal/operator.js.map +1 -0
  225. package/dist/esm/internal/protos.js +16 -75
  226. package/dist/esm/internal/protos.js.map +1 -1
  227. package/dist/esm/internal/provide.js +33 -25
  228. package/dist/esm/internal/provide.js.map +1 -1
  229. package/dist/esm/internal/requestIdleCallback.js +5 -5
  230. package/dist/esm/internal/requestIdleCallback.js.map +1 -1
  231. package/dist/esm/internal/share.js +12 -12
  232. package/dist/esm/internal/share.js.map +1 -1
  233. package/dist/esm/internal/sync-operator.js +49 -21
  234. package/dist/esm/internal/sync-operator.js.map +1 -1
  235. package/dist/esm/internal/sync-producer.js +88 -0
  236. package/dist/esm/internal/sync-producer.js.map +1 -0
  237. package/dist/esm/internal/withKey.js +46 -47
  238. package/dist/esm/internal/withKey.js.map +1 -1
  239. package/package.json +22 -62
  240. package/src/AsyncData.ts +447 -0
  241. package/src/Emitter.ts +47 -38
  242. package/src/Form.ts +185 -65
  243. package/src/FormEntry.ts +142 -109
  244. package/src/Fx.ts +1682 -1854
  245. package/src/Guard.ts +12 -1
  246. package/src/Idle.ts +76 -62
  247. package/src/Match.ts +149 -93
  248. package/src/Pull.ts +8 -8
  249. package/src/Push.ts +472 -0
  250. package/src/RefArray.ts +53 -51
  251. package/src/RefChunk.ts +44 -41
  252. package/src/RefHashMap.ts +57 -43
  253. package/src/RefHashSet.ts +21 -31
  254. package/src/RefSubject.ts +1984 -457
  255. package/src/Sink.ts +922 -171
  256. package/src/Stream.ts +32 -20
  257. package/src/Subject.ts +230 -87
  258. package/src/TypeId.ts +16 -4
  259. package/src/Typeclass.ts +31 -32
  260. package/src/Versioned.ts +220 -168
  261. package/src/index.ts +78 -6
  262. package/src/internal/DeferredRef.ts +62 -0
  263. package/src/internal/UnionToTuple.ts +11 -0
  264. package/src/internal/core.ts +2491 -1950
  265. package/src/internal/diff.ts +157 -0
  266. package/src/internal/effect-loop-operator.ts +466 -0
  267. package/src/internal/effect-operator.ts +89 -54
  268. package/src/internal/effect-producer.ts +125 -0
  269. package/src/internal/helpers.ts +275 -205
  270. package/src/internal/keyed.ts +192 -241
  271. package/src/internal/loop-operator.ts +266 -0
  272. package/src/internal/operator.ts +87 -0
  273. package/src/internal/protos.ts +29 -104
  274. package/src/internal/provide.ts +48 -40
  275. package/src/internal/requestIdleCallback.ts +5 -6
  276. package/src/internal/share.ts +26 -24
  277. package/src/internal/sync-operator.ts +68 -27
  278. package/src/internal/sync-producer.ts +146 -0
  279. package/src/internal/withKey.ts +64 -74
  280. package/Computed/package.json +0 -6
  281. package/Filtered/package.json +0 -6
  282. package/Model/package.json +0 -6
  283. package/RefAsyncData/package.json +0 -6
  284. package/RefAsyncDataArray/package.json +0 -6
  285. package/RefBoolean/package.json +0 -6
  286. package/RefNumber/package.json +0 -6
  287. package/dist/cjs/Computed.js +0 -115
  288. package/dist/cjs/Computed.js.map +0 -1
  289. package/dist/cjs/Filtered.js +0 -95
  290. package/dist/cjs/Filtered.js.map +0 -1
  291. package/dist/cjs/Model.js +0 -119
  292. package/dist/cjs/Model.js.map +0 -1
  293. package/dist/cjs/RefAsyncData.js +0 -187
  294. package/dist/cjs/RefAsyncData.js.map +0 -1
  295. package/dist/cjs/RefAsyncDataArray.js +0 -38
  296. package/dist/cjs/RefAsyncDataArray.js.map +0 -1
  297. package/dist/cjs/RefBoolean.js +0 -45
  298. package/dist/cjs/RefBoolean.js.map +0 -1
  299. package/dist/cjs/RefNumber.js +0 -49
  300. package/dist/cjs/RefNumber.js.map +0 -1
  301. package/dist/cjs/internal/core-ref-subject.js +0 -254
  302. package/dist/cjs/internal/core-ref-subject.js.map +0 -1
  303. package/dist/cjs/internal/core-subject.js +0 -108
  304. package/dist/cjs/internal/core-subject.js.map +0 -1
  305. package/dist/cjs/internal/deferred-ref.js.map +0 -1
  306. package/dist/cjs/internal/effect-primitive.js +0 -47
  307. package/dist/cjs/internal/effect-primitive.js.map +0 -1
  308. package/dist/cjs/internal/fx-effect-proto.js +0 -58
  309. package/dist/cjs/internal/fx-effect-proto.js.map +0 -1
  310. package/dist/cjs/internal/fx-primitive.js +0 -193
  311. package/dist/cjs/internal/fx-primitive.js.map +0 -1
  312. package/dist/cjs/internal/fx.js +0 -240
  313. package/dist/cjs/internal/fx.js.map +0 -1
  314. package/dist/cjs/internal/matchers.js +0 -34
  315. package/dist/cjs/internal/matchers.js.map +0 -1
  316. package/dist/cjs/internal/run.js +0 -54
  317. package/dist/cjs/internal/run.js.map +0 -1
  318. package/dist/cjs/internal/schema-ref-subject.js +0 -132
  319. package/dist/cjs/internal/schema-ref-subject.js.map +0 -1
  320. package/dist/cjs/internal/versioned-transform.js +0 -46
  321. package/dist/cjs/internal/versioned-transform.js.map +0 -1
  322. package/dist/dts/Computed.d.ts +0 -106
  323. package/dist/dts/Computed.d.ts.map +0 -1
  324. package/dist/dts/Filtered.d.ts +0 -97
  325. package/dist/dts/Filtered.d.ts.map +0 -1
  326. package/dist/dts/Model.d.ts +0 -200
  327. package/dist/dts/Model.d.ts.map +0 -1
  328. package/dist/dts/RefAsyncData.d.ts +0 -236
  329. package/dist/dts/RefAsyncData.d.ts.map +0 -1
  330. package/dist/dts/RefAsyncDataArray.d.ts +0 -56
  331. package/dist/dts/RefAsyncDataArray.d.ts.map +0 -1
  332. package/dist/dts/RefBoolean.d.ts +0 -47
  333. package/dist/dts/RefBoolean.d.ts.map +0 -1
  334. package/dist/dts/RefNumber.d.ts +0 -48
  335. package/dist/dts/RefNumber.d.ts.map +0 -1
  336. package/dist/dts/internal/core-ref-subject.d.ts +0 -100
  337. package/dist/dts/internal/core-ref-subject.d.ts.map +0 -1
  338. package/dist/dts/internal/core-subject.d.ts +0 -5
  339. package/dist/dts/internal/core-subject.d.ts.map +0 -1
  340. package/dist/dts/internal/deferred-ref.d.ts +0 -12
  341. package/dist/dts/internal/deferred-ref.d.ts.map +0 -1
  342. package/dist/dts/internal/effect-primitive.d.ts +0 -6
  343. package/dist/dts/internal/effect-primitive.d.ts.map +0 -1
  344. package/dist/dts/internal/fx-effect-proto.d.ts +0 -30
  345. package/dist/dts/internal/fx-effect-proto.d.ts.map +0 -1
  346. package/dist/dts/internal/fx-primitive.d.ts +0 -109
  347. package/dist/dts/internal/fx-primitive.d.ts.map +0 -1
  348. package/dist/dts/internal/fx.d.ts +0 -245
  349. package/dist/dts/internal/fx.d.ts.map +0 -1
  350. package/dist/dts/internal/matchers.d.ts +0 -33
  351. package/dist/dts/internal/matchers.d.ts.map +0 -1
  352. package/dist/dts/internal/run.d.ts +0 -8
  353. package/dist/dts/internal/run.d.ts.map +0 -1
  354. package/dist/dts/internal/schema-ref-subject.d.ts +0 -5
  355. package/dist/dts/internal/schema-ref-subject.d.ts.map +0 -1
  356. package/dist/dts/internal/versioned-transform.d.ts +0 -17
  357. package/dist/dts/internal/versioned-transform.d.ts.map +0 -1
  358. package/dist/esm/Computed.js +0 -103
  359. package/dist/esm/Computed.js.map +0 -1
  360. package/dist/esm/Filtered.js +0 -83
  361. package/dist/esm/Filtered.js.map +0 -1
  362. package/dist/esm/Model.js +0 -100
  363. package/dist/esm/Model.js.map +0 -1
  364. package/dist/esm/RefAsyncData.js +0 -163
  365. package/dist/esm/RefAsyncData.js.map +0 -1
  366. package/dist/esm/RefAsyncDataArray.js +0 -27
  367. package/dist/esm/RefAsyncDataArray.js.map +0 -1
  368. package/dist/esm/RefBoolean.js +0 -31
  369. package/dist/esm/RefBoolean.js.map +0 -1
  370. package/dist/esm/RefNumber.js +0 -35
  371. package/dist/esm/RefNumber.js.map +0 -1
  372. package/dist/esm/internal/core-ref-subject.js +0 -242
  373. package/dist/esm/internal/core-ref-subject.js.map +0 -1
  374. package/dist/esm/internal/core-subject.js +0 -90
  375. package/dist/esm/internal/core-subject.js.map +0 -1
  376. package/dist/esm/internal/deferred-ref.js +0 -23
  377. package/dist/esm/internal/deferred-ref.js.map +0 -1
  378. package/dist/esm/internal/effect-primitive.js +0 -41
  379. package/dist/esm/internal/effect-primitive.js.map +0 -1
  380. package/dist/esm/internal/fx-effect-proto.js +0 -43
  381. package/dist/esm/internal/fx-effect-proto.js.map +0 -1
  382. package/dist/esm/internal/fx-primitive.js +0 -175
  383. package/dist/esm/internal/fx-primitive.js.map +0 -1
  384. package/dist/esm/internal/fx.js +0 -216
  385. package/dist/esm/internal/fx.js.map +0 -1
  386. package/dist/esm/internal/matchers.js +0 -38
  387. package/dist/esm/internal/matchers.js.map +0 -1
  388. package/dist/esm/internal/run.js +0 -32
  389. package/dist/esm/internal/run.js.map +0 -1
  390. package/dist/esm/internal/schema-ref-subject.js +0 -121
  391. package/dist/esm/internal/schema-ref-subject.js.map +0 -1
  392. package/dist/esm/internal/versioned-transform.js +0 -37
  393. package/dist/esm/internal/versioned-transform.js.map +0 -1
  394. package/src/Computed.ts +0 -289
  395. package/src/Filtered.ts +0 -274
  396. package/src/Model.ts +0 -483
  397. package/src/RefAsyncData.ts +0 -547
  398. package/src/RefAsyncDataArray.ts +0 -135
  399. package/src/RefBoolean.ts +0 -71
  400. package/src/RefNumber.ts +0 -77
  401. package/src/internal/core-ref-subject.ts +0 -528
  402. package/src/internal/core-subject.ts +0 -143
  403. package/src/internal/deferred-ref.ts +0 -26
  404. package/src/internal/effect-primitive.ts +0 -230
  405. package/src/internal/fx-effect-proto.ts +0 -56
  406. package/src/internal/fx-primitive.ts +0 -223
  407. package/src/internal/fx.ts +0 -619
  408. package/src/internal/matchers.ts +0 -83
  409. package/src/internal/run.ts +0 -51
  410. package/src/internal/schema-ref-subject.ts +0 -163
  411. package/src/internal/versioned-transform.ts +0 -48
@@ -1,281 +1,232 @@
1
- import type * as Cause from "effect/Cause"
2
- import * as Effect from "effect/Effect"
3
- import { equals } from "effect/Equal"
4
- import * as Fiber from "effect/Fiber"
5
- import * as MutableHashMap from "effect/MutableHashMap"
6
- import * as Option from "effect/Option"
7
- import * as ReadonlyArray from "effect/ReadonlyArray"
8
- import * as Scope from "effect/Scope"
9
- import type * as Fx from "../Fx.js"
10
- import { fromEffect, type RefSubject } from "../RefSubject.js"
11
- import { WithContext } from "../Sink.js"
12
- import type { Subject } from "../Subject.js"
13
- import { makeHoldSubject } from "./core-subject.js"
14
- import { from, skipRepeatsWith, withScopedFork } from "./core.js"
15
- import { adjustTime } from "./helpers.js"
16
- import { run } from "./run.js"
17
-
18
- export function keyed<R, E, A, B, R2, E2, C>(
19
- fx: Fx.Fx<R, E, ReadonlyArray<A>>,
20
- getKey: (a: A) => B,
21
- f: (fx: RefSubject<never, never, A>, key: B) => Fx.FxInput<R2, E2, C>
22
- ): Fx.Fx<R | R2, E | E2, ReadonlyArray<C>> {
23
- return withScopedFork(({ fork, scope, sink }) =>
24
- Effect.gen(function*($) {
25
- const state = createKeyedState<A, B, C>()
26
- const emit = emitWhenReady(state, getKey)
1
+ import type { FiberId } from "effect"
2
+ import { Context, Effect, ExecutionStrategy, Option, Scope } from "effect"
3
+ import type { Fx, KeyedOptions } from "../Fx.js"
4
+ import * as RefSubject from "../RefSubject.js"
5
+ import * as Sink from "../Sink.js"
6
+ import type { Add, Moved, Remove, Update } from "./diff.js"
7
+ import { diffIterator } from "./diff.js"
8
+ import { withDebounceFork } from "./helpers.js"
9
+ import { FxBase } from "./protos.js"
10
+
11
+ export function keyed<R, E, A, B extends PropertyKey, R2, E2, C>(
12
+ fx: Fx<R, E, ReadonlyArray<A>>,
13
+ options: KeyedOptions<A, B, R2, E2, C>
14
+ ): Fx<R | R2 | Scope.Scope, E | E2, ReadonlyArray<C>> {
15
+ return new Keyed(fx, options)
16
+ }
27
17
 
28
- // Let output emit to the sink, it is closes by the surrounding scope
29
- yield* $(fork(run(skipRepeatsWith(state.output, ReadonlyArray.getEquivalence(equals)), sink)))
18
+ type StateContext<A, C> = {
19
+ entry: KeyedEntry<A, C>
20
+ output: C
21
+ }
30
22
 
31
- yield* $(adjustTime(1))
23
+ const StateContext = Context.Tag<StateContext<any, any>>()
32
24
 
33
- // Listen to the input and update the state
34
- yield* $(
35
- run(
36
- fx,
37
- WithContext(
38
- sink.onFailure,
39
- (as) =>
40
- updateState({
41
- state,
42
- updated: as,
43
- getKey,
44
- f: (ref, key) => from(f(ref, key)),
45
- fork,
46
- scope,
47
- emit,
48
- error: sink.onFailure
49
- })
50
- )
51
- )
52
- )
53
-
54
- yield* $(endAll(state))
25
+ class Keyed<R, E, A, B extends PropertyKey, R2, E2, C> extends FxBase<R | R2 | Scope.Scope, E | E2, ReadonlyArray<C>>
26
+ implements Fx<R | R2 | Scope.Scope, E | E2, ReadonlyArray<C>>
27
+ {
28
+ constructor(
29
+ readonly fx: Fx<R, E, ReadonlyArray<A>>,
30
+ readonly options: KeyedOptions<A, B, R2, E2, C>
31
+ ) {
32
+ super()
33
+ }
55
34
 
56
- // When the source stream ends we wait for the remaining fibers to end
57
- yield* $(Fiber.joinAll(Array.from(state.fibers).map((x) => x[1])))
58
- })
59
- )
35
+ run<R3>(sink: Sink.Sink<R3, E | E2, ReadonlyArray<C>>) {
36
+ return Effect.fiberIdWith((id) => runKeyed(this.fx, this.options, sink, id))
37
+ }
60
38
  }
61
39
 
62
- type KeyedState<A, B, C> = {
63
- previous: ReadonlyArray<A>
64
- previousKeys: ReadonlySet<B>
65
-
66
- readonly subjects: MutableHashMap.MutableHashMap<B, RefSubject<never, never, A>>
67
- readonly initialValues: MutableHashMap.MutableHashMap<B, A>
68
- readonly fibers: MutableHashMap.MutableHashMap<B, Fiber.RuntimeFiber<never, void>>
69
- readonly values: MutableHashMap.MutableHashMap<B, C>
70
- readonly output: Subject<never, never, ReadonlyArray<C>>
40
+ interface KeyedState<A, B extends PropertyKey, C> {
41
+ readonly entries: Map<B, KeyedEntry<A, C>>
42
+ readonly indices: Map<number, B>
43
+ previousKeys: ReadonlyArray<B>
71
44
  }
72
45
 
73
- function createKeyedState<A, B, C>(): KeyedState<A, B, C> {
46
+ function emptyKeyedState<A, B extends PropertyKey, C>(): KeyedState<A, B, C> {
74
47
  return {
75
- previous: [],
76
- previousKeys: new Set(),
77
- subjects: MutableHashMap.empty(),
78
- initialValues: MutableHashMap.empty(),
79
- fibers: MutableHashMap.empty(),
80
- values: MutableHashMap.empty(),
81
- output: makeHoldSubject<never, ReadonlyArray<C>>()
48
+ entries: new Map(),
49
+ indices: new Map(),
50
+ previousKeys: []
82
51
  }
83
52
  }
84
53
 
85
- function updateState<A, B, C, R2, E2, R3>({
86
- emit,
87
- error,
88
- f,
89
- fork,
90
- getKey,
91
- scope,
92
- state,
93
- updated
94
- }: {
95
- state: KeyedState<A, B, C>
96
- updated: ReadonlyArray<A>
97
- f: (fx: RefSubject<never, never, A>, key: B) => Fx.Fx<R2, E2, C>
98
- fork: Fx.ScopedFork
99
- scope: Scope.Scope
100
- emit: Effect.Effect<never, never, void>
101
- error: (e: Cause.Cause<E2>) => Effect.Effect<R3, never, void>
102
- getKey: (a: A) => B
103
- }): Effect.Effect<Exclude<R2 | R3, Scope.Scope>, never, void> {
104
- return Effect.provideService(
105
- Effect.gen(function*($) {
106
- const { added, removed, unchanged } = diffValues(state, updated, getKey)
107
-
108
- // Remove values that are no longer in the stream
109
- yield* $(Effect.forEach(removed, (key) => removeValue(state, key), { discard: true }))
110
-
111
- // Update values that are still in the stream
112
- yield* $(
113
- Effect.forEach(unchanged, (value) => updateValue(state, value, getKey), {
114
- concurrency: "unbounded",
115
- discard: true
54
+ function runKeyed<R, E, A, B extends PropertyKey, R2, E2, C, R3>(
55
+ fx: Fx<R, E, ReadonlyArray<A>>,
56
+ options: KeyedOptions<A, B, R2, E2, C>,
57
+ sink: Sink.Sink<R3, E | E2, ReadonlyArray<C>>,
58
+ id: FiberId.FiberId
59
+ ) {
60
+ return withDebounceFork(
61
+ (forkDebounce, parentScope) => {
62
+ const state = emptyKeyedState<A, B, C>()
63
+ // Uses debounce to avoid glitches
64
+ const scheduleNextEmit = forkDebounce(Effect.suspend(() => sink.onSuccess(getReadyIndices(state))))
65
+
66
+ function diffAndPatch(values: ReadonlyArray<A>) {
67
+ return Effect.gen(function*(_) {
68
+ const previous = state.previousKeys
69
+ const keys = values.map(options.getKey)
70
+ state.previousKeys = keys
71
+
72
+ let added = false
73
+ let done = false
74
+ let scheduled = false
75
+
76
+ for (const patch of diffIterator(previous, keys)) {
77
+ if (patch._tag === "Remove") {
78
+ yield* _(removeValue(state, patch))
79
+ } else if (patch._tag === "Add") {
80
+ added = true
81
+ yield* _(
82
+ addValue(
83
+ state,
84
+ values,
85
+ patch,
86
+ id,
87
+ parentScope,
88
+ options,
89
+ sink,
90
+ Effect.suspend(() => {
91
+ if (done === false) {
92
+ scheduled = true
93
+ return Effect.unit
94
+ }
95
+ return scheduleNextEmit
96
+ })
97
+ )
98
+ )
99
+ } else {
100
+ yield* _(updateValue(state, values, patch))
101
+ }
102
+ }
103
+
104
+ done = true
105
+
106
+ if (scheduled || added === false) {
107
+ yield* _(scheduleNextEmit)
108
+ }
116
109
  })
117
- )
110
+ }
118
111
 
119
- // Add values that are new to the stream
120
- yield* $(
121
- Effect.forEach(added, (value) => addValue({ state, value, f, fork, emit, error, getKey }), {
122
- concurrency: "unbounded",
123
- discard: true
124
- })
112
+ return fx.run(
113
+ Sink.make(
114
+ (cause) => sink.onFailure(cause),
115
+ // Use exhaust to ensure only 1 diff is running at a time
116
+ // Skipping an intermediate changes that occur while diffing
117
+ (values) => Effect.withMaxOpsBeforeYield(diffAndPatch(values), Number.MAX_SAFE_INTEGER)
118
+ )
125
119
  )
126
-
127
- // If nothing was added, emit the current values
128
- if (added.length === 0) {
129
- yield* $(emit)
130
- }
131
- }),
132
- Scope.Scope,
133
- scope
120
+ },
121
+ options.debounce || 0
134
122
  )
135
123
  }
136
124
 
137
- function diffValues<A, B, C>(
138
- state: KeyedState<A, B, C>,
139
- updated: ReadonlyArray<A>,
140
- getKey: (a: A) => B
141
- ) {
142
- const added: Array<A> = []
143
- const unchanged: Array<A> = []
144
- const removed: Array<B> = []
145
- const previousKeys = state.previousKeys
146
- const keys = new Set<B>(updated.map(getKey))
125
+ class KeyedEntry<A, C> {
126
+ constructor(
127
+ public value: A,
128
+ public index: number,
129
+ public output: Option.Option<C>,
130
+ public readonly ref: RefSubject.RefSubject<never, never, A>,
131
+ public readonly interrupt: Effect.Effect<never, never, void>
132
+ ) {}
133
+ }
134
+
135
+ function getReadyIndices<A, B extends PropertyKey, C>(
136
+ { entries, indices, previousKeys }: KeyedState<A, B, C>
137
+ ): ReadonlyArray<C> {
138
+ const output: Array<C> = []
147
139
 
148
- for (let i = 0; i < updated.length; ++i) {
149
- const value = updated[i]
150
- const key = getKey(value)
140
+ for (let i = 0; i < previousKeys.length; ++i) {
141
+ const key = indices.get(i)
151
142
 
152
- if (previousKeys.has(key)) {
153
- unchanged.push(value)
143
+ if (key === undefined) break
144
+
145
+ const entry = entries.get(key)!
146
+ if (Option.isSome(entry.output)) {
147
+ output.push(entry.output.value)
154
148
  } else {
155
- added.push(value)
149
+ break
156
150
  }
157
151
  }
158
152
 
159
- previousKeys.forEach((k) => {
160
- if (!keys.has(k)) {
161
- removed.push(k)
162
- }
163
- })
164
-
165
- state.previous = updated
166
- state.previousKeys = keys
167
-
168
- return {
169
- added,
170
- unchanged,
171
- removed
172
- } as const
153
+ return output
173
154
  }
174
155
 
175
- function removeValue<A, B, C>(state: KeyedState<A, B, C>, key: B) {
176
- return Effect.gen(function*($) {
177
- const subject = MutableHashMap.get(state.subjects, key)
178
-
179
- if (Option.isSome(subject)) yield* $(Effect.fork(subject.value.interrupt))
180
-
181
- const fiber = MutableHashMap.get(state.fibers, key)
182
-
183
- if (Option.isSome(fiber)) yield* $(Fiber.interruptFork(fiber.value))
156
+ function addValue<A, B extends PropertyKey, C, R2, E2, E, R3, D>(
157
+ { entries, indices }: KeyedState<A, B, C>,
158
+ values: ReadonlyArray<A>,
159
+ patch: Add<B>,
160
+ id: FiberId.FiberId,
161
+ parentScope: Scope.Scope,
162
+ options: KeyedOptions<A, B, R2, E2, C>,
163
+ sink: Sink.Sink<R2 | R3, E | E2, ReadonlyArray<C>>,
164
+ scheduleNextEmit: Effect.Effect<R3, never, D>
165
+ ) {
166
+ return Effect.gen(function*(_) {
167
+ const value = values[patch.index]
168
+ const childScope = yield* _(Scope.fork(parentScope, ExecutionStrategy.sequential))
169
+ const ref: RefSubject.RefSubject<never, never, A> = yield* _(RefSubject.unsafeMake<never, A>({
170
+ initial: Effect.sync(() => entry.value),
171
+ initialValue: value,
172
+ scope: childScope,
173
+ id
174
+ }))
175
+
176
+ const entry = new KeyedEntry<A, C>(
177
+ value,
178
+ patch.index,
179
+ Option.none(),
180
+ ref,
181
+ ref.interrupt
182
+ )
184
183
 
185
- MutableHashMap.remove(state.values, key)
186
- MutableHashMap.remove(state.subjects, key)
187
- MutableHashMap.remove(state.fibers, key)
188
- })
189
- }
184
+ entries.set(patch.value, entry)
185
+ indices.set(patch.index, patch.value)
190
186
 
191
- function addValue<A, B, C, R2, E2, R3>({
192
- emit,
193
- error,
194
- f,
195
- fork,
196
- getKey,
197
- state,
198
- value
199
- }: {
200
- state: KeyedState<A, B, C>
201
- value: A
202
- f: (fx: RefSubject<never, never, A>, key: B) => Fx.Fx<R2, E2, C>
203
- fork: Fx.ScopedFork
204
- emit: Effect.Effect<never, never, void>
205
- error: (e: Cause.Cause<E2>) => Effect.Effect<R3, never, void>
206
- getKey: (a: A) => B
207
- }) {
208
- return Effect.uninterruptible(Effect.suspend(() => {
209
- const key = getKey(value)
187
+ yield* _(Scope.addFinalizer(childScope, ref.interrupt))
210
188
 
211
- // Set the initial value
212
- MutableHashMap.set(state.initialValues, key, value)
189
+ yield* _(
190
+ Effect.forkIn(
191
+ options.onValue(ref, patch.value).run(Sink.make(
192
+ (cause) => sink.onFailure(cause),
193
+ (output) => {
194
+ entry.output = Option.some(output)
213
195
 
214
- return fromEffect<never, never, A>(
215
- Effect.sync(() =>
216
- // Default to the initial value
217
- MutableHashMap.get(state.initialValues, key).pipe(Option.getOrElse(() => value))
218
- )
219
- ).pipe(
220
- Effect.flatMap((subject) =>
221
- fork(
222
- run(
223
- f(subject, key),
224
- WithContext(
225
- error,
226
- (c: C) =>
227
- Effect.suspend(() => {
228
- MutableHashMap.set(state.values, key, c)
229
- return emit
230
- })
231
- )
232
- )
233
- ).pipe(
234
- Effect.tap((fiber) =>
235
- Effect.sync(() => {
236
- MutableHashMap.set(state.subjects, key, subject)
237
- MutableHashMap.set(state.fibers, key, fiber)
238
- })
239
- )
240
- )
196
+ return scheduleNextEmit
197
+ }
198
+ )),
199
+ parentScope
241
200
  )
242
201
  )
243
- }))
244
- }
245
-
246
- function updateValue<A, B, C>(state: KeyedState<A, B, C>, value: A, getKey: (a: A) => B) {
247
- return Effect.gen(function*($) {
248
- const key = getKey(value)
249
- const subject = MutableHashMap.get(state.subjects, key)
250
-
251
- // External updates reset the initial value
252
- MutableHashMap.set(state.initialValues, key, value)
253
-
254
- // Send the current value
255
- if (Option.isSome(subject)) {
256
- yield* $(subject.value.set(value))
257
- }
258
202
  })
259
203
  }
260
204
 
261
- function emitWhenReady<A, B, C>(state: KeyedState<A, B, C>, getKey: (a: A) => B) {
262
- return Effect.suspend(() => {
263
- // Fast path: if we don't have enough values, don't emit
264
- if (MutableHashMap.size(state.values) !== state.previous.length) {
265
- return Effect.unit
266
- }
205
+ function removeValue<A, B extends PropertyKey, C>({ entries, indices }: KeyedState<A, B, C>, patch: Remove<B>) {
206
+ const interrupt = entries.get(patch.value)!.interrupt
207
+ entries.delete(patch.value)
208
+ indices.delete(patch.index)
209
+ return interrupt
210
+ }
267
211
 
268
- const values = ReadonlyArray.filterMap(state.previous, (value) => MutableHashMap.get(state.values, getKey(value)))
212
+ function updateValue<A, B extends PropertyKey, C>(
213
+ { entries, indices }: KeyedState<A, B, C>,
214
+ values: ReadonlyArray<A>,
215
+ patch: Update<B> | Moved<B>
216
+ ) {
217
+ const key = patch.value
218
+ const entry = entries.get(key)!
269
219
 
270
- // When all of the values have resolved at least once, emit the output
271
- if (values.length === state.previous.length) {
272
- return state.output.onSuccess(values)
220
+ if (patch._tag === "Moved") {
221
+ const currentKey = indices.get(patch.index)
222
+ if (currentKey === key) {
223
+ indices.delete(patch.index)
273
224
  }
225
+ indices.set(patch.to, key)
226
+ entry.value = values[entry.index = patch.to]
227
+ } else {
228
+ entry.value = values[entry.index = patch.index]
229
+ }
274
230
 
275
- return Effect.unit
276
- })
277
- }
278
-
279
- function endAll<A, B, C>(state: KeyedState<A, B, C>) {
280
- return Effect.forEach(state.subjects, ([, subject]) => subject.interrupt, { concurrency: "unbounded" })
231
+ return RefSubject.set(entry.ref, entry.value)
281
232
  }