@typed/fx 0.0.9 → 0.0.12

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 (539) hide show
  1. package/.eslintcache +1 -1
  2. package/cjs/Fx.d.ts +19 -8
  3. package/cjs/Fx.d.ts.map +1 -1
  4. package/cjs/Fx.js +12 -2
  5. package/cjs/Fx.js.map +1 -1
  6. package/cjs/Subject.d.ts +22 -0
  7. package/cjs/Subject.d.ts.map +1 -0
  8. package/cjs/Subject.js +58 -0
  9. package/cjs/Subject.js.map +1 -0
  10. package/cjs/_internal.d.ts +19 -20
  11. package/cjs/_internal.d.ts.map +1 -1
  12. package/cjs/_internal.js +21 -76
  13. package/cjs/_internal.js.map +1 -1
  14. package/cjs/combine.d.ts +4 -4
  15. package/cjs/combine.d.ts.map +1 -1
  16. package/cjs/combine.js +9 -13
  17. package/cjs/combine.js.map +1 -1
  18. package/cjs/continueWith.d.ts +2 -2
  19. package/cjs/continueWith.d.ts.map +1 -1
  20. package/cjs/continueWith.js +2 -3
  21. package/cjs/continueWith.js.map +1 -1
  22. package/cjs/debounce.d.ts +2 -11
  23. package/cjs/debounce.d.ts.map +1 -1
  24. package/cjs/debounce.js +4 -24
  25. package/cjs/debounce.js.map +1 -1
  26. package/cjs/delay.d.ts +2 -2
  27. package/cjs/delay.d.ts.map +1 -1
  28. package/cjs/delay.js +4 -5
  29. package/cjs/delay.js.map +1 -1
  30. package/cjs/during.d.ts +1 -1
  31. package/cjs/during.d.ts.map +1 -1
  32. package/cjs/during.js +6 -9
  33. package/cjs/during.js.map +1 -1
  34. package/cjs/filterLoop.d.ts +25 -0
  35. package/cjs/filterLoop.d.ts.map +1 -0
  36. package/cjs/filterLoop.js +108 -0
  37. package/cjs/filterLoop.js.map +1 -0
  38. package/cjs/filterMap.d.ts +24 -0
  39. package/cjs/filterMap.d.ts.map +1 -0
  40. package/cjs/{map.js → filterMap.js} +27 -40
  41. package/cjs/filterMap.js.map +1 -0
  42. package/cjs/flatMap.d.ts +2 -10
  43. package/cjs/flatMap.d.ts.map +1 -1
  44. package/cjs/flatMap.js +10 -25
  45. package/cjs/flatMap.js.map +1 -1
  46. package/cjs/flatMapConcurrently.d.ts +2 -2
  47. package/cjs/flatMapConcurrently.d.ts.map +1 -1
  48. package/cjs/flatMapConcurrently.js +3 -3
  49. package/cjs/flatMapConcurrently.js.map +1 -1
  50. package/cjs/fromEffect.d.ts +34 -15
  51. package/cjs/fromEffect.d.ts.map +1 -1
  52. package/cjs/fromEffect.js +28 -15
  53. package/cjs/fromEffect.js.map +1 -1
  54. package/cjs/fromIterable.d.ts +9 -0
  55. package/cjs/fromIterable.d.ts.map +1 -0
  56. package/cjs/{drain.js → fromIterable.js} +14 -13
  57. package/cjs/fromIterable.js.map +1 -0
  58. package/cjs/hold.d.ts +16 -17
  59. package/cjs/hold.d.ts.map +1 -1
  60. package/cjs/hold.js +28 -25
  61. package/cjs/hold.js.map +1 -1
  62. package/cjs/index.d.ts +19 -15
  63. package/cjs/index.d.ts.map +1 -1
  64. package/cjs/index.js +19 -28
  65. package/cjs/index.js.map +1 -1
  66. package/cjs/mapCause.d.ts +5 -0
  67. package/cjs/mapCause.d.ts.map +1 -0
  68. package/cjs/mapCause.js +41 -0
  69. package/cjs/mapCause.js.map +1 -0
  70. package/cjs/mapEffect.d.ts +4 -0
  71. package/cjs/mapEffect.d.ts.map +1 -0
  72. package/cjs/{never.js → mapEffect.js} +6 -4
  73. package/cjs/mapEffect.js.map +1 -0
  74. package/cjs/merge.d.ts +3 -3
  75. package/cjs/merge.d.ts.map +1 -1
  76. package/cjs/merge.js +7 -11
  77. package/cjs/merge.js.map +1 -1
  78. package/cjs/multicast.d.ts +20 -19
  79. package/cjs/multicast.d.ts.map +1 -1
  80. package/cjs/multicast.js +30 -34
  81. package/cjs/multicast.js.map +1 -1
  82. package/cjs/orElse.d.ts +2 -5
  83. package/cjs/orElse.d.ts.map +1 -1
  84. package/cjs/orElse.js +9 -11
  85. package/cjs/orElse.js.map +1 -1
  86. package/cjs/provide.d.ts +8 -8
  87. package/cjs/provide.d.ts.map +1 -1
  88. package/cjs/provide.js +23 -9
  89. package/cjs/provide.js.map +1 -1
  90. package/cjs/runCollect.d.ts +4 -0
  91. package/cjs/runCollect.d.ts.map +1 -0
  92. package/cjs/{from.js → runCollect.js} +6 -15
  93. package/cjs/runCollect.js.map +1 -0
  94. package/cjs/runDrain.d.ts +4 -0
  95. package/cjs/runDrain.d.ts.map +1 -0
  96. package/cjs/runDrain.js +38 -0
  97. package/cjs/runDrain.js.map +1 -0
  98. package/cjs/runObserve.d.ts +4 -0
  99. package/cjs/runObserve.d.ts.map +1 -0
  100. package/cjs/{takeUntil.js → runObserve.js} +6 -17
  101. package/cjs/runObserve.js.map +1 -0
  102. package/cjs/runReduce.d.ts +6 -0
  103. package/cjs/runReduce.d.ts.map +1 -0
  104. package/cjs/runReduce.js +50 -0
  105. package/cjs/runReduce.js.map +1 -0
  106. package/cjs/scheduled.d.ts +4 -4
  107. package/cjs/scheduled.d.ts.map +1 -1
  108. package/cjs/scheduled.js +8 -8
  109. package/cjs/scheduled.js.map +1 -1
  110. package/cjs/since.d.ts +1 -1
  111. package/cjs/since.d.ts.map +1 -1
  112. package/cjs/since.js +5 -9
  113. package/cjs/since.js.map +1 -1
  114. package/cjs/skipRepeats.d.ts +1 -1
  115. package/cjs/skipRepeats.d.ts.map +1 -1
  116. package/cjs/skipRepeats.js +4 -5
  117. package/cjs/skipRepeats.js.map +1 -1
  118. package/cjs/skipWhile.d.ts +3 -3
  119. package/cjs/skipWhile.d.ts.map +1 -1
  120. package/cjs/skipWhile.js +12 -15
  121. package/cjs/skipWhile.js.map +1 -1
  122. package/cjs/slice.d.ts +3 -3
  123. package/cjs/slice.d.ts.map +1 -1
  124. package/cjs/slice.js +15 -23
  125. package/cjs/slice.js.map +1 -1
  126. package/cjs/snapshot.d.ts +2 -2
  127. package/cjs/snapshot.d.ts.map +1 -1
  128. package/cjs/snapshot.js +6 -8
  129. package/cjs/snapshot.js.map +1 -1
  130. package/cjs/suspendSucceed.d.ts +1 -1
  131. package/cjs/suspendSucceed.d.ts.map +1 -1
  132. package/cjs/suspendSucceed.js +1 -25
  133. package/cjs/suspendSucceed.js.map +1 -1
  134. package/cjs/switchMap.d.ts +1 -9
  135. package/cjs/switchMap.d.ts.map +1 -1
  136. package/cjs/switchMap.js +5 -18
  137. package/cjs/switchMap.js.map +1 -1
  138. package/cjs/takeWhile.d.ts +3 -3
  139. package/cjs/takeWhile.d.ts.map +1 -1
  140. package/cjs/takeWhile.js +6 -38
  141. package/cjs/takeWhile.js.map +1 -1
  142. package/cjs/tapEffect.d.ts +5 -0
  143. package/cjs/tapEffect.d.ts.map +1 -0
  144. package/cjs/{observe.js → tapEffect.js} +8 -15
  145. package/cjs/tapEffect.js.map +1 -0
  146. package/cjs/throttle.d.ts +2 -2
  147. package/cjs/throttle.d.ts.map +1 -1
  148. package/cjs/throttle.js +6 -13
  149. package/cjs/throttle.js.map +1 -1
  150. package/cjs/transform.d.ts +13 -8
  151. package/cjs/transform.d.ts.map +1 -1
  152. package/cjs/transform.js +9 -2
  153. package/cjs/transform.js.map +1 -1
  154. package/cjs/until.d.ts +1 -1
  155. package/cjs/until.d.ts.map +1 -1
  156. package/cjs/until.js +5 -7
  157. package/cjs/until.js.map +1 -1
  158. package/{esm/fromCallback.d.ts → cjs/withEmitter.d.ts} +4 -4
  159. package/cjs/withEmitter.d.ts.map +1 -0
  160. package/cjs/{fromCallback.js → withEmitter.js} +22 -16
  161. package/cjs/withEmitter.js.map +1 -0
  162. package/cjs/zip.d.ts +4 -4
  163. package/cjs/zip.d.ts.map +1 -1
  164. package/cjs/zip.js +11 -15
  165. package/cjs/zip.js.map +1 -1
  166. package/cjs/zipIterable.d.ts +4 -0
  167. package/cjs/zipIterable.d.ts.map +1 -0
  168. package/cjs/{zipItems.js → zipIterable.js} +23 -20
  169. package/cjs/zipIterable.js.map +1 -0
  170. package/esm/Fx.d.ts +19 -8
  171. package/esm/Fx.d.ts.map +1 -1
  172. package/esm/Fx.js +10 -1
  173. package/esm/Fx.js.map +1 -1
  174. package/esm/Subject.d.ts +22 -0
  175. package/esm/Subject.d.ts.map +1 -0
  176. package/esm/Subject.js +32 -0
  177. package/esm/Subject.js.map +1 -0
  178. package/esm/_internal.d.ts +19 -20
  179. package/esm/_internal.d.ts.map +1 -1
  180. package/esm/_internal.js +16 -72
  181. package/esm/_internal.js.map +1 -1
  182. package/esm/combine.d.ts +4 -4
  183. package/esm/combine.d.ts.map +1 -1
  184. package/esm/combine.js +12 -16
  185. package/esm/combine.js.map +1 -1
  186. package/esm/continueWith.d.ts +2 -2
  187. package/esm/continueWith.d.ts.map +1 -1
  188. package/esm/continueWith.js +3 -4
  189. package/esm/continueWith.js.map +1 -1
  190. package/esm/debounce.d.ts +2 -11
  191. package/esm/debounce.d.ts.map +1 -1
  192. package/esm/debounce.js +7 -27
  193. package/esm/debounce.js.map +1 -1
  194. package/esm/delay.d.ts +2 -2
  195. package/esm/delay.d.ts.map +1 -1
  196. package/esm/delay.js +6 -7
  197. package/esm/delay.js.map +1 -1
  198. package/esm/during.d.ts +1 -1
  199. package/esm/during.d.ts.map +1 -1
  200. package/esm/during.js +9 -12
  201. package/esm/during.js.map +1 -1
  202. package/esm/filterLoop.d.ts +25 -0
  203. package/esm/filterLoop.d.ts.map +1 -0
  204. package/esm/filterLoop.js +76 -0
  205. package/esm/filterLoop.js.map +1 -0
  206. package/esm/filterMap.d.ts +24 -0
  207. package/esm/filterMap.d.ts.map +1 -0
  208. package/esm/filterMap.js +53 -0
  209. package/esm/filterMap.js.map +1 -0
  210. package/esm/flatMap.d.ts +2 -10
  211. package/esm/flatMap.d.ts.map +1 -1
  212. package/esm/flatMap.js +9 -24
  213. package/esm/flatMap.js.map +1 -1
  214. package/esm/flatMapConcurrently.d.ts +2 -2
  215. package/esm/flatMapConcurrently.d.ts.map +1 -1
  216. package/esm/flatMapConcurrently.js +3 -3
  217. package/esm/flatMapConcurrently.js.map +1 -1
  218. package/esm/fromEffect.d.ts +34 -15
  219. package/esm/fromEffect.d.ts.map +1 -1
  220. package/esm/fromEffect.js +25 -13
  221. package/esm/fromEffect.js.map +1 -1
  222. package/esm/fromIterable.d.ts +9 -0
  223. package/esm/fromIterable.d.ts.map +1 -0
  224. package/esm/fromIterable.js +14 -0
  225. package/esm/fromIterable.js.map +1 -0
  226. package/esm/hold.d.ts +16 -17
  227. package/esm/hold.d.ts.map +1 -1
  228. package/esm/hold.js +28 -25
  229. package/esm/hold.js.map +1 -1
  230. package/esm/index.d.ts +19 -15
  231. package/esm/index.d.ts.map +1 -1
  232. package/esm/index.js +19 -16
  233. package/esm/index.js.map +1 -1
  234. package/esm/mapCause.d.ts +5 -0
  235. package/esm/mapCause.d.ts.map +1 -0
  236. package/esm/mapCause.js +13 -0
  237. package/esm/mapCause.js.map +1 -0
  238. package/esm/mapEffect.d.ts +4 -0
  239. package/esm/mapEffect.d.ts.map +1 -0
  240. package/esm/mapEffect.js +5 -0
  241. package/esm/mapEffect.js.map +1 -0
  242. package/esm/merge.d.ts +3 -3
  243. package/esm/merge.d.ts.map +1 -1
  244. package/esm/merge.js +9 -13
  245. package/esm/merge.js.map +1 -1
  246. package/esm/multicast.d.ts +20 -19
  247. package/esm/multicast.d.ts.map +1 -1
  248. package/esm/multicast.js +33 -37
  249. package/esm/multicast.js.map +1 -1
  250. package/esm/orElse.d.ts +2 -5
  251. package/esm/orElse.d.ts.map +1 -1
  252. package/esm/orElse.js +10 -10
  253. package/esm/orElse.js.map +1 -1
  254. package/esm/provide.d.ts +8 -8
  255. package/esm/provide.d.ts.map +1 -1
  256. package/esm/provide.js +20 -6
  257. package/esm/provide.js.map +1 -1
  258. package/esm/runCollect.d.ts +4 -0
  259. package/esm/runCollect.d.ts.map +1 -0
  260. package/esm/runCollect.js +7 -0
  261. package/esm/runCollect.js.map +1 -0
  262. package/esm/runDrain.d.ts +4 -0
  263. package/esm/runDrain.d.ts.map +1 -0
  264. package/esm/runDrain.js +11 -0
  265. package/esm/runDrain.js.map +1 -0
  266. package/esm/runObserve.d.ts +4 -0
  267. package/esm/runObserve.d.ts.map +1 -0
  268. package/esm/runObserve.js +8 -0
  269. package/esm/runObserve.js.map +1 -0
  270. package/esm/runReduce.d.ts +6 -0
  271. package/esm/runReduce.d.ts.map +1 -0
  272. package/esm/runReduce.js +22 -0
  273. package/esm/runReduce.js.map +1 -0
  274. package/esm/scheduled.d.ts +4 -4
  275. package/esm/scheduled.d.ts.map +1 -1
  276. package/esm/scheduled.js +8 -8
  277. package/esm/scheduled.js.map +1 -1
  278. package/esm/since.d.ts +1 -1
  279. package/esm/since.d.ts.map +1 -1
  280. package/esm/since.js +8 -12
  281. package/esm/since.js.map +1 -1
  282. package/esm/skipRepeats.d.ts +1 -1
  283. package/esm/skipRepeats.d.ts.map +1 -1
  284. package/esm/skipRepeats.js +5 -6
  285. package/esm/skipRepeats.js.map +1 -1
  286. package/esm/skipWhile.d.ts +3 -3
  287. package/esm/skipWhile.d.ts.map +1 -1
  288. package/esm/skipWhile.js +13 -16
  289. package/esm/skipWhile.js.map +1 -1
  290. package/esm/slice.d.ts +3 -3
  291. package/esm/slice.d.ts.map +1 -1
  292. package/esm/slice.js +17 -25
  293. package/esm/slice.js.map +1 -1
  294. package/esm/snapshot.d.ts +2 -2
  295. package/esm/snapshot.d.ts.map +1 -1
  296. package/esm/snapshot.js +8 -10
  297. package/esm/snapshot.js.map +1 -1
  298. package/esm/suspendSucceed.d.ts +1 -1
  299. package/esm/suspendSucceed.d.ts.map +1 -1
  300. package/esm/suspendSucceed.js +1 -2
  301. package/esm/suspendSucceed.js.map +1 -1
  302. package/esm/switchMap.d.ts +1 -9
  303. package/esm/switchMap.d.ts.map +1 -1
  304. package/esm/switchMap.js +6 -18
  305. package/esm/switchMap.js.map +1 -1
  306. package/esm/takeWhile.d.ts +3 -3
  307. package/esm/takeWhile.d.ts.map +1 -1
  308. package/esm/takeWhile.js +8 -17
  309. package/esm/takeWhile.js.map +1 -1
  310. package/esm/tapEffect.d.ts +5 -0
  311. package/esm/tapEffect.d.ts.map +1 -0
  312. package/esm/tapEffect.js +6 -0
  313. package/esm/tapEffect.js.map +1 -0
  314. package/esm/throttle.d.ts +2 -2
  315. package/esm/throttle.d.ts.map +1 -1
  316. package/esm/throttle.js +9 -16
  317. package/esm/throttle.js.map +1 -1
  318. package/esm/transform.d.ts +13 -8
  319. package/esm/transform.d.ts.map +1 -1
  320. package/esm/transform.js +6 -1
  321. package/esm/transform.js.map +1 -1
  322. package/esm/until.d.ts +1 -1
  323. package/esm/until.d.ts.map +1 -1
  324. package/esm/until.js +8 -10
  325. package/esm/until.js.map +1 -1
  326. package/{cjs/fromCallback.d.ts → esm/withEmitter.d.ts} +4 -4
  327. package/esm/withEmitter.d.ts.map +1 -0
  328. package/esm/withEmitter.js +26 -0
  329. package/esm/withEmitter.js.map +1 -0
  330. package/esm/zip.d.ts +4 -4
  331. package/esm/zip.d.ts.map +1 -1
  332. package/esm/zip.js +14 -18
  333. package/esm/zip.js.map +1 -1
  334. package/esm/zipIterable.d.ts +4 -0
  335. package/esm/zipIterable.d.ts.map +1 -0
  336. package/esm/zipIterable.js +26 -0
  337. package/esm/zipIterable.js.map +1 -0
  338. package/package.json +107 -113
  339. package/perf/_internal.ts +39 -35
  340. package/perf/cases/filter-map-reduce.ts +48 -0
  341. package/perf/cases/flatMap.ts +49 -0
  342. package/perf/cases/switchMap.ts +36 -0
  343. package/perf/readme-base.md +14 -0
  344. package/perf/readme.md +40 -0
  345. package/perf/runFullSuite.ts +37 -0
  346. package/perf/runPerfTest.ts +18 -0
  347. package/perf/tsconfig.json +1 -1
  348. package/src/Fx.ts +35 -10
  349. package/src/Subject.ts +46 -0
  350. package/src/_internal.ts +59 -114
  351. package/src/combine.test.ts +15 -16
  352. package/src/combine.ts +44 -48
  353. package/src/continueWith.test.ts +26 -0
  354. package/src/continueWith.ts +9 -11
  355. package/src/debounce.test.ts +4 -6
  356. package/src/debounce.ts +30 -49
  357. package/src/delay.test.ts +5 -6
  358. package/src/delay.ts +9 -8
  359. package/src/during.test.ts +39 -0
  360. package/src/during.ts +43 -47
  361. package/src/filterLoop.test.ts +63 -0
  362. package/src/filterLoop.ts +143 -0
  363. package/src/filterMap.test.ts +33 -0
  364. package/src/filterMap.ts +71 -0
  365. package/src/flatMap.test.ts +39 -12
  366. package/src/flatMap.ts +25 -51
  367. package/src/flatMapConcurrently.test.ts +23 -0
  368. package/src/flatMapConcurrently.ts +6 -12
  369. package/src/fromEffect.ts +74 -26
  370. package/src/fromIterable.ts +15 -0
  371. package/src/hold.test.ts +3 -3
  372. package/src/hold.ts +48 -44
  373. package/src/index.ts +19 -15
  374. package/src/mapCause.test.ts +34 -0
  375. package/src/mapCause.ts +16 -0
  376. package/src/mapEffect.test.ts +21 -0
  377. package/src/mapEffect.ts +17 -0
  378. package/src/merge.test.ts +10 -30
  379. package/src/merge.ts +17 -38
  380. package/src/multicast.test.ts +22 -28
  381. package/src/multicast.ts +71 -57
  382. package/src/orElse.test.ts +22 -0
  383. package/src/orElse.ts +21 -34
  384. package/src/periodic.test.ts +4 -4
  385. package/src/provide.test.ts +56 -0
  386. package/src/provide.ts +47 -36
  387. package/src/runCollect.ts +19 -0
  388. package/src/runDrain.ts +23 -0
  389. package/src/runObserve.ts +31 -0
  390. package/src/runReduce.ts +64 -0
  391. package/src/scheduled.ts +28 -26
  392. package/src/since.test.ts +40 -0
  393. package/src/since.ts +25 -42
  394. package/src/skipRepeats.test.ts +28 -0
  395. package/src/skipRepeats.ts +8 -9
  396. package/src/skipWhile.test.ts +44 -0
  397. package/src/skipWhile.ts +36 -22
  398. package/src/slice.test.ts +12 -10
  399. package/src/slice.ts +36 -42
  400. package/src/snapshot.test.ts +51 -0
  401. package/src/snapshot.ts +48 -37
  402. package/src/suspendSucceed.ts +2 -4
  403. package/src/switchMap.test.ts +23 -13
  404. package/src/switchMap.ts +32 -50
  405. package/src/takeWhile.test.ts +44 -0
  406. package/src/takeWhile.ts +20 -25
  407. package/src/tapEffect.ts +24 -0
  408. package/src/throttle.test.ts +5 -7
  409. package/src/throttle.ts +37 -42
  410. package/src/transform.ts +14 -6
  411. package/src/until.test.ts +8 -14
  412. package/src/until.ts +22 -32
  413. package/src/withEmitter.test.ts +28 -0
  414. package/src/withEmitter.ts +49 -0
  415. package/src/zip.test.ts +12 -13
  416. package/src/zip.ts +45 -52
  417. package/src/zipIterable.test.ts +19 -0
  418. package/src/zipIterable.ts +51 -0
  419. package/cjs/Sink.d.ts +0 -25
  420. package/cjs/Sink.d.ts.map +0 -1
  421. package/cjs/Sink.js +0 -66
  422. package/cjs/Sink.js.map +0 -1
  423. package/cjs/TSemaphore.d.ts +0 -4
  424. package/cjs/TSemaphore.d.ts.map +0 -1
  425. package/cjs/TSemaphore.js +0 -33
  426. package/cjs/TSemaphore.js.map +0 -1
  427. package/cjs/drain.d.ts +0 -7
  428. package/cjs/drain.d.ts.map +0 -1
  429. package/cjs/drain.js.map +0 -1
  430. package/cjs/empty.d.ts +0 -3
  431. package/cjs/empty.d.ts.map +0 -1
  432. package/cjs/empty.js +0 -9
  433. package/cjs/empty.js.map +0 -1
  434. package/cjs/from.d.ts +0 -11
  435. package/cjs/from.d.ts.map +0 -1
  436. package/cjs/from.js.map +0 -1
  437. package/cjs/fromCallback.d.ts.map +0 -1
  438. package/cjs/fromCallback.js.map +0 -1
  439. package/cjs/loop.d.ts +0 -4
  440. package/cjs/loop.d.ts.map +0 -1
  441. package/cjs/loop.js +0 -34
  442. package/cjs/loop.js.map +0 -1
  443. package/cjs/map.d.ts +0 -28
  444. package/cjs/map.d.ts.map +0 -1
  445. package/cjs/map.js.map +0 -1
  446. package/cjs/never.d.ts +0 -2
  447. package/cjs/never.d.ts.map +0 -1
  448. package/cjs/never.js.map +0 -1
  449. package/cjs/observe.d.ts +0 -7
  450. package/cjs/observe.d.ts.map +0 -1
  451. package/cjs/observe.js.map +0 -1
  452. package/cjs/reduce.d.ts +0 -7
  453. package/cjs/reduce.d.ts.map +0 -1
  454. package/cjs/reduce.js +0 -64
  455. package/cjs/reduce.js.map +0 -1
  456. package/cjs/takeUntil.d.ts +0 -4
  457. package/cjs/takeUntil.d.ts.map +0 -1
  458. package/cjs/takeUntil.js.map +0 -1
  459. package/cjs/tap.d.ts +0 -9
  460. package/cjs/tap.d.ts.map +0 -1
  461. package/cjs/tap.js +0 -54
  462. package/cjs/tap.js.map +0 -1
  463. package/cjs/zipItems.d.ts +0 -4
  464. package/cjs/zipItems.d.ts.map +0 -1
  465. package/cjs/zipItems.js.map +0 -1
  466. package/esm/Sink.d.ts +0 -25
  467. package/esm/Sink.d.ts.map +0 -1
  468. package/esm/Sink.js +0 -31
  469. package/esm/Sink.js.map +0 -1
  470. package/esm/TSemaphore.d.ts +0 -4
  471. package/esm/TSemaphore.d.ts.map +0 -1
  472. package/esm/TSemaphore.js +0 -5
  473. package/esm/TSemaphore.js.map +0 -1
  474. package/esm/drain.d.ts +0 -7
  475. package/esm/drain.d.ts.map +0 -1
  476. package/esm/drain.js +0 -12
  477. package/esm/drain.js.map +0 -1
  478. package/esm/empty.d.ts +0 -3
  479. package/esm/empty.d.ts.map +0 -1
  480. package/esm/empty.js +0 -5
  481. package/esm/empty.js.map +0 -1
  482. package/esm/from.d.ts +0 -11
  483. package/esm/from.d.ts.map +0 -1
  484. package/esm/from.js +0 -15
  485. package/esm/from.js.map +0 -1
  486. package/esm/fromCallback.d.ts.map +0 -1
  487. package/esm/fromCallback.js +0 -20
  488. package/esm/fromCallback.js.map +0 -1
  489. package/esm/loop.d.ts +0 -4
  490. package/esm/loop.d.ts.map +0 -1
  491. package/esm/loop.js +0 -29
  492. package/esm/loop.js.map +0 -1
  493. package/esm/map.d.ts +0 -28
  494. package/esm/map.d.ts.map +0 -1
  495. package/esm/map.js +0 -64
  496. package/esm/map.js.map +0 -1
  497. package/esm/never.d.ts +0 -2
  498. package/esm/never.d.ts.map +0 -1
  499. package/esm/never.js +0 -4
  500. package/esm/never.js.map +0 -1
  501. package/esm/observe.d.ts +0 -7
  502. package/esm/observe.d.ts.map +0 -1
  503. package/esm/observe.js +0 -12
  504. package/esm/observe.js.map +0 -1
  505. package/esm/reduce.d.ts +0 -7
  506. package/esm/reduce.d.ts.map +0 -1
  507. package/esm/reduce.js +0 -35
  508. package/esm/reduce.js.map +0 -1
  509. package/esm/takeUntil.d.ts +0 -4
  510. package/esm/takeUntil.d.ts.map +0 -1
  511. package/esm/takeUntil.js +0 -19
  512. package/esm/takeUntil.js.map +0 -1
  513. package/esm/tap.d.ts +0 -9
  514. package/esm/tap.d.ts.map +0 -1
  515. package/esm/tap.js +0 -23
  516. package/esm/tap.js.map +0 -1
  517. package/esm/zipItems.d.ts +0 -4
  518. package/esm/zipItems.d.ts.map +0 -1
  519. package/esm/zipItems.js +0 -23
  520. package/esm/zipItems.js.map +0 -1
  521. package/perf/filter-map-reduce.ts +0 -49
  522. package/perf/flatMap.ts +0 -48
  523. package/perf/switchMap.ts +0 -40
  524. package/src/Sink.ts +0 -84
  525. package/src/TSemaphore.ts +0 -8
  526. package/src/drain.ts +0 -21
  527. package/src/empty.ts +0 -5
  528. package/src/from.test.ts +0 -18
  529. package/src/from.ts +0 -18
  530. package/src/fromCallback.ts +0 -40
  531. package/src/loop.ts +0 -37
  532. package/src/map.ts +0 -83
  533. package/src/never.ts +0 -5
  534. package/src/observe.ts +0 -24
  535. package/src/reduce.ts +0 -81
  536. package/src/takeUntil.ts +0 -29
  537. package/src/tap.ts +0 -48
  538. package/src/zipItems.test.ts +0 -21
  539. package/src/zipItems.ts +0 -41
