@typed/fx 1.18.4 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/AsyncData/package.json +6 -0
  2. package/Emitter/package.json +6 -0
  3. package/Form/package.json +6 -0
  4. package/FormEntry/package.json +6 -0
  5. package/Fx/package.json +6 -0
  6. package/Guard/package.json +6 -0
  7. package/Idle/package.json +6 -0
  8. package/Match/package.json +6 -0
  9. package/Pull/package.json +6 -0
  10. package/Push/package.json +6 -0
  11. package/RefArray/package.json +6 -0
  12. package/RefChunk/package.json +6 -0
  13. package/RefHashMap/package.json +6 -0
  14. package/RefHashSet/package.json +6 -0
  15. package/RefSubject/package.json +6 -0
  16. package/Sink/package.json +6 -0
  17. package/Stream/package.json +6 -0
  18. package/Subject/package.json +6 -0
  19. package/TypeId/package.json +6 -0
  20. package/Typeclass/package.json +6 -0
  21. package/Versioned/package.json +6 -0
  22. package/dist/cjs/AsyncData.js +177 -0
  23. package/dist/cjs/AsyncData.js.map +1 -0
  24. package/dist/cjs/Emitter.js +24 -21
  25. package/dist/cjs/Emitter.js.map +1 -1
  26. package/dist/cjs/Form.js +78 -21
  27. package/dist/cjs/Form.js.map +1 -1
  28. package/dist/cjs/FormEntry.js +75 -48
  29. package/dist/cjs/FormEntry.js.map +1 -1
  30. package/dist/cjs/Fx.js +517 -872
  31. package/dist/cjs/Fx.js.map +1 -1
  32. package/dist/cjs/Guard.js +21 -13
  33. package/dist/cjs/Guard.js.map +1 -1
  34. package/dist/cjs/Idle.js +49 -37
  35. package/dist/cjs/Idle.js.map +1 -1
  36. package/dist/cjs/Match.js +99 -61
  37. package/dist/cjs/Match.js.map +1 -1
  38. package/dist/cjs/Pull.js.map +1 -1
  39. package/dist/cjs/Push.js +168 -0
  40. package/dist/cjs/Push.js.map +1 -0
  41. package/dist/cjs/RefArray.js +32 -30
  42. package/dist/cjs/RefArray.js.map +1 -1
  43. package/dist/cjs/RefChunk.js +26 -24
  44. package/dist/cjs/RefChunk.js.map +1 -1
  45. package/dist/cjs/RefHashMap.js +20 -20
  46. package/dist/cjs/RefHashMap.js.map +1 -1
  47. package/dist/cjs/RefHashSet.js +11 -8
  48. package/dist/cjs/RefHashSet.js.map +1 -1
  49. package/dist/cjs/RefSubject.js +899 -158
  50. package/dist/cjs/RefSubject.js.map +1 -1
  51. package/dist/cjs/Sink.js +588 -62
  52. package/dist/cjs/Sink.js.map +1 -1
  53. package/dist/cjs/Stream.js +15 -10
  54. package/dist/cjs/Stream.js.map +1 -1
  55. package/dist/cjs/Subject.js +153 -55
  56. package/dist/cjs/Subject.js.map +1 -1
  57. package/dist/cjs/TypeId.js +10 -5
  58. package/dist/cjs/TypeId.js.map +1 -1
  59. package/dist/cjs/Typeclass.js +28 -31
  60. package/dist/cjs/Typeclass.js.map +1 -1
  61. package/dist/cjs/Versioned.js +118 -57
  62. package/dist/cjs/Versioned.js.map +1 -1
  63. package/dist/cjs/index.js +44 -8
  64. package/dist/cjs/index.js.map +1 -1
  65. package/dist/cjs/internal/{deferred-ref.js → DeferredRef.js} +45 -13
  66. package/dist/cjs/internal/DeferredRef.js.map +1 -0
  67. package/dist/cjs/internal/UnionToTuple.js +6 -0
  68. package/dist/cjs/internal/UnionToTuple.js.map +1 -0
  69. package/dist/cjs/internal/core.js +1590 -779
  70. package/dist/cjs/internal/core.js.map +1 -1
  71. package/dist/cjs/internal/diff.js +114 -0
  72. package/dist/cjs/internal/diff.js.map +1 -0
  73. package/dist/cjs/internal/effect-loop-operator.js +288 -0
  74. package/dist/cjs/internal/effect-loop-operator.js.map +1 -0
  75. package/dist/cjs/internal/effect-operator.js +46 -37
  76. package/dist/cjs/internal/effect-operator.js.map +1 -1
  77. package/dist/cjs/internal/effect-producer.js +74 -0
  78. package/dist/cjs/internal/effect-producer.js.map +1 -0
  79. package/dist/cjs/internal/helpers.js +158 -128
  80. package/dist/cjs/internal/helpers.js.map +1 -1
  81. package/dist/cjs/internal/keyed.js +136 -173
  82. package/dist/cjs/internal/keyed.js.map +1 -1
  83. package/dist/cjs/internal/loop-operator.js +213 -0
  84. package/dist/cjs/internal/loop-operator.js.map +1 -0
  85. package/dist/cjs/internal/operator.js +79 -0
  86. package/dist/cjs/internal/operator.js.map +1 -0
  87. package/dist/cjs/internal/protos.js +19 -81
  88. package/dist/cjs/internal/protos.js.map +1 -1
  89. package/dist/cjs/internal/provide.js +47 -25
  90. package/dist/cjs/internal/provide.js.map +1 -1
  91. package/dist/cjs/internal/requestIdleCallback.js +5 -5
  92. package/dist/cjs/internal/requestIdleCallback.js.map +1 -1
  93. package/dist/cjs/internal/share.js +12 -15
  94. package/dist/cjs/internal/share.js.map +1 -1
  95. package/dist/cjs/internal/sync-operator.js +50 -22
  96. package/dist/cjs/internal/sync-operator.js.map +1 -1
  97. package/dist/cjs/internal/sync-producer.js +114 -0
  98. package/dist/cjs/internal/sync-producer.js.map +1 -0
  99. package/dist/cjs/internal/withKey.js +45 -51
  100. package/dist/cjs/internal/withKey.js.map +1 -1
  101. package/dist/dts/AsyncData.d.ts +185 -0
  102. package/dist/dts/AsyncData.d.ts.map +1 -0
  103. package/dist/dts/Emitter.d.ts +13 -20
  104. package/dist/dts/Emitter.d.ts.map +1 -1
  105. package/dist/dts/Form.d.ts +45 -28
  106. package/dist/dts/Form.d.ts.map +1 -1
  107. package/dist/dts/FormEntry.d.ts +25 -13
  108. package/dist/dts/FormEntry.d.ts.map +1 -1
  109. package/dist/dts/Fx.d.ts +983 -1387
  110. package/dist/dts/Fx.d.ts.map +1 -1
  111. package/dist/dts/Guard.d.ts +8 -1
  112. package/dist/dts/Guard.d.ts.map +1 -1
  113. package/dist/dts/Idle.d.ts +3 -3
  114. package/dist/dts/Idle.d.ts.map +1 -1
  115. package/dist/dts/Match.d.ts +8 -8
  116. package/dist/dts/Match.d.ts.map +1 -1
  117. package/dist/dts/Pull.d.ts +5 -5
  118. package/dist/dts/Pull.d.ts.map +1 -1
  119. package/dist/dts/Push.d.ts +170 -0
  120. package/dist/dts/Push.d.ts.map +1 -0
  121. package/dist/dts/RefArray.d.ts +21 -23
  122. package/dist/dts/RefArray.d.ts.map +1 -1
  123. package/dist/dts/RefChunk.d.ts +17 -19
  124. package/dist/dts/RefChunk.d.ts.map +1 -1
  125. package/dist/dts/RefHashMap.d.ts +19 -20
  126. package/dist/dts/RefHashMap.d.ts.map +1 -1
  127. package/dist/dts/RefHashSet.d.ts +12 -16
  128. package/dist/dts/RefHashSet.d.ts.map +1 -1
  129. package/dist/dts/RefSubject.d.ts +396 -187
  130. package/dist/dts/RefSubject.d.ts.map +1 -1
  131. package/dist/dts/Sink.d.ts +193 -93
  132. package/dist/dts/Sink.d.ts.map +1 -1
  133. package/dist/dts/Stream.d.ts +7 -1
  134. package/dist/dts/Stream.d.ts.map +1 -1
  135. package/dist/dts/Subject.d.ts +27 -36
  136. package/dist/dts/Subject.d.ts.map +1 -1
  137. package/dist/dts/TypeId.d.ts +10 -0
  138. package/dist/dts/TypeId.d.ts.map +1 -1
  139. package/dist/dts/Typeclass.d.ts +2 -2
  140. package/dist/dts/Typeclass.d.ts.map +1 -1
  141. package/dist/dts/Versioned.d.ts +50 -78
  142. package/dist/dts/Versioned.d.ts.map +1 -1
  143. package/dist/dts/index.d.ts +66 -6
  144. package/dist/dts/index.d.ts.map +1 -1
  145. package/dist/dts/internal/DeferredRef.d.ts +20 -0
  146. package/dist/dts/internal/DeferredRef.d.ts.map +1 -0
  147. package/dist/dts/internal/UnionToTuple.d.ts +6 -0
  148. package/dist/dts/internal/UnionToTuple.d.ts.map +1 -0
  149. package/dist/dts/internal/core.d.ts +218 -450
  150. package/dist/dts/internal/core.d.ts.map +1 -1
  151. package/dist/dts/internal/diff.d.ts +38 -0
  152. package/dist/dts/internal/diff.d.ts.map +1 -0
  153. package/dist/dts/internal/effect-loop-operator.d.ts +34 -0
  154. package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -0
  155. package/dist/dts/internal/effect-operator.d.ts +8 -5
  156. package/dist/dts/internal/effect-operator.d.ts.map +1 -1
  157. package/dist/dts/internal/effect-producer.d.ts +25 -0
  158. package/dist/dts/internal/effect-producer.d.ts.map +1 -0
  159. package/dist/dts/internal/helpers.d.ts +33 -24
  160. package/dist/dts/internal/helpers.d.ts.map +1 -1
  161. package/dist/dts/internal/keyed.d.ts +3 -3
  162. package/dist/dts/internal/keyed.d.ts.map +1 -1
  163. package/dist/dts/internal/loop-operator.d.ts +40 -0
  164. package/dist/dts/internal/loop-operator.d.ts.map +1 -0
  165. package/dist/dts/internal/operator.d.ts +16 -0
  166. package/dist/dts/internal/operator.d.ts.map +1 -0
  167. package/dist/dts/internal/protos.d.ts +16 -43
  168. package/dist/dts/internal/protos.d.ts.map +1 -1
  169. package/dist/dts/internal/provide.d.ts +7 -1
  170. package/dist/dts/internal/provide.d.ts.map +1 -1
  171. package/dist/dts/internal/share.d.ts +12 -9
  172. package/dist/dts/internal/share.d.ts.map +1 -1
  173. package/dist/dts/internal/sync-operator.d.ts +7 -3
  174. package/dist/dts/internal/sync-operator.d.ts.map +1 -1
  175. package/dist/dts/internal/sync-producer.d.ts +36 -0
  176. package/dist/dts/internal/sync-producer.d.ts.map +1 -0
  177. package/dist/dts/internal/withKey.d.ts +3 -3
  178. package/dist/dts/internal/withKey.d.ts.map +1 -1
  179. package/dist/esm/AsyncData.js +151 -0
  180. package/dist/esm/AsyncData.js.map +1 -0
  181. package/dist/esm/Emitter.js +24 -21
  182. package/dist/esm/Emitter.js.map +1 -1
  183. package/dist/esm/Form.js +69 -14
  184. package/dist/esm/Form.js.map +1 -1
  185. package/dist/esm/FormEntry.js +77 -52
  186. package/dist/esm/FormEntry.js.map +1 -1
  187. package/dist/esm/Fx.js +509 -874
  188. package/dist/esm/Fx.js.map +1 -1
  189. package/dist/esm/Guard.js +5 -1
  190. package/dist/esm/Guard.js.map +1 -1
  191. package/dist/esm/Idle.js +49 -39
  192. package/dist/esm/Idle.js.map +1 -1
  193. package/dist/esm/Match.js +103 -63
  194. package/dist/esm/Match.js.map +1 -1
  195. package/dist/esm/Pull.js.map +1 -1
  196. package/dist/esm/Push.js +159 -0
  197. package/dist/esm/Push.js.map +1 -0
  198. package/dist/esm/RefArray.js +32 -30
  199. package/dist/esm/RefArray.js.map +1 -1
  200. package/dist/esm/RefChunk.js +26 -24
  201. package/dist/esm/RefChunk.js.map +1 -1
  202. package/dist/esm/RefHashMap.js +20 -20
  203. package/dist/esm/RefHashMap.js.map +1 -1
  204. package/dist/esm/RefHashSet.js +11 -8
  205. package/dist/esm/RefHashSet.js.map +1 -1
  206. package/dist/esm/RefSubject.js +873 -150
  207. package/dist/esm/RefSubject.js.map +1 -1
  208. package/dist/esm/Sink.js +608 -57
  209. package/dist/esm/Sink.js.map +1 -1
  210. package/dist/esm/Stream.js +13 -9
  211. package/dist/esm/Stream.js.map +1 -1
  212. package/dist/esm/Subject.js +151 -56
  213. package/dist/esm/Subject.js.map +1 -1
  214. package/dist/esm/TypeId.js +9 -4
  215. package/dist/esm/TypeId.js.map +1 -1
  216. package/dist/esm/Typeclass.js +29 -29
  217. package/dist/esm/Typeclass.js.map +1 -1
  218. package/dist/esm/Versioned.js +110 -53
  219. package/dist/esm/Versioned.js.map +1 -1
  220. package/dist/esm/index.js +66 -6
  221. package/dist/esm/index.js.map +1 -1
  222. package/dist/esm/internal/DeferredRef.js +54 -0
  223. package/dist/esm/internal/DeferredRef.js.map +1 -0
  224. package/dist/esm/internal/UnionToTuple.js +2 -0
  225. package/dist/esm/internal/UnionToTuple.js.map +1 -0
  226. package/dist/esm/internal/core.js +1439 -719
  227. package/dist/esm/internal/core.js.map +1 -1
  228. package/dist/esm/internal/diff.js +82 -0
  229. package/dist/esm/internal/diff.js.map +1 -0
  230. package/dist/esm/internal/effect-loop-operator.js +269 -0
  231. package/dist/esm/internal/effect-loop-operator.js.map +1 -0
  232. package/dist/esm/internal/effect-operator.js +44 -37
  233. package/dist/esm/internal/effect-operator.js.map +1 -1
  234. package/dist/esm/internal/effect-producer.js +47 -0
  235. package/dist/esm/internal/effect-producer.js.map +1 -0
  236. package/dist/esm/internal/helpers.js +157 -129
  237. package/dist/esm/internal/helpers.js.map +1 -1
  238. package/dist/esm/internal/keyed.js +128 -139
  239. package/dist/esm/internal/keyed.js.map +1 -1
  240. package/dist/esm/internal/loop-operator.js +186 -0
  241. package/dist/esm/internal/loop-operator.js.map +1 -0
  242. package/dist/esm/internal/operator.js +68 -0
  243. package/dist/esm/internal/operator.js.map +1 -0
  244. package/dist/esm/internal/protos.js +16 -75
  245. package/dist/esm/internal/protos.js.map +1 -1
  246. package/dist/esm/internal/provide.js +33 -25
  247. package/dist/esm/internal/provide.js.map +1 -1
  248. package/dist/esm/internal/requestIdleCallback.js +5 -5
  249. package/dist/esm/internal/requestIdleCallback.js.map +1 -1
  250. package/dist/esm/internal/share.js +12 -12
  251. package/dist/esm/internal/share.js.map +1 -1
  252. package/dist/esm/internal/sync-operator.js +49 -21
  253. package/dist/esm/internal/sync-operator.js.map +1 -1
  254. package/dist/esm/internal/sync-producer.js +88 -0
  255. package/dist/esm/internal/sync-producer.js.map +1 -0
  256. package/dist/esm/internal/withKey.js +46 -47
  257. package/dist/esm/internal/withKey.js.map +1 -1
  258. package/package.json +22 -62
  259. package/src/AsyncData.ts +447 -0
  260. package/src/Emitter.ts +47 -38
  261. package/src/Form.ts +185 -65
  262. package/src/FormEntry.ts +142 -109
  263. package/src/Fx.ts +1685 -1851
  264. package/src/Guard.ts +12 -1
  265. package/src/Idle.ts +76 -62
  266. package/src/Match.ts +149 -93
  267. package/src/Pull.ts +8 -8
  268. package/src/Push.ts +472 -0
  269. package/src/RefArray.ts +53 -51
  270. package/src/RefChunk.ts +44 -41
  271. package/src/RefHashMap.ts +57 -43
  272. package/src/RefHashSet.ts +21 -31
  273. package/src/RefSubject.ts +1984 -457
  274. package/src/Sink.ts +922 -171
  275. package/src/Stream.ts +32 -20
  276. package/src/Subject.ts +230 -87
  277. package/src/TypeId.ts +16 -4
  278. package/src/Typeclass.ts +31 -32
  279. package/src/Versioned.ts +220 -168
  280. package/src/index.ts +78 -6
  281. package/src/internal/DeferredRef.ts +62 -0
  282. package/src/internal/UnionToTuple.ts +11 -0
  283. package/src/internal/core.ts +2491 -1950
  284. package/src/internal/diff.ts +157 -0
  285. package/src/internal/effect-loop-operator.ts +466 -0
  286. package/src/internal/effect-operator.ts +89 -54
  287. package/src/internal/effect-producer.ts +125 -0
  288. package/src/internal/helpers.ts +275 -205
  289. package/src/internal/keyed.ts +192 -241
  290. package/src/internal/loop-operator.ts +266 -0
  291. package/src/internal/operator.ts +87 -0
  292. package/src/internal/protos.ts +29 -104
  293. package/src/internal/provide.ts +48 -40
  294. package/src/internal/requestIdleCallback.ts +5 -6
  295. package/src/internal/share.ts +26 -24
  296. package/src/internal/sync-operator.ts +68 -27
  297. package/src/internal/sync-producer.ts +146 -0
  298. package/src/internal/withKey.ts +64 -74
  299. package/dist/cjs/Computed.js +0 -115
  300. package/dist/cjs/Computed.js.map +0 -1
  301. package/dist/cjs/Filtered.js +0 -95
  302. package/dist/cjs/Filtered.js.map +0 -1
  303. package/dist/cjs/Model.js +0 -119
  304. package/dist/cjs/Model.js.map +0 -1
  305. package/dist/cjs/RefAsyncData.js +0 -187
  306. package/dist/cjs/RefAsyncData.js.map +0 -1
  307. package/dist/cjs/RefAsyncDataArray.js +0 -38
  308. package/dist/cjs/RefAsyncDataArray.js.map +0 -1
  309. package/dist/cjs/RefBoolean.js +0 -45
  310. package/dist/cjs/RefBoolean.js.map +0 -1
  311. package/dist/cjs/RefNumber.js +0 -49
  312. package/dist/cjs/RefNumber.js.map +0 -1
  313. package/dist/cjs/internal/core-ref-subject.js +0 -254
  314. package/dist/cjs/internal/core-ref-subject.js.map +0 -1
  315. package/dist/cjs/internal/core-subject.js +0 -108
  316. package/dist/cjs/internal/core-subject.js.map +0 -1
  317. package/dist/cjs/internal/deferred-ref.js.map +0 -1
  318. package/dist/cjs/internal/effect-primitive.js +0 -47
  319. package/dist/cjs/internal/effect-primitive.js.map +0 -1
  320. package/dist/cjs/internal/fx-effect-proto.js +0 -58
  321. package/dist/cjs/internal/fx-effect-proto.js.map +0 -1
  322. package/dist/cjs/internal/fx-primitive.js +0 -193
  323. package/dist/cjs/internal/fx-primitive.js.map +0 -1
  324. package/dist/cjs/internal/fx.js +0 -240
  325. package/dist/cjs/internal/fx.js.map +0 -1
  326. package/dist/cjs/internal/matchers.js +0 -34
  327. package/dist/cjs/internal/matchers.js.map +0 -1
  328. package/dist/cjs/internal/run.js +0 -54
  329. package/dist/cjs/internal/run.js.map +0 -1
  330. package/dist/cjs/internal/schema-ref-subject.js +0 -132
  331. package/dist/cjs/internal/schema-ref-subject.js.map +0 -1
  332. package/dist/cjs/internal/versioned-transform.js +0 -46
  333. package/dist/cjs/internal/versioned-transform.js.map +0 -1
  334. package/dist/dts/Computed.d.ts +0 -106
  335. package/dist/dts/Computed.d.ts.map +0 -1
  336. package/dist/dts/Filtered.d.ts +0 -97
  337. package/dist/dts/Filtered.d.ts.map +0 -1
  338. package/dist/dts/Model.d.ts +0 -200
  339. package/dist/dts/Model.d.ts.map +0 -1
  340. package/dist/dts/RefAsyncData.d.ts +0 -236
  341. package/dist/dts/RefAsyncData.d.ts.map +0 -1
  342. package/dist/dts/RefAsyncDataArray.d.ts +0 -56
  343. package/dist/dts/RefAsyncDataArray.d.ts.map +0 -1
  344. package/dist/dts/RefBoolean.d.ts +0 -47
  345. package/dist/dts/RefBoolean.d.ts.map +0 -1
  346. package/dist/dts/RefNumber.d.ts +0 -48
  347. package/dist/dts/RefNumber.d.ts.map +0 -1
  348. package/dist/dts/internal/core-ref-subject.d.ts +0 -100
  349. package/dist/dts/internal/core-ref-subject.d.ts.map +0 -1
  350. package/dist/dts/internal/core-subject.d.ts +0 -5
  351. package/dist/dts/internal/core-subject.d.ts.map +0 -1
  352. package/dist/dts/internal/deferred-ref.d.ts +0 -12
  353. package/dist/dts/internal/deferred-ref.d.ts.map +0 -1
  354. package/dist/dts/internal/effect-primitive.d.ts +0 -6
  355. package/dist/dts/internal/effect-primitive.d.ts.map +0 -1
  356. package/dist/dts/internal/fx-effect-proto.d.ts +0 -30
  357. package/dist/dts/internal/fx-effect-proto.d.ts.map +0 -1
  358. package/dist/dts/internal/fx-primitive.d.ts +0 -109
  359. package/dist/dts/internal/fx-primitive.d.ts.map +0 -1
  360. package/dist/dts/internal/fx.d.ts +0 -245
  361. package/dist/dts/internal/fx.d.ts.map +0 -1
  362. package/dist/dts/internal/matchers.d.ts +0 -33
  363. package/dist/dts/internal/matchers.d.ts.map +0 -1
  364. package/dist/dts/internal/run.d.ts +0 -8
  365. package/dist/dts/internal/run.d.ts.map +0 -1
  366. package/dist/dts/internal/schema-ref-subject.d.ts +0 -5
  367. package/dist/dts/internal/schema-ref-subject.d.ts.map +0 -1
  368. package/dist/dts/internal/versioned-transform.d.ts +0 -17
  369. package/dist/dts/internal/versioned-transform.d.ts.map +0 -1
  370. package/dist/esm/Computed.js +0 -103
  371. package/dist/esm/Computed.js.map +0 -1
  372. package/dist/esm/Filtered.js +0 -83
  373. package/dist/esm/Filtered.js.map +0 -1
  374. package/dist/esm/Model.js +0 -100
  375. package/dist/esm/Model.js.map +0 -1
  376. package/dist/esm/RefAsyncData.js +0 -163
  377. package/dist/esm/RefAsyncData.js.map +0 -1
  378. package/dist/esm/RefAsyncDataArray.js +0 -27
  379. package/dist/esm/RefAsyncDataArray.js.map +0 -1
  380. package/dist/esm/RefBoolean.js +0 -31
  381. package/dist/esm/RefBoolean.js.map +0 -1
  382. package/dist/esm/RefNumber.js +0 -35
  383. package/dist/esm/RefNumber.js.map +0 -1
  384. package/dist/esm/internal/core-ref-subject.js +0 -242
  385. package/dist/esm/internal/core-ref-subject.js.map +0 -1
  386. package/dist/esm/internal/core-subject.js +0 -90
  387. package/dist/esm/internal/core-subject.js.map +0 -1
  388. package/dist/esm/internal/deferred-ref.js +0 -23
  389. package/dist/esm/internal/deferred-ref.js.map +0 -1
  390. package/dist/esm/internal/effect-primitive.js +0 -41
  391. package/dist/esm/internal/effect-primitive.js.map +0 -1
  392. package/dist/esm/internal/fx-effect-proto.js +0 -43
  393. package/dist/esm/internal/fx-effect-proto.js.map +0 -1
  394. package/dist/esm/internal/fx-primitive.js +0 -175
  395. package/dist/esm/internal/fx-primitive.js.map +0 -1
  396. package/dist/esm/internal/fx.js +0 -216
  397. package/dist/esm/internal/fx.js.map +0 -1
  398. package/dist/esm/internal/matchers.js +0 -38
  399. package/dist/esm/internal/matchers.js.map +0 -1
  400. package/dist/esm/internal/run.js +0 -32
  401. package/dist/esm/internal/run.js.map +0 -1
  402. package/dist/esm/internal/schema-ref-subject.js +0 -121
  403. package/dist/esm/internal/schema-ref-subject.js.map +0 -1
  404. package/dist/esm/internal/versioned-transform.js +0 -37
  405. package/dist/esm/internal/versioned-transform.js.map +0 -1
  406. package/src/Computed.ts +0 -289
  407. package/src/Filtered.ts +0 -274
  408. package/src/Model.ts +0 -483
  409. package/src/RefAsyncData.ts +0 -547
  410. package/src/RefAsyncDataArray.ts +0 -135
  411. package/src/RefBoolean.ts +0 -71
  412. package/src/RefNumber.ts +0 -77
  413. package/src/internal/core-ref-subject.ts +0 -528
  414. package/src/internal/core-subject.ts +0 -143
  415. package/src/internal/deferred-ref.ts +0 -26
  416. package/src/internal/effect-primitive.ts +0 -230
  417. package/src/internal/fx-effect-proto.ts +0 -56
  418. package/src/internal/fx-primitive.ts +0 -223
  419. package/src/internal/fx.ts +0 -619
  420. package/src/internal/matchers.ts +0 -83
  421. package/src/internal/run.ts +0 -51
  422. package/src/internal/schema-ref-subject.ts +0 -163
  423. package/src/internal/versioned-transform.ts +0 -48
package/src/Fx.ts CHANGED
@@ -1,140 +1,136 @@
1
1
  /**
2
- * Fx<R, E, A> is a representation of an `Effect`-ful workflow that exists over
3
- * the time dimension. It operates within a context `R`, can fail with an `E`,
4
- * and succeed with an `A`.
5
- *
6
- * Any `Fx`, shorthand for "Effects", can emit 0 or more errors or events over an
7
- * indefinite period of time. This is in contrast to `Effect` which can only
8
- * produce exactly 1 error or event.
9
- *
10
- * It is defined as a super-type of `Effect`, `Stream`, and `Cause`. This
11
- * allows for all operators that accept an `Fx` to also capable of
12
- * accepting an `Effect`, `Stream`, or `Cause`. An Effect or Cause represents a single
13
- * event or error, while a Stream represents a series of events or errors that will
14
- * be pulled from the producer as soon as possible.
15
- *
16
- * @since 1.18.0
17
- */
18
-
19
- import type * as Context from "@typed/context"
20
- import type { Stream } from "effect"
2
+ * Fx is a push-based reactive primitive built atop of Effect.
3
+ * @since 1.20.0
4
+ */
5
+
6
+ import type * as Ctx from "@typed/context"
7
+ import type {
8
+ ConfigProvider,
9
+ Duration,
10
+ Equivalence,
11
+ ExecutionStrategy,
12
+ Exit,
13
+ Fiber,
14
+ FiberId,
15
+ FiberRef,
16
+ HashSet,
17
+ Pipeable,
18
+ Predicate,
19
+ PubSub,
20
+ Request,
21
+ Runtime,
22
+ Scope,
23
+ Tracer
24
+ } from "effect"
21
25
  import * as Cause from "effect/Cause"
22
- import type * as Chunk from "effect/Chunk"
23
26
  import type { DurationInput } from "effect/Duration"
