@typed/fx 0.0.9 → 0.0.10

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 (530) hide show
  1. package/.eslintcache +1 -1
  2. package/cjs/Fx.d.ts +25 -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/_internal.d.ts +19 -20
  7. package/cjs/_internal.d.ts.map +1 -1
  8. package/cjs/_internal.js +21 -76
  9. package/cjs/_internal.js.map +1 -1
  10. package/cjs/combine.d.ts +4 -4
  11. package/cjs/combine.d.ts.map +1 -1
  12. package/cjs/combine.js +9 -13
  13. package/cjs/combine.js.map +1 -1
  14. package/cjs/continueWith.d.ts +2 -2
  15. package/cjs/continueWith.d.ts.map +1 -1
  16. package/cjs/continueWith.js +2 -3
  17. package/cjs/continueWith.js.map +1 -1
  18. package/cjs/debounce.d.ts +2 -11
  19. package/cjs/debounce.d.ts.map +1 -1
  20. package/cjs/debounce.js +4 -24
  21. package/cjs/debounce.js.map +1 -1
  22. package/cjs/delay.d.ts +2 -2
  23. package/cjs/delay.d.ts.map +1 -1
  24. package/cjs/delay.js +4 -5
  25. package/cjs/delay.js.map +1 -1
  26. package/cjs/during.d.ts +1 -1
  27. package/cjs/during.d.ts.map +1 -1
  28. package/cjs/during.js +6 -9
  29. package/cjs/during.js.map +1 -1
  30. package/cjs/filterLoop.d.ts +25 -0
  31. package/cjs/filterLoop.d.ts.map +1 -0
  32. package/cjs/filterLoop.js +108 -0
  33. package/cjs/filterLoop.js.map +1 -0
  34. package/cjs/filterMap.d.ts +24 -0
  35. package/cjs/filterMap.d.ts.map +1 -0
  36. package/cjs/{map.js → filterMap.js} +27 -40
  37. package/cjs/filterMap.js.map +1 -0
  38. package/cjs/flatMap.d.ts +2 -10
  39. package/cjs/flatMap.d.ts.map +1 -1
  40. package/cjs/flatMap.js +10 -25
  41. package/cjs/flatMap.js.map +1 -1
  42. package/cjs/flatMapConcurrently.d.ts +2 -2
  43. package/cjs/flatMapConcurrently.d.ts.map +1 -1
  44. package/cjs/flatMapConcurrently.js +3 -3
  45. package/cjs/flatMapConcurrently.js.map +1 -1
  46. package/cjs/fromEffect.d.ts +34 -15
  47. package/cjs/fromEffect.d.ts.map +1 -1
  48. package/cjs/fromEffect.js +28 -15
  49. package/cjs/fromEffect.js.map +1 -1
  50. package/cjs/fromIterable.d.ts +9 -0
  51. package/cjs/fromIterable.d.ts.map +1 -0
  52. package/cjs/{drain.js → fromIterable.js} +14 -13
  53. package/cjs/fromIterable.js.map +1 -0
  54. package/cjs/hold.d.ts +15 -17
  55. package/cjs/hold.d.ts.map +1 -1
  56. package/cjs/hold.js +27 -25
  57. package/cjs/hold.js.map +1 -1
  58. package/cjs/index.d.ts +18 -15
  59. package/cjs/index.d.ts.map +1 -1
  60. package/cjs/index.js +18 -28
  61. package/cjs/index.js.map +1 -1
  62. package/cjs/mapCause.d.ts +5 -0
  63. package/cjs/mapCause.d.ts.map +1 -0
  64. package/cjs/mapCause.js +41 -0
  65. package/cjs/mapCause.js.map +1 -0
  66. package/cjs/mapEffect.d.ts +4 -0
  67. package/cjs/mapEffect.d.ts.map +1 -0
  68. package/cjs/{never.js → mapEffect.js} +6 -4
  69. package/cjs/mapEffect.js.map +1 -0
  70. package/cjs/merge.d.ts +3 -3
  71. package/cjs/merge.d.ts.map +1 -1
  72. package/cjs/merge.js +7 -11
  73. package/cjs/merge.js.map +1 -1
  74. package/cjs/multicast.d.ts +20 -19
  75. package/cjs/multicast.d.ts.map +1 -1
  76. package/cjs/multicast.js +30 -34
  77. package/cjs/multicast.js.map +1 -1
  78. package/cjs/orElse.d.ts +2 -5
  79. package/cjs/orElse.d.ts.map +1 -1
  80. package/cjs/orElse.js +9 -11
  81. package/cjs/orElse.js.map +1 -1
  82. package/cjs/provide.d.ts +8 -8
  83. package/cjs/provide.d.ts.map +1 -1
  84. package/cjs/provide.js +23 -9
  85. package/cjs/provide.js.map +1 -1
  86. package/cjs/runCollect.d.ts +4 -0
  87. package/cjs/runCollect.d.ts.map +1 -0
  88. package/cjs/{from.js → runCollect.js} +6 -15
  89. package/cjs/runCollect.js.map +1 -0
  90. package/cjs/runDrain.d.ts +4 -0
  91. package/cjs/runDrain.d.ts.map +1 -0
  92. package/cjs/runDrain.js +38 -0
  93. package/cjs/runDrain.js.map +1 -0
  94. package/cjs/runObserve.d.ts +4 -0
  95. package/cjs/runObserve.d.ts.map +1 -0
  96. package/cjs/{takeUntil.js → runObserve.js} +6 -17
  97. package/cjs/runObserve.js.map +1 -0
  98. package/cjs/runReduce.d.ts +6 -0
  99. package/cjs/runReduce.d.ts.map +1 -0
  100. package/cjs/runReduce.js +50 -0
  101. package/cjs/runReduce.js.map +1 -0
  102. package/cjs/scheduled.d.ts +4 -4
  103. package/cjs/scheduled.d.ts.map +1 -1
  104. package/cjs/scheduled.js +8 -8
  105. package/cjs/scheduled.js.map +1 -1
  106. package/cjs/since.d.ts +1 -1
  107. package/cjs/since.d.ts.map +1 -1
  108. package/cjs/since.js +5 -9
  109. package/cjs/since.js.map +1 -1
  110. package/cjs/skipRepeats.d.ts +1 -1
  111. package/cjs/skipRepeats.d.ts.map +1 -1
  112. package/cjs/skipRepeats.js +4 -5
  113. package/cjs/skipRepeats.js.map +1 -1
  114. package/cjs/skipWhile.d.ts +3 -3
  115. package/cjs/skipWhile.d.ts.map +1 -1
  116. package/cjs/skipWhile.js +12 -15
  117. package/cjs/skipWhile.js.map +1 -1
  118. package/cjs/slice.d.ts +3 -3
  119. package/cjs/slice.d.ts.map +1 -1
  120. package/cjs/slice.js +15 -23
  121. package/cjs/slice.js.map +1 -1
  122. package/cjs/snapshot.d.ts +2 -2
  123. package/cjs/snapshot.d.ts.map +1 -1
  124. package/cjs/snapshot.js +6 -8
  125. package/cjs/snapshot.js.map +1 -1
  126. package/cjs/suspendSucceed.d.ts +1 -1
  127. package/cjs/suspendSucceed.d.ts.map +1 -1
  128. package/cjs/suspendSucceed.js +1 -25
  129. package/cjs/suspendSucceed.js.map +1 -1
  130. package/cjs/switchMap.d.ts +1 -9
  131. package/cjs/switchMap.d.ts.map +1 -1
  132. package/cjs/switchMap.js +5 -18
  133. package/cjs/switchMap.js.map +1 -1
  134. package/cjs/takeWhile.d.ts +3 -3
  135. package/cjs/takeWhile.d.ts.map +1 -1
  136. package/cjs/takeWhile.js +6 -38
  137. package/cjs/takeWhile.js.map +1 -1
  138. package/cjs/tapEffect.d.ts +5 -0
  139. package/cjs/tapEffect.d.ts.map +1 -0
  140. package/cjs/{observe.js → tapEffect.js} +8 -15
  141. package/cjs/tapEffect.js.map +1 -0
  142. package/cjs/throttle.d.ts +2 -2
  143. package/cjs/throttle.d.ts.map +1 -1
  144. package/cjs/throttle.js +6 -13
  145. package/cjs/throttle.js.map +1 -1
  146. package/cjs/transform.d.ts +13 -8
  147. package/cjs/transform.d.ts.map +1 -1
  148. package/cjs/transform.js +9 -2
  149. package/cjs/transform.js.map +1 -1
  150. package/cjs/until.d.ts +1 -1
  151. package/cjs/until.d.ts.map +1 -1
  152. package/cjs/until.js +5 -7
  153. package/cjs/until.js.map +1 -1
  154. package/{esm/fromCallback.d.ts → cjs/withEmitter.d.ts} +4 -4
  155. package/cjs/withEmitter.d.ts.map +1 -0
  156. package/cjs/{fromCallback.js → withEmitter.js} +22 -16
  157. package/cjs/withEmitter.js.map +1 -0
  158. package/cjs/zip.d.ts +4 -4
  159. package/cjs/zip.d.ts.map +1 -1
  160. package/cjs/zip.js +11 -15
  161. package/cjs/zip.js.map +1 -1
  162. package/cjs/zipIterable.d.ts +4 -0
  163. package/cjs/zipIterable.d.ts.map +1 -0
  164. package/cjs/{zipItems.js → zipIterable.js} +23 -20
  165. package/cjs/zipIterable.js.map +1 -0
  166. package/esm/Fx.d.ts +25 -8
  167. package/esm/Fx.d.ts.map +1 -1
  168. package/esm/Fx.js +10 -1
  169. package/esm/Fx.js.map +1 -1
  170. package/esm/_internal.d.ts +19 -20
  171. package/esm/_internal.d.ts.map +1 -1
  172. package/esm/_internal.js +16 -72
  173. package/esm/_internal.js.map +1 -1
  174. package/esm/combine.d.ts +4 -4
  175. package/esm/combine.d.ts.map +1 -1
  176. package/esm/combine.js +12 -16
  177. package/esm/combine.js.map +1 -1
  178. package/esm/continueWith.d.ts +2 -2
  179. package/esm/continueWith.d.ts.map +1 -1
  180. package/esm/continueWith.js +3 -4
  181. package/esm/continueWith.js.map +1 -1
  182. package/esm/debounce.d.ts +2 -11
  183. package/esm/debounce.d.ts.map +1 -1
  184. package/esm/debounce.js +7 -27
  185. package/esm/debounce.js.map +1 -1
  186. package/esm/delay.d.ts +2 -2
  187. package/esm/delay.d.ts.map +1 -1
  188. package/esm/delay.js +6 -7
  189. package/esm/delay.js.map +1 -1
  190. package/esm/during.d.ts +1 -1
  191. package/esm/during.d.ts.map +1 -1
  192. package/esm/during.js +9 -12
  193. package/esm/during.js.map +1 -1
  194. package/esm/filterLoop.d.ts +25 -0
  195. package/esm/filterLoop.d.ts.map +1 -0
  196. package/esm/filterLoop.js +76 -0
  197. package/esm/filterLoop.js.map +1 -0
  198. package/esm/filterMap.d.ts +24 -0
  199. package/esm/filterMap.d.ts.map +1 -0
  200. package/esm/filterMap.js +53 -0
  201. package/esm/filterMap.js.map +1 -0
  202. package/esm/flatMap.d.ts +2 -10
  203. package/esm/flatMap.d.ts.map +1 -1
  204. package/esm/flatMap.js +9 -24
  205. package/esm/flatMap.js.map +1 -1
  206. package/esm/flatMapConcurrently.d.ts +2 -2
  207. package/esm/flatMapConcurrently.d.ts.map +1 -1
  208. package/esm/flatMapConcurrently.js +3 -3
  209. package/esm/flatMapConcurrently.js.map +1 -1
  210. package/esm/fromEffect.d.ts +34 -15
  211. package/esm/fromEffect.d.ts.map +1 -1
  212. package/esm/fromEffect.js +25 -13
  213. package/esm/fromEffect.js.map +1 -1
  214. package/esm/fromIterable.d.ts +9 -0
  215. package/esm/fromIterable.d.ts.map +1 -0
  216. package/esm/fromIterable.js +14 -0
  217. package/esm/fromIterable.js.map +1 -0
  218. package/esm/hold.d.ts +15 -17
  219. package/esm/hold.d.ts.map +1 -1
  220. package/esm/hold.js +27 -25
  221. package/esm/hold.js.map +1 -1
  222. package/esm/index.d.ts +18 -15
  223. package/esm/index.d.ts.map +1 -1
  224. package/esm/index.js +18 -16
  225. package/esm/index.js.map +1 -1
  226. package/esm/mapCause.d.ts +5 -0
  227. package/esm/mapCause.d.ts.map +1 -0
  228. package/esm/mapCause.js +13 -0
  229. package/esm/mapCause.js.map +1 -0
  230. package/esm/mapEffect.d.ts +4 -0
  231. package/esm/mapEffect.d.ts.map +1 -0
  232. package/esm/mapEffect.js +5 -0
  233. package/esm/mapEffect.js.map +1 -0
  234. package/esm/merge.d.ts +3 -3
  235. package/esm/merge.d.ts.map +1 -1
  236. package/esm/merge.js +9 -13
  237. package/esm/merge.js.map +1 -1
  238. package/esm/multicast.d.ts +20 -19
  239. package/esm/multicast.d.ts.map +1 -1
  240. package/esm/multicast.js +33 -37
  241. package/esm/multicast.js.map +1 -1
  242. package/esm/orElse.d.ts +2 -5
  243. package/esm/orElse.d.ts.map +1 -1
  244. package/esm/orElse.js +10 -10
  245. package/esm/orElse.js.map +1 -1
  246. package/esm/provide.d.ts +8 -8
  247. package/esm/provide.d.ts.map +1 -1
  248. package/esm/provide.js +20 -6
  249. package/esm/provide.js.map +1 -1
  250. package/esm/runCollect.d.ts +4 -0
  251. package/esm/runCollect.d.ts.map +1 -0
  252. package/esm/runCollect.js +7 -0
  253. package/esm/runCollect.js.map +1 -0
  254. package/esm/runDrain.d.ts +4 -0
  255. package/esm/runDrain.d.ts.map +1 -0
  256. package/esm/runDrain.js +11 -0
  257. package/esm/runDrain.js.map +1 -0
  258. package/esm/runObserve.d.ts +4 -0
  259. package/esm/runObserve.d.ts.map +1 -0
  260. package/esm/runObserve.js +8 -0
  261. package/esm/runObserve.js.map +1 -0
  262. package/esm/runReduce.d.ts +6 -0
  263. package/esm/runReduce.d.ts.map +1 -0
  264. package/esm/runReduce.js +22 -0
  265. package/esm/runReduce.js.map +1 -0
  266. package/esm/scheduled.d.ts +4 -4
  267. package/esm/scheduled.d.ts.map +1 -1
  268. package/esm/scheduled.js +8 -8
  269. package/esm/scheduled.js.map +1 -1
  270. package/esm/since.d.ts +1 -1
  271. package/esm/since.d.ts.map +1 -1
  272. package/esm/since.js +8 -12
  273. package/esm/since.js.map +1 -1
  274. package/esm/skipRepeats.d.ts +1 -1
  275. package/esm/skipRepeats.d.ts.map +1 -1
  276. package/esm/skipRepeats.js +5 -6
  277. package/esm/skipRepeats.js.map +1 -1
  278. package/esm/skipWhile.d.ts +3 -3
  279. package/esm/skipWhile.d.ts.map +1 -1
  280. package/esm/skipWhile.js +13 -16
  281. package/esm/skipWhile.js.map +1 -1
  282. package/esm/slice.d.ts +3 -3
  283. package/esm/slice.d.ts.map +1 -1
  284. package/esm/slice.js +17 -25
  285. package/esm/slice.js.map +1 -1
  286. package/esm/snapshot.d.ts +2 -2
  287. package/esm/snapshot.d.ts.map +1 -1
  288. package/esm/snapshot.js +8 -10
  289. package/esm/snapshot.js.map +1 -1
  290. package/esm/suspendSucceed.d.ts +1 -1
  291. package/esm/suspendSucceed.d.ts.map +1 -1
  292. package/esm/suspendSucceed.js +1 -2
  293. package/esm/suspendSucceed.js.map +1 -1
  294. package/esm/switchMap.d.ts +1 -9
  295. package/esm/switchMap.d.ts.map +1 -1
  296. package/esm/switchMap.js +6 -18
  297. package/esm/switchMap.js.map +1 -1
  298. package/esm/takeWhile.d.ts +3 -3
  299. package/esm/takeWhile.d.ts.map +1 -1
  300. package/esm/takeWhile.js +8 -17
  301. package/esm/takeWhile.js.map +1 -1
  302. package/esm/tapEffect.d.ts +5 -0
  303. package/esm/tapEffect.d.ts.map +1 -0
  304. package/esm/tapEffect.js +6 -0
  305. package/esm/tapEffect.js.map +1 -0
  306. package/esm/throttle.d.ts +2 -2
  307. package/esm/throttle.d.ts.map +1 -1
  308. package/esm/throttle.js +9 -16
  309. package/esm/throttle.js.map +1 -1
  310. package/esm/transform.d.ts +13 -8
  311. package/esm/transform.d.ts.map +1 -1
  312. package/esm/transform.js +6 -1
  313. package/esm/transform.js.map +1 -1
  314. package/esm/until.d.ts +1 -1
  315. package/esm/until.d.ts.map +1 -1
  316. package/esm/until.js +8 -10
  317. package/esm/until.js.map +1 -1
  318. package/{cjs/fromCallback.d.ts → esm/withEmitter.d.ts} +4 -4
  319. package/esm/withEmitter.d.ts.map +1 -0
  320. package/esm/withEmitter.js +26 -0
  321. package/esm/withEmitter.js.map +1 -0
  322. package/esm/zip.d.ts +4 -4
  323. package/esm/zip.d.ts.map +1 -1
  324. package/esm/zip.js +14 -18
  325. package/esm/zip.js.map +1 -1
  326. package/esm/zipIterable.d.ts +4 -0
  327. package/esm/zipIterable.d.ts.map +1 -0
  328. package/esm/zipIterable.js +26 -0
  329. package/esm/zipIterable.js.map +1 -0
  330. package/package.json +102 -117
  331. package/perf/_internal.ts +39 -35
  332. package/perf/cases/filter-map-reduce.ts +48 -0
  333. package/perf/cases/flatMap.ts +49 -0
  334. package/perf/cases/switchMap.ts +36 -0
  335. package/perf/readme-base.md +14 -0
  336. package/perf/readme.md +40 -0
  337. package/perf/runFullSuite.ts +37 -0
  338. package/perf/runPerfTest.ts +18 -0
  339. package/perf/tsconfig.json +1 -1
  340. package/src/Fx.ts +41 -9
  341. package/src/_internal.ts +59 -114
  342. package/src/combine.test.ts +15 -16
  343. package/src/combine.ts +44 -48
  344. package/src/continueWith.test.ts +26 -0
  345. package/src/continueWith.ts +9 -11
  346. package/src/debounce.test.ts +4 -6
  347. package/src/debounce.ts +30 -49
  348. package/src/delay.test.ts +5 -6
  349. package/src/delay.ts +9 -8
  350. package/src/during.test.ts +30 -0
  351. package/src/during.ts +43 -47
  352. package/src/filterLoop.test.ts +63 -0
  353. package/src/filterLoop.ts +143 -0
  354. package/src/filterMap.test.ts +33 -0
  355. package/src/filterMap.ts +71 -0
  356. package/src/flatMap.test.ts +39 -12
  357. package/src/flatMap.ts +25 -51
  358. package/src/flatMapConcurrently.test.ts +23 -0
  359. package/src/flatMapConcurrently.ts +6 -12
  360. package/src/fromEffect.ts +74 -26
  361. package/src/fromIterable.ts +15 -0
  362. package/src/hold.test.ts +3 -3
  363. package/src/hold.ts +46 -44
  364. package/src/index.ts +18 -15
  365. package/src/mapCause.test.ts +34 -0
  366. package/src/mapCause.ts +16 -0
  367. package/src/mapEffect.test.ts +21 -0
  368. package/src/mapEffect.ts +17 -0
  369. package/src/merge.test.ts +10 -30
  370. package/src/merge.ts +17 -38
  371. package/src/multicast.test.ts +22 -28
  372. package/src/multicast.ts +71 -57
  373. package/src/orElse.test.ts +22 -0
  374. package/src/orElse.ts +21 -34
  375. package/src/periodic.test.ts +4 -4
  376. package/src/provide.test.ts +56 -0
  377. package/src/provide.ts +47 -36
  378. package/src/runCollect.ts +19 -0
  379. package/src/runDrain.ts +23 -0
  380. package/src/runObserve.ts +31 -0
  381. package/src/runReduce.ts +64 -0
  382. package/src/scheduled.ts +28 -26
  383. package/src/since.test.ts +31 -0
  384. package/src/since.ts +25 -42
  385. package/src/skipRepeats.test.ts +28 -0
  386. package/src/skipRepeats.ts +8 -9
  387. package/src/skipWhile.test.ts +44 -0
  388. package/src/skipWhile.ts +36 -22
  389. package/src/slice.test.ts +12 -10
  390. package/src/slice.ts +36 -42
  391. package/src/snapshot.test.ts +51 -0
  392. package/src/snapshot.ts +48 -37
  393. package/src/suspendSucceed.ts +2 -4
  394. package/src/switchMap.test.ts +23 -13
  395. package/src/switchMap.ts +32 -50
  396. package/src/takeWhile.test.ts +44 -0
  397. package/src/takeWhile.ts +20 -25
  398. package/src/tapEffect.ts +24 -0
  399. package/src/throttle.test.ts +5 -7
  400. package/src/throttle.ts +37 -42
  401. package/src/transform.ts +14 -6
  402. package/src/until.test.ts +8 -14
  403. package/src/until.ts +22 -32
  404. package/src/withEmitter.test.ts +28 -0
  405. package/src/withEmitter.ts +49 -0
  406. package/src/zip.test.ts +12 -13
  407. package/src/zip.ts +45 -52
  408. package/src/zipIterable.test.ts +19 -0
  409. package/src/zipIterable.ts +51 -0
  410. package/cjs/Sink.d.ts +0 -25
  411. package/cjs/Sink.d.ts.map +0 -1
  412. package/cjs/Sink.js +0 -66
  413. package/cjs/Sink.js.map +0 -1
  414. package/cjs/TSemaphore.d.ts +0 -4
  415. package/cjs/TSemaphore.d.ts.map +0 -1
  416. package/cjs/TSemaphore.js +0 -33
  417. package/cjs/TSemaphore.js.map +0 -1
  418. package/cjs/drain.d.ts +0 -7
  419. package/cjs/drain.d.ts.map +0 -1
  420. package/cjs/drain.js.map +0 -1
  421. package/cjs/empty.d.ts +0 -3
  422. package/cjs/empty.d.ts.map +0 -1
  423. package/cjs/empty.js +0 -9
  424. package/cjs/empty.js.map +0 -1
  425. package/cjs/from.d.ts +0 -11
  426. package/cjs/from.d.ts.map +0 -1
  427. package/cjs/from.js.map +0 -1
  428. package/cjs/fromCallback.d.ts.map +0 -1
  429. package/cjs/fromCallback.js.map +0 -1
  430. package/cjs/loop.d.ts +0 -4
  431. package/cjs/loop.d.ts.map +0 -1
  432. package/cjs/loop.js +0 -34
  433. package/cjs/loop.js.map +0 -1
  434. package/cjs/map.d.ts +0 -28
  435. package/cjs/map.d.ts.map +0 -1
  436. package/cjs/map.js.map +0 -1
  437. package/cjs/never.d.ts +0 -2
  438. package/cjs/never.d.ts.map +0 -1
  439. package/cjs/never.js.map +0 -1
  440. package/cjs/observe.d.ts +0 -7
  441. package/cjs/observe.d.ts.map +0 -1
  442. package/cjs/observe.js.map +0 -1
  443. package/cjs/reduce.d.ts +0 -7
  444. package/cjs/reduce.d.ts.map +0 -1
  445. package/cjs/reduce.js +0 -64
  446. package/cjs/reduce.js.map +0 -1
  447. package/cjs/takeUntil.d.ts +0 -4
  448. package/cjs/takeUntil.d.ts.map +0 -1
  449. package/cjs/takeUntil.js.map +0 -1
  450. package/cjs/tap.d.ts +0 -9
  451. package/cjs/tap.d.ts.map +0 -1
  452. package/cjs/tap.js +0 -54
  453. package/cjs/tap.js.map +0 -1
  454. package/cjs/zipItems.d.ts +0 -4
  455. package/cjs/zipItems.d.ts.map +0 -1
  456. package/cjs/zipItems.js.map +0 -1
  457. package/esm/Sink.d.ts +0 -25
  458. package/esm/Sink.d.ts.map +0 -1
  459. package/esm/Sink.js +0 -31
  460. package/esm/Sink.js.map +0 -1
  461. package/esm/TSemaphore.d.ts +0 -4
  462. package/esm/TSemaphore.d.ts.map +0 -1
  463. package/esm/TSemaphore.js +0 -5
  464. package/esm/TSemaphore.js.map +0 -1
  465. package/esm/drain.d.ts +0 -7
  466. package/esm/drain.d.ts.map +0 -1
  467. package/esm/drain.js +0 -12
  468. package/esm/drain.js.map +0 -1
  469. package/esm/empty.d.ts +0 -3
  470. package/esm/empty.d.ts.map +0 -1
  471. package/esm/empty.js +0 -5
  472. package/esm/empty.js.map +0 -1
  473. package/esm/from.d.ts +0 -11
  474. package/esm/from.d.ts.map +0 -1
  475. package/esm/from.js +0 -15
  476. package/esm/from.js.map +0 -1
  477. package/esm/fromCallback.d.ts.map +0 -1
  478. package/esm/fromCallback.js +0 -20
  479. package/esm/fromCallback.js.map +0 -1
  480. package/esm/loop.d.ts +0 -4
  481. package/esm/loop.d.ts.map +0 -1
  482. package/esm/loop.js +0 -29
  483. package/esm/loop.js.map +0 -1
  484. package/esm/map.d.ts +0 -28
  485. package/esm/map.d.ts.map +0 -1
  486. package/esm/map.js +0 -64
  487. package/esm/map.js.map +0 -1
  488. package/esm/never.d.ts +0 -2
  489. package/esm/never.d.ts.map +0 -1
  490. package/esm/never.js +0 -4
  491. package/esm/never.js.map +0 -1
  492. package/esm/observe.d.ts +0 -7
  493. package/esm/observe.d.ts.map +0 -1
  494. package/esm/observe.js +0 -12
  495. package/esm/observe.js.map +0 -1
  496. package/esm/reduce.d.ts +0 -7
  497. package/esm/reduce.d.ts.map +0 -1
  498. package/esm/reduce.js +0 -35
  499. package/esm/reduce.js.map +0 -1
  500. package/esm/takeUntil.d.ts +0 -4
  501. package/esm/takeUntil.d.ts.map +0 -1
  502. package/esm/takeUntil.js +0 -19
  503. package/esm/takeUntil.js.map +0 -1
  504. package/esm/tap.d.ts +0 -9
  505. package/esm/tap.d.ts.map +0 -1
  506. package/esm/tap.js +0 -23
  507. package/esm/tap.js.map +0 -1
  508. package/esm/zipItems.d.ts +0 -4
  509. package/esm/zipItems.d.ts.map +0 -1
  510. package/esm/zipItems.js +0 -23
  511. package/esm/zipItems.js.map +0 -1
  512. package/perf/filter-map-reduce.ts +0 -49
  513. package/perf/flatMap.ts +0 -48
  514. package/perf/switchMap.ts +0 -40
  515. package/src/Sink.ts +0 -84
  516. package/src/TSemaphore.ts +0 -8
  517. package/src/drain.ts +0 -21
  518. package/src/empty.ts +0 -5
  519. package/src/from.test.ts +0 -18
  520. package/src/from.ts +0 -18
  521. package/src/fromCallback.ts +0 -40
  522. package/src/loop.ts +0 -37
  523. package/src/map.ts +0 -83
  524. package/src/never.ts +0 -5
  525. package/src/observe.ts +0 -24
  526. package/src/reduce.ts +0 -81
  527. package/src/takeUntil.ts +0 -29
  528. package/src/tap.ts +0 -48
  529. package/src/zipItems.test.ts +0 -21
  530. package/src/zipItems.ts +0 -41
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typed/fx",
3
- "version": "0.0.9",
3
+ "version": "0.0.10",
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",
@@ -79,7 +83,8 @@
79
83
  "tslib": "^2.4.0",
