rubico 1.9.6 → 2.0.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 (589) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc.js +3 -2
  3. package/.github/workflows/nodejs.yml +1 -1
  4. package/AggregateReducer.js +19 -0
  5. package/AggregateReducer.test.js +82 -0
  6. package/CHANGELOG.md +22 -1
  7. package/Transducer.js +162 -0
  8. package/Transducer.test.js +117 -0
  9. package/_internal/ComparisonOperator.js +68 -0
  10. package/_internal/File.js +41 -0
  11. package/_internal/FlatMappingAsyncIterator.js +4 -4
  12. package/_internal/FlatMappingIterator.js +1 -1
  13. package/_internal/TimeInLoopSuite.js +138 -0
  14. package/_internal/areAnyValuesPromises.js +23 -0
  15. package/_internal/{arrayAll.js → arrayEvery.js} +4 -4
  16. package/_internal/arrayExtend.js +3 -2
  17. package/_internal/arrayFilter.js +3 -4
  18. package/_internal/{arrayAny.js → arraySome.js} +8 -8
  19. package/_internal/{asyncIteratorAll.js → asyncIteratorEvery.js} +4 -4
  20. package/_internal/{asyncIteratorAny.js → asyncIteratorSome.js} +4 -4
  21. package/_internal/curry4.test.js +25 -0
  22. package/_internal/curry5.test.js +29 -0
  23. package/_internal/curryArgs2.js +43 -0
  24. package/_internal/curryArgs3.test.js +21 -0
  25. package/_internal/curryArgs4.js +65 -0
  26. package/_internal/curryArgs4.test.js +25 -0
  27. package/_internal/equals.js +13 -0
  28. package/_internal/findAllFilePaths.js +22 -0
  29. package/_internal/funcApply.js +2 -0
  30. package/_internal/funcCall.js +14 -0
  31. package/_internal/functionArrayAll.js +26 -0
  32. package/_internal/functionArrayAllSeries.js +55 -0
  33. package/_internal/functionObjectAll.js +32 -0
  34. package/_internal/genericReduce.js +4 -22
  35. package/_internal/genericTransform.js +15 -15
  36. package/_internal/improvedGenericTransform.js +93 -0
  37. package/_internal/{iteratorAll.js → iteratorEvery.js} +4 -4
  38. package/_internal/{iteratorAny.js → iteratorSome.js} +6 -6
  39. package/_internal/leftResolverRightResolverCompare.js +19 -0
  40. package/_internal/leftResolverRightValueCompare.js +16 -0
  41. package/_internal/leftValueRightResolverCompare.js +16 -0
  42. package/_internal/objectReduce.js +0 -1
  43. package/_internal/pathResolve.js +6 -0
  44. package/_internal/{reducerAll.js → reducerEvery.js} +4 -4
  45. package/_internal/reducerFlatMap.js +4 -4
  46. package/_internal/reducerFlatten.js +1 -1
  47. package/_internal/{reducerAny.js → reducerSome.js} +4 -4
  48. package/_internal/timeInLoop.js +37 -0
  49. package/_internal/timeInLoop.test.js +18 -0
  50. package/_internal/timeInLoopAsync.js +35 -0
  51. package/_internal/timeInLoopAsync.test.js +22 -0
  52. package/all.js +105 -45
  53. package/always.js +3 -9
  54. package/and.js +69 -45
  55. package/archive/{FlatMappingIteratorCool.js → FlatMappingIterator-2020-09-28.js} +1 -1
  56. package/archive/_Promise-2023-05-29.js +93 -0
  57. package/archive/arrayMap2-2023-05-29.js +73 -0
  58. package/archive/benchmarks-v1.9.7/all.js +34 -0
  59. package/archive/benchmarks-v1.9.7/and.js +24 -0
  60. package/archive/benchmarks-v1.9.7/assign.js +174 -0
  61. package/archive/benchmarks-v1.9.7/curry.js +55 -0
  62. package/archive/benchmarks-v1.9.7/eq.js +25 -0
  63. package/archive/benchmarks-v1.9.7/filter.js +1322 -0
  64. package/archive/benchmarks-v1.9.7/flatMap.js +48 -0
  65. package/archive/benchmarks-v1.9.7/get.js +44 -0
  66. package/archive/benchmarks-v1.9.7/gt.js +25 -0
  67. package/archive/benchmarks-v1.9.7/gte.js +25 -0
  68. package/archive/benchmarks-v1.9.7/lt.js +25 -0
  69. package/archive/benchmarks-v1.9.7/lte.js +25 -0
  70. package/archive/benchmarks-v1.9.7/map.js +892 -0
  71. package/archive/benchmarks-v1.9.7/omit.js +28 -0
  72. package/archive/benchmarks-v1.9.7/or.js +51 -0
  73. package/archive/benchmarks-v1.9.7/pick.js +24 -0
  74. package/archive/benchmarks-v1.9.7/pipe.js +152 -0
  75. package/archive/benchmarks-v1.9.7/reduce.js +739 -0
  76. package/archive/benchmarks-v1.9.7/switchCase.js +256 -0
  77. package/archive/benchmarks-v1.9.7/tap.js +90 -0
  78. package/archive/benchmarks-v1.9.7/transform.js +218 -0
  79. package/archive/benchmarks-v1.9.7/tryCatch.js +108 -0
  80. package/assign.js +45 -22
  81. package/bench +65 -0
  82. package/benchmark-output/v1.9.7 +268 -0
  83. package/benchmarks/all.async.js +43 -0
  84. package/benchmarks/all.js +42 -33
  85. package/benchmarks/always.js +15 -0
  86. package/benchmarks/and.async.js +25 -0
  87. package/benchmarks/and.js +20 -19
  88. package/benchmarks/assign.async.js +27 -0
  89. package/benchmarks/assign.js +20 -167
  90. package/benchmarks/curry.js +34 -54
  91. package/benchmarks/eq.async.js +23 -0
  92. package/benchmarks/eq.js +17 -19
  93. package/benchmarks/every.async.js +19 -0
  94. package/benchmarks/every.js +19 -0
  95. package/benchmarks/filter.async.js +32 -0
  96. package/benchmarks/filter.js +27 -1311
  97. package/benchmarks/flatMap.async.js +26 -0
  98. package/benchmarks/flatMap.js +26 -36
  99. package/benchmarks/get.async.js +19 -0
  100. package/benchmarks/get.js +27 -32
  101. package/benchmarks/gt.async.js +23 -0
  102. package/benchmarks/gt.js +17 -19
  103. package/benchmarks/gte.async.js +23 -0
  104. package/benchmarks/gte.js +17 -19
  105. package/benchmarks/lt.async.js +23 -0
  106. package/benchmarks/lt.js +17 -19
  107. package/benchmarks/lte.async.js +23 -0
  108. package/benchmarks/lte.js +17 -19
  109. package/benchmarks/map.async.js +43 -0
  110. package/benchmarks/map.js +24 -876
  111. package/benchmarks/misc/Promise.js +26 -0
  112. package/benchmarks/misc/isPromise.js +30 -0
  113. package/benchmarks/misc/promiseAll.js +36 -0
  114. package/benchmarks/not.js +23 -0
  115. package/benchmarks/omit.js +30 -20
  116. package/benchmarks/or.async.js +25 -0
  117. package/benchmarks/or.js +23 -49
  118. package/benchmarks/pick.js +30 -16
  119. package/benchmarks/pipe.async.js +47 -0
  120. package/benchmarks/pipe.js +46 -151
  121. package/benchmarks/reduce.async.js +32 -0
  122. package/benchmarks/reduce.js +27 -728
  123. package/benchmarks/set.async.js +19 -0
  124. package/benchmarks/set.js +41 -0
  125. package/benchmarks/some.async.js +19 -0
  126. package/benchmarks/some.js +19 -0
  127. package/benchmarks/switchCase.async.js +27 -0
  128. package/benchmarks/switchCase.js +55 -256
  129. package/benchmarks/tap.js +10 -85
  130. package/benchmarks/thunkify.js +15 -0
  131. package/benchmarks/transform.async.js +27 -0
  132. package/benchmarks/transform.js +28 -206
  133. package/benchmarks/tryCatch.async.js +25 -0
  134. package/benchmarks/tryCatch.js +24 -100
  135. package/{distributor.js → build} +50 -50
  136. package/compose.js +46 -0
  137. package/curry.js +20 -12
  138. package/dist/__.es.js +2 -2
  139. package/dist/__.es.min.js +2 -2
  140. package/dist/__.js +2 -2
  141. package/dist/__.min.js +2 -2
  142. package/dist/__.min.mjs +2 -2
  143. package/dist/__.mjs +2 -2
  144. package/dist/all.es.js +173 -92
  145. package/dist/all.es.min.js +3 -3
  146. package/dist/all.js +173 -92
  147. package/dist/all.min.js +3 -3
  148. package/dist/all.min.mjs +3 -3
  149. package/dist/all.mjs +173 -92
  150. package/dist/always.es.js +2 -2
  151. package/dist/always.es.min.js +2 -2
  152. package/dist/always.js +2 -2
  153. package/dist/always.min.js +2 -2
  154. package/dist/always.min.mjs +2 -2
  155. package/dist/always.mjs +2 -2
  156. package/dist/and.es.js +101 -32
  157. package/dist/and.es.min.js +3 -3
  158. package/dist/and.js +101 -32
  159. package/dist/and.min.js +3 -3
  160. package/dist/and.min.mjs +3 -3
  161. package/dist/and.mjs +101 -32
  162. package/dist/assign.es.js +37 -10
  163. package/dist/assign.es.min.js +3 -3
  164. package/dist/assign.js +37 -10
  165. package/dist/assign.min.js +3 -3
  166. package/dist/assign.min.mjs +3 -3
  167. package/dist/assign.mjs +37 -10
  168. package/dist/compose.es.js +71 -0
  169. package/dist/compose.es.min.js +7 -0
  170. package/dist/compose.js +78 -0
  171. package/dist/compose.min.js +8 -0
  172. package/dist/compose.min.mjs +7 -0
  173. package/dist/compose.mjs +71 -0
  174. package/dist/curry.es.js +2 -2
  175. package/dist/curry.es.min.js +2 -2
  176. package/dist/curry.js +2 -2
  177. package/dist/curry.min.js +2 -2
  178. package/dist/curry.min.mjs +2 -2
  179. package/dist/curry.mjs +2 -2
  180. package/dist/eq.es.js +172 -49
  181. package/dist/eq.es.min.js +3 -3
  182. package/dist/eq.js +172 -49
  183. package/dist/eq.min.js +3 -3
  184. package/dist/eq.min.mjs +3 -3
  185. package/dist/eq.mjs +172 -49
  186. package/dist/every.es.js +194 -0
  187. package/dist/every.es.min.js +7 -0
  188. package/dist/every.js +201 -0
  189. package/dist/every.min.js +8 -0
  190. package/dist/every.min.mjs +7 -0
  191. package/dist/every.mjs +194 -0
  192. package/dist/filter.es.js +14 -108
  193. package/dist/filter.es.min.js +3 -3
  194. package/dist/filter.js +14 -108
  195. package/dist/filter.min.js +3 -3
  196. package/dist/filter.min.mjs +3 -3
  197. package/dist/filter.mjs +14 -108
  198. package/dist/flatMap.es.js +27 -214
  199. package/dist/flatMap.es.min.js +3 -3
  200. package/dist/flatMap.js +27 -214
  201. package/dist/flatMap.min.js +3 -3
  202. package/dist/flatMap.min.mjs +3 -3
  203. package/dist/flatMap.mjs +27 -214
  204. package/dist/{x/forEach.es.js → forEach.es.js} +52 -70
  205. package/dist/forEach.es.min.js +7 -0
  206. package/dist/{x/forEach.js → forEach.js} +52 -70
  207. package/dist/forEach.min.js +8 -0
  208. package/dist/forEach.min.mjs +7 -0
  209. package/dist/{x/forEach.mjs → forEach.mjs} +52 -70
  210. package/dist/get.es.js +60 -5
  211. package/dist/get.es.min.js +3 -3
  212. package/dist/get.js +60 -5
  213. package/dist/get.min.js +3 -3
  214. package/dist/get.min.mjs +3 -3
  215. package/dist/get.mjs +60 -5
  216. package/dist/gt.es.js +171 -48
  217. package/dist/gt.es.min.js +3 -3
  218. package/dist/gt.js +171 -48
  219. package/dist/gt.min.js +3 -3
  220. package/dist/gt.min.mjs +3 -3
  221. package/dist/gt.mjs +171 -48
  222. package/dist/gte.es.js +171 -48
  223. package/dist/gte.es.min.js +3 -3
  224. package/dist/gte.js +171 -48
  225. package/dist/gte.min.js +3 -3
  226. package/dist/gte.min.mjs +3 -3
  227. package/dist/gte.mjs +171 -48
  228. package/dist/lt.es.js +171 -48
  229. package/dist/lt.es.min.js +3 -3
  230. package/dist/lt.js +171 -48
  231. package/dist/lt.min.js +3 -3
  232. package/dist/lt.min.mjs +3 -3
  233. package/dist/lt.mjs +171 -48
  234. package/dist/lte.es.js +171 -48
  235. package/dist/lte.es.min.js +3 -3
  236. package/dist/lte.js +171 -48
  237. package/dist/lte.min.js +3 -3
  238. package/dist/lte.min.mjs +3 -3
  239. package/dist/lte.mjs +171 -48
  240. package/dist/map.es.js +12 -101
  241. package/dist/map.es.min.js +3 -3
  242. package/dist/map.js +12 -101
  243. package/dist/map.min.js +3 -3
  244. package/dist/map.min.mjs +3 -3
  245. package/dist/map.mjs +12 -101
  246. package/dist/not.es.js +75 -14
  247. package/dist/not.es.min.js +3 -3
  248. package/dist/not.js +75 -14
  249. package/dist/not.min.js +3 -3
  250. package/dist/not.min.mjs +3 -3
  251. package/dist/not.mjs +75 -14
  252. package/dist/omit.es.js +38 -3
  253. package/dist/omit.es.min.js +3 -3
  254. package/dist/omit.js +38 -3
  255. package/dist/omit.min.js +3 -3
  256. package/dist/omit.min.mjs +3 -3
  257. package/dist/omit.mjs +38 -3
  258. package/dist/or.es.js +99 -31
  259. package/dist/or.es.min.js +3 -3
  260. package/dist/or.js +99 -31
  261. package/dist/or.min.js +3 -3
  262. package/dist/or.min.mjs +3 -3
  263. package/dist/or.mjs +99 -31
  264. package/dist/pick.es.js +38 -3
  265. package/dist/pick.es.min.js +3 -3
  266. package/dist/pick.js +38 -3
  267. package/dist/pick.min.js +3 -3
  268. package/dist/pick.min.mjs +3 -3
  269. package/dist/pick.mjs +38 -3
  270. package/dist/pipe.es.js +42 -46
  271. package/dist/pipe.es.min.js +3 -3
  272. package/dist/pipe.js +42 -46
  273. package/dist/pipe.min.js +3 -3
  274. package/dist/pipe.min.mjs +3 -3
  275. package/dist/pipe.mjs +42 -46
  276. package/dist/reduce.es.js +52 -94
  277. package/dist/reduce.es.min.js +3 -3
  278. package/dist/reduce.js +52 -94
  279. package/dist/reduce.min.js +3 -3
  280. package/dist/reduce.min.mjs +3 -3
  281. package/dist/reduce.mjs +52 -94
  282. package/dist/rubico.es.js +746 -869
  283. package/dist/rubico.es.min.js +3 -3
  284. package/dist/rubico.js +746 -869
  285. package/dist/rubico.min.js +3 -3
  286. package/dist/rubico.min.mjs +3 -3
  287. package/dist/rubico.mjs +746 -869
  288. package/dist/set.es.js +18 -3
  289. package/dist/set.es.min.js +3 -3
  290. package/dist/set.js +18 -3
  291. package/dist/set.min.js +3 -3
  292. package/dist/set.min.mjs +3 -3
  293. package/dist/set.mjs +18 -3
  294. package/dist/{any.js → some.es.js} +64 -54
  295. package/dist/some.es.min.js +7 -0
  296. package/dist/{any.mjs → some.js} +72 -48
  297. package/dist/some.min.js +8 -0
  298. package/dist/some.min.mjs +7 -0
  299. package/dist/{any.es.js → some.mjs} +65 -48
  300. package/dist/switchCase.es.js +55 -5
  301. package/dist/switchCase.es.min.js +3 -3
  302. package/dist/switchCase.js +55 -5
  303. package/dist/switchCase.min.js +3 -3
  304. package/dist/switchCase.min.mjs +3 -3
  305. package/dist/switchCase.mjs +55 -5
  306. package/dist/tap.es.js +2 -9
  307. package/dist/tap.es.min.js +3 -3
  308. package/dist/tap.js +2 -9
  309. package/dist/tap.min.js +3 -3
  310. package/dist/tap.min.mjs +3 -3
  311. package/dist/tap.mjs +2 -9
  312. package/dist/thunkify.es.js +45 -2
  313. package/dist/thunkify.es.min.js +3 -3
  314. package/dist/thunkify.js +45 -2
  315. package/dist/thunkify.min.js +3 -3
  316. package/dist/thunkify.min.mjs +3 -3
  317. package/dist/thunkify.mjs +45 -2
  318. package/dist/transform.es.js +35 -71
  319. package/dist/transform.es.min.js +3 -3
  320. package/dist/transform.js +35 -71
  321. package/dist/transform.min.js +3 -3
  322. package/dist/transform.min.mjs +3 -3
  323. package/dist/transform.mjs +35 -71
  324. package/dist/tryCatch.es.js +33 -17
  325. package/dist/tryCatch.es.min.js +3 -3
  326. package/dist/tryCatch.js +33 -17
  327. package/dist/tryCatch.min.js +3 -3
  328. package/dist/tryCatch.min.mjs +3 -3
  329. package/dist/tryCatch.mjs +33 -17
  330. package/dist/x/append.es.js +2 -2
  331. package/dist/x/append.es.min.js +2 -2
  332. package/dist/x/append.js +2 -2
  333. package/dist/x/append.min.js +2 -2
  334. package/dist/x/append.min.mjs +2 -2
  335. package/dist/x/append.mjs +2 -2
  336. package/dist/x/callProp.es.js +2 -2
  337. package/dist/x/callProp.es.min.js +2 -2
  338. package/dist/x/callProp.js +2 -2
  339. package/dist/x/callProp.min.js +2 -2
  340. package/dist/x/callProp.min.mjs +2 -2
  341. package/dist/x/callProp.mjs +2 -2
  342. package/dist/x/defaultsDeep.es.js +2 -2
  343. package/dist/x/defaultsDeep.es.min.js +2 -2
  344. package/dist/x/defaultsDeep.js +2 -2
  345. package/dist/x/defaultsDeep.min.js +2 -2
  346. package/dist/x/defaultsDeep.min.mjs +2 -2
  347. package/dist/x/defaultsDeep.mjs +2 -2
  348. package/dist/x/differenceWith.es.js +7 -7
  349. package/dist/x/differenceWith.es.min.js +3 -3
  350. package/dist/x/differenceWith.js +7 -7
  351. package/dist/x/differenceWith.min.js +2 -2
  352. package/dist/x/differenceWith.min.mjs +3 -3
  353. package/dist/x/differenceWith.mjs +7 -7
  354. package/dist/x/filterOut.es.js +60 -117
  355. package/dist/x/filterOut.es.min.js +3 -3
  356. package/dist/x/filterOut.js +60 -117
  357. package/dist/x/filterOut.min.js +3 -3
  358. package/dist/x/filterOut.min.mjs +3 -3
  359. package/dist/x/filterOut.mjs +60 -117
  360. package/dist/x/find.es.js +2 -2
  361. package/dist/x/find.es.min.js +2 -2
  362. package/dist/x/find.js +2 -2
  363. package/dist/x/find.min.js +2 -2
  364. package/dist/x/find.min.mjs +2 -2
  365. package/dist/x/find.mjs +2 -2
  366. package/dist/x/findIndex.es.js +2 -2
  367. package/dist/x/findIndex.es.min.js +2 -2
  368. package/dist/x/findIndex.js +2 -2
  369. package/dist/x/findIndex.min.js +2 -2
  370. package/dist/x/findIndex.min.mjs +2 -2
  371. package/dist/x/findIndex.mjs +2 -2
  372. package/dist/x/first.es.js +2 -2
  373. package/dist/x/first.es.min.js +2 -2
  374. package/dist/x/first.js +2 -2
  375. package/dist/x/first.min.js +2 -2
  376. package/dist/x/first.min.mjs +2 -2
  377. package/dist/x/first.mjs +2 -2
  378. package/dist/x/flatten.es.js +20 -207
  379. package/dist/x/flatten.es.min.js +3 -3
  380. package/dist/x/flatten.js +20 -207
  381. package/dist/x/flatten.min.js +3 -3
  382. package/dist/x/flatten.min.mjs +3 -3
  383. package/dist/x/flatten.mjs +20 -207
  384. package/dist/x/groupBy.es.js +52 -94
  385. package/dist/x/groupBy.es.min.js +3 -3
  386. package/dist/x/groupBy.js +52 -94
  387. package/dist/x/groupBy.min.js +3 -3
  388. package/dist/x/groupBy.min.mjs +3 -3
  389. package/dist/x/groupBy.mjs +52 -94
  390. package/dist/x/has.es.js +2 -2
  391. package/dist/x/has.es.min.js +2 -2
  392. package/dist/x/has.js +2 -2
  393. package/dist/x/has.min.js +2 -2
  394. package/dist/x/has.min.mjs +2 -2
  395. package/dist/x/has.mjs +2 -2
  396. package/dist/x/identity.es.js +2 -2
  397. package/dist/x/identity.es.min.js +2 -2
  398. package/dist/x/identity.js +2 -2
  399. package/dist/x/identity.min.js +2 -2
  400. package/dist/x/identity.min.mjs +2 -2
  401. package/dist/x/identity.mjs +2 -2
  402. package/dist/x/includes.es.js +2 -2
  403. package/dist/x/includes.es.min.js +2 -2
  404. package/dist/x/includes.js +2 -2
  405. package/dist/x/includes.min.js +2 -2
  406. package/dist/x/includes.min.mjs +2 -2
  407. package/dist/x/includes.mjs +2 -2
  408. package/dist/x/isDeepEqual.es.js +2 -2
  409. package/dist/x/isDeepEqual.es.min.js +2 -2
  410. package/dist/x/isDeepEqual.js +2 -2
  411. package/dist/x/isDeepEqual.min.js +2 -2
  412. package/dist/x/isDeepEqual.min.mjs +2 -2
  413. package/dist/x/isDeepEqual.mjs +2 -2
  414. package/dist/x/isEmpty.es.js +2 -2
  415. package/dist/x/isEmpty.es.min.js +2 -2
  416. package/dist/x/isEmpty.js +2 -2
  417. package/dist/x/isEmpty.min.js +2 -2
  418. package/dist/x/isEmpty.min.mjs +2 -2
  419. package/dist/x/isEmpty.mjs +2 -2
  420. package/dist/x/isEqual.es.js +2 -2
  421. package/dist/x/isEqual.es.min.js +2 -2
  422. package/dist/x/isEqual.js +2 -2
  423. package/dist/x/isEqual.min.js +2 -2
  424. package/dist/x/isEqual.min.mjs +2 -2
  425. package/dist/x/isEqual.mjs +2 -2
  426. package/dist/x/isFunction.es.js +2 -2
  427. package/dist/x/isFunction.es.min.js +2 -2
  428. package/dist/x/isFunction.js +2 -2
  429. package/dist/x/isFunction.min.js +2 -2
  430. package/dist/x/isFunction.min.mjs +2 -2
  431. package/dist/x/isFunction.mjs +2 -2
  432. package/dist/x/isIn.es.js +2 -2
  433. package/dist/x/isIn.es.min.js +2 -2
  434. package/dist/x/isIn.js +2 -2
  435. package/dist/x/isIn.min.js +2 -2
  436. package/dist/x/isIn.min.mjs +2 -2
  437. package/dist/x/isIn.mjs +2 -2
  438. package/dist/x/isObject.es.js +2 -2
  439. package/dist/x/isObject.es.min.js +2 -2
  440. package/dist/x/isObject.js +2 -2
  441. package/dist/x/isObject.min.js +2 -2
  442. package/dist/x/isObject.min.mjs +2 -2
  443. package/dist/x/isObject.mjs +2 -2
  444. package/dist/x/isString.es.js +2 -2
  445. package/dist/x/isString.es.min.js +2 -2
  446. package/dist/x/isString.js +2 -2
  447. package/dist/x/isString.min.js +2 -2
  448. package/dist/x/isString.min.mjs +2 -2
  449. package/dist/x/isString.mjs +2 -2
  450. package/dist/x/keys.es.js +2 -2
  451. package/dist/x/keys.es.min.js +2 -2
  452. package/dist/x/keys.js +2 -2
  453. package/dist/x/keys.min.js +2 -2
  454. package/dist/x/keys.min.mjs +2 -2
  455. package/dist/x/keys.mjs +2 -2
  456. package/dist/x/last.es.js +2 -2
  457. package/dist/x/last.es.min.js +2 -2
  458. package/dist/x/last.js +2 -2
  459. package/dist/x/last.min.js +2 -2
  460. package/dist/x/last.min.mjs +2 -2
  461. package/dist/x/last.mjs +2 -2
  462. package/dist/x/maxBy.es.js +59 -6
  463. package/dist/x/maxBy.es.min.js +3 -3
  464. package/dist/x/maxBy.js +59 -6
  465. package/dist/x/maxBy.min.js +3 -3
  466. package/dist/x/maxBy.min.mjs +3 -3
  467. package/dist/x/maxBy.mjs +59 -6
  468. package/dist/x/noop.es.js +2 -2
  469. package/dist/x/noop.es.min.js +2 -2
  470. package/dist/x/noop.js +2 -2
  471. package/dist/x/noop.min.js +2 -2
  472. package/dist/x/noop.min.mjs +2 -2
  473. package/dist/x/noop.mjs +2 -2
  474. package/dist/x/pluck.es.js +32 -103
  475. package/dist/x/pluck.es.min.js +3 -3
  476. package/dist/x/pluck.js +32 -103
  477. package/dist/x/pluck.min.js +3 -3
  478. package/dist/x/pluck.min.mjs +3 -3
  479. package/dist/x/pluck.mjs +32 -103
  480. package/dist/x/prepend.es.js +2 -2
  481. package/dist/x/prepend.es.min.js +2 -2
  482. package/dist/x/prepend.js +2 -2
  483. package/dist/x/prepend.min.js +2 -2
  484. package/dist/x/prepend.min.mjs +2 -2
  485. package/dist/x/prepend.mjs +2 -2
  486. package/dist/x/size.es.js +2 -2
  487. package/dist/x/size.es.min.js +2 -2
  488. package/dist/x/size.js +2 -2
  489. package/dist/x/size.min.js +2 -2
  490. package/dist/x/size.min.mjs +2 -2
  491. package/dist/x/size.mjs +2 -2
  492. package/dist/x/trace.es.js +2 -9
  493. package/dist/x/trace.es.min.js +3 -3
  494. package/dist/x/trace.js +2 -9
  495. package/dist/x/trace.min.js +3 -3
  496. package/dist/x/trace.min.mjs +3 -3
  497. package/dist/x/trace.mjs +2 -9
  498. package/dist/x/unionWith.es.js +2 -2
  499. package/dist/x/unionWith.es.min.js +2 -2
  500. package/dist/x/unionWith.js +2 -2
  501. package/dist/x/unionWith.min.js +2 -2
  502. package/dist/x/unionWith.min.mjs +2 -2
  503. package/dist/x/unionWith.mjs +2 -2
  504. package/dist/x/uniq.es.js +2 -2
  505. package/dist/x/uniq.es.min.js +2 -2
  506. package/dist/x/uniq.js +2 -2
  507. package/dist/x/uniq.min.js +2 -2
  508. package/dist/x/uniq.min.mjs +2 -2
  509. package/dist/x/uniq.mjs +2 -2
  510. package/dist/x/unless.es.js +2 -2
  511. package/dist/x/unless.es.min.js +2 -2
  512. package/dist/x/unless.js +2 -2
  513. package/dist/x/unless.min.js +2 -2
  514. package/dist/x/unless.min.mjs +2 -2
  515. package/dist/x/unless.mjs +2 -2
  516. package/dist/x/values.es.js +2 -2
  517. package/dist/x/values.es.min.js +2 -2
  518. package/dist/x/values.js +2 -2
  519. package/dist/x/values.min.js +2 -2
  520. package/dist/x/values.min.mjs +2 -2
  521. package/dist/x/values.mjs +2 -2
  522. package/dist/x/when.es.js +2 -2
  523. package/dist/x/when.es.min.js +2 -2
  524. package/dist/x/when.js +2 -2
  525. package/dist/x/when.min.js +2 -2
  526. package/dist/x/when.min.mjs +2 -2
  527. package/dist/x/when.mjs +2 -2
  528. package/dist-test.js +9 -2025
  529. package/eq.js +21 -63
  530. package/es.js +746 -869
  531. package/every.js +94 -0
  532. package/filter.js +83 -125
  533. package/flatMap.js +105 -154
  534. package/forEach.js +82 -0
  535. package/get.js +44 -36
  536. package/global.js +6 -4
  537. package/gt.js +15 -58
  538. package/gte.js +14 -57
  539. package/index.js +746 -869
  540. package/lt.js +17 -60
  541. package/lte.js +14 -57
  542. package/map.js +153 -203
  543. package/memory-usage/reduce.js +2 -2
  544. package/not.js +30 -49
  545. package/omit.js +36 -13
  546. package/or.js +64 -41
  547. package/package.json +7 -7
  548. package/pick.js +52 -22
  549. package/pipe.js +27 -92
  550. package/reduce.js +114 -129
  551. package/rubico.js +10 -8
  552. package/set.js +60 -24
  553. package/some.js +105 -0
  554. package/switchCase.js +29 -25
  555. package/tap.js +15 -45
  556. package/test.js +847 -1083
  557. package/thunkify.js +11 -5
  558. package/transform.js +57 -81
  559. package/tryCatch.js +38 -32
  560. package/x/differenceWith.js +3 -3
  561. package/x/filterOut.test.js +6 -6
  562. package/x/flatten.js +1 -1
  563. package/x/flatten.test.js +0 -8
  564. package/x/index.js +0 -2
  565. package/x/pluck.js +18 -27
  566. package/x/pluck.test.js +3 -7
  567. package/x/timeInLoop.js +16 -25
  568. package/x/timeInLoop.test.js +8 -4
  569. package/any.js +0 -88
  570. package/dist/any.es.min.js +0 -7
  571. package/dist/any.min.js +0 -8
  572. package/dist/any.min.mjs +0 -7
  573. package/dist/fork.es.js +0 -159
  574. package/dist/fork.es.min.js +0 -7
  575. package/dist/fork.js +0 -166
  576. package/dist/fork.min.js +0 -8
  577. package/dist/fork.min.mjs +0 -7
  578. package/dist/fork.mjs +0 -159
  579. package/dist/x/forEach.es.min.js +0 -7
  580. package/dist/x/forEach.min.js +0 -8
  581. package/dist/x/forEach.min.mjs +0 -7
  582. package/fork.js +0 -91
  583. package/x/forEach.js +0 -93
  584. package/x/forEach.test.js +0 -218
  585. /package/{benchmarks → archive/benchmarks-v1.9.7}/any.js +0 -0
  586. /package/{x/forEach.benchmark.js → archive/benchmarks-v1.9.7/forEach.js} +0 -0
  587. /package/{benchmarks → archive/benchmarks-v1.9.7}/fork.js +0 -0
  588. /package/{benchmarks → archive/benchmarks-v1.9.7}/integration.js +0 -0
  589. /package/{benchmarks → archive/benchmarks-v1.9.7}/misc.js +0 -0