24
27
  import * as Effect from "effect/Effect"
25
28
  import * as Either from "effect/Either"
26
- import type { Equivalence } from "effect/Equivalence"
27
- import type * as Exit from "effect/Exit"
28
- import type * as Fiber from "effect/Fiber"
29
- import type * as FiberId from "effect/FiberId"
30
- import type { FiberRef } from "effect/FiberRef"
31
- import { constant, dual, identity } from "effect/Function"
32
- import type * as HashSet from "effect/HashSet"
33
- import type { Inspectable } from "effect/Inspectable"
34
- import type * as Layer from "effect/Layer"
29
+ import { dual, identity } from "effect/Function"
30
+ import * as Layer from "effect/Layer"
35
31
  import * as Option from "effect/Option"
36
- import type { Pipeable } from "effect/Pipeable"
37
- import type * as PubSub from "effect/PubSub"
38
- import type * as Queue from "effect/Queue"
39
- import type * as Request from "effect/Request"
40
- import type * as Runtime from "effect/Runtime"
41
- import type * as Schedule from "effect/Schedule"
42
- import type { Scheduler } from "effect/Scheduler"
43
- import type * as Scope from "effect/Scope"
44
- import type * as Tracer from "effect/Tracer"
45
- import type { Emitter } from "./Emitter.js"
32
+ import { hasProperty } from "effect/Predicate"
33
+ import * as Queue from "effect/Queue"
34
+ import * as Schedule from "effect/Schedule"
35
+ import type * as Types from "effect/Types"
36
+ import * as Emitter from "./Emitter.js"
46
37
  import * as core from "./internal/core.js"
47
- import * as primitive from "./internal/fx-primitive.js"
48
- import * as internal from "./internal/fx.js"
49
- import * as internalKeyed from "./internal/keyed.js"
50
- import * as internalProtos from "./internal/protos.js"
51
- import * as internalRun from "./internal/run.js"
52
- import * as Share from "./internal/share.js"
38
+ import * as coreKeyed from "./internal/keyed.js"
39
+ import * as protos from "./internal/protos.js"
40
+ import * as coreShare from "./internal/share.js"
53
41
  import * as strategies from "./internal/strategies.js"
54
- import * as internalWithKey from "./internal/withKey.js"
42
+ import * as coreWithKey from "./internal/withKey.js"
55
43
  import { type RefSubject, transform } from "./RefSubject.js"
56
- import type * as Sink from "./Sink.js"
57
- import type { Subject } from "./Subject.js"
44
+ import * as Sink from "./Sink.js"
45
+ import type * as Subject from "./Subject.js"
58
46
  import { TypeId } from "./TypeId.js"
59
47
 
60
- /* #region Model */
61
-
62
48
  /**
63
- * Fx<R, E, A> is a representation of an `Effect`-ful workflow that exists over
64
- * the time dimension. It operates within a context `R`, can fail with an `E`,
65
- * and succeed with an `A`.
66
- *
67
- * @since 1.18.0
68
- * @category models
49
+ * Fx is a push-based reactive primitive built atop of Effect.
50
+ * @since 1.20.0
69
51
  */
70
- export interface Fx<R, E, A> extends Fx.Variance<R, E, A>, Pipeable, Inspectable {}
52
+ export interface Fx<out R, out E, out A> extends Pipeable.Pipeable {
53
+ readonly [TypeId]: Fx.Variance<R, E, A>
71
54
 
72
- /**
73
- * FxInput<R, E, A> are all the types that can be transformed into an Fx
74
- *
75
- * @since 1.18.0
76
- * @category models
77
- */
78
- export type FxInput<R, E, A> = Fx<R, E, A> | Effect.Effect<R, E, A> | Cause.Cause<E> | Iterable<A>
55
+ /**
56
+ * @since 1.20.0
57
+ */
58
+ run<R2 = never>(sink: Sink.Sink<R2, E, A>): Effect.Effect<R | R2, never, unknown>
59
+ }
79
60
 
80
61
  /**
81
- * @since 1.18.0
62
+ * @since 1.20.0
82
63
  */
83
64
  export namespace Fx {
84
65
  /**
85
- * Extract the Context, Error, or Success type from an Fx
86
- * @since 1.18.0
66
+ * @since 1.20.0
67
+ */
68
+ export interface Variance<R, E, A> {
69
+ readonly _R: Types.Covariant<R>
70
+ readonly _E: Types.Covariant<E>
71
+ readonly _A: Types.Covariant<A>
72
+ }
73
+
74
+ /**
75
+ * @since 1.20.0
87
76
  */
88
77
  export type Context<T> = T extends Fx<infer R, infer _E, infer _A> ? R : never
89
78
 
90
79
  /**
91
- * Extract the Error type from an Fx
92
- * @since 1.18.0
80
+ * @since 1.20.0
93
81
  */
94
82
  export type Error<T> = T extends Fx<infer _R, infer E, infer _A> ? E : never
95
83
 
96
84
  /**
97
- * Extract the Success type from an Fx
98
- * @since 1.18.0
85
+ * @since 1.20.0
99
86
  */
100
87
  export type Success<T> = T extends Fx<infer _R, infer _E, infer A> ? A : never
101
88
 
102
89
  /**
103
- * Configures the variance of an Fx
104
- * @since 1.18.0
105
- * @category models
90
+ * @since 1.20.0
106
91
  */
107
- export interface Variance<R, E, A> {
108
- readonly [TypeId]: {
109
- readonly _R: (_: never) => R
110
- readonly _E: (_: never) => E
111
- readonly _A: (_: never) => A
112
- }
113
- }
92
+ export type Unify<T> = T extends Fx<infer R, infer E, infer A> | infer _ ? Fx<R, E, A> : never
93
+ }
114
94
 
115
- /**
116
- * @since 1.18.0
117
- */
118
- export type FromInput<T extends FxInput<any, any, any>> = [T] extends [ReadonlyArray<infer A>] ? Fx<never, never, A>
119
- : [T] extends [Iterable<infer A>] ? Fx<never, never, A>
120
- : [T] extends [Cause.Cause<infer E>] ? Fx<never, E, never>
121
- : [T] extends [Fx<infer R, infer E, infer A>] ? Fx<R, E, A>
122
- : [T] extends [Effect.Effect<infer R, infer E, infer A>] ? Fx<R, E, A>
123
- : never
95
+ /**
96
+ * @since 1.20.0
97
+ */
98
+ export type Context<T> = Fx.Context<T>
99
+
100
+ /**
101
+ * @since 1.20.0
102
+ */
103
+ export type Error<T> = Fx.Error<T>
104
+
105
+ /**
106
+ * @since 1.20.0
107
+ */
108
+ export type Success<T> = Fx.Success<T>
109
+
110
+ /**
111
+ * @since 1.20.0
112
+ */
113
+ export type Unify<T> = Fx.Unify<T>
114
+
115
+ /**
116
+ * @since 1.20.0
117
+ */
118
+ export function isFx<R, E, A>(u: unknown): u is Fx<R, E, A> {
119
+ return u === null ? false : hasProperty(u, TypeId)
124
120
  }
125
121
 
126
122
  /**
127
123
  * FlattenStrategy is a representation of how higher-order effect operators should flatten
128
124
  * nested Fx.
129
125
  *
130
- * @since 1.18.0
126
+ * @since 1.20.0
131
127
  * @category FlattenStrategy
132
128
  */
133
129
  export type FlattenStrategy = Unbounded | Bounded | Switch | Exhaust | ExhaustLatest
134
130
 
135
131
  /**
136
132
  * Strategy which will allow for an unbounded number of concurrent effects to be run.
137
- * @since 1.18.0
133
+ * @since 1.20.0
138
134
  * @category FlattenStrategy
139
135
  */
