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
package/all.js CHANGED
@@ -1,72 +1,138 @@
1
+ const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
2
+ const promiseAll = require('./_internal/promiseAll')
1
3
  const isArray = require('./_internal/isArray')
2
- const arrayAll = require('./_internal/arrayAll')
3
- const iteratorAll = require('./_internal/iteratorAll')
4
- const asyncIteratorAll = require('./_internal/asyncIteratorAll')
5
- const objectValues = require('./_internal/objectValues')
6
- const reducerAll = require('./_internal/reducerAll')
7
- const symbolIterator = require('./_internal/symbolIterator')
8
- const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
4
+ const __ = require('./_internal/placeholder')
5
+ const curry2 = require('./_internal/curry2')
6
+ const curryArgs2 = require('./_internal/curryArgs2')
7
+ const functionArrayAll = require('./_internal/functionArrayAll')
8
+ const functionArrayAllSeries = require('./_internal/functionArrayAllSeries')
9
+ const functionObjectAll = require('./_internal/functionObjectAll')
9
10
 
10
11
  /**
11
12
  * @name all
12
13
  *
13
14
  * @synopsis
14
15
  * ```coffeescript [specscript]
15
- * type Foldable = Iterable|AsyncIterable|Object
16
+ * all(...args, funcsArray Array<function>) -> result Promise|Array
16
17
  *
17
- * all(predicate function)(collection Foldable) -> result Promise|boolean
18
+ * all(funcsArray Array<function>)(...args) -> result Promise|Array
19
+ *
20
+ * all(...args, funcsObject Object<function>) -> result Promise|Object
21
+ *
22
+ * all(funcsObject Object<function>)(...args) -> result Promise|Object
18
23
  * ```
19
24
  *
20
25
  * @description
21
- * Test a predicate concurrently across all items of a collection, returning true if all predications are truthy.
26
+ * Function executor and composer. Accepts either an array of functions or an object of functions as the values. Calls each function of the provided array or object in parallel with the provided arguments. Returns either an array or object of the results of the function executions.
22
27
  *
23
28
  * ```javascript [playground]
24
- * const isOdd = number => number % 2 == 1
29
+ * const createArrayOfGreetingsFor = all([
30
+ * name => `Hi ${name}`,
31
+ * name => `Hey ${name}`,
32
+ * name => `Hello ${name}`,
33
+ * ])
34
+ *
35
+ * const arrayOfGreetingsForFred = createArrayOfGreetingsFor('Fred')
36
+ *
37
+ * console.log(arrayOfGreetingsForFred)
38
+ * // ['Hi Fred', 'Hey Fred', 'Hello Fred']
25
39
  *
26
- * console.log(
27
- * all(isOdd)([1, 2, 3, 4, 5]),
28
- * ) // false
40
+ * const createObjectOfGreetingsFor = all({
41
+ * hi: name => `Hi ${name}`,
42
+ * hey: name => `Hey ${name}`,
43
+ * hello: name => `Hello ${name}`,
44
+ * })
29
45
  *
30
- * console.log(
31
- * all(isOdd)([1, 3, 5]),
32
- * ) // true
46
+ * const objectOfGreetingsForJane = createObjectOfGreetingsFor('Jane')
47
+ *
48
+ * console.log(objectOfGreetingsForJane)
49
+ * // { hi: 'Hi Jane', hey: 'Hey Jane', hello: 'Hello Jane' }
33
50
  * ```
34
51
  *
35
- * The collection can be any iterable, async iterable, or object values iterable collection. Below is an example of `all` accepting an async generator as the collection.
52
+ * `all` can simultaneously compose objects and handle promises.
36
53
  *
37
54
  * ```javascript [playground]
38
- * const asyncNumbers = async function* () {
39
- * yield 1; yield 2; yield 3; yield 4; yield 5
40
- * }
55
+ * const identity = value => value
56
+ *
57
+ * const userbase = new Map()
58
+ * userbase.set('1', { _id: 1, name: 'George' })
59
+ *
60
+ * const getUserByID = async id => userbase.get(id)
61
+ *
62
+ * const getAndLogUserById = pipe([
63
+ * all({
64
+ * id: identity,
65
+ * user: getUserByID,
66
+ * }),
67
+ * tap(({ id, user }) => {
68
+ * console.log(`Got user ${JSON.stringify(user)} by id ${id}`)
69
+ * }),
70
+ * ])
41
71
  *
42
- * all(async number => number < 6)(asyncNumbers()).then(console.log) // true
72
+ * getAndLogUserById('1') // Got user {"_id":1,"name":"George"} by id 1
43
73
  * ```
44
74
  *
45
75
  * @execution concurrent
46
- *
47
- * @muxing
48
76
  */