package/.eslintignore ADDED
@@ -0,0 +1,5 @@
1
+ archive
2
+ dist
3
+ es.js
4
+ index.js
5
+ benchmarks
package/.eslintrc.js CHANGED
@@ -192,7 +192,7 @@ module.exports = {
192
192
  'allowForLoopAfterthoughts': true
193
193
  }
194
194
  ],
195
- 'no-process-env': 'error',
195
+ 'no-process-env': 'off',
196
196
  'no-process-exit': 'error',
197
197
  'no-promise-executor-return': 'off',
198
198
  'no-proto': 'error',
@@ -209,7 +209,8 @@ module.exports = {
209
209
  'no-sequences': 'off',
210
210
  'no-shadow': 'off',
211
211
  'no-spaced-func': 'error',
212
- 'no-sync': 'error',
212
+ 'no-sparse-arrays': 'off',
213
+ 'no-sync': 'off',
213
214
  'no-tabs': 'error',
214
215
  'no-template-curly-in-string': 'error',
215
216
  'no-ternary': 'off',
@@ -16,7 +16,7 @@ jobs:
16
16
 
17
17
  strategy:
18
18
  matrix:
19
- node-version: [14.x, 15.x, 16.x, 17.x, 18.x]
19
+ node-version: [16.x, 18.x, 20.x]
20
20
 
21
21
  steps:
22
22
  - uses: actions/checkout@v2
@@ -0,0 +1,19 @@
1
+ const reducerConcat = require('./_internal/reducerConcat')
2
+ const identity = require('./_internal/identity')
3
+
4
+ /**
5
+ * @name AggregateReducer
6
+ *
7
+ * @synopsis
8
+ * ```coffeescript [specscript]
9
+ * AggregateReducer(reducers Array<reducer function>) -> aggregateReducer function
10
+ * ```
11
+ */
12
+ const AggregateReducer = function (reducers) {
13
+ if (reducers.length == 0) {
14
+ return identity
15
+ }
16
+ return reducers.reduce(reducerConcat, identity)
17
+ }
18
+
19
+ module.exports = AggregateReducer
@@ -0,0 +1,82 @@
1
+ const assert = require('assert')
2
+ const reduce = require('./reduce')
3
+ const AggregateReducer = require('./AggregateReducer')
4
+
5
+ describe('AggregateReducer', () => {
6
+ it('Combines reducers', async () => {
7
+ const reducerA = (state, action) => {
8
+ if (action.type == 'A') {
9
+ return { ...state, A: true }
10
+ }
11
+ return state
12
+ }
13
+ const reducerB = (state, action) => {
14
+ if (action.type == 'B') {
15
+ return { ...state, B: true }
16
+ }
17
+ return state
18
+ }
19
+ const reducerC = (state, action) => {
20
+ if (action.type == 'C') {
21
+ return { ...state, C: true }
22
+ }
23
+ return state
24
+ }
25
+
26
+ const combinedReducer = AggregateReducer([
27
+ reducerA,
28
+ reducerB,
29
+ reducerC,
30
+ ])
31
+
32
+ const stateA = [{ type: 'A' }].reduce(combinedReducer, {})
33
+ assert.deepEqual(stateA, { A: true })
34
+
35
+ const stateAB = [{ type: 'A' }, { type: 'B' }].reduce(combinedReducer, {})
36
+ assert.deepEqual(stateAB, { A: true, B: true })
37
+
38
+ const stateABC = [{ type: 'A' }, { type: 'B' }, { type: 'C' }].reduce(combinedReducer, {})
39
+ assert.deepEqual(stateABC, { A: true, B: true, C: true })
40
+ })
41
+
42
+ it('Combines async reducers', async () => {
43
+ const reducerA = async (state, action) => {
44
+ if (action.type == 'A') {
45
+ return { ...state, A: true }
46
+ }
47
+ return state
48
+ }
49
+ const reducerB = async (state, action) => {
50
+ if (action.type == 'B') {
51
+ return { ...state, B: true }
52
+ }
53
+ return state
54
+ }
55
+ const reducerC = async (state, action) => {
56
+ if (action.type == 'C') {
57
+ return { ...state, C: true }
58
+ }
59
+ return state
60
+ }
61
+
62
+ const combinedReducer = AggregateReducer([
63
+ reducerA,
64
+ reducerB,
65
+ reducerC,
66
+ ])
67
+
68
+ const stateA = await reduce([{ type: 'A' }], combinedReducer, {})
69
+ assert.deepEqual(stateA, { A: true })
70
+
71
+ const stateAB = await reduce([{ type: 'A' }, { type: 'B' }], combinedReducer, {})
72
+ assert.deepEqual(stateAB, { A: true, B: true })
73
+
74
+ const stateABC = await reduce([{ type: 'A' }, { type: 'B' }, { type: 'C' }], combinedReducer, {})
75
+ assert.deepEqual(stateABC, { A: true, B: true, C: true })
76
+ })
77
+
78
+ it('Identity', async () => {
79
+ const identity = AggregateReducer([])
80
+ assert.equal(1, identity(1))
81
+ })
82
+ })
package/CHANGELOG.md CHANGED
@@ -1,4 +1,25 @@
1
- ## v1.9.3 - latest
1
+ ## v2.0.0
2
+ * Refactor all transducer functionality into Transducer.js from `pipe`, `map`, `filter`, and `flatMap`
3
+ * Remove GeneratorFunction and AsyncGeneratorFunction functionality in `map`, `filter`, `flatMap`, and `reduce`
4
+ * Refactor reducer chaining functionality into AggregateReducer.js from `reduce`
5
+ * Remove Duplex stream handling from `flatMap`
6
+ * Remove binary handling from `flatMap`
7
+ * Promises as arguments for all core functions
8
+ * Eager API for all core functions
9
+ * Automate benchmarks
10
+ * Remove the .sync property functions
11
+ * Remove the .withIndex property functions
12
+ * Deprecate map.own
13
+ * `fork` renamed to `all`
14
+ * `all` renamed to `every`
15
+ * `any` renamed to `some`
16
+ * new `dist-test` only validates syntax with `require`
17
+ * migrate `forEach` into core API.
18
+ * refactor transducer functionality from `forEach` into `Transducer.forEach`
19
+ * async performance improvements
20
+ * `_internal/arrayExtend` stops treating strings like arrays so `transform` creates arrays of strings as expected
21
+
22
+ ## v1.9.3
2
23
  * property value passed to set may be a resolver - [#224](https://github.com/a-synchronous/rubico/pull/224)
3
24
  * rubico/x/isIn - counterpart to includes - [#228](https://github.com/a-synchronous/rubico/pull/228) - [lulldev](https://github.com/lulldev)
4
25
  * rubico/x/maxBy - finds the item that is the max by a property denoted by path - [#229](https://github.com/a-synchronous/rubico/pull/229)
package/Transducer.js ADDED
@@ -0,0 +1,162 @@
1
+ const funcConcat = require('./_internal/funcConcat')
2
+ const reducerMap = require('./_internal/reducerMap')
3
+ const reducerFilter = require('./_internal/reducerFilter')
4
+ const reducerFlatMap = require('./_internal/reducerFlatMap')
5
+ const reducerForEach = require('./_internal/reducerForEach')
6
+ const curry2 = require('./_internal/curry2')
7
+ const __ = require('./_internal/placeholder')
8
+
9
+ /**
10
+ * @name Transducer
11
+ *
12
+ * @description
13
+ * Temporary repository of transducer functionality throughout rubico v1
14
+ */
15
+ const Transducer = {}
16
+
17
+ /**
18
+ * @name Transducer.map
19
+ *
20
+ * @synopsis
21
+ * ```coffeescript [specscript]
22
+ * type Reducer = (accumulator any, item any)=>(nextAccumulator Promise|any)
23
+ * type Transducer = Reducer=>Reducer
24
+ *
25
+ * Transducer.map(mapperFunc function) -> mappingTransducer Transducer
26
+ * ```
27
+ *
28
+ * @description
29
+ * Creates a mapping transducer with a provided reducer. A reducer is a variadic function that depicts a relationship between an accumulator and any number of arguments. A transducer is a function that accepts a reducer as an argument and returns another reducer.
30
+ *
31
+ * ```coffeescript [specscript]
32
+ * type Reducer = (accumulator any, item any)=>(nextAccumulator Promise|any)
33
+ *
34
+ * type Transducer = Reducer=>Reducer
35
+ * ```
36
+ *
37
+ * The transducer signature enables chaining functionality for reducers. `map` is core to this mechanism, and provides a way via transducers to transform the items of reducers.
38
+ *
39
+ * ```javascript [playground]
40
+ * const square = number => number ** 2
41
+ *
42
+ * const concat = (array, item) => array.concat(item)
43
+ *
44
+ * const mapSquare = Transducer.map(square)
45
+ * // mapSquare is a transducer
46
+ *
47
+ * const squareConcatReducer = mapSquare(concat)
48
+ * // now mapSquare is passed the reducer function concat; squareConcatReducer
49
+ * // is a reducer with chained functionality square and concat
50
+ *
51
+ * console.log(
52
+ * [1, 2, 3, 4, 5].reduce(squareConcatReducer, []),
53
+ * ) // [1, 4, 9, 16, 25]
54
+ *
55
+ * console.log(
56
+ * [1, 2, 3, 4, 5].reduce(squareConcatReducer, ''),
57
+ * ) // '1491625'
58
+ * ```
59
+ *
60
+ * Create reducers with chained functionality by using the `Transducer.map` eager API.
61
+ *
62
+ * ```javascript [playground]
63
+ * const square = number => number ** 2
64
+ *
65
+ * const concat = (array, item) => array.concat(item)
66
+ *
67
+ * const squareConcatReducer = Transducer.map(concat, square)
68
+ * // now mapSquare is passed the reducer function concat; squareConcatReducer
69
+ * // is a reducer with chained functionality square and concat
70
+ * ```
71
+ */
72
+ Transducer.map = function transducerMap(mapper) {
73
+ return curry2(reducerMap, __, mapper)
74
+ }
75
+
76
+ /**
77
+ * @name Transducer.filter
78
+ *
79
+ * @synopsis
80
+ * ```coffeescript [specscript]
81
+ * type Reducer = (accumulator any, item any)=>(nextAccumulator Promise|any)
82
+ * type Transducer = Reducer=>Reducer
83
+ *
84
+ * Transducer.filter(predicate function) -> filteringTransducer Transducer
85
+ * ```
86
+ *
87
+ * @description
88
+ * A reducer in filterable position creates a filtering reducer - one that skips items of the reducer's reducing operation if they test falsy by the predicate. It is possible to use an asynchronous predicate when filtering a reducer, however the implementation of `reduce` must support asynchronous operations. This library provides such an implementation as `reduce`.
89
+ *
90
+ * ```javascript [playground]
91
+ * const isOdd = number => number % 2 == 1
92
+ *
93
+ * const concat = (array, item) => array.concat(item)
94
+ *
95
+ * const concatOddNumbers = filter(isOdd)(concat)
96
+ *
97
+ * console.log(
98
+ * [1, 2, 3, 4, 5].reduce(concatOddNumbers, []),
99
+ * ) // [1, 3, 5]
100
+ * ```
101
+ */
102
+ Transducer.filter = function transducerFilter(predicate) {
103
+ return curry2(reducerFilter, __, predicate)
104
+ }
105
+
106
+ /**
107
+ * @name Transducer.flatMap
108
+ *
109
+ * @synopsis
110
+ * ```coffeescript [specscript]
111
+ * type Reducer = (accumulator any, item any)=>(nextAccumulator Promise|any)
112
+ * type Transducer = Reducer=>Reducer
113
+ *
114
+ * Transducer.flatMap(flatMapper) -> flatMappingTransducer Transducer
115
+ * ```
116
+ *
117
+ * @description
118
+ * Additionally, `flatMap` is a powerful option when working with transducers. A flatMapping transducer applies a flatMapper to each item of a reducer's reducing operation, calling each item of each execution with the reducer.
119
+ *
120
+ * ```javascript [playground]
121
+ * const isOdd = number => number % 2 == 1
122
+ *
123
+ * const powers = number => [number, number ** 2, number ** 3]
124
+ *
125
+ * const oddPowers = pipe([
126
+ * filter(isOdd),
127
+ * flatMap(powers),
128
+ * ])
129
+ *
130
+ * const arrayConcat = (array, value) => array.concat(value)
131
+ *
132
+ * console.log(
133
+ * reduce(oddPowers(arrayConcat), [])([1, 2, 3, 4, 5]),
134
+ * ) // [1, 1, 1, 3, 9, 27, 5, 25, 125]
135
+ * ```
136
+ *
137
+ * In the case above, each item of the array of numbers returned by `powers` is called with the reducer `arrayConcat` for flattening into the final result.
138
+ */
139
+ Transducer.flatMap = function transducerFlatMap(flatMapper) {
140
+ return curry2(reducerFlatMap, __, flatMapper)
141
+ }
142
+
143
+ /**
144
+ * @name Transducer.forEach
145
+ *
146
+ * @synopsis
147
+ * ```coffeescript [specscript]
148
+ * type Reducer = (accumulator any, item any)=>(nextAccumulator Promise|any)
149
+ * type Transducer = Reducer=>Reducer
150
+ *
151
+ * Transducer.forEach(func function) -> forEachTransducer Transducer
152
+ * ```
153
+ */
154
+ Transducer.forEach = function transducerForEach(func) {
155
+ return curry2(reducerForEach, __, func)
156
+ }
157
+
158
+ Transducer.passthrough = function transducerPassthrough(reducer) {
159
+ return reducer
160
+ }
161
+
162
+ module.exports = Transducer
@@ -0,0 +1,117 @@
1
+ const assert = require('assert')
2
+ const Transducer = require('./Transducer')
3
+ const compose = require('./compose')
4
+ const reduce = require('./reduce')
5
+ const transform = require('./transform')
6
+
7
+ describe('Transducer', () => {
8
+ const ade = assert.deepEqual
9
+ const ase = assert.strictEqual
10
+ const aok = assert.ok
11
+
12
+ describe('integration: transducers from Transducer.map, Transducer.filter, Transducer.flatMap', () => {
13
+ const concat = (y, xi) => y.concat(xi)
14
+ const add = (y, xi) => y + xi
15
+ const isOdd = number => number % 2 == 1
16
+
17
+ it('reduce with sync transduced reducers', async () => {
18
+ const squareOdds = compose([
19
+ Transducer.filter(isOdd),
20
+ Transducer.map(x => x ** 2),
21
+ ])
22
+ ade(
23
+ reduce(squareOdds(concat), [])([1, 2, 3, 4, 5]),
24
+ [1, 9, 25],
25
+ )
26
+ ade(
27
+ reduce(squareOdds((y, xi) => y.add(xi)), new Set())([1, 2, 3, 4, 5]),
28
+ new Set([1, 9, 25]),
29
+ )
30
+ const appendAlphas = compose([
31
+ Transducer.map(x => `${x}a`),
32
+ Transducer.map(x => `${x}b`),
33
+ Transducer.map(x => `${x}c`),
34
+ ])
35
+ ase(
36
+ reduce(appendAlphas(add), '')('123'),
37
+ '1abc2abc3abc',
38
+ )
39
+ ade(
40
+ reduce(appendAlphas(concat), [])('123'),
41
+ ['1abc', '2abc', '3abc'],
42
+ )
43
+ })
44
+
45
+ it('reduce with an async transduced reducer', async () => {
46
+ const hosWithHey = compose([
47
+ Transducer.filter(async x => x === 'ho'),
48
+ Transducer.map(x => Promise.resolve(`${x}hey`)),
49
+ ])
50
+ const hihos = { a: 'hi', b: 'ho', c: 'hi', d: 'ho', e: 'hi', f: 'ho' }
51
+ aok(reduce(hosWithHey(add), '')(hihos) instanceof Promise),
52
+ aok(reduce(hosWithHey(concat), [])(hihos) instanceof Promise),
53
+ ase(
54
+ await reduce(hosWithHey(add), '')(hihos),
55
+ 'hoheyhoheyhohey',
56
+ )
57
+ ade(
58
+ await reduce(hosWithHey(concat), [])(hihos),
59
+ ['hohey', 'hohey', 'hohey'],
60
+ )
61
+ })
62
+
63
+ it('flatMapping transducer', async () => {
64
+ const createOddMultiplesSync = compose([
65
+ Transducer.filter(isOdd),
66
+ Transducer.flatMap(number => [number * 2, number * 3]),
67
+ ])
68
+
69
+ ase(
70
+ reduce([1, 2, 3], createOddMultiplesSync(add), 0),
71
+ 2 + 3 + 6 + 9,
72
+ )
73
+ ade(
74
+ reduce([1, 2, 3], createOddMultiplesSync(concat), []),
75
+ [2, 3, 6, 9],
76
+ )
77
+
78
+ const createOddMultiplesAsync = compose([
79
+ Transducer.filter(isOdd),
80
+ Transducer.flatMap(async number => [number * 2, number * 3]),
81
+ ])
82
+
83
+ const p1 = reduce([1, 2, 3], createOddMultiplesAsync(add), 0)
84
+ aok(p1 instanceof Promise)
85
+ const p2 = reduce([1, 2, 3], createOddMultiplesAsync(concat), [])
86
+ aok(p2 instanceof Promise)
87
+ await p1.then(result => {
88
+ ase(result, 2 + 3 + 6 + 9)
89
+ })
90
+ await p2.then(result => {
91
+ ade(result, [2, 3, 6, 9])
92
+ })
93
+ })
94
+
95
+ it('forEach transducer', async () => {
96
+ let sum1 = 0
97
+ reduce([1, 2, 3, 4, 5], Transducer.forEach(number => {
98
+ sum1 += number
99
+ })(() => {}), null)
100
+ assert.equal(sum1, 15)
101
+
102
+ let sum2 = 0
103
+ await reduce([1, 2, 3, 4, 5], Transducer.forEach(async number => {
104
+ sum2 += number
105
+ })(() => {}), null)
106
+ assert.equal(sum2, 15)
107
+ })
108
+
109
+ it('passthrough transducer', async () => {
110
+ assert.deepEqual(
111
+ transform({ a: 1, b: 2, c: 3 }, Transducer.passthrough, []),
112
+ [1, 2, 3],
113
+ )
114
+ })
115
+ })
116
+
117
+ })
@@ -0,0 +1,68 @@
1
+ const isPromise = require('./isPromise')
2
+ const areAnyValuesPromises = require('./areAnyValuesPromises')
3
+ const __ = require('./placeholder')
4
+ const curry4 = require('./curry4')
5
+ const curryArgs4 = require('./curryArgs4')
6
+ const spread2 = require('./spread2')
7
+ const promiseAll = require('./promiseAll')
8
+ const leftResolverRightResolverCompare = require('./leftResolverRightResolverCompare')
9
+ const leftResolverRightValueCompare = require('./leftResolverRightValueCompare')
10
+ const leftValueRightResolverCompare = require('./leftValueRightResolverCompare')
11
+
12
+ // ComparisonOperator(comparator function) -> operator function
13
+ const ComparisonOperator = comparator => function operator(...args) {
14
+ const right = args.pop()
15
+ const left = args.pop()
16
+ const isLeftResolver = typeof left == 'function',
17
+ isRightResolver = typeof right == 'function'
18
+
19
+ if (isLeftResolver && isRightResolver) {
20
+ if (args.length == 0) {
21
+ return curryArgs4(
22
+ leftResolverRightResolverCompare, __, comparator, left, right,
23
+ )
24
+ }
25
+ if (areAnyValuesPromises(args)) {
26
+ return promiseAll(args).then(curry4(
27
+ leftResolverRightResolverCompare, __, comparator, left, right,
28
+ ))
29
+ }
30
+ return leftResolverRightResolverCompare(args, comparator, left, right)
31
+ }
32
+
33
+ if (isLeftResolver) {
34
+ if (args.length == 0) {
35
+ return curryArgs4(
36
+ leftResolverRightValueCompare, __, comparator, left, right,
37
+ )
38
+ }
39
+ if (areAnyValuesPromises(args)) {
40
+ return promiseAll(args).then(curry4(
41
+ leftResolverRightValueCompare, __, comparator, left, right,
42
+ ))
43
+ }
44
+ return leftResolverRightValueCompare(args, comparator, left, right)
45
+ }
46
+
47
+ if (isRightResolver) {
48
+ if (args.length == 0) {
49
+ return curryArgs4(
50
+ leftValueRightResolverCompare, __, comparator, left, right,
51
+ )
52
+ }
53
+ if (areAnyValuesPromises(args)) {
54
+ return promiseAll(args).then(curry4(
55
+ leftValueRightResolverCompare, __, comparator, left, right,
56
+ ))
57
+ }
58
+ return leftValueRightResolverCompare(args, comparator, left, right)
59
+ }
60
+
61
+ if (isPromise(left) || isPromise(right)) {
62
+ return promiseAll([left, right]).then(spread2(comparator))
63
+ }
64
+ return comparator(left, right)
65
+ }
66
+
67
+
68
+ module.exports = ComparisonOperator
@@ -0,0 +1,41 @@
1
+ const fs = require('fs')
2
+
3
+ /**
4
+ * @name File
5
+ *
6
+ * @synopsis
7
+ * ```coffeescript [specscript]
8
+ * new File(path string) -> File
9
+ * ```
10
+ */
11
+ const File = function (path) {
12
+ this.path = path
13
+ this.writeStream = fs.createWriteStream(path)
14
+ return this
15
+ }
16
+
17
+ /**
18
+ * @name File.prototype.write
19
+ *
20
+ * @synopsis
21
+ * ```coffeescript [specscript]
22
+ * new File(...).write(str string) -> ()
23
+ * ```
24
+ */
25
+ File.prototype.write = function (str) {
26
+ this.writeStream.write(str)
27
+ }
28
+
29
+ /**
30
+ * @name File.prototype.rm
31
+ *
32
+ * @synopsis
33
+ * ```coffeescript [specscript]
34
+ * new File(...).rm() -> Promise<>
35
+ * ```
36
+ */
37
+ File.prototype.rm = async function () {
38
+ await fs.promises.rm(this.path)
39
+ }
40
+
41
+ module.exports = File
@@ -2,7 +2,7 @@ const isPromise = require('./isPromise')
2
2
  const genericReduce = require('./genericReduce')
3
3
  const symbolAsyncIterator = require('./symbolAsyncIterator')
4
4
  const arrayPush = require('./arrayPush')
5
- const curryArgs3 = require('./curryArgs3')
5
+ const curry3 = require('./curry3')
6
6
  const __ = require('./placeholder')
7
7
  const promiseRace = require('./promiseRace')
8
8
  const sleep = require('./sleep')
@@ -55,12 +55,12 @@ const FlatMappingAsyncIterator = function (asyncIterator, flatMapper) {
55
55
  } else {
56
56
  const monad = flatMapper(value)
57
57
  if (isPromise(monad)) {
58
- const bufferLoading = monad.then(
59
- curryArgs3(genericReduce, __, arrayPush, buffer))
58
+ const bufferLoading =
59
+ monad.then(curry3(genericReduce, __, arrayPush, buffer))
60
60
  const promise = bufferLoading.then(() => promises.delete(promise))
61
61
  promises.add(promise)
62
62
  } else {
63
- const bufferLoading = genericReduce([monad], arrayPush, buffer)
63
+ const bufferLoading = genericReduce(monad, arrayPush, buffer)
64
64
  if (isPromise(bufferLoading)) {
65
65
  const promise = bufferLoading.then(() => promises.delete(promise))
66
66
  promises.add(promise)
@@ -31,7 +31,7 @@ const FlatMappingIterator = function (iterator, flatMapper) {
31
31
  return iteration
32
32
  }
33
33
  const monadAsArray = genericReduce(
34
- [flatMapper(iteration.value)],
34
+ flatMapper(iteration.value),
35
35
  arrayPush,
36
36
  []) // this will always have at least one item
37
37
  if (monadAsArray.length > 1) {