rubico 1.9.6 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc.js +3 -2
  3. package/.github/workflows/nodejs.yml +1 -1
  4. package/AggregateReducer.js +19 -0
  5. package/AggregateReducer.test.js +82 -0
  6. package/CHANGELOG.md +22 -1
  7. package/Transducer.js +162 -0
  8. package/Transducer.test.js +117 -0
  9. package/_internal/ComparisonOperator.js +68 -0
  10. package/_internal/File.js +41 -0
  11. package/_internal/FlatMappingAsyncIterator.js +4 -4
  12. package/_internal/FlatMappingIterator.js +1 -1
  13. package/_internal/TimeInLoopSuite.js +138 -0
  14. package/_internal/areAnyValuesPromises.js +23 -0
  15. package/_internal/{arrayAll.js → arrayEvery.js} +4 -4
  16. package/_internal/arrayExtend.js +3 -2
  17. package/_internal/arrayFilter.js +3 -4
  18. package/_internal/{arrayAny.js → arraySome.js} +8 -8
  19. package/_internal/{asyncIteratorAll.js → asyncIteratorEvery.js} +4 -4
  20. package/_internal/{asyncIteratorAny.js → asyncIteratorSome.js} +4 -4
  21. package/_internal/curry4.test.js +25 -0
  22. package/_internal/curry5.test.js +29 -0
  23. package/_internal/curryArgs2.js +43 -0
  24. package/_internal/curryArgs3.test.js +21 -0
  25. package/_internal/curryArgs4.js +65 -0
  26. package/_internal/curryArgs4.test.js +25 -0
  27. package/_internal/equals.js +13 -0
  28. package/_internal/findAllFilePaths.js +22 -0
  29. package/_internal/funcApply.js +2 -0
  30. package/_internal/funcCall.js +14 -0
  31. package/_internal/functionArrayAll.js +26 -0
  32. package/_internal/functionArrayAllSeries.js +55 -0
  33. package/_internal/functionObjectAll.js +32 -0
  34. package/_internal/genericReduce.js +4 -22
  35. package/_internal/genericTransform.js +15 -15
  36. package/_internal/improvedGenericTransform.js +93 -0
  37. package/_internal/{iteratorAll.js → iteratorEvery.js} +4 -4
  38. package/_internal/{iteratorAny.js → iteratorSome.js} +6 -6
  39. package/_internal/leftResolverRightResolverCompare.js +19 -0
  40. package/_internal/leftResolverRightValueCompare.js +16 -0
  41. package/_internal/leftValueRightResolverCompare.js +16 -0
  42. package/_internal/objectReduce.js +0 -1
  43. package/_internal/pathResolve.js +6 -0
  44. package/_internal/{reducerAll.js → reducerEvery.js} +4 -4
  45. package/_internal/reducerFlatMap.js +4 -4
  46. package/_internal/reducerFlatten.js +1 -1
  47. package/_internal/{reducerAny.js → reducerSome.js} +4 -4
  48. package/_internal/timeInLoop.js +37 -0
  49. package/_internal/timeInLoop.test.js +18 -0
  50. package/_internal/timeInLoopAsync.js +35 -0
  51. package/_internal/timeInLoopAsync.test.js +22 -0
  52. package/all.js +105 -45
  53. package/always.js +3 -9
  54. package/and.js +69 -45
  55. package/archive/{FlatMappingIteratorCool.js → FlatMappingIterator-2020-09-28.js} +1 -1
  56. package/archive/_Promise-2023-05-29.js +93 -0
  57. package/archive/arrayMap2-2023-05-29.js +73 -0
  58. package/archive/benchmarks-v1.9.7/all.js +34 -0
  59. package/archive/benchmarks-v1.9.7/and.js +24 -0
  60. package/archive/benchmarks-v1.9.7/assign.js +174 -0
  61. package/archive/benchmarks-v1.9.7/curry.js +55 -0
  62. package/archive/benchmarks-v1.9.7/eq.js +25 -0
  63. package/archive/benchmarks-v1.9.7/filter.js +1322 -0
  64. package/archive/benchmarks-v1.9.7/flatMap.js +48 -0
  65. package/archive/benchmarks-v1.9.7/get.js +44 -0
  66. package/archive/benchmarks-v1.9.7/gt.js +25 -0
  67. package/archive/benchmarks-v1.9.7/gte.js +25 -0
  68. package/archive/benchmarks-v1.9.7/lt.js +25 -0
  69. package/archive/benchmarks-v1.9.7/lte.js +25 -0
  70. package/archive/benchmarks-v1.9.7/map.js +892 -0
  71. package/archive/benchmarks-v1.9.7/omit.js +28 -0
  72. package/archive/benchmarks-v1.9.7/or.js +51 -0
  73. package/archive/benchmarks-v1.9.7/pick.js +24 -0
  74. package/archive/benchmarks-v1.9.7/pipe.js +152 -0
  75. package/archive/benchmarks-v1.9.7/reduce.js +739 -0
  76. package/archive/benchmarks-v1.9.7/switchCase.js +256 -0
  77. package/archive/benchmarks-v1.9.7/tap.js +90 -0
  78. package/archive/benchmarks-v1.9.7/transform.js +218 -0
  79. package/archive/benchmarks-v1.9.7/tryCatch.js +108 -0
  80. package/assign.js +45 -22
  81. package/bench +65 -0
  82. package/benchmark-output/v1.9.7 +268 -0
  83. package/benchmarks/all.async.js +43 -0
  84. package/benchmarks/all.js +42 -33
  85. package/benchmarks/always.js +15 -0
  86. package/benchmarks/and.async.js +25 -0
  87. package/benchmarks/and.js +20 -19
  88. package/benchmarks/assign.async.js +27 -0
  89. package/benchmarks/assign.js +20 -167
  90. package/benchmarks/curry.js +34 -54
  91. package/benchmarks/eq.async.js +23 -0
  92. package/benchmarks/eq.js +17 -19
  93. package/benchmarks/every.async.js +19 -0
  94. package/benchmarks/every.js +19 -0
  95. package/benchmarks/filter.async.js +32 -0
  96. package/benchmarks/filter.js +27 -1311
  97. package/benchmarks/flatMap.async.js +26 -0
  98. package/benchmarks/flatMap.js +26 -36
  99. package/benchmarks/get.async.js +19 -0
  100. package/benchmarks/get.js +27 -32
  101. package/benchmarks/gt.async.js +23 -0
  102. package/benchmarks/gt.js +17 -19
  103. package/benchmarks/gte.async.js +23 -0
  104. package/benchmarks/gte.js +17 -19
  105. package/benchmarks/lt.async.js +23 -0
  106. package/benchmarks/lt.js +17 -19
  107. package/benchmarks/lte.async.js +23 -0
  108. package/benchmarks/lte.js +17 -19
  109. package/benchmarks/map.async.js +43 -0
  110. package/benchmarks/map.js +24 -876
  111. package/benchmarks/misc/Promise.js +26 -0
  112. package/benchmarks/misc/isPromise.js +30 -0
  113. package/benchmarks/misc/promiseAll.js +36 -0
  114. package/benchmarks/not.js +23 -0
  115. package/benchmarks/omit.js +30 -20
  116. package/benchmarks/or.async.js +25 -0
  117. package/benchmarks/or.js +23 -49
  118. package/benchmarks/pick.js +30 -16
  119. package/benchmarks/pipe.async.js +47 -0
  120. package/benchmarks/pipe.js +46 -151
  121. package/benchmarks/reduce.async.js +32 -0
  122. package/benchmarks/reduce.js +27 -728
  123. package/benchmarks/set.async.js +19 -0
  124. package/benchmarks/set.js +41 -0
  125. package/benchmarks/some.async.js +19 -0
  126. package/benchmarks/some.js +19 -0
  127. package/benchmarks/switchCase.async.js +27 -0
  128. package/benchmarks/switchCase.js +55 -256
  129. package/benchmarks/tap.js +10 -85
  130. package/benchmarks/thunkify.js +15 -0
  131. package/benchmarks/transform.async.js +27 -0
  132. package/benchmarks/transform.js +28 -206
  133. package/benchmarks/tryCatch.async.js +25 -0
  134. package/benchmarks/tryCatch.js +24 -100
  135. package/{distributor.js → build} +50 -50
  136. package/compose.js +46 -0
  137. package/curry.js +20 -12
  138. package/dist/__.es.js +2 -2
  139. package/dist/__.es.min.js +2 -2
  140. package/dist/__.js +2 -2
  141. package/dist/__.min.js +2 -2
  142. package/dist/__.min.mjs +2 -2
  143. package/dist/__.mjs +2 -2
  144. package/dist/all.es.js +173 -92
  145. package/dist/all.es.min.js +3 -3
  146. package/dist/all.js +173 -92
  147. package/dist/all.min.js +3 -3
  148. package/dist/all.min.mjs +3 -3
  149. package/dist/all.mjs +173 -92
  150. package/dist/always.es.js +2 -2
  151. package/dist/always.es.min.js +2 -2
  152. package/dist/always.js +2 -2
  153. package/dist/always.min.js +2 -2
  154. package/dist/always.min.mjs +2 -2
  155. package/dist/always.mjs +2 -2
  156. package/dist/and.es.js +101 -32
  157. package/dist/and.es.min.js +3 -3
  158. package/dist/and.js +101 -32
  159. package/dist/and.min.js +3 -3
  160. package/dist/and.min.mjs +3 -3
  161. package/dist/and.mjs +101 -32
  162. package/dist/assign.es.js +37 -10
  163. package/dist/assign.es.min.js +3 -3
  164. package/dist/assign.js +37 -10
  165. package/dist/assign.min.js +3 -3
  166. package/dist/assign.min.mjs +3 -3
  167. package/dist/assign.mjs +37 -10
  168. package/dist/compose.es.js +71 -0
  169. package/dist/compose.es.min.js +7 -0
  170. package/dist/compose.js +78 -0
  171. package/dist/compose.min.js +8 -0
  172. package/dist/compose.min.mjs +7 -0
  173. package/dist/compose.mjs +71 -0
  174. package/dist/curry.es.js +2 -2
  175. package/dist/curry.es.min.js +2 -2
  176. package/dist/curry.js +2 -2
  177. package/dist/curry.min.js +2 -2
  178. package/dist/curry.min.mjs +2 -2
  179. package/dist/curry.mjs +2 -2
  180. package/dist/eq.es.js +172 -49
  181. package/dist/eq.es.min.js +3 -3
  182. package/dist/eq.js +172 -49
  183. package/dist/eq.min.js +3 -3
  184. package/dist/eq.min.mjs +3 -3
  185. package/dist/eq.mjs +172 -49
  186. package/dist/every.es.js +194 -0
  187. package/dist/every.es.min.js +7 -0
  188. package/dist/every.js +201 -0
  189. package/dist/every.min.js +8 -0
  190. package/dist/every.min.mjs +7 -0
  191. package/dist/every.mjs +194 -0
  192. package/dist/filter.es.js +14 -108
  193. package/dist/filter.es.min.js +3 -3
  194. package/dist/filter.js +14 -108
  195. package/dist/filter.min.js +3 -3
  196. package/dist/filter.min.mjs +3 -3
  197. package/dist/filter.mjs +14 -108
  198. package/dist/flatMap.es.js +27 -214
  199. package/dist/flatMap.es.min.js +3 -3
  200. package/dist/flatMap.js +27 -214
  201. package/dist/flatMap.min.js +3 -3
  202. package/dist/flatMap.min.mjs +3 -3
  203. package/dist/flatMap.mjs +27 -214
  204. package/dist/{x/forEach.es.js → forEach.es.js} +52 -70
  205. package/dist/forEach.es.min.js +7 -0
  206. package/dist/{x/forEach.js → forEach.js} +52 -70
  207. package/dist/forEach.min.js +8 -0
  208. package/dist/forEach.min.mjs +7 -0
  209. package/dist/{x/forEach.mjs → forEach.mjs} +52 -70
  210. package/dist/get.es.js +60 -5
  211. package/dist/get.es.min.js +3 -3
  212. package/dist/get.js +60 -5
  213. package/dist/get.min.js +3 -3
  214. package/dist/get.min.mjs +3 -3
  215. package/dist/get.mjs +60 -5
  216. package/dist/gt.es.js +171 -48
  217. package/dist/gt.es.min.js +3 -3
  218. package/dist/gt.js +171 -48
  219. package/dist/gt.min.js +3 -3
  220. package/dist/gt.min.mjs +3 -3
  221. package/dist/gt.mjs +171 -48
  222. package/dist/gte.es.js +171 -48
  223. package/dist/gte.es.min.js +3 -3
  224. package/dist/gte.js +171 -48
  225. package/dist/gte.min.js +3 -3
  226. package/dist/gte.min.mjs +3 -3
  227. package/dist/gte.mjs +171 -48
  228. package/dist/lt.es.js +171 -48
  229. package/dist/lt.es.min.js +3 -3
  230. package/dist/lt.js +171 -48
  231. package/dist/lt.min.js +3 -3
  232. package/dist/lt.min.mjs +3 -3
  233. package/dist/lt.mjs +171 -48
  234. package/dist/lte.es.js +171 -48
  235. package/dist/lte.es.min.js +3 -3
  236. package/dist/lte.js +171 -48
  237. package/dist/lte.min.js +3 -3
  238. package/dist/lte.min.mjs +3 -3
  239. package/dist/lte.mjs +171 -48
  240. package/dist/map.es.js +12 -101
  241. package/dist/map.es.min.js +3 -3
  242. package/dist/map.js +12 -101
  243. package/dist/map.min.js +3 -3
  244. package/dist/map.min.mjs +3 -3
  245. package/dist/map.mjs +12 -101
  246. package/dist/not.es.js +75 -14
  247. package/dist/not.es.min.js +3 -3
  248. package/dist/not.js +75 -14
  249. package/dist/not.min.js +3 -3
  250. package/dist/not.min.mjs +3 -3
  251. package/dist/not.mjs +75 -14
  252. package/dist/omit.es.js +38 -3
  253. package/dist/omit.es.min.js +3 -3
  254. package/dist/omit.js +38 -3
  255. package/dist/omit.min.js +3 -3
  256. package/dist/omit.min.mjs +3 -3
  257. package/dist/omit.mjs +38 -3
  258. package/dist/or.es.js +99 -31
  259. package/dist/or.es.min.js +3 -3
  260. package/dist/or.js +99 -31
  261. package/dist/or.min.js +3 -3
  262. package/dist/or.min.mjs +3 -3
  263. package/dist/or.mjs +99 -31
  264. package/dist/pick.es.js +38 -3
  265. package/dist/pick.es.min.js +3 -3
  266. package/dist/pick.js +38 -3
  267. package/dist/pick.min.js +3 -3
  268. package/dist/pick.min.mjs +3 -3
  269. package/dist/pick.mjs +38 -3
  270. package/dist/pipe.es.js +42 -46
  271. package/dist/pipe.es.min.js +3 -3
  272. package/dist/pipe.js +42 -46
  273. package/dist/pipe.min.js +3 -3
  274. package/dist/pipe.min.mjs +3 -3
  275. package/dist/pipe.mjs +42 -46
  276. package/dist/reduce.es.js +52 -94
  277. package/dist/reduce.es.min.js +3 -3
  278. package/dist/reduce.js +52 -94
  279. package/dist/reduce.min.js +3 -3
  280. package/dist/reduce.min.mjs +3 -3
  281. package/dist/reduce.mjs +52 -94
  282. package/dist/rubico.es.js +746 -869
  283. package/dist/rubico.es.min.js +3 -3
  284. package/dist/rubico.js +746 -869
  285. package/dist/rubico.min.js +3 -3
  286. package/dist/rubico.min.mjs +3 -3
  287. package/dist/rubico.mjs +746 -869
  288. package/dist/set.es.js +18 -3
  289. package/dist/set.es.min.js +3 -3
  290. package/dist/set.js +18 -3
  291. package/dist/set.min.js +3 -3
  292. package/dist/set.min.mjs +3 -3
  293. package/dist/set.mjs +18 -3
  294. package/dist/{any.js → some.es.js} +64 -54
  295. package/dist/some.es.min.js +7 -0
  296. package/dist/{any.mjs → some.js} +72 -48
  297. package/dist/some.min.js +8 -0
  298. package/dist/some.min.mjs +7 -0
  299. package/dist/{any.es.js → some.mjs} +65 -48
  300. package/dist/switchCase.es.js +55 -5
  301. package/dist/switchCase.es.min.js +3 -3
  302. package/dist/switchCase.js +55 -5
  303. package/dist/switchCase.min.js +3 -3
  304. package/dist/switchCase.min.mjs +3 -3
  305. package/dist/switchCase.mjs +55 -5
  306. package/dist/tap.es.js +2 -9
  307. package/dist/tap.es.min.js +3 -3
  308. package/dist/tap.js +2 -9
  309. package/dist/tap.min.js +3 -3
  310. package/dist/tap.min.mjs +3 -3
  311. package/dist/tap.mjs +2 -9
  312. package/dist/thunkify.es.js +45 -2
  313. package/dist/thunkify.es.min.js +3 -3
  314. package/dist/thunkify.js +45 -2
  315. package/dist/thunkify.min.js +3 -3
  316. package/dist/thunkify.min.mjs +3 -3
  317. package/dist/thunkify.mjs +45 -2
  318. package/dist/transform.es.js +35 -71
  319. package/dist/transform.es.min.js +3 -3
  320. package/dist/transform.js +35 -71
  321. package/dist/transform.min.js +3 -3
  322. package/dist/transform.min.mjs +3 -3
  323. package/dist/transform.mjs +35 -71
  324. package/dist/tryCatch.es.js +33 -17
  325. package/dist/tryCatch.es.min.js +3 -3
  326. package/dist/tryCatch.js +33 -17
  327. package/dist/tryCatch.min.js +3 -3
  328. package/dist/tryCatch.min.mjs +3 -3
  329. package/dist/tryCatch.mjs +33 -17
  330. package/dist/x/append.es.js +2 -2
  331. package/dist/x/append.es.min.js +2 -2
  332. package/dist/x/append.js +2 -2
  333. package/dist/x/append.min.js +2 -2
  334. package/dist/x/append.min.mjs +2 -2
  335. package/dist/x/append.mjs +2 -2
  336. package/dist/x/callProp.es.js +2 -2
  337. package/dist/x/callProp.es.min.js +2 -2
  338. package/dist/x/callProp.js +2 -2
  339. package/dist/x/callProp.min.js +2 -2
  340. package/dist/x/callProp.min.mjs +2 -2
  341. package/dist/x/callProp.mjs +2 -2
  342. package/dist/x/defaultsDeep.es.js +2 -2
  343. package/dist/x/defaultsDeep.es.min.js +2 -2
  344. package/dist/x/defaultsDeep.js +2 -2
  345. package/dist/x/defaultsDeep.min.js +2 -2
  346. package/dist/x/defaultsDeep.min.mjs +2 -2
  347. package/dist/x/defaultsDeep.mjs +2 -2
  348. package/dist/x/differenceWith.es.js +7 -7
  349. package/dist/x/differenceWith.es.min.js +3 -3
  350. package/dist/x/differenceWith.js +7 -7
  351. package/dist/x/differenceWith.min.js +2 -2
  352. package/dist/x/differenceWith.min.mjs +3 -3
  353. package/dist/x/differenceWith.mjs +7 -7
  354. package/dist/x/filterOut.es.js +60 -117
  355. package/dist/x/filterOut.es.min.js +3 -3
  356. package/dist/x/filterOut.js +60 -117
  357. package/dist/x/filterOut.min.js +3 -3
  358. package/dist/x/filterOut.min.mjs +3 -3
  359. package/dist/x/filterOut.mjs +60 -117
  360. package/dist/x/find.es.js +2 -2
  361. package/dist/x/find.es.min.js +2 -2
  362. package/dist/x/find.js +2 -2
  363. package/dist/x/find.min.js +2 -2
  364. package/dist/x/find.min.mjs +2 -2
  365. package/dist/x/find.mjs +2 -2
  366. package/dist/x/findIndex.es.js +2 -2
  367. package/dist/x/findIndex.es.min.js +2 -2
  368. package/dist/x/findIndex.js +2 -2
  369. package/dist/x/findIndex.min.js +2 -2
  370. package/dist/x/findIndex.min.mjs +2 -2
  371. package/dist/x/findIndex.mjs +2 -2
  372. package/dist/x/first.es.js +2 -2
  373. package/dist/x/first.es.min.js +2 -2
  374. package/dist/x/first.js +2 -2
  375. package/dist/x/first.min.js +2 -2
  376. package/dist/x/first.min.mjs +2 -2
  377. package/dist/x/first.mjs +2 -2
  378. package/dist/x/flatten.es.js +20 -207
  379. package/dist/x/flatten.es.min.js +3 -3
  380. package/dist/x/flatten.js +20 -207
  381. package/dist/x/flatten.min.js +3 -3
  382. package/dist/x/flatten.min.mjs +3 -3
  383. package/dist/x/flatten.mjs +20 -207
  384. package/dist/x/groupBy.es.js +52 -94
  385. package/dist/x/groupBy.es.min.js +3 -3
  386. package/dist/x/groupBy.js +52 -94
  387. package/dist/x/groupBy.min.js +3 -3
  388. package/dist/x/groupBy.min.mjs +3 -3
  389. package/dist/x/groupBy.mjs +52 -94
  390. package/dist/x/has.es.js +2 -2
  391. package/dist/x/has.es.min.js +2 -2
  392. package/dist/x/has.js +2 -2
  393. package/dist/x/has.min.js +2 -2
  394. package/dist/x/has.min.mjs +2 -2
  395. package/dist/x/has.mjs +2 -2
  396. package/dist/x/identity.es.js +2 -2
  397. package/dist/x/identity.es.min.js +2 -2
  398. package/dist/x/identity.js +2 -2
  399. package/dist/x/identity.min.js +2 -2
  400. package/dist/x/identity.min.mjs +2 -2
  401. package/dist/x/identity.mjs +2 -2
  402. package/dist/x/includes.es.js +2 -2
  403. package/dist/x/includes.es.min.js +2 -2
  404. package/dist/x/includes.js +2 -2
  405. package/dist/x/includes.min.js +2 -2
  406. package/dist/x/includes.min.mjs +2 -2
  407. package/dist/x/includes.mjs +2 -2
  408. package/dist/x/isDeepEqual.es.js +2 -2
  409. package/dist/x/isDeepEqual.es.min.js +2 -2
  410. package/dist/x/isDeepEqual.js +2 -2
  411. package/dist/x/isDeepEqual.min.js +2 -2
  412. package/dist/x/isDeepEqual.min.mjs +2 -2
  413. package/dist/x/isDeepEqual.mjs +2 -2
  414. package/dist/x/isEmpty.es.js +2 -2
  415. package/dist/x/isEmpty.es.min.js +2 -2
  416. package/dist/x/isEmpty.js +2 -2
  417. package/dist/x/isEmpty.min.js +2 -2
  418. package/dist/x/isEmpty.min.mjs +2 -2
  419. package/dist/x/isEmpty.mjs +2 -2
  420. package/dist/x/isEqual.es.js +2 -2
  421. package/dist/x/isEqual.es.min.js +2 -2
  422. package/dist/x/isEqual.js +2 -2
  423. package/dist/x/isEqual.min.js +2 -2
  424. package/dist/x/isEqual.min.mjs +2 -2
  425. package/dist/x/isEqual.mjs +2 -2
  426. package/dist/x/isFunction.es.js +2 -2
  427. package/dist/x/isFunction.es.min.js +2 -2
  428. package/dist/x/isFunction.js +2 -2
  429. package/dist/x/isFunction.min.js +2 -2
  430. package/dist/x/isFunction.min.mjs +2 -2
  431. package/dist/x/isFunction.mjs +2 -2
  432. package/dist/x/isIn.es.js +2 -2
  433. package/dist/x/isIn.es.min.js +2 -2
  434. package/dist/x/isIn.js +2 -2
  435. package/dist/x/isIn.min.js +2 -2
  436. package/dist/x/isIn.min.mjs +2 -2
  437. package/dist/x/isIn.mjs +2 -2
  438. package/dist/x/isObject.es.js +2 -2
  439. package/dist/x/isObject.es.min.js +2 -2
  440. package/dist/x/isObject.js +2 -2
  441. package/dist/x/isObject.min.js +2 -2
  442. package/dist/x/isObject.min.mjs +2 -2
  443. package/dist/x/isObject.mjs +2 -2
  444. package/dist/x/isString.es.js +2 -2
  445. package/dist/x/isString.es.min.js +2 -2
  446. package/dist/x/isString.js +2 -2
  447. package/dist/x/isString.min.js +2 -2
  448. package/dist/x/isString.min.mjs +2 -2
  449. package/dist/x/isString.mjs +2 -2
  450. package/dist/x/keys.es.js +2 -2
  451. package/dist/x/keys.es.min.js +2 -2
  452. package/dist/x/keys.js +2 -2
  453. package/dist/x/keys.min.js +2 -2
  454. package/dist/x/keys.min.mjs +2 -2
  455. package/dist/x/keys.mjs +2 -2
  456. package/dist/x/last.es.js +2 -2
  457. package/dist/x/last.es.min.js +2 -2
  458. package/dist/x/last.js +2 -2
  459. package/dist/x/last.min.js +2 -2
  460. package/dist/x/last.min.mjs +2 -2
  461. package/dist/x/last.mjs +2 -2
  462. package/dist/x/maxBy.es.js +59 -6
  463. package/dist/x/maxBy.es.min.js +3 -3
  464. package/dist/x/maxBy.js +59 -6
  465. package/dist/x/maxBy.min.js +3 -3
  466. package/dist/x/maxBy.min.mjs +3 -3
  467. package/dist/x/maxBy.mjs +59 -6
  468. package/dist/x/noop.es.js +2 -2
  469. package/dist/x/noop.es.min.js +2 -2
  470. package/dist/x/noop.js +2 -2
  471. package/dist/x/noop.min.js +2 -2
  472. package/dist/x/noop.min.mjs +2 -2
  473. package/dist/x/noop.mjs +2 -2
  474. package/dist/x/pluck.es.js +32 -103
  475. package/dist/x/pluck.es.min.js +3 -3
  476. package/dist/x/pluck.js +32 -103
  477. package/dist/x/pluck.min.js +3 -3
  478. package/dist/x/pluck.min.mjs +3 -3
  479. package/dist/x/pluck.mjs +32 -103
  480. package/dist/x/prepend.es.js +2 -2
  481. package/dist/x/prepend.es.min.js +2 -2
  482. package/dist/x/prepend.js +2 -2
  483. package/dist/x/prepend.min.js +2 -2
  484. package/dist/x/prepend.min.mjs +2 -2
  485. package/dist/x/prepend.mjs +2 -2
  486. package/dist/x/size.es.js +2 -2
  487. package/dist/x/size.es.min.js +2 -2
  488. package/dist/x/size.js +2 -2
  489. package/dist/x/size.min.js +2 -2
  490. package/dist/x/size.min.mjs +2 -2
  491. package/dist/x/size.mjs +2 -2
  492. package/dist/x/trace.es.js +2 -9
  493. package/dist/x/trace.es.min.js +3 -3
  494. package/dist/x/trace.js +2 -9
  495. package/dist/x/trace.min.js +3 -3
  496. package/dist/x/trace.min.mjs +3 -3
  497. package/dist/x/trace.mjs +2 -9
  498. package/dist/x/unionWith.es.js +2 -2
  499. package/dist/x/unionWith.es.min.js +2 -2
  500. package/dist/x/unionWith.js +2 -2
  501. package/dist/x/unionWith.min.js +2 -2
  502. package/dist/x/unionWith.min.mjs +2 -2
  503. package/dist/x/unionWith.mjs +2 -2
  504. package/dist/x/uniq.es.js +2 -2
  505. package/dist/x/uniq.es.min.js +2 -2
  506. package/dist/x/uniq.js +2 -2
  507. package/dist/x/uniq.min.js +2 -2
  508. package/dist/x/uniq.min.mjs +2 -2
  509. package/dist/x/uniq.mjs +2 -2
  510. package/dist/x/unless.es.js +2 -2
  511. package/dist/x/unless.es.min.js +2 -2
  512. package/dist/x/unless.js +2 -2
  513. package/dist/x/unless.min.js +2 -2
  514. package/dist/x/unless.min.mjs +2 -2
  515. package/dist/x/unless.mjs +2 -2
  516. package/dist/x/values.es.js +2 -2
  517. package/dist/x/values.es.min.js +2 -2
  518. package/dist/x/values.js +2 -2
  519. package/dist/x/values.min.js +2 -2
  520. package/dist/x/values.min.mjs +2 -2
  521. package/dist/x/values.mjs +2 -2
  522. package/dist/x/when.es.js +2 -2
  523. package/dist/x/when.es.min.js +2 -2
  524. package/dist/x/when.js +2 -2
  525. package/dist/x/when.min.js +2 -2
  526. package/dist/x/when.min.mjs +2 -2
  527. package/dist/x/when.mjs +2 -2
  528. package/dist-test.js +9 -2025
  529. package/eq.js +21 -63
  530. package/es.js +746 -869
  531. package/every.js +94 -0
  532. package/filter.js +83 -125
  533. package/flatMap.js +105 -154
  534. package/forEach.js +82 -0
  535. package/get.js +44 -36
  536. package/global.js +6 -4
  537. package/gt.js +15 -58
  538. package/gte.js +14 -57
  539. package/index.js +746 -869
  540. package/lt.js +17 -60
  541. package/lte.js +14 -57
  542. package/map.js +153 -203
  543. package/memory-usage/reduce.js +2 -2
  544. package/not.js +30 -49
  545. package/omit.js +36 -13
  546. package/or.js +64 -41
  547. package/package.json +7 -7
  548. package/pick.js +52 -22
  549. package/pipe.js +27 -92
  550. package/reduce.js +114 -129
  551. package/rubico.js +10 -8
  552. package/set.js +60 -24
  553. package/some.js +105 -0
  554. package/switchCase.js +29 -25
  555. package/tap.js +15 -45
  556. package/test.js +847 -1083
  557. package/thunkify.js +11 -5
  558. package/transform.js +57 -81
  559. package/tryCatch.js +38 -32
  560. package/x/differenceWith.js +3 -3
  561. package/x/filterOut.test.js +6 -6
  562. package/x/flatten.js +1 -1
  563. package/x/flatten.test.js +0 -8
  564. package/x/index.js +0 -2
  565. package/x/pluck.js +18 -27
  566. package/x/pluck.test.js +3 -7
  567. package/x/timeInLoop.js +16 -25
  568. package/x/timeInLoop.test.js +8 -4
  569. package/any.js +0 -88
  570. package/dist/any.es.min.js +0 -7
  571. package/dist/any.min.js +0 -8
  572. package/dist/any.min.mjs +0 -7
  573. package/dist/fork.es.js +0 -159
  574. package/dist/fork.es.min.js +0 -7
  575. package/dist/fork.js +0 -166
  576. package/dist/fork.min.js +0 -8
  577. package/dist/fork.min.mjs +0 -7
  578. package/dist/fork.mjs +0 -159
  579. package/dist/x/forEach.es.min.js +0 -7
  580. package/dist/x/forEach.min.js +0 -8
  581. package/dist/x/forEach.min.mjs +0 -7
  582. package/fork.js +0 -91
  583. package/x/forEach.js +0 -93
  584. package/x/forEach.test.js +0 -218
  585. /package/{benchmarks → archive/benchmarks-v1.9.7}/any.js +0 -0
  586. /package/{x/forEach.benchmark.js → archive/benchmarks-v1.9.7/forEach.js} +0 -0
  587. /package/{benchmarks → archive/benchmarks-v1.9.7}/fork.js +0 -0
  588. /package/{benchmarks → archive/benchmarks-v1.9.7}/integration.js +0 -0
  589. /package/{benchmarks → archive/benchmarks-v1.9.7}/misc.js +0 -0