80
84
  "tsx": "^3.8.2",
81
85
  "typescript": "^4.7.4",
82
- "typescript-transform-paths": "^3.3.1"
86
+ "typescript-transform-paths": "^3.3.1",
87
+ "yargs": "^17.6.0"
83
88
  },
84
89
  "exports": {
85
90
  ".": {
@@ -102,26 +107,6 @@
102
107
  "types": "./esm/Fx.d.ts"
103
108
  }
104
109
  },
105
- "./Sink": {
106
- "require": {
107
- "default": "./cjs/Sink.js",
108
- "types": "./cjs/Sink.d.ts"
109
- },
110
- "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"
123
- }
124
- },
125
110
  "./_internal": {
126
111
  "require": {
127
112
  "default": "./cjs/_internal.js",
@@ -172,16 +157,6 @@
172
157
  "types": "./esm/delay.d.ts"
173
158
  }
174
159
  },
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
160
  "./during": {
186
161
  "require": {
187
162
  "default": "./cjs/during.js",
@@ -192,14 +167,24 @@
192
167
  "types": "./esm/during.d.ts"
193
168
  }
194
169
  },
195
- "./empty": {
170
+ "./filterLoop": {
196
171
  "require": {
197
- "default": "./cjs/empty.js",
198
- "types": "./cjs/empty.d.ts"
172
+ "default": "./cjs/filterLoop.js",
173
+ "types": "./cjs/filterLoop.d.ts"
199
174
  },
200
175
  "import": {
201
- "default": "./esm/empty.js",
202
- "types": "./esm/empty.d.ts"
176
+ "default": "./esm/filterLoop.js",
177
+ "types": "./esm/filterLoop.d.ts"
178
+ }
179
+ },
180
+ "./filterMap": {
181
+ "require": {
182
+ "default": "./cjs/filterMap.js",
183
+ "types": "./cjs/filterMap.d.ts"
184
+ },
185
+ "import": {
186
+ "default": "./esm/filterMap.js",
187
+ "types": "./esm/filterMap.d.ts"
203
188
  }
204
189
  },
205
190
  "./flatMap": {
@@ -222,26 +207,6 @@
222
207
  "types": "./esm/flatMapConcurrently.d.ts"
223
208
  }
224
209
  },
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
210
  "./fromEffect": {
246
211
  "require": {
247
212
  "default": "./cjs/fromEffect.js",
@@ -252,6 +217,16 @@
252
217
  "types": "./esm/fromEffect.d.ts"
253
218
  }
254
219
  },
