@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
@@ -0,0 +1,447 @@
1
+ /**
2
+ * AsyncData integrations with Fx.
3
+ * @since 1.20.0
4
+ */
5
+
6
+ import * as AsyncData from "@typed/async-data/AsyncData"
7
+ import type { Progress } from "@typed/async-data/Progress"
8
+ import * as Cause from "effect/Cause"
9
+ import type * as Duration from "effect/Duration"
10
+ import * as Effect from "effect/Effect"
11
+ import * as Either from "effect/Either"
12
+ import type * as Exit from "effect/Exit"
13
+ import { dual } from "effect/Function"
14
+ import * as Option from "effect/Option"
15
+ import type * as Scope from "effect/Scope"
16
+ import * as Fx from "./Fx.js"
17
+ import { keyed } from "./internal/keyed.js"
18
+ import * as RefSubject from "./RefSubject.js"
19
+ import * as Sink from "./Sink.js"
20
+ import { RefSubjectTypeId } from "./TypeId.js"
21
+
22
+ /**
23
+ * @since 1.20.0
24
+ */
25
+ export function asyncDataRequest<R, E, A>(effect: Effect.Effect<R, E, A>): Fx.Fx<R, never, AsyncData.AsyncData<E, A>> {
26
+ return Fx.make((sink) =>
27
+ Effect.flatMap(
28
+ Effect.zipRight(sink.onSuccess(AsyncData.loading()), Effect.exit(effect)),
29
+ (exit) => sink.onSuccess(AsyncData.fromExit(exit))
30
+ )
31
+ )
32
+ }
33
+
34
+ /**
35
+ * @since 1.20.0
36
+ */
37
+ export interface RefAsyncData<R, E, A> extends RefSubject.RefSubject<R, never, AsyncData.AsyncData<E, A>> {}
38
+
39
+ /**
40
+ * @since 1.20.0
41
+ */
42
+ export const runAsyncData: {
43
+ <R2, E, A>(
44
+ effect: Effect.Effect<R2, E, A>
45
+ ): <R>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
46
+ <R, E, A, R2>(
47
+ ref: RefAsyncData<R, E, A>,
48
+ effect: Effect.Effect<R2, E, A>
49
+ ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
50
+ } = dual(2, function runAsyncData<R, E, A, R2>(
51
+ ref: RefAsyncData<R, E, A>,
52
+ effect: Effect.Effect<R2, E, A>
53
+ ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>> {
54
+ return ref.runUpdates(({ get, set }) =>
55
+ Effect.uninterruptibleMask((restore) =>
56
+ Effect.flatMap(
57
+ Effect.flatMap(
58
+ Effect.tap(get, (current) => set(AsyncData.startLoading(current))),
59
+ () => Effect.exit(restore(effect))
60
+ ),
61
+ (exit) => set(AsyncData.fromExit(exit))
62
+ )
63
+ )
64
+ )
65
+ })
66
+
67
+ /**
68
+ * @since 1.20.0
69
+ */
70
+ export const matchAsyncData: {
71
+ <E1, A, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(
72
+ matchers: {
73
+ readonly NoData: Fx.Fx<R2, E2, B>
74
+ readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
75
+ readonly Failure: (
76
+ error: RefSubject.Computed<never, never, E1>,
77
+ options: {
78
+ readonly timestamp: RefSubject.Computed<never, never, number>
79
+ readonly progress: RefSubject.Filtered<never, never, Progress>
80
+ }
81
+ ) => Fx.Fx<R4, E4, D>
82
+ readonly Success: (
83
+ value: RefSubject.Computed<never, never, A>,
84
+ options: {
85
+ readonly timestamp: RefSubject.Computed<never, never, number>
86
+ readonly progress: RefSubject.Filtered<never, never, Progress>
87
+ }
88
+ ) => Fx.Fx<R5, E5, F>
89
+ }
90
+ ): <R, E>(
91
+ fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, A>>
92
+ ) => Fx.Fx<R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | F>
93
+
94
+ <R, E, E1, A, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, A>>, matchers: {
95
+ readonly NoData: Fx.Fx<R2, E2, B>
96
+ readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
97
+ readonly Failure: (error: RefSubject.Computed<never, never, E1>, options: {
98
+ readonly timestamp: RefSubject.Computed<never, never, number>
99
+ readonly progress: RefSubject.Filtered<never, never, Progress>
100
+ }) => Fx.Fx<R4, E4, D>
101
+ readonly Success: (value: RefSubject.Computed<never, never, A>, options: {
102
+ readonly timestamp: RefSubject.Computed<never, never, number>
103
+ readonly progress: RefSubject.Filtered<never, never, Progress>
104
+ }) => Fx.Fx<R5, E5, F>
105
+ }): Fx.Fx<R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | F>
106
+ } = dual(2, function matchAsyncData<R, E, E1, A, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(
107
+ fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, A>>,
108
+ matchers: {
109
+ readonly NoData: Fx.Fx<R2, E2, B>
110
+ readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
111
+ readonly Failure: (
112
+ error: RefSubject.Computed<never, never, E1>,
113
+ options: {
114
+ readonly timestamp: RefSubject.Computed<never, never, number>
115
+ readonly progress: RefSubject.Filtered<never, never, Progress>
116
+ }
117
+ ) => Fx.Fx<R4, E4, D>
118
+ readonly Success: (
119
+ value: RefSubject.RefSubject<never, never, A>,
120
+ options: {
121
+ readonly timestamp: RefSubject.Computed<never, never, number>
122
+ readonly progress: RefSubject.Filtered<never, never, Progress>
123
+ }
124
+ ) => Fx.Fx<R5, E5, F>
125
+ }
126
+ ) {
127
+ return Fx.matchTags(fx, {
128
+ NoData: () => matchers.NoData,
129
+ Loading: (loading) => matchers.Loading(RefSubject.filterMap(loading, (l) => l.progress)),
130
+ Failure: (failure) =>
131
+ matchers.Failure(
132
+ RefSubject.mapEffect(failure, (f) =>
133
+ Either.match(Cause.failureOrCause(f.cause), {
134
+ onLeft: Effect.succeed,
135
+ onRight: Effect.failCause
136
+ })),
137
+ {
138
+ timestamp: RefSubject.map(failure, (f) => f.timestamp),
139
+ progress: RefSubject.filterMap(failure, (f) => Option.flatMap(f.refreshing, (l) => l.progress))
140
+ }
141
+ ),
142
+ Success: (success) =>
143
+ matchers.Success(RefSubject.transform(success, (s) => s.value, (value) => AsyncData.success(value)), {
144
+ timestamp: RefSubject.map(success, (s) => s.timestamp),
145
+ progress: RefSubject.filterMap(success, (f) => Option.flatMap(f.refreshing, (l) => l.progress))
146
+ })
147
+ })
148
+ })
149
+
150
+ /**
151
+ * @since 1.20.0
152
+ */
153
+ export const matchAsyncDataArray: {
154
+ <E1, A, K extends PropertyKey, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(
155
+ getKey: (a: A) => K,
156
+ matchers: {
157
+ readonly NoData: Fx.Fx<R2, E2, B>
158
+ readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
159
+ readonly Failure: (error: RefSubject.Computed<never, never, E1>, options: {
160
+ readonly timestamp: RefSubject.Computed<never, never, number>
161
+ readonly progress: RefSubject.Filtered<never, never, Progress>
162
+ }) => Fx.Fx<R4, E4, D>
163
+ readonly Success: (value: RefSubject.RefSubject<never, never, A>, key: K) => Fx.Fx<R5, E5, F>
164
+ }
165
+ ): <R, E>(
166
+ fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, ReadonlyArray<A>>>
167
+ ) => Fx.Fx<Scope.Scope | R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | ReadonlyArray<F>>
168
+
169
+ <R, E, E1, A, K extends PropertyKey, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(
170
+ fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, ReadonlyArray<A>>>,
171
+ getKey: (a: A) => K,
172
+ matchers: {
173
+ readonly NoData: Fx.Fx<R2, E2, B>
174
+ readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
175
+ readonly Failure: (error: RefSubject.Computed<never, never, E1>, options: {
176
+ readonly timestamp: RefSubject.Computed<never, never, number>
177
+ readonly progress: RefSubject.Filtered<never, never, Progress>
178
+ }) => Fx.Fx<R4, E4, D>
179
+ readonly Success: (value: RefSubject.RefSubject<never, never, A>, key: K) => Fx.Fx<R5, E5, F>
180
+ }
181
+ ): Fx.Fx<Scope.Scope | R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | ReadonlyArray<F>>
182
+ } = dual(
183
+ 3,
184
+ function matchAsyncData<R, E, E1, A, K extends PropertyKey, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(
185
+ fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, ReadonlyArray<A>>>,
186
+ getKey: (a: A) => K,
187
+ matchers: {
188
+ readonly NoData: Fx.Fx<R2, E2, B>
189
+ readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
190
+ readonly Failure: (
191
+ error: RefSubject.Computed<never, never, E1>,
192
+ options: {
193
+ readonly timestamp: RefSubject.Computed<never, never, number>
194
+ readonly progress: RefSubject.Filtered<never, never, Progress>
195
+ }
196
+ ) => Fx.Fx<R4, E4, D>
197
+ readonly Success: (
198
+ value: RefSubject.RefSubject<never, never, A>,
199
+ key: K
200
+ ) => Fx.Fx<R5, E5, F>
201
+ }
202
+ ) {
203
+ return Fx.matchTags(fx, {
204
+ NoData: () => matchers.NoData,
205
+ Loading: (loading) => matchers.Loading(RefSubject.filterMap(loading, (l) => l.progress)),
206
+ Failure: (failure) =>
207
+ matchers.Failure(
208
+ RefSubject.mapEffect(failure, (f) =>
209
+ Either.match(Cause.failureOrCause(f.cause), {
210
+ onLeft: Effect.succeed,
211
+ onRight: Effect.failCause
212
+ })),
213
+ {
214
+ timestamp: RefSubject.map(failure, (f) => f.timestamp),
215
+ progress: RefSubject.filterMap(failure, (f) => Option.flatMap(f.refreshing, (l) => l.progress))
216
+ }
217
+ ),
218
+ Success: (success) =>
219
+ keyed(RefSubject.map(success, (s) => s.value), {
220
+ getKey,
221
+ onValue: matchers.Success
222
+ })
223
+ })
224
+ }
225
+ )
226
+
227
+ /**
228
+ * @since 1.20.0
229
+ */
230
+ export const runIfNoData: {
231
+ <R2, E, A>(
232
+ effect: Effect.Effect<R2, E, A>
233
+ ): <R>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
234
+ <R, E, A, R2>(
235
+ ref: RefAsyncData<R, E, A>,
236
+ effect: Effect.Effect<R2, E, A>
237
+ ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
238
+ } = dual(2, function runIfNoData<R, E, A, R2>(
239
+ ref: RefAsyncData<R, E, A>,
240
+ effect: Effect.Effect<R2, E, A>
241
+ ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>> {
242
+ return Effect.flatMap(
243
+ ref,
244
+ (current) => AsyncData.isNoData(current) ? runAsyncData(ref, effect) : Effect.succeed(current)
245
+ )
246
+ })
247
+
248
+ /**
249
+ * @since 1.20.0
250
+ */
251
+ export const runIfExpired: {
252
+ <R2, E, A>(
253
+ effect: Effect.Effect<R2, E, A>,
254
+ options: { readonly ttl: Duration.DurationInput; readonly now?: number }
255
+ ): <R>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
256
+
257
+ <R, E, A, R2>(
258
+ ref: RefAsyncData<R, E, A>,
259
+ effect: Effect.Effect<R2, E, A>,
260
+ options: { readonly ttl: Duration.DurationInput; readonly now?: number }
261
+ ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
262
+ } = dual(3, function runIfExpired<R, E, A, R2>(
263
+ ref: RefAsyncData<R, E, A>,
264
+ effect: Effect.Effect<R2, E, A>,
265
+ { now, ttl }: { readonly ttl: Duration.DurationInput; readonly now?: number }
266
+ ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>> {
267
+ return Effect.flatMap(
268
+ ref,
269
+ (current) => AsyncData.isExpired(current, ttl, now) ? runAsyncData(ref, effect) : Effect.succeed(current)
270
+ )
271
+ })
272
+
273
+ /**
274
+ * Await for the AsyncData to stop loading.
275
+ * @since 1.20.0
276
+ * @category updates
277
+ */
278
+ export const awaitLoading = <R, E, A>(
279
+ data: RefAsyncData<R, E, A>
280
+ ): Effect.Effect<R | Scope.Scope, never, AsyncData.AsyncData<E, A>> =>
281
+ data.pipe(
282
+ Fx.dropWhile(AsyncData.isLoading),
283
+ Fx.take(1),
284
+ Fx.toReadonlyArray,
285
+ Effect.map((x) => x[0])
286
+ )
287
+
288
+ /**
289
+ * Await for the AsyncData to stop loading or refreshing.
290
+ * @since 1.20.0
291
+ * @category updates
292
+ */
293
+ export const awaitLoadingOrRefreshing = <R, E, A>(
294
+ data: RefAsyncData<R, E, A>
295
+ ): Effect.Effect<R | Scope.Scope, never, AsyncData.AsyncData<E, A>> =>
296
+ data.pipe(
297
+ Fx.dropWhile(AsyncData.isLoadingOrRefreshing),
298
+ Fx.take(1),
299
+ Fx.toReadonlyArray,
300
+ Effect.map((x) => x[0])
301
+ )
302
+
303
+ /**
304
+ * Change the current value of a RefAsyncData to a loading or refreshing state.
305
+ * @since 1.20.0
306
+ * @category updates
307
+ */
308
+ export const startLoading: <R, E, A>(
309
+ ref: RefAsyncData<R, E, A>
310
+ ) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>> = <R, E, A>(ref: RefAsyncData<R, E, A>) =>
311
+ RefSubject.update(ref, AsyncData.startLoading)
312
+
313
+ /**
314
+ * Change the current value of a RefAsyncData to a non-loading/non-refreshing state.
315
+ * @since 1.20.0
316
+ * @category updates
317
+ */
318
+ export const stopLoading: <R, E, A>(
319
+ ref: RefAsyncData<R, E, A>
320
+ ) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>> = <R, E, A>(ref: RefAsyncData<R, E, A>) =>
321
+ RefSubject.update(ref, AsyncData.stopLoading)
322
+
323
+ /**
324
+ * Convert RefAsyncData into a Sink.
325
+ * @since 1.20.0
326
+ * @category conversions
327
+ */
328
+ export const asSink = <R, E, A>(ref: RefAsyncData<R, E, A>): Sink.Sink<R, E, A> =>
329
+ Sink.make(
330
+ (cause) => RefSubject.set(ref, AsyncData.failCause(cause)),
331
+ (a) => RefSubject.set(ref, AsyncData.success(a))
332
+ )
333
+
334
+ /**
335
+ * Map the input value using an Effect
336
+ * @since 1.20.0
337
+ */
338
+ export const mapInputEffect = <R, E, A, R2, B>(
339
+ ref: RefAsyncData<R, E, A>,
340
+ f: (b: B) => Effect.Effect<R2, E, A>
341
+ ): Sink.Sink<R | R2, E, B> => Sink.mapEffect(asSink(ref), f)
342
+
343
+ /**
344
+ * Map the input value
345
+ * @since 1.20.0
346
+ */
347
+ export const mapInput = <R, E, A, B>(
348
+ ref: RefAsyncData<R, E, A>,
349
+ f: (b: B) => A
350
+ ): Sink.Sink<R, E, B> => Sink.map(asSink(ref), f)
351
+
352
+ const isRefFirst = (args: IArguments) => args.length === 3 || RefSubjectTypeId in args[0]
353
+
354
+ /**
355
+ * Fail with a given cause
356
+ * @since 1.20.0
357
+ */
358
+ export const failCause: {
359
+ <E>(
360
+ cause: Cause.Cause<E>,
361
+ options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
362
+ ): <R, A>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
363
+
364
+ <R, E, A>(
365
+ ref: RefAsyncData<R, E, A>,
366
+ cause: Cause.Cause<E>,
367
+ options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
368
+ ): Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
369
+ } = dual(isRefFirst, <R, E, A>(
370
+ ref: RefAsyncData<R, E, A>,
371
+ cause: Cause.Cause<E>,
372
+ options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
373
+ ) => RefSubject.set(ref, AsyncData.failCause(cause, options)))
374
+
375
+ /**
376
+ * Fail with a given error
377
+ * @since 1.20.0
378
+ */
379
+ export const fail: {
380
+ <E>(
381
+ error: E,
382
+ options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
383
+ ): <R, A>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
384
+
385
+ <R, E, A>(
386
+ ref: RefAsyncData<R, E, A>,
387
+ error: E,
388
+ options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
389
+ ): Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
390
+ } = dual(isRefFirst, <R, E, A>(
391
+ ref: RefAsyncData<R, E, A>,
392
+ error: E,
393
+ options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
394
+ ) => RefSubject.set(ref, AsyncData.fail(error, options)))
395
+
396
+ /**
397
+ * Succeed with a value
398
+ * @since 1.20.0
399
+ */
400
+ export const succeed: {
401
+ <A>(
402
+ value: A,
403
+ options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
404
+ ): <R, E>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
405
+
406
+ <R, E, A>(
407
+ ref: RefAsyncData<R, E, A>,
408
+ value: A,
409
+ options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
410
+ ): Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
411
+ } = dual(
412
+ isRefFirst,
413
+ <R, E, A>(
414
+ ref: RefAsyncData<R, E, A>,
415
+ value: A,
416
+ options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
417
+ ) => RefSubject.set(ref, AsyncData.success(value, options))
418
+ )
419
+
420
+ /**
421
+ * Set Exit value of RefAsyncData
422
+ * @since 1.20.0
423
+ */
424
+ export const done: {
425
+ <E, A>(exit: Exit.Exit<E, A>): <R>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
426
+ <R, E, A>(ref: RefAsyncData<R, E, A>, exit: Exit.Exit<E, A>): Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
427
+ } = dual(
428
+ 2,
429
+ <R, E, A>(
430
+ ref: RefAsyncData<R, E, A>,
431
+ exit: Exit.Exit<E, A>
432
+ ) => RefSubject.set(ref, AsyncData.done(exit))
433
+ )
434
+
435
+ /**
436
+ * @since 1.20.0
437
+ * @category Filtered
438
+ */
439
+ export const getFailure = <R, E, A>(ref: RefAsyncData<R, E, A>): RefSubject.Filtered<R, never, E> =>
440
+ RefSubject.filterMap(ref, AsyncData.getFailure)
441
+
442
+ /**
443
+ * @since 1.20.0
444
+ * @category Filtered
445
+ */
446
+ export const getSuccess = <R, E, A>(ref: RefAsyncData<R, E, A>): RefSubject.Filtered<R, never, A> =>
447
+ RefSubject.filterMap(ref, AsyncData.getSuccess)
package/src/Emitter.ts CHANGED
@@ -1,54 +1,63 @@
1
1
  /**
2
- * An Emitter is a a Sink-like type which is can be utilized to adapt external
3
- * APIs into an Fx.
4
- * @since 1.18.0
2
+ * Emitter is a helper for creating Fx from external libraries which are not Effect-native.
3
+ * @since 1.20.0
5
4
  */
6
5
 
7
- import type * as Cause from "effect/Cause"
6
+ import * as Cause from "effect/Cause"
8
7
  import * as Effect from "effect/Effect"
9
- import * as Exit from "effect/Exit"
10
- import type * as Fiber from "effect/Fiber"
8
+ import * as ExecutionStrategy from "effect/ExecutionStrategy"
9
+ import type * as Exit from "effect/Exit"
10
+ import * as Fiber from "effect/Fiber"
11
+ import * as Runtime from "effect/Runtime"
11
12
  import type * as Scope from "effect/Scope"
12
- import type { ScopedRuntime } from "./internal/helpers.js"
13
- import { scopedRuntime } from "./internal/helpers.js"
14
- import type * as Sink from "./Sink.js"
13
+ import { withScope } from "./internal/helpers.js"
14
+ import * as Sink from "./Sink.js"
15
15
 
16
16
  /**
17
- * An Emitter is a a Sink-like type which is can be utilized to adapt external
18
- * APIs into an Fx.
19
- * @since 1.18.0
17
+ * @since 1.20.0
20
18
  */
21
19
  export interface Emitter<E, A> {
22
- (exit: Exit.Exit<E, A>): Fiber.Fiber<never, unknown>
23
-
24
- readonly succeed: (a: A) => Fiber.Fiber<never, unknown>
25
- readonly failCause: (e: Cause.Cause<E>) => Fiber.Fiber<never, unknown>
26
- readonly fail: (e: E) => Fiber.Fiber<never, unknown>
27
- readonly die: (e: unknown) => Fiber.Fiber<never, unknown>
28
- readonly end: () => Fiber.Fiber<never, unknown>
20
+ readonly succeed: (value: A) => Promise<Exit.Exit<never, unknown>>
21
+ readonly failCause: (cause: Cause.Cause<E>) => Promise<Exit.Exit<never, unknown>>
22
+ readonly fail: (error: E) => Promise<Exit.Exit<never, unknown>>
23
+ readonly die: (error: unknown) => Promise<Exit.Exit<never, unknown>>
24
+ readonly end: () => Promise<Exit.Exit<never, unknown>>
29
25
  }
30
26
 
31
27
  /**
32
- * Create an Emitter from a Sink
33
- * @since 1.18.0
34
- * @category constructors
28
+ * @since 1.20.0
35
29
  */
36
- export function make<E, A>(sink: Sink.WithEarlyExit<E, A>): Effect.Effect<Scope.Scope, never, Emitter<E, A>> {
37
- return Effect.map(scopedRuntime<never>(), (runtime) => makeWithRuntime(runtime, sink))
38
- }
39
- function makeWithRuntime<E, A>(
40
- runtime: ScopedRuntime<never>,
41
- sink: Sink.WithEarlyExit<E, A>
42
- ): Emitter<E, A> {
43
- function emit(exit: Exit.Exit<E, A>): Fiber.Fiber<never, unknown> {
44
- return runtime.run(Exit.match(exit, sink))
45
- }
30
+ export function withEmitter<R, E, A, R2, B>(
31
+ sink: Sink.Sink<R, E, A>,
32
+ f: (emitter: Emitter<E, A>) => Effect.Effect<R2, E, B>
33
+ ): Effect.Effect<R | R2 | Scope.Scope, never, void> {
34
+ return withScope(
35
+ (scope) =>
36
+ Sink.withEarlyExit(
37
+ sink,
38
+ (sink): Effect.Effect<R | R2, E, B> => {
39
+ return Effect.flatMap(Effect.runtime<R>(), (runtime): Effect.Effect<R2, E, B> => {
40
+ const runPromiseExit = Runtime.runPromiseExit(runtime)
41
+ const run = (effect: Effect.Effect<R, never, unknown>) =>
42
+ runPromiseExit(
43
+ Effect.flatMap(
44
+ Effect.forkIn(effect, scope),
45
+ Fiber.join
46
+ )
47
+ )
46
48
 
47
- emit.succeed = (a: A) => emit(Exit.succeed(a))
48
- emit.failCause = (e: Cause.Cause<E>) => emit(Exit.failCause(e))
49
- emit.fail = (e: E) => emit(Exit.fail(e))
50
- emit.die = (e: unknown) => emit(Exit.die(e))
51
- emit.end = () => runtime.run(sink.earlyExit)
49
+ const emitter: Emitter<E, A> = {
50
+ succeed: (value) => run(sink.onSuccess(value)),
51
+ failCause: (cause) => run(sink.onFailure(cause)),
52
+ fail: (error) => run(sink.onFailure(Cause.fail(error))),
53
+ die: (error) => run(sink.onFailure(Cause.die(error))),
54
+ end: () => run(sink.earlyExit)
55
+ }
52
56
 
53
- return emit
57
+ return f(emitter)
58
+ })
59
+ }
60
+ ),
61
+ ExecutionStrategy.sequential
62
+ )
54
63
  }