rubico 1.9.7 → 2.0.1

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 (593) 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/README.md +158 -81
  8. package/Transducer.js +75 -26
  9. package/Transducer.test.js +117 -0
  10. package/_internal/ComparisonOperator.js +68 -0
  11. package/_internal/File.js +41 -0
  12. package/_internal/FlatMappingAsyncIterator.js +4 -4
  13. package/_internal/FlatMappingIterator.js +1 -1
  14. package/_internal/TimeInLoopSuite.js +138 -0
  15. package/_internal/areAnyValuesPromises.js +23 -0
  16. package/_internal/{arrayAll.js → arrayEvery.js} +4 -4
  17. package/_internal/arrayExtend.js +3 -2
  18. package/_internal/arrayFilter.js +3 -4
  19. package/_internal/{arrayAny.js → arraySome.js} +8 -8
  20. package/_internal/{asyncIteratorAll.js → asyncIteratorEvery.js} +4 -4
  21. package/_internal/{asyncIteratorAny.js → asyncIteratorSome.js} +4 -4
  22. package/_internal/curry4.test.js +25 -0
  23. package/_internal/curry5.test.js +29 -0
  24. package/_internal/curryArgs2.js +43 -0
  25. package/_internal/curryArgs3.test.js +21 -0
  26. package/_internal/curryArgs4.js +65 -0
  27. package/_internal/curryArgs4.test.js +25 -0
  28. package/_internal/equals.js +13 -0
  29. package/_internal/findAllFilePaths.js +22 -0
  30. package/_internal/funcApply.js +2 -0
  31. package/_internal/funcCall.js +14 -0
  32. package/_internal/functionArrayAll.js +26 -0
  33. package/_internal/functionArrayAllSeries.js +55 -0
  34. package/_internal/functionObjectAll.js +32 -0
  35. package/_internal/genericReduce.js +4 -22
  36. package/_internal/genericTransform.js +15 -15
  37. package/_internal/improvedGenericTransform.js +93 -0
  38. package/_internal/{iteratorAll.js → iteratorEvery.js} +4 -4
  39. package/_internal/{iteratorAny.js → iteratorSome.js} +6 -6
  40. package/_internal/leftResolverRightResolverCompare.js +19 -0
  41. package/_internal/leftResolverRightValueCompare.js +16 -0
  42. package/_internal/leftValueRightResolverCompare.js +16 -0
  43. package/_internal/objectReduce.js +0 -1
  44. package/_internal/pathResolve.js +6 -0
  45. package/_internal/{reducerAll.js → reducerEvery.js} +4 -4
  46. package/_internal/reducerFlatMap.js +4 -4
  47. package/_internal/reducerFlatten.js +1 -1
  48. package/_internal/{reducerAny.js → reducerSome.js} +4 -4
  49. package/_internal/timeInLoop.js +37 -0
  50. package/_internal/timeInLoop.test.js +18 -0
  51. package/_internal/timeInLoopAsync.js +35 -0
  52. package/_internal/timeInLoopAsync.test.js +22 -0
  53. package/all.js +106 -40
  54. package/and.js +54 -36
  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 +18 -8
  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/build +472 -0
  136. package/compose.js +46 -0
  137. package/dist/Transducer.es.js +481 -0
  138. package/dist/Transducer.es.min.js +7 -0
  139. package/dist/Transducer.js +488 -0
  140. package/dist/Transducer.min.js +8 -0
  141. package/dist/Transducer.mjs +481 -0
  142. package/dist/__.es.js +2 -2
  143. package/dist/__.es.min.js +2 -2
  144. package/dist/__.js +2 -2
  145. package/dist/__.min.js +2 -2
  146. package/dist/__.mjs +2 -2
  147. package/dist/all.es.js +173 -92
  148. package/dist/all.es.min.js +3 -3
  149. package/dist/all.js +173 -92
  150. package/dist/all.min.js +3 -3
  151. package/dist/all.mjs +173 -92
  152. package/dist/always.es.js +2 -2
  153. package/dist/always.es.min.js +2 -2
  154. package/dist/always.js +2 -2
  155. package/dist/always.min.js +2 -2
  156. package/dist/always.mjs +2 -2
  157. package/dist/and.es.js +101 -32
  158. package/dist/and.es.min.js +3 -3
  159. package/dist/and.js +101 -32
  160. package/dist/and.min.js +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.mjs +37 -10
  167. package/dist/compose.es.js +71 -0
  168. package/dist/compose.es.min.js +7 -0
  169. package/dist/compose.js +78 -0
  170. package/dist/compose.min.js +8 -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.mjs +2 -2
  177. package/dist/eq.es.js +172 -49
  178. package/dist/eq.es.min.js +3 -3
  179. package/dist/eq.js +172 -49
  180. package/dist/eq.min.js +3 -3
  181. package/dist/eq.mjs +172 -49
  182. package/dist/every.es.js +194 -0
  183. package/dist/every.es.min.js +7 -0
  184. package/dist/every.js +201 -0
  185. package/dist/every.min.js +8 -0
  186. package/dist/every.mjs +194 -0
  187. package/dist/filter.es.js +14 -108
  188. package/dist/filter.es.min.js +3 -3
  189. package/dist/filter.js +14 -108
  190. package/dist/filter.min.js +3 -3
  191. package/dist/filter.mjs +14 -108
  192. package/dist/flatMap.es.js +27 -214
  193. package/dist/flatMap.es.min.js +3 -3
  194. package/dist/flatMap.js +27 -214
  195. package/dist/flatMap.min.js +3 -3
  196. package/dist/flatMap.mjs +27 -214
  197. package/dist/{x/forEach.es.js → forEach.es.js} +52 -70
  198. package/dist/forEach.es.min.js +7 -0
  199. package/dist/{x/forEach.js → forEach.js} +52 -70
  200. package/dist/forEach.min.js +8 -0
  201. package/dist/{x/forEach.mjs → forEach.mjs} +52 -70
  202. package/dist/get.es.js +60 -5
  203. package/dist/get.es.min.js +3 -3
  204. package/dist/get.js +60 -5
  205. package/dist/get.min.js +3 -3
  206. package/dist/get.mjs +60 -5
  207. package/dist/gt.es.js +171 -48
  208. package/dist/gt.es.min.js +3 -3
  209. package/dist/gt.js +171 -48
  210. package/dist/gt.min.js +3 -3
  211. package/dist/gt.mjs +171 -48
  212. package/dist/gte.es.js +171 -48
  213. package/dist/gte.es.min.js +3 -3
  214. package/dist/gte.js +171 -48
  215. package/dist/gte.min.js +3 -3
  216. package/dist/gte.mjs +171 -48
  217. package/dist/lt.es.js +171 -48
  218. package/dist/lt.es.min.js +3 -3
  219. package/dist/lt.js +171 -48
  220. package/dist/lt.min.js +3 -3
  221. package/dist/lt.mjs +171 -48
  222. package/dist/lte.es.js +171 -48
  223. package/dist/lte.es.min.js +3 -3
  224. package/dist/lte.js +171 -48
  225. package/dist/lte.min.js +3 -3
  226. package/dist/lte.mjs +171 -48
  227. package/dist/map.es.js +12 -101
  228. package/dist/map.es.min.js +3 -3
  229. package/dist/map.js +12 -101
  230. package/dist/map.min.js +3 -3
  231. package/dist/map.mjs +12 -101
  232. package/dist/not.es.js +75 -14
  233. package/dist/not.es.min.js +3 -3
  234. package/dist/not.js +75 -14
  235. package/dist/not.min.js +3 -3
  236. package/dist/not.mjs +75 -14
  237. package/dist/omit.es.js +7 -2
  238. package/dist/omit.es.min.js +3 -3
  239. package/dist/omit.js +7 -2
  240. package/dist/omit.min.js +3 -3
  241. package/dist/omit.mjs +7 -2
  242. package/dist/or.es.js +99 -31
  243. package/dist/or.es.min.js +3 -3
  244. package/dist/or.js +99 -31
  245. package/dist/or.min.js +3 -3
  246. package/dist/or.mjs +99 -31
  247. package/dist/pick.es.js +8 -3
  248. package/dist/pick.es.min.js +3 -3
  249. package/dist/pick.js +8 -3
  250. package/dist/pick.min.js +3 -3
  251. package/dist/pick.mjs +8 -3
  252. package/dist/pipe.es.js +42 -46
  253. package/dist/pipe.es.min.js +3 -3
  254. package/dist/pipe.js +42 -46
  255. package/dist/pipe.min.js +3 -3
  256. package/dist/pipe.mjs +42 -46
  257. package/dist/reduce.es.js +52 -94
  258. package/dist/reduce.es.min.js +3 -3
  259. package/dist/reduce.js +52 -94
  260. package/dist/reduce.min.js +3 -3
  261. package/dist/reduce.mjs +52 -94
  262. package/dist/rubico.es.js +762 -883
  263. package/dist/rubico.es.min.js +3 -3
  264. package/dist/rubico.global.js +2794 -0
  265. package/dist/rubico.global.min.js +8 -0
  266. package/dist/rubico.js +739 -869
  267. package/dist/rubico.min.js +3 -3
  268. package/dist/rubico.mjs +762 -883
  269. package/dist/set.es.js +18 -3
  270. package/dist/set.es.min.js +3 -3
  271. package/dist/set.js +18 -3
  272. package/dist/set.min.js +3 -3
  273. package/dist/set.mjs +18 -3
  274. package/dist/{any.js → some.es.js} +64 -54
  275. package/dist/some.es.min.js +7 -0
  276. package/dist/{any.mjs → some.js} +72 -48
  277. package/dist/some.min.js +8 -0
  278. package/dist/{any.es.js → some.mjs} +65 -48
  279. package/dist/switchCase.es.js +55 -5
  280. package/dist/switchCase.es.min.js +3 -3
  281. package/dist/switchCase.js +55 -5
  282. package/dist/switchCase.min.js +3 -3
  283. package/dist/switchCase.mjs +55 -5
  284. package/dist/tap.es.js +2 -9
  285. package/dist/tap.es.min.js +3 -3
  286. package/dist/tap.js +2 -9
  287. package/dist/tap.min.js +3 -3
  288. package/dist/tap.mjs +2 -9
  289. package/dist/thunkify.es.js +45 -2
  290. package/dist/thunkify.es.min.js +3 -3
  291. package/dist/thunkify.js +45 -2
  292. package/dist/thunkify.min.js +3 -3
  293. package/dist/thunkify.mjs +45 -2
  294. package/dist/transform.es.js +35 -71
  295. package/dist/transform.es.min.js +3 -3
  296. package/dist/transform.js +35 -71
  297. package/dist/transform.min.js +3 -3
  298. package/dist/transform.mjs +35 -71
  299. package/dist/tryCatch.es.js +33 -17
  300. package/dist/tryCatch.es.min.js +3 -3
  301. package/dist/tryCatch.js +33 -17
  302. package/dist/tryCatch.min.js +3 -3
  303. package/dist/tryCatch.mjs +33 -17
  304. package/dist/x/append.es.js +2 -2
  305. package/dist/x/append.es.min.js +2 -2
  306. package/dist/x/append.js +2 -2
  307. package/dist/x/append.min.js +2 -2
  308. package/dist/x/append.mjs +2 -2
  309. package/dist/x/callProp.es.js +2 -2
  310. package/dist/x/callProp.es.min.js +2 -2
  311. package/dist/x/callProp.js +2 -2
  312. package/dist/x/callProp.min.js +2 -2
  313. package/dist/x/callProp.mjs +2 -2
  314. package/dist/x/defaultsDeep.es.js +2 -2
  315. package/dist/x/defaultsDeep.es.min.js +2 -2
  316. package/dist/x/defaultsDeep.js +2 -2
  317. package/dist/x/defaultsDeep.min.js +2 -2
  318. package/dist/x/defaultsDeep.mjs +2 -2
  319. package/dist/x/differenceWith.es.js +7 -7
  320. package/dist/x/differenceWith.es.min.js +3 -3
  321. package/dist/x/differenceWith.js +7 -7
  322. package/dist/x/differenceWith.min.js +2 -2
  323. package/dist/x/differenceWith.mjs +7 -7
  324. package/dist/x/filterOut.es.js +60 -117
  325. package/dist/x/filterOut.es.min.js +3 -3
  326. package/dist/x/filterOut.js +60 -117
  327. package/dist/x/filterOut.min.js +3 -3
  328. package/dist/x/filterOut.mjs +60 -117
  329. package/dist/x/find.es.js +2 -2
  330. package/dist/x/find.es.min.js +2 -2
  331. package/dist/x/find.js +2 -2
  332. package/dist/x/find.min.js +2 -2
  333. package/dist/x/find.mjs +2 -2
  334. package/dist/x/findIndex.es.js +2 -2
  335. package/dist/x/findIndex.es.min.js +2 -2
  336. package/dist/x/findIndex.js +2 -2
  337. package/dist/x/findIndex.min.js +2 -2
  338. package/dist/x/findIndex.mjs +2 -2
  339. package/dist/x/first.es.js +2 -2
  340. package/dist/x/first.es.min.js +2 -2
  341. package/dist/x/first.js +2 -2
  342. package/dist/x/first.min.js +2 -2
  343. package/dist/x/first.mjs +2 -2
  344. package/dist/x/flatten.es.js +20 -207
  345. package/dist/x/flatten.es.min.js +3 -3
  346. package/dist/x/flatten.js +20 -207
  347. package/dist/x/flatten.min.js +3 -3
  348. package/dist/x/flatten.mjs +20 -207
  349. package/dist/x/groupBy.es.js +52 -94
  350. package/dist/x/groupBy.es.min.js +3 -3
  351. package/dist/x/groupBy.js +52 -94
  352. package/dist/x/groupBy.min.js +3 -3
  353. package/dist/x/groupBy.mjs +52 -94
  354. package/dist/x/has.es.js +2 -2
  355. package/dist/x/has.es.min.js +2 -2
  356. package/dist/x/has.js +2 -2
  357. package/dist/x/has.min.js +2 -2
  358. package/dist/x/has.mjs +2 -2
  359. package/dist/x/identity.es.js +2 -2
  360. package/dist/x/identity.es.min.js +2 -2
  361. package/dist/x/identity.js +2 -2
  362. package/dist/x/identity.min.js +2 -2
  363. package/dist/x/identity.mjs +2 -2
  364. package/dist/x/includes.es.js +2 -2
  365. package/dist/x/includes.es.min.js +2 -2
  366. package/dist/x/includes.js +2 -2
  367. package/dist/x/includes.min.js +2 -2
  368. package/dist/x/includes.mjs +2 -2
  369. package/dist/x/isDeepEqual.es.js +2 -2
  370. package/dist/x/isDeepEqual.es.min.js +2 -2
  371. package/dist/x/isDeepEqual.js +2 -2
  372. package/dist/x/isDeepEqual.min.js +2 -2
  373. package/dist/x/isDeepEqual.mjs +2 -2
  374. package/dist/x/isEmpty.es.js +2 -2
  375. package/dist/x/isEmpty.es.min.js +2 -2
  376. package/dist/x/isEmpty.js +2 -2
  377. package/dist/x/isEmpty.min.js +2 -2
  378. package/dist/x/isEmpty.mjs +2 -2
  379. package/dist/x/isEqual.es.js +2 -2
  380. package/dist/x/isEqual.es.min.js +2 -2
  381. package/dist/x/isEqual.js +2 -2
  382. package/dist/x/isEqual.min.js +2 -2
  383. package/dist/x/isEqual.mjs +2 -2
  384. package/dist/x/isFunction.es.js +2 -2
  385. package/dist/x/isFunction.es.min.js +2 -2
  386. package/dist/x/isFunction.js +2 -2
  387. package/dist/x/isFunction.min.js +2 -2
  388. package/dist/x/isFunction.mjs +2 -2
  389. package/dist/x/isIn.es.js +2 -2
  390. package/dist/x/isIn.es.min.js +2 -2
  391. package/dist/x/isIn.js +2 -2
  392. package/dist/x/isIn.min.js +2 -2
  393. package/dist/x/isIn.mjs +2 -2
  394. package/dist/x/isObject.es.js +2 -2
  395. package/dist/x/isObject.es.min.js +2 -2
  396. package/dist/x/isObject.js +2 -2
  397. package/dist/x/isObject.min.js +2 -2
  398. package/dist/x/isObject.mjs +2 -2
  399. package/dist/x/isString.es.js +2 -2
  400. package/dist/x/isString.es.min.js +2 -2
  401. package/dist/x/isString.js +2 -2
  402. package/dist/x/isString.min.js +2 -2
  403. package/dist/x/isString.mjs +2 -2
  404. package/dist/x/keys.es.js +2 -2
  405. package/dist/x/keys.es.min.js +2 -2
  406. package/dist/x/keys.js +2 -2
  407. package/dist/x/keys.min.js +2 -2
  408. package/dist/x/keys.mjs +2 -2
  409. package/dist/x/last.es.js +2 -2
  410. package/dist/x/last.es.min.js +2 -2
  411. package/dist/x/last.js +2 -2
  412. package/dist/x/last.min.js +2 -2
  413. package/dist/x/last.mjs +2 -2
  414. package/dist/x/maxBy.es.js +59 -6
  415. package/dist/x/maxBy.es.min.js +3 -3
  416. package/dist/x/maxBy.js +59 -6
  417. package/dist/x/maxBy.min.js +3 -3
  418. package/dist/x/maxBy.mjs +59 -6
  419. package/dist/x/noop.es.js +2 -2
  420. package/dist/x/noop.es.min.js +2 -2
  421. package/dist/x/noop.js +2 -2
  422. package/dist/x/noop.min.js +2 -2
  423. package/dist/x/noop.mjs +2 -2
  424. package/dist/x/pluck.es.js +32 -103
  425. package/dist/x/pluck.es.min.js +3 -3
  426. package/dist/x/pluck.js +32 -103
  427. package/dist/x/pluck.min.js +3 -3
  428. package/dist/x/pluck.mjs +32 -103
  429. package/dist/x/prepend.es.js +2 -2
  430. package/dist/x/prepend.es.min.js +2 -2
  431. package/dist/x/prepend.js +2 -2
  432. package/dist/x/prepend.min.js +2 -2
  433. package/dist/x/prepend.mjs +2 -2
  434. package/dist/x/size.es.js +2 -2
  435. package/dist/x/size.es.min.js +2 -2
  436. package/dist/x/size.js +2 -2
  437. package/dist/x/size.min.js +2 -2
  438. package/dist/x/size.mjs +2 -2
  439. package/dist/x/trace.es.js +2 -9
  440. package/dist/x/trace.es.min.js +3 -3
  441. package/dist/x/trace.js +2 -9
  442. package/dist/x/trace.min.js +3 -3
  443. package/dist/x/trace.mjs +2 -9
  444. package/dist/x/unionWith.es.js +2 -2
  445. package/dist/x/unionWith.es.min.js +2 -2
  446. package/dist/x/unionWith.js +2 -2
  447. package/dist/x/unionWith.min.js +2 -2
  448. package/dist/x/unionWith.mjs +2 -2
  449. package/dist/x/uniq.es.js +2 -2
  450. package/dist/x/uniq.es.min.js +2 -2
  451. package/dist/x/uniq.js +2 -2
  452. package/dist/x/uniq.min.js +2 -2
  453. package/dist/x/uniq.mjs +2 -2
  454. package/dist/x/unless.es.js +2 -2
  455. package/dist/x/unless.es.min.js +2 -2
  456. package/dist/x/unless.js +2 -2
  457. package/dist/x/unless.min.js +2 -2
  458. package/dist/x/unless.mjs +2 -2
  459. package/dist/x/values.es.js +2 -2
  460. package/dist/x/values.es.min.js +2 -2
  461. package/dist/x/values.js +2 -2
  462. package/dist/x/values.min.js +2 -2
  463. package/dist/x/values.mjs +2 -2
  464. package/dist/x/when.es.js +2 -2
  465. package/dist/x/when.es.min.js +2 -2
  466. package/dist/x/when.js +2 -2
  467. package/dist/x/when.min.js +2 -2
  468. package/dist/x/when.mjs +2 -2
  469. package/dist-test.js +31 -2042
  470. package/eq.js +21 -63
  471. package/es.js +739 -869
  472. package/every.js +94 -0
  473. package/filter.js +23 -91
  474. package/flatMap.js +75 -70
  475. package/forEach.js +82 -0
  476. package/get.js +23 -6
  477. package/global.js +6 -4
  478. package/gt.js +15 -58
  479. package/gte.js +14 -57
  480. package/index.js +739 -869
  481. package/lt.js +17 -60
  482. package/lte.js +14 -57
  483. package/map.js +9 -94
  484. package/memory-usage/reduce.js +2 -2
  485. package/not.js +27 -45
  486. package/omit.js +4 -0
  487. package/or.js +50 -33
  488. package/package.json +7 -7
  489. package/pick.js +5 -1
  490. package/pipe.js +13 -50
  491. package/reduce.js +42 -51
  492. package/rubico.js +22 -11
  493. package/set.js +43 -10
  494. package/some.js +105 -0
  495. package/switchCase.js +13 -3
  496. package/tap.js +0 -24
  497. package/test.js +847 -1096
  498. package/thunkify.js +9 -0
  499. package/tmp.js +1 -0
  500. package/transform.js +31 -16
  501. package/tryCatch.js +19 -15
  502. package/x/differenceWith.js +3 -3
  503. package/x/filterOut.test.js +6 -6
  504. package/x/flatten.js +1 -1
  505. package/x/flatten.test.js +0 -8
  506. package/x/index.js +0 -2
  507. package/x/pluck.js +18 -27
  508. package/x/pluck.test.js +3 -7
  509. package/x/timeInLoop.js +16 -25
  510. package/x/timeInLoop.test.js +8 -4
  511. package/any.js +0 -82
  512. package/dist/__.min.mjs +0 -7
  513. package/dist/all.min.mjs +0 -7
  514. package/dist/always.min.mjs +0 -7
  515. package/dist/and.min.mjs +0 -7
  516. package/dist/any.es.min.js +0 -7
  517. package/dist/any.min.js +0 -8
  518. package/dist/any.min.mjs +0 -7
  519. package/dist/assign.min.mjs +0 -7
  520. package/dist/curry.min.mjs +0 -7
  521. package/dist/eq.min.mjs +0 -7
  522. package/dist/filter.min.mjs +0 -7
  523. package/dist/flatMap.min.mjs +0 -7
  524. package/dist/fork.es.js +0 -159
  525. package/dist/fork.es.min.js +0 -7
  526. package/dist/fork.js +0 -166
  527. package/dist/fork.min.js +0 -8
  528. package/dist/fork.min.mjs +0 -7
  529. package/dist/fork.mjs +0 -159
  530. package/dist/get.min.mjs +0 -7
  531. package/dist/gt.min.mjs +0 -7
  532. package/dist/gte.min.mjs +0 -7
  533. package/dist/lt.min.mjs +0 -7
  534. package/dist/lte.min.mjs +0 -7
  535. package/dist/map.min.mjs +0 -7
  536. package/dist/not.min.mjs +0 -7
  537. package/dist/omit.min.mjs +0 -7
  538. package/dist/or.min.mjs +0 -7
  539. package/dist/pick.min.mjs +0 -7
  540. package/dist/pipe.min.mjs +0 -7
  541. package/dist/reduce.min.mjs +0 -7
  542. package/dist/rubico.min.mjs +0 -7
  543. package/dist/set.min.mjs +0 -7
  544. package/dist/switchCase.min.mjs +0 -7
  545. package/dist/tap.min.mjs +0 -7
  546. package/dist/thunkify.min.mjs +0 -7
  547. package/dist/transform.min.mjs +0 -7
  548. package/dist/tryCatch.min.mjs +0 -7
  549. package/dist/x/append.min.mjs +0 -7
  550. package/dist/x/callProp.min.mjs +0 -7
  551. package/dist/x/defaultsDeep.min.mjs +0 -7
  552. package/dist/x/differenceWith.min.mjs +0 -7
  553. package/dist/x/filterOut.min.mjs +0 -7
  554. package/dist/x/find.min.mjs +0 -7
  555. package/dist/x/findIndex.min.mjs +0 -7
  556. package/dist/x/first.min.mjs +0 -7
  557. package/dist/x/flatten.min.mjs +0 -7
  558. package/dist/x/forEach.es.min.js +0 -7
  559. package/dist/x/forEach.min.js +0 -8
  560. package/dist/x/forEach.min.mjs +0 -7
  561. package/dist/x/groupBy.min.mjs +0 -7
  562. package/dist/x/has.min.mjs +0 -7
  563. package/dist/x/identity.min.mjs +0 -7
  564. package/dist/x/includes.min.mjs +0 -7
  565. package/dist/x/isDeepEqual.min.mjs +0 -7
  566. package/dist/x/isEmpty.min.mjs +0 -7
  567. package/dist/x/isEqual.min.mjs +0 -7
  568. package/dist/x/isFunction.min.mjs +0 -7
  569. package/dist/x/isIn.min.mjs +0 -7
  570. package/dist/x/isObject.min.mjs +0 -7
  571. package/dist/x/isString.min.mjs +0 -7
  572. package/dist/x/keys.min.mjs +0 -7
  573. package/dist/x/last.min.mjs +0 -7
  574. package/dist/x/maxBy.min.mjs +0 -7
  575. package/dist/x/noop.min.mjs +0 -7
  576. package/dist/x/pluck.min.mjs +0 -7
  577. package/dist/x/prepend.min.mjs +0 -7
  578. package/dist/x/size.min.mjs +0 -7
  579. package/dist/x/trace.min.mjs +0 -7
  580. package/dist/x/unionWith.min.mjs +0 -7
  581. package/dist/x/uniq.min.mjs +0 -7
  582. package/dist/x/unless.min.mjs +0 -7
  583. package/dist/x/values.min.mjs +0 -7
  584. package/dist/x/when.min.mjs +0 -7
  585. package/distributor.js +0 -495
  586. package/fork.js +0 -101
  587. package/x/forEach.js +0 -93
  588. package/x/forEach.test.js +0 -218
  589. /package/{benchmarks → archive/benchmarks-v1.9.7}/any.js +0 -0
  590. /package/{x/forEach.benchmark.js → archive/benchmarks-v1.9.7/forEach.js} +0 -0
  591. /package/{benchmarks → archive/benchmarks-v1.9.7}/fork.js +0 -0
  592. /package/{benchmarks → archive/benchmarks-v1.9.7}/integration.js +0 -0
  593. /package/{benchmarks → archive/benchmarks-v1.9.7}/misc.js +0 -0