49
- const all = predicate => function allTruthy(value) {
50
- if (isArray(value)) {
51
- return arrayAll(value, predicate)
52
- }
53
- if (value == null) {
54
- return predicate(value)
55
- }
56
77
 
57
- if (typeof value[symbolIterator] == 'function') {
58
- return iteratorAll(value[symbolIterator](), predicate)
78
+ const all = function (...args) {
79
+ const funcs = args.pop()
80
+ if (args.length == 0) {
81
+ return isArray(funcs)
82
+ ? curryArgs2(functionArrayAll, funcs, __)
83
+ : curryArgs2(functionObjectAll, funcs, __)
59
84
  }
60
- if (typeof value[symbolAsyncIterator] == 'function') {
61
- return asyncIteratorAll(value[symbolAsyncIterator](), predicate, new Set())
85
+
86
+ if (areAnyValuesPromises(args)) {
87
+ return isArray(funcs)
88
+ ? promiseAll(args).then(curry2(functionArrayAll, funcs, __))
89
+ : promiseAll(args).then(curry2(functionObjectAll, funcs, __))
62
90
  }
63
- if (typeof value.reduce == 'function') {
64
- return value.reduce(reducerAll(predicate), true)
91
+
92
+ return isArray(funcs)
93
+ ? functionArrayAll(funcs, args)
94
+ : functionObjectAll(funcs, args)
95
+ }
96
+
97
+ /**
98
+ * @name all.series
99
+ *
100
+ * @synopsis
101
+ * ```coffeescript [specscript]
102
+ * all.series(...args, funcsArray Array<function>) -> result Promise|Array
103
+ *
104
+ * all.series(funcsArray Array<function>)(...args) -> result Promise|Array
105
+ * ```
106
+ *
107
+ * @description
108
+ * `all` with serial execution.
109
+ *
110
+ * ```javascript [playground]
111
+ * const sleep = ms => () => new Promise(resolve => setTimeout(resolve, ms))
112
+ *
113
+ * all.series([
114
+ * greeting => console.log(greeting + ' world'),
115
+ * sleep(1000),
116
+ * greeting => console.log(greeting + ' mom'),
117
+ * sleep(1000),
118
+ * greeting => console.log(greeting + ' goodbye'),
119
+ * ])('hello') // hello world
120
+ * // hello mom
121
+ * // hello goodbye
122
+ * ```
123
+ *
124
+ * @execution series
125
+ */
126
+
127
+ all.series = function allSeries(...args) {
128
+ const funcs = args.pop()
129
+ if (args.length == 0) {
130
+ return curryArgs2(functionArrayAllSeries, funcs, __)
65
131
  }
66
- if (value.constructor == Object) {
67
- return arrayAll(objectValues(value), predicate)
132
+ if (areAnyValuesPromises(args)) {
133
+ return promiseAll(args).then(curry2(functionArrayAllSeries, funcs, __))
68
134
  }
69
- return predicate(value)
135
+ return functionArrayAllSeries(funcs, args)
70
136
  }
71
137
 
72
138
  module.exports = all
package/and.js CHANGED
@@ -1,6 +1,10 @@
1
+ const promiseAll = require('./_internal/promiseAll')
1
2
  const isPromise = require('./_internal/isPromise')
2
- const curry3 = require('./_internal/curry3')
3
+ const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
3
4
  const __ = require('./_internal/placeholder')
5
+ const curry2 = require('./_internal/curry2')
6
+ const curry3 = require('./_internal/curry3')
7
+ const curryArgs2 = require('./_internal/curryArgs2')
4
8
  const thunkConditional = require('./_internal/thunkConditional')
5
9
  const areAllValuesNonfunctions = require('./_internal/areAllValuesNonfunctions')
6
10
  const thunkify2 = require('./_internal/thunkify2')
@@ -8,22 +12,22 @@ const thunkify3 = require('./_internal/thunkify3')
8
12
  const always = require('./_internal/always')
9
13
 
10
14
  /**
11
- * @name areAllNonfunctionsTruthy
15
+ * @name areAllValuesTruthy
12
16
  *
13
17
  * @synopsis
14
18
  * ```coffeescript [specscript]
15
- * areAllNonfunctionsTruthy(predicates Array<value>) -> Promise|boolean
19
+ * areAllValuesTruthy(predicates Array<value>) -> Promise|boolean
16
20
  * ```
17
21
  */
18
- const areAllNonfunctionsTruthy = function (predicates, index) {
22
+ const areAllValuesTruthy = function (predicates, index) {
19
23
  const length = predicates.length
20
24
  while (++index < length) {
21
- let predicate = predicates[index]
25
+ const predicate = predicates[index]
22
26
  if (isPromise(predicate)) {
23
27
  return predicate.then(curry3(
24
28
  thunkConditional,
25
29
  __,
26
- thunkify2(areAllNonfunctionsTruthy, predicates, index),
30
+ thunkify2(areAllValuesTruthy, predicates, index),
27
31
  always(false),
28
32
  ))
29
33
  }
@@ -41,17 +45,17 @@ const areAllNonfunctionsTruthy = function (predicates, index) {
41
45
  * ```coffeescript [specscript]
42
46
  * asyncArePredicatesAllTruthy(
43
47
  * predicates Array<value=>Promise|boolean>
44
- * point any,
48
+ * args Array,
45
49
  * index number,
46
50
  * ) -> allTruthy boolean
47
51
  * ```
48
52
  */
49
- const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
53
+ const asyncArePredicatesAllTruthy = async function (args, predicates, index) {
50
54
  const length = predicates.length
51
55
  while (++index < length) {
52
56
  let predicate = predicates[index]
53
57
  if (typeof predicate == 'function') {
54
- predicate = predicate(point)
58
+ predicate = predicate(...args)
55
59
  }
56
60
  if (isPromise(predicate)) {
57
61
  predicate = await predicate
@@ -63,6 +67,31 @@ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
63
67
  return true
64
68
  }
65
69
 
70
+ // areAllPredicatesTruthy(args Array, predicates Array<function>) -> Promise|boolean
71
+ const areAllPredicatesTruthy = function (args, predicates) {
72
+ const length = predicates.length
73
+ let index = -1
74
+
75
+ while (++index < length) {
76
+ let predicate = predicates[index]
77
+ if (typeof predicate == 'function') {
78
+ predicate = predicate(...args)
79
+ }
80
+ if (isPromise(predicate)) {
81
+ return predicate.then(curry3(
82
+ thunkConditional,
83
+ __,
84
+ thunkify3(asyncArePredicatesAllTruthy, args, predicates, index),
85
+ always(false),
86
+ ))
87
+ }
88
+ if (!predicate) {
89
+ return false
90
+ }
91
+ }
92
+ return true
93
+ }
94
+
66
95
  /**
67
96
  * @name and
68
97
  *
@@ -70,9 +99,9 @@ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
70
99
  * ```coffeescript [specscript]
71
100
  * and(values Array<boolean>) -> result boolean
72
101
  *
73
- * and(
74
- * predicatesOrValues Array<function|boolean>
75
- * )(value any) -> result Promise|boolean
102
+ * and(...args, predicatesOrValues Array<function|boolean>) -> Promise|boolean
103
+ *
104
+ * and(predicatesOrValues Array<function|boolean>)(...args) -> Promise|boolean
76
105
  * ```
77
106
  *
78
107
  * @description
@@ -106,33 +135,22 @@ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
106
135
  *
107
136
  * @note ...args slows down here by an order of magnitude
108
137
  */
109
- const and = predicates => {
110
- if (areAllValuesNonfunctions(predicates)) {
111
- return areAllNonfunctionsTruthy(predicates, -1)
138
+ const and = function (...args) {
139
+ const predicatesOrValues = args.pop()
140
+ if (areAllValuesNonfunctions(predicatesOrValues)) {
141
+ return areAllValuesTruthy(predicatesOrValues, -1)
112
142
  }
113
- return function arePredicatesAllTruthy(point) {
114
- const length = predicates.length
115
- let index = -1
116
143
 
117
- while (++index < length) {
118
- let predicate = predicates[index]
119
- if (typeof predicate == 'function') {
120
- predicate = predicate(point)
121
- }
122
- if (isPromise(predicate)) {
123
- return predicate.then(curry3(
124
- thunkConditional,
125
- __,
126
- thunkify3(asyncArePredicatesAllTruthy, predicates, point, index),
127
- always(false),
128
- ))
129
- }
130
- if (!predicate) {
131
- return false
132
- }
133
- }
134
- return true
144
+ if (args.length == 0) {
145
+ return curryArgs2(areAllPredicatesTruthy, __, predicatesOrValues)
135
146
  }
147
+
148
+ if (areAnyValuesPromises(args)) {
149
+ return promiseAll(args)
150
+ .then(curry2(areAllPredicatesTruthy, __, predicatesOrValues))
151
+ }
152
+
153
+ return areAllPredicatesTruthy(args, predicatesOrValues)
136
154
  }
137
155
 
138
156
  module.exports = and
@@ -21,7 +21,7 @@ const FlatMappingIterator = function (iterator, flatMapper) {
21
21
  const buffer = [], promises = [],
22
22
  bufferPush = curry3(callPropUnary, buffer, 'push', __),
23
23
  bufferPushReducer = funcConcatSync(getArg1, bufferPush),
24
- flattenIntoBuffer = curryArgs3(genericReduce, __, bufferPushReducer, null),
24
+ flattenIntoBuffer = curry3(genericReduce, __, bufferPushReducer, null),
25
25
  loadIntoBuffer = funcConcatSync(flattenIntoBuffer, tapSync(bufferLoading => {
26
26
  if (isPromise(bufferLoading)) {
27
27
  const promise = bufferLoading.then(() => promises.delete(promise))
@@ -0,0 +1,93 @@
1
+ const isPromise = require('./isPromise')
2
+
3
+ /**
4
+ * @name _Promise
5
+ *
6
+ * @synopsis
7
+ * ```coffeescript [specscript]
8
+ * new _Promise() -> _Promise
9
+ * ```
10
+ *
11
+ * @description
12
+ * Internal _Promise. Does not conform to spec.
13
+ */
14
+ const _Promise = function () {
15
+ this.onFulfilledCallbacks = []
16
+ this.onRejectedCallbacks = []
17
+ this.value = null
18
+ this.error = null
19
+ this.status = 'pending'
20
+ }
21
+
22
+ _Promise.prototype._fulfill = function (value) {
23
+ if (this.status == 'pending') {
24
+ this.status = 'fulfilled'
25
+ this.value = value
26
+ this.onFulfilledCallbacks.forEach(cb => cb(value)) // TODO optimize
27
+ }
28
+ }
29
+
30
+ _Promise.prototype._reject = function (error) {
31
+ if (this.status == 'pending') {
32
+ this.status = 'rejected'
33
+ this.error = error
34
+ this.onRejectedCallbacks.forEach(cb => cb(error)) // TODO optimize
35
+ }
36
+ }
37
+
38
+ _Promise.prototype.then = function (onFulfilled, onRejected) {
39
+ return new Promise((resolve, reject) => {
40
+ if (this.status == 'pending') {
41
+ this.onFulfilledCallbacks.push(() => {
42
+ try {
43
+ const ret = onFulfilled(this.value)
44
+ if (isPromise(ret)) {
45
+ ret.then(resolve, reject)
46
+ } else {
47
+ resolve(ret)
48
+ }
49
+ } catch (error) {
50
+ reject(error)
51
+ }
52
+ })
53
+ this.onRejectedCallbacks.push(() => {
54
+ try {
55
+ const ret = onRejected(this.error)
56
+ if (isPromise(ret)) {
57
+ ret.then(resolve, reject)
58
+ } else {
59
+ reject(ret)
60
+ }
61
+ } catch (error) {
62
+ reject(error)
63
+ }
64
+ })
65
+ }
66
+ else if (this.status == 'fulfilled') {
67
+ try {
68
+ const ret = onFulfilled(this.value)
69
+ if (isPromise(ret)) {
70
+ ret.then(resolve, reject)
71
+ } else {
72
+ resolve(ret)
73
+ }
74
+ } catch (error) {
75
+ reject(error)
76
+ }
77
+ }
78
+ else {
79
+ try {
80
+ const ret = onRejected(this.error)
81
+ if (isPromise(ret)) {
82
+ ret.then(resolve, reject)
83
+ } else {
84
+ reject(ret)
85
+ }
86
+ } catch (error) {
87
+ reject(error)
88
+ }
89
+ }
90
+ })
91
+ }
92
+
93
+ module.exports = _Promise
@@ -0,0 +1,73 @@
1
+ const funcCall = require('./funcCall')
2
+ const thunkify4 = require('./thunkify4')
3
+ const __ = require('./placeholder')
4
+ const curry2 = require('./curry2')
5
+ const curry3 = require('./curry3')
6
+ const curry4 = require('./curry4')
7
+ const isPromise = require('./isPromise')
8
+ const promiseAll = require('./promiseAll')
9
+ const _Promise = require('./_Promise')
10
+
11
+ /**
12
+ * @name arrayMap
13
+ *
14
+ * @synopsis
15
+ * ```coffeescript [specscript]
16
+ * arrayMap(
17
+ * array Array,
18
+ * mapper (item any, index number, array Array)=>Promise|any,
19
+ * ) -> Promise|Array
20
+ * ```
21
+ *
22
+ * @description
23
+ * Apply a mapper to each item of an array, returning an array. Mapper may be asynchronous.
24
+ */
25
+
26
+ const arrayMapHandlePromise = function (
27
+ result, promise, index, promiseCounts, _promise
28
+ ) {
29
+ promiseCounts.pending += 1
30
+ promise.then(value => {
31
+ result[index] = value
32
+ promiseCounts.resolved += 1
33
+ if (promiseCounts.resolved == promiseCounts.pending) {
34
+ _promise._fulfill(result)
35
+ }
36
+ }, error => {
37
+ _promise.reject(error)
38
+ })
39
+ }
40
+
41
+ const arrayMap2 = function (array, mapper) {
42
+ const length = array.length
43
+ const result = Array(length)
44
+ const promiseCounts = { pending: 0, resolved: 0 }
45
+
46
+ let index = -1
47
+ let _promise = new _Promise()
48
+
49
+ while (++index < length) {
50
+ const ret = mapper(array[index], index, array)
51
+ if (isPromise(ret)) {
52
+ arrayMapHandlePromise(result, ret, index, promiseCounts, _promise)
53
+ } else {
54
+ result[index] = ret
55
+ }
56
+ }
57
+
58
+ if (promiseCounts.pending == 0) {
59
+ return result
60
+ }
61
+
62
+ return _promise
63
+ }
64
+
65
+ if (process.argv[1] == __filename) {
66
+ const timeInLoopAsync = require('./timeInLoopAsync')
67
+
68
+ timeInLoopAsync('arrayMap2', 1e6, async () => {
69
+ await arrayMap2([1, 2, 3, 4, 5], async value => value + 1)
70
+ })
71
+ }
72
+
73
+ module.exports = arrayMap2
@@ -0,0 +1,34 @@
1
+ const timeInLoop = require('../x/timeInLoop')
2
+ const rubico = require('..')
3
+ const _ = require('lodash')
4
+ const R = require('ramda')
5
+
6
+ const isOdd = number => number % 2 == 1
7
+
8
+ const isEven = number => number % 2 == 0
9
+
10
+ /**
11
+ * @name allRace
12
+ *
13
+ * @benchmark
14
+ * _.every: 1e+6: 20.984ms
15
+ * R.all: 1e+6: 368.142ms
16
+ * rubico.all: 1e+6: 24.772ms
17
+ *
18
+ * @remarks
19
+ * promise check
20
+ */
21
+
22
+ {
23
+ const evenNumbers = [2, 4, 6, 8, 10]
24
+
25
+ // console.log(_.every(evenNumbers, isEven))
26
+ // console.log(R.all(isEven)(evenNumbers))
27
+ // console.log(rubico.all(isEven)(evenNumbers))
28
+
29
+ // timeInLoop('_.every', 1e6, () => _.every(evenNumbers, isEven))
30
+
31
+ // timeInLoop('R.all', 1e6, () => R.all(isEven)(evenNumbers))
32
+
33
+ // timeInLoop('rubico.all', 1e6, () => rubico.all(isEven)(evenNumbers))
34
+ }
@@ -0,0 +1,24 @@
1
+ const timeInLoop = require('../x/timeInLoop')
2
+ const rubico = require('..')
3
+
4
+ const { and } = rubico
5
+
6
+ const isOdd = x => x % 2 == 1
7
+
8
+ const threeOddChecks = number => isOdd(number) && isOdd(number) && isOdd(number)
9
+
10
+ const threeIsOdd = and([isOdd, isOdd, isOdd])
11
+
12
+ /**
13
+ * @name or
14
+ *
15
+ * @benchmark
16
+ * isOdd(value) && isOdd(value) && isOdd(value): 1e+6: 6.664ms
17
+ * and([isOdd, isOdd, isOdd]): 1e+6: 16.842ms
18
+ */
19
+
20
+ {
21
+ // timeInLoop('isOdd(value) && isOdd(value) && isOdd(value)', 1e6, () => threeOddChecks(1))
22
+
23
+ // timeInLoop('and([isOdd, isOdd, isOdd])', 1e6, () => threeIsOdd(1))
24
+ }