@@ -0,0 +1,26 @@
1
+ import * as Effect from '@effect/core/io/Effect';
2
+ import * as Exit from '@effect/core/io/Exit';
3
+ import { unsafeForkUnstarted } from '@effect/core/io/Fiber/_internal/runtime';
4
+ import { flow, pipe } from '@fp-ts/data/Function';
5
+ import { Fx } from './Fx.js';
6
+ export function withEmitter(f) {
7
+ return Fx((sink) => {
8
+ return Effect.withFiberRuntime((fiber, status) => {
9
+ const unsafeRun = (eff, observer) => {
10
+ const f = unsafeForkUnstarted(eff, fiber, status.runtimeFlags);
11
+ f.addObserver(observer);
12
+ f.start(eff);
13
+ };
14
+ let canceler = Effect.unit;
15
+ return pipe(Effect.addFinalizer(Effect.suspendSucceed(() => canceler)), Effect.zipRight(Effect.asyncEffect((cb) => {
16
+ canceler = f({
17
+ emit: (a) => unsafeRun(sink.emit(a), (exit) => Exit.isFailure(exit) ? cb(Effect.failCause(exit.cause)) : undefined),
18
+ failCause: (e) => unsafeRun(sink.failCause(e), flow(Effect.done, cb)),
19
+ end: () => unsafeRun(sink.end, flow(Effect.done, cb)),
20
+ });
21
+ return canceler;
22
+ })));
23
+ });
24
+ });
25
+ }
26
+ //# sourceMappingURL=withEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withEmitter.js","sourceRoot":"","sources":["../src/withEmitter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAE7E,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAW,EAAE,EAAE,MAAM,SAAS,CAAA;AAErC,MAAM,UAAU,WAAW,CACzB,CAIwB;IAExB,OAAO,EAAE,CAAU,CAAK,IAAuB,EAAE,EAAE;QACjD,OAAO,MAAM,CAAC,gBAAgB,CAAiC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC/E,MAAM,SAAS,GAAG,CAChB,GAA2B,EAC3B,QAAyC,EACzC,EAAE;gBACF,MAAM,CAAC,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;gBAC9D,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;gBACvB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACd,CAAC,CAAA;YAED,IAAI,QAAQ,GAAuB,MAAM,CAAC,IAAI,CAAA;YAE9C,OAAO,IAAI,CACT,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,EAC1D,MAAM,CAAC,QAAQ,CACb,MAAM,CAAC,WAAW,CAA6C,CAAC,EAAE,EAAE,EAAE;gBACpE,QAAQ,GAAG,CAAC,CAAC;oBACX,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACV,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAC/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CACpE;oBACH,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACrE,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;iBACtD,CAAC,CAAA;gBAEF,OAAO,QAAQ,CAAA;YACjB,CAAC,CAAC,CACH,CACF,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
package/esm/zip.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Fx } from './Fx.js';
2
- export declare function zip<R2, E2, B, E3>(other: Fx<R2, E2, B, E3>): <R, E, A, E1>(self: Fx<R, E, A, E1>) => Fx<R2 | R, E2 | E, readonly [A, B], E3 | E1>;
3
- export declare function zipAll<FX extends ReadonlyArray<Fx<any, any, any, any>>>(fx: readonly [...FX]): Fx<Fx.ResourcesOf<FX[number]>, Fx.ErrorsOf<FX[number]>, {
2
+ export declare function zip<R2, E2, B>(second: Fx<R2, E2, B>): <R, E, A>(first: Fx<R, E, A>) => Fx<R2 | R, E2 | E, readonly [A, B]>;
3
+ export declare function zipAll<FX extends ReadonlyArray<Fx<any, any, any>>>(fx: readonly [...FX]): Fx<Fx.ResourcesOf<FX[number]>, Fx.ErrorsOf<FX[number]>, {
4
4
  readonly [K in keyof FX]: Fx.OutputOf<FX[K]>;
5
- }, Fx.ReturnErrorsOf<FX[number]>>;
6
- export declare function zipAll<R2, E2, B, E3>(fx: Iterable<Fx<R2, E2, B, E3>>): Fx<R2, E2, ReadonlyArray<B>, E3>;
5
+ }>;
6
+ export declare function zipAll<R, E, A>(iterable: Iterable<Fx<R, E, A>>): Fx<R, E, ReadonlyArray<A>>;
7
7
  //# sourceMappingURL=zip.d.ts.map