package/lt.js CHANGED
@@ -1,26 +1,25 @@
1
- const spread2 = require('./_internal/spread2')
2
- const isPromise = require('./_internal/isPromise')
3
- const promiseAll = require('./_internal/promiseAll')
1
+ const ComparisonOperator = require('./_internal/ComparisonOperator')
4
2
  const lessThan = require('./_internal/lessThan')
5
- const curry2 = require('./_internal/curry2')
6
- const always = require('./_internal/always')
7
- const __ = require('./_internal/placeholder')
8
3
 
9
4
  /**
10
5
  * @name lt
11
6
  *
12
7
  * @synopsis
13
8
  * ```coffeescript [specscript]
14
- * lt(leftValue any, rightValue any) -> boolean
15
- * lt(leftValue any, right function)(value any) -> Promise|boolean
16
- * lt(left function, rightValue any)(value any) -> Promise|boolean
17
- * lt(left function, right function)(value any) -> Promise|boolean
9
+ * lt(leftValue Promise|any, rightValue Promise|any) -> boolean
10
+ *
11
+ * lt(leftValue Promise|any, right function)(...args) -> Promise|boolean
12
+ * lt(...args, leftValue Promise|any, right function) -> Promise|boolean
13
+ *
14
+ * lt(left function, rightValue Promise|any)(...args) -> Promise|boolean
15
+ * lt(...args, left function, rightValue Promise|any) -> Promise|boolean
16
+ *
17
+ * lt(left function, right function)(...args) -> Promise|boolean
18
+ * lt(...args, left function, right function) -> Promise|boolean
18
19
  * ```
19
20
  *
20
21
  * @description
21
- * Test if a left value is less than (`<`) a right value. Either parameter may be an actual value.
22
- *
23
- * If both arguments are values, `lt` eagerly computes and returns a boolean value.
22
+ * Test if a value is less than (`<`) another value.
24
23
  *
25
24
  * ```javascript [playground]
26
25
  * console.log(lt(1, 3)) // true
@@ -28,60 +27,18 @@ const __ = require('./_internal/placeholder')
28
27
  * console.log(lt(4, 3)) // false
29
28
  * ```
30
29
  *
31
- * If both arguments are functions, `lt` treats those functions as argument resolvers and returns a function that first resolves its arguments by the argument resolvers before making the comparison.
32
- *
33
- * If only one argument is a function, `lt` still returns a function that resolves its arguments by the argument resolver, treating the value (non function) argument as an already resolved value for comparison.
30
+ * If either of the two values are resolver functions, `lt` returns a function that resolves the values to compare from its arguments.
34
31
  *
35
32
  * ```javascript [playground]
36
33
  * const identity = value => value
37
34
  *
38
35
  * const isLessThan3 = lt(identity, 3)
39
36
  *
40
- * console.log(isLessThan3(1), true)
41
- * console.log(isLessThan3(3), false)
42
- * console.log(isLessThan3(5), false)
37
+ * console.log(isLessThan3(1)) // true
38
+ * console.log(isLessThan3(3)) // false
39
+ * console.log(isLessThan3(5)) // false
43
40
  * ```
44
41
  */
