rubico 1.9.7 → 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 (587) 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 +75 -26
  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 +106 -40
  53. package/and.js +54 -36
  54. package/archive/{FlatMappingIteratorCool.js → FlatMappingIterator-2020-09-28.js} +1 -1
  55. package/archive/_Promise-2023-05-29.js +93 -0
  56. package/archive/arrayMap2-2023-05-29.js +73 -0
  57. package/archive/benchmarks-v1.9.7/all.js +34 -0
  58. package/archive/benchmarks-v1.9.7/and.js +24 -0
  59. package/archive/benchmarks-v1.9.7/assign.js +174 -0
  60. package/archive/benchmarks-v1.9.7/curry.js +55 -0
  61. package/archive/benchmarks-v1.9.7/eq.js +25 -0
  62. package/archive/benchmarks-v1.9.7/filter.js +1322 -0
  63. package/archive/benchmarks-v1.9.7/flatMap.js +48 -0
  64. package/archive/benchmarks-v1.9.7/get.js +44 -0
  65. package/archive/benchmarks-v1.9.7/gt.js +25 -0
  66. package/archive/benchmarks-v1.9.7/gte.js +25 -0
  67. package/archive/benchmarks-v1.9.7/lt.js +25 -0
  68. package/archive/benchmarks-v1.9.7/lte.js +25 -0
  69. package/archive/benchmarks-v1.9.7/map.js +892 -0
  70. package/archive/benchmarks-v1.9.7/omit.js +28 -0
  71. package/archive/benchmarks-v1.9.7/or.js +51 -0
  72. package/archive/benchmarks-v1.9.7/pick.js +24 -0
  73. package/archive/benchmarks-v1.9.7/pipe.js +152 -0
  74. package/archive/benchmarks-v1.9.7/reduce.js +739 -0
  75. package/archive/benchmarks-v1.9.7/switchCase.js +256 -0
  76. package/archive/benchmarks-v1.9.7/tap.js +90 -0
  77. package/archive/benchmarks-v1.9.7/transform.js +218 -0
  78. package/archive/benchmarks-v1.9.7/tryCatch.js +108 -0
  79. package/assign.js +18 -8
  80. package/bench +65 -0
  81. package/benchmark-output/v1.9.7 +268 -0
  82. package/benchmarks/all.async.js +43 -0
  83. package/benchmarks/all.js +42 -33
  84. package/benchmarks/always.js +15 -0
  85. package/benchmarks/and.async.js +25 -0
  86. package/benchmarks/and.js +20 -19
  87. package/benchmarks/assign.async.js +27 -0
  88. package/benchmarks/assign.js +20 -167
  89. package/benchmarks/curry.js +34 -54
  90. package/benchmarks/eq.async.js +23 -0
  91. package/benchmarks/eq.js +17 -19
  92. package/benchmarks/every.async.js +19 -0
  93. package/benchmarks/every.js +19 -0
  94. package/benchmarks/filter.async.js +32 -0
  95. package/benchmarks/filter.js +27 -1311
  96. package/benchmarks/flatMap.async.js +26 -0
  97. package/benchmarks/flatMap.js +26 -36
  98. package/benchmarks/get.async.js +19 -0
  99. package/benchmarks/get.js +27 -32
  100. package/benchmarks/gt.async.js +23 -0
  101. package/benchmarks/gt.js +17 -19
  102. package/benchmarks/gte.async.js +23 -0
  103. package/benchmarks/gte.js +17 -19
  104. package/benchmarks/lt.async.js +23 -0
  105. package/benchmarks/lt.js +17 -19
  106. package/benchmarks/lte.async.js +23 -0
  107. package/benchmarks/lte.js +17 -19
  108. package/benchmarks/map.async.js +43 -0
  109. package/benchmarks/map.js +24 -876
  110. package/benchmarks/misc/Promise.js +26 -0
  111. package/benchmarks/misc/isPromise.js +30 -0
  112. package/benchmarks/misc/promiseAll.js +36 -0
  113. package/benchmarks/not.js +23 -0
  114. package/benchmarks/omit.js +30 -20
  115. package/benchmarks/or.async.js +25 -0
  116. package/benchmarks/or.js +23 -49
  117. package/benchmarks/pick.js +30 -16
  118. package/benchmarks/pipe.async.js +47 -0
  119. package/benchmarks/pipe.js +46 -151
  120. package/benchmarks/reduce.async.js +32 -0
  121. package/benchmarks/reduce.js +27 -728
  122. package/benchmarks/set.async.js +19 -0
  123. package/benchmarks/set.js +41 -0
  124. package/benchmarks/some.async.js +19 -0
  125. package/benchmarks/some.js +19 -0
  126. package/benchmarks/switchCase.async.js +27 -0
  127. package/benchmarks/switchCase.js +55 -256
  128. package/benchmarks/tap.js +10 -85
  129. package/benchmarks/thunkify.js +15 -0
  130. package/benchmarks/transform.async.js +27 -0
  131. package/benchmarks/transform.js +28 -206
  132. package/benchmarks/tryCatch.async.js +25 -0
  133. package/benchmarks/tryCatch.js +24 -100
  134. package/{distributor.js → build} +50 -50
  135. package/compose.js +46 -0
  136. package/dist/__.es.js +2 -2
  137. package/dist/__.es.min.js +2 -2
  138. package/dist/__.js +2 -2
  139. package/dist/__.min.js +2 -2
  140. package/dist/__.min.mjs +2 -2
  141. package/dist/__.mjs +2 -2
  142. package/dist/all.es.js +173 -92
  143. package/dist/all.es.min.js +3 -3
  144. package/dist/all.js +173 -92
  145. package/dist/all.min.js +3 -3
  146. package/dist/all.min.mjs +3 -3
  147. package/dist/all.mjs +173 -92
  148. package/dist/always.es.js +2 -2
  149. package/dist/always.es.min.js +2 -2
  150. package/dist/always.js +2 -2
  151. package/dist/always.min.js +2 -2
  152. package/dist/always.min.mjs +2 -2
  153. package/dist/always.mjs +2 -2
  154. package/dist/and.es.js +101 -32
  155. package/dist/and.es.min.js +3 -3
  156. package/dist/and.js +101 -32
  157. package/dist/and.min.js +3 -3
  158. package/dist/and.min.mjs +3 -3
  159. package/dist/and.mjs +101 -32
  160. package/dist/assign.es.js +37 -10
  161. package/dist/assign.es.min.js +3 -3
  162. package/dist/assign.js +37 -10
  163. package/dist/assign.min.js +3 -3
  164. package/dist/assign.min.mjs +3 -3
  165. package/dist/assign.mjs +37 -10
  166. package/dist/compose.es.js +71 -0
  167. package/dist/compose.es.min.js +7 -0
  168. package/dist/compose.js +78 -0
  169. package/dist/compose.min.js +8 -0
  170. package/dist/compose.min.mjs +7 -0
  171. package/dist/compose.mjs +71 -0
  172. package/dist/curry.es.js +2 -2
  173. package/dist/curry.es.min.js +2 -2
  174. package/dist/curry.js +2 -2
  175. package/dist/curry.min.js +2 -2
  176. package/dist/curry.min.mjs +2 -2
  177. package/dist/curry.mjs +2 -2
  178. package/dist/eq.es.js +172 -49
  179. package/dist/eq.es.min.js +3 -3
  180. package/dist/eq.js +172 -49
  181. package/dist/eq.min.js +3 -3
  182. package/dist/eq.min.mjs +3 -3
  183. package/dist/eq.mjs +172 -49
  184. package/dist/every.es.js +194 -0
  185. package/dist/every.es.min.js +7 -0
  186. package/dist/every.js +201 -0
  187. package/dist/every.min.js +8 -0
  188. package/dist/every.min.mjs +7 -0
  189. package/dist/every.mjs +194 -0
  190. package/dist/filter.es.js +14 -108
  191. package/dist/filter.es.min.js +3 -3
  192. package/dist/filter.js +14 -108
  193. package/dist/filter.min.js +3 -3
  194. package/dist/filter.min.mjs +3 -3
  195. package/dist/filter.mjs +14 -108
  196. package/dist/flatMap.es.js +27 -214
  197. package/dist/flatMap.es.min.js +3 -3
  198. package/dist/flatMap.js +27 -214
  199. package/dist/flatMap.min.js +3 -3
  200. package/dist/flatMap.min.mjs +3 -3
  201. package/dist/flatMap.mjs +27 -214
  202. package/dist/{x/forEach.es.js → forEach.es.js} +52 -70
  203. package/dist/forEach.es.min.js +7 -0
  204. package/dist/{x/forEach.js → forEach.js} +52 -70
  205. package/dist/forEach.min.js +8 -0
  206. package/dist/forEach.min.mjs +7 -0
  207. package/dist/{x/forEach.mjs → forEach.mjs} +52 -70
  208. package/dist/get.es.js +60 -5
  209. package/dist/get.es.min.js +3 -3
  210. package/dist/get.js +60 -5
  211. package/dist/get.min.js +3 -3
  212. package/dist/get.min.mjs +3 -3
  213. package/dist/get.mjs +60 -5
  214. package/dist/gt.es.js +171 -48
  215. package/dist/gt.es.min.js +3 -3
  216. package/dist/gt.js +171 -48
  217. package/dist/gt.min.js +3 -3
  218. package/dist/gt.min.mjs +3 -3
  219. package/dist/gt.mjs +171 -48
  220. package/dist/gte.es.js +171 -48
  221. package/dist/gte.es.min.js +3 -3
  222. package/dist/gte.js +171 -48
  223. package/dist/gte.min.js +3 -3
  224. package/dist/gte.min.mjs +3 -3
  225. package/dist/gte.mjs +171 -48
  226. package/dist/lt.es.js +171 -48
  227. package/dist/lt.es.min.js +3 -3
  228. package/dist/lt.js +171 -48
  229. package/dist/lt.min.js +3 -3
  230. package/dist/lt.min.mjs +3 -3
  231. package/dist/lt.mjs +171 -48
  232. package/dist/lte.es.js +171 -48
  233. package/dist/lte.es.min.js +3 -3
  234. package/dist/lte.js +171 -48
  235. package/dist/lte.min.js +3 -3
  236. package/dist/lte.min.mjs +3 -3
  237. package/dist/lte.mjs +171 -48
  238. package/dist/map.es.js +12 -101
  239. package/dist/map.es.min.js +3 -3
  240. package/dist/map.js +12 -101
  241. package/dist/map.min.js +3 -3
  242. package/dist/map.min.mjs +3 -3
  243. package/dist/map.mjs +12 -101
  244. package/dist/not.es.js +75 -14
  245. package/dist/not.es.min.js +3 -3
  246. package/dist/not.js +75 -14
  247. package/dist/not.min.js +3 -3
  248. package/dist/not.min.mjs +3 -3
  249. package/dist/not.mjs +75 -14
  250. package/dist/omit.es.js +7 -2
  251. package/dist/omit.es.min.js +3 -3
  252. package/dist/omit.js +7 -2
  253. package/dist/omit.min.js +3 -3
  254. package/dist/omit.min.mjs +3 -3
  255. package/dist/omit.mjs +7 -2
  256. package/dist/or.es.js +99 -31
  257. package/dist/or.es.min.js +3 -3
  258. package/dist/or.js +99 -31
  259. package/dist/or.min.js +3 -3
  260. package/dist/or.min.mjs +3 -3
  261. package/dist/or.mjs +99 -31
  262. package/dist/pick.es.js +8 -3
  263. package/dist/pick.es.min.js +3 -3
  264. package/dist/pick.js +8 -3
  265. package/dist/pick.min.js +3 -3
  266. package/dist/pick.min.mjs +3 -3
  267. package/dist/pick.mjs +8 -3
  268. package/dist/pipe.es.js +42 -46
  269. package/dist/pipe.es.min.js +3 -3
  270. package/dist/pipe.js +42 -46
  271. package/dist/pipe.min.js +3 -3
  272. package/dist/pipe.min.mjs +3 -3
  273. package/dist/pipe.mjs +42 -46
  274. package/dist/reduce.es.js +52 -94
  275. package/dist/reduce.es.min.js +3 -3
  276. package/dist/reduce.js +52 -94
  277. package/dist/reduce.min.js +3 -3
  278. package/dist/reduce.min.mjs +3 -3
  279. package/dist/reduce.mjs +52 -94
  280. package/dist/rubico.es.js +730 -869
  281. package/dist/rubico.es.min.js +3 -3
  282. package/dist/rubico.js +730 -869
  283. package/dist/rubico.min.js +3 -3
  284. package/dist/rubico.min.mjs +3 -3
  285. package/dist/rubico.mjs +730 -869
  286. package/dist/set.es.js +18 -3
  287. package/dist/set.es.min.js +3 -3
  288. package/dist/set.js +18 -3
  289. package/dist/set.min.js +3 -3
  290. package/dist/set.min.mjs +3 -3
  291. package/dist/set.mjs +18 -3
  292. package/dist/{any.js → some.es.js} +64 -54
  293. package/dist/some.es.min.js +7 -0
  294. package/dist/{any.mjs → some.js} +72 -48
  295. package/dist/some.min.js +8 -0
  296. package/dist/some.min.mjs +7 -0
  297. package/dist/{any.es.js → some.mjs} +65 -48
  298. package/dist/switchCase.es.js +55 -5
  299. package/dist/switchCase.es.min.js +3 -3
  300. package/dist/switchCase.js +55 -5
  301. package/dist/switchCase.min.js +3 -3
  302. package/dist/switchCase.min.mjs +3 -3
  303. package/dist/switchCase.mjs +55 -5
  304. package/dist/tap.es.js +2 -9
  305. package/dist/tap.es.min.js +3 -3
  306. package/dist/tap.js +2 -9
  307. package/dist/tap.min.js +3 -3
  308. package/dist/tap.min.mjs +3 -3
  309. package/dist/tap.mjs +2 -9
  310. package/dist/thunkify.es.js +45 -2
  311. package/dist/thunkify.es.min.js +3 -3
  312. package/dist/thunkify.js +45 -2
  313. package/dist/thunkify.min.js +3 -3
  314. package/dist/thunkify.min.mjs +3 -3
  315. package/dist/thunkify.mjs +45 -2
  316. package/dist/transform.es.js +35 -71
  317. package/dist/transform.es.min.js +3 -3
  318. package/dist/transform.js +35 -71
  319. package/dist/transform.min.js +3 -3
  320. package/dist/transform.min.mjs +3 -3
  321. package/dist/transform.mjs +35 -71
  322. package/dist/tryCatch.es.js +33 -17
  323. package/dist/tryCatch.es.min.js +3 -3
  324. package/dist/tryCatch.js +33 -17
  325. package/dist/tryCatch.min.js +3 -3
  326. package/dist/tryCatch.min.mjs +3 -3
  327. package/dist/tryCatch.mjs +33 -17
  328. package/dist/x/append.es.js +2 -2
  329. package/dist/x/append.es.min.js +2 -2
  330. package/dist/x/append.js +2 -2
  331. package/dist/x/append.min.js +2 -2
  332. package/dist/x/append.min.mjs +2 -2
  333. package/dist/x/append.mjs +2 -2
  334. package/dist/x/callProp.es.js +2 -2
  335. package/dist/x/callProp.es.min.js +2 -2
  336. package/dist/x/callProp.js +2 -2
  337. package/dist/x/callProp.min.js +2 -2
  338. package/dist/x/callProp.min.mjs +2 -2
  339. package/dist/x/callProp.mjs +2 -2
  340. package/dist/x/defaultsDeep.es.js +2 -2
  341. package/dist/x/defaultsDeep.es.min.js +2 -2
  342. package/dist/x/defaultsDeep.js +2 -2
  343. package/dist/x/defaultsDeep.min.js +2 -2
  344. package/dist/x/defaultsDeep.min.mjs +2 -2
  345. package/dist/x/defaultsDeep.mjs +2 -2
  346. package/dist/x/differenceWith.es.js +7 -7
  347. package/dist/x/differenceWith.es.min.js +3 -3
  348. package/dist/x/differenceWith.js +7 -7
  349. package/dist/x/differenceWith.min.js +2 -2
  350. package/dist/x/differenceWith.min.mjs +3 -3
  351. package/dist/x/differenceWith.mjs +7 -7
  352. package/dist/x/filterOut.es.js +60 -117
  353. package/dist/x/filterOut.es.min.js +3 -3
  354. package/dist/x/filterOut.js +60 -117
  355. package/dist/x/filterOut.min.js +3 -3
  356. package/dist/x/filterOut.min.mjs +3 -3
  357. package/dist/x/filterOut.mjs +60 -117
  358. package/dist/x/find.es.js +2 -2
  359. package/dist/x/find.es.min.js +2 -2
  360. package/dist/x/find.js +2 -2
  361. package/dist/x/find.min.js +2 -2
  362. package/dist/x/find.min.mjs +2 -2
  363. package/dist/x/find.mjs +2 -2
  364. package/dist/x/findIndex.es.js +2 -2
  365. package/dist/x/findIndex.es.min.js +2 -2
  366. package/dist/x/findIndex.js +2 -2
  367. package/dist/x/findIndex.min.js +2 -2
  368. package/dist/x/findIndex.min.mjs +2 -2
  369. package/dist/x/findIndex.mjs +2 -2
  370. package/dist/x/first.es.js +2 -2
  371. package/dist/x/first.es.min.js +2 -2
  372. package/dist/x/first.js +2 -2
  373. package/dist/x/first.min.js +2 -2
  374. package/dist/x/first.min.mjs +2 -2
  375. package/dist/x/first.mjs +2 -2
  376. package/dist/x/flatten.es.js +20 -207
  377. package/dist/x/flatten.es.min.js +3 -3
  378. package/dist/x/flatten.js +20 -207
  379. package/dist/x/flatten.min.js +3 -3
  380. package/dist/x/flatten.min.mjs +3 -3
  381. package/dist/x/flatten.mjs +20 -207
  382. package/dist/x/groupBy.es.js +52 -94
  383. package/dist/x/groupBy.es.min.js +3 -3
  384. package/dist/x/groupBy.js +52 -94
  385. package/dist/x/groupBy.min.js +3 -3
  386. package/dist/x/groupBy.min.mjs +3 -3
  387. package/dist/x/groupBy.mjs +52 -94
  388. package/dist/x/has.es.js +2 -2
  389. package/dist/x/has.es.min.js +2 -2
  390. package/dist/x/has.js +2 -2
  391. package/dist/x/has.min.js +2 -2
  392. package/dist/x/has.min.mjs +2 -2
  393. package/dist/x/has.mjs +2 -2
  394. package/dist/x/identity.es.js +2 -2
  395. package/dist/x/identity.es.min.js +2 -2
  396. package/dist/x/identity.js +2 -2
  397. package/dist/x/identity.min.js +2 -2
  398. package/dist/x/identity.min.mjs +2 -2
  399. package/dist/x/identity.mjs +2 -2
  400. package/dist/x/includes.es.js +2 -2
  401. package/dist/x/includes.es.min.js +2 -2
  402. package/dist/x/includes.js +2 -2
  403. package/dist/x/includes.min.js +2 -2
  404. package/dist/x/includes.min.mjs +2 -2
  405. package/dist/x/includes.mjs +2 -2
  406. package/dist/x/isDeepEqual.es.js +2 -2
  407. package/dist/x/isDeepEqual.es.min.js +2 -2
  408. package/dist/x/isDeepEqual.js +2 -2
  409. package/dist/x/isDeepEqual.min.js +2 -2
  410. package/dist/x/isDeepEqual.min.mjs +2 -2
  411. package/dist/x/isDeepEqual.mjs +2 -2
  412. package/dist/x/isEmpty.es.js +2 -2
  413. package/dist/x/isEmpty.es.min.js +2 -2
  414. package/dist/x/isEmpty.js +2 -2
  415. package/dist/x/isEmpty.min.js +2 -2
  416. package/dist/x/isEmpty.min.mjs +2 -2
  417. package/dist/x/isEmpty.mjs +2 -2
  418. package/dist/x/isEqual.es.js +2 -2
  419. package/dist/x/isEqual.es.min.js +2 -2
  420. package/dist/x/isEqual.js +2 -2
  421. package/dist/x/isEqual.min.js +2 -2
  422. package/dist/x/isEqual.min.mjs +2 -2
  423. package/dist/x/isEqual.mjs +2 -2
  424. package/dist/x/isFunction.es.js +2 -2
  425. package/dist/x/isFunction.es.min.js +2 -2
  426. package/dist/x/isFunction.js +2 -2
  427. package/dist/x/isFunction.min.js +2 -2
  428. package/dist/x/isFunction.min.mjs +2 -2
  429. package/dist/x/isFunction.mjs +2 -2
  430. package/dist/x/isIn.es.js +2 -2
  431. package/dist/x/isIn.es.min.js +2 -2
  432. package/dist/x/isIn.js +2 -2
  433. package/dist/x/isIn.min.js +2 -2
  434. package/dist/x/isIn.min.mjs +2 -2
  435. package/dist/x/isIn.mjs +2 -2
  436. package/dist/x/isObject.es.js +2 -2
  437. package/dist/x/isObject.es.min.js +2 -2
  438. package/dist/x/isObject.js +2 -2
  439. package/dist/x/isObject.min.js +2 -2
  440. package/dist/x/isObject.min.mjs +2 -2
  441. package/dist/x/isObject.mjs +2 -2
  442. package/dist/x/isString.es.js +2 -2
  443. package/dist/x/isString.es.min.js +2 -2
  444. package/dist/x/isString.js +2 -2
  445. package/dist/x/isString.min.js +2 -2
  446. package/dist/x/isString.min.mjs +2 -2
  447. package/dist/x/isString.mjs +2 -2
  448. package/dist/x/keys.es.js +2 -2
  449. package/dist/x/keys.es.min.js +2 -2
  450. package/dist/x/keys.js +2 -2
  451. package/dist/x/keys.min.js +2 -2
  452. package/dist/x/keys.min.mjs +2 -2
  453. package/dist/x/keys.mjs +2 -2
  454. package/dist/x/last.es.js +2 -2
  455. package/dist/x/last.es.min.js +2 -2
  456. package/dist/x/last.js +2 -2
  457. package/dist/x/last.min.js +2 -2
  458. package/dist/x/last.min.mjs +2 -2
  459. package/dist/x/last.mjs +2 -2
  460. package/dist/x/maxBy.es.js +59 -6
  461. package/dist/x/maxBy.es.min.js +3 -3
  462. package/dist/x/maxBy.js +59 -6
  463. package/dist/x/maxBy.min.js +3 -3
  464. package/dist/x/maxBy.min.mjs +3 -3
  465. package/dist/x/maxBy.mjs +59 -6
  466. package/dist/x/noop.es.js +2 -2
  467. package/dist/x/noop.es.min.js +2 -2
  468. package/dist/x/noop.js +2 -2
  469. package/dist/x/noop.min.js +2 -2
  470. package/dist/x/noop.min.mjs +2 -2
  471. package/dist/x/noop.mjs +2 -2
  472. package/dist/x/pluck.es.js +32 -103
  473. package/dist/x/pluck.es.min.js +3 -3
  474. package/dist/x/pluck.js +32 -103
  475. package/dist/x/pluck.min.js +3 -3
  476. package/dist/x/pluck.min.mjs +3 -3
  477. package/dist/x/pluck.mjs +32 -103
  478. package/dist/x/prepend.es.js +2 -2
  479. package/dist/x/prepend.es.min.js +2 -2
  480. package/dist/x/prepend.js +2 -2
  481. package/dist/x/prepend.min.js +2 -2
  482. package/dist/x/prepend.min.mjs +2 -2
  483. package/dist/x/prepend.mjs +2 -2
  484. package/dist/x/size.es.js +2 -2
  485. package/dist/x/size.es.min.js +2 -2
  486. package/dist/x/size.js +2 -2
  487. package/dist/x/size.min.js +2 -2
  488. package/dist/x/size.min.mjs +2 -2
  489. package/dist/x/size.mjs +2 -2
  490. package/dist/x/trace.es.js +2 -9
  491. package/dist/x/trace.es.min.js +3 -3
  492. package/dist/x/trace.js +2 -9
  493. package/dist/x/trace.min.js +3 -3
  494. package/dist/x/trace.min.mjs +3 -3
  495. package/dist/x/trace.mjs +2 -9
  496. package/dist/x/unionWith.es.js +2 -2
  497. package/dist/x/unionWith.es.min.js +2 -2
  498. package/dist/x/unionWith.js +2 -2
  499. package/dist/x/unionWith.min.js +2 -2
  500. package/dist/x/unionWith.min.mjs +2 -2
  501. package/dist/x/unionWith.mjs +2 -2
  502. package/dist/x/uniq.es.js +2 -2
  503. package/dist/x/uniq.es.min.js +2 -2
  504. package/dist/x/uniq.js +2 -2
  505. package/dist/x/uniq.min.js +2 -2
  506. package/dist/x/uniq.min.mjs +2 -2
  507. package/dist/x/uniq.mjs +2 -2
  508. package/dist/x/unless.es.js +2 -2
  509. package/dist/x/unless.es.min.js +2 -2
  510. package/dist/x/unless.js +2 -2
  511. package/dist/x/unless.min.js +2 -2
  512. package/dist/x/unless.min.mjs +2 -2
  513. package/dist/x/unless.mjs +2 -2
  514. package/dist/x/values.es.js +2 -2
  515. package/dist/x/values.es.min.js +2 -2
  516. package/dist/x/values.js +2 -2
  517. package/dist/x/values.min.js +2 -2
  518. package/dist/x/values.min.mjs +2 -2
  519. package/dist/x/values.mjs +2 -2
  520. package/dist/x/when.es.js +2 -2
  521. package/dist/x/when.es.min.js +2 -2
  522. package/dist/x/when.js +2 -2
  523. package/dist/x/when.min.js +2 -2
  524. package/dist/x/when.min.mjs +2 -2
  525. package/dist/x/when.mjs +2 -2
  526. package/dist-test.js +9 -2042
  527. package/eq.js +21 -63
  528. package/es.js +730 -869
  529. package/every.js +94 -0
  530. package/filter.js +23 -91
  531. package/flatMap.js +75 -70
  532. package/forEach.js +82 -0
  533. package/get.js +23 -6
  534. package/global.js +6 -4
  535. package/gt.js +15 -58
  536. package/gte.js +14 -57
  537. package/index.js +730 -869
  538. package/lt.js +17 -60
  539. package/lte.js +14 -57
  540. package/map.js +9 -94
  541. package/memory-usage/reduce.js +2 -2
  542. package/not.js +27 -45
  543. package/omit.js +4 -0
  544. package/or.js +50 -33
  545. package/package.json +7 -7
  546. package/pick.js +5 -1
  547. package/pipe.js +13 -50
  548. package/reduce.js +42 -51
  549. package/rubico.js +10 -8
  550. package/set.js +43 -10
  551. package/some.js +105 -0
  552. package/switchCase.js +13 -3
  553. package/tap.js +0 -24
  554. package/test.js +847 -1096
  555. package/thunkify.js +9 -0
  556. package/transform.js +31 -16
  557. package/tryCatch.js +19 -15
  558. package/x/differenceWith.js +3 -3
  559. package/x/filterOut.test.js +6 -6
  560. package/x/flatten.js +1 -1
  561. package/x/flatten.test.js +0 -8
  562. package/x/index.js +0 -2
  563. package/x/pluck.js +18 -27
  564. package/x/pluck.test.js +3 -7
  565. package/x/timeInLoop.js +16 -25
  566. package/x/timeInLoop.test.js +8 -4
  567. package/any.js +0 -82
  568. package/dist/any.es.min.js +0 -7
  569. package/dist/any.min.js +0 -8
  570. package/dist/any.min.mjs +0 -7
  571. package/dist/fork.es.js +0 -159
  572. package/dist/fork.es.min.js +0 -7
  573. package/dist/fork.js +0 -166
  574. package/dist/fork.min.js +0 -8
  575. package/dist/fork.min.mjs +0 -7
  576. package/dist/fork.mjs +0 -159
  577. package/dist/x/forEach.es.min.js +0 -7
  578. package/dist/x/forEach.min.js +0 -8
  579. package/dist/x/forEach.min.mjs +0 -7
  580. package/fork.js +0 -101
  581. package/x/forEach.js +0 -93
  582. package/x/forEach.test.js +0 -218
  583. /package/{benchmarks → archive/benchmarks-v1.9.7}/any.js +0 -0
  584. /package/{x/forEach.benchmark.js → archive/benchmarks-v1.9.7/forEach.js} +0 -0
  585. /package/{benchmarks → archive/benchmarks-v1.9.7}/fork.js +0 -0
  586. /package/{benchmarks → archive/benchmarks-v1.9.7}/integration.js +0 -0
  587. /package/{benchmarks → archive/benchmarks-v1.9.7}/misc.js +0 -0
