@typed/fx 1.17.4 → 1.18.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 (1047) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/cjs/Computed.js +111 -74
  4. package/dist/cjs/Computed.js.map +1 -1
  5. package/dist/cjs/Emitter.js +37 -0
  6. package/dist/cjs/Emitter.js.map +1 -0
  7. package/dist/cjs/Filtered.js +91 -74
  8. package/dist/cjs/Filtered.js.map +1 -1
  9. package/dist/cjs/Form.js +123 -0
  10. package/dist/cjs/Form.js.map +1 -0
  11. package/dist/cjs/FormEntry.js +78 -0
  12. package/dist/cjs/FormEntry.js.map +1 -0
  13. package/dist/cjs/Fx.js +1303 -31
  14. package/dist/cjs/Fx.js.map +1 -1
  15. package/dist/cjs/Guard.js +67 -0
  16. package/dist/cjs/Guard.js.map +1 -0
  17. package/dist/cjs/Idle.js +176 -0
  18. package/dist/cjs/Idle.js.map +1 -0
  19. package/dist/cjs/Match.js +156 -0
  20. package/dist/cjs/Match.js.map +1 -0
  21. package/dist/cjs/Model.js +119 -0
  22. package/dist/cjs/Model.js.map +1 -0
  23. package/dist/cjs/Pull.js +50 -0
  24. package/dist/cjs/Pull.js.map +1 -0
  25. package/dist/cjs/RefArray.js +248 -94
  26. package/dist/cjs/RefArray.js.map +1 -1
  27. package/dist/cjs/RefAsyncData.js +187 -0
  28. package/dist/cjs/RefAsyncData.js.map +1 -0
  29. package/dist/cjs/RefAsyncDataArray.js +38 -0
  30. package/dist/cjs/RefAsyncDataArray.js.map +1 -0
  31. package/dist/cjs/RefBoolean.js +45 -0
  32. package/dist/cjs/RefBoolean.js.map +1 -0
  33. package/dist/cjs/RefChunk.js +210 -0
  34. package/dist/cjs/RefChunk.js.map +1 -0
  35. package/dist/cjs/RefHashMap.js +198 -0
  36. package/dist/cjs/RefHashMap.js.map +1 -0
  37. package/dist/cjs/RefHashSet.js +96 -0
  38. package/dist/cjs/RefHashSet.js.map +1 -0
  39. package/dist/cjs/RefNumber.js +49 -0
  40. package/dist/cjs/RefNumber.js.map +1 -0
  41. package/dist/cjs/RefSubject.js +234 -431
  42. package/dist/cjs/RefSubject.js.map +1 -1
  43. package/dist/cjs/Sink.js +118 -8
  44. package/dist/cjs/Sink.js.map +1 -1
  45. package/dist/cjs/Stream.js +82 -0
  46. package/dist/cjs/Stream.js.map +1 -0
  47. package/dist/cjs/Subject.js +87 -49
  48. package/dist/cjs/Subject.js.map +1 -1
  49. package/dist/cjs/TypeId.js +27 -0
  50. package/dist/cjs/TypeId.js.map +1 -0
  51. package/dist/cjs/Typeclass.js +383 -0
  52. package/dist/cjs/Typeclass.js.map +1 -0
  53. package/dist/cjs/Versioned.js +111 -0
  54. package/dist/cjs/Versioned.js.map +1 -0
  55. package/dist/cjs/index.js +52 -213
  56. package/dist/cjs/index.js.map +1 -1
  57. package/dist/cjs/internal/bounds.js +26 -0
  58. package/dist/cjs/internal/bounds.js.map +1 -0
  59. package/dist/cjs/internal/core-ref-subject.js +254 -0
  60. package/dist/cjs/internal/core-ref-subject.js.map +1 -0
  61. package/dist/cjs/internal/core-subject.js +108 -0
  62. package/dist/cjs/internal/core-subject.js.map +1 -0
  63. package/dist/cjs/internal/core.js +924 -0
  64. package/dist/cjs/internal/core.js.map +1 -0
  65. package/dist/cjs/internal/deferred-ref.js +32 -0
  66. package/dist/cjs/internal/deferred-ref.js.map +1 -0
  67. package/dist/cjs/internal/effect-operator.js +147 -0
  68. package/dist/cjs/internal/effect-operator.js.map +1 -0
  69. package/dist/cjs/internal/effect-primitive.js +47 -0
  70. package/dist/cjs/internal/effect-primitive.js.map +1 -0
  71. package/dist/cjs/internal/fx-effect-proto.js +58 -0
  72. package/dist/cjs/internal/fx-effect-proto.js.map +1 -0
  73. package/dist/cjs/internal/fx-primitive.js +193 -0
  74. package/dist/cjs/internal/fx-primitive.js.map +1 -0
  75. package/dist/cjs/internal/fx.js +240 -0
  76. package/dist/cjs/internal/fx.js.map +1 -0
  77. package/dist/cjs/internal/helpers.js +270 -0
  78. package/dist/cjs/internal/helpers.js.map +1 -0
  79. package/dist/cjs/internal/keyed.js +198 -0
  80. package/dist/cjs/internal/keyed.js.map +1 -0
  81. package/dist/cjs/internal/matchers.js +34 -0
  82. package/dist/cjs/internal/matchers.js.map +1 -0
  83. package/dist/cjs/internal/protos.js +110 -0
  84. package/dist/cjs/internal/protos.js.map +1 -0
  85. package/dist/cjs/internal/provide.js +78 -0
  86. package/dist/cjs/internal/provide.js.map +1 -0
  87. package/dist/cjs/internal/requestIdleCallback.js +22 -0
  88. package/dist/cjs/internal/requestIdleCallback.js.map +1 -0
  89. package/dist/cjs/internal/run.js +54 -0
  90. package/dist/cjs/internal/run.js.map +1 -0
  91. package/dist/cjs/internal/schema-ref-subject.js +132 -0
  92. package/dist/cjs/internal/schema-ref-subject.js.map +1 -0
  93. package/dist/cjs/internal/share.js +79 -0
  94. package/dist/cjs/internal/share.js.map +1 -0
  95. package/dist/cjs/internal/strategies.js +34 -0
  96. package/dist/cjs/internal/strategies.js.map +1 -0
  97. package/dist/cjs/internal/sync-operator.js +92 -0
  98. package/dist/cjs/internal/sync-operator.js.map +1 -0
  99. package/dist/cjs/internal/versioned-transform.js +46 -0
  100. package/dist/cjs/internal/versioned-transform.js.map +1 -0
  101. package/dist/cjs/internal/withKey.js +69 -0
  102. package/dist/cjs/internal/withKey.js.map +1 -0
  103. package/dist/dts/Computed.d.ts +106 -0
  104. package/dist/dts/Computed.d.ts.map +1 -0
  105. package/dist/dts/Emitter.d.ts +31 -0
  106. package/dist/dts/Emitter.d.ts.map +1 -0
  107. package/dist/dts/Filtered.d.ts +97 -0
  108. package/dist/dts/Filtered.d.ts.map +1 -0
  109. package/dist/dts/Form.d.ts +126 -0
  110. package/dist/dts/Form.d.ts.map +1 -0
  111. package/dist/dts/FormEntry.d.ts +53 -0
  112. package/dist/dts/FormEntry.d.ts.map +1 -0
  113. package/dist/dts/Fx.d.ts +2006 -0
  114. package/dist/dts/Fx.d.ts.map +1 -0
  115. package/dist/dts/Guard.d.ts +95 -0
  116. package/dist/dts/Guard.d.ts.map +1 -0
  117. package/dist/dts/Idle.d.ts +84 -0
  118. package/dist/dts/Idle.d.ts.map +1 -0
  119. package/dist/dts/Match.d.ts +66 -0
  120. package/dist/dts/Match.d.ts.map +1 -0
  121. package/dist/dts/Model.d.ts +200 -0
  122. package/dist/dts/Model.d.ts.map +1 -0
  123. package/dist/dts/Pull.d.ts +37 -0
  124. package/dist/dts/Pull.d.ts.map +1 -0
  125. package/dist/dts/RefArray.d.ts +281 -0
  126. package/dist/dts/RefArray.d.ts.map +1 -0
  127. package/dist/dts/RefAsyncData.d.ts +236 -0
  128. package/dist/dts/RefAsyncData.d.ts.map +1 -0
  129. package/dist/dts/RefAsyncDataArray.d.ts +56 -0
  130. package/dist/dts/RefAsyncDataArray.d.ts.map +1 -0
  131. package/dist/dts/RefBoolean.d.ts +47 -0
  132. package/dist/dts/RefBoolean.d.ts.map +1 -0
  133. package/dist/dts/RefChunk.d.ts +232 -0
  134. package/dist/dts/RefChunk.d.ts.map +1 -0
  135. package/dist/dts/RefHashMap.d.ts +190 -0
  136. package/dist/dts/RefHashMap.d.ts.map +1 -0
  137. package/dist/dts/RefHashSet.d.ts +104 -0
  138. package/dist/dts/RefHashSet.d.ts.map +1 -0
  139. package/dist/dts/RefNumber.d.ts +48 -0
  140. package/dist/dts/RefNumber.d.ts.map +1 -0
  141. package/dist/dts/RefSubject.d.ts +282 -0
  142. package/dist/dts/RefSubject.d.ts.map +1 -0
  143. package/dist/dts/Sink.d.ts +152 -0
  144. package/dist/dts/Sink.d.ts.map +1 -0
  145. package/dist/dts/Stream.d.ts +60 -0
  146. package/dist/dts/Stream.d.ts.map +1 -0
  147. package/dist/dts/Subject.d.ts +69 -0
  148. package/dist/dts/Subject.d.ts.map +1 -0
  149. package/dist/dts/TypeId.d.ts +41 -0
  150. package/dist/dts/TypeId.d.ts.map +1 -0
  151. package/dist/dts/Typeclass.d.ts +284 -0
  152. package/dist/dts/Typeclass.d.ts.map +1 -0
  153. package/dist/dts/Versioned.d.ts +143 -0
  154. package/dist/dts/Versioned.d.ts.map +1 -0
  155. package/dist/dts/index.d.ts +56 -0
  156. package/dist/dts/index.d.ts.map +1 -0
  157. package/dist/dts/internal/bounds.d.ts +9 -0
  158. package/dist/dts/internal/bounds.d.ts.map +1 -0
  159. package/dist/dts/internal/core-ref-subject.d.ts +100 -0
  160. package/dist/dts/internal/core-ref-subject.d.ts.map +1 -0
  161. package/dist/dts/internal/core-subject.d.ts +5 -0
  162. package/dist/dts/internal/core-subject.d.ts.map +1 -0
  163. package/dist/dts/internal/core.d.ts +456 -0
  164. package/dist/dts/internal/core.d.ts.map +1 -0
  165. package/dist/dts/internal/deferred-ref.d.ts +12 -0
  166. package/dist/dts/internal/deferred-ref.d.ts.map +1 -0
  167. package/dist/dts/internal/effect-operator.d.ts +37 -0
  168. package/dist/dts/internal/effect-operator.d.ts.map +1 -0
  169. package/dist/dts/internal/effect-primitive.d.ts +6 -0
  170. package/dist/dts/internal/effect-primitive.d.ts.map +1 -0
  171. package/dist/dts/internal/fx-effect-proto.d.ts +30 -0
  172. package/dist/dts/internal/fx-effect-proto.d.ts.map +1 -0
  173. package/dist/dts/internal/fx-primitive.d.ts +109 -0
  174. package/dist/dts/internal/fx-primitive.d.ts.map +1 -0
  175. package/dist/dts/internal/fx.d.ts +245 -0
  176. package/dist/dts/internal/fx.d.ts.map +1 -0
  177. package/dist/dts/internal/helpers.d.ts +48 -0
  178. package/dist/dts/internal/helpers.d.ts.map +1 -0
  179. package/dist/dts/internal/keyed.d.ts +4 -0
  180. package/dist/dts/internal/keyed.d.ts.map +1 -0
  181. package/dist/dts/internal/matchers.d.ts +33 -0
  182. package/dist/dts/internal/matchers.d.ts.map +1 -0
  183. package/dist/dts/internal/protos.d.ts +50 -0
  184. package/dist/dts/internal/protos.d.ts.map +1 -0
  185. package/dist/dts/internal/provide.d.ts +40 -0
  186. package/dist/dts/internal/provide.d.ts.map +1 -0
  187. package/dist/dts/internal/requestIdleCallback.d.ts +3 -0
  188. package/dist/dts/internal/requestIdleCallback.d.ts.map +1 -0
  189. package/dist/dts/internal/run.d.ts +8 -0
  190. package/dist/dts/internal/run.d.ts.map +1 -0
  191. package/dist/dts/internal/schema-ref-subject.d.ts +5 -0
  192. package/dist/dts/internal/schema-ref-subject.d.ts.map +1 -0
  193. package/dist/dts/internal/share.d.ts +30 -0
  194. package/dist/dts/internal/share.d.ts.map +1 -0
  195. package/dist/dts/internal/strategies.d.ts +9 -0
  196. package/dist/dts/internal/strategies.d.ts.map +1 -0
  197. package/dist/dts/internal/sync-operator.d.ts +28 -0
  198. package/dist/dts/internal/sync-operator.d.ts.map +1 -0
  199. package/dist/dts/internal/versioned-transform.d.ts +17 -0
  200. package/dist/dts/internal/versioned-transform.d.ts.map +1 -0
  201. package/dist/dts/internal/withKey.d.ts +4 -0
  202. package/dist/dts/internal/withKey.d.ts.map +1 -0
  203. package/dist/esm/Computed.js +103 -0
  204. package/dist/esm/Computed.js.map +1 -0
  205. package/dist/esm/Emitter.js +28 -0
  206. package/dist/esm/Emitter.js.map +1 -0
  207. package/dist/esm/Filtered.js +83 -0
  208. package/dist/esm/Filtered.js.map +1 -0
  209. package/dist/esm/Form.js +111 -0
  210. package/dist/esm/Form.js.map +1 -0
  211. package/dist/esm/FormEntry.js +72 -0
  212. package/dist/esm/FormEntry.js.map +1 -0
  213. package/dist/esm/Fx.js +1298 -0
  214. package/dist/esm/Fx.js.map +1 -0
  215. package/dist/esm/Guard.js +56 -0
  216. package/dist/esm/Guard.js.map +1 -0
  217. package/dist/esm/Idle.js +166 -0
  218. package/dist/esm/Idle.js.map +1 -0
  219. package/dist/esm/Match.js +149 -0
  220. package/dist/esm/Match.js.map +1 -0
  221. package/dist/esm/Model.js +100 -0
  222. package/dist/esm/Model.js.map +1 -0
  223. package/dist/esm/Pull.js +41 -0
  224. package/dist/esm/Pull.js.map +1 -0
  225. package/dist/esm/RefArray.js +232 -0
  226. package/dist/esm/RefArray.js.map +1 -0
  227. package/dist/esm/RefAsyncData.js +163 -0
  228. package/dist/esm/RefAsyncData.js.map +1 -0
  229. package/dist/esm/RefAsyncDataArray.js +27 -0
  230. package/dist/esm/RefAsyncDataArray.js.map +1 -0
  231. package/dist/esm/RefBoolean.js +31 -0
  232. package/dist/esm/RefBoolean.js.map +1 -0
  233. package/dist/esm/RefChunk.js +194 -0
  234. package/dist/esm/RefChunk.js.map +1 -0
  235. package/dist/esm/RefHashMap.js +176 -0
  236. package/dist/esm/RefHashMap.js.map +1 -0
  237. package/dist/esm/RefHashSet.js +83 -0
  238. package/dist/esm/RefHashSet.js.map +1 -0
  239. package/dist/esm/RefNumber.js +35 -0
  240. package/dist/esm/RefNumber.js.map +1 -0
  241. package/dist/esm/RefSubject.js +217 -0
  242. package/dist/esm/RefSubject.js.map +1 -0
  243. package/dist/esm/Sink.js +108 -0
  244. package/dist/esm/Sink.js.map +1 -0
  245. package/dist/esm/Stream.js +72 -0
  246. package/dist/esm/Stream.js.map +1 -0
  247. package/dist/esm/Subject.js +84 -0
  248. package/dist/esm/Subject.js.map +1 -0
  249. package/dist/esm/TypeId.js +21 -0
  250. package/dist/esm/TypeId.js.map +1 -0
  251. package/dist/esm/Typeclass.js +375 -0
  252. package/dist/esm/Typeclass.js.map +1 -0
  253. package/dist/esm/Versioned.js +94 -0
  254. package/dist/esm/Versioned.js.map +1 -0
  255. package/dist/esm/index.js +56 -0
  256. package/dist/esm/index.js.map +1 -0
  257. package/dist/esm/internal/bounds.js +13 -0
  258. package/dist/esm/internal/bounds.js.map +1 -0
  259. package/dist/esm/internal/core-ref-subject.js +242 -0
  260. package/dist/esm/internal/core-ref-subject.js.map +1 -0
  261. package/dist/esm/internal/core-subject.js +90 -0
  262. package/dist/esm/internal/core-subject.js.map +1 -0
  263. package/dist/esm/internal/core.js +841 -0
  264. package/dist/esm/internal/core.js.map +1 -0
  265. package/dist/esm/internal/deferred-ref.js +23 -0
  266. package/dist/esm/internal/deferred-ref.js.map +1 -0
  267. package/dist/esm/internal/effect-operator.js +127 -0
  268. package/dist/esm/internal/effect-operator.js.map +1 -0
  269. package/dist/esm/internal/effect-primitive.js +41 -0
  270. package/dist/esm/internal/effect-primitive.js.map +1 -0
  271. package/dist/esm/internal/fx-effect-proto.js +43 -0
  272. package/dist/esm/internal/fx-effect-proto.js.map +1 -0
  273. package/dist/esm/internal/fx-primitive.js +175 -0
  274. package/dist/esm/internal/fx-primitive.js.map +1 -0
  275. package/dist/esm/internal/fx.js +216 -0
  276. package/dist/esm/internal/fx.js.map +1 -0
  277. package/dist/esm/internal/helpers.js +253 -0
  278. package/dist/esm/internal/helpers.js.map +1 -0
  279. package/dist/esm/internal/keyed.js +156 -0
  280. package/dist/esm/internal/keyed.js.map +1 -0
  281. package/dist/esm/internal/matchers.js +38 -0
  282. package/dist/esm/internal/matchers.js.map +1 -0
  283. package/dist/esm/internal/protos.js +98 -0
  284. package/dist/esm/internal/protos.js.map +1 -0
  285. package/dist/esm/internal/provide.js +64 -0
  286. package/dist/esm/internal/provide.js.map +1 -0
  287. package/dist/esm/internal/requestIdleCallback.js +16 -0
  288. package/dist/esm/internal/requestIdleCallback.js.map +1 -0
  289. package/dist/esm/internal/run.js +32 -0
  290. package/dist/esm/internal/run.js.map +1 -0
  291. package/dist/esm/internal/schema-ref-subject.js +121 -0
  292. package/dist/esm/internal/schema-ref-subject.js.map +1 -0
  293. package/dist/esm/internal/share.js +64 -0
  294. package/dist/esm/internal/share.js.map +1 -0
  295. package/dist/esm/internal/strategies.js +8 -0
  296. package/dist/esm/internal/strategies.js.map +1 -0
  297. package/dist/esm/internal/sync-operator.js +67 -0
  298. package/dist/esm/internal/sync-operator.js.map +1 -0
  299. package/dist/esm/internal/versioned-transform.js +37 -0
  300. package/dist/esm/internal/versioned-transform.js.map +1 -0
  301. package/dist/esm/internal/withKey.js +57 -0
  302. package/dist/esm/internal/withKey.js.map +1 -0
  303. package/dist/esm/package.json +4 -0
  304. package/package.json +240 -30
  305. package/src/Computed.ts +247 -121
  306. package/src/Emitter.ts +54 -0
  307. package/src/Filtered.ts +239 -128
  308. package/src/Form.ts +373 -0
  309. package/src/FormEntry.ts +174 -0
  310. package/src/Fx.ts +2632 -43
  311. package/src/Guard.ts +159 -0
  312. package/src/Idle.ts +284 -0
  313. package/src/Match.ts +273 -0
  314. package/src/Model.ts +483 -0
  315. package/src/Pull.ts +96 -0
  316. package/src/RefArray.ts +507 -223
  317. package/src/RefAsyncData.ts +547 -0
  318. package/src/RefAsyncDataArray.ts +135 -0
  319. package/src/RefBoolean.ts +71 -0
  320. package/src/RefChunk.ts +403 -0
  321. package/src/RefHashMap.ts +319 -0
  322. package/src/RefHashSet.ts +188 -0
  323. package/src/RefNumber.ts +77 -0
  324. package/src/RefSubject.ts +583 -740
  325. package/src/Sink.ts +268 -11
  326. package/src/Stream.ts +128 -0
  327. package/src/Subject.ts +129 -23
  328. package/src/TypeId.ts +47 -0
  329. package/src/Typeclass.ts +460 -0
  330. package/src/Versioned.ts +302 -0
  331. package/src/index.ts +64 -1083
  332. package/src/internal/bounds.ts +21 -0
  333. package/src/internal/core-ref-subject.ts +528 -0
  334. package/src/internal/core-subject.ts +143 -0
  335. package/src/internal/core.ts +2198 -0
  336. package/src/internal/deferred-ref.ts +26 -0
  337. package/src/internal/effect-operator.ts +282 -0
  338. package/src/internal/effect-primitive.ts +230 -0
  339. package/src/internal/fx-effect-proto.ts +56 -0
  340. package/src/internal/fx-primitive.ts +223 -0
  341. package/src/internal/fx.ts +619 -0
  342. package/src/internal/helpers.ts +428 -0
  343. package/src/internal/keyed.ts +281 -0
  344. package/src/internal/matchers.ts +83 -0
  345. package/src/internal/protos.ts +132 -0
  346. package/src/internal/provide.ts +143 -0
  347. package/src/internal/requestIdleCallback.ts +20 -0
  348. package/src/internal/run.ts +51 -0
  349. package/src/internal/schema-ref-subject.ts +163 -0
  350. package/src/internal/share.ts +105 -0
  351. package/src/internal/strategies.ts +15 -0
  352. package/src/internal/sync-operator.ts +125 -0
  353. package/src/internal/versioned-transform.ts +48 -0
  354. package/src/internal/withKey.ts +92 -0
  355. package/dist/Computed.d.ts +0 -60
  356. package/dist/Computed.d.ts.map +0 -1
  357. package/dist/Computed.js +0 -51
  358. package/dist/Computed.js.map +0 -1
  359. package/dist/Filtered.d.ts +0 -52
  360. package/dist/Filtered.d.ts.map +0 -1
  361. package/dist/Filtered.js +0 -51
  362. package/dist/Filtered.js.map +0 -1
  363. package/dist/Fx.d.ts +0 -27
  364. package/dist/Fx.d.ts.map +0 -1
  365. package/dist/Fx.js +0 -28
  366. package/dist/Fx.js.map +0 -1
  367. package/dist/RefArray.d.ts +0 -116
  368. package/dist/RefArray.d.ts.map +0 -1
  369. package/dist/RefArray.js +0 -67
  370. package/dist/RefArray.js.map +0 -1
  371. package/dist/RefRemoteData.d.ts +0 -44
  372. package/dist/RefRemoteData.d.ts.map +0 -1
  373. package/dist/RefRemoteData.js +0 -63
  374. package/dist/RefRemoteData.js.map +0 -1
  375. package/dist/RefSubject.d.ts +0 -53
  376. package/dist/RefSubject.d.ts.map +0 -1
  377. package/dist/RefSubject.js +0 -404
  378. package/dist/RefSubject.js.map +0 -1
  379. package/dist/RefTransform.d.ts +0 -74
  380. package/dist/RefTransform.d.ts.map +0 -1
  381. package/dist/RefTransform.js +0 -86
  382. package/dist/RefTransform.js.map +0 -1
  383. package/dist/Sink.d.ts +0 -8
  384. package/dist/Sink.d.ts.map +0 -1
  385. package/dist/Sink.js +0 -7
  386. package/dist/Sink.js.map +0 -1
  387. package/dist/Subject.d.ts +0 -18
  388. package/dist/Subject.d.ts.map +0 -1
  389. package/dist/Subject.js +0 -24
  390. package/dist/Subject.js.map +0 -1
  391. package/dist/Transducer.d.ts +0 -2
  392. package/dist/Transducer.d.ts.map +0 -1
  393. package/dist/Transducer.js +0 -2
  394. package/dist/Transducer.js.map +0 -1
  395. package/dist/at.d.ts +0 -4
  396. package/dist/at.d.ts.map +0 -1
  397. package/dist/at.js +0 -6
  398. package/dist/at.js.map +0 -1
  399. package/dist/catchAllCause.d.ts +0 -14
  400. package/dist/catchAllCause.d.ts.map +0 -1
  401. package/dist/catchAllCause.js +0 -39
  402. package/dist/catchAllCause.js.map +0 -1
  403. package/dist/cjs/Computed.d.ts +0 -60
  404. package/dist/cjs/Computed.d.ts.map +0 -1
  405. package/dist/cjs/Filtered.d.ts +0 -52
  406. package/dist/cjs/Filtered.d.ts.map +0 -1
  407. package/dist/cjs/Fx.d.ts +0 -27
  408. package/dist/cjs/Fx.d.ts.map +0 -1
  409. package/dist/cjs/RefArray.d.ts +0 -116
  410. package/dist/cjs/RefArray.d.ts.map +0 -1
  411. package/dist/cjs/RefRemoteData.d.ts +0 -44
  412. package/dist/cjs/RefRemoteData.d.ts.map +0 -1
  413. package/dist/cjs/RefRemoteData.js +0 -93
  414. package/dist/cjs/RefRemoteData.js.map +0 -1
  415. package/dist/cjs/RefSubject.d.ts +0 -53
  416. package/dist/cjs/RefSubject.d.ts.map +0 -1
  417. package/dist/cjs/RefTransform.d.ts +0 -74
  418. package/dist/cjs/RefTransform.d.ts.map +0 -1
  419. package/dist/cjs/RefTransform.js +0 -113
  420. package/dist/cjs/RefTransform.js.map +0 -1
  421. package/dist/cjs/Sink.d.ts +0 -8
  422. package/dist/cjs/Sink.d.ts.map +0 -1
  423. package/dist/cjs/Subject.d.ts +0 -18
  424. package/dist/cjs/Subject.d.ts.map +0 -1
  425. package/dist/cjs/Transducer.d.ts +0 -2
  426. package/dist/cjs/Transducer.d.ts.map +0 -1
  427. package/dist/cjs/Transducer.js +0 -3
  428. package/dist/cjs/Transducer.js.map +0 -1
  429. package/dist/cjs/at.d.ts +0 -4
  430. package/dist/cjs/at.d.ts.map +0 -1
  431. package/dist/cjs/at.js +0 -33
  432. package/dist/cjs/at.js.map +0 -1
  433. package/dist/cjs/catchAllCause.d.ts +0 -14
  434. package/dist/cjs/catchAllCause.d.ts.map +0 -1
  435. package/dist/cjs/catchAllCause.js +0 -71
  436. package/dist/cjs/catchAllCause.js.map +0 -1
  437. package/dist/cjs/combineAll.d.ts +0 -6
  438. package/dist/cjs/combineAll.d.ts.map +0 -1
  439. package/dist/cjs/combineAll.js +0 -55
  440. package/dist/cjs/combineAll.js.map +0 -1
  441. package/dist/cjs/combineAllDiscard.d.ts +0 -3
  442. package/dist/cjs/combineAllDiscard.d.ts.map +0 -1
  443. package/dist/cjs/combineAllDiscard.js +0 -49
  444. package/dist/cjs/combineAllDiscard.js.map +0 -1
  445. package/dist/cjs/continueWith.d.ts +0 -7
  446. package/dist/cjs/continueWith.d.ts.map +0 -1
  447. package/dist/cjs/continueWith.js +0 -47
  448. package/dist/cjs/continueWith.js.map +0 -1
  449. package/dist/cjs/data-first.d.ts +0 -68
  450. package/dist/cjs/data-first.d.ts.map +0 -1
  451. package/dist/cjs/data-first.js +0 -84
  452. package/dist/cjs/data-first.js.map +0 -1
  453. package/dist/cjs/debounce.d.ts +0 -4
  454. package/dist/cjs/debounce.d.ts.map +0 -1
  455. package/dist/cjs/debounce.js +0 -33
  456. package/dist/cjs/debounce.js.map +0 -1
  457. package/dist/cjs/delay.d.ts +0 -4
  458. package/dist/cjs/delay.d.ts.map +0 -1
  459. package/dist/cjs/delay.js +0 -33
  460. package/dist/cjs/delay.js.map +0 -1
  461. package/dist/cjs/empty.d.ts +0 -3
  462. package/dist/cjs/empty.d.ts.map +0 -1
  463. package/dist/cjs/empty.js +0 -33
  464. package/dist/cjs/empty.js.map +0 -1
  465. package/dist/cjs/exhaustMap.d.ts +0 -7
  466. package/dist/cjs/exhaustMap.d.ts.map +0 -1
  467. package/dist/cjs/exhaustMap.js +0 -23
  468. package/dist/cjs/exhaustMap.js.map +0 -1
  469. package/dist/cjs/exhaustMapCause.d.ts +0 -8
  470. package/dist/cjs/exhaustMapCause.d.ts.map +0 -1
  471. package/dist/cjs/exhaustMapCause.js +0 -50
  472. package/dist/cjs/exhaustMapCause.js.map +0 -1
  473. package/dist/cjs/exhaustMapLatest.d.ts +0 -7
  474. package/dist/cjs/exhaustMapLatest.d.ts.map +0 -1
  475. package/dist/cjs/exhaustMapLatest.js +0 -23
  476. package/dist/cjs/exhaustMapLatest.js.map +0 -1
  477. package/dist/cjs/exhaustMapLatestCause.d.ts +0 -8
  478. package/dist/cjs/exhaustMapLatestCause.d.ts.map +0 -1
  479. package/dist/cjs/exhaustMapLatestCause.js +0 -50
  480. package/dist/cjs/exhaustMapLatestCause.js.map +0 -1
  481. package/dist/cjs/failCause.d.ts +0 -8
  482. package/dist/cjs/failCause.d.ts.map +0 -1
  483. package/dist/cjs/failCause.js +0 -45
  484. package/dist/cjs/failCause.js.map +0 -1
  485. package/dist/cjs/filter.d.ts +0 -7
  486. package/dist/cjs/filter.d.ts.map +0 -1
  487. package/dist/cjs/filter.js +0 -38
  488. package/dist/cjs/filter.js.map +0 -1
  489. package/dist/cjs/filterMap.d.ts +0 -5
  490. package/dist/cjs/filterMap.d.ts.map +0 -1
  491. package/dist/cjs/filterMap.js +0 -38
  492. package/dist/cjs/filterMap.js.map +0 -1
  493. package/dist/cjs/flatMap.d.ts +0 -7
  494. package/dist/cjs/flatMap.d.ts.map +0 -1
  495. package/dist/cjs/flatMap.js +0 -23
  496. package/dist/cjs/flatMap.js.map +0 -1
  497. package/dist/cjs/fromArray.d.ts +0 -3
  498. package/dist/cjs/fromArray.d.ts.map +0 -1
  499. package/dist/cjs/fromArray.js +0 -42
  500. package/dist/cjs/fromArray.js.map +0 -1
  501. package/dist/cjs/fromDequeue.d.ts +0 -5
  502. package/dist/cjs/fromDequeue.d.ts.map +0 -1
  503. package/dist/cjs/fromDequeue.js +0 -49
  504. package/dist/cjs/fromDequeue.js.map +0 -1
  505. package/dist/cjs/fromEffect.d.ts +0 -4
  506. package/dist/cjs/fromEffect.d.ts.map +0 -1
  507. package/dist/cjs/fromEffect.js +0 -46
  508. package/dist/cjs/fromEffect.js.map +0 -1
  509. package/dist/cjs/fromEmitter.d.ts +0 -11
  510. package/dist/cjs/fromEmitter.d.ts.map +0 -1
  511. package/dist/cjs/fromEmitter.js +0 -53
  512. package/dist/cjs/fromEmitter.js.map +0 -1
  513. package/dist/cjs/fromFxEffect.d.ts +0 -4
  514. package/dist/cjs/fromFxEffect.d.ts.map +0 -1
  515. package/dist/cjs/fromFxEffect.js +0 -33
  516. package/dist/cjs/fromFxEffect.js.map +0 -1
  517. package/dist/cjs/fromHub.d.ts +0 -5
  518. package/dist/cjs/fromHub.d.ts.map +0 -1
  519. package/dist/cjs/fromHub.js +0 -34
  520. package/dist/cjs/fromHub.js.map +0 -1
  521. package/dist/cjs/fromIterable.d.ts +0 -3
  522. package/dist/cjs/fromIterable.d.ts.map +0 -1
  523. package/dist/cjs/fromIterable.js +0 -47
  524. package/dist/cjs/fromIterable.js.map +0 -1
  525. package/dist/cjs/gen.d.ts +0 -7
  526. package/dist/cjs/gen.d.ts.map +0 -1
  527. package/dist/cjs/gen.js +0 -33
  528. package/dist/cjs/gen.js.map +0 -1
  529. package/dist/cjs/helpers.d.ts +0 -12
  530. package/dist/cjs/helpers.d.ts.map +0 -1
  531. package/dist/cjs/helpers.js +0 -90
  532. package/dist/cjs/helpers.js.map +0 -1
  533. package/dist/cjs/hold.d.ts +0 -14
  534. package/dist/cjs/hold.d.ts.map +0 -1
  535. package/dist/cjs/hold.js +0 -56
  536. package/dist/cjs/hold.js.map +0 -1
  537. package/dist/cjs/index.d.ts +0 -391
  538. package/dist/cjs/index.d.ts.map +0 -1
  539. package/dist/cjs/keyed.d.ts +0 -4
  540. package/dist/cjs/keyed.d.ts.map +0 -1
  541. package/dist/cjs/keyed.js +0 -183
  542. package/dist/cjs/keyed.js.map +0 -1
  543. package/dist/cjs/map.d.ts +0 -4
  544. package/dist/cjs/map.d.ts.map +0 -1
  545. package/dist/cjs/map.js +0 -37
  546. package/dist/cjs/map.js.map +0 -1
  547. package/dist/cjs/mapEffect.d.ts +0 -7
  548. package/dist/cjs/mapEffect.d.ts.map +0 -1
  549. package/dist/cjs/mapEffect.js +0 -36
  550. package/dist/cjs/mapEffect.js.map +0 -1
  551. package/dist/cjs/mergeAll.d.ts +0 -5
  552. package/dist/cjs/mergeAll.d.ts.map +0 -1
  553. package/dist/cjs/mergeAll.js +0 -45
  554. package/dist/cjs/mergeAll.js.map +0 -1
  555. package/dist/cjs/mergeBufferConcurrently.d.ts +0 -8
  556. package/dist/cjs/mergeBufferConcurrently.d.ts.map +0 -1
  557. package/dist/cjs/mergeBufferConcurrently.js +0 -97
  558. package/dist/cjs/mergeBufferConcurrently.js.map +0 -1
  559. package/dist/cjs/mergeConcurrently.d.ts +0 -3
  560. package/dist/cjs/mergeConcurrently.d.ts.map +0 -1
  561. package/dist/cjs/mergeConcurrently.js +0 -69
  562. package/dist/cjs/mergeConcurrently.js.map +0 -1
  563. package/dist/cjs/multicast.d.ts +0 -32
  564. package/dist/cjs/multicast.d.ts.map +0 -1
  565. package/dist/cjs/multicast.js +0 -110
  566. package/dist/cjs/multicast.js.map +0 -1
  567. package/dist/cjs/never.d.ts +0 -3
  568. package/dist/cjs/never.d.ts.map +0 -1
  569. package/dist/cjs/never.js +0 -33
  570. package/dist/cjs/never.js.map +0 -1
  571. package/dist/cjs/observe.d.ts +0 -9
  572. package/dist/cjs/observe.d.ts.map +0 -1
  573. package/dist/cjs/observe.js +0 -52
  574. package/dist/cjs/observe.js.map +0 -1
  575. package/dist/cjs/onExit.d.ts +0 -5
  576. package/dist/cjs/onExit.d.ts.map +0 -1
  577. package/dist/cjs/onExit.js +0 -33
  578. package/dist/cjs/onExit.js.map +0 -1
  579. package/dist/cjs/onInterrupt.d.ts +0 -6
  580. package/dist/cjs/onInterrupt.d.ts.map +0 -1
  581. package/dist/cjs/onInterrupt.js +0 -33
  582. package/dist/cjs/onInterrupt.js.map +0 -1
  583. package/dist/cjs/orElse.d.ts +0 -4
  584. package/dist/cjs/orElse.d.ts.map +0 -1
  585. package/dist/cjs/orElse.js +0 -34
  586. package/dist/cjs/orElse.js.map +0 -1
  587. package/dist/cjs/promise.d.ts +0 -8
  588. package/dist/cjs/promise.d.ts.map +0 -1
  589. package/dist/cjs/promise.js +0 -54
  590. package/dist/cjs/promise.js.map +0 -1
  591. package/dist/cjs/provide.d.ts +0 -12
  592. package/dist/cjs/provide.d.ts.map +0 -1
  593. package/dist/cjs/provide.js +0 -62
  594. package/dist/cjs/provide.js.map +0 -1
  595. package/dist/cjs/reduce.d.ts +0 -5
  596. package/dist/cjs/reduce.d.ts.map +0 -1
  597. package/dist/cjs/reduce.js +0 -37
  598. package/dist/cjs/reduce.js.map +0 -1
  599. package/dist/cjs/scan.d.ts +0 -3
  600. package/dist/cjs/scan.d.ts.map +0 -1
  601. package/dist/cjs/scan.js +0 -36
  602. package/dist/cjs/scan.js.map +0 -1
  603. package/dist/cjs/scoped.d.ts +0 -4
  604. package/dist/cjs/scoped.d.ts.map +0 -1
  605. package/dist/cjs/scoped.js +0 -33
  606. package/dist/cjs/scoped.js.map +0 -1
  607. package/dist/cjs/skipRepeats.d.ts +0 -5
  608. package/dist/cjs/skipRepeats.d.ts.map +0 -1
  609. package/dist/cjs/skipRepeats.js +0 -46
  610. package/dist/cjs/skipRepeats.js.map +0 -1
  611. package/dist/cjs/skipWhile.d.ts +0 -5
  612. package/dist/cjs/skipWhile.d.ts.map +0 -1
  613. package/dist/cjs/skipWhile.js +0 -46
  614. package/dist/cjs/skipWhile.js.map +0 -1
  615. package/dist/cjs/slice.d.ts +0 -5
  616. package/dist/cjs/slice.d.ts.map +0 -1
  617. package/dist/cjs/slice.js +0 -55
  618. package/dist/cjs/slice.js.map +0 -1
  619. package/dist/cjs/snapshotEffect.d.ts +0 -5
  620. package/dist/cjs/snapshotEffect.d.ts.map +0 -1
  621. package/dist/cjs/snapshotEffect.js +0 -50
  622. package/dist/cjs/snapshotEffect.js.map +0 -1
  623. package/dist/cjs/struct.d.ts +0 -5
  624. package/dist/cjs/struct.d.ts.map +0 -1
  625. package/dist/cjs/struct.js +0 -10
  626. package/dist/cjs/struct.js.map +0 -1
  627. package/dist/cjs/succeed.d.ts +0 -4
  628. package/dist/cjs/succeed.d.ts.map +0 -1
  629. package/dist/cjs/succeed.js +0 -10
  630. package/dist/cjs/succeed.js.map +0 -1
  631. package/dist/cjs/suspend.d.ts +0 -3
  632. package/dist/cjs/suspend.d.ts.map +0 -1
  633. package/dist/cjs/suspend.js +0 -9
  634. package/dist/cjs/suspend.js.map +0 -1
  635. package/dist/cjs/switchMap.d.ts +0 -7
  636. package/dist/cjs/switchMap.d.ts.map +0 -1
  637. package/dist/cjs/switchMap.js +0 -46
  638. package/dist/cjs/switchMap.js.map +0 -1
  639. package/dist/cjs/switchMapCause.d.ts +0 -9
  640. package/dist/cjs/switchMapCause.d.ts.map +0 -1
  641. package/dist/cjs/switchMapCause.js +0 -61
  642. package/dist/cjs/switchMapCause.js.map +0 -1
  643. package/dist/cjs/switchMatch.d.ts +0 -8
  644. package/dist/cjs/switchMatch.d.ts.map +0 -1
  645. package/dist/cjs/switchMatch.js +0 -50
  646. package/dist/cjs/switchMatch.js.map +0 -1
  647. package/dist/cjs/takeWhile.d.ts +0 -5
  648. package/dist/cjs/takeWhile.d.ts.map +0 -1
  649. package/dist/cjs/takeWhile.js +0 -46
  650. package/dist/cjs/takeWhile.js.map +0 -1
  651. package/dist/cjs/tap.d.ts +0 -5
  652. package/dist/cjs/tap.d.ts.map +0 -1
  653. package/dist/cjs/tap.js +0 -37
  654. package/dist/cjs/tap.js.map +0 -1
  655. package/dist/cjs/tapCause.d.ts +0 -8
  656. package/dist/cjs/tapCause.d.ts.map +0 -1
  657. package/dist/cjs/tapCause.js +0 -50
  658. package/dist/cjs/tapCause.js.map +0 -1
  659. package/dist/cjs/test-utils.d.ts +0 -5
  660. package/dist/cjs/test-utils.d.ts.map +0 -1
  661. package/dist/cjs/test-utils.js +0 -52
  662. package/dist/cjs/test-utils.js.map +0 -1
  663. package/dist/cjs/throttle.d.ts +0 -4
  664. package/dist/cjs/throttle.d.ts.map +0 -1
  665. package/dist/cjs/throttle.js +0 -34
  666. package/dist/cjs/throttle.js.map +0 -1
  667. package/dist/cjs/toArray.d.ts +0 -5
  668. package/dist/cjs/toArray.d.ts.map +0 -1
  669. package/dist/cjs/toArray.js +0 -36
  670. package/dist/cjs/toArray.js.map +0 -1
  671. package/dist/cjs/toChunk.d.ts +0 -6
  672. package/dist/cjs/toChunk.d.ts.map +0 -1
  673. package/dist/cjs/toChunk.js +0 -38
  674. package/dist/cjs/toChunk.js.map +0 -1
  675. package/dist/cjs/toEnqueue.d.ts +0 -6
  676. package/dist/cjs/toEnqueue.d.ts.map +0 -1
  677. package/dist/cjs/toEnqueue.js +0 -9
  678. package/dist/cjs/toEnqueue.js.map +0 -1
  679. package/dist/cjs/toReadonlyArray.d.ts +0 -5
  680. package/dist/cjs/toReadonlyArray.d.ts.map +0 -1
  681. package/dist/cjs/toReadonlyArray.js +0 -9
  682. package/dist/cjs/toReadonlyArray.js.map +0 -1
  683. package/dist/cjs/toStream.d.ts +0 -4
  684. package/dist/cjs/toStream.d.ts.map +0 -1
  685. package/dist/cjs/toStream.js +0 -39
  686. package/dist/cjs/toStream.js.map +0 -1
  687. package/dist/combineAll.d.ts +0 -6
  688. package/dist/combineAll.d.ts.map +0 -1
  689. package/dist/combineAll.js +0 -27
  690. package/dist/combineAll.js.map +0 -1
  691. package/dist/combineAllDiscard.d.ts +0 -3
  692. package/dist/combineAllDiscard.d.ts.map +0 -1
  693. package/dist/combineAllDiscard.js +0 -22
  694. package/dist/combineAllDiscard.js.map +0 -1
  695. package/dist/continueWith.d.ts +0 -7
  696. package/dist/continueWith.d.ts.map +0 -1
  697. package/dist/continueWith.js +0 -17
  698. package/dist/continueWith.js.map +0 -1
  699. package/dist/data-first.d.ts +0 -68
  700. package/dist/data-first.d.ts.map +0 -1
  701. package/dist/data-first.js +0 -68
  702. package/dist/data-first.js.map +0 -1
  703. package/dist/debounce.d.ts +0 -4
  704. package/dist/debounce.d.ts.map +0 -1
  705. package/dist/debounce.js +0 -6
  706. package/dist/debounce.js.map +0 -1
  707. package/dist/delay.d.ts +0 -4
  708. package/dist/delay.d.ts.map +0 -1
  709. package/dist/delay.js +0 -6
  710. package/dist/delay.js.map +0 -1
  711. package/dist/empty.d.ts +0 -3
  712. package/dist/empty.d.ts.map +0 -1
  713. package/dist/empty.js +0 -6
  714. package/dist/empty.js.map +0 -1
  715. package/dist/exhaustMap.d.ts +0 -7
  716. package/dist/exhaustMap.d.ts.map +0 -1
  717. package/dist/exhaustMap.js +0 -16
  718. package/dist/exhaustMap.js.map +0 -1
  719. package/dist/exhaustMapCause.d.ts +0 -8
  720. package/dist/exhaustMapCause.d.ts.map +0 -1
  721. package/dist/exhaustMapCause.js +0 -20
  722. package/dist/exhaustMapCause.js.map +0 -1
  723. package/dist/exhaustMapLatest.d.ts +0 -7
  724. package/dist/exhaustMapLatest.d.ts.map +0 -1
  725. package/dist/exhaustMapLatest.js +0 -16
  726. package/dist/exhaustMapLatest.js.map +0 -1
  727. package/dist/exhaustMapLatestCause.d.ts +0 -8
  728. package/dist/exhaustMapLatestCause.d.ts.map +0 -1
  729. package/dist/exhaustMapLatestCause.js +0 -20
  730. package/dist/exhaustMapLatestCause.js.map +0 -1
  731. package/dist/failCause.d.ts +0 -8
  732. package/dist/failCause.d.ts.map +0 -1
  733. package/dist/failCause.js +0 -15
  734. package/dist/failCause.js.map +0 -1
  735. package/dist/filter.d.ts +0 -7
  736. package/dist/filter.d.ts.map +0 -1
  737. package/dist/filter.js +0 -10
  738. package/dist/filter.js.map +0 -1
  739. package/dist/filterMap.d.ts +0 -5
  740. package/dist/filterMap.d.ts.map +0 -1
  741. package/dist/filterMap.js +0 -10
  742. package/dist/filterMap.js.map +0 -1
  743. package/dist/flatMap.d.ts +0 -7
  744. package/dist/flatMap.d.ts.map +0 -1
  745. package/dist/flatMap.js +0 -16
  746. package/dist/flatMap.js.map +0 -1
  747. package/dist/fromArray.d.ts +0 -3
  748. package/dist/fromArray.d.ts.map +0 -1
  749. package/dist/fromArray.js +0 -15
  750. package/dist/fromArray.js.map +0 -1
  751. package/dist/fromDequeue.d.ts +0 -5
  752. package/dist/fromDequeue.d.ts.map +0 -1
  753. package/dist/fromDequeue.js +0 -21
  754. package/dist/fromDequeue.js.map +0 -1
  755. package/dist/fromEffect.d.ts +0 -4
  756. package/dist/fromEffect.d.ts.map +0 -1
  757. package/dist/fromEffect.js +0 -19
  758. package/dist/fromEffect.js.map +0 -1
  759. package/dist/fromEmitter.d.ts +0 -11
  760. package/dist/fromEmitter.d.ts.map +0 -1
  761. package/dist/fromEmitter.js +0 -26
  762. package/dist/fromEmitter.js.map +0 -1
  763. package/dist/fromFxEffect.d.ts +0 -4
  764. package/dist/fromFxEffect.d.ts.map +0 -1
  765. package/dist/fromFxEffect.js +0 -6
  766. package/dist/fromFxEffect.js.map +0 -1
  767. package/dist/fromHub.d.ts +0 -5
  768. package/dist/fromHub.d.ts.map +0 -1
  769. package/dist/fromHub.js +0 -7
  770. package/dist/fromHub.js.map +0 -1
  771. package/dist/fromIterable.d.ts +0 -3
  772. package/dist/fromIterable.d.ts.map +0 -1
  773. package/dist/fromIterable.js +0 -20
  774. package/dist/fromIterable.js.map +0 -1
  775. package/dist/gen.d.ts +0 -7
  776. package/dist/gen.d.ts.map +0 -1
  777. package/dist/gen.js +0 -6
  778. package/dist/gen.js.map +0 -1
  779. package/dist/helpers.d.ts +0 -12
  780. package/dist/helpers.d.ts.map +0 -1
  781. package/dist/helpers.js +0 -59
  782. package/dist/helpers.js.map +0 -1
  783. package/dist/hold.d.ts +0 -14
  784. package/dist/hold.d.ts.map +0 -1
  785. package/dist/hold.js +0 -28
  786. package/dist/hold.js.map +0 -1
  787. package/dist/index.d.ts +0 -391
  788. package/dist/index.d.ts.map +0 -1
  789. package/dist/index.js +0 -139
  790. package/dist/index.js.map +0 -1
  791. package/dist/keyed.d.ts +0 -4
  792. package/dist/keyed.d.ts.map +0 -1
  793. package/dist/keyed.js +0 -156
  794. package/dist/keyed.js.map +0 -1
  795. package/dist/map.d.ts +0 -4
  796. package/dist/map.d.ts.map +0 -1
  797. package/dist/map.js +0 -9
  798. package/dist/map.js.map +0 -1
  799. package/dist/mapEffect.d.ts +0 -7
  800. package/dist/mapEffect.d.ts.map +0 -1
  801. package/dist/mapEffect.js +0 -9
  802. package/dist/mapEffect.js.map +0 -1
  803. package/dist/mergeAll.d.ts +0 -5
  804. package/dist/mergeAll.d.ts.map +0 -1
  805. package/dist/mergeAll.js +0 -16
  806. package/dist/mergeAll.js.map +0 -1
  807. package/dist/mergeBufferConcurrently.d.ts +0 -8
  808. package/dist/mergeBufferConcurrently.d.ts.map +0 -1
  809. package/dist/mergeBufferConcurrently.js +0 -70
  810. package/dist/mergeBufferConcurrently.js.map +0 -1
  811. package/dist/mergeConcurrently.d.ts +0 -3
  812. package/dist/mergeConcurrently.d.ts.map +0 -1
  813. package/dist/mergeConcurrently.js +0 -42
  814. package/dist/mergeConcurrently.js.map +0 -1
  815. package/dist/multicast.d.ts +0 -32
  816. package/dist/multicast.d.ts.map +0 -1
  817. package/dist/multicast.js +0 -82
  818. package/dist/multicast.js.map +0 -1
  819. package/dist/never.d.ts +0 -3
  820. package/dist/never.d.ts.map +0 -1
  821. package/dist/never.js +0 -6
  822. package/dist/never.js.map +0 -1
  823. package/dist/observe.d.ts +0 -9
  824. package/dist/observe.d.ts.map +0 -1
  825. package/dist/observe.js +0 -22
  826. package/dist/observe.js.map +0 -1
  827. package/dist/onExit.d.ts +0 -5
  828. package/dist/onExit.d.ts.map +0 -1
  829. package/dist/onExit.js +0 -6
  830. package/dist/onExit.js.map +0 -1
  831. package/dist/onInterrupt.d.ts +0 -6
  832. package/dist/onInterrupt.d.ts.map +0 -1
  833. package/dist/onInterrupt.js +0 -6
  834. package/dist/onInterrupt.js.map +0 -1
  835. package/dist/orElse.d.ts +0 -4
  836. package/dist/orElse.d.ts.map +0 -1
  837. package/dist/orElse.js +0 -7
  838. package/dist/orElse.js.map +0 -1
  839. package/dist/promise.d.ts +0 -8
  840. package/dist/promise.d.ts.map +0 -1
  841. package/dist/promise.js +0 -22
  842. package/dist/promise.js.map +0 -1
  843. package/dist/provide.d.ts +0 -12
  844. package/dist/provide.d.ts.map +0 -1
  845. package/dist/provide.js +0 -29
  846. package/dist/provide.js.map +0 -1
  847. package/dist/reduce.d.ts +0 -5
  848. package/dist/reduce.d.ts.map +0 -1
  849. package/dist/reduce.js +0 -10
  850. package/dist/reduce.js.map +0 -1
  851. package/dist/scan.d.ts +0 -3
  852. package/dist/scan.d.ts.map +0 -1
  853. package/dist/scan.js +0 -9
  854. package/dist/scan.js.map +0 -1
  855. package/dist/scoped.d.ts +0 -4
  856. package/dist/scoped.d.ts.map +0 -1
  857. package/dist/scoped.js +0 -6
  858. package/dist/scoped.js.map +0 -1
  859. package/dist/skipRepeats.d.ts +0 -5
  860. package/dist/skipRepeats.d.ts.map +0 -1
  861. package/dist/skipRepeats.js +0 -15
  862. package/dist/skipRepeats.js.map +0 -1
  863. package/dist/skipWhile.d.ts +0 -5
  864. package/dist/skipWhile.d.ts.map +0 -1
  865. package/dist/skipWhile.js +0 -18
  866. package/dist/skipWhile.js.map +0 -1
  867. package/dist/slice.d.ts +0 -5
  868. package/dist/slice.d.ts.map +0 -1
  869. package/dist/slice.js +0 -26
  870. package/dist/slice.js.map +0 -1
  871. package/dist/snapshotEffect.d.ts +0 -5
  872. package/dist/snapshotEffect.d.ts.map +0 -1
  873. package/dist/snapshotEffect.js +0 -22
  874. package/dist/snapshotEffect.js.map +0 -1
  875. package/dist/struct.d.ts +0 -5
  876. package/dist/struct.d.ts.map +0 -1
  877. package/dist/struct.js +0 -6
  878. package/dist/struct.js.map +0 -1
  879. package/dist/succeed.d.ts +0 -4
  880. package/dist/succeed.d.ts.map +0 -1
  881. package/dist/succeed.js +0 -6
  882. package/dist/succeed.js.map +0 -1
  883. package/dist/suspend.d.ts +0 -3
  884. package/dist/suspend.d.ts.map +0 -1
  885. package/dist/suspend.js +0 -5
  886. package/dist/suspend.js.map +0 -1
  887. package/dist/switchMap.d.ts +0 -7
  888. package/dist/switchMap.d.ts.map +0 -1
  889. package/dist/switchMap.js +0 -16
  890. package/dist/switchMap.js.map +0 -1
  891. package/dist/switchMapCause.d.ts +0 -9
  892. package/dist/switchMapCause.d.ts.map +0 -1
  893. package/dist/switchMapCause.js +0 -30
  894. package/dist/switchMapCause.js.map +0 -1
  895. package/dist/switchMatch.d.ts +0 -8
  896. package/dist/switchMatch.d.ts.map +0 -1
  897. package/dist/switchMatch.js +0 -20
  898. package/dist/switchMatch.js.map +0 -1
  899. package/dist/takeWhile.d.ts +0 -5
  900. package/dist/takeWhile.d.ts.map +0 -1
  901. package/dist/takeWhile.js +0 -18
  902. package/dist/takeWhile.js.map +0 -1
  903. package/dist/tap.d.ts +0 -5
  904. package/dist/tap.d.ts.map +0 -1
  905. package/dist/tap.js +0 -9
  906. package/dist/tap.js.map +0 -1
  907. package/dist/tapCause.d.ts +0 -8
  908. package/dist/tapCause.d.ts.map +0 -1
  909. package/dist/tapCause.js +0 -20
  910. package/dist/tapCause.js.map +0 -1
  911. package/dist/test-utils.d.ts +0 -5
  912. package/dist/test-utils.d.ts.map +0 -1
  913. package/dist/test-utils.js +0 -24
  914. package/dist/test-utils.js.map +0 -1
  915. package/dist/throttle.d.ts +0 -4
  916. package/dist/throttle.d.ts.map +0 -1
  917. package/dist/throttle.js +0 -7
  918. package/dist/throttle.js.map +0 -1
  919. package/dist/toArray.d.ts +0 -5
  920. package/dist/toArray.d.ts.map +0 -1
  921. package/dist/toArray.js +0 -9
  922. package/dist/toArray.js.map +0 -1
  923. package/dist/toChunk.d.ts +0 -6
  924. package/dist/toChunk.d.ts.map +0 -1
  925. package/dist/toChunk.js +0 -11
  926. package/dist/toChunk.js.map +0 -1
  927. package/dist/toEnqueue.d.ts +0 -6
  928. package/dist/toEnqueue.d.ts.map +0 -1
  929. package/dist/toEnqueue.js +0 -5
  930. package/dist/toEnqueue.js.map +0 -1
  931. package/dist/toReadonlyArray.d.ts +0 -5
  932. package/dist/toReadonlyArray.d.ts.map +0 -1
  933. package/dist/toReadonlyArray.js +0 -5
  934. package/dist/toReadonlyArray.js.map +0 -1
  935. package/dist/toStream.d.ts +0 -4
  936. package/dist/toStream.d.ts.map +0 -1
  937. package/dist/toStream.js +0 -12
  938. package/dist/toStream.js.map +0 -1
  939. package/dist/tsconfig.cjs.build.tsbuildinfo +0 -1
  940. package/eslintrc.json +0 -3
  941. package/project.json +0 -43
  942. package/readme.md +0 -3
  943. package/src/RefRemoteData.test.ts +0 -100
  944. package/src/RefRemoteData.ts +0 -172
  945. package/src/RefSubject.test.ts +0 -437
  946. package/src/RefTransform.ts +0 -210
  947. package/src/Transducer.ts +0 -0
  948. package/src/at.ts +0 -8
  949. package/src/catchAllCause.test.ts +0 -23
  950. package/src/catchAllCause.ts +0 -82
  951. package/src/combineAll.ts +0 -65
  952. package/src/combineAllDiscard.ts +0 -46
  953. package/src/continueWith.test.ts +0 -17
  954. package/src/continueWith.ts +0 -30
  955. package/src/data-first.ts +0 -67
  956. package/src/debounce.test.ts +0 -18
  957. package/src/debounce.ts +0 -9
  958. package/src/delay.test.ts +0 -13
  959. package/src/delay.ts +0 -8
  960. package/src/empty.test.ts +0 -10
  961. package/src/empty.ts +0 -7
  962. package/src/exhaustMap.test.ts +0 -19
  963. package/src/exhaustMap.ts +0 -31
  964. package/src/exhaustMapCause.test.ts +0 -23
  965. package/src/exhaustMapCause.ts +0 -41
  966. package/src/exhaustMapLatest.test.ts +0 -19
  967. package/src/exhaustMapLatest.ts +0 -31
  968. package/src/exhaustMapLatestCause.test.ts +0 -23
  969. package/src/exhaustMapLatestCause.ts +0 -41
  970. package/src/failCause.test.ts +0 -21
  971. package/src/failCause.ts +0 -20
  972. package/src/filter.ts +0 -23
  973. package/src/filterMap.ts +0 -19
  974. package/src/flatMap.test.ts +0 -19
  975. package/src/flatMap.ts +0 -31
  976. package/src/fromArray.test.ts +0 -11
  977. package/src/fromArray.ts +0 -21
  978. package/src/fromDequeue.ts +0 -39
  979. package/src/fromEffect.test.ts +0 -16
  980. package/src/fromEffect.ts +0 -23
  981. package/src/fromEmitter.test.ts +0 -33
  982. package/src/fromEmitter.ts +0 -46
  983. package/src/fromFxEffect.test.ts +0 -17
  984. package/src/fromFxEffect.ts +0 -11
  985. package/src/fromHub.ts +0 -10
  986. package/src/fromIterable.test.ts +0 -11
  987. package/src/fromIterable.ts +0 -27
  988. package/src/gen.test.ts +0 -30
  989. package/src/gen.ts +0 -28
  990. package/src/helpers.ts +0 -142
  991. package/src/hold.test.ts +0 -37
  992. package/src/hold.ts +0 -36
  993. package/src/keyed.test.ts +0 -47
  994. package/src/keyed.ts +0 -278
  995. package/src/map.test.ts +0 -17
  996. package/src/map.ts +0 -11
  997. package/src/mapEffect.ts +0 -20
  998. package/src/mergeAll.test.ts +0 -17
  999. package/src/mergeAll.ts +0 -38
  1000. package/src/mergeBufferConcurrently.test.ts +0 -37
  1001. package/src/mergeBufferConcurrently.ts +0 -106
  1002. package/src/mergeConcurrently.test.ts +0 -20
  1003. package/src/mergeConcurrently.ts +0 -57
  1004. package/src/multicast.test.ts +0 -88
  1005. package/src/multicast.ts +0 -131
  1006. package/src/never.ts +0 -7
  1007. package/src/observe.ts +0 -43
  1008. package/src/onExit.ts +0 -13
  1009. package/src/onInterrupt.ts +0 -16
  1010. package/src/orElse.ts +0 -16
  1011. package/src/promise.ts +0 -37
  1012. package/src/provide.ts +0 -76
  1013. package/src/reduce.ts +0 -19
  1014. package/src/scan.ts +0 -15
  1015. package/src/scoped.ts +0 -8
  1016. package/src/skipRepeats.ts +0 -29
  1017. package/src/skipWhile.test.ts +0 -27
  1018. package/src/skipWhile.ts +0 -31
  1019. package/src/slice.test.ts +0 -26
  1020. package/src/slice.ts +0 -43
  1021. package/src/snapshotEffect.ts +0 -49
  1022. package/src/struct.ts +0 -18
  1023. package/src/succeed.ts +0 -7
  1024. package/src/suspend.ts +0 -5
  1025. package/src/switchMap.test.ts +0 -19
  1026. package/src/switchMap.ts +0 -38
  1027. package/src/switchMapCause.test.ts +0 -23
  1028. package/src/switchMapCause.ts +0 -57
  1029. package/src/switchMatch.test.ts +0 -26
  1030. package/src/switchMatch.ts +0 -62
  1031. package/src/takeWhile.test.ts +0 -27
  1032. package/src/takeWhile.ts +0 -34
  1033. package/src/tap.ts +0 -22
  1034. package/src/tapCause.ts +0 -44
  1035. package/src/test-utils.ts +0 -38
  1036. package/src/throttle.test.ts +0 -18
  1037. package/src/throttle.ts +0 -13
  1038. package/src/toArray.ts +0 -16
  1039. package/src/toChunk.ts +0 -16
  1040. package/src/toEnqueue.ts +0 -13
  1041. package/src/toReadonlyArray.ts +0 -11
  1042. package/src/toStream.ts +0 -23
  1043. package/tsconfig.build.json +0 -8
  1044. package/tsconfig.build.tsbuildinfo +0 -1
  1045. package/tsconfig.cjs.build.json +0 -13
  1046. package/tsconfig.json +0 -18
  1047. package/vite.config.js +0 -3