220
+ "./fromIterable": {
221
+ "require": {
222
+ "default": "./cjs/fromIterable.js",
223
+ "types": "./cjs/fromIterable.d.ts"
224
+ },
225
+ "import": {
226
+ "default": "./esm/fromIterable.js",
227
+ "types": "./esm/fromIterable.d.ts"
228
+ }
229
+ },
255
230
  "./hold": {
256
231
  "require": {
257
232
  "default": "./cjs/hold.js",
@@ -262,24 +237,24 @@
262
237
  "types": "./esm/hold.d.ts"
263
238
  }
264
239
  },
265
- "./loop": {
240
+ "./mapCause": {
266
241
  "require": {
267
- "default": "./cjs/loop.js",
268
- "types": "./cjs/loop.d.ts"
242
+ "default": "./cjs/mapCause.js",
243
+ "types": "./cjs/mapCause.d.ts"
269
244
  },
270
245
  "import": {
271
- "default": "./esm/loop.js",
272
- "types": "./esm/loop.d.ts"
246
+ "default": "./esm/mapCause.js",
247
+ "types": "./esm/mapCause.d.ts"
273
248
  }
274
249
  },
275
- "./map": {
250
+ "./mapEffect": {
276
251
  "require": {
277
- "default": "./cjs/map.js",
278
- "types": "./cjs/map.d.ts"
252
+ "default": "./cjs/mapEffect.js",
253
+ "types": "./cjs/mapEffect.d.ts"
279
254
  },
280
255
  "import": {
281
- "default": "./esm/map.js",
282
- "types": "./esm/map.d.ts"
256
+ "default": "./esm/mapEffect.js",
257
+ "types": "./esm/mapEffect.d.ts"
283
258
  }
284
259
  },
285
260
  "./merge": {
@@ -302,26 +277,6 @@
302
277
  "types": "./esm/multicast.d.ts"
303
278
  }
304
279
  },
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
280
  "./orElse": {
326
281
  "require": {
327
282
  "default": "./cjs/orElse.js",
@@ -352,14 +307,44 @@
352
307
  "types": "./esm/provide.d.ts"
353
308
  }
354
309
  },
355
- "./reduce": {
310
+ "./runCollect": {
356
311
  "require": {
357
- "default": "./cjs/reduce.js",
358
- "types": "./cjs/reduce.d.ts"
312
+ "default": "./cjs/runCollect.js",
313
+ "types": "./cjs/runCollect.d.ts"
359
314
  },
360
315
  "import": {
361
- "default": "./esm/reduce.js",
362
- "types": "./esm/reduce.d.ts"
316
+ "default": "./esm/runCollect.js",
317
+ "types": "./esm/runCollect.d.ts"
318
+ }
319
+ },
320
+ "./runDrain": {
321
+ "require": {
322
+ "default": "./cjs/runDrain.js",
323
+ "types": "./cjs/runDrain.d.ts"
324
+ },
325
+ "import": {
326
+ "default": "./esm/runDrain.js",
327
+ "types": "./esm/runDrain.d.ts"
328
+ }
329
+ },
330
+ "./runObserve": {
331
+ "require": {
332
+ "default": "./cjs/runObserve.js",
333
+ "types": "./cjs/runObserve.d.ts"
334
+ },
335
+ "import": {
336
+ "default": "./esm/runObserve.js",
337
+ "types": "./esm/runObserve.d.ts"
338
+ }
339
+ },
340
+ "./runReduce": {
341
+ "require": {
342
+ "default": "./cjs/runReduce.js",
343
+ "types": "./cjs/runReduce.d.ts"
344
+ },
345
+ "import": {
346
+ "default": "./esm/runReduce.js",
347
+ "types": "./esm/runReduce.d.ts"
363
348
  }
364
349
  },
365
350
  "./scheduled": {
@@ -442,16 +427,6 @@
442
427
  "types": "./esm/switchMap.d.ts"
443
428
  }
444
429
  },
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
430
  "./takeWhile": {
456
431
  "require": {
457
432
  "default": "./cjs/takeWhile.js",
@@ -462,14 +437,14 @@
462
437
  "types": "./esm/takeWhile.d.ts"
463
438
  }
464
439
  },
465
- "./tap": {
440
+ "./tapEffect": {
466
441
  "require": {
467
- "default": "./cjs/tap.js",
468
- "types": "./cjs/tap.d.ts"
442
+ "default": "./cjs/tapEffect.js",
443
+ "types": "./cjs/tapEffect.d.ts"
469
444
  },
470
445
  "import": {
471
- "default": "./esm/tap.js",
472
- "types": "./esm/tap.d.ts"
446
+ "default": "./esm/tapEffect.js",
447
+ "types": "./esm/tapEffect.d.ts"
473
448
  }
474
449
  },
475
450
  "./throttle": {
@@ -502,6 +477,16 @@
502
477
  "types": "./esm/until.d.ts"
503
478
  }
504
479
  },
480
+ "./withEmitter": {
481
+ "require": {
482
+ "default": "./cjs/withEmitter.js",
483
+ "types": "./cjs/withEmitter.d.ts"
484
+ },
485
+ "import": {
486
+ "default": "./esm/withEmitter.js",
487
+ "types": "./esm/withEmitter.d.ts"
488
+ }
489
+ },
505
490
  "./zip": {
506
491
  "require": {
507
492
  "default": "./cjs/zip.js",
@@ -512,14 +497,14 @@
512
497
  "types": "./esm/zip.d.ts"
513
498
  }
514
499
  },
515
- "./zipItems": {
500
+ "./zipIterable": {
516
501
  "require": {
517
- "default": "./cjs/zipItems.js",
518
- "types": "./cjs/zipItems.d.ts"
502
+ "default": "./cjs/zipIterable.js",
503
+ "types": "./cjs/zipIterable.d.ts"
519
504
  },
520
505
  "import": {
521
- "default": "./esm/zipItems.js",
522
- "types": "./esm/zipItems.d.ts"
506
+ "default": "./esm/zipIterable.js",
507
+ "types": "./esm/zipIterable.d.ts"
523
508
  }
524
509
  }
525
510
  }
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
  }