@@ -0,0 +1,32 @@
1
+ const always = require('./always')
2
+ const isPromise = require('./isPromise')
3
+ const promiseAll = require('./promiseAll')
4
+ const __ = require('./placeholder')
5
+ const curry3 = require('./curry3')
6
+ const objectSet = require('./objectSet')
7
+
8
+ /**
9
+ * @name functionObjectAll
10
+ *
11
+ * @synopsis
12
+ * ```coffeescript [specscript]
13
+ * functionObjectAll(funcs Array<function>, args Array) -> Promise|Object
14
+ * ```
15
+ *
16
+ * @description
17
+ * Concurrently execute the same arguments for each function of an object of functions, returning an object of results.
18
+ */
19
+ const functionObjectAll = function (funcs, args) {
20
+ const result = {}, promises = []
21
+ for (const key in funcs) {
22
+ const resultItem = funcs[key](...args)
23
+ if (isPromise(resultItem)) {
24
+ promises.push(resultItem.then(curry3(objectSet, result, key, __)))
25
+ } else {
26
+ result[key] = resultItem
27
+ }
28
+ }
29
+ return promises.length == 0 ? result : promiseAll(promises).then(always(result))
30
+ }
31
+
32
+ module.exports = functionObjectAll
@@ -12,8 +12,6 @@ const curryArgs3 = require('./curryArgs3')
12
12
  const arrayReduce = require('./arrayReduce')