45
- const lt = function (left, right) {
46
- const isLeftResolver = typeof left == 'function',
47
- isRightResolver = typeof right == 'function'
48
-
49
- if (isLeftResolver && isRightResolver) {
50
- return function lessThanBy(value) {
51
- const leftResolve = left(value),
52
- rightResolve = right(value)
53
- const isLeftPromise = isPromise(leftResolve),
54
- isRightPromise = isPromise(rightResolve)
55
- if (isLeftPromise && isRightPromise) {
56
- return promiseAll(
57
- [leftResolve, rightResolve]).then(spread2(lessThan))
58
- } else if (isLeftPromise) {
59
- return leftResolve.then(curry2(lessThan, __, rightResolve))
60
- } else if (isRightPromise) {
61
- return rightResolve.then(curry2(lessThan, leftResolve, __))
62
- }
63
- return leftResolve < rightResolve
64
- }
65
- }
66
-
67
- if (isLeftResolver) {
68
- return function lessThanBy(value) {
69
- const leftResolve = left(value)
70
- return isPromise(leftResolve)
71
- ? leftResolve.then(curry2(lessThan, __, right))
72
- : leftResolve < right
73
- }
74
- }
75
- if (isRightResolver) {
76
- return function lessThanBy(value) {
77
- const rightResolve = right(value)
78
- return isPromise(rightResolve)
79
- ? rightResolve.then(curry2(lessThan, left, __))
80
- : left < rightResolve
81
- }
82
- }
83
-
84
- return left < right
85
- }
42
+ const lt = ComparisonOperator(lessThan)
86
43
 