@@ -0,0 +1,48 @@
1
+ import * as EffectStream from '@effect/core/Stream/Stream'
2
+ import { pipe } from '@fp-ts/data/Function'
3
+ import * as M from '@most/core'
4
+ import * as Chunk from '@tsplus/stdlib/collections/Chunk'
5
+ import * as rxjs from 'rxjs'
6
+
7
+ import {
8
+ array,
9
+ effectTsStreamTest,
10
+ fxEffectTest,
11
+ iterations,
12
+ mostStreamTest,
13
+ rxjsObservableTest,
14
+ } from '../_internal.js'
15
+
16
+ import * as Stream from '@/index.js'
17
+
18
+ const filterEvens = (x: number) => x % 2 === 0
19
+ const addOne = (x: number) => x + 1
20
+ const add = (x: number, y: number): number => x + y
21
+
22
+ export const name = 'filter -> map -> scan ' + iterations + ' integers'
23
+
24
+ export const cases = [
25
+ fxEffectTest(() =>
26
+ pipe(
27
+ Stream.fromIterable(array),
28
+ Stream.filter(filterEvens),
29
+ Stream.map(addOne),
30
+ Stream.runReduce(0, add),
31
+ ),
32
+ ),
33
+ mostStreamTest(() =>
34
+ pipe(M.periodic(0), M.withItems(array), M.filter(filterEvens), M.map(addOne), M.scan(add, 0)),
35
+ ),
36
+ rxjsObservableTest(() =>
37
+ pipe(rxjs.from(array), rxjs.filter(filterEvens), rxjs.map(addOne), rxjs.scan(add, 0)),
38
+ ),
39
+
40
+ effectTsStreamTest(() =>
41
+ pipe(
42
+ EffectStream.fromChunk(Chunk.from(array)),
43
+ EffectStream.filter(filterEvens),
44
+ EffectStream.map(addOne),
45
+ EffectStream.scan(0, add),
46
+ ),
47
+ ),
48
+ ]
@@ -0,0 +1,49 @@
1
+ import * as EffectStream from '@effect/core/Stream/Stream'
2
+ import { pipe } from '@fp-ts/data/Function'
3
+ import * as M from '@most/core'
4
+ import * as Chunk from '@tsplus/stdlib/collections/Chunk'
5
+ import * as rxjs from 'rxjs'
6
+
7
+ import {
8
+ array,
9
+ effectTsStreamTest,
10
+ fxTest,
11
+ iterations,
12
+ mostStreamTest,
13
+ rxjsObservableTest,
14
+ } from '../_internal.js'
15
+
16
+ import * as Stream from '@/index.js'
17
+
18
+ const nestedArray = array.map((x) => Array.from({ length: x }, (_, i) => x * 1000 + i))
19
+
20
+ const add = (x: number, y: number): number => x + y
21
+
22
+ export const name = 'flatMap ' + iterations + ' x ' + iterations + ' integers'
23
+ export const cases = [
24
+ fxTest(() =>
25
+ pipe(
26
+ Stream.fromIterable(nestedArray),
27
+ Stream.flatMap(Stream.fromIterable),
28
+ Stream.scan(0, add),
29
+ ),
30
+ ),
31
+ mostStreamTest(() =>
32
+ pipe(
33
+ M.periodic(0),
34
+ M.withItems(nestedArray),
35
+ M.chain((ns) => pipe(M.periodic(0), M.withItems(ns))),
36
+ M.scan(add, 0),
37
+ ),
38
+ ),
39
+ rxjsObservableTest(() =>
40
+ pipe(rxjs.from(nestedArray), rxjs.flatMap(rxjs.from), rxjs.scan(add, 0)),
41
+ ),
42
+ effectTsStreamTest(() =>
43
+ pipe(
44
+ EffectStream.fromChunk(Chunk.from(nestedArray)),
45
+ EffectStream.flatMap((ns) => EffectStream.fromChunk(Chunk.from(ns))),
46
+ EffectStream.scan(0, add),
47
+ ),
48
+ ),
49
+ ]
@@ -0,0 +1,36 @@
1
+ import { pipe } from '@fp-ts/data/Function'
2
+ import * as M from '@most/core'
3
+ import * as rxjs from 'rxjs'
4
+
5
+ import { array, fxTest, iterations, mostStreamTest, rxjsObservableTest } from '../_internal.js'
6
+
7
+ import * as Stream from '@/index.js'
8
+
9
+ const nestedArray = array.map((x) => Array.from({ length: x }, (_, i) => x * 1000 + i))
10
+
11
+ const add = (x: number, y: number): number => x + y
12
+
13
+ export const name = 'switchMap ' + iterations + ' x ' + iterations + ' integers'
14
+
15
+ export const cases = [
16
+ fxTest(() =>
17
+ pipe(
18
+ Stream.fromIterable(nestedArray),
19
+ Stream.switchMap(Stream.fromIterable),
20
+ Stream.scan(0, add),
21
+ ),
22
+ ),
23
+ mostStreamTest(() =>
24
+ pipe(
25
+ M.periodic(0),
26
+ M.withItems(nestedArray),
27
+ M.map((ns) => pipe(M.periodic(0), M.withItems(ns))),
28
+ M.switchLatest,
29
+ M.scan(add, 0),
30
+ ),
31
+ ),
32
+ rxjsObservableTest(() =>
33
+ pipe(rxjs.from(nestedArray), rxjs.switchMap(rxjs.from), rxjs.scan(add, 0)),
34
+ ),
35
+ // Effect Stream is pull-based and does not offer switchMap
36
+ ]
@@ -0,0 +1,14 @@
1
+ # Performance Tests
2
+
3
+ Here is the latest output of the perf test suite run on a 2020 13" macbook pro.
4
+ It is worth noting that all the tests utilize entirely synchronous workflows, and thus
5
+ have a great favoring towards Most.js/RxJS in terms of raw performance overhead.
6
+
7
+ If you need strict performance over push-based streams, definitely use Most.js, but if you are
8
+ interested in the superpowers of `Effect`, and are interested in using push-based streams as a means
9
+ of orchestration `Fx` is still a great bet as it won't often be your bottleneck.
10
+
11
+ If you need strict performance no matter what, none of these abstractions should be utilized at all.
12
+
13
+ ## Test Results
14
+
package/perf/readme.md ADDED
@@ -0,0 +1,40 @@
1
+ # Performance Tests
2
+
3
+ Here is the latest output of the perf test suite run on a 2020 13" macbook pro.
4
+ It is worth noting that all the tests utilize entirely synchronous workflows, and thus
5
+ have a great favoring towards Most.js/RxJS in terms of raw performance overhead.
6
+
7
+ If you need strict performance over push-based streams, definitely use Most.js, but if you are
8
+ interested in the superpowers of `Effect`, and are interested in using push-based streams as a means
9
+ of orchestration `Fx` is still a great bet as it won't often be your bottleneck.
10
+
11
+ If you need strict performance no matter what, none of these abstractions should be utilized at all.
12
+
13
+ ## Test Results
14
+
15
+ ### filter -> map -> scan 10000 integers
16
+ | Library | Ops/sec | ± | Samples |
17
+ | --------------|------------|--------|---------|
18
+ | Fx | 3801.43 | 5.81% | 82 |
19
+ | @most/core | 384094.58 | 12.96% | 64 |
20
+ | RxJS @7 | 2255.04 | 12.60% | 87 |
21
+ | Effect/Stream | 91.50 | 29.12% | 41 |
22
+ -------------------------------------------------------
23
+
24
+ ### flatMap 10000 x 10000 integers
25
+ | Library | Ops/sec | ± | Samples |
26
+ | --------------|------------|--------|---------|
27
+ | Fx | 6474.91 | 11.85% | 76 |
28
+ | @most/core | 276654.02 | 19.33% | 46 |
29
+ | RxJS @7 | 10322.11 | 52.99% | 77 |
30
+ | Effect/Stream | 2.29 | 124.34% | 9 |
31
+ -------------------------------------------------------
32
+
33
+ ### switchMap 10000 x 10000 integers
34
+ | Library | Ops/sec | ± | Samples |
35
+ | --------------|------------|--------|---------|
36
+ | Fx | 4759.84 | 13.52% | 63 |
37
+ | @most/core | 300663.64 | 14.57% | 55 |
38
+ | RxJS @7 | 16469.83 | 2.63% | 75 |
39
+ -------------------------------------------------------
40
+