@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
@@ -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
  }