87
44
  module.exports = lt
package/lte.js CHANGED
@@ -1,26 +1,25 @@
1
- const spread2 = require('./_internal/spread2')
2
- const isPromise = require('./_internal/isPromise')
3
- const promiseAll = require('./_internal/promiseAll')
1
+ const ComparisonOperator = require('./_internal/ComparisonOperator')
4
2
  const lessThanOrEqual = require('./_internal/lessThanOrEqual')
5
- const curry2 = require('./_internal/curry2')
6
- const always = require('./_internal/always')
7
- const __ = require('./_internal/placeholder')
8
3
 
9
4
  /**
10
5
  * @name lte
11
6
  *
12
7
  * @synopsis
13
8
  * ```coffeescript [specscript]
14
- * lte(leftValue any, rightValue any) -> boolean
15
- * lte(leftValue any, right function)(value any) -> Promise|boolean
16
- * lte(left function, rightValue any)(value any) -> Promise|boolean
17
- * lte(left function, right function)(value any) -> Promise|boolean
9
+ * lte(leftValue Promise|any, rightValue Promise|any) -> boolean
10
+ *
11
+ * lte(leftValue Promise|any, right function)(...args) -> Promise|boolean
12
+ * lte(...args, leftValue Promise|any, right function) -> Promise|boolean
13
+ *
14
+ * lte(left function, rightValue Promise|any)(...args) -> Promise|boolean
15
+ * lte(...args, left function, rightValue Promise|any) -> Promise|boolean
16
+ *
17
+ * lte(left function, right function)(...args) -> Promise|boolean
18
+ * lte(...args, left function, right function) -> Promise|boolean
18
19
  * ```
19
20
  *
20
21
  * @description
21
- * Test if a left value is less than or equal (`<=`) to a right value. Either parameter may be an actual value.
22
- *
23
- * If both arguments are values, `lte` eagerly computes and returns a boolean value.
22
+ * Test if a value is less than or equal (`<=`) to another value.
24
23
  *
25
24
  * ```javascript [playground]
26
25
  * console.log(lte(1, 3)) // true
@@ -28,9 +27,7 @@ const __ = require('./_internal/placeholder')
28
27
  * console.log(lte(4, 3)) // false
29
28
  * ```
30
29
  *
31
- * If both arguments are functions, `lte` treats those functions as argument resolvers and returns a function that first resolves its arguments by the argument resolvers before making the comparison.
32
- *
33
- * If only one argument is a function, `lte` still returns a function that resolves its arguments by the argument resolver, treating the value (non function) argument as an already resolved value for comparison.
30
+ * If either of the two values are resolver functions, `lte` returns a function that resolves the values to compare from its arguments.
34
31
  *
35
32
  * ```javascript [playground]
36
33
  * const identity = value => value
@@ -42,46 +39,6 @@ const __ = require('./_internal/placeholder')
42
39
  * console.log(isLessThanOrEqualTo3(5), false)
43
40
  * ```
44
41
  */