140
136
  export interface Unbounded {
@@ -143,14 +139,14 @@ export interface Unbounded {
143
139
 
144
140
  /**
145
141
  * Singleton instance of Unbounded
146
- * @since 1.18.0
142
+ * @since 1.20.0
147
143
  * @category FlattenStrategy
148
144
  */
149
145
  export const Unbounded: Unbounded = strategies.Unbounded
150
146
 
151
147
  /**
152
148
  * Strategy which will allow for a bounded number of concurrent effects to be run.
153
- * @since 1.18.0
149
+ * @since 1.20.0
154
150
  * @category FlattenStrategy
155
151
  */
156
152
  export interface Bounded {
@@ -160,14 +156,14 @@ export interface Bounded {
160
156
 
161
157
  /**
162
158
  * Construct a Bounded strategy
163
- * @since 1.18.0
159
+ * @since 1.20.0
164
160
  * @category FlattenStrategy
165
161
  */
166
162
  export const Bounded: (capacity: number) => Bounded = strategies.Bounded
167
163
 
168
164
  /**
169
165
  * Strategy which will switch to a new effect as soon as it is available.
170
- * @since 1.18.0
166
+ * @since 1.20.0
171
167
  * @category FlattenStrategy
172
168
  */
173
169
  export interface Switch {
@@ -176,7 +172,7 @@ export interface Switch {
176
172
 
177
173
  /**
178
174
  * Singleton instance of Switch
179
- * @since 1.18.0
175
+ * @since 1.20.0
180
176
  * @category FlattenStrategy
181
177
  */
182
178
  export const Switch: Switch = strategies.Switch
@@ -186,7 +182,7 @@ export const Switch: Switch = strategies.Switch
186
182
  * the first Fx is still running. When the first Fx finished, the next event
187
183
  * will execute.
188
184
  *
189
- * @since 1.18.0
185
+ * @since 1.20.0
190
186
  * @category FlattenStrategy
191
187
  */
192
188
  export interface Exhaust {
@@ -195,7 +191,7 @@ export interface Exhaust {
195
191
 
196
192
  /**
197
193
  * Singleton instance of Exhaust
198
- * @since 1.18.0
194
+ * @since 1.20.0
199
195
  * @category FlattenStrategy
200
196
  */
201
197
  export const Exhaust: Exhaust = strategies.Exhaust
@@ -205,7 +201,7 @@ export const Exhaust: Exhaust = strategies.Exhaust
205
201
  * the latest Fx is still running. When the latest Fx finishes, the last seend event
206
202
  * will execute.
207
203
  *
208
- * @since 1.18.0
204
+ * @since 1.20.0
209
205
  * @category FlattenStrategy
210
206
  */
211
207
  export interface ExhaustLatest {
@@ -214,21 +210,21 @@ export interface ExhaustLatest {
214
210
 
215
211
  /**
216
212
  * Singleton instance of ExhaustLatest
217
- * @since 1.18.0
213
+ * @since 1.20.0
218
214
  * @category FlattenStrategy
219
215
  */
220
216
  export const ExhaustLatest: ExhaustLatest = strategies.ExhaustLatest
221
217
 
222
218
  /**
223
219
  * MergeStrategy is a representation of how multiple Fx should be merged together.
224
- * @since 1.18.0
220
+ * @since 1.20.0
225
221
  * @category MergeStrategy
226
222
  */
227
223
  export type MergeStrategy = Unordered | Ordered | Switch
228
224
 
229
225
  /**
230
226
  * Strategy which will merge Fx in an unordered fashion.
231
- * @since 1.18.0
227
+ * @since 1.20.0
232
228
  * @category MergeStrategy
233
229
  */
234
230
  export interface Unordered {
@@ -238,7 +234,7 @@ export interface Unordered {
238
234
 
239
235
  /**
240
236
  * Construct an Unordered strategy
241
- * @since 1.18.0
237
+ * @since 1.20.0
242
238
  * @category MergeStrategy
243
239
  */
244
240
  export const Unordered: (concurrency: number) => Unordered = strategies.Unordered
@@ -246,7 +242,7 @@ export const Unordered: (concurrency: number) => Unordered = strategies.Unordere
246
242
  /**
247
243
  * Strategy which will merge Fx in an ordered fashion with
248
244
  * the specified level of concurrency.
249
- * @since 1.18.0
245
+ * @since 1.20.0
250
246
  * @category MergeStrategy
251
247
  */
252
248
  export interface Ordered {
@@ -256,2222 +252,1792 @@ export interface Ordered {
256
252
 
257
253
  /**
258
254
  * Construct an Ordered strategy
259
- * @since 1.18.0
255
+ * @since 1.20.0
260
256
  * @category MergeStrategy
261
257
  */
262
258
  export const Ordered: (concurrency: number) => Ordered = strategies.Ordered
263
259
 
264
260
  /* #endregion */
265
261
 
266
- /* #region Constructor */
267
-
268
- /* #region Core */
269
-
270
262
  /**
271
- * An Fx which will immediately end producing 0 events and 0 errors.
272
- * @since 1.18.0
273
- * @category constructors
263
+ * Type-alias for a Effect.forkIn(scope) that returns a Fiber
264
+ * @since 1.20.0
265
+ * @category models
274
266
  */
275
- export const empty: Fx<never, never, never> = core.empty
267
+ export type ScopedFork = <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, never, Fiber.Fiber<E, A>>
276
268
 
277
269
  /**
278
- * Construct an Fx<never, E, A> from a Cause<E>
279
- * @since 1.18.0
280
- * @category constructors
270
+ * Type-alias for Effect.forkIn(scope) which runs the Effect runtime
271
+ * of an Fx in a Scope. Used in for higher-order operators.
272
+ *
273
+ * @since 1.20.0
274
+ * @category models
281
275
  */
282
- export const failCause: <E>(cause: Cause.Cause<E>) => Fx<never, E, never> = core.failCause
276
+ export type FxFork = <R>(
277
+ effect: Effect.Effect<R, never, void>
278
+ ) => Effect.Effect<R, never, void>
283
279
 
284
280
  /**
285
- * Construct an Fx<never, never, never> from a defect
286
- * @since 1.18.0
287
- * @category constructors
281
+ * @since 1.20.0
288
282
  */
289
- export const die = (defect: unknown): Fx<never, never, never> => failCause(Cause.die(defect))
283
+ export const make: {
284
+ <R, E, A>(run: (sink: Sink.Sink<never, E, A>) => Effect.Effect<R, never, unknown>): Fx<R, E, A>
285
+ <E, A>(run: (sink: Sink.Sink<never, E, A>) => Effect.Effect<never, never, unknown>): Fx<never, E, A>
286
+ <A>(run: (sink: Sink.Sink<never, never, A>) => Effect.Effect<never, never, unknown>): Fx<never, never, A>
287
+ } = core.make
290
288
 
291
289
  /**
292
- * Interrupt the current Fx with the specified FiberId
293
- * @since 1.18.0
294
- * @category constructors
290
+ * @since 1.20.0
295
291
  */
296
- export const interrupt = (id: FiberId.FiberId): Fx<never, never, never> => failCause(Cause.interrupt(id))
292
+ export const succeed: <A>(value: A) => Fx<never, never, A> = core.succeed
297
293
 
298
294
  /**
299
- * Construct an Fx which will fail with the specified error.
300
- * @since 1.18.0
301
- * @category constructors
295
+ * @since 1.20.0
302
296
  */
303
- export const fail: <E>(error: E) => Fx<never, E, never> = core.fail
297
+ export const sync: <A>(f: () => A) => Fx<never, never, A> = core.fromSync
304
298
 
305
299
  /**
306
- * Construct an Fx<R, E, A> from an Effect<R, E, A>
307
- * @since 1.18.0
308
- * @category constructors
300
+ * @since 1.20.0
309
301
  */
310
- export const fromEffect: <R, E, A>(effect: Effect.Effect<R, E, A>) => Fx<R, E, A> = core.fromEffect
302
+ export const fromArray: <const A extends ReadonlyArray<any>>(array: A) => Fx<never, never, A[number]> = core.fromArray
311
303
 
312
304
  /**
313
- * Construct an Fx from an Iterable
314
- * @since 1.18.0
315
- * @category constructors
305
+ * @since 1.20.0
316
306
  */
317
- export const fromIterable: {
318
- <A extends ReadonlyArray<any>>(array: A): Fx<never, never, A[number]>
319
- <A>(iterable: Iterable<A>): Fx<never, never, A>
320
- } = core.fromIterable
307
+ export const fromIterable: <A>(iterable: Iterable<A>) => Fx<never, never, A> = core.fromIterable
321
308
 
322
309
  /**
323
- * Construct an Fx<R, E, A> from an Effect<R, E, A>
324
- * @since 1.18.0
325
- * @category constructors
310
+ * @since 1.20.0
326
311
  */
327
- export const fromStream: <R, E, A>(effect: Stream.Stream<R, E, A>) => Fx<R, E, A> = core.fromStream
312
+ export const fromEffect: <R, E, A>(effect: Effect.Effect<R, E, A>) => Fx<R, E, A> = core.fromEffect
328
313
 
329
314
  /**
330
- * Construct an Fx<R, E, A> from an Effect<R, E, A>
331
- * @since 1.18.0
332
- * @category constructors
315
+ * @since 1.20.0
333
316
  */
334
- export const from: {
335
- <A extends ReadonlyArray<any>>(array: A): Fx<never, never, A[number]>
336
- <A>(iterable: Iterable<A>): Fx<never, never, A>
337
- <E>(cause: Cause.Cause<E>): Fx<never, E, never>
338
- <R, E, A>(fx: FxInput<R, E, A>): Fx<R, E, A>
339
- <A>(value: A): Fx<never, never, A>
340
- } = core.from
317
+ export const fromScheduled: {
318
+ <R2, I, O>(
319
+ schedule: Schedule.Schedule<R2, I, O>
320
+ ): <R, E>(input: Effect.Effect<R, E, I>) => Fx<R | R2, E, O>
341
321
 
342
- /**
343
- * Construct an Fx by describing an Effectful workflow that has access to a Sink
344
- * to emit events and errors.
345
- * @since 1.18.0
346
- * @category constructors
347
- */
348
- export const fromSink: <R, E, A>(f: (sink: Sink.Sink<E, A>) => Effect.Effect<R, E, unknown>) => Fx<R, E, A> =
349
- core.fromSink
322
+ <R, E, I, R2, O>(
323
+ input: Effect.Effect<R, E, I>,
324
+ schedule: Schedule.Schedule<R2, I, O>
325
+ ): Fx<R | R2, E, O>
326
+ } = dual(2, core.fromScheduled)
350
327
 
351
328
  /**
352
- * Construct an Fx by describing an Scoped Effect that has access to an Emitter
353
- * to emit events and errors.
354
- * @since 1.18.0
355
- * @category constructors
329
+ * @since 1.20.0
356
330
  */
357
- export const fromEmitter: <R, E, A>(
358
- f: (emitter: Emitter<E, A>) => Effect.Effect<R | Scope.Scope, never, unknown>
359
- ) => Fx<Exclude<R, Scope.Scope>, E, A> = core.fromEmitter
331
+ export const schedule: {
332
+ <R2, O>(
333
+ schedule: Schedule.Schedule<R2, unknown, O>
334
+ ): <R, E, A>(input: Effect.Effect<R, E, A>) => Fx<R | R2, E, A>
335
+
336
+ <R, E, A, R2, O>(
337
+ input: Effect.Effect<R, E, A>,
338
+ schedule: Schedule.Schedule<R2, unknown, O>
339
+ ): Fx<R | R2, E, A>
340
+ } = dual(2, core.schedule)
360
341
 
361
342
  /**
362
- * An Fx which will never emit any errors or events, and will never end
363
- * @since 1.18.0
364
- * @category constructors
343
+ * @since 1.20.0
365
344
  */
366
- export const never: Fx<never, never, never> = core.never
345
+ export const periodic: {
346
+ (period: Duration.DurationInput): <R, E, A>(iterator: Effect.Effect<R, E, A>) => Fx<R, E, A>
347
+ <R, E, A>(iterator: Effect.Effect<R, E, A>, period: Duration.DurationInput): Fx<R, E, A>
348
+ } = dual(2, <R, E, A>(
349
+ iterator: Effect.Effect<R, E, A>,
350
+ period: Duration.DurationInput
351
+ ): Fx<R, E, A> => continueWith(fromEffect(iterator), () => schedule(iterator, Schedule.spaced(period))))
367
352
 
368
353
  /**
369
- * Construct an Fx which will emit the specified value and then end.
370
- * @since 1.18.0
371
- * @category constructors
354
+ * @since 1.20.0
372
355
  */
373
- export const succeed: <A>(value: A) => Fx<never, never, A> = core.succeed
356
+ export const failCause: <E>(cause: Cause.Cause<E>) => Fx<never, E, never> = core.failCause
374
357
 
375
358
  /**
376
- * Construct an Fx which will emit the return of a synchronous function and then end.
377
- * @since 1.18.0
378
- * @category constructors
359
+ * @since 1.20.0
379
360
  */
380
- export const sync: <A>(f: () => A) => Fx<never, never, A> = core.sync
361
+ export const fail: <E>(error: E) => Fx<never, E, never> = core.fail
381
362
 
382
363
  /**
383
- * Lazily construct an Fx.
384
- * @since 1.18.0
385
- * @category constructors
364
+ * @since 1.20.0
386
365
  */
387
- export const suspend: <R, E, A>(f: () => Fx<R, E, A>) => Fx<R, E, A> = core.suspend
366
+ export const die: (error: unknown) => Fx<never, never, never> = core.die
388
367
 
389
368
  /**
390
- * Helper for constructing your own custom subtypes of an Fx
391
- * @since 1.18.0
392
- * @category Subtyping
369
+ * @since 1.20.0
393
370
  */
394
- export abstract class ToFx<R, E, A> extends primitive.ToFx<R, E, A> implements Fx<R, E, A> {
395
- /**
396
- * Your implementation of an Fx is returned by this function.
397
- * @since 1.18.0
398
- */
399
- abstract toFx(): Fx<R, E, A>
400
- }
371
+ export const map: {
372
+ <A, B>(f: (a: A) => B): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
373
+ <R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => B): Fx<R, E, B>
374
+ } = dual(2, core.map)
401
375
 
402
376
  /**
403
- * Create an Fx which will emit a value after waiting for a specified duration.
404
- * @since 1.18.0
405
- * @category constructors
377
+ * @since 1.20.0
406
378
  */
407
- export const at: {
408
- (delay: DurationInput): <A>(value: A) => Fx<never, never, A>
409
- <A>(value: A, delay: DurationInput): Fx<never, never, A>
410
- } = internal.at
379
+ export const filter: {
380
+ <A, B extends A>(f: Predicate.Refinement<A, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
381
+ <A>(f: Predicate.Predicate<A>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
382
+ <R, E, A, B extends A>(fx: Fx<R, E, A>, f: Predicate.Refinement<A, B>): Fx<R, E, B>
383
+ <R, E, A>(fx: Fx<R, E, A>, f: Predicate.Predicate<A>): Fx<R, E, A>
384
+ } = dual(2, core.filter)
411
385
 
412
386
  /**
413
- * Type-alias for a Effect.forkIn(scope) that returns a Fiber
414
- * @since 1.18.0
415
- * @category models
387
+ * @since 1.20.0
416
388
  */
417
- export type ScopedFork = <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, never, Fiber.Fiber<E, A>>
389
+ export const filterMap: {
390
+ <A, B>(f: (a: A) => Option.Option<B>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
391
+ <R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => Option.Option<B>): Fx<R, E, B>
392
+ } = dual(2, core.filterMap)
418
393
 
419
394
  /**
420
- * Type-alias for Effect.forkIn(scope) which runs the Effect runtime
421
- * of an Fx in a Scope. Used in for higher-order operators.
422
- *
423
- * @since 1.18.0
424
- * @category models
395
+ * @since 1.20.0
425
396
  */
426
- export type FxFork = <R>(
427
- effect: Effect.Effect<R, never, void>
428
- ) => Effect.Effect<R, never, void>
397
+ export const compact = <R, E, A>(fx: Fx<R, E, Option.Option<A>>): Fx<R, E, A> => filterMap(fx, identity)
429
398
 
430
399
  /**
431
- * Params for withScopedFork
432
- * @since 1.18.0
433
- * @category params
400
+ * @since 1.20.0
434
401
  */
435
- export type WithScopedForkParams<E, A> = {
436
- readonly sink: Sink.Sink<E, A>
437
- readonly fork: ScopedFork
438
- readonly scope: Scope.Scope
439
- }
402
+ export const mapEffect: {
403
+ <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>
404
+ <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>
405
+ } = dual(2, core.mapEffect)
440
406
 
441
407
  /**
442
- * Construct an Fx which can fork effects into a Scope.
443
- * @since 1.18.0
444
- * @category constructors
408
+ * @since 1.20.0
445
409
  */
446
- export const withScopedFork: <R, E, A>(
447
- f: (params: WithScopedForkParams<E, A>) => Effect.Effect<R, never, unknown>
448
- ) => Fx<R, E, A> = core.withScopedFork
410
+ export const filterMapEffect: {
411
+ <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>
412
+ <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>
413
+ } = dual(2, core.filterMapEffect)
449
414
 
450
415
  /**
451
- * Params for withEarlyExit
452
- * @since 1.18.0
453
- * @category params
416
+ * @since 1.20.0
454
417
  */
455
- export type WithEarlyExitParams<E, A> = {
456
- readonly sink: Sink.WithEarlyExit<E, A>
457
- readonly fork: ScopedFork
458
- readonly scope: Scope.Scope
459
- }
418
+ export const filterEffect: {
419
+ <A, R2, E2>(f: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
420
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, f: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
421
+ } = dual(2, core.filterEffect)
460
422
 
461
423
  /**
462
- * Construct an Fx which can exit early from a Scope.
463
- * @since 1.18.0
464
- * @category constructors
424
+ * @since 1.20.0
465
425
  */
466
- export const withEarlyExit: <R, E, A>(
467
- f: (params: WithEarlyExitParams<E, A>) => Effect.Effect<R, never, unknown>
468
- ) => Fx<R, E, A> = core.withEarlyExit
426
+ export const tapEffect: {
427
+ <A, R2, E2>(f: (a: A) => Effect.Effect<R2, E2, unknown>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
428
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, f: (a: A) => Effect.Effect<R2, E2, unknown>): Fx<R | R2, E | E2, A>
429
+ } = dual(2, core.tapEffect)
469
430
 
470
431
  /**
471
- * Params for withFlattenStrategy
472
- * @since 1.18.0
473
- * @category params
432
+ * @since 1.20.0
474
433
  */
475
- export type WithFlattenStrategyParams<E, A> = {
476
- readonly sink: Sink.Sink<E, A>
477
- readonly fork: FxFork
478
- readonly scope: Scope.Scope
479
- }
434
+ export const tap: {
435
+ <A>(f: (a: A) => unknown): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
436
+ <R, E, A>(fx: Fx<R, E, A>, f: (a: A) => unknown): Fx<R, E, A>
437
+ } = dual(2, (fx, f) => tapEffect(fx, (a) => Effect.sync(() => f(a))))
480
438
 
481
439
  /**
482
- * Construct an Fx which can flatten nested Fx.
483
- * @since 1.18.0
484
- * @category constructors
440
+ * @since 1.20.0
485
441
  */
486
- export const withFlattenStrategy: <R, E, A>(
487
- f: (params: WithFlattenStrategyParams<E, A>) => Effect.Effect<R, never, unknown>,
488
- strategy: FlattenStrategy
489
- ) => Fx<R, E, A> = core.withFlattenStrategy
490
-
491
- /* #endregion */
492
-
493
- /* #region Additions */
442
+ export const loop: {
443
+ <B, A, C>(seed: B, f: (acc: B, a: A) => readonly [C, B]): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, C>
444
+ <R, E, A, B, C>(fx: Fx<R, E, A>, seed: B, f: (acc: B, a: A) => readonly [C, B]): Fx<R, E, C>
445
+ } = dual(3, core.loop)
494
446
 
495
447
  /**
496
- * Acquire a resource, use it to construct an Fx, and then release the resource
497
- * after the Fx has exited.
498
- *
499
- * @since 1.18.0
500
- * @category constructors
448
+ * @since 1.20.0
501
449
  */
502
- export const acquireUseRelease: {
503
- <A, R2, E2, B, R3, E3>(
504
- use: (a: A) => FxInput<R2, E2, B>,
505
- release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R3, E3, unknown>
506
- ): <R, E>(acquire: Effect.Effect<R, E, A>) => Fx<R | R2 | R3, E | E2 | E3, B>
507
-
508
- <R, E, A, R2, E2, B, R3, E3>(
509
- acquire: Effect.Effect<R, E, A>,
510
- use: (a: A) => FxInput<R2, E2, B>,
511
- release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R3, E3, unknown>
512
- ): Fx<R | R2 | R3, E | E2 | E3, B>
513
- } = core.acquireUseRelease
450
+ export const filterMapLoop: {
451
+ <B, A, C>(seed: B, f: (acc: B, a: A) => readonly [Option.Option<C>, B]): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, C>
452
+ <R, E, A, B, C>(fx: Fx<R, E, A>, seed: B, f: (acc: B, a: A) => readonly [Option.Option<C>, B]): Fx<R, E, C>
453
+ } = dual(3, core.filterMapLoop)
514
454
 
515
455
  /**
516
- * Combine multiple Fx into a single Fx that will emit the results of all Fx
517
- * as a tuple of values.
518
- *
519
- * @since 1.18.0
520
- * @category constructors
456
+ * @since 1.20.0
521
457
  */
522
- export const combine: <const FX extends ReadonlyArray<Fx<any, any, any>>>(
523
- fxs: FX
524
- ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, { readonly [K in keyof FX]: Fx.Success<FX[K]> }> = core.combine
458
+ export const loopEffect: {
459
+ <R2, E2, B, A, C>(
460
+ seed: B,
461
+ f: (acc: B, a: A) => Effect.Effect<R2, E2, readonly [C, B]>
462
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, C>
463
+ <R, E, A, R2, E2, B, C>(
464
+ fx: Fx<R, E, A>,
465
+ seed: B,
466
+ f: (acc: B, a: A) => Effect.Effect<R2, E2, readonly [C, B]>
467
+ ): Fx<R | R2, E | E2, C>
468
+ } = dual(3, core.loopEffect)
525
469
 
526
470
  /**
527
- * Combine a record of Fx into a single Fx that will emit the results of all Fx
528
- * as a record of values.
529
- *
530
- * @since 1.18.0
531
- * @category constructors
471
+ * @since 1.20.0
532
472
  */
533
- export const struct: <const FX extends Readonly<Record<string, Fx<any, any, any>>>>(
534
- fxs: FX
535
- ) => Fx<Fx.Context<FX[string]>, Fx.Error<FX[string]>, { readonly [K in keyof FX]: Fx.Success<FX[K]> }> = (fx) =>
536
- map(combine(Object.entries(fx).map(([k, fx]) => map(fx, (v) => [k, v] as const))), Object.fromEntries)
473
+ export const filterMapLoopEffect: {
474
+ <R2, E2, B, A, C>(
475
+ seed: B,
476
+ f: (acc: B, a: A) => Effect.Effect<R2, E2, readonly [Option.Option<C>, B]>
477
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, C>
478
+ <R, E, A, R2, E2, B, C>(
479
+ fx: Fx<R, E, A>,
480
+ seed: B,
481
+ f: (acc: B, a: A) => Effect.Effect<R2, E2, readonly [Option.Option<C>, B]>
482
+ ): Fx<R | R2, E | E2, C>
483
+ } = dual(3, core.filterMapLoopEffect)
537
484
 
538
485
  /**
539
- * Combine multiple Fx into a single Fx that will emit the results of all Fx
540
- * as they occur.
541
- * @since 1.18.0
542
- * @category constructors
486
+ * @since 1.20.0
543
487
  */
544
- export const merge: <const FX extends ReadonlyArray<Fx<any, any, any>>>(
545
- fxs: FX
546
- ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>> = core.merge
488
+ export const observe: {
489
+ <A, R2, E2, B>(f: (a: A) => Effect.Effect<R2, E2, B>): <R, E>(fx: Fx<R, E, A>) => Effect.Effect<R | R2, E | E2, void>
490
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => Effect.Effect<R2, E2, B>): Effect.Effect<R | R2, E | E2, void>
491
+ } = dual(2, core.observe)
547
492
 
548
493
  /**
549
- * Combine multiple Fx into a single Fx that will emit the results of all Fx
550
- * as they occur, but only allowing `n` concurrent Fx to run at a time.
551
- *
552
- * @since 1.18.0
553
- * @category constructors
494
+ * @since 1.20.0
554
495
  */
555
- export const mergeConcurrently: {
556
- (concurrency: number): <const FX extends ReadonlyArray<Fx<any, any, any>>>(
557
- fxs: FX
558
- ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>>
559
- <const FX extends ReadonlyArray<Fx<any, any, any>>>(
560
- fxs: FX,
561
- concurrency: number
562
- ): Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>>
563
- } = core.mergeConcurrently
496
+ export const drain: <R, E, A>(fx: Fx<R, E, A>) => Effect.Effect<R, E, void> = core.drain
564
497
 
565
498
  /**
566
- * Combine multiple Fx into a single Fx that will emit the results of all Fx
567
- * in the order the Fx were provided. All Fx will be executed concurrently,
568
- * and the results will be buffered if necessary to preserve ordering.
569
- *
570
- * @since 1.18.0
571
- * @category constructors
499
+ * @since 1.20.0
572
500
  */
573
- export const mergeBuffer: <const FX extends ReadonlyArray<Fx<any, any, any>>>(
574
- fxs: FX
575
- ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>> = core.mergeBuffer
501
+ export const reduce: {
502
+ <A, B>(seed: B, f: (acc: B, a: A) => B): <R, E>(fx: Fx<R, E, A>) => Effect.Effect<R, E, B>
503
+ <R, E, A, B>(fx: Fx<R, E, A>, seed: B, f: (acc: B, a: A) => B): Effect.Effect<R, E, B>
504
+ } = dual(3, core.reduce)
576
505
 
577
506
  /**
578
- * Combine multiple Fx into a single Fx that will emit the results of all Fx
579
- * in the order the Fx were provided. All Fx will be executed concurrently, limited
580
- * by the provided concurrency, and the results will be buffered if necessary to preserve ordering.
581
- *
582
- * @since 1.18.0
583
- * @category constructors
507
+ * @since 1.20.0
584
508
  */
585
- export const mergeBufferConcurrently: {
586
- (concurrency: number): <const FX extends ReadonlyArray<Fx<any, any, any>>>(
587
- fxs: FX
588
- ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>>
589
- <const FX extends ReadonlyArray<Fx<any, any, any>>>(
590
- fxs: FX,
591
- concurrency: number
592
- ): Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>>
593
- } = core.mergeBufferConcurrently
509
+ export const toReadonlyArray: <R, E, A>(fx: Fx<R, E, A>) => Effect.Effect<R, E, ReadonlyArray<A>> = core.toReadonlyArray
594
510
 
595
511
  /**
596
- * Merge together multiple Fx into a single Fx that will emit the results of all Fx
597
- * allowing only 1 Fx to run at a time.
598
- *
599
- * @since 1.18.0
600
- * @category constructors
512
+ * @since 1.20.0
601
513
  */
602
- export const mergeSwitch = <const FX extends ReadonlyArray<Fx<any, any, any>>>(
603
- fxs: FX
604
- ): Fx<
605
- Fx.Context<FX[number]>,
606
- Fx.Error<FX[number]>,
607
- Fx.Success<FX[number]>
608
- > => core.mergeSwitch(fxs)
514
+ export const slice: {
515
+ (drop: number, take: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
516
+ <R, E, A>(fx: Fx<R, E, A>, drop: number, take: number): Fx<R, E, A>
517
+ } = dual(3, core.slice)
609
518
 
610
519
  /**
611
- * Merge together multiple Fx into a single Fx that will emit the results of the
612
- * first Fx to emit a value.
613
- *
614
- * @since 1.18.0
615
- * @category constructors
520
+ * @since 1.20.0
616
521
  */
617
- export const race: <const FX extends ReadonlyArray<Fx<any, any, any>>>(
618
- fxs: FX
619
- ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>> = core.race
522
+ export const take: {
523
+ (n: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
524
+ <R, E, A>(fx: Fx<R, E, A>, n: number): Fx<R, E, A>
525
+ } = dual(2, core.take)
620
526
 
621
527
  /**
622
- * Schedule an Effect to run using the provided Schedule, emitting its success of failure
623
- * at the intervals specified by the Schedule.
624
- *
625
- * @since 1.18.0
626
- * @category constructors
528
+ * @since 1.20.0
627
529
  */
628
- export const fromScheduled: {
629
- <R2>(scheduled: Schedule.Schedule<R2, unknown, unknown>): <R, E, A>(fx: Effect.Effect<R, E, A>) => Fx<R | R2, E, A>
630
- <R, E, A, R2>(fx: Effect.Effect<R, E, A>, scheduled: Schedule.Schedule<R2, unknown, unknown>): Fx<R | R2, E, A>
631
- } = core.fromScheduled
530
+ export const drop: {
531
+ (n: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
532
+ <R, E, A>(fx: Fx<R, E, A>, n: number): Fx<R, E, A>
533
+ } = dual(2, core.drop)
632
534
 
633
535
  /**
634
- * Schedule an Effect to run at the specified duration.
635
- *
636
- * @since 1.18.0
637
- * @category constructors
536
+ * @since 1.20.0
638
537
  */
639
- export const periodic: {
640
- (duration: DurationInput): <R, E, A>(fx: Effect.Effect<R, E, A>) => Fx<R, E, A>
641
- <R, E, A>(fx: Effect.Effect<R, E, A>, duration: DurationInput): Fx<R, E, A>
642
- } = core.periodic
538
+ export const skipRepeats: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A> = core.skipRepeats
643
539
 
644
540
  /**
645
- * Consume a Dequeue as soon as values become available and emit them as a Fx.
646
- * @since 1.18.0
647
- * @category constructors
541
+ * @since 1.20.0
648
542
  */
649
- export const fromDequeue: {
650
- <A>(dequeue: Queue.Dequeue<A>): Fx<never, never, A>
651
- <I, A>(dequeue: Context.Dequeue<I, A>): Fx<I, never, A>
652
- } = internal.fromDequeue
543
+ export const skipRepeatsWith: {
544
+ <A>(eq: Equivalence.Equivalence<A>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
545
+ <R, E, A>(fx: Fx<R, E, A>, eq: Equivalence.Equivalence<A>): Fx<R, E, A>
546
+ } = dual(2, core.skipRepeatsWith)
653
547
 
654
548
  /**
655
- * Consume a PubSub as soon as values become available and emit them as a Fx.
656
- * @since 1.18.0
657
- * @category constructors
549
+ * @since 1.20.0
658
550
  */
659
- export const fromPubSub: {
660
- <A>(PubSub: PubSub.PubSub<A>): Fx<Scope.Scope, never, A>
661
- <I, A>(PubSub: Context.PubSub<I, A>): Fx<Scope.Scope | I, never, A>
662
- } = internal.fromPubSub
663
-
664
- /* #endregion */
665
-
666
- /* #region Running */
551
+ export const empty: Fx<never, never, never> = core.empty
667
552
 
668
553
  /**
669
- * Run an Fx to completion with the provided Sink. The
670
- * Effect will resolve with the first Error of the Fx.
671
- * @since 1.18.0
672
- * @category running
554
+ * @since 1.20.0
673
555
  */
674
- export const run: {
675
- <E, A, R2>(
676
- sink: Sink.WithContext<R2, E, A>
677
- ): <R>(fx: Fx<R, E, A>) => Effect.Effect<R | R2, never, unknown>
678
-
679
- <R, E, A, R2>(
680
- fx: Fx<R, E, A>,
681
- sink: Sink.WithContext<R2, E, A>
682
- ): Effect.Effect<R | R2, never, unknown>
683
- } = dual(2, internalRun.run)
556
+ export const never: Fx<never, never, never> = core.never
684
557
 
685
558
  /**
686
- * Observe an Fx with the provided success value handler. The
687
- * Effect will resolve with the first Error of the Fx.
688
- *
689
- * @since 1.18.0
690
- * @category running
559
+ * @since 1.20.0
691
560
  */
692
- export const observe: {
693
- <A, R2, E2>(
694
- onSuccees: (a: A) => Effect.Effect<R2, E2, unknown>
695
- ): <R, E>(fx: Fx<R, E, A>) => Effect.Effect<R | R2, E | E2, void>
696
- <R, E, A, R2, E2>(
697
- fx: Fx<R, E, A>,
698
- onSuccees: (a: A) => Effect.Effect<R2, E2, unknown>
699
- ): Effect.Effect<R | R2, E | E2, void>
700
- } = dual(2, core.observe)
561
+ export const padWith: {
562
+ <B, C>(start: Iterable<B>, end: Iterable<C>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A | B | C>
563
+ <R, E, A, B, C>(fx: Fx<R, E, A>, start: Iterable<B>, end: Iterable<C>): Fx<R, E, A | B | C>
564
+ } = dual(3, core.padWith)
701
565
 
702
566
  /**
703
- * Run an Fx to completion. The Effect will resolve with the first Error of the Fx.
704
- *
705
- * @since 1.18.0
706
- * @category running
567
+ * @since 1.20.0
707
568
  */
708
- export const drain: <R, E, A>(fx: Fx<R, E, A>) => Effect.Effect<R, E, void> = core.drain
569
+ export const prependAll: {
570
+ <B>(start: Iterable<B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A | B>
571
+ <R, E, A, B>(fx: Fx<R, E, A>, start: Iterable<B>): Fx<R, E, A | B>
572
+ } = dual(2, core.prependAll)
709
573
 
710
574
  /**
711
- * Reduce an Fx to a single value.
712
- * @since 1.18.0
713
- * @category running
575
+ * @since 1.20.0
714
576
  */
715
- export const reduce: {
716
- <A, B>(seed: B, f: (acc: B, a: A) => B): <R, E>(fx: Fx<R, E, A>) => Effect.Effect<R, E, B>
717
- <R, E, A, B>(fx: Fx<R, E, A>, seed: B, f: (acc: B, a: A) => B): Effect.Effect<R, E, B>
718
- } = core.reduce
577
+ export const appendAll: {
578
+ <C>(end: Iterable<C>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A | C>
579
+ <R, E, A, C>(fx: Fx<R, E, A>, end: Iterable<C>): Fx<R, E, A | C>
580
+ } = dual(2, core.appendAll)
719
581
 
720
582
  /**
721
- * Run an Fx to completion, collecting all emitted values into an Array.
722
- * @since 1.18.0
723
- * @category running
583
+ * @since 1.20.0
724
584
  */
725
- export const toArray: <R, E, A>(fx: Fx<R, E, A>) => Effect.Effect<R, E, Array<A>> = core.toArray
585
+ export const prepend: {
586
+ <B>(start: B): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A | B>
587
+ <R, E, A, B>(fx: Fx<R, E, A>, start: B): Fx<R, E, A | B>
588
+ } = dual(2, core.prepend)
726
589
 
727
590
  /**
728
- * Run an Fx to completion, collecting all emitted values into a ReadonlyArray.
729
- * @since 1.18.0
730
- * @category running
591
+ * @since 1.20.0
731
592
  */
732
- export const toReadonlyArray: <R, E, A>(fx: Fx<R, E, A>) => Effect.Effect<R, E, ReadonlyArray<A>> = core.toReadonlyArray
593
+ export const append: {
594
+ <C>(end: C): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A | C>
595
+ <R, E, A, C>(fx: Fx<R, E, A>, end: C): Fx<R, E, A | C>
596
+ } = dual(2, core.append)
733
597
 
734
598
  /**
735
- * Run an Fx to completion, collecting all emitted values into a Chunk.
736
- * @since 1.18.0
737
- * @category running
599
+ * @since 1.20.0
738
600
  */
739
- export const toChunk: <R, E, A>(fx: Fx<R, E, A>) => Effect.Effect<R, E, Chunk.Chunk<A>> = core.toChunk
601
+ export const scan: {
602
+ <B, A>(seed: B, f: (b: B, a: A) => B): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
603
+ <R, E, A, B>(fx: Fx<R, E, A>, seed: B, f: (b: B, a: A) => B): Fx<R, E, B>
604
+ } = dual(3, core.scan)
740
605
 
741
606
  /**
742
- * Consume an Fx and place its values into an Enqueue.
743
- * @since 1.18.0
744
- * @category running
607
+ * @since 1.20.0
745
608
  */
746
- export const toEnqueue: {
747
- <A, B>(enqueue: Queue.Enqueue<A | B>): <R, E>(fx: Fx<R, E, A>) => Effect.Effect<R, E, void>
748
- <I, A, B>(enqueue: Context.Enqueue<I, A | B>): <R, E>(fx: Fx<R, E, A>) => Effect.Effect<I | R, E, void>
749
- <R, E, A, B>(fx: Fx<R, E, A>, enqueue: Queue.Enqueue<A | B>): Effect.Effect<R, E, void>
750
- <R, E, I, A, B>(fx: Fx<R, E, A>, enqueue: Context.Enqueue<I, A | B>): Effect.Effect<R, E, void>
751
- } = internal.toEnqueue
609
+ export const flatMapWithStrategy: {
610
+ <A, R2, E2, B>(
611
+ f: (a: A) => Fx<R2, E2, B>,
612
+ strategy: FlattenStrategy,
613
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy
614
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, B>
752
615
 
753
- /* #endregion */
616
+ <R, E, A, R2, E2, B>(
617
+ fx: Fx<R, E, A>,
618
+ f: (a: A) => Fx<R2, E2, B>,
619
+ strategy: FlattenStrategy,
620
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy
621
+ ): Fx<R | R2 | Scope.Scope, E | E2, B>
622
+ } = dual(4, core.flatMapWithStrategy)
754
623
 
755
- /* #region Combinators */
624
+ const isDataFirstFx = (args: IArguments) => isFx(args[0])
756
625
 
757
626
  /**
758
- * Map over the success value of an Fx.
759
- * @since 1.18.0
760
- * @category combinators
627
+ * @since 1.20.0
761
628
  */
762
- export const map: {
763
- <A, B>(f: (a: A) => B): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
764
- <R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => B): Fx<R, E, B>
765
- } = core.map
629
+ export const flatMap: {
630
+ <A, R2, E2, B>(
631
+ f: (a: A) => Fx<R2, E2, B>,
632
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
633
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, B>
766
634
 
767
- /**
768
- * Map over both failure and success values of an Fx.
769
- * @since 1.18.0
770
- * @category combinators
771
- */
772
- export const mapBoth: {
773
- <E, E2, A, B>(
774
- options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => B }
775
- ): <R>(fx: Fx<R, E, A>) => Fx<R, E2, B>
776
- <R, E, A, E2, B>(
635
+ <R, E, A, R2, E2, B>(
777
636
  fx: Fx<R, E, A>,
778
- options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => B }
779
- ): Fx<R, E2, B>
780
- } = core.mapBoth
637
+ f: (a: A) => Fx<R2, E2, B>,
638
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
639
+ ): Fx<R | R2 | Scope.Scope, E | E2, B>
640
+ } = dual(isDataFirstFx, core.flatMap)
781
641
 
782
642
  /**
783
- * Filter the success value of an Fx.
784
- * @since 1.18.0
785
- * @category combinators
643
+ * @since 1.20.0
786
644
  */
787
- export const filter: {
788
- <A, B extends A>(f: (a: A) => a is B): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
789
- <A>(f: (a: A) => boolean): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
790
- <R, E, A, B extends A>(fx: Fx<R, E, A>, f: (a: A) => a is B): Fx<R, E, B>
791
- <R, E, A>(fx: Fx<R, E, A>, f: (a: A) => boolean): Fx<R, E, A>
792
- } = core.filter
645
+ export const flatMapEffect: {
646
+ <A, R2, E2, B>(
647
+ f: (a: A) => Effect.Effect<R2, E2, B>,
648
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
649
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, B>
793
650
 
794
- /**
795
- * Filter and map the success value of an Fx.
796
- * @since 1.18.0
797
- * @category combinators
798
- */
799
- export const filterMap: {
800
- <A, B>(f: (a: A) => Option.Option<B>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
801
- <R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => Option.Option<B>): Fx<R, E, B>
802
- } = core.filterMap
651
+ <R, E, A, R2, E2, B>(
652
+ fx: Fx<R, E, A>,
653
+ f: (a: A) => Effect.Effect<R2, E2, B>,
654
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
655
+ ): Fx<R | R2 | Scope.Scope, E | E2, B>
656
+ } = dual(isDataFirstFx, core.flatMapEffect)
803
657
 
804
658
  /**
805
- * Unwrap Options by filtering any None values.
806
- * @since 1.18.0
807
- * @category combinators
808
- */
809
- export const compact: <R, E, A>(fx: Fx<R, E, Option.Option<A>>) => Fx<R, E, A> = core.compact
810
- /**
811
- * Map over the Cause of an Fx.
812
- * @since 1.18.0
813
- * @category errors
659
+ * @since 1.20.0
814
660
  */
815
- export const mapErrorCause: {
816
- <E, E2>(f: (a: Cause.Cause<E>) => Cause.Cause<E2>): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
817
- <R, E, A, E2>(fx: Fx<R, E, A>, f: (a: Cause.Cause<E>) => Cause.Cause<E2>): Fx<R, E2, A>
818
- } = core.mapErrorCause
661
+ export const switchMap: {
662
+ <A, R2, E2, B>(
663
+ f: (a: A) => Fx<R2, E2, B>,
664
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
665
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, B>
819
666
 
820
- /**
821
- * Map over the Error of an Fx.
822
- * @since 1.18.0
823
- * @category errors
824
- */
825
- export const mapError: {
826
- <E, E2>(f: (a: E) => E2): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
827
- <R, E, A, E2>(fx: Fx<R, E, A>, f: (a: E) => E2): Fx<R, E2, A>
828
- } = core.mapError
667
+ <R, E, A, R2, E2, B>(
668
+ fx: Fx<R, E, A>,
669
+ f: (a: A) => Fx<R2, E2, B>,
670
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
671
+ ): Fx<R | R2 | Scope.Scope, E | E2, B>
672
+ } = dual(isDataFirstFx, core.switchMap)
829
673
 
830
674
  /**
831
- * Filter the Cause of an Fx.
832
- * @since 1.18.0
833
- * @category errors
675
+ * @since 1.20.0
834
676
  */
835
- export const filterErrorCause: {
836
- <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>
837
- <E>(f: (a: Cause.Cause<E>) => boolean): <R, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
838
- <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>
839
- <R, E, A>(fx: Fx<R, E, A>, f: (a: Cause.Cause<E>) => boolean): Fx<R, E, A>
840
- } = core.filterCause
677
+ export const switchMapEffect: {
678
+ <A, R2, E2, B>(
679
+ f: (a: A) => Effect.Effect<R2, E2, B>,
680
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
681
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, B>
682
+
683
+ <R, E, A, R2, E2, B>(
684
+ fx: Fx<R, E, A>,
685
+ f: (a: A) => Effect.Effect<R2, E2, B>,
686
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
687
+ ): Fx<R | R2 | Scope.Scope, E | E2, B>
688
+ } = dual(isDataFirstFx, core.switchMapEffect)
841
689
 
842
690
  /**
843
- * Filter and map the Cause of an Fx.
844
- * @since 1.18.0
845
- * @category errors
691
+ * @since 1.20.0
846
692
  */
847
- export const filterMapCause: {
848
- <E, E2>(f: (a: Cause.Cause<E>) => Option.Option<Cause.Cause<E2>>): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
849
- <R, E, A, E2>(fx: Fx<R, E, A>, f: (a: Cause.Cause<E>) => Option.Option<Cause.Cause<E2>>): Fx<R, E2, A>
850
- } = core.filterMapCause
693
+ export const exhaustMap: {
694
+ <A, R2, E2, B>(
695
+ f: (a: A) => Fx<R2, E2, B>,
696
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
697
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, B>
698
+
699
+ <R, E, A, R2, E2, B>(
700
+ fx: Fx<R, E, A>,
701
+ f: (a: A) => Fx<R2, E2, B>,
702
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
703
+ ): Fx<R | R2 | Scope.Scope, E | E2, B>
704
+ } = dual(isDataFirstFx, core.exhaustMap)
851
705
 
852
706
  /**
853
- * Filter the Error of an Fx.
854
- * @since 1.18.0
855
- * @category errors
707
+ * @since 1.20.0
856
708
  */
857
- export const filterError: {
858
- <E, E2 extends E>(f: (a: E) => a is E2): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
859
- <E>(f: (a: E) => boolean): <R, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
860
- <R, E, E2 extends E, A>(fx: Fx<R, E, A>, f: (a: E) => a is E2): Fx<R, E2, A>
861
- <R, E, A>(fx: Fx<R, E, A>, f: (a: E) => boolean): Fx<R, E, A>
862
- } = core.filterError
709
+ export const exhaustMapEffect: {
710
+ <A, R2, E2, B>(
711
+ f: (a: A) => Effect.Effect<R2, E2, B>,
712
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
713
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, B>
714
+
715
+ <R, E, A, R2, E2, B>(
716
+ fx: Fx<R, E, A>,
717
+ f: (a: A) => Effect.Effect<R2, E2, B>,
718
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
719
+ ): Fx<R | R2 | Scope.Scope, E | E2, B>
720
+ } = dual(isDataFirstFx, core.exhaustMapEffect)
863
721
 
864
722
  /**
865
- * Filter and map the error of an Fx.
866
- * @since 1.18.0
867
- * @category errors
723
+ * @since 1.20.0
868
724
  */
869
- export const filterMapError: {
870
- <E, E2>(f: (a: E) => Option.Option<E2>): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
871
- <R, E, A, E2>(fx: Fx<R, E, A>, f: (a: E) => Option.Option<E2>): Fx<R, E2, A>
872
- } = core.filterMapError
725
+ export const exhaustMapLatest: {
726
+ <A, R2, E2, B>(
727
+ f: (a: A) => Fx<R2, E2, B>,
728
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
729
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, B>
730
+
731
+ <R, E, A, R2, E2, B>(
732
+ fx: Fx<R, E, A>,
733
+ f: (a: A) => Fx<R2, E2, B>,
734
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
735
+ ): Fx<R | R2 | Scope.Scope, E | E2, B>
736
+ } = dual(isDataFirstFx, core.exhaustMapLatest)
873
737
 
874
738
  /**
875
- * Filter and map the error of an Fx using an Effect.
876
- * @since 1.18.0
877
- * @category errors
739
+ * @since 1.20.0
878
740
  */
879
- export const filterMapErrorEffect: {
880
- <E, R2, E2, B>(f: (e: E) => Effect.Effect<R2, E2, Option.Option<B>>): <R, A>(fx: Fx<R, E, A>) => Fx<R2 | R, E2 | B, A>
881
- <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>
882
- } = core.filterMapErrorEffect
741
+ export const exhaustMapLatestEffect: {
742
+ <A, R2, E2, B>(
743
+ f: (a: A) => Effect.Effect<R2, E2, B>,
744
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
745
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, B>
746
+
747
+ <R, E, A, R2, E2, B>(
748
+ fx: Fx<R, E, A>,
749
+ f: (a: A) => Effect.Effect<R2, E2, B>,
750
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
751
+ ): Fx<R | R2 | Scope.Scope, E | E2, B>
752
+ } = dual(isDataFirstFx, core.exhaustMapLatestEffect)
883
753
 
884
754
  /**
885
- * Map the success value of an Fx to another Fx, flattening the result
886
- * with the provided FlattenStrategy.
887
- * @since 1.18.0
888
- * @category flattening
755
+ * @since 1.20.0
889
756
  */
890
- export const flatMapWithStrategy: {
757
+ export const flatMapConcurrently: {
891
758
  <A, R2, E2, B>(
892
- f: (a: A) => FxInput<R2, E2, B>,
893
- strategy: FlattenStrategy
894
- ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
759
+ f: (a: A) => Fx<R2, E2, B>,
760
+ capacity: number,
761
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
762
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, B>
763
+
895
764
  <R, E, A, R2, E2, B>(
896
765
  fx: Fx<R, E, A>,
897
- f: (a: A) => FxInput<R2, E2, B>,
898
- strategy: FlattenStrategy
899
- ): Fx<R | R2, E | E2, B>
900
- } = dual(3, core.flatMapWithStrategy)
766
+ f: (a: A) => Fx<R2, E2, B>,
767
+ capacity: number,
768
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
769
+ ): Fx<R | R2 | Scope.Scope, E | E2, B>
770
+ } = dual(isDataFirstFx, core.flatMapConcurrently)
901
771
 
902
772
  /**
903
- * Map the success value of an Fx to another Fx, switching to the latest
904
- * Fx emitted and interrupting the previous.
905
- * @since 1.18.0
906
- * @category flattening
773
+ * @since 1.20.0
907
774
  */
908
- export const switchMap: {
909
- <A, R2 = never, E2 = never, B = never>(
910
- f: (a: A) => FxInput<R2, E2, B>
911
- ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
912
- <R, E, A, R2 = never, E2 = never, B = never>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B>
913
- } = core.switchMap
775
+ export const flatMapConcurrentlyEffect: {
776
+ <A, R2, E2, B>(
777
+ f: (a: A) => Effect.Effect<R2, E2, B>,
778
+ capacity: number,
779
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
780
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, B>
781
+
782
+ <R, E, A, R2, E2, B>(
783
+ fx: Fx<R, E, A>,
784
+ f: (a: A) => Effect.Effect<R2, E2, B>,
785
+ capacity: number,
786
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
787
+ ): Fx<R | R2 | Scope.Scope, E | E2, B>
788
+ } = dual(isDataFirstFx, core.flatMapConcurrentlyEffect)
914
789
 
915
790
  /**
916
- * Map the success value of an Fx to another Fx, switching to the latest
917
- * Fx emitted and interrupting the previous.
918
- * @since 1.18.0
919
- * @category flattening
791
+ * @since 1.20.0
920
792
  */
921
- export const switchLatest: {
922
- <R, E, R2, E2, B>(fx: Fx<R, E, FxInput<R2, E2, B>>): Fx<R | R2, E | E2, B>
923
- } = core.switchMap((x) => x)
793
+ export const concatMap: {
794
+ <A, R2, E2, B>(
795
+ f: (a: A) => Fx<R2, E2, B>,
796
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
797
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<Scope.Scope | R | R2, E | E2, B>
798
+ <R, E, A, R2, E2, B>(
799
+ fx: Fx<R, E, A>,
800
+ f: (a: A) => Fx<R2, E2, B>,
801
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
802
+ ): Fx<Scope.Scope | R | R2, E | E2, B>
803
+ } = dual(isDataFirstFx, core.concatMap)
924
804
 
925
805
  /**
926
- * Map the success value of an Fx to another Fx, prefering the first
927
- * Fx emitted and dropping any subsequent Fx until it has completed.
928
- * @since 1.18.0
929
- * @category flattening
806
+ * @since 1.20.0
930
807
  */
931
- export const exhaustMap: {
932
- <A, R2 = never, E2 = never, B = never>(
933
- f: (a: A) => FxInput<R2, E2, B>
934
- ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
935
- <R, E, A, R2 = never, E2 = never, B = never>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B>
936
- } = core.exhaustMap
808
+ export const fromFxEffect: <R, E, R2, E2, B>(effect: Effect.Effect<R, E, Fx<R2, E2, B>>) => Fx<R | R2, E | E2, B> =
809
+ core.fromFxEffect
937
810
 
938
811
  /**
939
- * Flatten a nested Fx, prefering the first
940
- * Fx emitted and dropping any subsequent Fx until it has completed.
941
- * @since 1.18.0
942
- * @category flattening
812
+ * @since 1.20.0
943
813
  */
944
- export const exhaust: <R, E, R2, E2, A>(fx: Fx<R, E, Fx<R2, E2, A>>) => Fx<R | R2, E | E2, A> = core.exhaust
814
+ export const continueWith: {
815
+ <R2, E2, B>(f: () => Fx<R2, E2, B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A | B>
816
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: () => Fx<R2, E2, B>): Fx<R | R2, E | E2, A | B>
817
+ } = dual(2, core.continueWith)
945
818
 
946
819
  /**
947
- * Map the success value of an Fx to another Fx, prefering the first
948
- * until completion, and then running the last emitted Fx if they are not
949
- * the same Fx.
950
- *
951
- * @since 1.18.0
952
- * @category flattening
820
+ * @since 1.20.0
953
821
  */
954
- export const exhaustMapLatest: {
955
- <A, R2 = never, E2 = never, B = never>(
956
- f: (a: A) => FxInput<R2, E2, B>
957
- ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
958
- <R, E, A, R2 = never, E2 = never, B = never>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B>
959
- } = core.exhaustMapLatest
822
+ export const orElseCause: {
823
+ <E, R2, E2, B>(f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
824
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>): Fx<R | R2, E2, A | B>
825
+ } = dual(2, core.orElseCause)
960
826
 
961
827
  /**
962
- * Flatten a nested Fx, prefering the first until completion, and then running the last emitted Fx if they are not
963
- * the same Fx.
964
- *
965
- * @since 1.18.0
966
- * @category flattening
828
+ * @since 1.20.0
967
829
  */
968
- export const exhaustLatest: <R, E, R2, E2, A>(fx: Fx<R, E, Fx<R2, E2, A>>) => Fx<R | R2, E | E2, A> = core.exhaustLatest
830
+ export const orElse: {
831
+ <E, R2, E2, B>(f: (error: E) => Fx<R2, E2, B>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
832
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (error: E) => Fx<R2, E2, B>): Fx<R | R2, E2, A | B>
833
+ } = dual(2, core.orElse)
969
834
 
970
835
  /**
971
- * Map the success value of an Fx to another Fx with unbounded concurrency.
972
- *
973
- * @since 1.18.0
974
- * @category flattening
836
+ * @since 1.20.0
975
837
  */
976
- export const flatMap: {
977
- <A, R2 = never, E2 = never, B = never>(
978
- f: (a: A) => FxInput<R2, E2, B>
979
- ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
980
- <R, E, A, R2 = never, E2 = never, B = never>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B>
981
- } = core.flatMap
838
+ export const suspend: <R, E, A>(f: () => Fx<R, E, A>) => Fx<R, E, A> = core.suspend
982
839
 
983
840
  /**
984
- * Map the success value of an Fx to another Fx with unbounded concurrency.
985
- *
986
- * @since 1.18.0
987
- * @category flattening
841
+ * @since 1.20.0
988
842
  */
989
- export const flatten: <R, E, R2, E2, A>(fx: Fx<R, E, Fx<R2, E2, A>>) => Fx<R | R2, E | E2, A> = core.flatten
843
+ export const mergeWithStrategy: {
844
+ (strategy: MergeStrategy): <FX extends ReadonlyArray<Fx<any, any, any>>>(
845
+ fx: FX
846
+ ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>>
847
+
848
+ <const FX extends ReadonlyArray<Fx<any, any, any>>>(
849
+ fx: FX,
850
+ stategy: MergeStrategy
851
+ ): Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>>
852
+ } = dual(2, core.mergeWithStrategy)
990
853
 
991
854
  /**
992
- * Map the success value of an Fx to another Fx with the specified concurrency.
993
- *
994
- * @since 1.18.0
995
- * @category flattening
855
+ * @since 1.20.0
996
856
  */
997
- export const flatMapConcurrently: {
998
- <A, R2 = never, E2 = never, B = never>(
999
- f: (a: A) => FxInput<R2, E2, B>,
1000
- concurrency: number
1001
- ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
1002
- <R, E, A, R2 = never, E2 = never, B = never>(
1003
- fx: Fx<R, E, A>,
1004
- f: (a: A) => FxInput<R2, E2, B>,
1005
- concurrency: number
1006
- ): Fx<R | R2, E | E2, B>
1007
- } = core.flatMapConcurrently
857
+ export const merge: {
858
+ <R2, E2, B>(other: Fx<R2, E2, B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A | B>
859
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, other: Fx<R2, E2, B>): Fx<R | R2, E | E2, A | B>
860
+ } = dual(
861
+ 2,
862
+ core.merge
863
+ )
1008
864
 
1009
865
  /**
1010
- * Map the success value of an Fx to another Fx one at a time.
1011
- *
1012
- * @since 1.18.0
1013
- * @category flattening
866
+ * @since 1.20.0
1014
867
  */
1015
- export const concatMap: {
1016
- <A, R2 = never, E2 = never, B = never>(
1017
- f: (a: A) => FxInput<R2, E2, B>
1018
- ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B>
1019
- <R, E, A, R2 = never, E2 = never, B = never>(fx: Fx<R, E, A>, f: (a: A) => FxInput<R2, E2, B>): Fx<R | R2, E | E2, B>
1020
- } = core.concatMap
868
+ export const mergeAll: <FX extends ReadonlyArray<Fx<any, any, any>>>(
869
+ fx: FX
870
+ ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>> = core.mergeAll
1021
871
 
1022
872
  /**
1023
- * Skip and take a number of values from an Fx.
1024
- *
1025
- * @since 1.18.0
1026
- * @category slicing
873
+ * @since 1.20.0
1027
874
  */
1028
- export const slice: {
1029
- (skip: number, take: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1030
- <R, E, A>(fx: Fx<R, E, A>, skip: number, take: number): Fx<R, E, A>
1031
- } = core.slice
875
+ export const mergeOrdered: <FX extends ReadonlyArray<Fx<any, any, any>>>(
876
+ fx: FX
877
+ ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>> = core.mergeOrdered
1032
878
 
1033
879
  /**
1034
- * Take a number of values from an Fx.
1035
- *
1036
- * @since 1.18.0
1037
- * @category slicing
880
+ * @since 1.20.0
1038
881
  */
1039
- export const take: {
1040
- (n: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1041
- <R, E, A>(fx: Fx<R, E, A>, n: number): Fx<R, E, A>
1042
- } = core.take
882
+ export const mergeOrderedConcurrently: <FX extends ReadonlyArray<Fx<any, any, any>>>(
883
+ fx: FX,
884
+ concurrency: number
885
+ ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>> = core.mergeOrderedConcurrently
1043
886
 
1044
887
  /**
1045
- * Drop a number of values from an Fx.
1046
- *
1047
- * @since 1.18.0
1048
- * @category slicing
888
+ * @since 1.20.0
1049
889
  */
1050
- export const drop: {
1051
- (n: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1052
- <R, E, A>(fx: Fx<R, E, A>, n: number): Fx<R, E, A>
1053
- } = core.drop
890
+ export const mergeSwitch: <FX extends ReadonlyArray<Fx<any, any, any>>>(
891
+ fx: FX
892
+ ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>> = core.mergeSwitch
1054
893
 
1055
894
  /**
1056
- * Take values from an Fx while the predicate returns true.
1057
- *
1058
- * @since 1.18.0
1059
- * @category slicing
895
+ * @since 1.20.0
1060
896
  */
1061
897
  export const takeWhile: {
1062
- <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1063
- <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1064
- } = core.takeWhile
898
+ <A, B extends A>(f: Predicate.Refinement<A, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
899
+ <A>(f: Predicate.Predicate<A>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
900
+ <R, E, A, B extends A>(fx: Fx<R, E, A>, f: Predicate.Refinement<A, B>): Fx<R, E, B>
901
+ <R, E, A>(fx: Fx<R, E, A>, f: Predicate.Predicate<A>): Fx<R, E, A>
902
+ } = dual(2, core.takeWhile)
1065
903
 
1066
904
  /**
1067
- * Take values from an Fx until the predicate returns true.
1068
- *
1069
- * @since 1.18.0
1070
- * @category slicing
905
+ * @since 1.20.0
1071
906
  */
1072
907
  export const takeUntil: {
1073
- <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1074
- <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1075
- } = core.takeUntil
908
+ <A, B extends A>(f: Predicate.Refinement<A, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, Exclude<A, B>>
909
+ <A>(f: Predicate.Predicate<A>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
910
+ <R, E, A, B extends A>(fx: Fx<R, E, A>, f: Predicate.Refinement<A, B>): Fx<R, E, Exclude<A, B>>
911
+ <R, E, A>(fx: Fx<R, E, A>, f: Predicate.Predicate<A>): Fx<R, E, A>
912
+ } = dual(2, core.takeUntil)
1076
913
 
1077
914
  /**
1078
- * Drop values from an Fx while the predicate returns true.
1079
- *
1080
- * @since 1.18.0
1081
- * @category slicing
915
+ * @since 1.20.0
1082
916
  */
1083
917
  export const dropWhile: {
1084
- <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1085
- <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1086
- } = core.dropWhile
918
+ <A, B extends A>(f: Predicate.Refinement<A, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, Exclude<A, B>>
919
+ <A>(f: Predicate.Predicate<A>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
920
+ <R, E, A, B extends A>(fx: Fx<R, E, A>, f: Predicate.Refinement<A, B>): Fx<R, E, Exclude<A, B>>
921
+ <R, E, A>(fx: Fx<R, E, A>, f: Predicate.Predicate<A>): Fx<R, E, A>
922
+ } = dual(2, core.dropWhile)
1087
923
 
1088
924
  /**
1089
- * Drop values from an Fx until the predicate returns true.
1090
- *
1091
- * @since 1.18.0
1092
- * @category slicing
925
+ * @since 1.20.0
1093
926
  */
1094
927
  export const dropUntil: {
1095
- <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1096
- <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1097
- } = core.dropUntil
928
+ <A, B extends A>(f: Predicate.Refinement<A, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A | B>
929
+ <A>(f: Predicate.Predicate<A>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
930
+ <R, E, A, B extends A>(fx: Fx<R, E, A>, f: Predicate.Refinement<A, B>): Fx<R, E, A | B>
931
+ <R, E, A>(fx: Fx<R, E, A>, f: Predicate.Predicate<A>): Fx<R, E, A>
932
+ } = dual(2, core.dropUntil)
1098
933
 
1099
934
  /**
1100
- * Drop values from an Fx after the predicate returns true.
1101
- *
1102
- * @since 1.18.0
1103
- * @category slicing
935
+ * @since 1.20.0
1104
936
  */
1105
937
  export const dropAfter: {
1106
- <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1107
- <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1108
- } = core.dropAfter
938
+ <A, B extends A>(f: Predicate.Refinement<A, B>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, Exclude<A, B>>
939
+ <A>(f: Predicate.Predicate<A>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
940
+ <R, E, A, B extends A>(fx: Fx<R, E, A>, f: Predicate.Refinement<A, B>): Fx<R, E, Exclude<A, B>>
941
+ <R, E, A>(fx: Fx<R, E, A>, f: Predicate.Predicate<A>): Fx<R, E, A>
942
+ } = dual(2, core.dropAfter)
1109
943
 
1110
944
  /**
1111
- * Concatenate an Fx after the successful completion of another Fx
1112
- *
1113
- * @since 1.18.0
1114
- * @category combinators
945
+ * @since 1.20.0
1115
946
  */
1116
- export const continueWith: {
1117
- <R2, E2, B>(f: () => Fx<R2, E2, B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A | B>
1118
- <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: () => Fx<R2, E2, B>): Fx<R | R2, E | E2, A | B>
1119
- } = core.continueWith
947
+ export const takeWhileEffect: {
948
+ <A, R2, E2>(f: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
949
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, f: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
950
+ } = dual(2, core.takeWhileEffect)
1120
951
 
1121
952
  /**
1122
- * Concatenate an Fx after the failure of another Fx
1123
- *
1124
- * @since 1.18.0
1125
- * @category combinators
953
+ * @since 1.20.0
1126
954
  */
1127
- export const orElse: {
1128
- <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>
1129
- <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>
1130
- } = core.recoverWith
955
+ export const takeUntiEffect: {
956
+ <A, R2, E2>(f: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
957
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, f: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
958
+ } = dual(2, core.takeUntilEffect)
1131
959
 
1132
960
  /**
1133
- * Map the success value of an Fx to an Effect, doesn't fork any fibers like flatMap* etc.
1134
- *
1135
- * @since 1.18.0
1136
- * @category combinators
961
+ * @since 1.20.0
1137
962
  */
1138
- export const mapEffect: {
1139
- <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>
1140
- <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>
1141
- } = core.mapEffect
963
+ export const dropWhileEffect: {
964
+ <A, R2, E2>(f: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
965
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, f: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
966
+ } = dual(2, core.dropWhileEffect)
1142
967
 
1143
968
  /**
1144
- * Perform an Effect for each value emitted by an Fx, not affecting the output of the Fx.
1145
- *
1146
- * @since 1.18.0
1147
- * @category combinators
969
+ * @since 1.20.0
1148
970
  */
1149
- export const tap: {
1150
- <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>
1151
- <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>
1152
- } = core.tap
971
+ export const dropUntilEffect: {
972
+ <A, R2, E2>(f: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
973
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, f: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
974
+ } = dual(2, core.dropUntilEffect)
1153
975
 
1154
976
  /**
1155
- * Filter the success value of an Fx with an Effect.
1156
- *
1157
- * @since 1.18.0
1158
- * @category combinators
977
+ * @since 1.20.0
1159
978
  */
1160
- export const filterEffect: {
1161
- <A, R2, E2>(predicate: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1162
- <R, E, A, R2, E2>(fx: Fx<R, E, A>, predicate: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
1163
- } = core.filterEffect
979
+ export const dropAfterEffect: {
980
+ <A, R2, E2>(f: (a: A) => Effect.Effect<R2, E2, boolean>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
981
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, f: (a: A) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E | E2, A>
982
+ } = dual(2, core.dropAfterEffect)
1164
983
 
1165
984
  /**
1166
- * Filter and map the success value of an Fx with an Effect.
1167
- *
1168
- * @since 1.18.0
1169
- * @category combinators
985
+ * @since 1.20.0
1170
986
  */
1171
- export const filterMapEffect: {
1172
- <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>
1173
- <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>
1174
- } = core.filterMapEffect
987
+ export const during: {
988
+ <R2, E2, A, R3, E3, B>(
989
+ window: Fx<R2, E2, Fx<R3, E3, B>>
990
+ ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, A>
991
+ <R, E, A, R2, E2, R3, E3, B>(
992
+ fx: Fx<R, E, A>,
993
+ window: Fx<R2, E2, Fx<R3, E3, B>>
994
+ ): Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, A>
995
+ } = dual(2, core.during)
1175
996
 
1176
997
  /**
1177
- * Apply a function to the constructed Effect that represents the running Fx.
1178
- *
1179
- * @since 1.18.0
1180
- * @category combinators
998
+ * @since 1.20.0
999
+ */
1000
+ export const since: {
1001
+ <R2, E2, B>(window: Fx<R2, E2, B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, A>
1002
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, window: Fx<R2, E2, B>): Fx<R | R2 | Scope.Scope, E | E2, A>
1003
+ } = dual(2, core.since)
1004
+
1005
+ /**
1006
+ * @since 1.20.0
1007
+ */
1008
+ export const until: {
1009
+ <R2, E2, B>(window: Fx<R2, E2, B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E | E2, A>
1010
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, window: Fx<R2, E2, B>): Fx<R | R2 | Scope.Scope, E | E2, A>
1011
+ } = dual(2, core.until)
1012
+
1013
+ /**
1014
+ * @since 1.20.0
1181
1015
  */
1182
1016
  export const middleware: {
1017
+ <R, R3, E, A>(
1018
+ effect: (effect: Effect.Effect<R, never, unknown>) => Effect.Effect<R3, never, unknown>,
1019
+ sink?: ((sink: Sink.Sink<never, E, A>) => Sink.Sink<R, E, A>) | undefined
1020
+ ): <E, A>(fx: Fx<R, E, A>) => Fx<R3, E, A>
1021
+
1022
+ <R, E, A, R3>(
1023
+ fx: Fx<R, E, A>,
1024
+ effect: (effect: Effect.Effect<R, never, unknown>) => Effect.Effect<R3, never, unknown>,
1025
+ sink?: ((sink: Sink.Sink<never, E, A>) => Sink.Sink<R, E, A>) | undefined
1026
+ ): Fx<R3, E, A>
1027
+ } = dual(isDataFirstFx, core.middleware)
1028
+
1029
+ /**
1030
+ * @since 1.20.0
1031
+ */
1032
+ export const onExit: {
1033
+ <R2>(
1034
+ f: (exit: Exit.Exit<never, unknown>) => Effect.Effect<R2, never, unknown>
1035
+ ): <R, E, A>(fx: Fx<R, E, A>) => Fx<R2, E, A>
1036
+
1183
1037
  <R, E, A, R2>(
1184
- f: (effect: Effect.Effect<R, never, unknown>) => Effect.Effect<R2, never, unknown>,
1185
- g?: (sink: Sink.Sink<E, A>) => Sink.Sink<E, A>
1186
- ): (fx: Fx<R, E, A>) => Fx<R2, E, A>
1038
+ fx: Fx<R, E, A>,
1039
+ f: (exit: Exit.Exit<never, unknown>) => Effect.Effect<R2, never, unknown>
1040
+ ): Fx<R | R2, E, A>
1041
+ } = dual(2, core.onExit)
1042
+
1043
+ /**
1044
+ * @since 1.20.0
1045
+ */
1046
+ export const onInterrupt: {
1047
+ <R2>(
1048
+ f: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<R2, never, unknown>
1049
+ ): <R, E, A>(fx: Fx<R, E, A>) => Fx<R2, E, A>
1187
1050
  <R, E, A, R2>(
1188
1051
  fx: Fx<R, E, A>,
1189
- f: (effect: Effect.Effect<R, never, unknown>) => Effect.Effect<R2, never, unknown>,
1190
- g?: (sink: Sink.Sink<E, A>) => Sink.Sink<E, A>
1191
- ): Fx<R2, E, A>
1192
- } = core.middleware
1052
+ f: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<R2, never, unknown>
1053
+ ): Fx<R | R2, E, A>
1054
+ } = dual(2, core.onInterrupt)
1193
1055
 
1194
1056
  /**
1195
- * Accumulate a value over the success values of an Fx and atomically produce derived value.
1196
- *
1197
- * @since 1.18.0
1198
- * @category combinators
1057
+ * @since 1.20.0
1199
1058
  */
1200
- export const loop: {
1201
- <A, B, C>(seed: B, f: (acc: B, a: A) => readonly [C, B]): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, C>
1202
- <R, E, A, B, C>(fx: Fx<R, E, A>, seed: B, f: (acc: B, a: A) => readonly [C, B]): Fx<R, E, C>
1203
- } = core.loop
1059
+ export const onError: {
1060
+ <R2>(f: (cause: Cause.Cause<never>) => Effect.Effect<R2, never, unknown>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R2, E, A>
1061
+ <R, E, A, R2>(fx: Fx<R, E, A>, f: (cause: Cause.Cause<never>) => Effect.Effect<R2, never, unknown>): Fx<R | R2, E, A>
1062
+ } = dual(2, core.onError)
1204
1063
 
1205
1064
  /**
1206
- * Emit values with their previously emitted values when possible.
1207
- *
1208
- * @since 1.18.0
1209
- * @category combinators
1065
+ * @since 1.20.0
1210
1066
  */
1211
- export const withPrevious: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, readonly [previous: Option.Option<A>, current: A]> = <
1212
- R,
1213
- E,
1214
- A
1215
- >(fx: Fx<R, E, A>): Fx<R, E, readonly [previous: Option.Option<A>, current: A]> =>
1216
- loop(
1217
- fx,
1218
- Option.none<A>(),
1219
- (previous, current) => [[previous, current] as const, Option.some(current)]
1220
- )
1067
+ export const scoped: <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, Scope.Scope>, E, A> = core.scoped
1221
1068
 
1222
1069
  /**
1223
- * Accumulate a value over the success values of an Fx and atomically produce derived value
1224
- * useing an Effect. A SynchronizedRef is utilized to ensure ordering of events.
1225
- *
1226
- * @since 1.18.0
1227
- * @category combinators
1070
+ * @since 1.20.0
1228
1071
  */
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>
1072
+ export const annotateLogs: {
1073
+ (key: string | Record<string, unknown>, value?: unknown): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1074
+ <R, E, A>(fx: Fx<R, E, A>, key: string | Record<string, unknown>, value?: unknown): Fx<R, E, A>
1075
+ } = dual(isDataFirstFx, core.annotateLogs)
1234
1076
 
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
- } = core.loopEffect
1077
+ /**
1078
+ * @since 1.20.0
1079
+ */
1080
+ export const annotateSpans: {
1081
+ (key: string | Record<string, unknown>, value?: unknown): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1082
+ <R, E, A>(fx: Fx<R, E, A>, key: string | Record<string, unknown>, value?: unknown): Fx<R, E, A>
1083
+ } = dual(isDataFirstFx, core.annotateSpans)
1241
1084
 
1242
1085
  /**
1243
- * Prepends a value to the beginning of an Fx.
1244
- *
1245
- * @since 1.18.0
1246
- * @category combinators
1086
+ * @since 1.20.0
1247
1087
  */
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
- } = core.startWith
1088
+ export const interruptible: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A> = core.interruptible
1252
1089
 
1253
1090
  /**
1254
- * Appends a value to the end of an Fx.
1255
- *
1256
- * @since 1.18.0
1257
- * @category combinators
1091
+ * @since 1.20.0
1258
1092
  */
1259
- export const endWith: {
1260
- <B>(value: B): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A | B>
1261
- <R, E, A, B>(fx: Fx<R, E, A>, value: B): Fx<R, E, A | B>
1262
- } = core.endWith
1093
+ export const uninterruptible: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A> = core.uninterruptible
1263
1094
 
1264
1095
  /**
1265
- * Run a reducer over the success values of an Fx.
1266
- *
1267
- * @since 1.18.0
1268
- * @category combinators
1096
+ * @since 1.20.0
1269
1097
  */
1270
- export const scan: {
1271
- <A, B>(seed: B, f: (acc: B, a: A) => B): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
1272
- <R, E, A, B>(fx: Fx<R, E, A>, seed: B, f: (acc: B, a: A) => B): Fx<R, E, B>
1273
- } = core.scan
1098
+ export const locally: {
1099
+ <A>(self: FiberRef.FiberRef<A>, value: A): <R, E, B>(fx: Fx<R, E, B>) => Fx<R, E, B>
1100
+ <R, E, B, A>(use: Fx<R, E, B>, self: FiberRef.FiberRef<A>, value: A): Fx<R, E, B>
1101
+ } = dual(3, core.locally)
1274
1102
 
1275
1103
  /**
1276
- * Run an Effect-ful reducer over the success values of an Fx.
1277
- *
1278
- * @since 1.18.0
1279
- * @category combinators
1104
+ * @since 1.20.0
1280
1105
  */
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
- } = core.scanEffect
1106
+ export const locallyWith: {
1107
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A): <R, E, B>(fx: Fx<R, E, B>) => Fx<R, E, B>
1108
+ <R, E, B, A>(use: Fx<R, E, B>, self: FiberRef.FiberRef<A>, f: (a: A) => A): Fx<R, E, B>
1109
+ } = dual(3, core.locallyWith)
1288
1110
 
1289
1111
  /**
1290
- * Map the failures of an Fx to another Fx, flattening the result
1291
- * with the provided FlattenStrategy.
1292
- * @since 1.18.0
1293
- * @category flattening
1112
+ * @since 1.20.0
1294
1113
  */
1295
- export const flatMapCauseWithStrategy: {
1296
- <E, R2 = never, E2 = never, B = never>(
1297
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>,
1298
- strategy: FlattenStrategy
1299
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1300
- <R, E, A, R2 = never, E2 = never, B = never>(
1301
- fx: Fx<R, E, A>,
1302
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>,
1303
- strategy: FlattenStrategy
1304
- ): Fx<R | R2, E2, A | B>
1305
- } = core.flatMapCauseWithStrategy
1114
+ export const withTracerTiming: {
1115
+ (enabled: boolean): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1116
+ <R, E, A>(fx: Fx<R, E, A>, enabled: boolean): Fx<R, E, A>
1117
+ } = dual(2, core.withTracerTiming)
1306
1118
 
1307
1119
  /**
1308
- * Map the failures of an Fx to another Fx, flattening the result
1309
- * with the provided FlattenStrategy.
1310
- * @since 1.18.0
1311
- * @category flattening
1120
+ * @since 1.20.0
1312
1121
  */
1313
- export const flatMapErrorWithStrategy: {
1314
- <E, R2 = never, E2 = never, B = never>(
1315
- f: (error: E) => FxInput<R2, E2, B>,
1316
- strategy: FlattenStrategy
1317
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R2 | R, E2, B | A>
1318
- <R, E, A, R2 = never, E2 = never, B = never>(
1319
- fx: Fx<R, E, A>,
1320
- f: (error: E) => FxInput<R2, E2, B>,
1321
- strategy: FlattenStrategy
1322
- ): Fx<R | R2, E2, A | B>
1323
- } = core.flatMapErrorWithStrategy
1122
+ export const withConcurrency: {
1123
+ (concurrency: number | "unbounded"): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1124
+ <R, E, A>(fx: Fx<R, E, A>, concurrency: number | "unbounded"): Fx<R, E, A>
1125
+ } = dual(2, core.withConcurrency)
1324
1126
 
1325
1127
  /**
1326
- * Map the failures of an Fx to another Fx, flattening the result with unbounded concurrency.
1327
- *
1328
- * @since 1.18.0
1329
- * @category flattening
1128
+ * @since 1.20.0
1330
1129
  */
1331
- export const flatMapCause: {
1332
- <E, R2 = never, E2 = never, B = never>(
1333
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1334
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1335
- <R, E, A, R2 = never, E2 = never, B = never>(
1336
- fx: Fx<R, E, A>,
1337
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1338
- ): Fx<R | R2, E2, A | B>
1339
- } = core.flatMapCause
1130
+ export const withConfigProvider: {
1131
+ (configProvider: ConfigProvider.ConfigProvider): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1132
+ <R, E, A>(fx: Fx<R, E, A>, configProvider: ConfigProvider.ConfigProvider): Fx<R, E, A>
1133
+ } = dual(2, core.withConfigProvider)
1340
1134
 
1341
1135
  /**
1342
- * Map the failures of an Fx to another Fx, flattening the result with unbounded concurrency.
1343
- *
1344
- * @since 1.18.0
1345
- * @category flattening
1136
+ * @since 1.20.0
1346
1137
  */
1347
- export const flatMapError: {
1348
- <E, R2 = never, E2 = never, B = never>(
1349
- f: (error: E) => FxInput<R2, E2, B>
1350
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1351
- <R, E, A, R2 = never, E2 = never, B = never>(
1352
- fx: Fx<R, E, A>,
1353
- f: (error: E) => FxInput<R2, E2, B>
1354
- ): Fx<R | R2, E2, A | B>
1355
- } = core.flatMapError
1138
+ export const withLogSpan: {
1139
+ (span: string): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1140
+ <R, E, A>(fx: Fx<R, E, A>, span: string): Fx<R, E, A>
1141
+ } = dual(2, core.withLogSpan)
1356
1142
 
1357
1143
  /**
1358
- * Map the failures of an Fx to another Fx with the specified concurrency.
1359
- *
1360
- * @since 1.18.0
1361
- * @category flattening
1144
+ * @since 1.20.0
1362
1145
  */
1363
- export const flatMapCauseConcurrently: {
1364
- <E, R2 = never, E2 = never, B = never>(
1365
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>,
1366
- concurrency: number
1367
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1368
- <R, E, A, R2 = never, E2 = never, B = never>(
1369
- fx: Fx<R, E, A>,
1370
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>,
1371
- concurrency: number
1372
- ): Fx<R | R2, E2, A | B>
1373
- } = core.flatMapCauseConcurrently
1146
+ export const withMaxOpsBeforeYield: {
1147
+ (maxOps: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1148
+ <R, E, A>(fx: Fx<R, E, A>, maxOps: number): Fx<R, E, A>
1149
+ } = dual(2, core.withMaxOpsBeforeYield)
1374
1150
 
1375
1151
  /**
1376
- * Map the failures of an Fx to another Fx with the specified concurrency.
1377
- *
1378
- * @since 1.18.0
1379
- * @category flattening
1152
+ * @since 1.20.0
1380
1153
  */
1381
- export const flatMapErrorConcurrently: {
1382
- <E, R2 = never, E2 = never, B = never>(
1383
- f: (error: E) => FxInput<R2, E2, B>,
1384
- concurrency: number
1385
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R2 | R, E2, B | A>
1386
- <R, E, A, R2 = never, E2 = never, B = never>(
1387
- fx: Fx<R, E, A>,
1388
- f: (error: E) => FxInput<R2, E2, B>,
1389
- concurrency: number
1390
- ): Fx<R | R2, E2, A | B>
1391
- } = core.flatMapErrorConcurrently
1154
+ export const withParentSpan: {
1155
+ (parentSpan: Tracer.ParentSpan): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1156
+ <R, E, A>(fx: Fx<R, E, A>, parentSpan: Tracer.ParentSpan): Fx<R, E, A>
1157
+ } = dual(2, core.withParentSpan)
1392
1158
 
1393
1159
  /**
1394
- * Map the failures of an Fx to another Fx, switching to the latest
1395
- * Fx emitted and interrupting the previous.
1396
- *
1397
- * @since 1.18.0
1398
- * @category flattening
1160
+ * @since 1.20.0
1399
1161
  */
1400
- export const switchMapCause: {
1401
- <E, R2 = never, E2 = never, B = never>(
1402
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1403
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1404
- <R, E, A, R2 = never, E2 = never, B = never>(
1405
- fx: Fx<R, E, A>,
1406
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1407
- ): Fx<R | R2, E2, A | B>
1408
- } = core.switchMapCause
1162
+ export const withRequestBatching: {
1163
+ (requestBatching: boolean): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1164
+ <R, E, A>(fx: Fx<R, E, A>, requestBatching: boolean): Fx<R, E, A>
1165
+ } = dual(2, core.withRequestBatching)
1409
1166
 
1410
1167
  /**
1411
- * Map the failures of an Fx to another Fx, switching to the latest
1412
- * Fx emitted and interrupting the previous.
1413
- *
1414
- * @since 1.18.0
1415
- * @category flattening
1168
+ * @since 1.20.0
1416
1169
  */
1417
- export const switchMapError: {
1418
- <E, R2 = never, E2 = never, B = never>(
1419
- f: (error: E) => FxInput<R2, E2, B>
1420
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R2 | R, E2, B | A>
1421
- <R, E, A, R2 = never, E2 = never, B = never>(
1422
- fx: Fx<R, E, A>,
1423
- f: (error: E) => FxInput<R2, E2, B>
1424
- ): Fx<R | R2, E2, A | B>
1425
- } = core.switchMapError
1170
+ export const withRequestCache: {
1171
+ (cache: Request.Cache): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1172
+ <R, E, A>(fx: Fx<R, E, A>, cache: Request.Cache): Fx<R, E, A>
1173
+ } = dual(2, core.withRequestCache)
1426
1174
 
1427
1175
  /**
1428
- * Map the failures of an Fx to another Fx, prefering the first
1429
- * Fx emitted and dropping any subsequent Fx until it has completed.
1430
- *
1431
- * @since 1.18.0
1432
- * @category flattening
1176
+ * @since 1.20.0
1433
1177
  */
1434
- export const exhaustMapCause: {
1435
- <E, R2 = never, E2 = never, B = never>(
1436
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1437
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1438
- <R, E, A, R2 = never, E2 = never, B = never>(
1439
- fx: Fx<R, E, A>,
1440
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1441
- ): Fx<R | R2, E2, A | B>
1442
- } = core.exhaustMapCause
1178
+ export const withRequestCaching: {
1179
+ (requestCaching: boolean): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1180
+ <R, E, A>(fx: Fx<R, E, A>, requestCaching: boolean): Fx<R, E, A>
1181
+ } = dual(2, core.withRequestCaching)
1443
1182
 
1444
1183
  /**
1445
- * Map the failures of an Fx to another Fx, prefering the first
1446
- * Fx emitted and dropping any subsequent Fx until it has completed.
1447
- *
1448
- * @since 1.18.0
1449
- * @category flattening
1184
+ * @since 1.20.0
1450
1185
  */
1451
- export const exhaustMapError: {
1452
- <E, R2 = never, E2 = never, B = never>(
1453
- f: (error: E) => FxInput<R2, E2, B>
1454
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R2 | R, E2, B | A>
1455
- <R, E, A, R2 = never, E2 = never, B = never>(
1456
- fx: Fx<R, E, A>,
1457
- f: (error: E) => FxInput<R2, E2, B>
1458
- ): Fx<R | R2, E2, A | B>
1459
- } = core.exhaustMapError
1186
+ export const withTracer: {
1187
+ (tracer: Tracer.Tracer): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1188
+ <R, E, A>(fx: Fx<R, E, A>, tracer: Tracer.Tracer): Fx<R, E, A>
1189
+ } = dual(2, core.withTracer)
1190
+
1191
+ /**
1192
+ * @since 1.20.0
1193
+ */
1194
+ export const acquireUseRelease: {
1195
+ <A, R2, E2, B, R3, E3, C>(
1196
+ use: (a: A) => Fx<R2, E2, B>,
1197
+ release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R3, E3, C>
1198
+ ): <R, E>(acquire: Effect.Effect<R, E, A>) => Fx<R | R2 | R3, E | E2 | E3, B>
1199
+ <R, E, A, R2, E2, B, R3, E3, C>(
1200
+ acquire: Effect.Effect<R, E, A>,
1201
+ use: (a: A) => Fx<R2, E2, B>,
1202
+ release: (a: A, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<R3, E3, C>
1203
+ ): Fx<R | R2 | R3, E | E2 | E3, B>
1204
+ } = dual(3, core.acquireUseRelease)
1460
1205
 
1461
1206
  /**
1462
- * Map the failures of an Fx to another Fx, prefering the first
1463
- * until completion, and then running the last emitted Fx if they are not
1464
- * the same Fx.
1465
- *
1466
- * @since 1.18.0
1467
- * @category flattening
1207
+ * @since 1.20.0
1468
1208
  */
1469
- export const exhaustMapLatestCause: {
1470
- <E, R2 = never, E2 = never, B = never>(
1471
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1472
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B>
1473
- <R, E, A, R2 = never, E2 = never, B = never>(
1474
- fx: Fx<R, E, A>,
1475
- f: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1476
- ): Fx<R | R2, E2, A | B>
1477
- } = core.exhaustMapLatestCause
1209
+ export const withSpan: {
1210
+ (name: string, options?: {
1211
+ readonly attributes?: Record<string, unknown>
1212
+ readonly links?: ReadonlyArray<Tracer.SpanLink>
1213
+ readonly parent?: Tracer.ParentSpan
1214
+ readonly root?: boolean
1215
+ readonly context?: Ctx.Context<never>
1216
+ }): <R, E, A>(self: Fx<R, E, A>) => Fx<R, E, A>
1217
+
1218
+ <R, E, A>(self: Fx<R, E, A>, name: string, options?: {
1219
+ readonly attributes?: Record<string, unknown>
1220
+ readonly links?: ReadonlyArray<Tracer.SpanLink>
1221
+ readonly parent?: Tracer.ParentSpan
1222
+ readonly root?: boolean
1223
+ readonly context?: Ctx.Context<never>
1224
+ }): Fx<R, E, A>
1225
+ } = dual(3, core.withSpan)
1478
1226
 
1479
1227
  /**
1480
- * Map the failures of an Fx to another Fx, prefering the first
1481
- * until completion, and then running the last emitted Fx if they are not
1482
- * the same Fx.
1483
- *
1484
- * @since 1.18.0
1485
- * @category flattening
1228
+ * @since 1.20.0
1486
1229
  */
1487
- export const exhaustMapLatestError: {
1488
- <E, R2 = never, E2 = never, B = never>(
1489
- f: (error: E) => FxInput<R2, E2, B>
1490
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R2 | R, E2, B | A>
1491
- <R, E, A, R2 = never, E2 = never, B = never>(
1492
- fx: Fx<R, E, A>,
1493
- f: (error: E) => FxInput<R2, E2, B>
1494
- ): Fx<R | R2, E2, A | B>
1495
- } = core.exhaustMapLatestError
1230
+ export const provideContext: {
1231
+ <R2>(context: Ctx.Context<R2>): <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, R2>, E, A>
1232
+ <R, E, A, R2>(fx: Fx<R, E, A>, context: Ctx.Context<R2>): Fx<Exclude<R, R2>, E, A>
1233
+ } = dual(2, core.provideContext)
1496
1234
 
1497
1235
  /**
1498
- * Map over the failures and successes of an Fx, flattening both using the same strategy.
1499
- *
1500
- * @since 1.18.0
1501
- * @category flattening
1236
+ * @since 1.20.0
1502
1237
  */
1503
- export const matchCauseWithStrategy: {
1504
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1505
- options: {
1506
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1507
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1508
- readonly strategy: FlattenStrategy
1509
- }
1510
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R2 | R, E2, B | A>
1511
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1512
- fx: Fx<R, E, A>,
1513
- options: {
1514
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1515
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1516
- readonly strategy: FlattenStrategy
1517
- }
1518
- ): Fx<R | R2, E2 | E3, B | C>
1519
- } = core.matchCauseWithStrategy
1238
+ export const provideLayer: {
1239
+ <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>
1240
+ <R, E, A, R2, E2, S>(fx: Fx<R, E, A>, layer: Layer.Layer<R2, E2, S>): Fx<R2 | Exclude<R, S>, E | E2, A>
1241
+ } = dual(2, core.provideLayer)
1520
1242
 
1521
1243
  /**
1522
- * Map over the failures and successes of an Fx, flattening both using the same strategy.
1523
- *
1524
- * @since 1.18.0
1525
- * @category flattening
1244
+ * @since 1.20.0
1526
1245
  */
1527
- export const matchErrorWithStrategy: {
1528
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1529
- options: {
1530
- readonly onFailure: (error: E) => FxInput<R2, E2, B>
1531
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1532
- readonly strategy: FlattenStrategy
1533
- }
1534
- ): <R, A>(fx: Fx<R, E, A>) => Fx<R2 | R, E2, B | A>
1535
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1536
- fx: Fx<R, E, A>,
1537
- options: {
1538
- readonly onFailure: (error: E) => FxInput<R2, E2, B>
1539
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1540
- readonly strategy: FlattenStrategy
1541
- }
1542
- ): Fx<R | R2, E2 | E3, B | C>
1543
- } = core.matchErrorWithStrategy
1246
+ export const provideRuntime: {
1247
+ <R2>(runtime: Runtime.Runtime<R2>): <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, R2>, E, A>
1248
+ <R, E, A, R2>(fx: Fx<R, E, A>, runtime: Runtime.Runtime<R2>): Fx<Exclude<R, R2>, E, A>
1249
+ } = dual(2, core.provideRuntime)
1544
1250
 
1545
1251
  /**
1546
- * Map over the failures and successes of an Fx, flattening both with unbounded concurrency.
1547
- *
1548
- * @since 1.18.0
1549
- * @category flattening
1252
+ * @since 1.20.0
1550
1253
  */
1551
- export const matchCause: {
1552
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1553
- options: {
1554
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1555
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1556
- }
1557
- ): <R>(fx: Fx<R, E, A>) => Fx<R2 | R3 | R, E2 | E3, B | C>
1558
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1559
- fx: Fx<R, E, A>,
1560
- options: {
1561
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1562
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1563
- }
1564
- ): Fx<R | R2 | R3, E2 | E3, B | C>
1565
- } = core.matchCause
1254
+ export const provideService: {
1255
+ <I, S>(service: Ctx.Tag<I, S>, instance: S): <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, I>, E, A>
1256
+ <R, E, A, I, S>(fx: Fx<R, E, A>, service: Ctx.Tag<I, S>, instance: S): Fx<Exclude<R, I>, E, A>
1257
+ } = dual(3, core.provideService)
1566
1258
 
1567
1259
  /**
1568
- * Map over the failures and successes of an Fx, flattening both with unbounded concurrency.
1569
- *
1570
- * @since 1.18.0
1571
- * @category flattening
1260
+ * @since 1.20.0
1572
1261
  */
1573
- export const match: {
1574
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1575
- options: { readonly onFailure: (error: E) => FxInput<R2, E2, B>; readonly onSuccess: (a: A) => FxInput<R3, E3, C> }
1576
- ): <R>(fx: Fx<R, E, A>) => Fx<R2 | R3 | R, E2 | E3, B | C>
1577
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1262
+ export const provideServiceEffect: {
1263
+ <I, S, R2, E2>(
1264
+ service: Ctx.Tag<I, S>,
1265
+ instance: Effect.Effect<R2, E2, S>
1266
+ ): <R, E, A>(fx: Fx<R, E, A>) => Fx<R2 | Exclude<R, I>, E | E2, A>
1267
+ <R, E, A, I, S, R2, E2>(
1578
1268
  fx: Fx<R, E, A>,
1579
- options: { readonly onFailure: (error: E) => FxInput<R2, E2, B>; readonly onSuccess: (a: A) => FxInput<R3, E3, C> }
1580
- ): Fx<R | R2 | R3, E2 | E3, B | C>
1581
- } = core.match
1269
+ service: Ctx.Tag<I, S>,
1270
+ instance: Effect.Effect<R2, E2, S>
1271
+ ): Fx<R2 | Exclude<R, I>, E | E2, A>
1272
+ } = dual(3, core.provideServiceEffect)
1582
1273
 
1583
1274
  /**
1584
- * Map over the failures and successes of an Fx, flattening both with the specified concurrency.
1585
- *
1586
- * @since 1.18.0
1587
- * @category flattening
1275
+ * @since 1.20.0
1588
1276
  */
1589
- export const matchCauseConcurrently: {
1590
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1591
- options: {
1592
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1593
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1594
- readonly concurrency: number
1595
- }
1596
- ): <R>(fx: Fx<R, E, A>) => Fx<R2 | R3 | R, E2 | E3, B | C>
1597
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1277
+ export const provide: {
1278
+ <R2>(context: Ctx.Context<R2>): <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, R2>, E, A>
1279
+ <R2>(runtime: Runtime.Runtime<R2>): <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, R2>, E, A>
1280
+ <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>
1281
+ <R2 = never, E2 = never, S = never>(
1282
+ provide: Layer.Layer<R2, E2, S> | Ctx.Context<S> | Runtime.Runtime<S>
1283
+ ): <R, E, A>(fx: Fx<R, E, A>) => Fx<R2 | Exclude<R, S>, E | E2, A>
1284
+
1285
+ <R, E, A, R2>(fx: Fx<R, E, A>, context: Ctx.Context<R2>): Fx<Exclude<R, R2>, E, A>
1286
+ <R, E, A, R2>(fx: Fx<R, E, A>, runtime: Runtime.Runtime<R2>): Fx<Exclude<R, R2>, E, A>
1287
+ <R, E, A, R2, E2, S>(fx: Fx<R, E, A>, layer: Layer.Layer<R2, E2, S>): Fx<R2 | Exclude<R, S>, E | E2, A>
1288
+ <R, E, A, R2 = never, E2 = never, S = never>(
1598
1289
  fx: Fx<R, E, A>,
1599
- options: {
1600
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1601
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1602
- readonly concurrency: number
1603
- }
1604
- ): Fx<R | R2 | R3, E2 | E3, B | C>
1605
- } = core.matchCauseConcurrently
1290
+ provide: Layer.Layer<R2, E2, S> | Ctx.Context<S> | Runtime.Runtime<S>
1291
+ ): Fx<R2 | Exclude<R, S>, E | E2, A>
1292
+ } = dual(2, core.provide)
1606
1293
 
1607
1294
  /**
1608
- * Map over the failures and successes of an Fx, flattening both with the specified concurrency.
1609
- *
1610
- * @since 1.18.0
1611
- * @category flattening
1295
+ * @since 1.20.0
1612
1296
  */
1613
- export const matchErrorConcurrently: {
1614
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1615
- options: {
1616
- readonly onFailure: (error: E) => FxInput<R2, E2, B>
1617
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1618
- readonly concurrency: number
1619
- }
1620
- ): <R>(fx: Fx<R, E, A>) => Fx<R2 | R3 | R, E2 | E3, B | C>
1621
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1622
- fx: Fx<R, E, A>,
1623
- options: {
1624
- readonly onFailure: (error: E) => FxInput<R2, E2, B>
1625
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1626
- readonly concurrency: number
1627
- }
1628
- ): Fx<R | R2 | R3, E2 | E3, B | C>
1629
- } = core.matchErrorConcurrently
1297
+ export const share: {
1298
+ <R2, E2, A>(subject: Subject.Subject<R2, E2, A>): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E, A>
1299
+ <R, E, A, R2>(fx: Fx<R, E, A>, subject: Subject.Subject<R2, E, A>): Fx<R | R2 | Scope.Scope, E, A>
1300
+ } = dual(2, coreShare.share)
1630
1301
 
1631
1302
  /**
1632
- * Map over the failures and successes of an Fx, switching to the latest
1633
- * Fx emitted and interrupting the previous.
1634
- *
1635
- * @since 1.18.0
1636
- * @category flattening
1303
+ * @since 1.20.0
1637
1304
  */
1638
- export const switchMatchCause: {
1639
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1640
- options: {
1641
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1642
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1643
- }
1644
- ): <R>(fx: Fx<R, E, A>) => Fx<R2 | R3 | R, E2 | E3, B | C>
1645
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1646
- fx: Fx<R, E, A>,
1647
- options: {
1648
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1649
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1650
- }
1651
- ): Fx<R | R2 | R3, E2 | E3, B | C>
1652
- } = core.switchMatchCause
1305
+ export const multicast: <R, E, A>(fx: Fx<R, E, A>) => Fx<Scope.Scope | R, E, A> = coreShare.multicast
1653
1306
 
1654
1307
  /**
1655
- * Map over the failures and successes of an Fx, switching to the latest
1656
- * Fx emitted and interrupting the previous.
1657
- *
1658
- * @since 1.18.0
1659
- * @category flattening
1308
+ * @since 1.20.0
1660
1309
  */
1661
- export const switchMatch: {
1662
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1663
- options: { readonly onFailure: (error: E) => FxInput<R2, E2, B>; readonly onSuccess: (a: A) => FxInput<R3, E3, C> }
1664
- ): <R>(fx: Fx<R, E, A>) => Fx<R2 | R3 | R, E2 | E3, B | C>
1665
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1666
- fx: Fx<R, E, A>,
1667
- options: { readonly onFailure: (error: E) => FxInput<R2, E2, B>; readonly onSuccess: (a: A) => FxInput<R3, E3, C> }
1668
- ): Fx<R | R2 | R3, E2 | E3, B | C>
1669
- } = core.switchMatch
1310
+ export const hold: <R, E, A>(fx: Fx<R, E, A>) => Fx<Scope.Scope | R, E, A> = coreShare.hold
1670
1311
 
1671
1312
  /**
1672
- * Map over the failures and successes of an Fx, prefering the first
1673
- * Fx emitted and dropping any subsequent Fx until it has completed.
1674
- *
1675
- * @since 1.18.0
1676
- * @category flattening
1313
+ * @since 1.20.0
1677
1314
  */
1678
- export const exhaustMatchCause: {
1679
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1680
- options: {
1681
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1682
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1683
- }
1684
- ): <R>(fx: Fx<R, E, A>) => Fx<R2 | R3 | R, E2 | E3, B | C>
1685
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1686
- fx: Fx<R, E, A>,
1687
- options: {
1688
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1689
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1690
- }
1691
- ): Fx<R | R2 | R3, E2 | E3, B | C>
1692
- } = core.exhaustMatchCause
1315
+ export const replay: {
1316
+ (capacity: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<Scope.Scope | R, E, A>
1317
+ <R, E, A>(fx: Fx<R, E, A>, capacity: number): Fx<Scope.Scope | R, E, A>
1318
+ } = dual(2, coreShare.replay)
1693
1319
 
1694
1320
  /**
1695
- * Map over the failures and successes of an Fx, prefering the first
1696
- * Fx emitted and dropping any subsequent Fx until it has completed.
1697
- *
1698
- * @since 1.18.0
1699
- * @category flattening
1321
+ * @since 1.20.0
1700
1322
  */
1701
- export const exhaustMatch: {
1702
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1703
- options: { readonly onFailure: (error: E) => FxInput<R2, E2, B>; readonly onSuccess: (a: A) => FxInput<R3, E3, C> }
1704
- ): <R>(fx: Fx<R, E, A>) => Fx<R2 | R3 | R, E2 | E3, B | C>
1705
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1706
- fx: Fx<R, E, A>,
1707
- options: { readonly onFailure: (error: E) => FxInput<R2, E2, B>; readonly onSuccess: (a: A) => FxInput<R3, E3, C> }
1708
- ): Fx<R | R2 | R3, E2 | E3, B | C>
1709
- } = core.exhaustMatch
1323
+ export const mapCause: {
1324
+ <E, E2>(f: (cause: Cause.Cause<E>) => Cause.Cause<E2>): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
1325
+ <R, E, A, E2>(fx: Fx<R, E, A>, f: (cause: Cause.Cause<E>) => Cause.Cause<E2>): Fx<R, E2, A>
1326
+ } = dual(2, core.mapCause)
1710
1327
 
1711
1328
  /**
1712
- * Map over the failures and successes of an Fx, prefering the first
1713
- * Fx emitted and starting the latest Fx when the first completes
1714
- * if they are not the same Fx.
1715
- *
1716
- * @since 1.18.0
1717
- * @category flattening
1718
- */
1719
- export const exhaustLatestMatchCause: {
1720
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1721
- options: {
1722
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1723
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1724
- }
1725
- ): <R>(fx: Fx<R, E, A>) => Fx<R2 | R3 | R, E2 | E3, B | C>
1726
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1727
- fx: Fx<R, E, A>,
1728
- options: {
1729
- readonly onFailure: (cause: Cause.Cause<E>) => FxInput<R2, E2, B>
1730
- readonly onSuccess: (a: A) => FxInput<R3, E3, C>
1731
- }
1732
- ): Fx<R | R2 | R3, E2 | E3, B | C>
1733
- } = core.exhaustLatestMatchCause
1329
+ * @since 1.20.0
1330
+ */
1331
+ export const mapError: {
1332
+ <E, E2>(f: (e: E) => E2): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
1333
+ <R, E, A, E2>(fx: Fx<R, E, A>, f: (e: E) => E2): Fx<R, E2, A>
1334
+ } = dual(2, core.mapError)
1734
1335
 
1735
1336
  /**
1736
- * Map over the failures and successes of an Fx, prefering the first
1737
- * Fx emitted and starting the latest Fx when the first completes
1738
- * if they are not the same Fx.
1739
- *
1740
- * @since 1.18.0
1741
- * @category flattening
1337
+ * @since 1.20.0
1742
1338
  */
1743
- export const exhaustLatestMatch: {
1744
- <E, R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1745
- options: { readonly onFailure: (error: E) => FxInput<R2, E2, B>; readonly onSuccess: (a: A) => FxInput<R3, E3, C> }
1746
- ): <R>(fx: Fx<R, E, A>) => Fx<R2 | R3 | R, E2 | E3, B | C>
1747
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1748
- fx: Fx<R, E, A>,
1749
- options: { readonly onFailure: (error: E) => FxInput<R2, E2, B>; readonly onSuccess: (a: A) => FxInput<R3, E3, C> }
1750
- ): Fx<R | R2 | R3, E2 | E3, B | C>
1751
- } = core.exhaustLatestMatch
1339
+ export const mapBoth: {
1340
+ <E, E2, A, B>(f: (e: E) => E2, g: (a: A) => B): <R>(fx: Fx<R, E, A>) => Fx<R, E2, B>
1341
+ <R, E, A, B, C>(fx: Fx<R, E, A>, f: (e: E) => B, g: (a: A) => C): Fx<R, B, C>
1342
+ } = dual(3, core.mapBoth)
1752
1343
 
1753
1344
  /**
1754
- * Listen to the events of an Fx within the provided window. When the window Fx
1755
- * emits the inner stream, the fx will begin allowing events to pass through,
1756
- * and when the inner stream emits, the fx will be interrupted.
1757
- *
1758
- * @since 1.18.0
1759
- * @category time slicing
1345
+ * @since 1.20.0
1760
1346
  */
1761
- export const during: {
1762
- <R2, E2, R3, E3>(
1763
- window: Fx<R2, E2, Fx<R3, E3, unknown>>
1764
- ): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E | E2 | E3, A>
1765
-
1766
- <R, E, A, R2, E2, R3, E3>(
1767
- fx: Fx<R, E, A>,
1768
- window: Fx<R2, E2, Fx<R3, E3, unknown>>
1769
- ): Fx<R | R2 | R3, E | E2 | E3, A>
1770
- } = core.during
1347
+ export const filterCause: {
1348
+ <E>(f: (cause: Cause.Cause<E>) => boolean): <R, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1349
+ <R, E, A>(fx: Fx<R, E, A>, f: (cause: Cause.Cause<E>) => boolean): Fx<R, E, A>
1350
+ } = dual(2, core.filterCause)
1771
1351
 
1772
1352
  /**
1773
- * Listen to the events of an Fx after the provided window emits.
1774
- *
1775
- * @since 1.18.0
1776
- * @category time slicing
1353
+ * @since 1.20.0
1777
1354
  */
1778
- export const since: {
1779
- <R2, E2>(window: Fx<R2, E2, unknown>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1780
- <R, E, A, R2, E2>(fx: Fx<R, E, A>, window: Fx<R2, E2, unknown>): Fx<R | R2, E | E2, A>
1781
- } = core.since
1355
+ export const filterError: {
1356
+ <E>(f: (e: E) => boolean): <R, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1357
+ <R, E, A>(fx: Fx<R, E, A>, f: (e: E) => boolean): Fx<R, E, A>
1358
+ } = dual(2, core.filterError)
1782
1359
 
1783
1360
  /**
1784
- * Listen to the events of an Fx until the provided window emits.
1785
- *
1786
- * @since 1.18.0
1787
- * @category time slicing
1361
+ * @since 1.20.0
1788
1362
  */
1789
- export const until: {
1790
- <R2, E2>(window: Fx<R2, E2, unknown>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A>
1791
- <R, E, A, R2, E2>(fx: Fx<R, E, A>, window: Fx<R2, E2, unknown>): Fx<R | R2, E | E2, A>
1792
- } = core.until
1363
+ export const filterMapCause: {
1364
+ <E, E2>(f: (cause: Cause.Cause<E>) => Option.Option<Cause.Cause<E2>>): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
1365
+ <R, E, A, E2>(fx: Fx<R, E, A>, f: (cause: Cause.Cause<E>) => Option.Option<Cause.Cause<E2>>): Fx<R, E2, A>
1366
+ } = dual(2, core.filterMapCause)
1793
1367
 
1794
1368
  /**
1795
- * Provide the environment to an Fx.
1796
- *
1797
- * @since 1.18.0
1798
- * @category context
1369
+ * @since 1.20.0
1799
1370
  */
1800
- export const provide: {
1801
- <R2, E2, S>(layer: Layer.Layer<R2, E2, S>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R2 | Exclude<R, S>, E2 | E, A>
1802
- <R2>(runtime: Runtime.Runtime<R2>): <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, R2>, E, A>
1803
- <R2>(context: Context.Context<R2>): <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, R2>, E, A>
1804
- <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>
1805
- <R, E, A, R2>(fx: Fx<R, E, A>, runtime: Runtime.Runtime<R2>): Fx<Exclude<R, R2>, E, A>
1806
- <R, E, A, R2>(fx: Fx<R, E, A>, context: Context.Context<R2>): Fx<Exclude<R, R2>, E, A>
1807
- } = core.provide
1371
+ export const filterMapError: {
1372
+ <E, E2>(f: (e: E) => Option.Option<E2>): <R, A>(fx: Fx<R, E, A>) => Fx<R, E2, A>
1373
+ <R, E, A, E2>(fx: Fx<R, E, A>, f: (e: E) => Option.Option<E2>): Fx<R, E2, A>
1374
+ } = dual(2, core.filterMapError)
1808
1375
 
1809
1376
  /**
1810
- * Provide a service to an Fx using a Tag.
1811
- * @since 1.18.0
1812
- * @category context
1377
+ * @since 1.20.0
1813
1378
  */
1814
- export const provideService: {
1815
- <I, S>(tag: Context.Tag<I, S>, service: S): <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, I>, E, A>
1816
- <R, E, A, I, S>(fx: Fx<R, E, A>, tag: Context.Tag<I, S>, service: S): Fx<Exclude<R, I>, E, A>
1817
- } = core.provideService
1379
+ export const mapCauseEffect: {
1380
+ <R2, E2, E3>(f: (cause: Cause.Cause<E2>) => Effect.Effect<R2, E3, Cause.Cause<E3>>): <R, E, A>(
1381
+ fx: Fx<R, E, A>
1382
+ ) => Fx<R | R2, E2 | E3, A>
1383
+ <R, E, A, R2, E2, E3>(
1384
+ fx: Fx<R, E, A>,
1385
+ f: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, Cause.Cause<E3>>
1386
+ ): Fx<R | R2, E2 | E3, A>
1387
+ } = dual(2, core.mapCauseEffect)
1818
1388
 
1819
1389
  /**
1820
- * Provide a service using an Effect to an Fx using a Tag.
1821
- *
1822
- * @since 1.18.0
1823
- * @category context
1390
+ * @since 1.20.0
1824
1391
  */
1825
- export const provideServiceEffect: {
1826
- <I, S, R2, E2>(
1827
- tag: Context.Tag<I, S>,
1828
- service: Effect.Effect<R2, E2, S>
1829
- ): <R, E, A>(fx: Fx<R, E, A>) => Fx<R2 | Exclude<R, I>, E, A>
1830
- <R, E, A, I, S, R2, E2>(
1831
- fx: Fx<R, E, A>,
1832
- tag: Context.Tag<I, S>,
1833
- service: Effect.Effect<R2, E2, S>
1834
- ): Fx<R2 | Exclude<R, I>, E, A>
1835
- } = core.provideServiceEffect
1392
+ export const mapErrorEffect: {
1393
+ <R2, E2, E3>(f: (e: E2) => Effect.Effect<R2, E3, E3>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2 | E3, A>
1394
+ <R, E, A, R2, E2, E3>(fx: Fx<R, E, A>, f: (e: E) => Effect.Effect<R2, E2, E3>): Fx<R | R2, E2 | E3, A>
1395
+ } = dual(2, core.mapErrorEffect)
1836
1396
 
1837
1397
  /**
1838
- * Skip repeated values, using the provided Equivalence to compare values.
1839
- *
1840
- * @since 1.18.0
1841
- * @category slicing
1398
+ * @since 1.20.0
1842
1399
  */
1843
- export const skipRepeatsWith: {
1844
- <A>(eq: Equivalence<A>): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, A>
1845
- <R, E, A>(fx: Fx<R, E, A>, eq: Equivalence<A>): Fx<R, E, A>
1846
- } = core.skipRepeatsWith
1400
+ export const filterCauseEffect: {
1401
+ <E, R2, E2>(f: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, boolean>): <R, A>(
1402
+ fx: Fx<R, E, A>
1403
+ ) => Fx<R | R2, E2, A>
1404
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, f: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E2, A>
1405
+ } = dual(2, core.filterCauseEffect)
1847
1406
 
1848
1407
  /**
1849
- * Skip repeated values, using @effect/data/Equal for value comparison.
1850
- *
1851
- * @since 1.18.0
1852
- * @category slicing
1408
+ * @since 1.20.0
1853
1409
  */
1854
- export const skipRepeats: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A> = core.skipRepeats
1410
+ export const filterErrorEffect: {
1411
+ <E, R2, E2>(f: (e: E) => Effect.Effect<R2, E2, boolean>): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A>
1412
+ <R, E, A, R2, E2>(fx: Fx<R, E, A>, f: (e: E) => Effect.Effect<R2, E2, boolean>): Fx<R | R2, E2, A>
1413
+ } = dual(2, core.filterErrorEffect)
1855
1414
 
1856
1415
  /**
1857
- * Sample the values of an Fx, or Effect, during the events of another Fx.
1858
- *
1859
- * @since 1.18.0
1860
- * @category combinators
1416
+ * @since 1.20.0
1861
1417
  */
1862
- export const snapshot: {
1863
- <R2 = never, E2 = never, B = never, A = never, R3 = never, E3 = never, C = never>(
1864
- sampled: FxInput<R2, E2, B>,
1865
- f: (a: A, b: B) => Effect.Effect<R3, E3, C>
1866
- ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2 | R3, E | E2 | E3, C>
1867
- <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
1418
+ export const filterMapCauseEffect: {
1419
+ <R2, E2, E3>(f: (cause: Cause.Cause<E2>) => Effect.Effect<R2, E2, Option.Option<Cause.Cause<E3>>>): <R, E, A>(
1420
+ fx: Fx<R, E, A>
1421
+ ) => Fx<R | R2, E2 | E3, A>
1422
+ <R, E, A, R2, E2, E3>(
1868
1423
  fx: Fx<R, E, A>,
1869
- sampled: FxInput<R2, E2, B>,
1870
- f: (a: A, b: B) => Effect.Effect<R3, E3, C>
1871
- ): Fx<R | R2 | R3, E | E2 | E3, C>
1872
- } = core.snapshot
1424
+ f: (cause: Cause.Cause<E>) => Effect.Effect<R2, E2, Option.Option<Cause.Cause<E3>>>
1425
+ ): Fx<R | R2, E2 | E3, A>
1426
+ } = dual(2, core.filterMapCauseEffect)
1873
1427
 
1874
1428
  /**
1875
- * Share the output of an Fx, or Effect, with other Fx's using the behavior of the
1876
- * provided Subject.
1877
- *
1878
- * @since 1.18.0
1879
- * @category sharing
1429
+ * @since 1.20.0
1880
1430
  */
1881
- export const share: <R, E, A, R2>(fx: Fx<R, E, A>, subject: Subject<R2, E, A>) => Fx<R | R2, E, A> = Share.share
1431
+ export const filterMapErrorEffect: {
1432
+ <E, R2, E2, E3>(
1433
+ f: (e: E) => Effect.Effect<R2, E2, Option.Option<E3>>
1434
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2 | E3, A>
1435
+ <R, E, A, R2, E2, E3>(fx: Fx<R, E, A>, f: (e: E) => Effect.Effect<R2, E2, Option.Option<E3>>): Fx<R | R2, E2 | E3, A>
1436
+ } = dual(2, core.filterMapErrorEffect)
1882
1437
 
1883
1438
  /**
1884
- * Effeciently share an underlying stream with multiple subscribers.
1885
- *
1886
- * @since 1.18.0
1887
- * @category sharing
1439
+ * @since 1.20.0
1888
1440
  */
1889
- export const multicast: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A> = Share.multicast
1441
+ export const loopCause: {
1442
+ <B, E, C>(
1443
+ seed: B,
1444
+ f: (b: B, cause: Cause.Cause<E>) => readonly [Cause.Cause<C>, B]
1445
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R, C, A>
1446
+
1447
+ <R, E, A, B, C>(
1448
+ fx: Fx<R, E, A>,
1449
+ seed: B,
1450
+ f: (b: B, cause: Cause.Cause<E>) => readonly [Cause.Cause<C>, B]
1451
+ ): Fx<R, C, A>
1452
+ } = dual(3, core.loopCause)
1890
1453
 
1891
1454
  /**
1892
- * Effeciently share an underlying stream with multiple subscribers, saving the most
1893
- * recent event and emitting it to new subscribers.
1894
- *
1895
- * @since 1.18.0
1896
- * @category sharing
1455
+ * @since 1.20.0
1897
1456
  */
1898
- export const hold: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A> = Share.hold
1457
+ export const loopError: {
1458
+ <B, E, C>(seed: B, f: (b: B, e: E) => readonly [C, B]): <R, A>(fx: Fx<R, E, A>) => Fx<R, C, A>
1459
+ <R, E, A, B, C>(fx: Fx<R, E, A>, seed: B, f: (b: B, e: E) => readonly [C, B]): Fx<R, C, A>
1460
+ } = dual(3, core.loopError)
1899
1461
 
1900
1462
  /**
1901
- * Effeciently share an underlying stream with multiple subscribers,
1902
- * saving up to the most recent `n` events and emitting them to new subscribers.
1903
- *
1904
- * @since 1.18.0
1905
- * @category sharing
1463
+ * @since 1.20.0
1906
1464
  */
1907
- export const replay: {
1908
- (capacity: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1909
- <R, E, A>(fx: Fx<R, E, A>, capacity: number): Fx<R, E, A>
1910
- } = Share.replay
1465
+ export const loopCauseEffect: {
1466
+ <B, E, R2, E2, C>(
1467
+ seed: B,
1468
+ f: (b: B, cause: Cause.Cause<E>) => Effect.Effect<R2, E2, readonly [Cause.Cause<C>, B]>
1469
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2 | C, A>
1470
+ <R, E, A, R2, E2, B, C>(
1471
+ fx: Fx<R, E, A>,
1472
+ seed: B,
1473
+ f: (b: B, cause: Cause.Cause<E>) => Effect.Effect<R2, E2, readonly [Cause.Cause<C>, B]>
1474
+ ): Fx<R | R2, E2 | C, A>
1475
+ } = dual(3, core.loopCauseEffect)
1911
1476
 
1912
1477
  /**
1913
- * Create an Fx which will wait a specified duration of time where no
1914
- * events have occurred before emitting a value.
1915
- * @since 1.18.0
1916
- * @category time slicing
1478
+ * @since 1.20.0
1917
1479
  */
1918
- export const debounce: {
1919
- (delay: DurationInput): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1920
- <R, E, A>(fx: Fx<R, E, A>, delay: DurationInput): Fx<R, E, A>
1921
- } = internal.debounce
1480
+ export const loopErrorEffect: {
1481
+ <B, E, R2, E2, C>(seed: B, f: (b: B, e: E) => Effect.Effect<R2, E2, readonly [C, B]>): <R, A>(
1482
+ fx: Fx<R, E, A>
1483
+ ) => Fx<R | R2, E2 | C, A>
1484
+ <R, E, A, R2, E2, B, C>(
1485
+ fx: Fx<R, E, A>,
1486
+ seed: B,
1487
+ f: (b: B, e: E) => Effect.Effect<R2, E2, readonly [C, B]>
1488
+ ): Fx<R | R2, E2 | C, A>
1489
+ } = dual(3, core.loopErrorEffect)
1922
1490
 
1923
1491
  /**
1924
- * Create an Fx which will wait a specified duration of time before emitting
1925
- * an event after the last event.
1926
- * @since 1.18.0
1927
- * @category time slicing
1492
+ * @since 1.20.0
1928
1493
  */
1929
- export const throttle: {
1930
- (delay: DurationInput): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1931
- <R, E, A>(fx: Fx<R, E, A>, delay: DurationInput): Fx<R, E, A>
1932
- } = internal.throttle
1494
+ export const filterMapLoopCause: {
1495
+ <B, E, R2, E2, C>(
1496
+ seed: B,
1497
+ f: (b: B, cause: Cause.Cause<E>) => Effect.Effect<R2, E2, readonly [Option.Option<Cause.Cause<C>>, B]>
1498
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2 | C, A>
1499
+ <R, E, A, B, C>(
1500
+ fx: Fx<R, E, A>,
1501
+ seed: B,
1502
+ f: (b: B, cause: Cause.Cause<E>) => readonly [Option.Option<Cause.Cause<C>>, B]
1503
+ ): Fx<R, C, A>
1504
+ } = dual(3, core.filterMapLoopCause)
1933
1505
 
1934
1506
  /**
1935
- * Create an Fx which will wait a specified duration of time where no
1936
- * events have occurred before emitting a value.
1937
- * @since 1.18.0
1938
- * @category combinators
1507
+ * @since 1.20.0
1939
1508
  */
1940
- export const delay: {
1941
- (delay: DurationInput): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
1942
- <R, E, A>(fx: Fx<R, E, A>, delay: DurationInput): Fx<R, E, A>
1943
- } = internal.delay
1509
+ export const filterMapLoopError: {
1510
+ <B, E, R2, E2, C>(seed: B, f: (b: B, e: E) => Effect.Effect<R2, E2, readonly [Option.Option<C>, B]>): <R, A>(
1511
+ fx: Fx<R, E, A>
1512
+ ) => Fx<R | R2, E2 | C, A>
1513
+ <R, E, A, B, C>(fx: Fx<R, E, A>, seed: B, f: (b: B, e: E) => readonly [Option.Option<C>, B]): Fx<R, C, A>
1514
+ } = dual(3, core.filterMapLoopError)
1944
1515
 
1945
1516
  /**
1946
- * Run an Effect to produce an Fx to run.
1947
- * @since 1.18.0
1948
- * @category constructors
1517
+ * @since 1.20.0
1949
1518
  */
1950
- export const fromFxEffect: <R, E, R2, E2, B>(fxEffect: Effect.Effect<R, E, Fx<R2, E2, B>>) => Fx<R | R2, E | E2, B> =
1951
- internal.fromFxEffect
1519
+ export const filterMapLoopCauseEffect: {
1520
+ <B, E, R2, E2, C>(
1521
+ seed: B,
1522
+ f: (b: B, cause: Cause.Cause<E>) => Effect.Effect<R2, E2, readonly [Option.Option<Cause.Cause<C>>, B]>
1523
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2 | C, A>
1524
+ <R, E, A, R2, E2, B, C>(
1525
+ fx: Fx<R, E, A>,
1526
+ seed: B,
1527
+ f: (b: B, cause: Cause.Cause<E>) => Effect.Effect<R2, E2, readonly [Option.Option<Cause.Cause<C>>, B]>
1528
+ ): Fx<R | R2, E2 | C, A>
1529
+ } = dual(3, core.filterMapLoopCauseEffect)
1952
1530
 
1953
1531
  /**
1954
- * Extract the context from an EffectGen
1955
- * @since 1.18.0
1532
+ * @since 1.20.0
1956
1533
  */
1957
- export type EffectGenContext<T> = [T] extends [never] ? never
1958
- : [T] extends [Effect.EffectGen<infer R, any, any>] ? R
1959
- : never
1534
+ export const filterMapLoopErrorEffect: {
1535
+ <B, E, R2, E2, C>(seed: B, f: (b: B, e: E) => Effect.Effect<R2, E2, readonly [Option.Option<C>, B]>): <R, A>(
1536
+ fx: Fx<R, E, A>
1537
+ ) => Fx<R | R2, E2 | C, A>
1538
+ <R, E, A, R2, E2, B, C>(
1539
+ fx: Fx<R, E, A>,
1540
+ seed: B,
1541
+ f: (b: B, e: E) => Effect.Effect<R2, E2, readonly [Option.Option<C>, B]>
1542
+ ): Fx<R | R2, E2 | C, A>
1543
+ } = dual(3, core.filterMapLoopErrorEffect)
1960
1544
 
1961
1545
  /**
1962
- * Extract the error from an EffectGen
1963
- * @since 1.18.0
1546
+ * @since 1.20.0
1964
1547
  */
1965
- export type EffectGenError<T> = [T] extends [never] ? never
1966
- : [T] extends [Effect.EffectGen<any, infer E, any>] ? E
1967
- : never
1548
+ export const flatMapCauseWithStrategy: {
1549
+ <E, R2, E2, B>(
1550
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1551
+ flattenStrategy: FlattenStrategy,
1552
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy
1553
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1554
+ <R, E, A, R2, E2, B>(
1555
+ fx: Fx<R, E, A>,
1556
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1557
+ flattenStrategy: FlattenStrategy,
1558
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy
1559
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1560
+ } = dual(isDataFirstFx, core.flatMapCauseWithStrategy)
1968
1561
 
1969
1562
  /**
1970
- * Extract the success value from an EffectGen
1971
- * @since 1.18.0
1563
+ * @since 1.20.0
1972
1564
  */
1973
- export type EffectGenSuccess<T> = [T] extends [never] ? never
1974
- : [T] extends [Effect.EffectGen<any, any, infer A>] ? A
1975
- : never
1565
+ export const flatMapErrorWithStrategy: {
1566
+ <E, R2, E2, B>(
1567
+ f: (e: E) => Fx<R2, E2, B>,
1568
+ flattenStrategy: FlattenStrategy,
1569
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy
1570
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1571
+ <R, E, A, R2, E2, B>(
1572
+ fx: Fx<R, E, A>,
1573
+ f: (e: E) => Fx<R2, E2, B>,
1574
+ flattenStrategy: FlattenStrategy,
1575
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy
1576
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1577
+ } = dual(isDataFirstFx, core.flatMapErrorWithStrategy)
1976
1578
 
1977
1579
  /**
1978
- * Utilize Effect.gen to construct an Fx
1979
- * @since 1.18.0
1980
- * @category constructors
1580
+ * @since 1.20.0
1981
1581
  */
1982
- export function gen<Yield extends Effect.EffectGen<any, any, any>, R, E, A>(
1983
- f: (_: Effect.Adapter) => Generator<Yield, Fx<R, E, A>, any>
1984
- ): Fx<R | EffectGenContext<Yield>, E | EffectGenError<Yield>, A> {
1985
- return fromFxEffect(Effect.gen(f))
1986
- }
1582
+ export const switchMapCause: {
1583
+ <R, E, A, R2, E2, B>(
1584
+ fx: Fx<R, E, A>,
1585
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1586
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1587
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1588
+
1589
+ <E, R2, E2, B>(
1590
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1591
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1592
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1593
+ } = dual(isDataFirstFx, core.switchMapCause)
1987
1594
 
1988
1595
  /**
1989
- * Utilize Effect.gen to construct an Fx
1990
- * @since 1.18.0
1991
- * @category constructors
1596
+ * @since 1.20.0
1992
1597
  */
1993
- export function genScoped<Yield extends Effect.EffectGen<any, any, any>, R, E, A>(
1994
- f: (_: Effect.Adapter) => Generator<Yield, Fx<R, E, A>, any>
1995
- ): Fx<Exclude<R | EffectGenContext<Yield>, Scope.Scope>, E | EffectGenError<Yield>, A> {
1996
- return scoped(fromFxEffect(Effect.gen(f)))
1997
- }
1598
+ export const switchMapError: {
1599
+ <E, R2, E2, B>(
1600
+ f: (e: E) => Fx<R2, E2, B>,
1601
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1602
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1603
+
1604
+ <R, E, A, R2, E2, B>(
1605
+ fx: Fx<R, E, A>,
1606
+ f: (e: E) => Fx<R2, E2, B>,
1607
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1608
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1609
+ } = dual(isDataFirstFx, core.switchMapError)
1998
1610
 
1999
1611
  /**
2000
- * Run an Effect when an Fx exits
2001
- * @since 1.18.0
2002
- * @category lifecycles
1612
+ * @since 1.20.0
2003
1613
  */
2004
- export const onExit: {
2005
- <R2>(
2006
- f: (exit: Exit.Exit<never, unknown>) => Effect.Effect<R2, never, unknown>
2007
- ): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E, A>
2008
- <R, E, A, R2>(
1614
+ export const flatMapCause: {
1615
+ <E, R2, E2, B>(
1616
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1617
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1618
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1619
+
1620
+ <R, E, A, R2, E2, B>(
2009
1621
  fx: Fx<R, E, A>,
2010
- f: (exit: Exit.Exit<never, unknown>) => Effect.Effect<R2, never, unknown>
2011
- ): Fx<R | R2, E, A>
2012
- } = internal.onExit
1622
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1623
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1624
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1625
+ } = dual(isDataFirstFx, core.flatMapCause)
2013
1626
 
2014
1627
  /**
2015
- * Run an Effect when an Fx is interrupted
2016
- * @since 1.18.0
2017
- * @category lifecycles
1628
+ * @since 1.20.0
2018
1629
  */
2019
- export const onInterrupt: {
2020
- <R2>(
2021
- f: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<R2, never, unknown>
2022
- ): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E, A>
2023
- <R, E, A, R2>(
1630
+ export const flatMapError: {
1631
+ <E, R2, E2, B>(
1632
+ f: (e: E) => Fx<R2, E2, B>,
1633
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1634
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1635
+
1636
+ <R, E, A, R2, E2, B>(
2024
1637
  fx: Fx<R, E, A>,
2025
- f: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<R2, never, unknown>
2026
- ): Fx<R | R2, E, A>
2027
- } = internal.onInterrupt
1638
+ f: (e: E) => Fx<R2, E2, B>,
1639
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1640
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1641
+ } = dual(isDataFirstFx, core.flatMapError)
2028
1642
 
2029
1643
  /**
2030
- * Run an Effect when an Fx ends with an error
2031
- * @since 1.18.0
2032
- * @category lifecycles
1644
+ * @since 1.20.0
2033
1645
  */
2034
- export const onError: {
2035
- <R2>(
2036
- f: (cause: Cause.Cause<never>) => Effect.Effect<R2, never, unknown>
2037
- ): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E, A>
2038
- <R, E, A, R2>(
1646
+ export const flatMapCauseConcurrently: {
1647
+ <E, R2, E2, B>(
1648
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1649
+ concurrency: number,
1650
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1651
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1652
+ <R, E, A, R2, E2, B>(
2039
1653
  fx: Fx<R, E, A>,
2040
- f: (cause: Cause.Cause<never>) => Effect.Effect<R2, never, unknown>
2041
- ): Fx<R | R2, E, A>
2042
- } = internal.onError
1654
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1655
+ concurrency: number,
1656
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1657
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1658
+ } = dual(isDataFirstFx, core.flatMapCauseConcurrently)
2043
1659
 
2044
1660
  /**
2045
- * Provide a Scope to an Fx
2046
- * @since 1.18.0
2047
- * @category context
1661
+ * @since 1.20.0
2048
1662
  */
2049
- export const scoped: <R, E, A>(fx: Fx<R, E, A>) => Fx<Exclude<R, Scope.Scope>, E, A> = internal.scoped
1663
+ export const flatMapErrorConcurrently: {
1664
+ <E, R2, E2, B>(
1665
+ f: (e: E) => Fx<R2, E2, B>,
1666
+ concurrency: number,
1667
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1668
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1669
+
1670
+ <R, E, A, R2, E2, B>(
1671
+ fx: Fx<R, E, A>,
1672
+ f: (e: E) => Fx<R2, E2, B>,
1673
+ concurrency: number,
1674
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1675
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1676
+ } = dual(isDataFirstFx, core.flatMapErrorConcurrently)
2050
1677
 
2051
1678
  /**
2052
- * Annotate the logs of an Fx
2053
- * @since 1.18.0
2054
- * @category combinators
1679
+ * @since 1.20.0
2055
1680
  */
2056
- export const annotateLogs: {
2057
- (key: string, value: unknown): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2058
- (values: Record<string, unknown>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2059
- <R, E, A>(fx: Fx<R, E, A>, key: string, value: unknown): Fx<R, E, A>
2060
- <R, E, A>(fx: Fx<R, E, A>, values: Record<string, unknown>): Fx<R, E, A>
2061
- } = internal.annotateLogs
1681
+ export const exhaustMapCause: {
1682
+ <E, R2, E2, B>(
1683
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1684
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1685
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1686
+
1687
+ <R, E, A, R2, E2, B>(
1688
+ fx: Fx<R, E, A>,
1689
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1690
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1691
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1692
+ } = dual(isDataFirstFx, core.exhaustMapCause)
2062
1693
 
2063
1694
  /**
2064
- * Annotate the spans of an Fx
2065
- * @since 1.18.0
2066
- * @category combinators
1695
+ * @since 1.20.0
2067
1696
  */
2068
- export const annotateSpans: {
2069
- (key: string, value: unknown): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2070
- (values: Record<string, unknown>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2071
- <R, E, A>(fx: Fx<R, E, A>, key: string, value: unknown): Fx<R, E, A>
2072
- <R, E, A>(fx: Fx<R, E, A>, values: Record<string, unknown>): Fx<R, E, A>
2073
- } = internal.annotateSpans
1697
+ export const exhaustMapError: {
1698
+ <E, R2, E2, B>(
1699
+ f: (e: E) => Fx<R2, E2, B>,
1700
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1701
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1702
+
1703
+ <R, E, A, R2, E2, B>(
1704
+ fx: Fx<R, E, A>,
1705
+ f: (e: E) => Fx<R2, E2, B>,
1706
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1707
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1708
+ } = dual(isDataFirstFx, core.exhaustMapError)
2074
1709
 
2075
1710
  /**
2076
- * Create an Fx which will succeed with Option.None
2077
- * @since 1.18.0
2078
- * @category constructors
1711
+ * @since 1.20.0
2079
1712
  */
2080
- export const succeedNone: <A = never>() => Fx<never, never, Option.Option<A>> = internal.succeedNone
1713
+ export const exhaustMapLatestCause: {
1714
+ <E, R2, E2, B>(
1715
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1716
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1717
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1718
+
1719
+ <R, E, A, R2, E2, B>(
1720
+ fx: Fx<R, E, A>,
1721
+ f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
1722
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1723
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1724
+ } = dual(isDataFirstFx, core.exhaustMapLatestCause)
2081
1725
 
2082
1726
  /**
2083
- * Create an Fx which will succeed with Option.Some
2084
- * @since 1.18.0
2085
- * @category constructors
1727
+ * @since 1.20.0
2086
1728
  */
2087
- export const succeedSome: <A>(value: A) => Fx<never, never, Option.Option<A>> = internal.succeedSome
1729
+ export const exhaustMapLatestError: {
1730
+ <E, R2, E2, B>(
1731
+ f: (e: E) => Fx<R2, E2, B>,
1732
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1733
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2 | Scope.Scope, E2, A | B>
1734
+
1735
+ <R, E, A, R2, E2, B>(
1736
+ fx: Fx<R, E, A>,
1737
+ f: (e: E) => Fx<R2, E2, B>,
1738
+ executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1739
+ ): Fx<R | R2 | Scope.Scope, E2, A | B>
1740
+ } = dual(isDataFirstFx, core.exhaustMapLatestError)
2088
1741
 
2089
1742
  /**
2090
- * Do simulation
2091
- * @since 1.18.0
2092
- * @category Do
1743
+ * @since 1.20.0
2093
1744
  */
2094
- export const Do: Fx<never, never, {}> = internal.Do
1745
+ export type MatchCauseOptions<E, A, R2, E2, B, R3, E3, C> = {
1746
+ readonly onFailure: (cause: Cause.Cause<E>) => Fx<R2, E2, B>
1747
+ readonly onSuccess: (a: A) => Fx<R3, E3, C>
1748
+ readonly executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
1749
+ }
2095
1750
 
2096
1751
  /**
2097
- * Do simulation
2098
- * @since 1.18.0
2099
- * @category Do
2100
- */
2101
- export const bind: {
2102
- <N extends string, A extends object, R2, E2, B>(
2103
- name: Exclude<N, keyof A>,
2104
- f: (a: A) => Fx<R2, E2, B>
2105
- ): <R1, E1>(self: Fx<R1, E1, A>) => Fx<R2 | R1, E2 | E1, { [K in N | keyof A]: K extends keyof A ? A[K] : B }>
2106
- <R1, E1, A1 extends object, N extends string, R2, E2, B>(
2107
- self: Fx<R1, E1, A1>,
2108
- name: Exclude<N, keyof A1>,
2109
- f: (a: A1) => Fx<R2, E2, B>
2110
- ): Fx<R1 | R2, E1 | E2, { [K in N | keyof A1]: K extends keyof A1 ? A1[K] : B }>
2111
- } = internal.bind
2112
-
2113
- /**
2114
- * Do simulation
2115
- * @since 1.18.0
2116
- * @category Do
2117
- */
2118
- export const bindTo: {
2119
- <N extends string>(name: N): <R, E, A>(self: Fx<R, E, A>) => Fx<R, E, { [K in N]: A }>
2120
- <R, E, A, N extends string>(self: Fx<R, E, A>, name: N): Fx<R, E, { [K_1 in N]: A }>
2121
- } = internal.bindTo
2122
-
2123
- const let_: {
2124
- <N extends string, A extends object, B>(
2125
- name: Exclude<N, keyof A>,
2126
- f: (a: A) => B
2127
- ): <R1, E1>(self: Fx<R1, E1, A>) => Fx<R1, E1, { [K in N | keyof A]: K extends keyof A ? A[K] : B }>
2128
- <R1, E1, A1 extends object, N extends string, B>(
2129
- self: Fx<R1, E1, A1>,
2130
- name: Exclude<N, keyof A1>,
2131
- f: (a: A1) => B
2132
- ): Fx<R1, E1, { [K in N | keyof A1]: K extends keyof A1 ? A1[K] : B }>
2133
- } = internal.let
2134
-
2135
- export {
2136
- /**
2137
- * Do simulation
2138
- * @since 1.18.0
2139
- * @category Do
2140
- */
2141
- let_ as let
1752
+ * @since 1.20.0
1753
+ */
1754
+ export type MatchErrorOptions<E, A, R2, E2, B, R3, E3, C> = {
1755
+ readonly onFailure: (e: E) => Fx<R2, E2, B>
1756
+ readonly onSuccess: (a: A) => Fx<R3, E3, C>
1757
+ readonly executionStrategy?: ExecutionStrategy.ExecutionStrategy | undefined
2142
1758
  }
2143
1759
 
2144
1760
  /**
2145
- * Ensure a finalizer runs on Fx ext.
2146
- * @since 1.18.0
2147
- * @category combinators
1761
+ * @since 1.20.0
2148
1762
  */
2149
- export const ensuring: {
2150
- <R2>(finalizer: Effect.Effect<R2, never, unknown>): <R, E, A>(self: Fx<R, E, A>) => Fx<R2 | R, E, A>
2151
- <R, E, A, R2>(self: Fx<R, E, A>, finalizer: Effect.Effect<R2, never, unknown>): Fx<R | R2, E, A>
2152
- } = internal.ensuring
1763
+ export const matchCauseWithStrategy: {
1764
+ <E, A, R2, E2, B, R3, E3, C>(
1765
+ opts: MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1766
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1767
+
1768
+ <R, E, A, R2, E2, B, R3, E3, C>(
1769
+ fx: Fx<R, E, A>,
1770
+ flattenStrategy: FlattenStrategy,
1771
+ opts: MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1772
+ ): Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1773
+ } = dual(3, core.matchCauseWithStrategy)
2153
1774
 
2154
1775
  /**
2155
- * Capture the errors and success values as Exit
2156
- * @since 1.18.0
2157
- * @category combinators
1776
+ * @since 1.20.0
2158
1777
  */
2159
- export const exit: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, never, Exit.Exit<E, A>> = internal.exit
1778
+ export const matchErrorWithStrategy: {
1779
+ <E, A, R2, E2, B, R3, E3, C>(
1780
+ { executionStrategy, onFailure, onSuccess }: MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1781
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1782
+ <R, E, A, R2, E2, B, R3, E3, C>(
1783
+ fx: Fx<R, E, A>,
1784
+ flattenStrategy: FlattenStrategy,
1785
+ { executionStrategy, onFailure, onSuccess }: MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1786
+ ): Fx<Scope.Scope | R | R2 | R3, E2 | E3, B | C>
1787
+ } = dual(3, core.matchErrorWithStrategy)
2160
1788
 
2161
1789
  /**
2162
- * Capture the errors and success values as Either
2163
- * @since 1.18.0
2164
- * @category combinators
1790
+ * @since 1.20.0
2165
1791
  */
2166
- export const either: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, never, Either.Either<E, A>> = internal.either
1792
+ export const matchCause: {
1793
+ <E, A, R2, E2, B, R3, E3, C>(
1794
+ opts: MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1795
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1796
+
1797
+ <R, E, A, R2, E2, B, R3, E3, C>(
1798
+ fx: Fx<R, E, A>,
1799
+ opts: MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1800
+ ): Fx<Scope.Scope | R | R2 | R3, E2 | E3, B | C>
1801
+ } = dual(2, core.matchCause)
2167
1802
 
2168
1803
  /**
2169
- * Run an Fx until finding a value which satisfies the predicate.
2170
- * @since 1.18.0
2171
- * @category running
1804
+ * @since 1.20.0
2172
1805
  */
2173
- export const findFirst: {
2174
- <A, R2, E2>(
2175
- f: (a: A) => Effect.Effect<R2, E2, boolean>
2176
- ): <R, E>(fx: Fx<R, E, A>) => Effect.Effect<R2 | R, E2 | E, Option.Option<A>>
2177
- <R, E, A, R2, E2>(
1806
+ export const matchError: {
1807
+ <E, A, R2, E2, B, R3, E3, C>(
1808
+ opts: MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1809
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1810
+ <R, E, A, R2, E2, B, R3, E3, C>(
2178
1811
  fx: Fx<R, E, A>,
2179
- f: (a: A) => Effect.Effect<R2, E2, boolean>
2180
- ): Effect.Effect<R | R2, E | E2, Option.Option<A>>
2181
- } = internal.findFirst
1812
+ opts: core.MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1813
+ ): Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1814
+ } = dual(2, core.matchError)
2182
1815
 
2183
1816
  /**
2184
- * Grab the first value emitted by an Fx
2185
- * @since 1.18.0
2186
- * @category running
1817
+ * @since 1.20.0
2187
1818
  */
2188
- export const first: <R, E, A>(fx: Fx<R, E, A>) => Effect.Effect<R, E, Option.Option<A>> = findFirst(
2189
- constant(Effect.succeed(true))
2190
- )
1819
+ export const matchCauseConcurrently: {
1820
+ <E, A, R2, E2, B, R3, E3, C>(
1821
+ concurrency: number,
1822
+ opts: MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1823
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1824
+ <R, E, A, R2, E2, B, R3, E3, C>(
1825
+ fx: Fx<R, E, A>,
1826
+ concurrency: number,
1827
+ opts: core.MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1828
+ ): Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1829
+ } = dual(3, core.matchCauseConcurrently)
2191
1830
 
2192
1831
  /**
2193
- * Transform success values into failures and failures into successes.
2194
- * @since 1.18.0
2195
- * @category combinators
1832
+ * @since 1.20.0
2196
1833
  */
2197
- export const flip: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, A, E> = internal.flip
1834
+ export const matchErrorConcurrently: {
1835
+ <E, A, R2, E2, B, R3, E3, C>(
1836
+ concurrency: number,
1837
+ opts: MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1838
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1839
+ <R, E, A, R2, E2, B, R3, E3, C>(
1840
+ fx: Fx<R, E, A>,
1841
+ concurrency: number,
1842
+ opts: core.MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1843
+ ): Fx<Scope.Scope | R | R2 | R3, E2 | E3, B | C>
1844
+ } = dual(3, core.matchErrorConcurrently)
2198
1845
 
2199
1846
  /**
2200
- * Lift a nullable value into an Fx
2201
- * @since 1.18.0
2202
- * @category constructors
1847
+ * @since 1.20.0
2203
1848
  */
2204
- export const fromNullable: <A>(value: void | A | null | undefined) => Fx<never, never, NonNullable<A>> =
2205
- internal.fromNullable
2206
-
2207
- const if_: {
2208
- <R2, E2, B, R3, E3, C>(
2209
- onTrue: Fx<R2, E2, B>,
2210
- onFalse: Fx<R3, E3, C>
2211
- ): {
2212
- <R, E>(bool: Fx<R, E, boolean>): Fx<R2 | R3 | R, E2 | E3 | E, B | C>
2213
- (bool: boolean): Fx<R2 | R3, E2 | E3, B | C>
2214
- }
2215
- <R, E, R2, E2, B, R3, E3, C>(
2216
- bool: Fx<R, E, boolean>,
2217
- onTrue: Fx<R2, E2, B>,
2218
- onFalse: Fx<R3, E3, C>
2219
- ): Fx<R | R2 | R3, E | E2 | E3, B | C>
2220
- <R2, E2, B, R3, E3, C>(
2221
- bool: boolean,
2222
- onTrue: Fx<R2, E2, B>,
2223
- onFalse: Fx<R3, E3, C>
2224
- ): Fx<R2 | R3, E2 | E3, B | C>
2225
- } = internal.if
1849
+ export const switchMatchCause: {
1850
+ <E, A, R2, E2, B, R3, E3, C>(
1851
+ opts: MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1852
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
2226
1853
 
2227
- export {
2228
- /**
2229
- * Logical if/else using Fx.
2230
- * @since 1.18.0
2231
- * @category combinators
2232
- */
2233
- if_ as if
2234
- }
1854
+ <R, E, A, R2, E2, B, R3, E3, C>(
1855
+ fx: Fx<R, E, A>,
1856
+ opts: MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1857
+ ): Fx<Scope.Scope | R | R2 | R3, E2 | E3, B | C>
1858
+ } = dual(2, core.switchMatchCause)
2235
1859
 
2236
1860
  /**
2237
- * Logical if/else using static values.
2238
- * @since 1.18.0
2239
- * @category combinators
1861
+ * @since 1.20.0
2240
1862
  */
2241
- export const when: {
2242
- <B, C>(
2243
- onTrue: B,
2244
- onFalse: C
2245
- ): { <R, E>(bool: Fx<R, E, boolean>): Fx<R, E, B | C>; (bool: boolean): Fx<never, never, B | C> }
2246
- <R, E, B, C>(bool: Fx<R, E, boolean>, onTrue: B, onFalse: C): Fx<R, E, B | C>
2247
- <B, C>(bool: boolean, onTrue: B, onFalse: C): Fx<never, never, B | C>
2248
- } = internal.when
1863
+ export const switchMatchError: {
1864
+ <E, A, R2, E2, B, R3, E3, C>(
1865
+ opts: MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1866
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1867
+ <R, E, A, R2, E2, B, R3, E3, C>(
1868
+ fx: Fx<R, E, A>,
1869
+ opts: core.MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1870
+ ): Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1871
+ } = dual(2, core.switchMatchError)
2249
1872
 
2250
1873
  /**
2251
- * Mark an Fx as interruptible
2252
- * @since 1.18.0
2253
- * @category combinators
1874
+ * @since 1.20.0
2254
1875
  */
2255
- export const interruptible: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A> = internal.interruptible
1876
+ export const exhaustMatchCause: {
1877
+ <E, A, R2, E2, B, R3, E3, C>(
1878
+ opts: MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1879
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
2256
1880
 
2257
- /**
2258
- * Mark an Fx as uninterruptible
2259
- * @since 1.18.0
2260
- * @category combinators
2261
- */
2262
- export const uninterruptible: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A> = internal.uninterruptible
1881
+ <R, E, A, R2, E2, B, R3, E3, C>(
1882
+ fx: Fx<R, E, A>,
1883
+ opts: MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1884
+ ): Fx<Scope.Scope | R | R2 | R3, E2 | E3, B | C>
1885
+ } = dual(2, core.exhaustMatchCause)
2263
1886
 
2264
1887
  /**
2265
- * Locally set the value of a FiberRef
2266
- * @since 1.18.0
2267
- * @category FiberRef
1888
+ * @since 1.20.0
2268
1889
  */
2269
- export const locally: {
2270
- <A>(self: FiberRef<A>, value: A): <R, E, B>(use: Fx<R, E, B>) => Fx<R, E, B>
2271
- <R, E, B, A>(use: Fx<R, E, B>, self: FiberRef<A>, value: A): Fx<R, E, B>
2272
- } = internal.locally
1890
+ export const exhaustMatchError: {
1891
+ <E, A, R2, E2, B, R3, E3, C>(
1892
+ opts: MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1893
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1894
+ <R, E, A, R2, E2, B, R3, E3, C>(
1895
+ fx: Fx<R, E, A>,
1896
+ opts: core.MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1897
+ ): Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1898
+ } = dual(2, core.exhaustMatchError)
2273
1899
 
2274
1900
  /**
2275
- * Locally set the value of a FiberRef by updating the current value
2276
- * @since 1.18.0
2277
- * @category FiberRef
1901
+ * @since 1.20.0
2278
1902
  */
2279
- export const locallyWith: {
2280
- <A>(self: FiberRef<A>, f: (a: A) => A): <R, E, B>(use: Fx<R, E, B>) => Fx<R, E, B>
2281
- <R, E, B, A>(use: Fx<R, E, B>, self: FiberRef<A>, f: (a: A) => A): Fx<R, E, B>
2282
- } = internal.locallyWith
1903
+ export const exhaustMatchLatestCause: {
1904
+ <E, A, R2, E2, B, R3, E3, C>(
1905
+ opts: MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1906
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1907
+
1908
+ <R, E, A, R2, E2, B, R3, E3, C>(
1909
+ fx: Fx<R, E, A>,
1910
+ opts: MatchCauseOptions<E, A, R2, E2, B, R3, E3, C>
1911
+ ): Fx<Scope.Scope | R | R2 | R3, E2 | E3, B | C>
1912
+ } = dual(2, core.exhaustMatchLatestCause)
2283
1913
 
2284
1914
  /**
2285
- * Enable/disable tracer timing for an Fx
2286
- * @since 1.18.0
2287
- * @category tracing
1915
+ * @since 1.20.0
2288
1916
  */
2289
- export const withTracerTiming: {
2290
- (enabled: boolean): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2291
- <R, E, A>(fx: Fx<R, E, A>, enabled: boolean): Fx<R, E, A>
2292
- } = internal.withTracerTiming
1917
+ export const exhaustMatchLatestError: {
1918
+ <E, A, R2, E2, B, R3, E3, C>(
1919
+ opts: MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1920
+ ): <R>(fx: Fx<R, E, A>) => Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1921
+ <R, E, A, R2, E2, B, R3, E3, C>(
1922
+ fx: Fx<R, E, A>,
1923
+ opts: core.MatchErrorOptions<E, A, R2, E2, B, R3, E3, C>
1924
+ ): Fx<R | R2 | R3 | Scope.Scope, E2 | E3, B | C>
1925
+ } = dual(2, core.exhaustMatchLatestError)
2293
1926
 
2294
1927
  /**
2295
- * Configure the concurreny limit of Fibers running within an Fx
2296
- * @since 1.18.0
2297
- * @category concurrency
1928
+ * @since 1.20.0
2298
1929
  */
2299
- export const withConcurrency: {
2300
- (concurrency: number | "unbounded"): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2301
- <R, E, A>(fx: Fx<R, E, A>, concurrency: number | "unbounded"): Fx<R, E, A>
2302
- } = internal.withConcurrency
1930
+ export const exit: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, never, Exit.Exit<E, A>> = core.exit
2303
1931
 
2304
1932
  /**
2305
- * Add a span to your log messages
2306
- * @since 1.18.0
2307
- * @category logging
1933
+ * @since 1.20.0
2308
1934
  */
2309
- export const withLogSpan: {
2310
- (span: string): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2311
- <R, E, A>(fx: Fx<R, E, A>, span: string): Fx<R, E, A>
2312
- } = internal.withLogSpan
1935
+ export const either: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, never, Either.Either<E, A>> = core.either
2313
1936
 
2314
1937
  /**
2315
- * Configure the maximum number of operations to run before yielding to the runtime
2316
- * @since 1.18.0
2317
- * @category concurrency
1938
+ * @since 1.20.0
2318
1939
  */
2319
- export const withMaxOpsBeforeYield: {
2320
- (maxOps: number): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2321
- <R, E, A>(fx: Fx<R, E, A>, maxOps: number): Fx<R, E, A>
2322
- } = internal.withMaxOpsBeforeYield
1940
+ export const tuple: <const FX extends ReadonlyArray<Fx<any, any, any>>>(
1941
+ fx: FX
1942
+ ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, { readonly [K in keyof FX]: Fx.Success<FX[K]> }> = core.tuple
2323
1943
 
2324
1944
  /**
2325
- * Set the parent Span of an Fx
2326
- * @since 1.18.0
2327
- * @category tracing
1945
+ * @since 1.20.0
2328
1946
  */
2329
- export const withParentSpan: {
2330
- (parentSpan: Tracer.ParentSpan): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2331
- <R, E, A>(fx: Fx<R, E, A>, parentSpan: Tracer.ParentSpan): Fx<R, E, A>
2332
- } = internal.withParentSpan
1947
+ export const struct: <const FX extends Readonly<Record<string, Fx<any, any, any>>>>(
1948
+ fx: FX
1949
+ ) => Fx<Fx.Context<FX[string]>, Fx.Error<FX[string]>, { readonly [K in keyof FX]: Fx.Success<FX[K]> }> = core.struct
2333
1950
 
2334
1951
  /**
2335
- * Enable/disable request batching within an Fx
2336
- * @since 1.18.0
2337
- * @category batching
1952
+ * @since 1.20.0
2338
1953
  */
2339
- export const withRequestBatching: {
2340
- (requestBatching: boolean): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2341
- <R, E, A>(fx: Fx<R, E, A>, requestBatching: boolean): Fx<R, E, A>
2342
- } = internal.withRequestBatching
1954
+ export const all: {
1955
+ <const FX extends ReadonlyArray<Fx<any, any, any>>>(
1956
+ fx: FX
1957
+ ): Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, { readonly [K in keyof FX]: Fx.Success<FX[K]> }>
1958
+ <const FX extends Readonly<Record<string, Fx<any, any, any>>>>(
1959
+ fx: FX
1960
+ ): Fx<Fx.Context<FX[string]>, Fx.Error<FX[string]>, { readonly [K in keyof FX]: Fx.Success<FX[K]> }>
1961
+ } = core.all
2343
1962
 
2344
1963
  /**
2345
- * Set the request cache Effects running within an Fx
2346
- * @since 1.18.0
2347
- * @category batching
1964
+ * @since 1.20.0
2348
1965
  */
2349
- export const withRequestCache: {
2350
- (cache: Request.Cache): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2351
- <R, E, A>(fx: Fx<R, E, A>, cache: Request.Cache): Fx<R, E, A>
2352
- } = internal.withRequestCache
1966
+ export const toEnqueue: {
1967
+ <R2 = never, A = never>(
1968
+ queue: Ctx.Enqueue<R2, A> | Queue.Enqueue<A>
1969
+ ): <R, E>(fx: Fx<R, E, A>) => Effect.Effect<R | R2, E, void>
1970
+ <R, E, A, R2 = never>(fx: Fx<R, E, A>, queue: Ctx.Enqueue<R2, A> | Queue.Enqueue<A>): Effect.Effect<R | R2, E, void>
1971
+ } = dual(2, core.toEnqueue)
2353
1972
 
2354
1973
  /**
2355
- * Enable/disable request caching within an Fx
2356
- * @since 1.18.0
2357
- * @category batching
1974
+ * @since 1.20.0
2358
1975
  */
2359
- export const withRequestCaching: {
2360
- (requestCaching: boolean): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2361
- <R, E, A>(fx: Fx<R, E, A>, requestCaching: boolean): Fx<R, E, A>
2362
- } = internal.withRequestCaching
1976
+ export const debounce: {
1977
+ (delay: Duration.DurationInput): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | Scope.Scope, E, A>
1978
+ <R, E, A>(fx: Fx<R, E, A>, delay: Duration.DurationInput): Fx<R | Scope.Scope, E, A>
1979
+ } = dual(2, core.debounce)
2363
1980
 
2364
1981
  /**
2365
- * Configure the scheduler to use within an Fx
2366
- * @since 1.18.0
2367
- * @category concurrency
1982
+ * @since 1.20.0
2368
1983
  */
2369
- export const withScheduler: {
2370
- (scheduler: Scheduler): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2371
- <R, E, A>(fx: Fx<R, E, A>, scheduler: Scheduler): Fx<R, E, A>
2372
- } = internal.withScheduler
1984
+ export const throttle: {
1985
+ (delay: Duration.DurationInput): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | Scope.Scope, E, A>
1986
+ <R, E, A>(fx: Fx<R, E, A>, delay: Duration.DurationInput): Fx<R | Scope.Scope, E, A>
1987
+ } = dual(2, core.throttle)
2373
1988
 
2374
1989
  /**
2375
- * Set the span of an Fx
2376
- * @since 1.18.0
2377
- * @category tracing
2378
- */
2379
- export const withSpan: {
2380
- (
2381
- name: string,
2382
- options?: {
2383
- readonly attributes?: Record<string, unknown>
2384
- readonly links?: ReadonlyArray<Tracer.SpanLink>
2385
- readonly parent?: Tracer.ParentSpan
2386
- readonly root?: boolean
2387
- readonly context?: Context.Context<never>
2388
- }
2389
- ): <R, E, A>(self: Fx<R, E, A>) => Fx<R, E, A>
2390
- <R, E, A>(
2391
- self: Fx<R, E, A>,
2392
- name: string,
2393
- options?: {
2394
- readonly attributes?: Record<string, unknown>
2395
- readonly links?: ReadonlyArray<Tracer.SpanLink>
2396
- readonly parent?: Tracer.ParentSpan
2397
- readonly root?: boolean
2398
- readonly context?: Context.Context<never>
2399
- }
2400
- ): Fx<R, E, A>
2401
- } = internal.withSpan
2402
-
2403
- /**
2404
- * Set the tracer used within an Fx
2405
- * @since 1.18.0
2406
- * @category tracing
1990
+ * @since 1.20.0
2407
1991
  */
2408
- export const withTracer: {
2409
- (tracer: Tracer.Tracer): <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A>
2410
- <R, E, A>(fx: Fx<R, E, A>, tracer: Tracer.Tracer): Fx<R, E, A>
2411
- } = internal.withTracer
1992
+ export const throttleLatest: {
1993
+ (delay: Duration.DurationInput): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | Scope.Scope, E, A>
1994
+ <R, E, A>(fx: Fx<R, E, A>, delay: Duration.DurationInput): Fx<R | Scope.Scope, E, A>
1995
+ } = dual(2, core.throttleLatest)
2412
1996
 
2413
1997
  /**
2414
- * Partition an Fx into two Fx's based on a either-returning function.
2415
- * @since 1.18.0
2416
- * @category combinators
1998
+ * @since 1.20.0
2417
1999
  */
2418
- export const partitionMap: {
2419
- <A, B, C>(f: (a: A) => Either.Either<B, C>): <R, E>(self: Fx<R, E, A>) => readonly [Fx<R, E, B>, Fx<R, E, C>]
2420
- <R, E, A, B, C>(self: Fx<R, E, A>, f: (a: A) => Either.Either<B, C>): readonly [Fx<R, E, B>, Fx<R, E, C>]
2421
- } = internal.partitionMap
2000
+ export interface KeyedOptions<A, B, R2, E2, C> {
2001
+ readonly getKey: (a: A) => B
2002
+ readonly onValue: (ref: RefSubject<never, never, A>, key: B) => Fx<R2, E2, C>
2003
+ readonly debounce?: Duration.DurationInput
2004
+ }
2422
2005
 
2423
2006
  /**
2424
- * Convert a list of keyed values into persistent workflows for given each key of the list
2425
- * even when the list has been re-ordered.
2426
- *
2427
- * @since 1.18.0
2428
- * @category combinators
2007
+ * @since 1.20.0
2429
2008
  */
2430
2009
  export const keyed: {
2431
- <A, B, R2, E2, C>(
2432
- getKey: (a: A) => B,
2433
- f: (
2434
- ref: RefSubject<never, never, A>,
2435
- key: B
2436
- ) => FxInput<R2, E2, C>
2010
+ <A, B extends PropertyKey, R2, E2, C>(
2011
+ options: KeyedOptions<A, B, R2, E2, C>
2437
2012
  ): <R, E>(fx: Fx<R, E, ReadonlyArray<A>>) => Fx<R | R2, E | E2, ReadonlyArray<C>>
2438
2013
 
2439
- <R, E, A, B, R2, E2, C>(
2014
+ <R, E, A, B extends PropertyKey, R2, E2, C>(
2440
2015
  fx: Fx<R, E, ReadonlyArray<A>>,
2441
- getKey: (a: A) => B,
2442
- f: (
2443
- ref: RefSubject<never, never, A>,
2444
- key: B
2445
- ) => FxInput<R2, E2, C>
2016
+ options: KeyedOptions<A, B, R2, E2, C>
2446
2017
  ): Fx<R | R2, E | E2, ReadonlyArray<C>>
2447
- } = dual(3, internalKeyed.keyed)
2018
+ } = dual(2, coreKeyed.keyed)
2448
2019
 
2449
2020
  /**
2450
- * Map an Fx of values into workflows similar to Fx.switchMap, but
2451
- * instead of providing the value directly, it is exposed as a RefSubject to
2452
- * allow creating a persistent workflows similar to Fx.keyed but for a single value.
2453
- *
2454
- * @since 1.18.0
2455
- * @category combinators
2021
+ * @since 1.20.0
2022
+ */
2023
+ export interface WithKeyOptions<A, B, R2, E2, C> {
2024
+ readonly getKey: (a: A) => B
2025
+ readonly onValue: (ref: RefSubject<never, never, A>, key: B) => Fx<R2, E2, C>
2026
+ }
2027
+
2028
+ /**
2029
+ * @since 1.20.0
2456
2030
  */
2457
2031
  export const withKey: {
2458
- <A, B, R2, E2, C>(
2459
- getKey: (a: A) => B,
2460
- f: (
2461
- ref: RefSubject<never, never, A>,
2462
- key: B
2463
- ) => FxInput<R2, E2, C>
2032
+ <A, B extends PropertyKey, R2, E2, C>(
2033
+ options: WithKeyOptions<A, B, R2, E2, C>
2464
2034
  ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, C>
2465
2035
 
2466
- <R, E, A, B, R2, E2, C>(
2036
+ <R, E, A, B extends PropertyKey, R2, E2, C>(
2467
2037
  fx: Fx<R, E, A>,
2468
- getKey: (a: A) => B,
2469
- f: (
2470
- ref: RefSubject<never, never, A>,
2471
- key: B
2472
- ) => FxInput<R2, E2, C>
2038
+ options: WithKeyOptions<A, B, R2, E2, C>
2473
2039
  ): Fx<R | R2, E | E2, C>
2474
- } = dual(3, internalWithKey.withKey)
2040
+ } = dual(2, coreWithKey.withKey)
2475
2041
 
2476
2042
  const getTag = (a: { readonly _tag: string }): string => a._tag
2477
2043
 
@@ -2480,25 +2046,25 @@ const getTag = (a: { readonly _tag: string }): string => a._tag
2480
2046
  * that allow listening to changes of values with the same tag using the same
2481
2047
  * Fx.
2482
2048
  *
2483
- * @since 1.18.0
2049
+ * @since 1.20.0
2484
2050
  * @category combinators
2485
2051
  */
2486
2052
  export const matchTags: {
2487
2053
  <A extends { readonly _tag: string }, Matchers extends DefaultMatchersFrom<A>>(
2488
2054
  matchers: Matchers
2489
2055
  ): <R, E>(fx: Fx<R, E, A>) => Fx<
2490
- R | Fx.Context<Fx.FromInput<ReturnType<Matchers[keyof Matchers]>>>,
2491
- E | Fx.Error<Fx.FromInput<ReturnType<Matchers[keyof Matchers]>>>,
2492
- Fx.Success<Fx.FromInput<ReturnType<Matchers[keyof Matchers]>>>
2056
+ R | Fx.Context<ReturnType<Matchers[keyof Matchers]>>,
2057
+ E | Fx.Error<ReturnType<Matchers[keyof Matchers]>>,
2058
+ Fx.Success<ReturnType<Matchers[keyof Matchers]>>
2493
2059
  >
2494
2060
 
2495
2061
  <R, E, A extends { readonly _tag: string }, Matchers extends DefaultMatchersFrom<A>>(
2496
2062
  fx: Fx<R, E, A>,
2497
2063
  matchers: Matchers
2498
2064
  ): Fx<
2499
- R | Fx.Context<Fx.FromInput<ReturnType<Matchers[keyof Matchers]>>>,
2500
- E | Fx.Error<Fx.FromInput<ReturnType<Matchers[keyof Matchers]>>>,
2501
- Fx.Success<Fx.FromInput<ReturnType<Matchers[keyof Matchers]>>>
2065
+ R | Fx.Context<ReturnType<Matchers[keyof Matchers]>>,
2066
+ E | Fx.Error<ReturnType<Matchers[keyof Matchers]>>,
2067
+ Fx.Success<ReturnType<Matchers[keyof Matchers]>>
2502
2068
  >
2503
2069
  } = dual(
2504
2070
  2,
@@ -2506,62 +2072,47 @@ export const matchTags: {
2506
2072
  fx: Fx<R, E, A>,
2507
2073
  matchers: Matchers
2508
2074
  ): Fx<
2509
- R | Fx.Context<Fx.FromInput<ReturnType<Matchers[keyof Matchers]>>>,
2510
- E | Fx.Error<Fx.FromInput<ReturnType<Matchers[keyof Matchers]>>>,
2511
- Fx.Success<Fx.FromInput<ReturnType<Matchers[keyof Matchers]>>>
2075
+ R | Fx.Context<ReturnType<Matchers[keyof Matchers]>>,
2076
+ E | Fx.Error<ReturnType<Matchers[keyof Matchers]>>,
2077
+ Fx.Success<ReturnType<Matchers[keyof Matchers]>>
2512
2078
  > {
2513
- return withKey(fx, getTag, (ref, tag: A["_tag"]) => matchers[tag](ref as any))
2079
+ return withKey(fx, {
2080
+ getKey: getTag,
2081
+ onValue: (ref, tag: A["_tag"]) => matchers[tag](ref as any)
2082
+ })
2514
2083
  }
2515
2084
  )
2516
2085
 
2517
2086
  /**
2518
- * @since 1.18.0
2087
+ * @since 1.20.0
2519
2088
  */
2520
2089
  export type DefaultMatchersFrom<A extends { readonly _tag: string }> = {
2521
2090
  readonly [Tag in A["_tag"]]: (
2522
2091
  value: RefSubject<never, never, Extract<A, { readonly _tag: Tag }>>
2523
- ) => FxInput<any, any, any>
2092
+ ) => Fx<any, any, any>
2524
2093
  }
2525
2094
 
2526
2095
  /**
2527
- * @since 1.18.0
2528
- */
2529
- export const drainLayer: <FXS extends ReadonlyArray<Fx<any, never, any>>>(...fxs: FXS) => Layer.Layer<
2530
- Exclude<Fx.Context<FXS[number]>, Scope.Scope>,
2531
- never,
2532
- never
2533
- > = internal.drainLayer
2534
-
2535
- /* #endregion */
2536
-
2537
- /**
2538
- * @since 1.18.0
2539
- */
2540
- export function isFx<R = unknown, E = unknown, A = unknown>(u: unknown): u is Fx<R, E, A> {
2541
- return typeof u === "object" && u !== null && TypeId in u
2542
- }
2543
-
2544
- /**
2545
- * @since 1.18.0
2096
+ * @since 1.20.0
2546
2097
  */
2547
2098
  export const matchOption: {
2548
2099
  <A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
2549
- onNone: () => FxInput<R2, E2, B>,
2550
- onSome: (a: RefSubject<never, never, A>) => FxInput<R3, E3, C>
2551
- ): <R, E>(fx: Fx<R, E, Option.Option<A>>) => Fx<R | R2, E | E2, B | C>
2100
+ onNone: () => Fx<R2, E2, B>,
2101
+ onSome: (a: RefSubject<never, never, A>) => Fx<R3, E3, C>
2102
+ ): <R, E>(fx: Fx<R, E, Option.Option<A>>) => Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, B | C>
2552
2103
 
2553
2104
  <R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
2554
2105
  fx: Fx<R, E, Option.Option<A>>,
2555
- onNone: () => FxInput<R2, E2, B>,
2556
- onSome: (a: RefSubject<never, never, A>) => FxInput<R3, E3, C>
2557
- ): Fx<R | R2, E | E2, B | C>
2106
+ onNone: () => Fx<R2, E2, B>,
2107
+ onSome: (a: RefSubject<never, never, A>) => Fx<R3, E3, C>
2108
+ ): Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, B | C>
2558
2109
  } = dual(
2559
2110
  3,
2560
2111
  function matchOption<R, E, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
2561
2112
  fx: Fx<R, E, Option.Option<A>>,
2562
- onNone: () => FxInput<R2, E2, B>,
2563
- onSome: (a: RefSubject<never, never, A>) => FxInput<R3, E3, C>
2564
- ): Fx<R | R2, E | E2, B | C> {
2113
+ onNone: () => Fx<R2, E2, B>,
2114
+ onSome: (a: RefSubject<never, never, A>) => Fx<R3, E3, C>
2115
+ ): Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, B | C> {
2565
2116
  return matchTags(fx, {
2566
2117
  None: onNone,
2567
2118
  Some: (some) => onSome(transform(some, (s) => s.value, (value) => Option.some(value) as Option.Some<A>))
@@ -2570,48 +2121,48 @@ export const matchOption: {
2570
2121
  )
2571
2122
 
2572
2123
  /**
2573
- * @since 1.18.0
2124
+ * @since 1.20.0
2574
2125
  */
2575
2126
  export const getOrElse: {
2576
2127
  <A, R2 = never, E2 = never, B = never>(
2577
- orElse: () => FxInput<R2, E2, B>
2578
- ): <R, E>(fx: Fx<R, E, Option.Option<A>>) => Fx<R | R2, E | E2, A | B>
2128
+ orElse: () => Fx<R2, E2, B>
2129
+ ): <R, E>(fx: Fx<R, E, Option.Option<A>>) => Fx<R | R2 | Scope.Scope, E | E2, A | B>
2579
2130
 
2580
2131
  <R, E, A, R2 = never, E2 = never, B = never>(
2581
2132
  fx: Fx<R, E, Option.Option<A>>,
2582
- orElse: () => FxInput<R2, E2, B>
2583
- ): Fx<R | R2, E | E2, A | B>
2133
+ orElse: () => Fx<R2, E2, B>
2134
+ ): Fx<R | R2 | Scope.Scope, E | E2, A | B>
2584
2135
  } = dual(
2585
2136
  2,
2586
2137
  function getOrElse<R, E, A, R2 = never, E2 = never, B = never>(
2587
2138
  fx: Fx<R, E, Option.Option<A>>,
2588
- orElse: () => FxInput<R2, E2, B>
2589
- ): Fx<R | R2, E | E2, A | B> {
2139
+ orElse: () => Fx<R2, E2, B>
2140
+ ): Fx<R | R2 | Scope.Scope, E | E2, A | B> {
2590
2141
  return matchOption(fx, orElse, identity)
2591
2142
  }
2592
2143
  )
2593
2144
 
2594
2145
  /**
2595
- * @since 1.18.0
2146
+ * @since 1.20.0
2596
2147
  */
2597
2148
  export const matchEither: {
2598
2149
  <E1, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
2599
- onLeft: (e: RefSubject<never, never, E1>) => FxInput<R2, E2, B>,
2600
- onRight: (a: RefSubject<never, never, A>) => FxInput<R3, E3, C>
2601
- ): <R, E>(fx: Fx<R, E, Either.Either<E1, A>>) => Fx<R | R2, E | E2, B | C>
2150
+ onLeft: (e: RefSubject<never, never, E1>) => Fx<R2, E2, B>,
2151
+ onRight: (a: RefSubject<never, never, A>) => Fx<R3, E3, C>
2152
+ ): <R, E>(fx: Fx<R, E, Either.Either<E1, A>>) => Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, B | C>
2602
2153
 
2603
2154
  <R, E, E1, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
2604
2155
  fx: Fx<R, E, Either.Either<E1, A>>,
2605
- onLeft: (e: RefSubject<never, never, E1>) => FxInput<R2, E2, B>,
2606
- onRight: (a: RefSubject<never, never, A>) => FxInput<R3, E3, C>
2607
- ): Fx<R | R2, E | E2, B | C>
2156
+ onLeft: (e: RefSubject<never, never, E1>) => Fx<R2, E2, B>,
2157
+ onRight: (a: RefSubject<never, never, A>) => Fx<R3, E3, C>
2158
+ ): Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, B | C>
2608
2159
  } = dual(
2609
2160
  3,
2610
2161
  function matchEither<R, E, E1, A, R2 = never, E2 = never, B = never, R3 = never, E3 = never, C = never>(
2611
2162
  fx: Fx<R, E, Either.Either<E1, A>>,
2612
- onLeft: (e: RefSubject<never, never, E1>) => FxInput<R2, E2, B>,
2613
- onRight: (a: RefSubject<never, never, A>) => FxInput<R3, E3, C>
2614
- ): Fx<R | R2, E | E2, B | C> {
2163
+ onLeft: (e: RefSubject<never, never, E1>) => Fx<R2, E2, B>,
2164
+ onRight: (a: RefSubject<never, never, A>) => Fx<R3, E3, C>
2165
+ ): Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, B | C> {
2615
2166
  return matchTags(fx, {
2616
2167
  Left: (left) => onLeft(transform(left, (a) => a.left, (a) => Either.left(a) as Either.Left<E1, A>)),
2617
2168
  Right: (right) => onRight(transform(right, (s) => s.right, (value) => Either.right(value) as Either.Right<E1, A>))
@@ -2620,26 +2171,49 @@ export const matchEither: {
2620
2171
  )
2621
2172
 
2622
2173
  /**
2623
- * @since 1.18.0
2174
+ * @since 1.20.0
2175
+ */
2176
+ export const at: {
2177
+ (duration: Duration.DurationInput): <A>(value: A) => Fx<never, never, A>
2178
+ <A>(value: A, duration: Duration.DurationInput): Fx<never, never, A>
2179
+ } = dual(
2180
+ 2,
2181
+ <A>(value: A, duration: Duration.DurationInput): Fx<never, never, A> =>
2182
+ fromEffect(Effect.delay(Effect.succeed(value), duration))
2183
+ )
2184
+
2185
+ /**
2186
+ * @since 1.20.0
2187
+ */
2188
+ export function drainLayer<FXS extends ReadonlyArray<Fx<any, never, any>>>(...fxs: FXS): Layer.Layer<
2189
+ Exclude<Fx.Context<FXS[number]>, Scope.Scope>,
2190
+ never,
2191
+ never
2192
+ > {
2193
+ return Layer.scopedDiscard(Effect.forkWithErrorHandler(core.drain(core.mergeAll(fxs)), Effect.logError))
2194
+ }
2195
+
2196
+ /**
2197
+ * @since 1.20.0
2624
2198
  */
2625
2199
  export const fork = <R, E, A>(fx: Fx<R, E, A>): Effect.Effect<R, never, Fiber.RuntimeFiber<E, void>> =>
2626
2200
  Effect.fork(drain(fx))
2627
2201
 
2628
2202
  /**
2629
- * @since 1.18.0
2203
+ * @since 1.20.0
2630
2204
  */
2631
2205
  export const forkScoped = <R, E, A>(
2632
2206
  fx: Fx<R, E, A>
2633
2207
  ): Effect.Effect<R | Scope.Scope, never, Fiber.RuntimeFiber<E, void>> => Effect.forkScoped(drain(fx))
2634
2208
 
2635
2209
  /**
2636
- * @since 1.18.0
2210
+ * @since 1.20.0
2637
2211
  */
2638
2212
  export const forkDaemon = <R, E, A>(fx: Fx<R, E, A>): Effect.Effect<R, never, Fiber.RuntimeFiber<E, void>> =>
2639
2213
  Effect.forkDaemon(drain(fx))
2640
2214
 
2641
2215
  /**
2642
- * @since 1.18.0
2216
+ * @since 1.20.0
2643
2217
  */
2644
2218
  export const forkIn: {
2645
2219
  (scope: Scope.Scope): <R, E, A>(fx: Fx<R, E, A>) => Effect.Effect<R, never, Fiber.RuntimeFiber<E, void>>
@@ -2650,19 +2224,279 @@ export const forkIn: {
2650
2224
  ): Effect.Effect<R, never, Fiber.RuntimeFiber<E, void>> => Effect.forkIn(drain(fx), scope))
2651
2225
 
2652
2226
  /**
2653
- * @since 1.18.0
2227
+ * @since 1.20.0
2228
+ */
2229
+ export const fromAsyncIterable: <A>(iterable: AsyncIterable<A>) => Fx<never, never, A> = core.fromAsyncIterable
2230
+
2231
+ /**
2232
+ * @since 1.20.0
2233
+ */
2234
+ export const partitionMap: {
2235
+ <A, B, C>(
2236
+ f: (a: A) => Either.Either<B, C>
2237
+ ): <R, E>(fx: Fx<R, E, A>) => readonly [Fx<Scope.Scope | R, E, B>, Fx<Scope.Scope | R, E, C>]
2238
+ <R, E, A, B, C>(
2239
+ fx: Fx<R, E, A>,
2240
+ f: (a: A) => Either.Either<B, C>
2241
+ ): readonly [Fx<Scope.Scope | R, E, B>, Fx<Scope.Scope | R, E, C>]
2242
+ } = dual(2, function partitionMap<R, E, A, B, C>(
2243
+ fx: Fx<R, E, A>,
2244
+ f: (a: A) => Either.Either<B, C>
2245
+ ): readonly [Fx<R | Scope.Scope, E, B>, Fx<R | Scope.Scope, E, C>] {
2246
+ const source = coreShare.multicast(core.map(fx, f))
2247
+
2248
+ return [
2249
+ core.filterMap(source, Either.getLeft),
2250
+ core.filterMap(source, Either.getRight)
2251
+ ]
2252
+ })
2253
+
2254
+ /**
2255
+ * @since 1.20.0
2256
+ */
2257
+ export const gen: <Y extends Effect.EffectGen<any, any, any>, FX extends Fx<any, any, any>>(
2258
+ f: (_: Effect.Adapter) => Generator<Y, FX, any>
2259
+ ) => Fx<
2260
+ Effect.Effect.Context<Y["value"]> | Fx.Context<FX>,
2261
+ Effect.Effect.Error<Y["value"]> | Fx.Error<FX>,
2262
+ Fx.Success<FX>
2263
+ > = core.gen
2264
+
2265
+ /**
2266
+ * @since 1.20.0
2267
+ */
2268
+ export const genScoped: <Y extends Effect.EffectGen<any, any, any>, FX extends Fx<any, any, any>>(
2269
+ f: (_: Effect.Adapter) => Generator<Y, FX, any>
2270
+ ) => Fx<
2271
+ Exclude<Effect.Effect.Context<Y["value"]> | Fx.Context<FX>, Scope.Scope>,
2272
+ Effect.Effect.Error<Y["value"]> | Fx.Error<FX>,
2273
+ Fx.Success<FX>
2274
+ > = core.genScoped
2275
+
2276
+ /**
2277
+ * @since 1.20.0
2278
+ */
2279
+ export const findFirst: {
2280
+ <A, B extends A>(refinement: Predicate.Refinement<A, B>): <R, E>(fx: Fx<R, E, A>) => Effect.Effect<R, E, B>
2281
+ <A>(predicate: Predicate.Predicate<A>): <R, E>(fx: Fx<R, E, A>) => Effect.Effect<R, E, A>
2282
+ <R, E, A, B extends A>(fx: Fx<R, E, A>, refinement: Predicate.Refinement<A, B>): Effect.Effect<R, E, B>
2283
+ <R, E, A>(fx: Fx<R, E, A>, predicate: Predicate.Predicate<A>): Effect.Effect<R, E, A>
2284
+ } = dual(2, core.findFirst)
2285
+
2286
+ /**
2287
+ * @since 1.20.0
2288
+ */
2289
+ export const first: <R, E, A>(fx: Fx<R, E, A>) => Effect.Effect<R, E, A> = core.first
2290
+
2291
+ /**
2292
+ * @since 1.20.0
2293
+ */
2294
+ export const mergeFirst: {
2295
+ <R2, E2, B>(that: Fx<R2, E2, B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A | B>
2296
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, that: Fx<R2, E2, B>): Fx<R | R2, E | E2, A>
2297
+ } = dual(2, core.mergeFirst)
2298
+
2299
+ /**
2300
+ * @since 1.20.0
2654
2301
  */
2655
2302
  export const mergeRace: {
2656
- <R2, E2, B>(other: Fx<R2, E2, B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R2 | R, E2 | E, B | A>
2657
- <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, other: Fx<R2, E2, B>): Fx<R | R2, E | E2, A | B>
2658
- } = internal.mergeRace
2303
+ <R2, E2, B>(that: Fx<R2, E2, B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A | B>
2304
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, that: Fx<R2, E2, B>): Fx<R | R2, E | E2, A | B>
2305
+ } = dual(2, core.mergeRace)
2306
+
2307
+ /**
2308
+ * @since 1.20.0
2309
+ */
2310
+ export const raceAll: <const FX extends ReadonlyArray<Fx<any, any, any>>>(
2311
+ fx: FX
2312
+ ) => Fx<Fx.Context<FX[number]>, Fx.Error<FX[number]>, Fx.Success<FX[number]>> = core.raceAll
2313
+
2314
+ /**
2315
+ * @since 1.20.0
2316
+ */
2317
+ export const race: {
2318
+ <R2, E2, B>(that: Fx<R2, E2, B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A | B>
2319
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, that: Fx<R2, E2, B>): Fx<R | R2, E | E2, A | B>
2320
+ } = dual(2, core.race)
2321
+
2322
+ /**
2323
+ * @since 1.20.0
2324
+ */
2325
+ export const snapshot: {
2326
+ <R, E, B, A, C>(sampled: Fx<R, E, B>, g: (a: A, b: B) => C): <R2, E2>(fx: Fx<R2, E2, A>) => Fx<R | R2, E | E2, C>
2327
+ <R, E, A, R2, E2, B, C>(fx: Fx<R, E, A>, sampled: Fx<R2, E2, B>, f: (a: A, b: B) => C): Fx<R | R2, E | E2, C>
2328
+ } = dual(3, core.snapshot)
2329
+
2330
+ /**
2331
+ * @since 1.20.0
2332
+ */
2333
+ export const sample: {
2334
+ <R, E, B>(sampled: Fx<R, E, B>): <R2, E2, A>(fx: Fx<R2, E2, A>) => Fx<R | R2, E | E2, B>
2335
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, sampled: Fx<R2, E2, B>): Fx<R | R2, E | E2, B>
2336
+ } = dual(2, core.sample)
2337
+
2338
+ /**
2339
+ * @since 1.20.0
2340
+ */
2341
+ export const snapshotEffect: {
2342
+ <R2, E2, B, A, R3, E3, C>(sampled: Fx<R2, E2, B>, g: (a: A, b: B) => Effect.Effect<R3, E3, C>): <R, E>(
2343
+ fx: Fx<R, E, A>
2344
+ ) => Fx<R | R2 | R3, E | E2 | E3, C>
2345
+ <R, E, A, R2, E2, B, R3, E3, C>(
2346
+ fx: Fx<R, E, A>,
2347
+ sampled: Fx<R2, E2, B>,
2348
+ f: (a: A, b: B) => Effect.Effect<R3, E3, C>
2349
+ ): Fx<R | R2 | R3, E | E2 | E3, C>
2350
+ } = dual(3, core.snapshotEffect)
2351
+
2352
+ const if_: {
2353
+ <R2, E2, B, R3, E3, C>(options: { readonly onTrue: Fx<R2, E2, B>; readonly onFalse: Fx<R3, E3, C> }): <R, E>(
2354
+ bool: Fx<R, E, boolean>
2355
+ ) => Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, B | C>
2356
+ <R, E, R2, E2, B, R3, E3, C>(
2357
+ bool: Fx<R, E, boolean>,
2358
+ options: { readonly onTrue: Fx<R2, E2, B>; readonly onFalse: Fx<R3, E3, C> }
2359
+ ): Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, B | C>
2360
+ } = dual(2, core.if)
2361
+
2362
+ export {
2363
+ /**
2364
+ * @since 1.20.0
2365
+ */
2366
+ if_ as if
2367
+ }
2368
+
2369
+ /**
2370
+ * @since 1.20.0
2371
+ */
2372
+ export const when: {
2373
+ <B, C>(
2374
+ options: { readonly onTrue: B; readonly onFalse: C }
2375
+ ): <R, E>(bool: Fx<R, E, boolean>) => Fx<R | Scope.Scope, E, B | C>
2376
+ <R, E, B, C>(
2377
+ bool: Fx<R, E, boolean>,
2378
+ options: { readonly onTrue: B; readonly onFalse: C }
2379
+ ): Fx<R | Scope.Scope, E, B | C>
2380
+ } = dual(2, core.when)
2381
+
2382
+ /**
2383
+ * @since 1.20.0
2384
+ */
2385
+ export const withEmitter = <E, A, R = never>(
2386
+ f: (emitter: Emitter.Emitter<E, A>) => Effect.Effect<R, E, unknown>
2387
+ ): Fx<R | Scope.Scope, E, A> => core.make<R | Scope.Scope, E, A>((sink) => Emitter.withEmitter(sink, f))
2659
2388
 
2660
2389
  /**
2390
+ * Create an Fx which will wait a specified duration of time where no
2391
+ * events have occurred before emitting a value.
2661
2392
  * @since 1.18.0
2662
2393
  */
2663
- export abstract class FxEffectBase<R, E, A, R2, E2, B> extends internalProtos.FxEffectBase<R, E, A, R2, E2, B>
2664
- implements Fx<R, E, A>, Effect.Effect<R2, E2, B>
2665
- {
2666
- protected abstract toFx(): Fx<R, E, A>
2667
- protected abstract toEffect(): Effect.Effect<R2, E2, B>
2394
+ export const delay: {
2395
+ (delay: DurationInput): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | Scope.Scope, E, A>
2396
+ <R, E, A>(fx: Fx<R, E, A>, delay: DurationInput): Fx<R | Scope.Scope, E, A>
2397
+ } = dual(2, function<R, E, A>(fx: Fx<R, E, A>, delay: DurationInput): Fx<R | Scope.Scope, E, A> {
2398
+ return core.flatMap(fx, (a) => core.fromEffect(Effect.delay(Effect.succeed(a), delay)))
2399
+ })
2400
+
2401
+ /**
2402
+ * @since 1.20.0
2403
+ */
2404
+ export const ensuring: {
2405
+ <R2>(finalizer: Effect.Effect<R2, never, unknown>): <R, E, A>(self: Fx<R, E, A>) => Fx<R | R2, E, A>
2406
+ <R, E, A, R2>(self: Fx<R, E, A>, finalizer: Effect.Effect<R2, never, unknown>): Fx<R | R2, E, A>
2407
+ } = dual(2, function<R, E, A, R2>(
2408
+ self: Fx<R, E, A>,
2409
+ finalizer: Effect.Effect<R2, never, unknown>
2410
+ ): Fx<R | R2, E, A> {
2411
+ return core.middleware(self, (effect) => Effect.ensuring(effect, finalizer))
2412
+ })
2413
+
2414
+ /**
2415
+ * @since 1.20.0
2416
+ */
2417
+ export const flip = <R, E, A>(fx: Fx<R, E, A>): Fx<R, A, E> =>
2418
+ core.make<R, A, E>((sink) =>
2419
+ fx.run(Sink.make(
2420
+ (cause) =>
2421
+ Either.match(Cause.failureOrCause(cause), {
2422
+ onLeft: (e) => sink.onSuccess(e),
2423
+ onRight: (c) => sink.onFailure(c)
2424
+ }),
2425
+ (a) => sink.onFailure(Cause.fail(a))
2426
+ ))
2427
+ )
2428
+
2429
+ /**
2430
+ * @since 1.20.0
2431
+ */
2432
+ export const fromNullable = <A>(value: A | null | undefined | void): Fx<never, never, NonNullable<A>> => {
2433
+ if (value === null || value === undefined) {
2434
+ return core.empty
2435
+ } else {
2436
+ return core.succeed(value)
2437
+ }
2438
+ }
2439
+
2440
+ /**
2441
+ * @since 1.20.0
2442
+ */
2443
+ export function fromDequeue<A>(dequeue: Queue.Dequeue<A>): Fx<never, never, A>
2444
+ export function fromDequeue<I, A>(dequeue: Ctx.Dequeue<I, A>): Fx<I, never, A>
2445
+ export function fromDequeue<I, A>(dequeue: Ctx.Dequeue<I, A> | Queue.Dequeue<A>): Fx<I, never, A> {
2446
+ return core.make((sink) =>
2447
+ Effect.repeatWhileEffect(
2448
+ Effect.matchCauseEffect(dequeue.take, sink),
2449
+ () => dequeueIsActive(dequeue)
2450
+ )
2451
+ )
2452
+ }
2453
+
2454
+ /**
2455
+ * @internal
2456
+ */
2457
+ export function dequeueIsActive<I, A>(
2458
+ dequeue: Ctx.Dequeue<I, A> | Queue.Dequeue<A>
2459
+ ): Effect.Effect<I, never, boolean> {
2460
+ if (Queue.DequeueTypeId in dequeue) {
2461
+ return Effect.sync(() => dequeue.isActive())
2462
+ } else {
2463
+ return dequeue.isActive
2464
+ }
2465
+ }
2466
+
2467
+ /**
2468
+ * @since 1.20.0
2469
+ */
2470
+ export function fromPubSub<A>(pubSub: PubSub.PubSub<A>): Fx<Scope.Scope, never, A>
2471
+ export function fromPubSub<I, A>(pubSub: Ctx.PubSub<I, A>): Fx<I | Scope.Scope, never, A>
2472
+ export function fromPubSub<I, A>(pubSub: Ctx.PubSub<I, A> | PubSub.PubSub<A>): Fx<I | Scope.Scope, never, A> {
2473
+ return core.acquireUseRelease(
2474
+ pubSub.subscribe,
2475
+ (q) => fromDequeue(q),
2476
+ (d) => d.shutdown
2477
+ )
2478
+ }
2479
+
2480
+ /**
2481
+ * @since 1.20.0
2482
+ */
2483
+ export abstract class FxEffectBase<R, E, A, R2, E2, B> extends protos.FxEffectBase<R, E, A, R2, E2, B> {
2484
+ private _fx: Fx<R, E, A> | undefined
2485
+
2486
+ /**
2487
+ * @since 1.20.0
2488
+ */
2489
+ run<R3>(sink: Sink.Sink<R3, E, A>): Effect.Effect<R | R3, never, void> {
2490
+ return (this._fx ||= this.toFx()).run(sink)
2491
+ }
2492
+
2493
+ /**
2494
+ * @since 1.20.0
2495
+ */
2496
+ abstract toFx(): Fx<R, E, A>
2497
+
2498
+ /**
2499
+ * @since 1.20.0
2500
+ */
2501
+ abstract toEffect(): Effect.Effect<R2, E2, B>
2668
2502
  }