@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,19 +1,19 @@
1
+ import { ExecutionStrategy, type Scope } from "effect"
1
2
  import * as Effect from "effect/Effect"
2
3
  import * as Fiber from "effect/Fiber"
3
4
  import { dual } from "effect/Function"
4
5
  import * as MutableRef from "effect/MutableRef"
5
6
  import * as Option from "effect/Option"
6
7
  import type { Fx } from "../Fx.js"
7
- import type { Subject } from "../Subject.js"
8
- import { makeHoldSubject, makeReplaySubject, makeSubject } from "./core-subject.js"
9
- import { withScopedFork } from "./core.js"
10
- import { ToFx } from "./fx-primitive.js"
11
- import { run } from "./run.js"
8
+ import type { Sink } from "../Sink.js"
9
+ import * as Subject from "../Subject.js"
10
+ import { withScopedFork } from "./helpers.js"
11
+ import { FxBase } from "./protos.js"
12
12
 
13
13
  export function share<R, E, A, R2>(
14
14
  fx: Fx<R, E, A>,
15
- subject: Subject<R2, E, A>
16
- ): Fx<R | R2, E, A> {
15
+ subject: Subject.Subject<R2, E, A>
16
+ ): Fx<R | R2 | Scope.Scope, E, A> {
17
17
  return new Share(fx, subject)
18
18
  }
19
19
 
@@ -29,32 +29,34 @@ class RefCounter {
29
29
  }
30
30
  }
31
31
 