45
- const lte = function (left, right) {
46
- const isLeftResolver = typeof left == 'function',
47
- isRightResolver = typeof right == 'function'
48
-
49
- if (isLeftResolver && isRightResolver) {
50
- return function lessThanOrEqualBy(value) {
51
- const leftResolve = left(value),
52
- rightResolve = right(value)
53
- const isLeftPromise = isPromise(leftResolve),
54
- isRightPromise = isPromise(rightResolve)
55
- if (isLeftPromise && isRightPromise) {
56
- return promiseAll(
57
- [leftResolve, rightResolve]).then(spread2(lessThanOrEqual))
58
- } else if (isLeftPromise) {
59
- return leftResolve.then(curry2(lessThanOrEqual, __, rightResolve))
60
- } else if (isRightPromise) {
61
- return rightResolve.then(curry2(lessThanOrEqual, leftResolve, __))
62
- }
63
- return leftResolve <= rightResolve
64
- }
65
- }
66
-
67
- if (isLeftResolver) {
68
- return function lessThanOrEqualBy(value) {
69
- const leftResolve = left(value)
70
- return isPromise(leftResolve)
71
- ? leftResolve.then(curry2(lessThanOrEqual, __, right))
72
- : leftResolve <= right
73
- }
74
- }
75
- if (isRightResolver) {
76
- return function lessThanOrEqualBy(value) {
77
- const rightResolve = right(value)
78
- return isPromise(rightResolve)
79
- ? rightResolve.then(curry2(lessThanOrEqual, left, __))
80
- : left <= rightResolve
81
- }
82
- }
83
-
84
- return left <= right
85
- }
42
+ const lte = ComparisonOperator(lessThanOrEqual)
86
43
 