13
13
  const objectReduce = require('./objectReduce')
14
14
  const mapReduce = require('./mapReduce')
15
- const generatorFunctionReduce = require('./generatorFunctionReduce')
16
- const asyncGeneratorFunctionReduce = require('./asyncGeneratorFunctionReduce')
17
15
  const reducerConcat = require('./reducerConcat')
18
16
 
19
17
  /**
@@ -25,7 +23,7 @@ const reducerConcat = require('./reducerConcat')
25
23
  * |{ reduce: (any, T)=>any }|Object<T>
26
24
  *
27
25
  * genericReduce<T>(
28
- * args [collection Foldable<T>, ...any],
26
+ * collection Foldable<T>,
29
27
  * reducer (any, T)=>any,
30
28
  * result any?,
31
29
  * ) -> result
@@ -33,33 +31,17 @@ const reducerConcat = require('./reducerConcat')
33
31
  *
34
32
  * @related genericReduceConcurrent
35
33
  *
36
- * @TODO genericReduceSync(args, reducer, init) - performance optimization for some of these genericReduces that we know are synchronous
34
+ * @TODO genericReduceSync(collection, reducer, init) - performance optimization for some of these genericReduces that we know are synchronous
37
35
  *
38
- * @TODO genericReducePool(poolSize, args, reducer, init) - for some of these genericReduces that we want to race - result should not care about order of concatenations
36
+ * @TODO genericReducePool(poolSize, collection, reducer, init) - for some of these genericReduces that we want to race - result should not care about order of concatenations
39
37
  * reduce.pool
40
38
  * transform.pool
41
39
  * flatMap.pool
42
40
  */