32
- export class Share<R, E, A, R2> extends ToFx<R | R2, E, A> {
32
+ export class Share<R, E, A, R2> extends FxBase<R | R2 | Scope.Scope, E, A> {
33
33
  _FxFiber: MutableRef.MutableRef<Option.Option<Fiber.Fiber<never, unknown>>> = MutableRef.make(Option.none())
34
34
  _RefCount = new RefCounter()
35
35
 
36
36
  constructor(
37
37
  readonly i0: Fx<R, E, A>,
38
- readonly i1: Subject<R2, E, A>
38
+ readonly i1: Subject.Subject<R2, E, A>
39
39
  ) {
40
- super(i0, i1)
40
+ super()
41
41
  }
42
42
 
43
- toFx(): Fx<R | R2, E, A> {
44
- return withScopedFork(({ fork, sink }) =>
45
- Effect.flatMap(
46
- fork(
47
- Effect.onExit(run(this.i1, sink), () => this._RefCount.decrement() === 0 ? this.interrupt() : Effect.unit)
43
+ run<R3>(sink: Sink<R3, E, A>): Effect.Effect<R | R2 | R3 | Scope.Scope, never, unknown> {
44
+ return withScopedFork(
45
+ (fork) =>
46
+ Effect.flatMap(
47
+ fork(
48
+ Effect.onExit(this.i1.run(sink), () => this._RefCount.decrement() === 0 ? this.interrupt() : Effect.unit)
49
+ ),
50
+ () => this.initialize()
48
51
  ),
49
- () => this.initialize()
50
- )
52
+ ExecutionStrategy.sequential
51
53
  )
52
54
  }
53
55
 
54
56
  private initialize(): Effect.Effect<R | R2, never, unknown> {
55
57
  return Effect.suspend(() => {
56
58
  if (this._RefCount.increment() === 1) {
57
- return run(this.i0, this.i1).pipe(
59
+ return this.i0.run(this.i1).pipe(
58
60
  Effect.onExit(() => Effect.sync(() => MutableRef.set(this._FxFiber, Option.none()))),
59
61
  Effect.interruptible,
60
62
  Effect.forkDaemon,
@@ -84,14 +86,14 @@ export class Share<R, E, A, R2> extends ToFx<R | R2, E, A> {
84
86
 
85
87
  export function multicast<R, E, A>(
86
88
  fx: Fx<R, E, A>
87
- ): Fx<R, E, A> {
88
- return new Share(fx, makeSubject<E, A>())
89
+ ): Fx<R | Scope.Scope, E, A> {
90
+ return new Share(fx, Subject.unsafeMake<E, A>(0))
89
91
  }
90
92
 
91
93
  export function hold<R, E, A>(
92
94
  fx: Fx<R, E, A>
93
- ): Fx<R, E, A> {
94
- return new Share(fx, makeHoldSubject<E, A>())
95
+ ): Fx<R | Scope.Scope, E, A> {
96
+ return new Share(fx, Subject.unsafeMake<E, A>(1))
95
97
  }
96
98
 
97
99
  export const replay: {
@@ -100,6 +102,6 @@ export const replay: {
100
102
  } = dual(2, function replay<R, E, A>(
101
103
  fx: Fx<R, E, A>,
102
104
  capacity: number
103
- ): Fx<R, E, A> {
104
- return new Share(fx, makeReplaySubject<E, A>(capacity))
105
+ ): Fx<R | Scope.Scope, E, A> {
106
+ return new Share(fx, Subject.unsafeMake<E, A>(capacity))
105
107
  })
@@ -1,6 +1,10 @@
1
+ import * as ReadonlyArray from "effect/ReadonlyArray"
2
+
1
3
  import * as Effect from "effect/Effect"
4
+ import { flow } from "effect/Function"
2
5
  import * as Option from "effect/Option"
3
- import { WithContext } from "../Sink.js"
6
+ import * as Sink from "../Sink.js"
7
+ import * as SyncProducer from "./sync-producer.js"
4
8
 
5
9
  // Sync operators are a subset of operators which can be safely fused together synchronously
6
10
 
@@ -41,13 +45,13 @@ type SyncOperatorFusionMap = {
41
45
 
42
46
  const SyncOperatorFusionMap: SyncOperatorFusionMap = {
43
47
  Map: {
44
- Map: (op1, op2) => Map((a: any) => op2.f(op1.f(a))),
48
+ Map: (op1, op2) => Map(flow(op1.f, op2.f)),
45
49
  Filter: (op1, op2) =>
46
50
  FilterMap((a: any) => {
47
51
  const b = op1.f(a)
48
52
  return op2.f(b) ? Option.some(b) : Option.none()
49
53
  }),
50
- FilterMap: (op1, op2) => FilterMap((a: any) => op2.f(op1.f(a)))
54
+ FilterMap: (op1, op2) => FilterMap(flow(op1.f, op2.f))
51
55
  },
52
56
  Filter: {
53
57
  Map: (op1, op2) => FilterMap((a: any) => op1.f(a) ? Option.some(op2.f(a)) : Option.none()),
@@ -71,41 +75,29 @@ export function matchSyncOperator<A>(operator: SyncOperator, matchers: {
71
75
  readonly Filter: (f: Filter<any>) => A
72
76
  readonly FilterMap: (f: FilterMap<any, any>) => A
73
77
  }): A {
74
- switch (operator._tag) {
75
- case "Map":
76
- return matchers.Map(operator)
77
- case "Filter":
78
- return matchers.Filter(operator)
79
- case "FilterMap":
80
- return matchers.FilterMap(operator)
81
- }
78
+ return matchers[operator._tag](operator as any)
82
79
  }
83
80
 
84
81
  export function compileSyncOperatorSink<R>(
85
82
  operator: SyncOperator,
86
- sink: WithContext<R, any, any>
87
- ): WithContext<R, any, any> {
83
+ sink: Sink.Sink<R, any, any>
84
+ ): Sink.Sink<R, any, any> {
88
85
  return matchSyncOperator(operator, {
89
- Map: (op) => WithContext(sink.onFailure, (a) => sink.onSuccess(op.f(a))),
90
- Filter: (op) => WithContext(sink.onFailure, (a) => op.f(a) ? sink.onSuccess(a) : Effect.unit),
91
- FilterMap: (op) =>
92
- WithContext(sink.onFailure, (a) =>
93
- Option.match(op.f(a), {
94
- onNone: () => Effect.unit,
95
- onSome: sink.onSuccess
96
- }))
86
+ Map: (op) => Sink.map(sink, op.f),
87
+ Filter: (op) => Sink.filter(sink, op.f),
88
+ FilterMap: (op) => Sink.filterMap(sink, op.f)
97
89
  })
98
90
  }
99
91
 
100
- export function compileSyncOperatorFailureSink<R>(
92
+ export function compileCauseSyncOperatorSink<R>(
101
93
  operator: SyncOperator,
102
- sink: WithContext<R, any, any>
103
- ): WithContext<R, any, any> {
94
+ sink: Sink.Sink<R, any, any>
95
+ ): Sink.Sink<R, any, any> {
104
96
  return matchSyncOperator(operator, {
105
- Map: (op) => WithContext((a) => sink.onFailure(op.f(a)), sink.onSuccess),
106
- Filter: (op) => WithContext((a) => op.f(a) ? sink.onFailure(a) : Effect.unit, sink.onSuccess),
97
+ Map: (op) => Sink.make((a) => sink.onFailure(op.f(a)), sink.onSuccess),
98
+ Filter: (op) => Sink.make((a) => op.f(a) ? sink.onFailure(a) : Effect.unit, sink.onSuccess),
107
99
  FilterMap: (op) =>
108
- WithContext((a) =>
100
+ Sink.make((a) =>
109
101
  Option.match(op.f(a), {
110
102
  onNone: () => Effect.unit,
111
103
  onSome: sink.onFailure
@@ -123,3 +115,52 @@ export function compileSyncReducer<A, B, C>(
123
115
  FilterMap: (op) => (b, i) => Option.map(op.f(i), (a) => f(b, a))
124
116
  })
125
117
  }
118
+
119
+ export function applyArray<A, B>(array: ReadonlyArray<A>, operator: SyncOperator): ReadonlyArray<B> {
120
+ return matchSyncOperator(operator, {
121
+ Map: (op) => ReadonlyArray.map(array, op.f),
122
+ Filter: (op) => ReadonlyArray.filter(array, op.f),
123
+ FilterMap: (op) => ReadonlyArray.filterMap(array, op.f)
124
+ })
125
+ }
126
+
127
+ export function applyArrayReducer<A, B>(
128
+ array: Iterable<any>,
129
+ operator: SyncOperator,
130
+ seed: B,
131
+ f: (acc: B, a: A) => B
132
+ ): B {
133
+ return matchSyncOperator(operator, {
134
+ Map: (op) => ReadonlyArray.reduce(array, seed, (b, a) => f(b, op.f(a))),
135
+ Filter: (op) => ReadonlyArray.reduce(array, seed, (b, a) => op.f(a) ? f(b, a) : b),
136
+ FilterMap: (op) =>
137
+ ReadonlyArray.reduce(array, seed, (b, a) => {
138
+ const o = op.f(a)
139
+ if (Option.isSome(o)) return f(b, o.value)
140
+ else return b
141
+ })
142
+ })
143
+ }
144
+
145
+ export function runSyncReduce<A, B>(
146
+ producer: SyncProducer.SyncProducer<A>,
147
+ op: SyncOperator,
148
+ seed: B,
149
+ f: (acc: B, a: any) => B
150
+ ): B {
151
+ return SyncProducer.matchSyncProducer(producer, {
152
+ Success: (a) =>
153
+ matchSyncOperator(op, {
154
+ Map: (op) => f(seed, op.f(a)),
155
+ Filter: (op) => op.f(a) ? f(seed, a) : seed,
156
+ FilterMap: (op) =>
157
+ Option.match(op.f(a), {
158
+ onNone: () => seed,
159
+ onSome: (a) => f(seed, a)
160
+ })
161
+ }),
162
+ FromSync: (g) => f(seed, g()),
163
+ FromArray: (array) => applyArrayReducer(array, op, seed, f),
164
+ FromIterable: (iterable) => applyArrayReducer(iterable, op, seed, f)
165
+ })
166
+ }
@@ -0,0 +1,146 @@
1
+ import { Effect, Option, ReadonlyArray } from "effect"
2
+ import type { Sink } from "../Sink.js"
3
+
4
+ const DISCARD = { discard: true } as const
5
+
6
+ export type SyncProducer<A> = Success<A> | FromSync<A> | FromArray<A> | FromIterable<A>
7
+
8
+ export interface Success<A> {
9
+ readonly _tag: "Success"
10
+ readonly source: A
11
+ }
12
+
13
+ export const Success = <A>(value: A): Success<A> => ({ _tag: "Success", source: value })
14
+
15
+ export interface FromSync<A> {
16
+ readonly _tag: "FromSync"
17
+ readonly source: () => A
18
+ }
19
+
20
+ export const FromSync = <A>(f: () => A): FromSync<A> => ({ _tag: "FromSync", source: f })
21
+
22
+ export interface FromArray<A> {
23
+ readonly _tag: "FromArray"
24
+ readonly source: ReadonlyArray<A>
25
+ }
26
+
27
+ export const FromArray = <A>(array: ReadonlyArray<A>): FromArray<A> => ({ _tag: "FromArray", source: array })
28
+
29
+ export interface FromIterable<A> {
30
+ readonly _tag: "FromIterable"
31
+ readonly source: Iterable<A>
32
+ }
33
+
34
+ export const FromIterable = <A>(iterable: Iterable<A>): FromIterable<A> => ({ _tag: "FromIterable", source: iterable })
35
+
36
+ export const matchSyncProducer = <A, R>(
37
+ producer: SyncProducer<A>,
38
+ matchers: {
39
+ readonly Success: (a: A) => R
40
+ readonly FromSync: (a: () => A) => R
41
+ readonly FromArray: (a: ReadonlyArray<A>) => R
42
+ readonly FromIterable: (a: Iterable<A>) => R
43
+ }
44
+ ): R => {
45
+ return matchers[producer._tag](producer.source as any)
46
+ }
47
+
48
+ export function runSink<A, R, E>(
49
+ producer: SyncProducer<A>,
50
+ sink: Sink<R, E, A>
51
+ ): Effect.Effect<R, never, unknown> {
52
+ return matchSyncProducer(producer, {
53
+ Success: (a) => sink.onSuccess(a),
54
+ FromSync: (a) => Effect.suspend(() => sink.onSuccess(a())),
55
+ FromArray: (a) => arrayToSink(a, sink),
56
+ FromIterable: (a) => iterableToSink(a, sink)
57
+ })
58
+ }
59
+
60
+ export function runReduce<A, B>(
61
+ producer: SyncProducer<A>,
62
+ initial: B,
63
+ f: (b: B, a: any) => B
64
+ ): Effect.Effect<never, never, B> {
65
+ return matchSyncProducer(producer, {
66
+ Success: (a) => syncOnce(() => f(initial, a)),
67
+ FromSync: (a) => syncOnce(() => f(initial, a())),
68
+ FromArray: (a) => syncOnce(() => ReadonlyArray.reduce(a, initial, f)),
69
+ FromIterable: (a) => syncOnce(() => ReadonlyArray.reduce(a, initial, f))
70
+ })
71
+ }
72
+
73
+ export function runReduceEffect<A, R2, E2, B>(
74
+ producer: SyncProducer<A>,
75
+ initial: B,
76
+ f: (b: B, a: any) => Effect.Effect<R2, E2, B>
77
+ ): Effect.Effect<R2, E2, B> {
78
+ return matchSyncProducer(producer, {
79
+ Success: (a) => effectOnce(() => f(initial, a)),
80
+ FromSync: (a) => Effect.suspend(() => f(initial, a())),
81
+ FromArray: (a) => Effect.reduce(a, initial, f),
82
+ FromIterable: (a) => Effect.reduce(a, initial, f)
83
+ })
84
+ }
85
+
86
+ function arrayToSink<A, R2>(array: ReadonlyArray<A>, sink: Sink<R2, never, A>): Effect.Effect<R2, never, unknown> {
87
+ if (array.length === 0) return Effect.unit
88
+ else if (array.length === 1) return sink.onSuccess(array[0])
89
+ else {
90
+ const [first, ...rest] = array
91
+ let effect = sink.onSuccess(first)
92
+ for (const item of rest) {
93
+ effect = Effect.zipRight(effect, sink.onSuccess(item))
94
+ }
95
+ return effect
96
+ }
97
+ }
98
+
99
+ function iterableToSink<A, R2>(array: Iterable<A>, sink: Sink<R2, never, A>): Effect.Effect<R2, never, unknown> {
100
+ let effect: Effect.Effect<R2, never, any> = Effect.unit
101
+
102
+ for (const item of array) {
103
+ effect = Effect.zipRight(effect, sink.onSuccess(item))
104
+ }
105
+
106
+ return effect
107
+ }
108
+
109
+ export const syncOnce = <A>(f: () => A): Effect.Effect<never, never, A> => {
110
+ let memoized: Option.Option<A> = Option.none()
111
+ const get = () => {
112
+ if (Option.isSome(memoized)) {
113
+ return memoized.value
114
+ } else {
115
+ const a = f()
116
+ memoized = Option.some(a)
117
+ return a
118
+ }
119
+ }
120
+
121
+ return Effect.sync(get)
122
+ }
123
+
124
+ export const effectOnce = <R, E, A>(f: () => Effect.Effect<R, E, A>): Effect.Effect<R, E, A> => {
125
+ let memoized: Option.Option<A> = Option.none()
126
+
127
+ return Effect.suspend(() => {
128
+ if (Option.isSome(memoized)) {
129
+ return Effect.succeed(memoized.value)
130
+ } else {
131
+ return Effect.tap(f(), (a) => Effect.sync(() => memoized = Option.some(a)))
132
+ }
133
+ })
134
+ }
135
+
136
+ export function runEffect<A, R2, E2, B>(
137
+ producer: SyncProducer<A>,
138
+ f: (a: A) => Effect.Effect<R2, E2, B>
139
+ ): Effect.Effect<R2, E2, void> {
140
+ return matchSyncProducer(producer, {
141
+ Success: (a): Effect.Effect<R2, E2, void> => f(a),
142
+ FromSync: (a) => Effect.suspend(() => f(a())),
143
+ FromArray: (a) => Effect.forEach(a, f, DISCARD),
144
+ FromIterable: (a) => Effect.forEach(a, f, DISCARD)
145
+ })
146
+ }
@@ -1,92 +1,82 @@
1
1
  import * as Effect from "effect/Effect"
2
- import { equals } from "effect/Equal"
3
- import * as Fiber from "effect/Fiber"
2
+ import * as ExecutionStrategy from "effect/ExecutionStrategy"
4
3
  import * as Option from "effect/Option"
5
- import * as Scope from "effect/Scope"
6
- import type { Fx, FxInput } from "../Fx.js"
4
+ import type * as Scope from "effect/Scope"
5
+
6
+ import type { Fx, WithKeyOptions } from "../Fx.js"
7
7
  import * as RefSubject from "../RefSubject.js"
8
8
  import * as Sink from "../Sink.js"
9
- import * as core from "./core.js"
10
- import { adjustTime } from "./helpers.js"
11
- import { run } from "./run.js"
9
+ import { withSwitchFork } from "./helpers.js"
10
+ import { FxBase } from "./protos.js"
12
11
 
13
- export function withKey<R, E, A, B, R2, E2, C>(
12
+ export function withKey<R, E, A, B extends PropertyKey, R2, E2, C>(
14
13
  fx: Fx<R, E, A>,
15
- getKey: (a: A) => B,
16
- onValue: (ref: RefSubject.RefSubject<never, never, A>, key: B) => FxInput<R2, E2, C>
17
- ): Fx<R | R2, E | E2, C> {
18
- return core.withScopedFork(({ fork, scope, sink }) =>
19
- Effect.gen(function*(_) {
20
- let current: Option.Option<
21
- [B, { value: A }, RefSubject.RefSubject<never, never, A>, Fiber.Fiber<never, unknown>]
22
- > = Option.none()
14
+ options: WithKeyOptions<A, B, R2, E2, C>
15
+ ): Fx<R | R2 | Scope.Scope, E | E2, C> {
16
+ return new WithKey(fx, options)
17
+ }
18
+
19
+ class WithKey<R, E, A, B extends PropertyKey, R2, E2, C> extends FxBase<R | R2 | Scope.Scope, E | E2, C> {
20
+ constructor(readonly fx: Fx<R, E, A>, readonly options: WithKeyOptions<A, B, R2, E2, C>) {
21
+ super()
22
+ }
23
23
 
24
- const lock = (yield* _(Effect.makeSemaphore(1))).withPermits(1)
24
+ run<R3>(sink: Sink.Sink<R3, E | E2, C>) {
25
+ return runWithKey(this.fx, this.options, sink)
26
+ }
27
+ }
25
28
 
26
- const make = (a: A) =>
27
- Effect.uninterruptibleMask((restore) =>
28
- Effect.gen(function*(_) {
29
- const key = getKey(a)
30
- // We use a simple mutable object to track the current value
31
- // of the state coming from the "outside", such that any internal
32
- // usage of RefSubject.delete will reset to the latest value emitted
33
- // from here.
34
- const currentValue = { value: a }
35
- const ref = yield* _(
36
- RefSubject.fromEffect(Effect.sync(() => currentValue.value)),
37
- Effect.provideService(Scope.Scope, scope)
38
- )
39
- const fiber = yield* _(
40
- run(core.from(onValue(ref, key)), sink),
41
- restore,
42
- fork
43
- )
29
+ function runWithKey<R, E, A, B extends PropertyKey, R2, E2, C, R3>(
30
+ fx: Fx<R, E, A>,
31
+ options: WithKeyOptions<A, B, R2, E2, C>,
32
+ sink: Sink.Sink<R3, E | E2, C>
33
+ ) {
34
+ return withSwitchFork((fork) => {
35
+ let previous: Option.Option<WithKeyState<A, B>> = Option.none()
44
36
 
45
- // Save our state
46
- current = Option.some([key, currentValue, ref, fiber])
37
+ const run = fx.run(Sink.make(
38
+ (cause) => sink.onFailure(cause),
39
+ (value) =>
40
+ Effect.gen(function*(_) {
41
+ const key = options.getKey(value)
47
42
 
48
- // Allow our Fibers to start
49
- yield* _(adjustTime(1))
50
- })
51
- )
43
+ // We don't need to do anything if the key is the same as the previous one
44
+ if (Option.isSome(previous)) {
45
+ const prev = previous.value
52
46
 
53
- yield* _(run(
54
- fx,
55
- Sink.WithContext(
56
- sink.onFailure,
57
- (a) =>
58
- lock(Effect.gen(function*(_) {
59
- if (Option.isNone(current)) {
60
- yield _(make(a))
61
- } else {
62
- const [key, currentValue, ref, fiber] = current.value
47
+ // If the key is the same, we just need to update the value
48
+ if (prev.key === key) {
49
+ prev.value = value
50
+ yield* _(RefSubject.set(prev.ref, value))
51
+ return
52
+ } else {
53
+ // Otherwise, we need to remove the previous value
54
+ yield* _(prev.ref.interrupt)
55
+ }
56
+ }
63
57
 
64
- if (equals(key, getKey(a))) {
65
- // Key didn't change, so we just set an updated value.
58
+ const ref = yield* _(RefSubject.fromEffect(Effect.sync(() => state.value)))
66
59
 
67
- currentValue.value = a
68
- yield* _(ref.set(a))
69
- } else {
70
- // Cleanup previous resources
71
- yield* _(Fiber.interrupt(fiber))
60
+ // Create a new state
61
+ const state: WithKeyState<A, B> = {
62
+ value,
63
+ key,
64
+ ref
65
+ }
72
66
 
73
- // Create a new RefSubject
74
- yield* _(make(a))
75
- }
76
- }
77
- }))
78
- )
79
- ))
67
+ previous = Option.some(state)
80
68
 
81
- if (Option.isSome(current)) {
82
- const [, , ref, fiber] = current.value
69
+ // Create a new listener
70
+ yield* _(fork(options.onValue(state.ref, state.key).run(sink)))
71
+ })
72
+ ))
83
73
 
84
- // Signal there will be no more input events
85
- yield* _(fork(ref.interrupt))
74
+ return Effect.flatMap(run, () => Option.isSome(previous) ? previous.value.ref.interrupt : Effect.unit)
75
+ }, ExecutionStrategy.sequential)
76
+ }
86
77
 
87
- // Wait for the last Fiber to complete
88
- yield* _(Effect.fromFiber(fiber))
89
- }
90
- })
91
- )
78
+ type WithKeyState<A, B> = {
79
+ value: A
80
+ key: B
81
+ ref: RefSubject.RefSubject<never, never, A>
92
82
  }
@@ -1,115 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Computed = Computed;
7
- exports.combine = combine;
8
- exports.provide = exports.fromTag = void 0;
9
- exports.struct = struct;
10
- var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
11
- var _Equal = /*#__PURE__*/require("effect/Equal");
12
- var _Function = /*#__PURE__*/require("effect/Function");
13
- var Option = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Option"));
14
- var _Filtered = /*#__PURE__*/require("./Filtered.js");
15
- var core = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./internal/core.js"));
16
- var _fx = /*#__PURE__*/require("./internal/fx.js");
17
- var _protos = /*#__PURE__*/require("./internal/protos.js");
18
- var _share = /*#__PURE__*/require("./internal/share.js");
19
- var _versionedTransform = /*#__PURE__*/require("./internal/versioned-transform.js");
20
- var _TypeId = /*#__PURE__*/require("./TypeId.js");
21
- var Versioned = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Versioned.js"));
22
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
23
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
24
- /**
25
- * A Computed is a Subject that has a current value that can be read and observed
26
- * @since 1.18.0
27
- */
28
-
29
- // eslint-disable-next-line import/no-cycle
30
-
31
- /**
32
- * Create a Computed from a data type which is an Fx and an Effect.
33
- * @since 1.18.0
34
- */
35
- function Computed(input, f) {
36
- return new ComputedImpl(input, f);
37
- }
38
- class ComputedImpl extends _versionedTransform.VersionedTransform {
39
- input;
40
- f;
41
- [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
42
- constructor(input, f) {
43
- super(input, fx => {
44
- const computed = core.skipRepeats(core.mapEffect(fx, f));
45
- return core.suspend(() => {
46
- if (Option.isSome(this._currentValue)) {
47
- return core.startWith(computed, this._currentValue.value);
48
- } else {
49
- return computed;
50
- }
51
- });
52
- }, Effect.flatMap(f));
53
- this.input = input;
54
- this.f = f;
55
- }
56
- mapEffect = f => Computed(this, f);
57
- map = f => this.mapEffect(a => Effect.sync(() => f(a)));
58
- filterMapEffect = f => (0, _Filtered.Filtered)(this, f);
59
- filterMap = f => this.filterMapEffect(a => Effect.sync(() => f(a)));
60
- filterEffect = f => this.filterMapEffect(a => Effect.map(f(a), b => b ? Option.some(a) : Option.none()));
61
- filter = f => this.filterEffect(a => Effect.sync(() => f(a)));
62
- skipRepeats = (eq = _Equal.equals) => Computed(Versioned.transformFx(this, core.skipRepeatsWith(eq)), Effect.succeed);
63
- }
64
- /**
65
- * @since 1.18.0
66
- */
67
- function combine(computeds) {
68
- return Computed(Versioned.combine(computeds), Effect.succeed);
69
- }
70
- /**
71
- * @since 1.18.0
72
- */
73
- function struct(computeds) {
74
- return Computed(Versioned.struct(computeds), Effect.succeed);
75
- }
76
- /**
77
- * @since 1.18.0
78
- */
79
- const fromTag = exports.fromTag = /*#__PURE__*/(0, _Function.dual)(2, function fromTag(tag, f) {
80
- return new ContextImpl(tag, f);
81
- });
82
- class ContextImpl extends _protos.FxEffectBase {
83
- tag;
84
- f;
85
- [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
86
- _computed;
87
- version;
88
- constructor(tag, f) {
89
- super();
90
- this.tag = tag;
91
- this.f = f;
92
- this._computed = Effect.map(this.tag, this.f);
93
- this.version = Effect.flatMap(this._computed, c => c.version);
94
- }
95
- toFx() {
96
- return (0, _share.hold)((0, _fx.fromFxEffect)(this._computed));
97
- }
98
- toEffect() {
99
- return Effect.flatten(this._computed);
100
- }
101
- mapEffect = f => Computed(this, f);
102
- map = f => this.mapEffect(a => Effect.sync(() => f(a)));
103
- filterMapEffect = f => (0, _Filtered.Filtered)(this, f);
104
- filterMap = f => this.filterMapEffect(a => Effect.sync(() => f(a)));
105
- filterEffect = f => this.filterMapEffect(a => Effect.map(f(a), b => b ? Option.some(a) : Option.none()));
106
- filter = f => this.filterEffect(a => Effect.sync(() => f(a)));
107
- skipRepeats = (eq = _Equal.equals) => new ContextImpl(this.tag, s => this.f(s).skipRepeats(eq));
108
- }
109
- /**
110
- * @since 1.18.0
111
- */
112
- const provide = exports.provide = /*#__PURE__*/(0, _Function.dual)(2, function provide(computed, layer) {
113
- return Computed(Versioned.provide(computed, layer), Effect.succeed);
114
- });
115
- //# sourceMappingURL=Computed.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Computed.js","names":["Effect","_interopRequireWildcard","require","_Equal","_Function","Option","_Filtered","core","_fx","_protos","_share","_versionedTransform","_TypeId","Versioned","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","Computed","input","f","ComputedImpl","VersionedTransform","ComputedTypeId","constructor","fx","computed","skipRepeats","mapEffect","suspend","isSome","_currentValue","startWith","value","flatMap","map","sync","filterMapEffect","Filtered","filterMap","filterEffect","b","some","none","filter","eq","equals","transformFx","skipRepeatsWith","succeed","combine","computeds","struct","fromTag","exports","dual","tag","ContextImpl","FxEffectBase","_computed","version","c","toFx","hold","fromFxEffect","toEffect","flatten","s","provide","layer"],"sources":["../../src/Computed.ts"],"sourcesContent":[null],"mappings":"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"}