87
44
  module.exports = lte
package/map.js CHANGED
@@ -1,23 +1,17 @@
1
+ const isPromise = require('./_internal/isPromise')
1
2
  const MappingIterator = require('./_internal/MappingIterator')
2
3
  const MappingAsyncIterator = require('./_internal/MappingAsyncIterator')
3
4
  const __ = require('./_internal/placeholder')
4
5
  const curry2 = require('./_internal/curry2')
5
6
  const isArray = require('./_internal/isArray')
6
7
  const isObject = require('./_internal/isObject')
7
- const isGeneratorFunction = require('./_internal/isGeneratorFunction')
8
- const isAsyncGeneratorFunction = require('./_internal/isAsyncGeneratorFunction')
9
8
  const arrayMap = require('./_internal/arrayMap')
10
- const generatorFunctionMap = require('./_internal/generatorFunctionMap')
11
- const asyncGeneratorFunctionMap = require('./_internal/asyncGeneratorFunctionMap')
12
- const reducerMap = require('./_internal/reducerMap')
13
9
  const stringMap = require('./_internal/stringMap')
14
10
  const setMap = require('./_internal/setMap')
15
11
  const mapMap = require('./_internal/mapMap')
16
12
  const objectMap = require('./_internal/objectMap')
17
13
  const arrayMapSeries = require('./_internal/arrayMapSeries')
18
14
  const arrayMapPool = require('./_internal/arrayMapPool')
19
- const arrayMapWithIndex = require('./_internal/arrayMapWithIndex')
20
- const objectMapOwn = require('./_internal/objectMapOwn')
21
15
  const objectMapEntries = require('./_internal/objectMapEntries')
22
16
  const mapMapEntries = require('./_internal/mapMapEntries')
23
17
  const symbolIterator = require('./_internal/symbolIterator')