43
- const genericReduce = function (args, reducer, result) {
44
- const collection = args[0]
41
+ const genericReduce = function (collection, reducer, result) {
45
42
  if (isArray(collection)) {
46
43
  return arrayReduce(collection, reducer, result)
47
44
  }
48
- if (typeof collection == 'function') {
49
- if (isGeneratorFunction(collection)) {
50
- return generatorFunctionReduce(collection, reducer, result)
51
- }
52
- if (isAsyncGeneratorFunction(collection)) {
53
- return asyncGeneratorFunctionReduce(collection, reducer, result)
54
- }
55
- return curryArgs3(
56
- genericReduce,
57
- __,
58
- args.length == 1
59
- ? reducerConcat(reducer, collection)
60
- : args.reduce(reducerConcat, reducer),
61
- result)
62
- }
63
45
  if (collection == null) {
64
46
  return result === undefined
65
47
  ? curry2(reducer, collection, __)
@@ -24,7 +24,7 @@ const callConcat = require('./callConcat')
24
24
  * Reducer = (any, any)=>Promise|any
25
25
  *
26
26
  * identityTransform<
27
- * args Array,
27
+ * collection any,
28
28
  * transducer Reducer=>Reducer,
29
29
  * result undefined|null,
30
30
  * >(args, transducer, result) -> Promise|result
@@ -33,8 +33,8 @@ const callConcat = require('./callConcat')
33
33
  * @description
34
34
  * Reduce a value, always returning the initial result
35
35
  */
36
- const identityTransform = function (args, transducer, result) {
37
- const nil = genericReduce(args, transducer(noop), null)
36
+ const identityTransform = function (collection, transducer, result) {
37
+ const nil = genericReduce(collection, transducer(noop), null)
38
38
  return isPromise(nil) ? nil.then(always(result)) : result
39
39
  }
40
40
 
@@ -48,44 +48,44 @@ const identityTransform = function (args, transducer, result) {
48
48
  * |{ concat: function }|{ write: function }|Object
49
49
  *
50
50
  * genericTransform<
51
- * args ...any,
51
+ * collection any,
52
52
  * transducer Reducer=>Reducer,
53
53
  * result Semigroup|any,
54
- * >(args, transducer, result) -> result
54
+ * >(collection, transducer, result) -> result
55
55
  * ```
56
56
  */
57
- const genericTransform = function (args, transducer, result) {
57
+ const genericTransform = function (collection, transducer, result) {
58
58
  if (isArray(result)) {
59
- return genericReduce(args, transducer(arrayExtend), result)
59
+ return genericReduce(collection, transducer(arrayExtend), result)
60
60
  }
61
61
  if (isBinary(result)) {
62
- const intermediateArray = genericReduce(args, transducer(arrayExtend), [])
62
+ const intermediateArray = genericReduce(collection, transducer(arrayExtend), [])
63
63
  return isPromise(intermediateArray)
64
64
  ? intermediateArray.then(curry2(binaryExtend, result, __))
65
65
  : binaryExtend(result, intermediateArray)
66
66
  }
67
67
  if (result == null) {
68
- return identityTransform(args, transducer, result)
68
+ return identityTransform(collection, transducer, result)
69
69
  }
70
70
 
71
71
  const resultConstructor = result.constructor
72
72
  if (typeof result == 'string' || resultConstructor == String) {
73
73
  // TODO: use array + join over adding
74
- return genericReduce(args, transducer(add), result)
74
+ return genericReduce(collection, transducer(add), result)
75
75
  }
76
76
  if (typeof result.concat == 'function') {
77
- return genericReduce(args, transducer(callConcat), result)
77
+ return genericReduce(collection, transducer(callConcat), result)
78
78
  }
79
79
  if (typeof result.write == 'function') {
80
- return genericReduce(args, transducer(streamExtend), result)
80
+ return genericReduce(collection, transducer(streamExtend), result)
81
81
  }
82
82
  if (resultConstructor == Set) {
83
- return genericReduce(args, transducer(setExtend), result)
83
+ return genericReduce(collection, transducer(setExtend), result)
84
84
  }
85
85
  if (resultConstructor == Object) {
86
- return genericReduce(args, transducer(objectAssign), result)
86
+ return genericReduce(collection, transducer(objectAssign), result)
87
87
  }
88
- return identityTransform(args, transducer, result)
88
+ return identityTransform(collection, transducer, result)
89
89
  }
90
90
 
91
91
  module.exports = genericTransform
@@ -0,0 +1,93 @@
1
+ const isPromise = require('./isPromise')
2
+ const isArray = require('./isArray')
3
+ const isBinary = require('./isBinary')
4
+ const callPropUnary = require('./callPropUnary')
5
+ const __ = require('./placeholder')
6
+ const curry2 = require('./curry2')
7
+ const curry3 = require('./curry3')
8
+ const always = require('./always')
9
+ const noop = require('./noop')
10
+ const add = require('./add')
11
+ const genericReduce = require('./genericReduce')
12
+ const objectAssign = require('./objectAssign')
13
+ const arrayExtend = require('./arrayExtend')
14
+ const binaryExtend = require('./binaryExtend')
15
+ const streamExtend = require('./streamExtend')
16
+ const setExtend = require('./setExtend')
17
+ const callConcat = require('./callConcat')
18
+
19
+ /**
20
+ * @name identityTransform
21
+ *
22
+ * @synopsis
23
+ * ```coffeescript [specscript]
24
+ * Reducer = (any, any)=>Promise|any
25
+ *
26
+ * identityTransform<
27
+ * collection any,
28
+ * transducer Reducer=>Reducer,
29
+ * accum undefined|null,
30
+ * >(args, transducer, accum) -> Promise|accum
31
+ * ```
32
+ *
33
+ * @description
34
+ * Reduce a value, always returning the initial accum
35
+ */
36
+ const identityTransform = function (collection, transducer, accum) {
37
+ const nil = genericReduce(collection, transducer(noop), null)
38
+ return isPromise(nil) ? nil.then(always(accum)) : accum
39
+ }
40
+
41
+ /**
42
+ * @name genericTransform
43
+ *
44
+ * @synopsis
45
+ * ```coffeescript [specscript]
46
+ * Reducer = (any, any)=>Promise|any
47
+ * Semigroup = Array|string|Set|TypedArray
48
+ * |{ concat: function }|{ write: function }|Object
49
+ *
50
+ * genericTransform<
51
+ * collection any,
52
+ * transducer Reducer=>Reducer,
53
+ * accum Semigroup|any,
54
+ * >(collection, transducer, accum) -> accum
55
+ * ```
56
+ */
57
+ const genericTransform = function (collection, transducer, accum) {
58
+ if (isArray(accum)) {
59
+ return genericReduce(collection, transducer(arrayExtend), accum)
60
+ }
61
+ if (isBinary(accum)) {
62
+ const intermediateArray = genericReduce(collection, transducer(arrayExtend), [])
63
+ return isPromise(intermediateArray)
64
+ ? intermediateArray.then(curry2(binaryExtend, accum, __))
65
+ : binaryExtend(accum, intermediateArray)
66
+ }
67
+ if (accum == null) {
68
+ return identityTransform(collection, transducer, accum)
69
+ }
70
+
71
+ const constructor = accum.constructor
72
+ if (typeof accum == 'string' || constructor == String) {
73
+ const result = genericReduce(collection, transducer(arrayExtend), [accum])
74
+ return isPromise(result)
75
+ ? result.then(curry3(callPropUnary, __, 'join', ''))
76
+ : result.join('')
77
+ }
78
+ if (typeof accum.concat == 'function') {
79
+ return genericReduce(collection, transducer(callConcat), accum)
80
+ }
81
+ if (typeof accum.write == 'function') {
82
+ return genericReduce(collection, transducer(streamExtend), accum)
83
+ }
84
+ if (constructor == Set) {
85
+ return genericReduce(collection, transducer(setExtend), accum)
86
+ }
87
+ if (constructor == Object) {
88
+ return genericReduce(collection, transducer(objectAssign), accum)
89
+ }
90
+ return identityTransform(collection, transducer, accum)
91
+ }
92
+
93
+ module.exports = genericTransform
@@ -5,16 +5,16 @@ const curry3 = require('./curry3')
5
5
  const callPropUnary = require('./callPropUnary')
6
6
 
7
7
  /**
8
- * @name iteratorAll
8
+ * @name iteratorEvery
9
9
  *
10
10
  * @synopsis
11
11
  * ```coffeescript [specscript]
12
- * iteratorAll(iterator Iterator, predicate ...any=>boolean) -> boolean
12
+ * iteratorEvery(iterator Iterator, predicate ...any=>boolean) -> boolean
13
13
  * ```
14
14
  *
15
15
  * @TODO use .next() calls
16
16
  */
17
- const iteratorAll = function (iterator, predicate) {
17
+ const iteratorEvery = function (iterator, predicate) {
18
18
  const promises = []
19
19
  for (const item of iterator) {
20
20
  const predication = predicate(item)
@@ -29,4 +29,4 @@ const iteratorAll = function (iterator, predicate) {
29
29
  : promiseAll(promises).then(curry3(callPropUnary, __, 'every', Boolean))
30
30
  }
31
31
 
32
- module.exports = iteratorAll
32
+ module.exports = iteratorEvery
@@ -1,23 +1,23 @@
1
1
  const SelfReferencingPromise = require('./SelfReferencingPromise')
2
- const asyncIteratorAny = require('./asyncIteratorAny')
2
+ const asyncIteratorSome = require('./asyncIteratorSome')
3
3
  const isPromise = require('./isPromise')
4
4
 
5
5
  /**
6
- * @name iteratorAny
6
+ * @name iteratorSome
7
7
  *
8
8
  * @synopsis
9
9
  * ```coffeescript [specscript]
10
- * iteratorAny(
10
+ * iteratorSome(
11
11
  * iterator Iterator,
12
12
  * predicate any=>Promise|boolean,
13
13
  * ) -> boolean
14
14
  * ```
15
15
  */
16
- const iteratorAny = function (iterator, predicate) {
16
+ const iteratorSome = function (iterator, predicate) {
17
17
  for (const item of iterator) {
18
18
  const predication = predicate(item)
19
19
  if (isPromise(predication)) {
20
- return asyncIteratorAny(
20
+ return asyncIteratorSome(
21
21
  iterator, predicate, new Set([SelfReferencingPromise(predication)]))
22
22
  }
23
23
  if (predication) {
@@ -27,4 +27,4 @@ const iteratorAny = function (iterator, predicate) {
27
27
  return false
28
28
  }
29
29
 
30
- module.exports = iteratorAny
30
+ module.exports = iteratorSome
@@ -0,0 +1,19 @@
1
+ const spread2 = require('./spread2')
2
+ const isPromise = require('./isPromise')
3
+ const promiseAll = require('./promiseAll')
4
+
5
+ // leftResolverRightResolverCompare(
6
+ // args Array, comparator function, left function, right function,
7
+ // ) -> Promise|boolean
8
+ const leftResolverRightResolverCompare = function (
9
+ args, comparator, left, right,
10
+ ) {
11
+ const leftResult = left(...args),
12
+ rightResult = right(...args)
13
+ if (isPromise(leftResult) || isPromise(rightResult)) {
14
+ return promiseAll([leftResult, rightResult]).then(spread2(comparator))
15
+ }
16
+ return comparator(leftResult, rightResult)
17
+ }
18
+
19
+ module.exports = leftResolverRightResolverCompare
@@ -0,0 +1,16 @@
1
+ const spread2 = require('./spread2')
2
+ const isPromise = require('./isPromise')
3
+ const promiseAll = require('./promiseAll')
4
+
5
+ // leftResolverRightValueCompare(
6
+ // args Array, comparator function, left function, right any
7
+ // ) -> Promise|boolean
8
+ const leftResolverRightValueCompare = function (args, comparator, left, right) {
9
+ const leftResult = left(...args)
10
+ if (isPromise(leftResult) || isPromise(right)) {
11
+ return promiseAll([leftResult, right]).then(spread2(comparator))
12
+ }
13
+ return comparator(leftResult, right)
14
+ }
15
+
16
+ module.exports = leftResolverRightValueCompare
@@ -0,0 +1,16 @@
1
+ const spread2 = require('./spread2')
2
+ const isPromise = require('./isPromise')
3
+ const promiseAll = require('./promiseAll')
4
+
5
+ // leftValueRightResolverCompare(
6
+ // args Array, comparator function, left any, right any,
7
+ // ) -> Promise|boolean
8
+ const leftValueRightResolverCompare = function (args, comparator, left, right) {
9
+ const rightResult = right(...args)
10
+ if (isPromise(left) || isPromise(rightResult)) {
11
+ return promiseAll([left, rightResult]).then(spread2(comparator))
12
+ }
13
+ return comparator(left, rightResult)
14
+ }
15
+
16
+ module.exports = leftValueRightResolverCompare
@@ -2,7 +2,6 @@ const isPromise = require('./isPromise')
2
2
  const __ = require('./placeholder')
3
3
  const curry5 = require('./curry5')
4
4
  const objectKeys = require('./objectKeys')
5
- const objectGetFirstKey = require('./objectGetFirstKey')
6
5
 
7
6
  /**
8
7
  * @name objectReduceAsync
@@ -0,0 +1,6 @@
1
+ const path = require('path')
2
+
3
+ // pathResolve(...args) -> resolvedPath string
4
+ const pathResolve = (...args) => path.resolve(...args)
5
+
6
+ module.exports = pathResolve
@@ -4,20 +4,20 @@ const curry3 = require('./curry3')
4
4
  const reducerAllSync = require('./reducerAllSync')
5
5
 
6
6
  /**
7
- * @name reducerAll
7
+ * @name reducerEvery
8
8
  *
9
9
  * @synopsis
10
10
  * ```coffeescript [specscript]
11
- * reducerAll(
11
+ * reducerEvery(
12
12
  * predicate any=>boolean,
13
13
  * ) -> reducer(result boolean, item any)=>boolean
14
14
  * ```
15
15
  */
16
- const reducerAll = predicate => function allReducer(result, item) {
16
+ const reducerEvery = predicate => function allReducer(result, item) {
17
17
  return result === false ? false
18
18
  : isPromise(result) ? result.then(
19
19
  curry3(reducerAllSync, predicate, __, item))
20
20
  : result ? predicate(item) : false
21
21
  }
22
22
 
23
- module.exports = reducerAll
23
+ module.exports = reducerEvery
@@ -1,7 +1,7 @@
1
- const curryArgs3 = require('./curryArgs3')
2
- const genericReduce = require('./genericReduce')
1
+ const curry3 = require('./curry3')
3
2
  const __ = require('./placeholder')
4
3
  const isPromise = require('./isPromise')
4
+ const genericReduce = require('./genericReduce')
5
5
 
6
6
  /**
7
7
  * @name reducerFlatMap
@@ -26,8 +26,8 @@ const reducerFlatMap = (
26
26
  ) => function flatMappingReducer(result, value) {
27
27
  const monad = flatMapper(value)
28
28
  return isPromise(monad)
29
- ? monad.then(curryArgs3(genericReduce, __, reducer, result))
30
- : genericReduce([monad], reducer, result)
29
+ ? monad.then(curry3(genericReduce, __, reducer, result))
30
+ : genericReduce(monad, reducer, result)
31
31
  }
32
32
 
33
33
  module.exports = reducerFlatMap
@@ -26,7 +26,7 @@ const genericReduce = require('./genericReduce')
26
26
  const reducerFlatten = reducer => function flatteningReducer(
27
27
  result, reducerItem,
28
28
  ) {
29
- return genericReduce([reducerItem], reducer, result)
29
+ return genericReduce(reducerItem, reducer, result)
30
30
  }
31
31
 
32
32
  module.exports = reducerFlatten
@@ -4,11 +4,11 @@ const __ = require('./placeholder')
4
4
  const isPromise = require('./isPromise')
5
5
 
6
6
  /**
7
- * @name reducerAny
7
+ * @name reducerSome
8
8
  *
9
9
  * @synopsis
10
10
  * ```coffeescript [specscript]
11
- * reducerAny(
11
+ * reducerSome(
12
12
  * predicate any=>boolean,
13
13
  * ) -> anyReducer (result boolean, item any)=>boolean
14
14
  * ```
@@ -17,10 +17,10 @@ const isPromise = require('./isPromise')
17
17
  *
18
18
  * @TODO throw to break early?
19
19
  */
20
- const reducerAny = predicate => function anyReducer(result, item) {
20
+ const reducerSome = predicate => function anyReducer(result, item) {
21
21
  return result === true ? result
22
22
  : isPromise(result) ? result.then(curry2(reducerAnySync(predicate), __, item))
23
23
  : result ? true : predicate(item)
24
24
  }
25
25
 
26
- module.exports = reducerAny
26
+ module.exports = reducerSome
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @name timeInLoop
3
+ *
4
+ * @synopsis
5
+ * ```coffeescript [specscript]
6
+ * timeInLoop(description string, loopCount number, fn function, options? {
7
+ * silent?: boolean,
8
+ * }) -> undefined
9
+ * ```
10
+ *
11
+ * @description
12
+ * Logs the amount of time required for a function to run a certain number of times
13
+ *
14
+ * ```js
15
+ * timeInLoop('hello', 1e6, () => 'hello') // hello: 1e+6: 3.474ms
16
+ * ```
17
+ *
18
+ * Reference: https://gist.github.com/funfunction/91b5876a5f562e1e352aed0fcabc3858
19
+ */
20
+ const timeInLoop = (description, loopCount, fn, options = {}) => {
21
+ const d = `${description}: ${loopCount.toExponential()}`
22
+ const start = performance.now()
23
+ for (let i = 0; i < loopCount; i++) {
24
+ fn()
25
+ }
26
+ const end = performance.now()
27
+ const duration = end - start
28
+
29
+ if (options.silent) {
30
+ return { description, loopCount, duration }
31
+ }
32
+
33
+ console.log(`${d}: ${duration}`)
34
+ return { description, loopCount, duration }
35
+ }
36
+
37
+ module.exports = timeInLoop
@@ -0,0 +1,18 @@
1
+ const assert = require('assert')
2
+ const timeInLoop = require('./timeInLoop')
3
+
4
+ describe('timeInLoop', () => {
5
+ it('times a function in a loop', async () => {
6
+ const result = timeInLoop('hey', 1e5, () => 'hey')
7
+ assert.equal(result.description, 'hey')
8
+ assert.equal(result.loopCount, 1e5)
9
+ assert.equal(typeof result.duration, 'number')
10
+ })
11
+
12
+ it('can be silent', async () => {
13
+ const result = timeInLoop('hey', 1e5, () => 'hey', { silent: true })
14
+ assert.equal(result.description, 'hey')
15
+ assert.equal(result.loopCount, 1e5)
16
+ assert.equal(typeof result.duration, 'number')
17
+ })
18
+ })
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @name timeInLoopAsync
3
+ *
4
+ * @synopsis
5
+ * ```coffeescript [specscript]
6
+ * timeInLoop.async(description string, loopCount number, fn function, options? {
7
+ * silent?: boolean,
8
+ * }) -> undefined
9
+ * ```
10
+ *
11
+ * @description
12
+ * Like timeInLoop, but every call is awaited
13
+ *
14
+ * ```js
15
+ * timeInLoop.async('async hello', 1e6, async () => 'hello') // async hello: 1e+6: 116.006ms
16
+ * ```
17
+ */
18
+ const timeInLoopAsync = async (description, loopCount, fn, options = {}) => {
19
+ const d = `${description}: ${loopCount.toExponential()}`
20
+ const start = performance.now()
21
+ for (let i = 0; i < loopCount; i++) {
22
+ await fn()
23
+ }
24
+ const end = performance.now()
25
+ const duration = end - start
26
+
27
+ if (options.silent) {
28
+ return { description, loopCount, duration }
29
+ }
30
+
31
+ console.log(`${d}: ${duration}`)
32
+ return { description, loopCount, duration }
33
+ }
34
+
35
+ module.exports = timeInLoopAsync
@@ -0,0 +1,22 @@
1
+ const assert = require('assert')
2
+ const timeInLoopAsync = require('./timeInLoopAsync')
3
+
4
+ describe('timeInLoopAsync', () => {
5
+ it('times an async function in a loop', async () => {
6
+ const p = timeInLoopAsync('asyncHey', 1e5, async () => 'asyncHey')
7
+ assert(p instanceof Promise)
8
+ const result = await p
9
+ assert.equal(result.description, 'asyncHey')
10
+ assert.equal(result.loopCount, 1e5)
11
+ assert.equal(typeof result.duration, 'number')
12
+ })
13
+
14
+ it('can be silent', async () => {
15
+ const p = timeInLoopAsync('asyncHey', 1e5, async () => 'asyncHey', { silent: true })
16
+ assert(p instanceof Promise)
17
+ const result = await p
18
+ assert.equal(result.description, 'asyncHey')
19
+ assert.equal(result.loopCount, 1e5)
20
+ assert.equal(typeof result.duration, 'number')
21
+ })
22
+ })