package/esm/zip.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../src/zip.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAI5B,wBAAgB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,wFAG1D;AAED,wBAAgB,MAAM,CAAC,EAAE,SAAS,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EACrE,EAAE,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,GACnB,EAAE,CACH,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAC1B,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EACvB;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAAE,EAChD,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAC9B,CAAA;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAClC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAC9B,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../src/zip.ts"],"names":[],"mappings":"AAIA,OAAO,EAAW,EAAE,EAAE,MAAM,SAAS,CAAA;AAGrC,wBAAgB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,wEAGnD;AAED,wBAAgB,MAAM,CAAC,EAAE,SAAS,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAChE,EAAE,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,GACnB,EAAE,CACH,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAC1B,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EACvB;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAAE,CACjD,CAAA;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA"}
package/esm/zip.js CHANGED
@@ -1,24 +1,20 @@
1
1
  import * as Effect from '@effect/core/io/Effect';
2
- import * as Ref from '@effect/core/io/Ref';
3
- import { flow, pipe } from '@fp-ts/data/Function';
2
+ import { pipe } from '@fp-ts/data/Function';
4
3
  import * as Maybe from '@tsplus/stdlib/data/Maybe';
5
- import { Fx } from './Fx.js';
6
- import { Sink } from './Sink.js';
7
- import { refCountDeferred, tupleRef } from './_internal.js';
8
- export function zip(other) {
9
- return (self) => zipAll([self, other]);
4
+ import { Emitter, Fx } from './Fx.js';
5
+ import { withDynamicCountdownLatch } from './_internal.js';
6
+ export function zip(second) {
7
+ return (first) => zipAll([first, second]);
10
8
  }
11
- export function zipAll(fx) {
12
- return Fx((sink) => Effect.gen(function* ($) {
13
- const array = Array.from(fx);
14
- const deferred = yield* $(refCountDeferred(true, array.length));
15
- const refs = Array.from(yield* $(Effect.forEach(array, () => Ref.makeRef(() => Maybe.none))));
16
- const ref = tupleRef(refs);
17
- const emitIfReady = pipe(ref.get, Effect.map((as) => as.filter(Maybe.isSome).map((x) => x.value)), Effect.flatMap((bs) => bs.length === array.length
18
- ? pipe(sink.event(bs), Effect.flatMap(() => ref.set(Array(array.length).fill(Maybe.none))))
19
- : Effect.unit));
20
- yield* $(Effect.forEachWithIndex(array, (fx, i) => Effect.fork(fx.run(Sink((a) => pipe(refs[i].set(Maybe.some(a)), Effect.zipRight(emitIfReady)), flow(sink.error, deferred.error), pipe(deferred.decrement, Effect.flatMap(() => deferred.endIfComplete(sink.end))))))));
21
- return yield* $(deferred.await);
9
+ export function zipAll(iterable) {
10
+ return Fx((emitter) => Effect.suspendSucceed(() => {
11
+ const array = Array.from(iterable);
12
+ return pipe(Effect.sync(() => Array(array.length)), Effect.flatMap((ref) => Effect.suspendSucceed(() => {
13
+ const emitIfReady = pipe(Effect.sync(() => ref.filter(Maybe.isSome).map((x) => x.value)), Effect.flatMap((bs) => bs.length === array.length
14
+ ? Effect.suspendSucceed(() => (ref.fill(Maybe.none), emitter.emit(bs)))
15
+ : Effect.unit));
16
+ return withDynamicCountdownLatch(array.length, ({ latch }) => Effect.forEachWithIndex(array, (push, i) => Effect.forkScoped(push.run(Emitter((a) => pipe(Effect.sync(() => (ref[i] = Maybe.some(a))), Effect.zipRight(emitIfReady)), emitter.failCause, latch.countDown)))), emitter.end);
17
+ })));
22
18
  }));
23
19
  }
24
20
  //# sourceMappingURL=zip.js.map
package/esm/zip.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"zip.js","sourceRoot":"","sources":["../src/zip.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zip.js","sourceRoot":"","sources":["../src/zip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,2BAA2B,CAAA;AAElD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE1D,MAAM,UAAU,GAAG,CAAY,MAAqB;IAClD,OAAO,CAAU,KAAkB,EAAuC,EAAE,CAC1E,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;AAC3B,CAAC;AAYD,MAAM,UAAU,MAAM,CAAU,QAA+B;IAC7D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CACpB,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAElC,OAAO,IAAI,CACT,MAAM,CAAC,IAAI,CAAmB,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EACxD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE;YACzB,MAAM,WAAW,GAAG,IAAI,CACtB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CACpB,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;gBACxB,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvE,CAAC,CAAC,MAAM,CAAC,IAAI,CAChB,CACF,CAAA;YAED,OAAO,yBAAyB,CAC9B,KAAK,CAAC,MAAM,EACZ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CACZ,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CACzC,MAAM,CAAC,UAAU,CACf,IAAI,CAAC,GAAG,CACN,OAAO,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,IAAI,CACF,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3C,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC7B,EACH,OAAO,CAAC,SAAS,EACjB,KAAK,CAAC,SAAS,CAChB,CACF,CACF,CACF,EACH,OAAO,CAAC,GAAG,CACZ,CAAA;QACH,CAAC,CAAC,CACH,CACF,CAAA;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Fx } from './Fx.js';
2
+ export declare function zipIterable<A, B, C>(iterable: Iterable<A>, f: (a: A, b: B) => C): <R, E>(fx: Fx<R, E, B>) => Fx<R, E, C>;
3
+ export declare function withIterable<A>(iterable: Iterable<A>): <R, E, B>(fx: Fx<R, E, B>) => Fx<R, E, A>;
4
+ //# sourceMappingURL=zipIterable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zipIterable.d.ts","sourceRoot":"","sources":["../src/zipIterable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,EAAE,EAAE,MAAM,SAAS,CAAA;AAGrC,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,0CAE/E;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,6CAEpD"}
@@ -0,0 +1,26 @@
1
+ import * as Effect from '@effect/core/io/Effect';
2
+ import { identity, pipe } from '@fp-ts/data/Function';
3
+ import { Emitter, Fx } from './Fx.js';
4
+ import { exitEarly, onEarlyExitFailure } from './_internal.js';
5
+ export function zipIterable(iterable, f) {
6
+ return (fx) => zipIterable_(fx, iterable, f);
7
+ }
8
+ export function withIterable(iterable) {
9
+ return (fx) => zipIterable_(fx, iterable, identity);
10
+ }
11
+ function zipIterable_(fx, iterable, f) {
12
+ return Fx((emitter) => pipe(Effect.suspendSucceed(() => {
13
+ const iterator = iterable[Symbol.iterator]();
14
+ let result = iterator.next();
15
+ if (result.done) {
16
+ return emitter.end;
17
+ }
18
+ return fx.run(Emitter((b) => {
19
+ const a = result.value;
20
+ const c = f(a, b);
21
+ result = iterator.next();
22
+ return pipe(emitter.emit(c), Effect.flatMap((x) => (result.done ? exitEarly : Effect.succeed(x))));
23
+ }, emitter.failCause, emitter.end));
24
+ }), onEarlyExitFailure(emitter.end)));
25
+ }
26
+ //# sourceMappingURL=zipIterable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zipIterable.js","sourceRoot":"","sources":["../src/zipIterable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAE9D,MAAM,UAAU,WAAW,CAAU,QAAqB,EAAE,CAAoB;IAC9E,OAAO,CAAO,EAAe,EAAe,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,QAAqB;IACnD,OAAO,CAAU,EAAe,EAAe,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACxF,CAAC;AAED,SAAS,YAAY,CACnB,EAAe,EACf,QAAqB,EACrB,CAAoB;IAEpB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CACpB,IAAI,CACF,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE;QACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;QAC5C,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;QAE5B,IAAI,MAAM,CAAC,IAAI,EAAE;YACf,OAAO,OAAO,CAAC,GAAG,CAAA;SACnB;QAED,OAAO,EAAE,CAAC,GAAG,CACX,OAAO,CACL,CAAC,CAAC,EAAE,EAAE;YACJ,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAA;YACtB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAEjB,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;YAExB,OAAO,IAAI,CACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EACf,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CACrE,CAAA;QACH,CAAC,EACD,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,GAAG,CACZ,CACF,CAAA;IACH,CAAC,CAAC,EACF,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAChC,CACF,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typed/fx",
3
- "version": "0.0.9",
3
+ "version": "0.0.12",
4
4
  "description": "High-performance Asynchronous Effects",
5
5
  "type": "module",
6
6
  "main": "esm/index.js",
@@ -16,20 +16,23 @@
16
16
  "mocha": "mocha 'src/**/*.test.ts'",
17
17
  "coverage": "c8 --include 'src/**/*' --all npm run mocha",
18
18
  "typecheck": "NODE_OPTIONS=--max-old-space-size=4096 tsc --noEmit -p ./tsconfig.build.esm.json",
19
- "test": "concurrently npm:eslint npm:mocha npm:typecheck",
19
+ "test": "npm run mocha && concurrently npm:eslint npm:typecheck",
20
20
  "preversion": "npm test",
21
21
  "postversion": "npm run build && npm publish --access=public",
22
22
  "prepare": "ts-patch install -s",
23
- "perf:stream:filter-map-reduce": "node --loader @esbuild-kit/esm-loader perf/filter-map-reduce.ts",
24
- "perf:stream:flatMap": "node --loader @esbuild-kit/esm-loader perf/flatMap.ts",
25
- "perf:stream:switchMap": "node --loader @esbuild-kit/esm-loader perf/switchMap.ts"
23
+ "perf": "node --loader @esbuild-kit/esm-loader perf/runFullSuite.ts",
24
+ "perf:filter-map-reduce": "npm run perfTest filter-map-reduce",
25
+ "perf:flatMap": "npm run perfTest flatMap",
26
+ "perf:switchMap": "npm run perfTest switchMap",
27
+ "perfTest": "node --loader @esbuild-kit/esm-loader perf/runPerfTest.ts"
26
28
  },
27
29
  "keywords": [
28
30
  "Fx",
29
31
  "Stream",
30
32
  "Async",
31
33
  "Dependency Injection",
32
- "hkt-ts"
34
+ "effect-ts",
35
+ "fp-ts"
33
36
  ],
34
37
  "author": "Tylor Steinberger (tlsteinberger167@gmail.com)",
35
38
  "license": "MIT",
@@ -53,6 +56,7 @@
53
56
  "@types/mocha": "^9.1.1",
54
57
  "@types/node": "^17.0.45",
55
58
  "@types/prettier": "^2.7.0",
59
+ "@types/yargs": "^17.0.13",
56
60
  "@typescript-eslint/eslint-plugin": "^5.34.0",
57
61
  "@typescript-eslint/parser": "^5.34.0",
58
62
  "@zoltu/typescript-transformer-append-js-extension": "^1.0.1",
@@ -61,7 +65,6 @@
61
65
  "concurrently": "^7.3.0",
62
66
  "eslint": "^8.22.0",
63
67
  "eslint-config-prettier": "^8.5.0",
64
- "eslint-import-resolver-custom-alias": "^1.3.0",
65
68
  "eslint-import-resolver-typescript": "^2.7.1",
66
69
  "eslint-plugin-import": "^2.26.0",
67
70
  "eslint-plugin-prettier": "^4.2.1",
@@ -79,7 +82,8 @@
79
82
  "tslib": "^2.4.0",
80
83
  "tsx": "^3.8.2",
81
84
  "typescript": "^4.7.4",
82
- "typescript-transform-paths": "^3.3.1"
85
+ "typescript-transform-paths": "^3.3.1",
86
+ "yargs": "^17.6.0"
83
87
  },
84
88
  "exports": {
85
89
  ".": {
@@ -102,24 +106,14 @@
102
106
  "types": "./esm/Fx.d.ts"
103
107
  }
104
108
  },
105
- "./Sink": {
109
+ "./Subject": {
106
110
  "require": {
107
- "default": "./cjs/Sink.js",
108
- "types": "./cjs/Sink.d.ts"
111
+ "default": "./cjs/Subject.js",
112
+ "types": "./cjs/Subject.d.ts"
109
113
  },
110
114
  "import": {
111
- "default": "./esm/Sink.js",
112
- "types": "./esm/Sink.d.ts"
113
- }
114
- },
115
- "./TSemaphore": {
116
- "require": {
117
- "default": "./cjs/TSemaphore.js",
118
- "types": "./cjs/TSemaphore.d.ts"
119
- },
120
- "import": {
121
- "default": "./esm/TSemaphore.js",
122
- "types": "./esm/TSemaphore.d.ts"
115
+ "default": "./esm/Subject.js",
116
+ "types": "./esm/Subject.d.ts"
123
117
  }
124
118
  },
125
119
  "./_internal": {
@@ -172,16 +166,6 @@
172
166
  "types": "./esm/delay.d.ts"
173
167
  }
174
168
  },
175
- "./drain": {
176
- "require": {
177
- "default": "./cjs/drain.js",
178
- "types": "./cjs/drain.d.ts"
179
- },
180
- "import": {
181
- "default": "./esm/drain.js",
182
- "types": "./esm/drain.d.ts"
183
- }
184
- },
185
169
  "./during": {
186
170
  "require": {
187
171
  "default": "./cjs/during.js",
@@ -192,14 +176,24 @@
192
176
  "types": "./esm/during.d.ts"
193
177
  }
194
178
  },
195
- "./empty": {
179
+ "./filterLoop": {
180
+ "require": {
181
+ "default": "./cjs/filterLoop.js",
182
+ "types": "./cjs/filterLoop.d.ts"
183
+ },
184
+ "import": {
185
+ "default": "./esm/filterLoop.js",
186
+ "types": "./esm/filterLoop.d.ts"
187
+ }
188
+ },
189
+ "./filterMap": {
196
190
  "require": {
197
- "default": "./cjs/empty.js",
198
- "types": "./cjs/empty.d.ts"
191
+ "default": "./cjs/filterMap.js",
192
+ "types": "./cjs/filterMap.d.ts"
199
193
  },
200
194
  "import": {
201
- "default": "./esm/empty.js",
202
- "types": "./esm/empty.d.ts"
195
+ "default": "./esm/filterMap.js",
196
+ "types": "./esm/filterMap.d.ts"
203
197
  }
204
198
  },
205
199
  "./flatMap": {
@@ -222,26 +216,6 @@
222
216
  "types": "./esm/flatMapConcurrently.d.ts"
223
217
  }
224
218
  },
225
- "./from": {
226
- "require": {
227
- "default": "./cjs/from.js",
228
- "types": "./cjs/from.d.ts"
229
- },
230
- "import": {
231
- "default": "./esm/from.js",
232
- "types": "./esm/from.d.ts"
233
- }
234
- },
235
- "./fromCallback": {
236
- "require": {
237
- "default": "./cjs/fromCallback.js",
238
- "types": "./cjs/fromCallback.d.ts"
239
- },
240
- "import": {
241
- "default": "./esm/fromCallback.js",
242
- "types": "./esm/fromCallback.d.ts"
243
- }
244
- },
245
219
  "./fromEffect": {
246
220
  "require": {
247
221
  "default": "./cjs/fromEffect.js",
@@ -252,6 +226,16 @@
252
226
  "types": "./esm/fromEffect.d.ts"
253
227
  }
254
228
  },
229
+ "./fromIterable": {
230
+ "require": {
231
+ "default": "./cjs/fromIterable.js",
232
+ "types": "./cjs/fromIterable.d.ts"
233
+ },
234
+ "import": {
235
+ "default": "./esm/fromIterable.js",
236
+ "types": "./esm/fromIterable.d.ts"
237
+ }
238
+ },
255
239
  "./hold": {
256
240
  "require": {
257
241
  "default": "./cjs/hold.js",
@@ -262,24 +246,24 @@
262
246
  "types": "./esm/hold.d.ts"
263
247
  }
264
248
  },
265
- "./loop": {
249
+ "./mapCause": {
266
250
  "require": {
267
- "default": "./cjs/loop.js",
268
- "types": "./cjs/loop.d.ts"
251
+ "default": "./cjs/mapCause.js",
252
+ "types": "./cjs/mapCause.d.ts"
269
253
  },
270
254
  "import": {
271
- "default": "./esm/loop.js",
272
- "types": "./esm/loop.d.ts"
255
+ "default": "./esm/mapCause.js",
256
+ "types": "./esm/mapCause.d.ts"
273
257
  }
274
258
  },
275
- "./map": {
259
+ "./mapEffect": {
276
260
  "require": {
277
- "default": "./cjs/map.js",
278
- "types": "./cjs/map.d.ts"
261
+ "default": "./cjs/mapEffect.js",
262
+ "types": "./cjs/mapEffect.d.ts"
279
263
  },
280
264
  "import": {
281
- "default": "./esm/map.js",
282
- "types": "./esm/map.d.ts"
265
+ "default": "./esm/mapEffect.js",
266
+ "types": "./esm/mapEffect.d.ts"
283
267
  }
284
268
  },
285
269
  "./merge": {
@@ -302,26 +286,6 @@
302
286
  "types": "./esm/multicast.d.ts"
303
287
  }
304
288
  },
305
- "./never": {
306
- "require": {
307
- "default": "./cjs/never.js",
308
- "types": "./cjs/never.d.ts"
309
- },
310
- "import": {
311
- "default": "./esm/never.js",
312
- "types": "./esm/never.d.ts"
313
- }
314
- },
315
- "./observe": {
316
- "require": {
317
- "default": "./cjs/observe.js",
318
- "types": "./cjs/observe.d.ts"
319
- },
320
- "import": {
321
- "default": "./esm/observe.js",
322
- "types": "./esm/observe.d.ts"
323
- }
324
- },
325
289
  "./orElse": {
326
290
  "require": {
327
291
  "default": "./cjs/orElse.js",
@@ -352,14 +316,44 @@
352
316
  "types": "./esm/provide.d.ts"
353
317
  }
354
318
  },
355
- "./reduce": {
319
+ "./runCollect": {
320
+ "require": {
321
+ "default": "./cjs/runCollect.js",
322
+ "types": "./cjs/runCollect.d.ts"
323
+ },
324
+ "import": {
325
+ "default": "./esm/runCollect.js",
326
+ "types": "./esm/runCollect.d.ts"
327
+ }
328
+ },
329
+ "./runDrain": {
330
+ "require": {
331
+ "default": "./cjs/runDrain.js",
332
+ "types": "./cjs/runDrain.d.ts"
333
+ },
334
+ "import": {
335
+ "default": "./esm/runDrain.js",
336
+ "types": "./esm/runDrain.d.ts"
337
+ }
338
+ },
339
+ "./runObserve": {
340
+ "require": {
341
+ "default": "./cjs/runObserve.js",
342
+ "types": "./cjs/runObserve.d.ts"
343
+ },
344
+ "import": {
345
+ "default": "./esm/runObserve.js",
346
+ "types": "./esm/runObserve.d.ts"
347
+ }
348
+ },
349
+ "./runReduce": {
356
350
  "require": {
357
- "default": "./cjs/reduce.js",
358
- "types": "./cjs/reduce.d.ts"
351
+ "default": "./cjs/runReduce.js",
352
+ "types": "./cjs/runReduce.d.ts"
359
353
  },
360
354
  "import": {
361
- "default": "./esm/reduce.js",
362
- "types": "./esm/reduce.d.ts"
355
+ "default": "./esm/runReduce.js",
356
+ "types": "./esm/runReduce.d.ts"
363
357
  }
364
358
  },
365
359
  "./scheduled": {
@@ -442,16 +436,6 @@
442
436
  "types": "./esm/switchMap.d.ts"
443
437
  }
444
438
  },
445
- "./takeUntil": {
446
- "require": {
447
- "default": "./cjs/takeUntil.js",
448
- "types": "./cjs/takeUntil.d.ts"
449
- },
450
- "import": {
451
- "default": "./esm/takeUntil.js",
452
- "types": "./esm/takeUntil.d.ts"
453
- }
454
- },
455
439
  "./takeWhile": {
456
440
  "require": {
457
441
  "default": "./cjs/takeWhile.js",
@@ -462,14 +446,14 @@
462
446
  "types": "./esm/takeWhile.d.ts"
463
447
  }
464
448
  },
465
- "./tap": {
449
+ "./tapEffect": {
466
450
  "require": {
467
- "default": "./cjs/tap.js",
468
- "types": "./cjs/tap.d.ts"
451
+ "default": "./cjs/tapEffect.js",
452
+ "types": "./cjs/tapEffect.d.ts"
469
453
  },
470
454
  "import": {
471
- "default": "./esm/tap.js",
472
- "types": "./esm/tap.d.ts"
455
+ "default": "./esm/tapEffect.js",
456
+ "types": "./esm/tapEffect.d.ts"
473
457
  }
474
458
  },
475
459
  "./throttle": {
@@ -502,6 +486,16 @@
502
486
  "types": "./esm/until.d.ts"
503
487
  }
504
488
  },
489
+ "./withEmitter": {
490
+ "require": {
491
+ "default": "./cjs/withEmitter.js",
492
+ "types": "./cjs/withEmitter.d.ts"
493
+ },
494
+ "import": {
495
+ "default": "./esm/withEmitter.js",
496
+ "types": "./esm/withEmitter.d.ts"
497
+ }
498
+ },
505
499
  "./zip": {
506
500
  "require": {
507
501
  "default": "./cjs/zip.js",
@@ -512,14 +506,14 @@
512
506
  "types": "./esm/zip.d.ts"
513
507
  }
514
508
  },
515
- "./zipItems": {
509
+ "./zipIterable": {
516
510
  "require": {
517
- "default": "./cjs/zipItems.js",
518
- "types": "./cjs/zipItems.d.ts"
511
+ "default": "./cjs/zipIterable.js",
512
+ "types": "./cjs/zipIterable.d.ts"
519
513
  },
520
514
  "import": {
521
- "default": "./esm/zipItems.js",
522
- "types": "./esm/zipItems.d.ts"
515
+ "default": "./esm/zipIterable.js",
516
+ "types": "./esm/zipIterable.d.ts"
523
517
  }
524
518
  }
525
519
  }
package/perf/_internal.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { performance } from 'node:perf_hooks'
1
+ import process from 'node:process'
2
2
 
3
3
  import * as EffectStream from '@effect/core/Stream/Stream'
4
4
  import * as Effect from '@effect/core/io/Effect'
@@ -19,35 +19,45 @@ export function parseIterations() {
19
19
  export const iterations = parseIterations()
20
20
  export const array = Array.from({ length: iterations }, (_, i) => i)
21
21
 
22
- export function runSuite(suite: Suite) {
23
- suite.on('start', logStart).on('cycle', logResults).on('complete', logComplete).run()
22
+ export function runSuite(suite: Suite, cb: () => void) {
23
+ suite
24
+ .on('start', logStart)
25
+ .on('cycle', logResults)
26
+ .on('complete', () => {
27
+ logComplete()
28
+ cb()
29
+ })
30
+ .run({ defer: false })
24
31
  }
25
32
 
33
+ const longestLibrary = 13
34
+ const longestOps = 10
35
+
26
36
  function logResults(e: any) {
27
37
  const t = e.target
28
38
 
29
39
  if (t.failure) {
40
+ console.log(`| ${t.name} | FAILED | ${e.target.failure} |`)
41
+
30
42
  console.error(padl(10, t.name) + 'FAILED: ' + e.target.failure)
31
43
  } else {
32
- const result =
33
- padl(18, t.name) +
34
- padr(13, t.hz.toFixed(2) + ' op/s') +
35
- ' \xb1' +
36
- padr(7, t.stats.rme.toFixed(2) + '%') +
37
- padr(15, ' (' + t.stats.sample.length + ' samples)')
38
-
39
- console.log(result)
44
+ console.log(
45
+ `| ${padl(longestLibrary, t.name)} | ${padl(longestOps, t.hz.toFixed(2))} | ${padl(
46
+ 6,
47
+ t.stats.rme.toFixed(2) + '%',
48
+ )} | ${padl(3, t.stats.sample.length)} |`,
49
+ )
40
50
  }
41
51
  }
42
52
 
43
53
  function logStart(this: any) {
44
- console.log(this.name)
45
- console.log('-------------------------------------------------------')
54
+ console.log('### ' + this.name)
55
+ console.log(`| Library | Ops/sec | ± | Samples |
56
+ | --------------|------------|--------|---------|`)
46
57
  }
47
58
 
48
59
  function logComplete() {
49
- console.log('-------------------------------------------------------')
50
- process.exit(0)
60
+ console.log('-------------------------------------------------------\n')
51
61
  }
52
62
 
53
63
  function padl(n: number, s: string) {
@@ -57,20 +67,12 @@ function padl(n: number, s: string) {
57
67
  return s
58
68
  }
59
69
 
60
- function padr(n: number, s: string) {
61
- while (s.length < n) {
62
- s = ' ' + s
63
- }
64
- return s
65
- }
66
-
67
- export function timeConstruction(label: string) {
68
- const start = performance.now()
69
- return () => {
70
- const end = performance.now()
71
- console.log(label, end - start)
72
- }
73
- }
70
+ // function padr(n: number, s: string) {
71
+ // while (s.length < n) {
72
+ // s = ' ' + s
73
+ // }
74
+ // return s
75
+ // }
74
76
 
75
77
  export interface PerformanceTest {
76
78
  readonly name: string
@@ -91,27 +93,29 @@ export function PerformanceTestCase<A>(
91
93
  return { name, init, run }
92
94
  }
93
95
 
94
- export function runPerformanceTest(test: PerformanceTest) {
96
+ export function runPerformanceTest(test: PerformanceTest, cb: () => void) {
95
97
  // eslint-disable-next-line import/no-named-as-default-member
96
98
  let suite = new benchmark.Suite(test.name)
97
99
 
98
100
  for (const testCase of test.cases) {
99
- const end = timeConstruction(testCase.name)
100
101
  const constructed = testCase.init()
101
- end()
102
102
 
103
103
  suite = suite.add(testCase.name, (deferred: benchmark.Deferred) =>
104
104
  testCase.run(constructed, deferred),
105
105
  )
106
106
  }
107
107
 
108
- runSuite(suite)
108
+ runSuite(suite, cb)
109
109
  }
110
110
 
111
- export function fxTest<E, A, E1>(init: () => Fx.Fx<never, E, A, E1>) {
111
+ export function fxTest<E, A>(init: () => Fx.Fx<never, E, A>) {
112
112
  return PerformanceTestCase(
113
113
  'Fx',
114
- () => Fx.drainNow(init()),
114
+ () => {
115
+ const push = init()
116
+
117
+ return Fx.runDrain(push)
118
+ },
115
119
  (fx, deferred) => Effect.unsafeRunAsyncWith(fx, () => deferred.resolve()),
116
120
  )
117
121
  }