@@ -69,15 +63,6 @@ const _map = function (value, mapper) {
69
63
  if (isArray(value)) {
70
64
  return arrayMap(value, mapper)
71
65
  }
72
- if (typeof value == 'function') {
73
- if (isGeneratorFunction(value)) {
74
- return generatorFunctionMap(value, mapper)
75
- }
76
- if (isAsyncGeneratorFunction(value)) {
77
- return asyncGeneratorFunctionMap(value, mapper)
78
- }
79
- return reducerMap(value, mapper)
80
- }
81
66
  if (value == null) {
82
67
  return value
83
68
  }
@@ -114,150 +99,186 @@ const _map = function (value, mapper) {
114
99
  *
115
100
  * @synopsis
116
101
  * ```coffeescript [specscript]
117
- * map(
118
- * arrayMapper (value any, index number, array Array)=>Promise|any
119
- * )(array Array) -> mappedArray Promise|Array
102
+ * arrayMapperFunc (value any, index number, array Array)=>Promise|any
120
103
  *
121
- * map(
122
- * objectMapper (value any, key string, object Object)=>Promise|any
123
- * )(object Object) -> mappedObject Promise|Array
104
+ * map(arrayMapperFunc)(value Array) -> result Promise|Array
105
+ * map(value Array, arrayMapperFunc) -> result Promise|Array
124
106
  *
125
- * map(
126
- * setMapper (value any, value, set Set)=>Promise|any,
127
- * )(set Set) -> mappedSet Promise|Set
107
+ * objectMapperFunc (value any, key string, object Object)=>Promise|any
128
108
  *
129
- * map(
130
- * mapMapper (value any, key any, originalMap Map)=>Promise|any,
131
- * )(originalMap Map) -> mappedMap Promise|Map
109
+ * map(objectMapperFunc)(value Object) -> result Promise|Array
110
+ * map(value Object, objectMapperFunc) -> result Promise|Array
132
111
  *
133
- * map(
134
- * syncMapper (value any)=>any
135
- * )(generatorFunction GeneratorFunction)
136
- * -> mappingGeneratorFunction ...args=>Generator
112
+ * setMapperFunc (value any, value, set Set)=>Promise|any
137
113
  *
138
- * map(
139
- * mapper (value any)=>Promise|any
140
- * )(asyncGeneratorFunction AsyncGeneratorFunction)
141
- * -> mappingAsyncGeneratorFunction ...args=>AsyncGenerator
114
+ * map(setMapperFunc)(value Set) -> result Promise|Set
115
+ * map(value Set, setMapperFunc) -> result Promise|Set
142
116
  *
143
- * map(
144
- * mapper (value any)=>Promise|any
145
- * )(originalReducer Reducer) -> mappingReducer Reducer
117
+ * mapMapperFunc (value any, key any, originalMap Map)=>Promise|any
118
+ *
119
+ * map(mapMapperFunc)(value Map) -> result Promise|Map
120
+ * map(value Map, mapMapperFunc) -> result Promise|Map
121
+ *
122
+ * iteratorMapperFunc (value any)=>any
123
+ *
124
+ * map(iteratorMapperFunc)(value Iterator|Generator) -> result Iterator
125
+ * map(value Iterator|Generator, iteratorMapperFunc) -> result Iterator
126
+ *
127
+ * asyncIteratorMapperFunc (value any)=>Promise|any
128
+ *
129
+ * map(asyncIteratorMapperFunc)(value AsyncIterator|AsyncGenerator)
130
+ * -> result AsyncIterator
131
+ * map(value AsyncIterator|AsyncGenerator, asyncIteratorMapperFunc)
132
+ * -> result AsyncIterator
146
133
  * ```
147
134
  *
148
135
  * @description
149
- * Apply a mapper concurrently to each item of a functor, returning the results in a functor of the same type. If order is implied by the collection, it is maintained in the result. The following list describes `map` behavior with vanilla JavaScript functors.
136
+ * Applies a synchronous or asynchronous mapper function concurrently to each item of a collection, returning the results in a new collection of the same type. If order is implied by the collection, it is maintained in the result. `map` accepts the following collections:
150
137
  *
151
- * * `Array` - apply a mapper to items, returning a new array of results
152
- * * `Object` - apply a mapper to object values, returning a new object of results
153
- * * `Set` - apply a mapper to Set items, returning a new `Set` of results
154
- * * `Map` - apply a mapper to Map values (not entries), returning a new `Map` of results
155
- * * `Iterator`/`Generator` - return an iterator that applies a mapper to each iteration's value, yielding mapped iterations
156
- * * `AsyncIterator`/`AsyncGenerator` - return an async iterator that applies a mapper to each async iteration's value, yielding Promises of a mapped iterations
157
- * * `{ map: function }` - call `.map` directly with mapper
138
+ * * `Array`
139
+ * * `Object`
140
+ * * `Set`
141
+ * * `Map`
142
+ * * `Iterator`/`Generator`
143
+ * * `AsyncIterator`/`AsyncGenerator`
144
+ *
145
+ * With arrays (type `Array`), `map` applies the mapper function to each item of the array, returning the transformed results in a new array ordered the same as the original array.
158
146
  *
159
147
  * ```javascript [playground]
160
148
  * const square = number => number ** 2
161
149
  *
162
- * console.log(
163
- * map(square)([1, 2, 3, 4, 5]),
164
- * ) // [1, 4, 9, 16, 25]
150
+ * const array = [1, 2, 3, 4, 5]
165
151
  *
166
152
  * console.log(
167
- * map(square)(new Map([['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]])),
168
- * ) // Map { 'a' => 1, 'b' => 4, 'c' => 9, 'd' => 16, 'e' => 25 }
153
+ * map(array, square)
154
+ * ) // [1, 4, 9, 16, 25]
169
155
  *
170
156
  * console.log(
171
- * map(square)({ a: 1, b: 2, c: 3, d: 4, e: 5 }),
172
- * ) // { a: 1, b: 4, c: 9, d: 16, e: 25 }
157
+ * map(square)(array)
158
+ * ) // [1, 4, 9, 16, 25]
173
159
  * ```
174
160
  *
175
- * `map` recognizes three types of functions in functor position:
176
- *
177
- * * Generator Functions `function* () {}` - `map(mapper)(generatorFunction)` creates a generator function that generates generators of mapped values. Async mappers are yielded synchronously and may lead to unexpected results.
178
- * * Async Generator Functions `async function* () {}` - `map(mapper)(asyncGeneratorFunction)` creates an async generator function that generates async generators of mapped values. Promises produced by async mappers are resolved.
179
- * * Reducers `(accumulator, item)=>accumulator` - `map(mapper)(reducer)` creates a transducer that, when called with another reducer, creates a mapping step for each item of the reducer's reducing operation. Promises produced by async mappers are resolved.
180
- *
181
- * Use mapping generator functions to create lazy computations executed at iteration time.
161
+ * With objects (type `Object`), `map` applies the mapper function to each value of the object, returning the transformed results as values in a new object ordered by the keys of the original object
182
162
  *
183
163
  * ```javascript [playground]
184
- * const capitalize = string => string.toUpperCase()
185
- *
186
- * const abc = function* () {
187
- * yield 'a'; yield 'b'; yield 'c'
188
- * }
164
+ * const square = number => number ** 2
189
165
  *
190
- * const ABC = map(capitalize)(abc)
166
+ * const obj = { a: 1, b: 2, c: 3, d: 4, e: 5 }
191
167
  *
192
- * const abcIter = abc()
168
+ * console.log(
169
+ * map(square)(obj)
170
+ * ) // { a: 1, b: 4, c: 9, d: 16, e: 25 }
193
171
  *
194
- * const ABCIter = ABC()
172
+ * console.log(
173
+ * map(obj, square)
174
+ * ) // { a: 1, b: 4, c: 9, d: 16, e: 25 }
175
+ * ```
195
176
  *
196
- * console.log([...abcIter]) // ['a', 'b', 'c']
177
+ * With sets (type `Set`), `map` applies the mapper function to each value of the set, returning the transformed results unordered in a new set.
197
178
  *
198
- * console.log([...ABCIter]) // ['A', 'B', 'C']
199
- * ```
179
+ * ```javascript [playground]
180
+ * const square = number => number ** 2
200
181
  *
201
- * Create a mapping transducer by supplying `map` with a reducer. A reducer is a variadic function that depicts a relationship between an accumulator and any number of arguments. A transducer is a function that accepts a reducer as an argument and returns another reducer.
182
+ * const set = new Set([1, 2, 3, 4, 5])
202
183
  *
203
- * ```coffeescript [specscript]
204
- * Reducer<T> = (any, T)=>Promise|any
184
+ * console.log(
185
+ * map(set, square)
186
+ * ) // [1, 4, 9, 16, 25]
205
187
  *
206
- * Transducer = Reducer=>Reducer
188
+ * console.log(
189
+ * map(square)(set)
190
+ * ) // [1, 4, 9, 16, 25]
207
191
  * ```
208
192
  *
209
- * The transducer signature enables chaining functionality for reducers. `map` is core to this mechanism, and provides a way via transducers to transform items of reducers. To `map`, reducers are just another category.
193
+ * With maps (type `Map`), `map` applies the mapper function to each value of the map, returning the results at the same keys in a new map. The entries of the resulting map are in the same order as those of the original map
210
194
  *
211
195
  * ```javascript [playground]
212
196
  * const square = number => number ** 2
213
197
  *
214
- * const concat = (array, item) => array.concat(item)
198
+ * const m = new Map([['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]])
215
199
  *
216
- * const mapSquare = map(square)
217
- * // mapSquare could potentially be a transducer, but at this point, it is
218
- * // undifferentiated and not necessarily locked in to transducer behavior.
200
+ * console.log(
201
+ * map(square)(m)
202
+ * ) // Map { 'a' => 1, 'b' => 4, 'c' => 9, 'd' => 16, 'e' => 25 }
219
203
  *
220
204
  * console.log(
221
- * mapSquare([1, 2, 3, 4, 5]),
222
- * ) // [1, 4, 9, 16, 25]
205
+ * map(m, square)
206
+ * ) // Map { 'a' => 1, 'b' => 4, 'c' => 9, 'd' => 16, 'e' => 25 }
207
+ * ```
223
208
  *
224
- * const squareConcatReducer = mapSquare(concat)
225
- * // now mapSquare is passed the function concat, so it assumes transducer
226
- * // position. squareConcatReducer is a reducer with chained functionality
227
- * // square and concat.
209
+ * With iterators (type `Iterator`) or generators (type `Generator`), `map` applies the mapper function lazily to each value of the iterator/generator, creating a new iterator with transformed iterations.
228
210
  *
229
- * console.log(
230
- * [1, 2, 3, 4, 5].reduce(squareConcatReducer, []),
231
- * ) // [1, 4, 9, 16, 25]
211
+ * ```javascript [playground]
212
+ * const capitalize = string => string.toUpperCase()
232
213
  *
233
- * console.log(
234
- * [1, 2, 3, 4, 5].reduce(squareConcatReducer, ''),
235
- * ) // '1491625'
214
+ * const abcGeneratorFunc = function* () {
215
+ * yield 'a'; yield 'b'; yield 'c'
216
+ * }
217
+ *
218
+ * const abcGenerator = abcGeneratorFunc()
219
+ * const ABCGenerator = map(abcGeneratorFunc(), capitalize)
220
+ * const ABCGenerator2 = map(capitalize)(abcGeneratorFunc())
221
+ *
222
+ * console.log([...abcGenerator]) // ['a', 'b', 'c']
223
+ *
224
+ * console.log([...ABCGenerator]) // ['A', 'B', 'C']
225
+ *
226
+ * console.log([...ABCGenerator2]) // ['A', 'B', 'C']
236
227
  * ```
237
228
  *
238
- * `map`, when passed a single argument before the mapper function, treats that argument as the value to be mapped.
229
+ * With asyncIterators (type `AsyncIterator`, or `AsyncGenerator`), `map` applies the mapper function lazily to each value of the asyncIterator, creating a new asyncIterator with transformed iterations
239
230
  *
240
231
  * ```javascript [playground]
241
- * const myArray = [1, 2, 3]
232
+ * const capitalize = string => string.toUpperCase()
242
233
  *
243
- * const mappedArray = map(myArray, number => number ** 2)
234
+ * const abcAsyncGeneratorFunc = async function* () {
235
+ * yield 'a'; yield 'b'; yield 'c'
236
+ * }
244
237
  *
245
- * console.log(mappedArray) // [1, 4, 9]
238
+ * const abcAsyncGenerator = abcAsyncGeneratorFunc()
239
+ * const ABCGenerator = map(abcAsyncGeneratorFunc(), capitalize)
240
+ * const ABCGenerator2 = map(capitalize)(abcAsyncGeneratorFunc())
241
+ *
242
+ * ;(async function () {
243
+ * for await (const letter of abcAsyncGenerator) {
244
+ * console.log(letter)
245
+ * // a
246
+ * // b
247
+ * // c
248
+ * }
249
+ *
250
+ * for await (const letter of ABCGenerator) {
251
+ * console.log(letter)
252
+ * // A
253
+ * // B
254
+ * // C
255
+ * }
256
+ *
257
+ * for await (const letter of ABCGenerator2) {
258
+ * console.log(letter)
259
+ * // A
260
+ * // B
261
+ * // C
262
+ * }
263
+ * })()
246
264
  * ```
247
265
  *
248
266
  * @execution concurrent
249
267
  *
250
- * @transducing
251
- *
252
268
  * @TODO streamMap
253
269
  */
254
270
 
255
271
  const map = (...args) => {
256
272
  const mapper = args.pop()
257
- if (args.length > 0) {
258
- return _map(args[0], mapper)
273
+ if (args.length == 0) {
274
+ return curry2(_map, __, mapper)
259
275
  }
260
- return curry2(_map, __, mapper)
276
+
277
+ const collection = args[0]
278
+ if (isPromise(collection)) {
279
+ return collection.then(curry2(_map, __, mapper))
280
+ }
281
+ return _map(collection, mapper)
261
282
  }
262
283
 
263
284
  /**
@@ -271,13 +292,17 @@ const map = (...args) => {
271
292
  * ```
272
293
  *
273
294
  * @description
274
- * `map` over the entries of a `Map` or `Object`.
295
+ * `map` over the entries rather than the values of a collection. Accepts collections of type `Map` or `Object`.
296
+ *
275
297
  * ```javascript [playground]
276
- * console.log(
277
- * map.entries(
278
- * ([key, value]) => [key.toUpperCase(), value ** 2],
279
- * )({ a: 1, b: 2, c: 3 })
280
- * ) // { A: 1, B: 4, C: 9 }
298
+ * const upperCaseKeysAndSquareValues =
299
+ * map.entries(([key, value]) => [key.toUpperCase(), value ** 2])
300
+ *
301
+ * console.log(upperCaseKeysAndSquareValues({ a: 1, b: 2, c: 3 }))
302
+ * // { A: 1, B: 4, C: 9 }
303
+ *
304
+ * console.log(upperCaseKeysAndSquareValues(new Map([['a', 1], ['b', 2], ['c', 3]])))
305
+ * // Map(3) { 'A' => 1, 'B' => 4, 'C' => 9 }
281
306
  * ```
282
307
  *
283
308
  * @since v1.7.0
@@ -302,11 +327,9 @@ map.entries = function mapEntries(mapper) {
302
327
  *
303
328
  * @synopsis
304
329
  * ```coffeescript [specscript]
305
- * var T any,
306
- * mapper T=>Promise|any,
307
- * array Array<T>
308
- *
309
- * map.series(mapper)(array) -> Promise|Array
330
+ * map.series(
331
+ * mapperFunc (value any)=>Promise|any,
332
+ * )(array Array) -> Promise|Array
310
333
  * ```
311
334
  *
312
335
  * @description
@@ -338,27 +361,29 @@ map.series = mapper => function mappingInSeries(value) {
338
361
  *
339
362
  * @synopsis
340
363
  * ```coffeescript [specscript]
341
- * var maxConcurrency number,
342
- * T any,
343
- * mapper T=>Promise|any,
344
- * array Array<T>
345
- *
346
- * map.pool(maxConcurrency, mapper)(array) -> Promise|Array
364
+ * map.pool(
365
+ * maxConcurrency number,
366
+ * mapper (value any)=>Promise|any,
367
+ * )(array Array) -> result Promise|Array
347
368
  * ```
348
369
  *
349
370
  * @description
350
- * `map` with limited concurrency.
371
+ * `map` that specifies the maximum concurrency (number of ongoing promises at any time) of the execution. Only works for arrays.
351
372
  *
352
373
  * ```javascript [playground]
353
- * const delayedLog = x => new Promise(function (resolve) {
354
- * setTimeout(function () {
355
- * console.log(x)
356
- * resolve()
357
- * }, 1000)
358
- * })
374
+ * const ids = [1, 2, 3, 4, 5]
359
375
  *
360
- * console.log('start')
361
- * map.pool(2, delayedLog)([1, 2, 3, 4, 5])
376
+ * const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
377
+ *
378
+ * const delayedIdentity = async value => {
379
+ * await sleep(1000)
380
+ * return value
381
+ * }
382
+ *
383
+ * map.pool(2, pipe([
384
+ * delayedIdentity,
385
+ * console.log,
386
+ * ]))(ids)
362
387
  * ```
363
388
  *
364
389
  * @TODO objectMapPool
@@ -372,79 +397,4 @@ map.pool = (concurrencyLimit, mapper) => function concurrentPoolMapping(value) {
372
397
  throw new TypeError(`${value} is not an Array`)
373
398
  }
374
399
 
375
- /**
376
- * @name map.withIndex
377
- *
378
- * @synopsis
379
- * ```coffeescript [specscript]
380
- * var T any,
381
- * index number,
382
- * array Array<T>,
383
- * indexedMapper (T, index, array)=>Promise|any
384
- *
385
- * map.withIndex(indexedMapper)(array) -> Promise|Array
386
- * ```
387
- *
388
- * @description
389
- * `map` with an indexed mapper.
390
- *
391
- * ```javascript [playground]
392
- * const range = length => map.withIndex(
393
- * (_, index) => index + 1)(Array(length))
394
- *
395
- * console.log(range(5)) // [1, 2, 3, 4, 5]
396
- * ```
397
- *
398
- * @execution concurrent
399
- *
400
- * @related
401
- * map, filter.withIndex
402
- */
403
- map.withIndex = mapper => function mappingWithIndex(value) {
404
- if (isArray(value)) {
405
- return arrayMapWithIndex(value, mapper)
406
- }
407
- throw new TypeError(`${value} is not an Array`)
408
- }
409
-
410
- /**
411
- * @name map.own
412
- *
413
- * @synopsis
414
- * ```coffeescript [specscript]
415
- * var T any,
416
- * object Object<T>,
417
- * mapper T=>Promise|any
418
- *
419
- * map.own(mapper)(object) -> Promise|Object
420
- * ```
421
- *
422
- * @description
423
- * `map` over an object's own properties.
424
- *
425
- * ```javascript [playground]
426
- * const Person = function (name) {
427
- * this.name = name
428
- * }
429
- *
430
- * Person.prototype.greet = function () {}
431
- *
432
- * const david = new Person('david')
433
- * david.a = 1
434
- * david.b = 2
435
- * david.c = 3
436
- *
437
- * const square = number => number ** 2
438
- * console.log(
439
- * map.own(square)(david)
440
- * ) // { name: NaN, a: 1, b: 4, c: 9 }
441
- * ```
442
- */
443
- map.own = mapper => function mappingOwnProperties(value) {
444
- if (isObject(value) && !isArray(value)) {
445
- return objectMapOwn(value, mapper)
446
- }
447
- throw new TypeError(`${value} is not an Object`)
448
- }
449
-
450
400
  module.exports = map