@@ -0,0 +1,2198 @@
1
+ import type { Exit } from "effect"
2
+ import {
3
+ Cause,
4
+ Chunk,
5
+ Deferred,
6
+ Effect,
7
+ Effectable,
8
+ Either,
9
+ Equal,
10
+ Fiber,
11
+ Layer,
12
+ Option,
13
+ Ref,
14
+ Scope,
15
+ Stream,
16
+ SynchronizedRef
17
+ } from "effect"
18
+
19
+ import { dual, identity } from "effect/Function"
20
+
21
+ import { type Context, isContext, type Tag } from "@typed/context"
22
+ import * as Schedule from "effect/Schedule"
23
+ import {
24
+ compileEffectLoop,
25
+ FilterEffect,
26
+ FilterMapEffect,
27
+ liftSyncOperator,
28
+ MapEffect,
29
+ TapEffect
30
+ } from "./effect-operator"
31
+ import * as helpers from "./helpers"
32
+ import * as Provide from "./provide"
33
+ import * as strategies from "./strategies"
34
+ import { compileSyncReducer, Filter, FilterMap, Map } from "./sync-operator"
35
+
36
+ import type { DurationInput } from "effect/Duration"
37
+ import type { Equivalence } from "effect/Equivalence"
38
+ import type { Runtime } from "effect/Runtime"
39
+ import * as Emitter from "../Emitter"
40
+ import type {
41
+ FlattenStrategy,
42
+ Fx,
43
+ FxInput,
44
+ MergeStrategy,
45
+ WithEarlyExitParams,
46
+ WithFlattenStrategyParams,
47
+ WithScopedForkParams
48
+ } from "../Fx"
49
+ import * as Sink from "../Sink"
50
+ import { type Bounds, boundsFrom, mergeBounds } from "./bounds"
51
+ import { type InternalEffect, matchEffectPrimitive } from "./effect-primitive"
52
+ import {
53
+ Empty,
54
+ Fail,
55
+ FromIterable,
56
+ FromSink,
57
+ Never,
58
+ Succeed,
59
+ Suspend,
60
+ Sync,
61
+ ToFx,
62
+ Transformer,
63
+ TransformerCause,
64
+ TransformerEffect,
65
+ WithEarlyExit,
66
+ WithFlattenStrategy,
67
+ WithScopedFork
68
+ } from "./fx-primitive"
69
+ import { adjustTime } from "./helpers"
70
+ import { matchFxInput } from "./matchers"
71
+ import { OnceEffect } from "./protos"
72
+ import { run } from "./run"
73
+
74
+ const constUnit = () => Effect.unit
75
+
76
+ class Merge<R, E, A> extends ToFx<R, E, A> {
77
+ constructor(readonly i0: ReadonlyArray<Fx<R, E, A>>, readonly i1: MergeStrategy) {
78
+ super(i0, i1)
79
+ }
80
+
81
+ static make<R, E, A>(fx: ReadonlyArray<Fx<R, E, A>>, strategy: MergeStrategy): Fx<R, E, A> {
82
+ // TODO: Flatten nested Merges
83
+
84
+ if (fx.length === 0) return empty
85
+ const nonEmptyFx = fx.filter((fx) => !(fx instanceof Empty))
86
+
87
+ if (nonEmptyFx.length === 0) return empty
88
+ if (nonEmptyFx.length === 1) return nonEmptyFx[0]
89
+
90
+ const neverIndex = nonEmptyFx.findIndex((fx) => fx instanceof Never)
91
+
92
+ if (neverIndex === -1) return new Merge(nonEmptyFx, strategy)
93
+
94
+ switch (strategy._tag) {
95
+ case "Switch":
96
+ case "Ordered":
97
+ // Will only emit up to the first Never
98
+ return new Merge(nonEmptyFx.slice(0, neverIndex + 1), strategy)
99
+ // No use creating fibers for Fx that don't emit
100
+ case "Unordered":
101
+ return new Merge(nonEmptyFx, strategy)
102
+ }
103
+ }
104
+
105
+ toFx(): Fx<R, E, A> {
106
+ const { i0, i1 } = this
107
+
108
+ switch (i1._tag) {
109
+ case "Ordered": {
110
+ const concurrency = i1.concurrency === Infinity ? "unbounded" : i1.concurrency
111
+
112
+ return fromSink((sink) => (
113
+ Effect.flatMap(helpers.withBuffers(i0.length, sink), (buffers) =>
114
+ Effect.all(
115
+ i0.map((fx, i) =>
116
+ Effect.flatMap(
117
+ run(
118
+ fx,
119
+ Sink.WithContext(
120
+ (cause) => Cause.isInterruptedOnly(cause) ? Effect.unit : sink.onFailure(cause),
121
+ (a) => buffers.onSuccess(i, a)
122
+ )
123
+ ),
124
+ () => buffers.onEnd(i)
125
+ )
126
+ ),
127
+ {
128
+ concurrency
129
+ }
130
+ ))
131
+ ))
132
+ }
133
+ case "Switch":
134
+ return fromSink((sink) => Effect.all(i0.map((fx) => run(fx, sink)), { concurrency: 1 }))
135
+ case "Unordered":
136
+ return fromSink((sink) =>
137
+ Effect.all(i0.map((fx) => run(fx, sink)), {
138
+ concurrency: i1.concurrency === Infinity ? "unbounded" : i1.concurrency
139
+ })
140
+ )
141
+ }
142
+ }
143
+ }
144
+
145
+ class Slice<R, E, A> extends ToFx<R, E, A> {
146
+ constructor(
147
+ readonly i0: Fx<R, E, A>,
148
+ readonly i1: Bounds
149
+ ) {
150
+ super(i0, i1)
151
+ }
152
+
153
+ static make<R, E, A>(fx: Fx<R, E, A>, bounds: Bounds): Fx<R, E, A> {
154
+ if (fx instanceof Slice) {
155
+ return new Slice(fx.i0, mergeBounds(fx.i1, bounds))
156
+ } else if (fx instanceof Transformer && fx.i1._tag === "Map") {
157
+ return new Transformer(Slice.make(fx.i0, bounds), fx.i1)
158
+ } else {
159
+ return new Slice(fx, bounds)
160
+ }
161
+ }
162
+
163
+ toFx(): Fx<R, E, A> {
164
+ const fx = this.i0
165
+ const { max, min } = this.i1
166
+
167
+ return withEarlyExit(({ sink }) =>
168
+ Effect.suspend(() => {
169
+ let toSkip = min
170
+ let toTake = max
171
+
172
+ return run(
173
+ fx,
174
+ Sink.WithContext(sink.onFailure, (a) =>
175
+ Effect.suspend(() => {
176
+ if (toSkip > 0) {
177
+ toSkip -= 1
178
+ return Effect.unit
179
+ } else if (toTake > 0) {
180
+ toTake -= 1
181
+ return Effect.flatMap(sink.onSuccess(a), () => toTake <= 0 ? sink.earlyExit : Effect.unit)
182
+ } else {
183
+ return sink.earlyExit
184
+ }
185
+ }))
186
+ )
187
+ })
188
+ )
189
+ }
190
+ }
191
+
192
+ class Loop<R, E, A, B, C> extends ToFx<R, E, C> {
193
+ constructor(
194
+ readonly i0: Fx<R, E, A>,
195
+ readonly i1: (b: B, a: A) => readonly [C, B],
196
+ readonly i2: B
197
+ ) {
198
+ super(i0, i1, i2)
199
+ }
200
+
201
+ static make<R, E, A, B, C>(fx: Fx<R, E, A>, b: B, f: (b: B, a: A) => readonly [C, B]): Fx<R, E, C> {
202
+ if (fx instanceof Transformer) {
203
+ return FilterMapLoop.make(fx.i0 as Fx<R, E, any>, b, compileSyncReducer(fx.i1, f))
204
+ } else if (fx instanceof TransformerEffect) {
205
+ return new FilterMapLoopEffect(
206
+ fx.i0 as Fx<R, E, any>,
207
+ b,
208
+ compileEffectLoop(fx.i1, (b: B, a: A) => Effect.sync(() => f(b, a)))
209
+ )
210
+ } else {
211
+ return new Loop(fx, f, b)
212
+ }
213
+ }
214
+
215
+ toFx(): Fx<R, E, C> {
216
+ return fromSink((sink) =>
217
+ Effect.suspend(() => {
218
+ let acc = this.i2
219
+
220
+ return run(
221
+ this.i0,
222
+ Sink.WithContext(
223
+ sink.onFailure,
224
+ (a) =>
225
+ Effect.suspend(() => {
226
+ const [c, b] = this.i1(acc, a)
227
+
228
+ acc = b
229
+
230
+ return sink.onSuccess(c)
231
+ })
232
+ )
233
+ )
234
+ })
235
+ )
236
+ }
237
+ }
238
+
239
+ class FilterMapLoop<R, E, A, B, C> extends ToFx<R, E, C> {
240
+ constructor(
241
+ readonly i0: Fx<R, E, A>,
242
+ readonly i1: B,
243
+ readonly i2: (b: B, a: A) => Option.Option<readonly [C, B]>
244
+ ) {
245
+ super(i0, i1, i2)
246
+ }
247
+
248
+ static make<R, E, A, B, C>(
249
+ fx: Fx<R, E, A>,
250
+ b: B,
251
+ f: (b: B, a: A) => Option.Option<readonly [C, B]>
252
+ ): Fx<R, E, C> {
253
+ return new FilterMapLoop(fx, b, f)
254
+ }
255
+
256
+ toFx(): Fx<R, E, C> {
257
+ return fromSink((sink) =>
258
+ Effect.suspend(() => {
259
+ let acc = this.i1
260
+
261
+ return run(
262
+ this.i0,
263
+ Sink.WithContext(
264
+ sink.onFailure,
265
+ (a) =>
266
+ Effect.suspend(() => {
267
+ const optionCB = this.i2(acc, a)
268
+
269
+ if (Option.isNone(optionCB)) return Effect.unit
270
+
271
+ const [c, b] = optionCB.value
272
+ acc = b
273
+
274
+ return sink.onSuccess(c)
275
+ })
276
+ )
277
+ )
278
+ })
279
+ )
280
+ }
281
+ }
282
+
283
+ class LoopEffect<R, E, A, R2, E2, B, C> extends ToFx<R | R2, E | E2, C> {
284
+ constructor(
285
+ readonly i0: Fx<R, E, A>,
286
+ readonly i1: (b: B, a: A) => Effect.Effect<R2, E2, readonly [C, B]>,
287
+ readonly i2: B
288
+ ) {
289
+ super(i0, i1, i2)
290
+ }
291
+
292
+ static make<R, E, A, R2, E2, B, C>(
293
+ fx: Fx<R, E, A>,
294
+ f: (b: B, a: A) => Effect.Effect<R2, E2, readonly [C, B]>,
295
+ b: B
296
+ ): Fx<R | R2, E | E2, C> {
297
+ if (fx instanceof TransformerEffect) {
298
+ return new FilterMapLoopEffect(fx.i0 as Fx<R, E, any>, b, compileEffectLoop(fx.i1, f))
299
+ } else if (fx instanceof Transformer) {
300
+ return new FilterMapLoopEffect(fx.i0 as Fx<R, E, any>, b, compileEffectLoop(liftSyncOperator(fx.i1), f))
301
+ } else {
302
+ return new LoopEffect(fx, f, b)
303
+ }
304
+ }
305
+
306
+ toFx(): Fx<R | R2, E | E2, C> {
307
+ const { i0, i1, i2 } = this
308
+
309
+ return fromSink((sink) =>
310
+ Effect.flatMap(SynchronizedRef.make(i2), (ref) =>
311
+ run(
312
+ i0,
313
+ Sink.WithContext(sink.onFailure, (a) =>
314
+ SynchronizedRef.updateEffect(ref, (b) =>
315
+ Effect.matchCauseEffect(i1(b, a), {
316
+ onFailure: (cause) => Effect.as(sink.onFailure(cause), b),
317
+ onSuccess: ([c, b2]: readonly [C, B]) => Effect.as(sink.onSuccess(c), b2)
318
+ })))
319
+ ))
320
+ )
321
+ }
322
+ }
323
+
324
+ class FilterMapLoopEffect<R, E, A, R2, E2, B, C> extends ToFx<R | R2, E | E2, C> {
325
+ constructor(
326
+ readonly i0: Fx<R, E, A>,
327
+ readonly i1: B,
328
+ readonly i2: (b: B, a: A) => Effect.Effect<R2, E2, Option.Option<readonly [C, B]>>
329
+ ) {
330
+ super(i0, i1, i2)
331
+ }
332
+
333
+ toFx(): Fx<R | R2, E | E2, C> {
334
+ return fromSink((sink) =>
335
+ Effect.suspend(() => {
336
+ let acc = this.i1
337
+
338
+ return run(
339
+ this.i0,
340
+ Sink.WithContext(
341
+ sink.onFailure,
342
+ (a) =>
343
+ this.i2(acc, a).pipe(
344
+ Effect.matchCauseEffect({
345
+ onFailure: sink.onFailure,
346
+ onSuccess: (optionCB) =>
347
+ Effect.suspend(() => {
348
+ if (Option.isNone(optionCB)) return Effect.unit
349
+
350
+ const [c, b] = optionCB.value
351
+ acc = b
352
+
353
+ return sink.onSuccess(c)
354
+ })
355
+ })
356
+ )
357
+ )
358
+ )
359
+ })
360
+ )
361
+ }
362
+ }
363
+
364
+ class FxProvide<R, E, A, R2, E2, B> extends ToFx<Exclude<R, B> | R2, E | E2, A> {
365
+ constructor(
366
+ readonly i0: Fx<R, E, A>,
367
+ readonly i1: Provide.Provide<R2, E2, B>
368
+ ) {
369
+ super(i0, i1)
370
+ }
371
+
372
+ static make<R, E, A, R2, E2, B>(
373
+ fx: Fx<R, E, A>,
374
+ provide: Provide.Provide<R2, E2, B>
375
+ ): Fx<Exclude<R, B> | R2, E | E2, A> {
376
+ if (fx instanceof FxProvide) {
377
+ return new FxProvide(fx.i0, Provide.merge(fx.i1, provide))
378
+ } else {
379
+ return new FxProvide(fx, provide)
380
+ }
381
+ }
382
+
383
+ protected toFx(): Fx<R2 | Exclude<R, B>, E | E2, A> {
384
+ return fromSink((sink) =>
385
+ Effect.catchAllCause(Provide.provideToEffect(run(this.i0, sink), this.i1), sink.onFailure)
386
+ )
387
+ }
388
+ }
389
+
390
+ class Snapshot<R, E, A, R2, E2, B, R3, E3, C> extends ToFx<R | R2 | R3, E | E2 | E3, C> {
391
+ constructor(
392
+ readonly i0: Fx<R, E, A>,
393
+ readonly i1: FxInput<R2, E2, B>,
394
+ readonly i2: (a: A, b: B) => Effect.Effect<R3, E3, C>
395
+ ) {
396
+ super(i0, i1, i2)
397
+ }
398
+
399
+ toFx(): Fx<R | R2 | R3, E | E2 | E3, C> {
400
+ return matchFxInput(this.i1, {
401
+ RefSubject: (fx2) => this.runScoped(this.i0, fx2, this.i2),
402
+ Fx: (fx2) => this.runScoped(this.i0, fx2, this.i2),
403
+ Effect: (effect2) => mapEffect(this.i0, (a) => Effect.flatMap(effect2, (b) => this.i2(a, b))),
404
+ Cause: (cause2) =>
405
+ matchCause(this.i0, {
406
+ onFailure: (cause1) => Effect.failCause(Cause.sequential(cause1, cause2)),
407
+ onSuccess: () => Effect.failCause(cause2)
408
+ }),
409
+ Iterable: (iterable) =>
410
+ withEarlyExit(({ sink }) => {
411
+ const iterator = iterable[Symbol.iterator]()
412
+
413
+ return run(
414
+ this.i0,
415
+ Sink.WithContext(sink.onFailure, (a) => {
416
+ const result = iterator.next()
417
+ if (result.done) {
418
+ return sink.earlyExit
419
+ } else {
420
+ return Effect.matchCauseEffect(this.i2(a, result.value), sink)
421
+ }
422
+ })
423
+ )
424
+ }),
425
+ Otherwise: (b) => mapEffect(this.i0, (a) => this.i2(a, b))
426
+ })
427
+ }
428
+
429
+ private runScoped<R, E, A, R2, E2, B, R3, E3, C>(
430
+ fx: Fx<R, E, A>,
431
+ fx2: Fx<R2, E2, B>,
432
+ f: (a: A, b: B) => Effect.Effect<R3, E3, C>
433
+ ): Fx<R | R2 | R3, E | E2 | E3, C> {
434
+ return withScopedFork(({ fork, sink }) =>
435
+ Effect.flatMap(Ref.make(Option.none<B>()), (ref) =>
436
+ Effect.flatMap(
437
+ fork(run(
438
+ fx2,
439
+ Sink.WithContext(
440
+ sink.onFailure,
441
+ (b) => Ref.set(ref, Option.some(b))
442
+ )
443
+ )),
444
+ () =>
445
+ adjustTime(1).pipe(Effect.zipRight(run(
446
+ fx,
447
+ Sink.WithContext(
448
+ sink.onFailure,
449
+ (a: A) =>
450
+ Effect.flatten(Ref.get(ref)).pipe(
451
+ Effect.flatMap((b: B) => Effect.matchCauseEffect(f(a, b), sink)),
452
+ Effect.optionFromOptional,
453
+ Effect.asUnit
454
+ )
455
+ )
456
+ )))
457
+ ))
458
+ )
459
+ }
460
+ }
461
+
462
+ class Middleware<R, E, A, R2, R3> extends ToFx<R2 | R3, E, A> {
463
+ constructor(
464
+ readonly i0: Fx<R, E, A>,
465
+ readonly i1: (effect: Effect.Effect<R, never, unknown>) => Effect.Effect<R2, never, unknown>,
466
+ readonly i2: (sink: Sink.Sink<E, A>) => Sink.Sink<E, A>
467
+ ) {
468
+ super(i0, i1)
469
+ }
470
+
471
+ static make<R, R2, E, A>(
472
+ fx: Fx<R, E, A>,
473
+ middleware: (effect: Effect.Effect<R, never, unknown>) => Effect.Effect<R2, never, unknown>,
474
+ mapSink: (sink: Sink.Sink<E, A>) => Sink.Sink<E, A>
475
+ ): Fx<R2, E, A> {
476
+ if (fx instanceof Middleware) {
477
+ return new Middleware(fx.i0 as Fx<R, E, any>, (effect) => middleware(fx.i1(effect)), (s) => fx.i2(mapSink(s)))
478
+ } else {
479
+ return new Middleware(fx, middleware, mapSink)
480
+ }
481
+ }
482
+
483
+ protected toFx(): Fx<R2, E, A> {
484
+ return fromSink((sink) => this.i1(run(this.i0, this.i2(sink))))
485
+ }
486
+ }
487
+
488
+ export function succeed<A>(value: A): Fx<never, never, A> {
489
+ return new Succeed(value)
490
+ }
491
+
492
+ export function fromIterable<A>(iterable: Iterable<A>): Fx<never, never, A> {
493
+ return new FromIterable(iterable)
494
+ }
495
+
496
+ export const map: {
497
+ <A, B>(f: (a: A) => B): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
498
+ <R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => B): Fx<R, E, B>
499
+ } = dual(2, function map<R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => B) {
500
+ return Transformer.make<R, E, B>(fx, Map(f))
501
+ })
502
+
503
+ export const mapBoth: {
504
+ <E, E2, A, B>(
505
+ options: {
506
+ readonly onFailure: (e: E) => E2
507
+ readonly onSuccess: (a: A) => B
508
+ }
509
+ ): <R>(fx: Fx<R, E, A>) => Fx<R, E2, B>
510
+
511
+ <R, E, A, E2, B>(
512
+ fx: Fx<R, E, A>,
513
+ options: {
514
+ readonly onFailure: (e: E) => E2
515
+ readonly onSuccess: (a: A) => B
516
+ }
517
+ ): Fx<R, E2, B>
518
+ } = dual(2, function mapBoth<R, E, A, E2, B>(
519
+ fx: Fx<R, E, A>,
520
+ options: {
521
+ readonly onFailure: (e: E) => E2
522
+ readonly onSuccess: (a: A) => B
523
+ }
524
+ ) {
525
+ return map(mapError(fx, options.onFailure), options.onSuccess)
526
+ })
527
+
528
+ export const filter: {
529
+ <A, B extends A>(f: (a: A) => a is B): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
530
+ <A>(f: (a: A) => boolean): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
531
+ <R, E, A, B extends A>(fx: Fx<R, E, A>, f: (a: A) => a is B): Fx<R, E, B>
532
+ <R, E, A>(fx: Fx<R, E, A>, f: (a: A) => boolean): Fx<R, E, A>
533
+ } = dual(2, function map<R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => boolean) {
534
+ return Transformer.make<R, E, B>(fx, Filter(f))
535
+ })
536
+
537
+ export const filterMap: {
538
+ <A, B>(f: (a: A) => Option.Option<B>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
539
+ <R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => Option.Option<B>): Fx<R, E, B>
540
+ } = dual(2, function map<R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => Option.Option<B>) {
541
+ return Transformer.make<R, E, B>(fx, FilterMap(f))
542
+ })
543
+
544
+ export const compact = <R, E, A>(fx: Fx<R, E, Option.Option<A>>): Fx<R, E, A> => filterMap(fx, identity)
545
+
546
+ export const mapErrorCause: {
547
+ <E, E2>(f: (a: Cause.Cause<E>) => Cause.Cause<E2>): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
548
+ <R, E, A, E2>(fx: Fx<R, E, A>, f: (a: Cause.Cause<E>) => Cause.Cause<E2>): Fx<R, E2, A>
549
+ } = dual(2, function map<R, E, A, E2>(fx: Fx<R, E, A>, f: (a: Cause.Cause<E>) => Cause.Cause<E2>) {
550
+ return TransformerCause.make<R, E2, A>(fx, Map(f))
551
+ })
552
+
553
+ export const mapError: {
554
+ <E, E2>(f: (a: E) => E2): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
555
+ <R, E, A, E2>(fx: Fx<R, E, A>, f: (a: E) => E2): Fx<R, E2, A>
556
+ } = dual(2, function map<R, E, A, E2>(fx: Fx<R, E, A>, f: (a: E) => E2) {
557
+ return TransformerCause.make<R, E2, A>(fx, Map(Cause.map(f)))
558
+ })
559
+
560
+ export const filterCause: {
561
+ <E, E2 extends E>(f: (a: Cause.Cause<E>) => a is Cause.Cause<E2>): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
562
+ <E>(f: (a: Cause.Cause<E>) => boolean): <R, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
563
+ <R, E, E2 extends E, A>(fx: Fx<R, E, A>, f: (a: Cause.Cause<E>) => a is Cause.Cause<E2>): Fx<R, E2, A>
564
+ <R, E, A>(fx: Fx<R, E, A>, f: (a: Cause.Cause<E>) => boolean): Fx<R, E, A>
565
+ } = dual(2, function map<R, E, A, E2>(fx: Fx<R, E, A>, f: (a: Cause.Cause<E>) => boolean) {
566
+ return TransformerCause.make<R, E2, A>(fx, Filter(f))
567
+ })
568
+
569
+ export const filterMapCause: {
570
+ <E, E2>(f: (a: Cause.Cause<E>) => Option.Option<Cause.Cause<E2>>): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
571
+ <R, E, A, E2>(fx: Fx<R, E, A>, f: (a: Cause.Cause<E>) => Option.Option<Cause.Cause<E2>>): Fx<R, E2, A>
572
+ } = dual(2, function map<R, E, A, E2>(fx: Fx<R, E, A>, f: (a: Cause.Cause<E>) => Option.Option<Cause.Cause<E2>>) {
573
+ return TransformerCause.make<R, E2, A>(fx, FilterMap(f))
574
+ })
575
+
576
+ export const filterError: {
577
+ <E, E2 extends E>(f: (a: E) => a is E2): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
578
+ <E>(f: (a: E) => boolean): <R, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
579
+ <R, E, E2 extends E, A>(fx: Fx<R, E, A>, f: (a: E) => a is E2): Fx<R, E2, A>
580
+ <R, E, A>(fx: Fx<R, E, A>, f: (a: E) => boolean): Fx<R, E, A>
581
+ } = dual(2, function map<R, E, A>(fx: Fx<R, E, A>, f: (a: E) => boolean) {
582
+ return filterMapCause(fx, (cause) =>
583
+ Cause.failureOrCause(cause).pipe(
584
+ Either.match({
585
+ onLeft: (e) => f(e) ? Option.some(Cause.fail(e)) : Option.none(),
586
+ onRight: Option.some
587
+ })
588
+ ))
589
+ })
590
+
591
+ export const filterMapError: {
592
+ <E, E2>(f: (a: E) => Option.Option<E2>): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
593
+ <R, E, A, E2>(fx: Fx<R, E, A>, f: (a: E) => Option.Option<E2>): Fx<R, E2, A>
594
+ } = dual(2, function map<R, E, A, E2>(fx: Fx<R, E, A>, f: (a: E) => Option.Option<E2>) {
595
+ return filterMapCause(fx, (cause) =>
596
+ Cause.failureOrCause(cause).pipe(
597
+ Either.match({
598
+ onLeft: (e) => Option.map(f(e), Cause.fail),
599
+ onRight: Option.some
600
+ })
601
+ ))
602
+ })
603
+
604
+ export const filterMapErrorEffect: {
605
+ <E, R2, E2, B>(f: (e: E) => Effect.Effect<R2, E2, Option.Option<B>>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2 | B, A>
606
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (e: E) => Effect.Effect<R2, E2, Option.Option<B>>): Fx<R | R2, E2 | B, A>
607
+ } = dual(2, <R, E, A, R2, E2, B>(
608
+ fx: Fx<R, E, A>,
609
+ f: (e: E) => Effect.Effect<R2, E2, Option.Option<B>>
610
+ ): Fx<R | R2, B | E2, A> => {
611
+ return fromSink((sink) =>
612
+ run(
613
+ fx,
614
+ Sink.WithContext(
615
+ (cause) =>
616
+ Either.match(Cause.failureOrCause(cause), {
617
+ onLeft: (e) =>
618
+ Effect.matchCauseEffect(f(e), {
619
+ onFailure: sink.onFailure,
620
+ onSuccess: Option.match({
621
+ onNone: () => Effect.unit,
622
+ onSome: (b) => sink.onFailure(Cause.fail(b))
623
+ })
624
+ }),
625
+ onRight: sink.onFailure
626
+ }),
627
+ sink.onSuccess
628
+ )
629
+ )
630
+ )
631
+ })
632
+
633
+ export function observe<R, E, A, R2, E2>(
634
+ fx: Fx<R, E, A>,
635
+ onSuccees: (a: A) => Effect.Effect<R2, E2, unknown>
636
+ ): Effect.Effect<R | R2, E | E2, void> {
637
+ return helpers.withScopedFork((fork) =>
638
+ Effect.flatMap(Deferred.make<E | E2, void>(), (deferred) =>
639
+ run(
640
+ fx,
641
+ Sink.WithContext(
642
+ (cause) => Deferred.failCause(deferred, cause),
643
+ (a) => Effect.catchAllCause(onSuccees(a), (cause) => Deferred.failCause(deferred, cause))
644
+ )
645
+ ).pipe(
646
+ Effect.intoDeferred(deferred),
647
+ fork,
648
+ Effect.flatMap(() => Deferred.await(deferred))
649
+ ))
650
+ )
651
+ }
652
+
653
+ export function drain<R, E, A>(fx: Fx<R, E, A>): Effect.Effect<R, E, void> {
654
+ return observe(fx, constUnit)
655
+ }
656
+
657
+ export function toArray<R, E, A>(fx: Fx<R, E, A>): Effect.Effect<R, E, Array<A>> {
658
+ return Effect.suspend(() => {
659
+ const array: Array<A> = []
660
+
661
+ return Effect.as(
662
+ observe(fx, (a) => Effect.sync(() => array.push(a))),
663
+ array
664
+ )
665
+ })
666
+ }
667
+
668
+ export function toReadonlyArray<R, E, A>(fx: Fx<R, E, A>): Effect.Effect<R, E, ReadonlyArray<A>> {
669
+ return toArray(fx)
670
+ }
671
+
672
+ export const flatMapWithStrategy: {
673
+ <A, R2, E2, B>(
674
+ f: (a: A) => FxInput<R2, E2, B>,
675
+ strategy: FlattenStrategy
676
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
677
+ <R, E, A, R2, E2, B>(
678
+ fx: Fx<R, E, A>,
679
+ f: (a: A) => FxInput<R2, E2, B>,
680
+ strategy: FlattenStrategy
681
+ ): Fx<R | R2, E | E2, B>
682
+ } = dual(
683
+ 3,
684
+ function flatMapWithStrategy<R, E, A, R2, E2, B>(
685
+ fx: Fx<R, E, A>,
686
+ f: (a: A) => FxInput<R2, E2, B>,
687
+ strategy: FlattenStrategy
688
+ ): Fx<R | R2, E | E2, B> {
689
+ return new WithFlattenStrategy(
690
+ ({ fork, sink }) => run(fx, Sink.WithContext(sink.onFailure, (a) => fork(run(from(f(a)), sink)))),
691
+ strategy
692
+ )
693
+ }
694
+ )
695
+
696
+ export const switchMap: {
697
+ <A, R2, E2, B>(f: (a: A) => FxInput<R2, E2, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
698
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B>
699
+ } = dual(
700
+ 2,
701
+ function switchMap<R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B> {
702
+ return flatMapWithStrategy(fx, f, strategies.Switch)
703
+ }
704
+ )
705
+
706
+ export const exhaustMap: {
707
+ <A, R2, E2, B>(f: (a: A) => FxInput<R2, E2, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
708
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B>
709
+ } = dual(
710
+ 2,
711
+ function exhaustmap<R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B> {
712
+ return flatMapWithStrategy(fx, f, strategies.Exhaust)
713
+ }
714
+ )
715
+
716
+ export const exhaust = <R, E, R2, E2, A>(fx: Fx<R, E, Fx<R2, E2, A>>) => exhaustMap(fx, identity)
717
+
718
+ export const exhaustMapLatest: {
719
+ <A, R2, E2, B>(f: (a: A) => FxInput<R2, E2, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
720
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B>
721
+ } = dual(
722
+ 2,
723
+ function exhaustMapLatest<R, E, A, R2, E2, B>(
724
+ fx: Fx<R, E, A>,
725
+ f: (a: A) => FxInput<R2, E2, B>
726
+ ): Fx<R | R2, E | E2, B> {
727
+ return flatMapWithStrategy(fx, f, strategies.ExhaustLatest)
728
+ }
729
+ )
730
+
731
+ export const exhaustLatest = <R, E, R2, E2, A>(fx: Fx<R, E, Fx<R2, E2, A>>) => exhaustMapLatest(fx, identity)
732
+
733
+ export const flatMap: {
734
+ <A, R2, E2, B>(f: (a: A) => FxInput<R2, E2, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
735
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B>
736
+ } = dual(
737
+ 2,
738
+ function flatMap<R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B> {
739
+ return flatMapWithStrategy(fx, f, strategies.Unbounded)
740
+ }
741
+ )
742
+
743
+ export const flatten = <R, E, R2, E2, A>(fx: Fx<R, E, Fx<R2, E2, A>>) => flatMap(fx, identity)
744
+
745
+ export const flatMapConcurrently: {
746
+ <A, R2, E2, B>(f: (a: A) => FxInput<R2, E2, B>, concurrency: number): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
747
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>, concurrency: number): Fx<R | R2, E | E2, B>
748
+ } = dual(
749
+ 3,
750
+ function flatMapConcurrently<R, E, A, R2, E2, B>(
751
+ fx: Fx<R, E, A>,
752
+ f: (a: A) => FxInput<R2, E2, B>,
753
+ concurrency: number
754
+ ): Fx<R | R2, E | E2, B> {
755
+ return flatMapWithStrategy(fx, f, strategies.Bounded(concurrency))
756
+ }
757
+ )
758
+
759
+ export const concatMap: {
760
+ <A, R2, E2, B>(f: (a: A) => FxInput<R2, E2, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
761
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B>
762
+ } = dual(
763
+ 2,
764
+ function concatMap<R, E, A, R2, E2, B>(
765
+ fx: Fx<R, E, A>,
766
+ f: (a: A) => FxInput<R2, E2, B>
767
+ ): Fx<R | R2, E | E2, B> {
768
+ return flatMapConcurrently(fx, f, 1)
769
+ }
770
+ )
771
+
772
+ export const acquireUseRelease: {
773
+ <A, R2, E2, B, R3, E3>(
774
+ use: (a: A) => FxInput<R2, E2, B>,
775
+ release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R3, E3, unknown>
776
+ ): <R, E>(acquire: Effect.Effect<R, E, A>) => Fx<R | R2 | R3, E | E2 | E3, B>
777
+
778
+ <R, E, A, R2, E2, B, R3, E3>(
779
+ acquire: Effect.Effect<R, E, A>,
780
+ use: (a: A) => FxInput<R2, E2, B>,
781
+ release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R3, E3, unknown>
782
+ ): Fx<R | R2 | R3, E | E2 | E3, B>
783
+ } = dual(3, function acquireUseRelease<R, E, A, R2, E2, B, R3, E3>(
784
+ acquire: Effect.Effect<R, E, A>,
785
+ use: (a: A) => FxInput<R2, E2, B>,
786
+ release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R3, E3, unknown>
787
+ ): Fx<R | R2 | R3, E | E2 | E3, B> {
788
+ return fromSink((sink) =>
789
+ Effect.catchAllCause(
790
+ Effect.acquireUseRelease(
791
+ acquire,
792
+ (a) => run(from(use(a)), sink),
793
+ (a, exit) => Effect.catchAllCause(release(a, exit), sink.onFailure)
794
+ ),
795
+ sink.onFailure
796
+ )
797
+ )
798
+ })
799
+
800
+ export function combine<const FX extends ReadonlyArray<Fx<any, any, any>>>(
801
+ fxs: FX
802
+ ): Fx<
803
+ Fx.Context<FX[number]>,
804
+ Fx.Error<FX[number]>,
805
+ {
806
+ readonly [K in keyof FX]: Fx.Success<FX[K]>
807
+ }
808
+ > {
809
+ return fromSink((sink) =>
810
+ Effect.suspend(() => {
811
+ const total = fxs.length
812
+
813
+ if (total === 0) return Effect.unit
814
+
815
+ const values = new globalThis.Map<number, any>()
816
+ const sample = () =>
817
+ Array.from({ length: total }, (_, i) => values.get(i)) as {
818
+ readonly [K in keyof FX]: Fx.Success<FX[K]>
819
+ }
820
+
821
+ const emitIfReady = (value: any, index: number) =>
822
+ Effect.suspend(() => {
823
+ values.set(index, value)
824
+ if (values.size === total) {
825
+ return sink.onSuccess(sample())
826
+ } else {
827
+ return Effect.unit
828
+ }
829
+ })
830
+
831
+ return Effect.all(
832
+ fxs.map((fx, index) => run(fx, Sink.WithContext(sink.onFailure, (a) => emitIfReady(a, index)))),
833
+ { concurrency: "unbounded" }
834
+ )
835
+ })
836
+ )
837
+ }
838
+
839
+ export function struct<const FX extends Readonly<Record<PropertyKey, Fx<any, any, any>>>>(
840
+ fxs: FX
841
+ ): Fx<
842
+ Fx.Context<FX[string]>,
843
+ Fx.Error<FX[string]>,
844
+ {
845
+ readonly [K in keyof FX]: Fx.Success<FX[K]>
846
+ }
847
+ > {
848
+ return map(combine(Reflect.ownKeys(fxs).map((k) => map(fxs[k], (a) => [k, a] as const))), Object.fromEntries)
849
+ }
850
+
851
+ export function merge<const FX extends ReadonlyArray<Fx<any, any, any>>>(
852
+ fxs: FX
853
+ ): Fx<
854
+ Fx.Context<FX[number]>,
855
+ Fx.Error<FX[number]>,
856
+ Fx.Success<FX[number]>
857
+ > {
858
+ return Merge.make(fxs, strategies.Unordered(Infinity))
859
+ }
860
+
861
+ export const mergeConcurrently: {
862
+ (concurrency: number): <const FX extends ReadonlyArray<Fx<any, any, any>>>(
863
+ fxs: FX
864
+ ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>>
865
+ <const FX extends ReadonlyArray<Fx<any, any, any>>>(
866
+ fxs: FX,
867
+ concurrency: number
868
+ ): Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>>
869
+ } = dual(2, function mergeConcurrently<FX extends ReadonlyArray<Fx<any, any, any>>>(
870
+ fxs: FX,
871
+ concurrency: number
872
+ ): Fx<
873
+ Fx.Context<FX[number]>,
874
+ Fx.Error<FX[number]>,
875
+ Fx.Success<FX[number]>
876
+ > {
877
+ return Merge.make(fxs, strategies.Unordered(concurrency))
878
+ })
879
+
880
+ export function mergeBuffer<const FX extends ReadonlyArray<Fx<any, any, any>>>(
881
+ fxs: FX
882
+ ): Fx<
883
+ Fx.Context<FX[number]>,
884
+ Fx.Error<FX[number]>,
885
+ Fx.Success<FX[number]>
886
+ > {
887
+ return Merge.make(fxs, strategies.Ordered(Infinity))
888
+ }
889
+
890
+ export const mergeBufferConcurrently: {
891
+ (concurrency: number): <const FX extends ReadonlyArray<Fx<any, any, any>>>(
892
+ fxs: FX
893
+ ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>>
894
+ <const FX extends ReadonlyArray<Fx<any, any, any>>>(
895
+ fxs: FX,
896
+ concurrency: number
897
+ ): Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>>
898
+ } = dual(2, function mergeConcurrently<FX extends ReadonlyArray<Fx<any, any, any>>>(
899
+ fxs: FX,
900
+ concurrency: number
901
+ ): Fx<
902
+ Fx.Context<FX[number]>,
903
+ Fx.Error<FX[number]>,
904
+ Fx.Success<FX[number]>
905
+ > {
906
+ return Merge.make(fxs, strategies.Ordered(concurrency))
907
+ })
908
+
909
+ export const mergeSwitch = <const FX extends ReadonlyArray<Fx<any, any, any>>>(
910
+ fxs: FX
911
+ ): Fx<
912
+ Fx.Context<FX[number]>,
913
+ Fx.Error<FX[number]>,
914
+ Fx.Success<FX[number]>
915
+ > => Merge.make(fxs, strategies.Switch)
916
+
917
+ export function race<const FX extends ReadonlyArray<Fx<any, any, any>>>(
918
+ fxs: FX
919
+ ): Fx<
920
+ Fx.Context<FX[number]>,
921
+ Fx.Error<FX[number]>,
922
+ Fx.Success<FX[number]>
923
+ > {
924
+ if (fxs.length === 0) return empty
925
+ if (fxs.length === 1) return fxs[0]
926
+
927
+ return withScopedFork(({ fork, sink }) =>
928
+ Effect.asyncEffect<
929
+ never,
930
+ never,
931
+ readonly [
932
+ number,
933
+ Array<Fiber.Fiber<never, unknown>>
934
+ ],
935
+ Fx.Context<FX[number]>,
936
+ never,
937
+ unknown
938
+ >((resume) =>
939
+ Effect.gen(function*(_) {
940
+ let winningIndex = -1
941
+ const fibers: Array<Fiber.Fiber<never, unknown>> = yield* _(
942
+ Effect.forEach(fxs, (fx, i) =>
943
+ fork(
944
+ run(
945
+ fx,
946
+ Sink.Sink(
947
+ (cause) => Effect.suspend(() => pickWinner(i) ? sink.onFailure(cause) : Effect.unit),
948
+ (a) => Effect.suspend(() => pickWinner(i) ? sink.onSuccess(a) : Effect.unit)
949
+ )
950
+ )
951
+ ))
952
+ )
953
+
954
+ function pickWinner(i: number) {
955
+ if (winningIndex === -1) {
956
+ winningIndex = i
957
+ resume(Effect.succeed([i, fibers]))
958
+ }
959
+
960
+ return winningIndex === i
961
+ }
962
+ })
963
+ ).pipe(
964
+ Effect.flatMap(([winningIndex, fibers]) =>
965
+ Effect.suspend(() => {
966
+ const [winner] = fibers.splice(winningIndex, 1)
967
+
968
+ return Effect.flatMap(Fiber.interruptAll(fibers), () => Fiber.join(winner))
969
+ })
970
+ )
971
+ )
972
+ )
973
+ }
974
+
975
+ export const empty: Fx<never, never, never> = new Empty()
976
+
977
+ export const never: Fx<never, never, never> = new Never()
978
+
979
+ export const failCause = <E>(cause: Cause.Cause<E>): Fx<never, E, never> => new Fail(cause)
980
+
981
+ export const fail = <E>(e: E): Fx<never, E, never> => failCause(Cause.fail(e))
982
+
983
+ export const fromSink = <R, E, A>(
984
+ f: (sink: Sink.Sink<E, A>) => Effect.Effect<R, E, unknown>
985
+ ): Fx<R, E, A> => new FromSink((sink) => Effect.catchAllCause(f(sink), sink.onFailure))
986
+
987
+ export const suspend = <R, E, A>(f: () => Fx<R, E, A>): Fx<R, E, A> => new Suspend(f)
988
+
989
+ export const sync = <A>(f: () => A): Fx<never, never, A> => new Sync(f)
990
+
991
+ export const slice: {
992
+ (skip: number, take: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
993
+ <R, E, A>(fx: Fx<R, E, A>, skip: number, take: number): Fx<R, E, A>
994
+ } = dual(3, function slice<R, E, A>(fx: Fx<R, E, A>, skip: number, take: number): Fx<R, E, A> {
995
+ return Slice.make(fx, boundsFrom(skip, take))
996
+ })
997
+
998
+ export const take: {
999
+ (n: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1000
+ <R, E, A>(fx: Fx<R, E, A>, n: number): Fx<R, E, A>
1001
+ } = dual(2, function take<R, E, A>(fx: Fx<R, E, A>, n: number): Fx<R, E, A> {
1002
+ return slice(fx, 0, n)
1003
+ })
1004
+
1005
+ export const drop: {
1006
+ (n: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1007
+ <R, E, A>(fx: Fx<R, E, A>, n: number): Fx<R, E, A>
1008
+ } = dual(2, function drop<R, E, A>(fx: Fx<R, E, A>, n: number): Fx<R, E, A> {
1009
+ return slice(fx, n, Infinity)
1010
+ })
1011
+
1012
+ export const takeWhile: {
1013
+ <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1014
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1015
+ } = dual(
1016
+ 2,
1017
+ function takeWhile<R, E, A, R2, E2>(
1018
+ fx: Fx<R, E, A>,
1019
+ predicate: (a: A) => Effect.Effect<R2, E2, boolean>
1020
+ ): Fx<R | R2, E | E2, A> {
1021
+ return withEarlyExit(({ sink }) =>
1022
+ run(
1023
+ fx,
1024
+ Sink.WithContext(sink.onFailure, (a) =>
1025
+ Effect.matchCauseEffect(predicate(a), {
1026
+ onFailure: sink.onFailure,
1027
+ onSuccess: (b) => b ? sink.onSuccess(a) : sink.earlyExit
1028
+ }))
1029
+ )
1030
+ )
1031
+ }
1032
+ )
1033
+
1034
+ export const takeUntil: {
1035
+ <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1036
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1037
+ } = dual(
1038
+ 2,
1039
+ function takeUntil<R, E, A, R2, E2>(
1040
+ fx: Fx<R, E, A>,
1041
+ predicate: (a: A) => Effect.Effect<R2, E2, boolean>
1042
+ ): Fx<R | R2, E | E2, A> {
1043
+ return takeWhile(fx, (a) => Effect.map(predicate(a), (x) => !x))
1044
+ }
1045
+ )
1046
+
1047
+ export const dropWhile: {
1048
+ <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1049
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1050
+ } = dual(
1051
+ 2,
1052
+ function dropWhile<R, E, A, R2, E2>(
1053
+ fx: Fx<R, E, A>,
1054
+ predicate: (a: A) => Effect.Effect<R2, E2, boolean>
1055
+ ): Fx<R | R2, E | E2, A> {
1056
+ return withEarlyExit(({ sink }) =>
1057
+ Effect.suspend(() => {
1058
+ let isDropping = true
1059
+
1060
+ return run(
1061
+ fx,
1062
+ Sink.WithContext(sink.onFailure, (a) =>
1063
+ isDropping ?
1064
+ Effect.matchCauseEffect(predicate(a), {
1065
+ onFailure: sink.onFailure,
1066
+ onSuccess: (b) => {
1067
+ if (b) {
1068
+ return Effect.unit
1069
+ } else {
1070
+ isDropping = false
1071
+ return sink.onSuccess(a)
1072
+ }
1073
+ }
1074
+ }) :
1075
+ sink.onSuccess(a))
1076
+ )
1077
+ })
1078
+ )
1079
+ }
1080
+ )
1081
+
1082
+ export const dropUntil: {
1083
+ <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1084
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1085
+ } = dual(
1086
+ 2,
1087
+ function dropUntil<R, E, A, R2, E2>(
1088
+ fx: Fx<R, E, A>,
1089
+ predicate: (a: A) => Effect.Effect<R2, E2, boolean>
1090
+ ): Fx<R | R2, E | E2, A> {
1091
+ return dropWhile(fx, (a) => Effect.map(predicate(a), (x) => !x))
1092
+ }
1093
+ )
1094
+
1095
+ export const dropAfter: {
1096
+ <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1097
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1098
+ } = dual(
1099
+ 2,
1100
+ function dropAfter<R, E, A, R2, E2>(
1101
+ fx: Fx<R, E, A>,
1102
+ predicate: (a: A) => Effect.Effect<R2, E2, boolean>
1103
+ ): Fx<R | R2, E | E2, A> {
1104
+ return fromSink((sink) =>
1105
+ Effect.suspend(() => {
1106
+ let isDropping = false
1107
+
1108
+ return run(
1109
+ fx,
1110
+ Sink.WithContext(sink.onFailure, (a) =>
1111
+ isDropping ?
1112
+ Effect.unit :
1113
+ Effect.matchCauseEffect(predicate(a), {
1114
+ onFailure: sink.onFailure,
1115
+ onSuccess: (b) => {
1116
+ if (b) {
1117
+ isDropping = true
1118
+ return Effect.unit
1119
+ } else {
1120
+ return sink.onSuccess(a)
1121
+ }
1122
+ }
1123
+ }))
1124
+ )
1125
+ })
1126
+ )
1127
+ }
1128
+ )
1129
+
1130
+ export const continueWith: {
1131
+ <R2, E2, B>(f: () => Fx<R2, E2, B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A | B>
1132
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: () => Fx<R2, E2, B>): Fx<R | R2, E | E2, A | B>
1133
+ } = dual(
1134
+ 2,
1135
+ function continueWith<R, E, R2, E2, A>(fx: Fx<R, E, A>, f: () => Fx<R2, E2, A>): Fx<R | R2, E | E2, A> {
1136
+ return fromSink((sink) => Effect.flatMap(run(fx, sink), () => run(f(), sink)))
1137
+ }
1138
+ )
1139
+
1140
+ export const recoverWith: {
1141
+ <E, R2, E2, B>(f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1142
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (cause: Cause.Cause<E>) => Fx<R2, E2, A>): Fx<R | R2, E2, A | B>
1143
+ } = dual(
1144
+ 2,
1145
+ function recoverWith<R, E, A, R2, E2, B>(
1146
+ fx: Fx<R, E, A>,
1147
+ f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1148
+ ): Fx<R | R2, E2, A | B> {
1149
+ return fromSink((sink) => Effect.catchAllCause(observe(fx, sink.onSuccess), (cause) => run(from(f(cause)), sink)))
1150
+ }
1151
+ )
1152
+
1153
+ export const mapEffect: {
1154
+ <A, R2, E2, B>(f: (a: A) => Effect.Effect<R2, E2, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
1155
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => Effect.Effect<R2, E2, B>): Fx<R | R2, E | E2, B>
1156
+ } = dual(
1157
+ 2,
1158
+ function mapEffect<R, E, A, R2, E2, B>(
1159
+ fx: Fx<R, E, A>,
1160
+ f: (a: A) => Effect.Effect<R2, E2, B>
1161
+ ): Fx<R | R2, E | E2, B> {
1162
+ return TransformerEffect.make(fx, MapEffect(f))
1163
+ }
1164
+ )
1165
+
1166
+ export const tap: {
1167
+ <A, R2, E2, B>(f: (a: A) => Effect.Effect<R2, E2, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1168
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => Effect.Effect<R2, E2, B>): Fx<R | R2, E | E2, A>
1169
+ } = dual(
1170
+ 2,
1171
+ function tap<R, E, A, R2, E2, B>(
1172
+ fx: Fx<R, E, A>,
1173
+ f: (a: A) => Effect.Effect<R2, E2, B>
1174
+ ): Fx<R | R2, E | E2, A> {
1175
+ return TransformerEffect.make(fx, TapEffect(f))
1176
+ }
1177
+ )
1178
+
1179
+ export const filterEffect: {
1180
+ <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1181
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1182
+ } = dual(2, function filterEffect<R, E, A, R2, E2>(
1183
+ fx: Fx<R, E, A>,
1184
+ predicate: (a: A) => Effect.Effect<R2, E2, boolean>
1185
+ ): Fx<R | R2, E | E2, A> {
1186
+ return TransformerEffect.make(fx, FilterEffect(predicate))
1187
+ })
1188
+
1189
+ export const filterMapEffect: {
1190
+ <A, R2, E2, B>(f: (a: A) => Effect.Effect<R2, E2, Option.Option<B>>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
1191
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => Effect.Effect<R2, E2, Option.Option<B>>): Fx<R | R2, E | E2, B>
1192
+ } = dual(2, function filterEffect<R, E, A, R2, E2, B>(
1193
+ fx: Fx<R, E, A>,
1194
+ f: (a: A) => Effect.Effect<R2, E2, Option.Option<B>>
1195
+ ): Fx<R | R2, E | E2, A> {
1196
+ return TransformerEffect.make(fx, FilterMapEffect(f))
1197
+ })
1198
+
1199
+ export const middleware: {
1200
+ <R, E, A, R2>(
1201
+ f: (effect: Effect.Effect<R, never, unknown>) => Effect.Effect<R2, never, unknown>,
1202
+ g?: (sink: Sink.Sink<E, A>) => Sink.Sink<E, A>
1203
+ ): (fx: Fx<R, E, A>) => Fx<R2, E, A>
1204
+
1205
+ <R, E, A, R2>(
1206
+ fx: Fx<R, E, A>,
1207
+ f: (effect: Effect.Effect<R, never, unknown>) => Effect.Effect<R2, never, unknown>,
1208
+ g?: (sink: Sink.Sink<E, A>) => Sink.Sink<E, A>
1209
+ ): Fx<R2, E, A>
1210
+ } = dual((args) => args.length === 3 || typeof args[0] !== "function", function middleware<R, E, A, R2>(
1211
+ fx: Fx<R, E, A>,
1212
+ f: (effect: Effect.Effect<R, never, unknown>) => Effect.Effect<R2, never, unknown>,
1213
+ g?: (sink: Sink.Sink<E, A>) => Sink.Sink<E, A>
1214
+ ): Fx<R2, E, A> {
1215
+ return Middleware.make(fx, f, g ?? identity)
1216
+ })
1217
+
1218
+ export const loop: {
1219
+ <A, B, C>(seed: B, f: (acc: B, a: A) => readonly [C, B]): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, C>
1220
+ <R, E, A, B, C>(fx: Fx<R, E, A>, seed: B, f: (acc: B, a: A) => readonly [C, B]): Fx<R, E, C>
1221
+ } = dual(3, function loop<R, E, A, B, C>(
1222
+ fx: Fx<R, E, A>,
1223
+ seed: B,
1224
+ f: (acc: B, a: A) => readonly [C, B]
1225
+ ): Fx<R, E, C> {
1226
+ return Loop.make(fx, seed, f)
1227
+ })
1228
+
1229
+ export const loopEffect: {
1230
+ <B, A, R2, E2, C>(
1231
+ seed: B,
1232
+ f: (acc: B, a: A) => Effect.Effect<R2, E2, readonly [C, B]>
1233
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, C>
1234
+
1235
+ <R, E, A, B, R2, E2, C>(
1236
+ fx: Fx<R, E, A>,
1237
+ seed: B,
1238
+ f: (acc: B, a: A) => Effect.Effect<R2, E2, readonly [C, B]>
1239
+ ): Fx<R | R2, E | E2, C>
1240
+ } = dual(3, function loopEffect<R, E, A, B, R2, E2, C>(
1241
+ fx: Fx<R, E, A>,
1242
+ seed: B,
1243
+ f: (acc: B, a: A) => Effect.Effect<R2, E2, readonly [C, B]>
1244
+ ): Fx<R | R2, E | E2, C> {
1245
+ return LoopEffect.make(fx, f, seed)
1246
+ })
1247
+
1248
+ export const startWith: {
1249
+ <B>(value: B): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A | B>
1250
+ <R, E, A, B>(fx: Fx<R, E, A>, value: B): Fx<R, E, A | B>
1251
+ } = dual(2, function startWith<R, E, A, B>(fx: Fx<R, E, A>, value: B): Fx<R, E, A | B> {
1252
+ return fromSink((sink) => Effect.flatMap(sink.onSuccess(value), () => run(fx, sink)))
1253
+ })
1254
+
1255
+ export const endWith: {
1256
+ <B>(value: B): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A | B>
1257
+ <R, E, A, B>(fx: Fx<R, E, A>, value: B): Fx<R, E, A | B>
1258
+ } = dual(2, function endWith<R, E, A, B>(fx: Fx<R, E, A>, value: B): Fx<R, E, A | B> {
1259
+ return fromSink((sink) => Effect.flatMap(run(fx, sink), () => sink.onSuccess(value)))
1260
+ })
1261
+
1262
+ export const scan: {
1263
+ <A, B>(seed: B, f: (acc: B, a: A) => B): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
1264
+ <R, E, A, B>(fx: Fx<R, E, A>, seed: B, f: (acc: B, a: A) => B): Fx<R, E, B>
1265
+ } = dual(3, function loop<R, E, A, B>(
1266
+ fx: Fx<R, E, A>,
1267
+ seed: B,
1268
+ f: (acc: B, a: A) => B
1269
+ ): Fx<R, E, B> {
1270
+ return continueWith(
1271
+ new Succeed(seed),
1272
+ () =>
1273
+ Loop.make(fx, seed, (b, a) => {
1274
+ const b2 = f(b, a)
1275
+
1276
+ return [b2, b2]
1277
+ })
1278
+ )
1279
+ })
1280
+
1281
+ export const scanEffect: {
1282
+ <A, B, R2, E2>(
1283
+ seed: B,
1284
+ f: (acc: B, a: A) => Effect.Effect<R2, E2, B>
1285
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
1286
+ <R, E, A, B, R2, E2>(fx: Fx<R, E, A>, seed: B, f: (acc: B, a: A) => Effect.Effect<R2, E2, B>): Fx<R | R2, E | E2, B>
1287
+ } = dual(3, function loopEffect<R, E, A, B, R2, E2>(
1288
+ fx: Fx<R, E, A>,
1289
+ seed: B,
1290
+ f: (acc: B, a: A) => Effect.Effect<R2, E2, B>
1291
+ ): Fx<R | R2, E | E2, B> {
1292
+ return continueWith(
1293
+ new Succeed(seed),
1294
+ () => LoopEffect.make(fx, (b, a) => Effect.map(f(b, a), (b2) => [b2, b2]), seed)
1295
+ )
1296
+ })
1297
+
1298
+ export const flatMapCauseWithStrategy: {
1299
+ <E, R2, E2, B>(
1300
+ f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>,
1301
+ strategy: FlattenStrategy
1302
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1303
+ <R, E, A, R2, E2, B>(
1304
+ fx: Fx<R, E, A>,
1305
+ f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>,
1306
+ strategy: FlattenStrategy
1307
+ ): Fx<R | R2, E2, A | B>
1308
+ } = dual(3, function flatMapCause<R, E, A, R2, E2, B>(
1309
+ fx: Fx<R, E, A>,
1310
+ f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>,
1311
+ strategy: FlattenStrategy
1312
+ ): Fx<R | R2, E2, A | B> {
1313
+ return new WithFlattenStrategy(
1314
+ ({ fork, sink }) => run(fx, Sink.WithContext((cause) => fork(run(from(f(cause)), sink)), sink.onSuccess)),
1315
+ strategy
1316
+ )
1317
+ })
1318
+
1319
+ export const flatMapErrorWithStrategy: {
1320
+ <E, R2, E2, B>(
1321
+ f: (error: E) => FxInput<R2, E2, B>,
1322
+ strategy: FlattenStrategy
1323
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1324
+ <R, E, A, R2, E2, B>(
1325
+ fx: Fx<R, E, A>,
1326
+ f: (error: E) => FxInput<R2, E2, B>,
1327
+ strategy: FlattenStrategy
1328
+ ): Fx<R | R2, E2, A | B>
1329
+ } = dual(3, function flatMapCause<R, E, A, R2, E2, B>(
1330
+ fx: Fx<R, E, A>,
1331
+ f: (error: E) => FxInput<R2, E2, B>,
1332
+ strategy: FlattenStrategy
1333
+ ): Fx<R | R2, E2, A | B> {
1334
+ return new WithFlattenStrategy(
1335
+ ({ fork, sink }) =>
1336
+ run(
1337
+ fx,
1338
+ Sink.WithContext((cause) =>
1339
+ fork(run(
1340
+ from(cause.pipe(
1341
+ Cause.failureOrCause,
1342
+ Either.match({
1343
+ onLeft: f,
1344
+ onRight: failCause
1345
+ })
1346
+ )),
1347
+ sink
1348
+ )), sink.onSuccess)
1349
+ ),
1350
+ strategy
1351
+ )
1352
+ })
1353
+
1354
+ export const flatMapCause: {
1355
+ <E, R2, E2, B>(f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1356
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>): Fx<R | R2, E2, A | B>
1357
+ } = dual(2, function flatMapCause<R, E, A, R2, E2, B>(
1358
+ fx: Fx<R, E, A>,
1359
+ f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1360
+ ): Fx<R | R2, E2, A | B> {
1361
+ return flatMapCauseWithStrategy(fx, f, strategies.Unbounded)
1362
+ })
1363
+
1364
+ export const flatMapError: {
1365
+ <E, R2, E2, B>(f: (error: E) => FxInput<R2, E2, B>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1366
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (error: E) => FxInput<R2, E2, B>): Fx<R | R2, E2, A | B>
1367
+ } = dual(2, function flatMapError<R, E, A, R2, E2, B>(
1368
+ fx: Fx<R, E, A>,
1369
+ f: (error: E) => FxInput<R2, E2, B>
1370
+ ): Fx<R | R2, E2, A | B> {
1371
+ return flatMapErrorWithStrategy(fx, f, strategies.Unbounded)
1372
+ })
1373
+
1374
+ export const flatMapCauseConcurrently: {
1375
+ <E, R2, E2, B>(
1376
+ f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>,
1377
+ concurrency: number
1378
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1379
+ <R, E, A, R2, E2, B>(
1380
+ fx: Fx<R, E, A>,
1381
+ f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>,
1382
+ concurrency: number
1383
+ ): Fx<R | R2, E2, A | B>
1384
+ } = dual(3, function flatMapCauseConcurrently<R, E, A, R2, E2, B>(
1385
+ fx: Fx<R, E, A>,
1386
+ f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>,
1387
+ concurrency: number
1388
+ ): Fx<R | R2, E2, A | B> {
1389
+ return flatMapCauseWithStrategy(fx, f, strategies.Bounded(concurrency))
1390
+ })
1391
+
1392
+ export const flatMapErrorConcurrently: {
1393
+ <E, R2, E2, B>(
1394
+ f: (error: E) => FxInput<R2, E2, B>,
1395
+ concurrency: number
1396
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1397
+ <R, E, A, R2, E2, B>(
1398
+ fx: Fx<R, E, A>,
1399
+ f: (error: E) => FxInput<R2, E2, B>,
1400
+ concurrency: number
1401
+ ): Fx<R | R2, E2, A | B>
1402
+ } = dual(3, function flatMapCauseConcurrently<R, E, A, R2, E2, B>(
1403
+ fx: Fx<R, E, A>,
1404
+ f: (error: E) => FxInput<R2, E2, B>,
1405
+ concurrency: number
1406
+ ): Fx<R | R2, E2, A | B> {
1407
+ return flatMapErrorWithStrategy(fx, f, strategies.Bounded(concurrency))
1408
+ })
1409
+
1410
+ export const switchMapCause: {
1411
+ <E, R2, E2, B>(f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1412
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>): Fx<R | R2, E2, A | B>
1413
+ } = dual(2, function switchMapCause<R, E, A, R2, E2, B>(
1414
+ fx: Fx<R, E, A>,
1415
+ f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1416
+ ): Fx<R | R2, E2, A | B> {
1417
+ return flatMapCauseWithStrategy(fx, f, strategies.Switch)
1418
+ })
1419
+
1420
+ export const switchMapError: {
1421
+ <E, R2, E2, B>(f: (error: E) => FxInput<R2, E2, B>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1422
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (error: E) => FxInput<R2, E2, B>): Fx<R | R2, E2, A | B>
1423
+ } = dual(2, function switchMapError<R, E, A, R2, E2, B>(
1424
+ fx: Fx<R, E, A>,
1425
+ f: (error: E) => FxInput<R2, E2, B>
1426
+ ): Fx<R | R2, E2, A | B> {
1427
+ return flatMapErrorWithStrategy(fx, f, strategies.Switch)
1428
+ })
1429
+
1430
+ export const exhaustMapCause: {
1431
+ <E, R2, E2, B>(f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1432
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>): Fx<R | R2, E2, A | B>
1433
+ } = dual(2, function exhaustMapCause<R, E, A, R2, E2, B>(
1434
+ fx: Fx<R, E, A>,
1435
+ f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1436
+ ): Fx<R | R2, E2, A | B> {
1437
+ return flatMapCauseWithStrategy(fx, f, strategies.Exhaust)
1438
+ })
1439
+
1440
+ export const exhaustMapError: {
1441
+ <E, R2, E2, B>(f: (error: E) => FxInput<R2, E2, B>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1442
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (error: E) => FxInput<R2, E2, B>): Fx<R | R2, E2, A | B>
1443
+ } = dual(2, function switchMapError<R, E, A, R2, E2, B>(
1444
+ fx: Fx<R, E, A>,
1445
+ f: (error: E) => FxInput<R2, E2, B>
1446
+ ): Fx<R | R2, E2, A | B> {
1447
+ return flatMapErrorWithStrategy(fx, f, strategies.Exhaust)
1448
+ })
1449
+
1450
+ export const exhaustMapLatestCause: {
1451
+ <E, R2, E2, B>(f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1452
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>): Fx<R | R2, E2, A | B>
1453
+ } = dual(2, function exhaustMapLatestCause<R, E, A, R2, E2, B>(
1454
+ fx: Fx<R, E, A>,
1455
+ f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1456
+ ): Fx<R | R2, E2, A | B> {
1457
+ return flatMapCauseWithStrategy(fx, f, strategies.ExhaustLatest)
1458
+ })
1459
+
1460
+ export const exhaustMapLatestError: {
1461
+ <E, R2, E2, B>(f: (error: E) => FxInput<R2, E2, B>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1462
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (error: E) => FxInput<R2, E2, B>): Fx<R | R2, E2, A | B>
1463
+ } = dual(2, function switchMapError<R, E, A, R2, E2, B>(
1464
+ fx: Fx<R, E, A>,
1465
+ f: (error: E) => FxInput<R2, E2, B>
1466
+ ): Fx<R | R2, E2, A | B> {
1467
+ return flatMapErrorWithStrategy(fx, f, strategies.ExhaustLatest)
1468
+ })
1469
+
1470
+ export const matchCauseWithStrategy: {
1471
+ <E, R2, E2, B, A, R3, E3, C>(
1472
+ options: {
1473
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1474
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1475
+ readonly strategy: FlattenStrategy
1476
+ }
1477
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1478
+ <R, E, A, R2, E2, B, R3, E3, C>(
1479
+ fx: Fx<R, E, A>,
1480
+ options: {
1481
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1482
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1483
+ readonly strategy: FlattenStrategy
1484
+ }
1485
+ ): Fx<R | R2, E2 | E3, B | C>
1486
+ } = dual(2, function flatMapCause<R, E, A, R2, E2, B, R3, E3, C>(
1487
+ fx: Fx<R, E, A>,
1488
+ options: {
1489
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1490
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1491
+ readonly strategy: FlattenStrategy
1492
+ }
1493
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1494
+ return new WithFlattenStrategy(
1495
+ ({ fork, sink }) =>
1496
+ run(
1497
+ fx,
1498
+ Sink.WithContext((cause) => fork(run(from(options.onFailure(cause)), sink)), (a) =>
1499
+ fork(run(from(options.onSuccess(a)), sink)))
1500
+ ),
1501
+ options.strategy
1502
+ )
1503
+ })
1504
+
1505
+ export const matchErrorWithStrategy: {
1506
+ <E, R2, E2, B, A, R3, E3, C>(
1507
+ options: {
1508
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1509
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1510
+ readonly strategy: FlattenStrategy
1511
+ }
1512
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1513
+ <R, E, A, R2, E2, B, R3, E3, C>(
1514
+ fx: Fx<R, E, A>,
1515
+ options: {
1516
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1517
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1518
+ readonly strategy: FlattenStrategy
1519
+ }
1520
+ ): Fx<R | R2, E2 | E3, B | C>
1521
+ } = dual(2, function flatMapCause<R, E, A, R2, E2, B, R3, E3, C>(
1522
+ fx: Fx<R, E, A>,
1523
+ options: {
1524
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1525
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1526
+ readonly strategy: FlattenStrategy
1527
+ }
1528
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1529
+ return new WithFlattenStrategy(
1530
+ ({ fork, sink }) =>
1531
+ run(
1532
+ fx,
1533
+ Sink.WithContext((cause) =>
1534
+ fork(run(
1535
+ from(cause.pipe(
1536
+ Cause.failureOrCause,
1537
+ Either.match({
1538
+ onLeft: options.onFailure,
1539
+ onRight: failCause
1540
+ })
1541
+ )),
1542
+ sink
1543
+ )), (a) => fork(run(from(options.onSuccess(a)), sink)))
1544
+ ),
1545
+ options.strategy
1546
+ )
1547
+ })
1548
+
1549
+ export const matchCause: {
1550
+ <E, R2, E2, B, A, R3, E3, C>(
1551
+ options: {
1552
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1553
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1554
+ }
1555
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E2 | E3, B | C>
1556
+
1557
+ <R, E, A, R2, E2, B, R3, E3, C>(
1558
+ fx: Fx<R, E, A>,
1559
+ options: {
1560
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1561
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1562
+ }
1563
+ ): Fx<R | R2 | R3, E2 | E3, B | C>
1564
+ } = dual(2, function matchCause<R, E, A, R2, E2, B, R3, E3, C>(
1565
+ fx: Fx<R, E, A>,
1566
+ options: {
1567
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1568
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1569
+ }
1570
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1571
+ return matchCauseWithStrategy(fx, {
1572
+ ...options,
1573
+ strategy: strategies.Unbounded
1574
+ })
1575
+ })
1576
+
1577
+ export const match: {
1578
+ <E, R2, E2, B, A, R3, E3, C>(
1579
+ options: {
1580
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1581
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1582
+ }
1583
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E2 | E3, B | C>
1584
+
1585
+ <R, E, A, R2, E2, B, R3, E3, C>(
1586
+ fx: Fx<R, E, A>,
1587
+ options: {
1588
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1589
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1590
+ }
1591
+ ): Fx<R | R2 | R3, E2 | E3, B | C>
1592
+ } = dual(2, function matchCause<R, E, A, R2, E2, B, R3, E3, C>(
1593
+ fx: Fx<R, E, A>,
1594
+ options: {
1595
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1596
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1597
+ }
1598
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1599
+ return matchErrorWithStrategy(
1600
+ fx,
1601
+ { ...options, strategy: strategies.Unbounded }
1602
+ )
1603
+ })
1604
+
1605
+ export const matchCauseConcurrently: {
1606
+ <E, R2, E2, B, A, R3, E3, C>(
1607
+ options: {
1608
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1609
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1610
+ readonly concurrency: number
1611
+ }
1612
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E2 | E3, B | C>
1613
+
1614
+ <R, E, A, R2, E2, B, R3, E3, C>(
1615
+ fx: Fx<R, E, A>,
1616
+ options: {
1617
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1618
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1619
+ readonly concurrency: number
1620
+ }
1621
+ ): Fx<R | R2 | R3, E2 | E3, B | C>
1622
+ } = dual(2, function matchCause<R, E, A, R2, E2, B, R3, E3, C>(
1623
+ fx: Fx<R, E, A>,
1624
+ options: {
1625
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1626
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1627
+ readonly concurrency: number
1628
+ }
1629
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1630
+ return matchCauseWithStrategy(fx, {
1631
+ onFailure: options.onFailure,
1632
+ onSuccess: options.onSuccess,
1633
+ strategy: strategies.Bounded(options.concurrency)
1634
+ })
1635
+ })
1636
+
1637
+ export const matchErrorConcurrently: {
1638
+ <E, R2, E2, B, A, R3, E3, C>(
1639
+ options: {
1640
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1641
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1642
+ readonly concurrency: number
1643
+ }
1644
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E2 | E3, B | C>
1645
+
1646
+ <R, E, A, R2, E2, B, R3, E3, C>(
1647
+ fx: Fx<R, E, A>,
1648
+ options: {
1649
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1650
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1651
+ readonly concurrency: number
1652
+ }
1653
+ ): Fx<R | R2 | R3, E2 | E3, B | C>
1654
+ } = dual(2, function matchErrorConcurrently<R, E, A, R2, E2, B, R3, E3, C>(
1655
+ fx: Fx<R, E, A>,
1656
+ options: {
1657
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1658
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1659
+ readonly concurrency: number
1660
+ }
1661
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1662
+ return matchErrorWithStrategy(
1663
+ fx,
1664
+ { ...options, strategy: strategies.Bounded(options.concurrency) }
1665
+ )
1666
+ })
1667
+
1668
+ export const switchMatchCause: {
1669
+ <E, R2, E2, B, A, R3, E3, C>(
1670
+ options: {
1671
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1672
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1673
+ }
1674
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E2 | E3, B | C>
1675
+
1676
+ <R, E, A, R2, E2, B, R3, E3, C>(
1677
+ fx: Fx<R, E, A>,
1678
+ options: {
1679
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1680
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1681
+ }
1682
+ ): Fx<R | R2 | R3, E2 | E3, B | C>
1683
+ } = dual(2, function matchCause<R, E, A, R2, E2, B, R3, E3, C>(
1684
+ fx: Fx<R, E, A>,
1685
+ options: {
1686
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1687
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1688
+ }
1689
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1690
+ return matchCauseWithStrategy(fx, {
1691
+ ...options,
1692
+ strategy: strategies.Switch
1693
+ })
1694
+ })
1695
+
1696
+ export const switchMatch: {
1697
+ <E, R2, E2, B, A, R3, E3, C>(
1698
+ options: {
1699
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1700
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1701
+ }
1702
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E2 | E3, B | C>
1703
+
1704
+ <R, E, A, R2, E2, B, R3, E3, C>(
1705
+ fx: Fx<R, E, A>,
1706
+ options: {
1707
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1708
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1709
+ }
1710
+ ): Fx<R | R2 | R3, E2 | E3, B | C>
1711
+ } = dual(2, function matchCause<R, E, A, R2, E2, B, R3, E3, C>(
1712
+ fx: Fx<R, E, A>,
1713
+ options: {
1714
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1715
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1716
+ }
1717
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1718
+ return matchErrorWithStrategy(
1719
+ fx,
1720
+ { ...options, strategy: strategies.Switch }
1721
+ )
1722
+ })
1723
+
1724
+ export const exhaustMatchCause: {
1725
+ <E, R2, E2, B, A, R3, E3, C>(
1726
+ options: {
1727
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1728
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1729
+ }
1730
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E2 | E3, B | C>
1731
+
1732
+ <R, E, A, R2, E2, B, R3, E3, C>(
1733
+ fx: Fx<R, E, A>,
1734
+ options: {
1735
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1736
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1737
+ }
1738
+ ): Fx<R | R2 | R3, E2 | E3, B | C>
1739
+ } = dual(2, function matchCause<R, E, A, R2, E2, B, R3, E3, C>(
1740
+ fx: Fx<R, E, A>,
1741
+ options: {
1742
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1743
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1744
+ }
1745
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1746
+ return matchCauseWithStrategy(fx, {
1747
+ ...options,
1748
+ strategy: strategies.Exhaust
1749
+ })
1750
+ })
1751
+
1752
+ export const exhaustMatch: {
1753
+ <E, R2, E2, B, A, R3, E3, C>(
1754
+ options: {
1755
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1756
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1757
+ }
1758
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E2 | E3, B | C>
1759
+
1760
+ <R, E, A, R2, E2, B, R3, E3, C>(
1761
+ fx: Fx<R, E, A>,
1762
+ options: {
1763
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1764
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1765
+ }
1766
+ ): Fx<R | R2 | R3, E2 | E3, B | C>
1767
+ } = dual(2, function matchCause<R, E, A, R2, E2, B, R3, E3, C>(
1768
+ fx: Fx<R, E, A>,
1769
+ options: {
1770
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1771
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1772
+ }
1773
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1774
+ return matchErrorWithStrategy(
1775
+ fx,
1776
+ { ...options, strategy: strategies.Exhaust }
1777
+ )
1778
+ })
1779
+
1780
+ export const exhaustLatestMatchCause: {
1781
+ <E, R2, E2, B, A, R3, E3, C>(
1782
+ options: {
1783
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1784
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1785
+ }
1786
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E2 | E3, B | C>
1787
+
1788
+ <R, E, A, R2, E2, B, R3, E3, C>(
1789
+ fx: Fx<R, E, A>,
1790
+ options: {
1791
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1792
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1793
+ }
1794
+ ): Fx<R | R2 | R3, E2 | E3, B | C>
1795
+ } = dual(2, function matchCause<R, E, A, R2, E2, B, R3, E3, C>(
1796
+ fx: Fx<R, E, A>,
1797
+ options: {
1798
+ readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1799
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1800
+ }
1801
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1802
+ return matchCauseWithStrategy(fx, {
1803
+ ...options,
1804
+ strategy: strategies.ExhaustLatest
1805
+ })
1806
+ })
1807
+
1808
+ export const exhaustLatestMatch: {
1809
+ <E, R2, E2, B, A, R3, E3, C>(
1810
+ options: {
1811
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1812
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1813
+ }
1814
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E2 | E3, B | C>
1815
+
1816
+ <R, E, A, R2, E2, B, R3, E3, C>(
1817
+ fx: Fx<R, E, A>,
1818
+ options: {
1819
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1820
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1821
+ }
1822
+ ): Fx<R | R2 | R3, E2 | E3, B | C>
1823
+ } = dual(2, function matchCause<R, E, A, R2, E2, B, R3, E3, C>(
1824
+ fx: Fx<R, E, A>,
1825
+ options: {
1826
+ readonly onFailure: (error: E) => FxInput<R2, E2, B>
1827
+ readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1828
+ }
1829
+ ): Fx<R | R2 | R3, E2 | E3, B | C> {
1830
+ return matchErrorWithStrategy(
1831
+ fx,
1832
+ { ...options, strategy: strategies.ExhaustLatest }
1833
+ )
1834
+ })
1835
+
1836
+ export const withEarlyExit = <R, E, A>(
1837
+ f: (params: WithEarlyExitParams<E, A>) => Effect.Effect<R, never, unknown>
1838
+ ): Fx<R, E, A> => new WithEarlyExit(f)
1839
+
1840
+ export const withScopedFork = <R, E, A>(
1841
+ f: (params: WithScopedForkParams<E, A>) => Effect.Effect<R, never, unknown>
1842
+ ): Fx<R, E, A> => new WithScopedFork(f)
1843
+
1844
+ export const withFlattenStrategy = <R, E, A>(
1845
+ f: (params: WithFlattenStrategyParams<E, A>) => Effect.Effect<R, never, unknown>,
1846
+ strategy: FlattenStrategy
1847
+ ): Fx<R, E, A> => new WithFlattenStrategy(f, strategy)
1848
+
1849
+ export const during: {
1850
+ <R2, E2, R3, E3>(
1851
+ window: Fx<R2, E2, Fx<R3, E3, unknown>>
1852
+ ): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E | E2 | E3, A>
1853
+
1854
+ <R, E, A, R2, E2, R3, E3>(
1855
+ fx: Fx<R, E, A>,
1856
+ window: Fx<R2, E2, Fx<R3, E3, unknown>>
1857
+ ): Fx<R | R2 | R3, E | E2 | E3, A>
1858
+ } = dual(2, function during<R, E, A, R2, E2, R3, E3>(
1859
+ fx: Fx<R, E, A>,
1860
+ window: Fx<R2, E2, Fx<R3, E3, unknown>>
1861
+ ): Fx<R | R2 | R3, E | E2 | E3, A> {
1862
+ return withEarlyExit(({ fork, sink }) =>
1863
+ Effect.suspend(() => {
1864
+ let taking = false
1865
+
1866
+ return Effect.flatMap(
1867
+ fork(run(
1868
+ take(window, 1),
1869
+ Sink.WithContext(sink.onFailure, (nested) => {
1870
+ taking = true
1871
+ return fork(run(take(nested, 1), Sink.WithContext(sink.onFailure, () => sink.earlyExit)))
1872
+ })
1873
+ )),
1874
+ () =>
1875
+ adjustTime(1).pipe(Effect.zipRight(run(
1876
+ fx,
1877
+ Sink.Sink(
1878
+ sink.onFailure,
1879
+ (a) => taking ? sink.onSuccess(a) : Effect.unit
1880
+ )
1881
+ )))
1882
+ )
1883
+ })
1884
+ )
1885
+ })
1886
+
1887
+ export const since: {
1888
+ <R2, E2>(window: Fx<R2, E2, unknown>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1889
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, window: Fx<R2, E2, unknown>): Fx<R | R2, E | E2, A>
1890
+ } = dual(2, function since<R, E, A, R2, E2>(
1891
+ fx: Fx<R, E, A>,
1892
+ window: Fx<R2, E2, unknown>
1893
+ ): Fx<R | R2, E | E2, A> {
1894
+ return during(fx, map(window, () => never))
1895
+ })
1896
+
1897
+ export const until: {
1898
+ <R2, E2>(window: Fx<R2, E2, unknown>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1899
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, window: Fx<R2, E2, unknown>): Fx<R | R2, E | E2, A>
1900
+ } = dual(2, function until<R, E, A, R2, E2>(
1901
+ fx: Fx<R, E, A>,
1902
+ window: Fx<R2, E2, unknown>
1903
+ ): Fx<R | R2, E | E2, A> {
1904
+ return during(fx, succeed(window))
1905
+ })
1906
+
1907
+ export const fromScheduled: {
1908
+ <R2>(scheduled: Schedule.Schedule<R2, unknown, unknown>): <R, E, A>(fx: Effect.Effect<R, E, A>) => Fx<R | R2, E, A>
1909
+ <R, E, A, R2>(fx: Effect.Effect<R, E, A>, scheduled: Schedule.Schedule<R2, unknown, unknown>): Fx<R | R2, E, A>
1910
+ } = dual(2, function fromScheduled<R, E, A, R2>(
1911
+ fx: Effect.Effect<R, E, A>,
1912
+ scheduled: Schedule.Schedule<R2, unknown, unknown>
1913
+ ): Fx<R | R2, E, A> {
1914
+ return fromSink((sink) =>
1915
+ Effect.catchAllCause(Effect.repeat(Effect.matchCauseEffect(fx, sink), scheduled), sink.onFailure)
1916
+ )
1917
+ })
1918
+
1919
+ export const periodic: {
1920
+ (duration: DurationInput): <R, E, A>(fx: Effect.Effect<R, E, A>) => Fx<R, E, A>
1921
+ <R, E, A>(fx: Effect.Effect<R, E, A>, duration: DurationInput): Fx<R, E, A>
1922
+ } = dual(2, function periodic<R, E, A>(
1923
+ fx: Effect.Effect<R, E, A>,
1924
+ duration: DurationInput
1925
+ ): Fx<R, E, A> {
1926
+ return fromScheduled(fx, Schedule.spaced(duration))
1927
+ })
1928
+
1929
+ export const provide: {
1930
+ <R2, E2, S>(layer: Layer.Layer<R2, E2, S>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R2 | Exclude<R, S>, E | E2, A>
1931
+ <R2>(runtime: Runtime<R2>): <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, R2>, E, A>
1932
+ <R2>(context: Context<R2>): <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, R2>, E, A>
1933
+ <R, E, A, R2, E2, S>(fx: Fx<R, E, A>, layer: Layer.Layer<R2, E2, S>): Fx<Exclude<R, S> | R2, E | E2, A>
1934
+ <R, E, A, R2>(fx: Fx<R, E, A>, runtime: Runtime<R2>): Fx<Exclude<R, R2>, E, A>
1935
+ <R, E, A, R2>(fx: Fx<R, E, A>, context: Context<R2>): Fx<Exclude<R, R2>, E, A>
1936
+ } = dual(2, function provideContext<R, E, A, R2, E2, S>(
1937
+ fx: Fx<R, E, A>,
1938
+ context: Context<S> | Layer.Layer<R2, E2, S> | Runtime<S>
1939
+ ): Fx<R2 | Exclude<R, S>, E, A> {
1940
+ if (Layer.isLayer(context)) {
1941
+ return FxProvide.make(fx, Provide.ProvideLayer(context)) as any
1942
+ } else if (isContext(context)) {
1943
+ return FxProvide.make(fx, Provide.ProvideContext(context as Context<S>))
1944
+ } else {
1945
+ return FxProvide.make(fx, Provide.ProvideRuntime(context as Runtime<S>))
1946
+ }
1947
+ })
1948
+
1949
+ export const provideService: {
1950
+ <I, S>(tag: Tag<I, S>, service: S): <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, I>, E, A>
1951
+ <R, E, A, I, S>(fx: Fx<R, E, A>, tag: Tag<I, S>, service: S): Fx<Exclude<R, I>, E, A>
1952
+ } = dual(3, function provideService<R, E, A, I, S>(
1953
+ fx: Fx<R, E, A>,
1954
+ tag: Tag<I, S>,
1955
+ service: S
1956
+ ): Fx<Exclude<R, I>, E, A> {
1957
+ return FxProvide.make(fx, Provide.ProvideService(tag, service))
1958
+ })
1959
+
1960
+ export const provideServiceEffect: {
1961
+ <I, S, R2, E2>(
1962
+ tag: Tag<I, S>,
1963
+ service: Effect.Effect<R2, E2, S>
1964
+ ): <R, E, A>(fx: Fx<R, E, A>) => Fx<R2 | Exclude<R, I>, E, A>
1965
+ <R, E, A, I, S, R2, E2>(
1966
+ fx: Fx<R, E, A>,
1967
+ tag: Tag<I, S>,
1968
+ service: Effect.Effect<R2, E2, S>
1969
+ ): Fx<R2 | Exclude<R, I>, E, A>
1970
+ } = dual(3, function provideService<R, E, A, I, S, R2, E2>(
1971
+ fx: Fx<R, E, A>,
1972
+ tag: Tag<I, S>,
1973
+ service: Effect.Effect<R2, E2, S>
1974
+ ): Fx<Exclude<R, I> | R2, E | E2, A> {
1975
+ return FxProvide.make(fx, Provide.ProvideServiceEffect(tag, service))
1976
+ })
1977
+
1978
+ export const skipRepeatsWith: {
1979
+ <A>(eq: Equivalence<A>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
1980
+ <R, E, A>(fx: Fx<R, E, A>, eq: Equivalence<A>): Fx<R, E, A>
1981
+ } = dual(2, function skipRepeatsWith<R, E, A>(
1982
+ fx: Fx<R, E, A>,
1983
+ eq: Equivalence<A>
1984
+ ): Fx<R, E, A> {
1985
+ return FilterMapLoop.make(fx, Option.none<A>(), (previous, a) =>
1986
+ Option.match(previous, {
1987
+ onNone: () => Option.some([a, Option.some(a)]),
1988
+ onSome: (prev) => eq(a, prev) ? Option.none() : Option.some([a, Option.some(a)])
1989
+ }))
1990
+ })
1991
+
1992
+ export const skipRepeats: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A> = (fx) => skipRepeatsWith(fx, Equal.equals)
1993
+
1994
+ class Reduce<R, E, A, B> extends Effectable.Class<R, E, B> {
1995
+ constructor(readonly fx: Fx<R, E, A>, readonly seed: B, readonly f: (acc: B, a: A) => B) {
1996
+ super()
1997
+ }
1998
+
1999
+ static make<R, E, A, B>(fx: Fx<R, E, A>, seed: B, f: (acc: B, a: A) => B): Effect.Effect<R, E, B> {
2000
+ if (fx instanceof Transformer) {
2001
+ return FilterMapReduce.make<R, E, A, B>(fx.i0 as Fx<R, E, any>, seed, compileSyncReducer(fx.i1, f))
2002
+ }
2003
+
2004
+ return new Reduce(fx, seed, f)
2005
+ }
2006
+
2007
+ private cached: Effect.Effect<R, E, B> | null = null
2008
+
2009
+ commit() {
2010
+ return (this.cached ||= Effect.suspend(() => {
2011
+ let acc = this.seed
2012
+
2013
+ return Effect.map(observe(this.fx, (a) => Effect.sync(() => acc = this.f(acc, a))), () => acc)
2014
+ }))
2015
+ }
2016
+ }
2017
+
2018
+ class FilterMapReduce<R, E, A, B> extends Effectable.Class<R, E, B> {
2019
+ constructor(
2020
+ readonly i0: Fx<R, E, A>,
2021
+ readonly i1: B,
2022
+ readonly i2: (b: B, a: A) => Option.Option<B>
2023
+ ) {
2024
+ super()
2025
+ }
2026
+
2027
+ static make<R, E, A, B>(
2028
+ fx: Fx<R, E, A>,
2029
+ seed: B,
2030
+ f: (b: B, a: A) => Option.Option<B>
2031
+ ): Effect.Effect<R, E, B> {
2032
+ if (fx instanceof FromIterable) {
2033
+ if (Array.isArray(fx.i0)) {
2034
+ return new OnceEffect(Effect.sync(() => reduceFilterArray(fx.i0 as Array<A>, seed, f)))
2035
+ } else {
2036
+ return Effect.sync(() => reduceFilterIterable(fx.i0, seed, f))
2037
+ }
2038
+ }
2039
+
2040
+ return new FilterMapReduce(fx, seed, f)
2041
+ }
2042
+
2043
+ private cached: Effect.Effect<R, E, B> | null = null
2044
+
2045
+ commit(): Effect.Effect<R, E, B> {
2046
+ return this.cached ||= Effect.suspend(() => {
2047
+ let acc = this.i1
2048
+
2049
+ return Effect.map(
2050
+ observe(this.i0, (a) =>
2051
+ Option.match(this.i2(acc, a), {
2052
+ onNone: () => Effect.unit,
2053
+ onSome: (b) => Effect.succeed(acc = b)
2054
+ })),
2055
+ () => acc
2056
+ )
2057
+ })
2058
+ }
2059
+ }
2060
+
2061
+ function reduceFilterIterable<A, B>(
2062
+ iterable: Iterable<A>,
2063
+ seed: B,
2064
+ f: (acc: B, a: A) => Option.Option<B>
2065
+ ): B {
2066
+ const iterator = iterable[Symbol.iterator]()
2067
+ let acc = seed
2068
+ let result = iterator.next()
2069
+ let option: Option.Option<B> = Option.none()
2070
+
2071
+ while (!result.done) {
2072
+ option = f(acc, result.value)
2073
+ if (Option.isSome(option)) {
2074
+ acc = option.value
2075
+ }
2076
+ result = iterator.next()
2077
+ }
2078
+
2079
+ return acc
2080
+ }
2081
+
2082
+ function reduceFilterArray<A, B>(
2083
+ iterable: Array<A>,
2084
+ seed: B,
2085
+ f: (acc: B, a: A) => Option.Option<B>
2086
+ ): B {
2087
+ const length = iterable.length
2088
+ let acc = seed
2089
+ let option: Option.Option<B> = Option.none()
2090
+
2091
+ for (let i = 0; i < length; i++) {
2092
+ option = f(acc, iterable[i])
2093
+ if (Option.isSome(option)) {
2094
+ acc = option.value
2095
+ }
2096
+ }
2097
+
2098
+ return acc
2099
+ }
2100
+
2101
+ export const reduce: {
2102
+ <A, B>(seed: B, f: (acc: B, a: A) => B): <R, E>(fx: Fx<R, E, A>) => Effect.Effect<R, E, B>
2103
+ <R, E, A, B>(fx: Fx<R, E, A>, seed: B, f: (acc: B, a: A) => B): Effect.Effect<R, E, B>
2104
+ } = dual(3, function reduce<R, E, A, B>(
2105
+ fx: Fx<R, E, A>,
2106
+ seed: B,
2107
+ f: (acc: B, a: A) => B
2108
+ ): Effect.Effect<R, E, B> {
2109
+ return Reduce.make(fx, seed, f)
2110
+ })
2111
+
2112
+ export function toChunk<R, E, A>(fx: Fx<R, E, A>): Effect.Effect<R, E, Chunk.Chunk<A>> {
2113
+ return reduce(fx, Chunk.empty<A>(), Chunk.append<A, A>)
2114
+ }
2115
+
2116
+ export const snapshot: {
2117
+ <R2, E2, B, A, R3, E3, C>(
2118
+ sampled: FxInput<R2, E2, B>,
2119
+ f: (a: A, b: B) => Effect.Effect<R3, E3, C>
2120
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E | E2 | E3, C>
2121
+ <R, E, A, R2, E2, B, R3, E3, C>(
2122
+ fx: Fx<R, E, A>,
2123
+ sampled: FxInput<R2, E2, B>,
2124
+ f: (a: A, b: B) => Effect.Effect<R3, E3, C>
2125
+ ): Fx<R | R2 | R3, E | E2 | E3, C>
2126
+ } = dual(3, function snapshot<R, E, A, R2, E2, B, R3, E3, C>(
2127
+ fx: Fx<R, E, A>,
2128
+ sampled: Fx<R2, E2, B>,
2129
+ f: (a: A, b: B) => Effect.Effect<R3, E3, C>
2130
+ ): Fx<R | R2 | R3, E | E2 | E3, C> {
2131
+ return new Snapshot(fx, sampled, f)
2132
+ })
2133
+
2134
+ export function fromEmitter<R, E, A>(
2135
+ f: (emitter: Emitter.Emitter<E, A>) => Effect.Effect<R | Scope.Scope, never, unknown>
2136
+ ): Fx<Exclude<R, Scope.Scope>, E, A> {
2137
+ return withEarlyExit(({ scope, sink }) =>
2138
+ Effect.zipRight(Effect.provideService(Effect.flatMap(Emitter.make(sink), f), Scope.Scope, scope), Effect.never)
2139
+ )
2140
+ }
2141
+
2142
+ export function fromEffect<R, E, A>(effect: Effect.Effect<R, E, A>): Fx<R, E, A> {
2143
+ return matchEffectPrimitive<Fx<R, E, A>>(effect as InternalEffect, {
2144
+ Success: (e) => succeed(e.i0 as A),
2145
+ Failure: (e) => failCause(e.i0 as Cause.Cause<E>),
2146
+ Left: (e) => fail(e.left as E),
2147
+ Right: (e) => succeed(e.right as A),
2148
+ None: () => fail(new Cause.NoSuchElementException() as E),
2149
+ Some: (e) => succeed(e.value),
2150
+ Sync: (e) => sync(e.i0 as () => A),
2151
+ Otherwise: () => fromSink((sink) => Effect.matchCauseEffect(effect, sink))
2152
+ })
2153
+ }
2154
+
2155
+ export function fromStream<R, E, A>(stream: Stream.Stream<R, E, A>, options?: { priority?: number }): Fx<R, E, A> {
2156
+ return fromSink<R, E, A>((sink) =>
2157
+ Effect.acquireUseRelease<never, never, Scope.CloseableScope, R, never, unknown, never, unknown>(
2158
+ Scope.make(),
2159
+ (scope) =>
2160
+ Effect.gen(function*(_) {
2161
+ const pull = Effect.either(yield* _(Stream.toPull(stream), Effect.provideService(Scope.Scope, scope)))
2162
+
2163
+ while (true) {
2164
+ const either = yield* _(pull)
2165
+
2166
+ if (Either.isRight(either)) {
2167
+ yield* _(Effect.forEach(either.right, sink.onSuccess))
2168
+ } else if (Option.isNone(either.left)) {
2169
+ return
2170
+ } else {
2171
+ yield* _(sink.onFailure(Cause.fail(either.left.value)))
2172
+ }
2173
+
2174
+ // Schedule subsequent pulls using the current scheduler.
2175
+ yield* _(Effect.yieldNow(options))
2176
+ }
2177
+ }),
2178
+ Scope.close
2179
+ )
2180
+ )
2181
+ }
2182
+
2183
+ const matchers = {
2184
+ RefSubject: identity,
2185
+ Fx: identity,
2186
+ Effect: fromEffect,
2187
+ Cause: failCause,
2188
+ Iterable: fromIterable,
2189
+ Otherwise: succeed
2190
+ }
2191
+
2192
+ export function from<A>(input: Iterable<A>): Fx<never, never, A>
2193
+ export function from<E>(input: Cause.Cause<E>): Fx<never, E, never>
2194
+ export function from<R, E, A>(input: FxInput<R, E, A>): Fx<R, E, A>
2195
+ export function from<A>(input: A): Fx<never, never, A>
2196
+ export function from<R, E, A>(input: FxInput<R, E, A>): Fx<R, E, A> {
2197
+ return matchFxInput(input, matchers as any)
2198
+ }