@@ -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) {
@@ -0,0 +1,138 @@
1
+ const timeInLoop = require('./timeInLoop')
2
+ const timeInLoopAsync = require('./timeInLoopAsync')
3
+
4
+ /**
5
+ * @name formatRunOutput
6
+ *
7
+ * @synopsis
8
+ * ```coffeescript [specscript]
9
+ * formatRunOutput(
10
+ * description string,
11
+ * loopCount number,
12
+ * duration number
13
+ * ) -> formatted string
14
+ * ```
15
+ */
16
+ const formatRunOutput = function (description, loopCount, duration) {
17
+ const formattedDuration = duration < 1e3
18
+ ? `${duration.toFixed(3)}ms`
19
+ : `${(duration / 1e3).toFixed(3)}s`
20
+ return `
21
+ ${description}: ${loopCount.toExponential()}: ${formattedDuration}
22
+ `.trim()
23
+ }
24
+
25
+ /**
26
+ * @name TimeInLoopSuite
27
+ *
28
+ * @synopsis
29
+ * ```coffeescript [specscript]
30
+ * new TimeInLoopSuite(options? {
31
+ * loopCount?: number,
32
+ * runs?: number,
33
+ * async?: boolean,
34
+ * }) -> TimeInLoopSuite
35
+ * ```
36
+ */
37
+ const TimeInLoopSuite = function (options = {}) {
38
+ this.loopCount = options.loopCount ?? 1e6
39
+ this.runs = options.runs ?? 5
40
+ this.isAsync = options.async ?? false
41
+ this.benchmarkCases = []
42
+ this.handlerMap = new Map()
43
+ }
44
+
45
+
46
+ /**
47
+ * @name TimeInLoopSuite.prototype.emit
48
+ *
49
+ * @synopsis
50
+ * ```coffeescript [specscript]
51
+ * new TimeInLoopSuite(...).emit(eventName string, event Object) -> ()
52
+ * ```
53
+ */
54
+ TimeInLoopSuite.prototype.emit = function (eventName, event) {
55
+ const handlerMap = this.handlerMap
56
+ if (handlerMap.has(eventName)) {
57
+ handlerMap.get(eventName).forEach(handler => handler(event))
58
+ }
59
+ }
60
+
61
+ /**
62
+ * @name TimeInLoopSuite.prototype.on
63
+ *
64
+ * @synopsis
65
+ * ```coffeescript [specscript]
66
+ * new TimeInLoopSuite(...).on(eventName string, handler function) -> ()
67
+ * ```
68
+ */
69
+ TimeInLoopSuite.prototype.on = function (eventName, handler) {
70
+ const handlerMap = this.handlerMap
71
+ if (handlerMap.has(eventName)) {
72
+ handlerMap.get(eventName).add(handler)
73
+ } else {
74
+ handlerMap.set(eventName, new Set([handler]))
75
+ }
76
+ }
77
+
78
+ /**
79
+ * @name TimeInLoopSuite.prototype.add
80
+ *
81
+ * @synopsis
82
+ * ```coffeescript [specscript]
83
+ * new TimeInLoopSuite(...).add(description string, func function) -> ()
84
+ * ```
85
+ */
86
+ TimeInLoopSuite.prototype.add = function (description, func) {
87
+ const { loopCount, isAsync } = this
88
+ this.benchmarkCases.push({
89
+ description,
90
+ loopCount,
91
+ benchmark: isAsync
92
+ ? () => timeInLoopAsync(description, loopCount, func, { silent: true })
93
+ : () => timeInLoop(description, loopCount, func, { silent: true }),
94
+ })
95
+ }
96
+
97
+ /**
98
+ * @name TimeInLoopSuite.prototype.run
99
+ *
100
+ * @synopsis
101
+ * ```coffeescript [specscript]
102
+ * new TimeInLoopSuite(...).run() -> Promise<>
103
+ * ```
104
+ */
105
+ TimeInLoopSuite.prototype.run = async function () {
106
+ const caseBestRuns = []
107
+ for (const { description, loopCount, benchmark } of this.benchmarkCases) {
108
+ const durations = []
109
+ let runCount = 0
110
+ while (runCount < this.runs) {
111
+ const { duration } = await benchmark()
112
+ durations.push(duration)
113
+ runCount += 1
114
+ this.emit('run', { description, duration, loopCount })
115
+ }
116
+
117
+ const caseBestDuration = Math.min(...durations)
118
+
119
+ const caseBestRun = {
120
+ description,
121
+ duration: caseBestDuration,
122
+ loopCount,
123
+ output: formatRunOutput(description, loopCount, caseBestDuration),
124
+ }
125
+
126
+ caseBestRuns.push(caseBestRun)
127
+
128
+ this.emit('caseBestRun', caseBestRun)
129
+ }
130
+
131
+ const suiteBestRun = caseBestRuns.reduce(
132
+ (suiteBest, run) => run.duration < suiteBest.duration ? run : suiteBest
133
+ )
134
+
135
+ this.emit('suiteBestRun', suiteBestRun)
136
+ }
137
+
138
+ module.exports = TimeInLoopSuite
@@ -0,0 +1,23 @@
1
+ const isPromise = require('./isPromise')
2
+
3
+ /**
4
+ * @name areAnyValuesPromises
5
+ *
6
+ * @synopsis
7
+ * ```coffeescript [specscript]
8
+ * areAnyValuesPromises(values Array) -> boolean
9
+ * ```
10
+ */
11
+ const areAnyValuesPromises = function (values) {
12
+ const length = values.length
13
+ let index = -1
14
+ while (++index < length) {
15
+ const value = values[index]
16
+ if (isPromise(value)) {
17
+ return true
18
+ }
19
+ }
20
+ return false
21
+ }
22
+
23
+ module.exports = areAnyValuesPromises
@@ -5,14 +5,14 @@ const promiseAll = require('./promiseAll')
5
5
  const callPropUnary = require('./callPropUnary')
6
6
 
7
7
  /**
8
- * @name arrayAll
8
+ * @name arrayEvery
9
9
  *
10
10
  * @synopsis
11
11
  * ```coffeescript [specscript]
12
- * arrayAll(array Array, predicate ...any=>boolean) -> boolean
12
+ * arrayEvery(array Array, predicate ...any=>boolean) -> boolean
13
13
  * ```
14
14
  */
15
- const arrayAll = function (array, predicate) {
15
+ const arrayEvery = function (array, predicate) {
16
16
  const arrayLength = array.length,
17
17
  promises = []
18
18
  let index = -1
@@ -29,4 +29,4 @@ const arrayAll = function (array, predicate) {
29
29
  : promiseAll(promises).then(curry3(callPropUnary, __, 'every', Boolean))
30
30
  }
31
31
 
32
- module.exports = arrayAll
32
+ module.exports = arrayEvery
@@ -1,4 +1,5 @@
1
- const isArrayLike = require('./isArrayLike')
1
+ const isArray = require('./isArray')
2
+ const isBinary = require('./isBinary')
2
3
 
3
4
  /**
4
5
  * @name _arrayExtend
@@ -30,7 +31,7 @@ const _arrayExtend = function (array, values) {
30
31
  * Extend an array with values.
31
32
  */
32
33
  const arrayExtend = function (array, values) {
33
- if (isArrayLike(values)) {
34
+ if (isArray(values) || isBinary(values)) {
34
35
  return _arrayExtend(array, values)
35
36
  }
36
37
  array.push(values)
@@ -26,12 +26,11 @@ const arrayFilter = function (array, predicate) {
26
26
  resultIndex = -1
27
27
  while (++index < arrayLength) {
28
28
  const item = array[index],
29
- shouldIncludeItem = predicate(item)
29
+ shouldIncludeItem = predicate(item, index, array)
30
30
  if (isPromise(shouldIncludeItem)) {
31
31
  return promiseAll(
32
- arrayExtendMap(
33
- [shouldIncludeItem], array, predicate, index)).then(
34
- curry4(arrayFilterByConditions, array, result, index - 1, __))
32
+ arrayExtendMap([shouldIncludeItem], array, predicate, index)
33
+ ).then(curry4(arrayFilterByConditions, array, result, index - 1, __))
35
34
  }
36
35
  if (shouldIncludeItem) {
37
36
  result[++resultIndex] = item
@@ -3,11 +3,11 @@ const isPromise = require('./isPromise')
3
3
  const promiseRace = require('./promiseRace')
4
4
 
5
5
  /**
6
- * @name asyncArrayAny
6
+ * @name asyncArraySome
7
7
  *
8
8
  * @synopsis
9
9
  * ```coffeescript [specscript]
10
- * asyncArrayAny(
10
+ * asyncArraySome(
11
11
  * array Array,
12
12
  * predicate any=>Promise|boolean,
13
13
  * index number,
@@ -15,7 +15,7 @@ const promiseRace = require('./promiseRace')
15
15
  * ) -> boolean
16
16
  * ```
17
17
  */
18
- const asyncArrayAny = async function (
18
+ const asyncArraySome = async function (
19
19
  array, predicate, index, promisesInFlight,
20
20
  ) {
21
21
  const length = array.length
@@ -39,23 +39,23 @@ const asyncArrayAny = async function (
39
39
  }
40
40
 
41
41
  /**
42
- * @name arrayAny
42
+ * @name arraySome
43
43
  *
44
44
  * @synopsis
45
45
  * ```coffeescript [specscript]
46
- * arrayAny(
46
+ * arraySome(
47
47
  * array Array,
48
48
  * predicate any=>Promise|boolean,
49
49
  * ) -> boolean
50
50
  * ```
51
51
  */
52
- const arrayAny = function (array, predicate) {
52
+ const arraySome = function (array, predicate) {
53
53
  const length = array.length
54
54
  let index = -1
55
55
  while (++index < length) {
56
56
  const predication = predicate(array[index])
57
57
  if (isPromise(predication)) {
58
- return asyncArrayAny(
58
+ return asyncArraySome(
59
59
  array, predicate, index, new Set([SelfReferencingPromise(predication)]))
60
60
  }
61
61
  if (predication) {
@@ -65,4 +65,4 @@ const arrayAny = function (array, predicate) {
65
65
  return false
66
66
  }
67
67
 
68
- module.exports = arrayAny
68
+ module.exports = arraySome
@@ -3,7 +3,7 @@ const isPromise = require('./isPromise')
3
3
  const promiseRace = require('./promiseRace')
4
4
 
5
5
  /**
6
- * @name asyncIteratorAll
6
+ * @name asyncIteratorEvery
7
7
  *
8
8
  * @synopsis
9
9
  * var T any,
@@ -12,11 +12,11 @@ const promiseRace = require('./promiseRace')
12
12
  * promisesInFlight Set<Promise<[T, Promise]>>,
13
13
  * maxConcurrency number
14
14
  *
15
- * asyncIteratorAll(
15
+ * asyncIteratorEvery(
16
16
  * asyncIterator, predicate, promisesInFlight, maxConcurrency,
17
17
  * ) -> Promise<boolean>
18
18
  */
19
- const asyncIteratorAll = async function (
19
+ const asyncIteratorEvery = async function (
20
20
  asyncIterator, predicate, promisesInFlight, maxConcurrency = 20,
21
21
  ) {
22
22
  let iteration = await asyncIterator.next()
@@ -47,4 +47,4 @@ const asyncIteratorAll = async function (
47
47
  return true
48
48
  }
49
49
 
50
- module.exports = asyncIteratorAll
50
+ module.exports = asyncIteratorEvery
@@ -3,11 +3,11 @@ const isPromise = require('./isPromise')
3
3
  const promiseRace = require('./promiseRace')
4
4
 
5
5
  /**
6
- * @name asyncIteratorAny
6
+ * @name asyncIteratorSome
7
7
  *
8
8
  * @synopsis
9
9
  * ```coffeescript [specscript]
10
- * asyncIteratorAny(
10
+ * asyncIteratorSome(
11
11
  * iterator Iterator|AsyncIterator,
12
12
  * predicate any=>Promise|boolean,
13
13
  * index number,
@@ -16,7 +16,7 @@ const promiseRace = require('./promiseRace')
16
16
  * ) -> boolean
17
17
  * ```
18
18
  */
19
- const asyncIteratorAny = async function (
19
+ const asyncIteratorSome = async function (
20
20
  iterator, predicate, promisesInFlight, maxConcurrency = 20,
21
21
  ) {
22
22
  let iteration = iterator.next()
@@ -53,4 +53,4 @@ const asyncIteratorAny = async function (
53
53
  return false
54
54
  }
55
55
 
56
- module.exports = asyncIteratorAny
56
+ module.exports = asyncIteratorSome
@@ -0,0 +1,25 @@
1
+ const assert = require('assert')
2
+ const curry4 = require('./curry4')
3
+ const __ = require('./placeholder')
4
+
5
+ describe('curry4', () => {
6
+ const func = function (a, b, c, d) {
7
+ return [a, b, c, d]
8
+ }
9
+ it('resolves arguments in __ position for arg0', async () => {
10
+ const curried = curry4(func, __, 1, 2, 3)
11
+ assert.deepEqual(curried(4), [4, 1, 2, 3])
12
+ })
13
+ it('resolves arguments in __ position for arg1', async () => {
14
+ const curried = curry4(func, 1, __, 2, 3)
15
+ assert.deepEqual(curried(4), [1, 4, 2, 3])
16
+ })
17
+ it('resolves arguments in __ position for arg2', async () => {
18
+ const curried = curry4(func, 1, 2, __, 3)
19
+ assert.deepEqual(curried(4), [1, 2, 4, 3])
20
+ })
21
+ it('resolves arguments in __ position for arg3', async () => {
22
+ const curried = curry4(func, 1, 2, 3, __)
23
+ assert.deepEqual(curried(4), [1, 2, 3, 4])
24
+ })
25
+ })
@@ -0,0 +1,29 @@
1
+ const assert = require('assert')
2
+ const curry5 = require('./curry5')
3
+ const __ = require('./placeholder')
4
+
5
+ describe('curry5', () => {
6
+ const func = function (a, b, c, d, e) {
7
+ return [a, b, c, d, e]
8
+ }
9
+ it('resolves arguments in __ position for arg0', async () => {
10
+ const curried = curry5(func, __, 1, 2, 3, 4)
11
+ assert.deepEqual(curried(5), [5, 1, 2, 3, 4])
12
+ })
13
+ it('resolves arguments in __ position for arg1', async () => {
14
+ const curried = curry5(func, 1, __, 2, 3, 4)
15
+ assert.deepEqual(curried(5), [1, 5, 2, 3, 4])
16
+ })
17
+ it('resolves arguments in __ position for arg2', async () => {
18
+ const curried = curry5(func, 1, 2, __, 3, 4)
19
+ assert.deepEqual(curried(5), [1, 2, 5, 3, 4])
20
+ })
21
+ it('resolves arguments in __ position for arg3', async () => {
22
+ const curried = curry5(func, 1, 2, 3, __, 4)
23
+ assert.deepEqual(curried(5), [1, 2, 3, 5, 4])
24
+ })
25
+ it('resolves arguments in __ position for arg4', async () => {
26
+ const curried = curry5(func, 1, 2, 3, 4, __)
27
+ assert.deepEqual(curried(5), [1, 2, 3, 4, 5])
28
+ })
29
+ })