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/every.js ADDED
@@ -0,0 +1,94 @@
1
+ const isPromise = require('./_internal/isPromise')
2
+ const __ = require('./_internal/placeholder')
3
+ const curry2 = require('./_internal/curry2')
4
+ const isArray = require('./_internal/isArray')
5
+ const arrayEvery = require('./_internal/arrayEvery')
6
+ const iteratorEvery = require('./_internal/iteratorEvery')
7
+ const asyncIteratorEvery = require('./_internal/asyncIteratorEvery')
8
+ const objectValues = require('./_internal/objectValues')
9
+ const reducerEvery = require('./_internal/reducerEvery')
10
+ const symbolIterator = require('./_internal/symbolIterator')
11
+ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
12
+
13
+ // _every(collection Array|Iterable|AsyncIterable|{ reduce: function }|Object, predicate function) -> Promise|boolean
14
+ const _every = function (collection, predicate) {
15
+ if (isArray(collection)) {
16
+ return arrayEvery(collection, predicate)
17
+ }
18
+ if (collection == null) {
19
+ return predicate(collection)
20
+ }
21
+
22
+ if (typeof collection[symbolIterator] == 'function') {
23
+ return iteratorEvery(collection[symbolIterator](), predicate)
24
+ }
25
+ if (typeof collection[symbolAsyncIterator] == 'function') {
26
+ return asyncIteratorEvery(
27
+ collection[symbolAsyncIterator](), predicate, new Set()
28
+ )
29
+ }
30
+ if (typeof collection.reduce == 'function') {
31
+ return collection.reduce(reducerEvery(predicate), true)
32
+ }
33
+ if (collection.constructor == Object) {
34
+ return arrayEvery(objectValues(collection), predicate)
35
+ }
36
+ return predicate(collection)
37
+ }
38
+
39
+ /**
40
+ * @name every
41
+ *
42
+ * @synopsis
43
+ * ```coffeescript [specscript]
44
+ * type Foldable = Array|Iterable|AsyncIterable|{ reduce: function }|Object
45
+ *
46
+ * every(collection Foldable, predicate function) -> result Promise|boolean
47
+ *
48
+ * every(predicate function)(collection Foldable) -> result Promise|boolean
49
+ * ```
50
+ *
51
+ * @description
52
+ * Test a predicate concurrently across all items of a collection, returning true if all predications are truthy.
53
+ *
54
+ * ```javascript [playground]
55
+ * const isOdd = number => number % 2 == 1
56
+ *
57
+ * console.log(
58
+ * every(isOdd)([1, 2, 3, 4, 5]),
59
+ * ) // false
60
+ *
61
+ * console.log(
62
+ * every(isOdd)([1, 3, 5]),
63
+ * ) // true
64
+ * ```
65
+ *
66
+ * The collection can be any iterable, async iterable, or object values iterable collection. Below is an example of `every` accepting an async generator as the collection.
67
+ *
68
+ * ```javascript [playground]
69
+ * const asyncNumbers = async function* () {
70
+ * yield 1; yield 2; yield 3; yield 4; yield 5
71
+ * }
72
+ *
73
+ * every(async number => number < 6)(asyncNumbers()).then(console.log) // true
74
+ * ```
75
+ *
76
+ * @execution concurrent
77
+ *
78
+ * @muxing
79
+ */
80
+ const every = function (...args) {
81
+ const predicate = args.pop()
82
+ if (args.length == 0) {
83
+ return curry2(_every, __, predicate)
84
+ }
85
+
86
+ const collection = args[0]
87
+ if (isPromise(collection)) {
88
+ return collection.then(curry2(_every, __, predicate))
89
+ }
90
+
91
+ return _every(collection, predicate)
92
+ }
93
+
94
+ module.exports = every
package/filter.js CHANGED
@@ -3,17 +3,11 @@ const curry2 = require('./_internal/curry2')
3
3
  const FilteringIterator = require('./_internal/FilteringIterator')
4
4
  const FilteringAsyncIterator = require('./_internal/FilteringAsyncIterator')
5
5
  const isArray = require('./_internal/isArray')
6
- const isGeneratorFunction = require('./_internal/isGeneratorFunction')
7
- const isAsyncGeneratorFunction = require('./_internal/isAsyncGeneratorFunction')
8
6
  const arrayFilter = require('./_internal/arrayFilter')
9
- const generatorFunctionFilter = require('./_internal/generatorFunctionFilter')
10
- const asyncGeneratorFunctionFilter = require('./_internal/asyncGeneratorFunctionFilter')
11
- const reducerFilter = require('./_internal/reducerFilter')
12
7
  const stringFilter = require('./_internal/stringFilter')
13
8
  const setFilter = require('./_internal/setFilter')
14
9
  const mapFilter = require('./_internal/mapFilter')
15
10
  const objectFilter = require('./_internal/objectFilter')
16
- const arrayFilterWithIndex = require('./_internal/arrayFilterWithIndex')
17
11
  const symbolIterator = require('./_internal/symbolIterator')
18
12
  const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
19
13
 
@@ -62,15 +56,6 @@ const _filter = function (value, predicate) {
62
56
  if (isArray(value)) {
63
57
  return arrayFilter(value, predicate)
64
58
  }
65
- if (typeof value == 'function') {
66
- if (isGeneratorFunction(value)) {
67
- return generatorFunctionFilter(value, predicate)
68
- }
69
- if (isAsyncGeneratorFunction(value)) {
70
- return asyncGeneratorFunctionFilter(value, predicate)
71
- }
72
- return reducerFilter(value, predicate)
73
- }
74
59
  if (value == null) {
75
60
  return value
76
61
  }
@@ -104,39 +89,20 @@ const _filter = function (value, predicate) {
104
89
  *
105
90
  * @synopsis
106
91
  * ```coffeescript [specscript]
107
- * arrayPredicate (value any, index number, array Array)=>Promise|boolean
108
- *
109
- * filter(arrayPredicate)(array Array) -> filteredArray Promise|Array
110
- * filter(array Array, arrayPredicate) -> filteredArray Promise|Array
111
- *
112
- * objectPredicate (value any, key string, object Object)=>Promise|boolean
113
- *
114
- * filter(objectPredicate)(object Object) -> filteredObject Promise|Object
115
- * filter(object Object, objectPredicate) -> filteredObject Promise|Object
116
- *
117
- * setPredicate (value any, value, set Set)=>Promise|boolean
118
- *
119
- * filter(setPredicate)(set Set) -> filteredSet Promise|Set
120
- * filter(set Set, setPredicate) -> filteredSet Promise|Set
121
- *
122
- * mapPredicate (value any, key any, map Map)=>Promise|boolean
123
- *
124
- * filter(mapPredicate)(map Map) -> filteredMap Promise|Map
125
- * filter(map Map, mapPredicate) -> filteredMap Promise|Map
126
- *
127
- * iteratorPredicate (value any)=>any
128
- *
129
- * filter(iteratorPredicate)(iterator Iterator|Generator)
130
- * -> filteredIterator Iterator|Generator
131
- * filter(iterator Iterator|Generator, iteratorPredicate)
132
- * -> filteredIterator Iterator|Generator
133
- *
134
- * asyncIteratorPredicate (value any)=>Promise|any
135
- *
136
- * filter(asyncIteratorPredicate)(asyncIterator AsyncIterator|AsyncGenerator)
137
- * -> filteredAsyncIterator AsyncIterator|AsyncGenerator
138
- * filter(asyncIterator AsyncIterator|AsyncGenerator, asyncIteratorPredicate)
139
- * -> filteredAsyncIterator AsyncIterator|AsyncGenerator
92
+ * type Filterable = Array|Object|Set|Map|Iterator|AsyncIterator
93
+ * type Predicate = (
94
+ * value any,
95
+ * indexOrKey? number|string,
96
+ * collection? Filterable,
97
+ * )=>boolean
98
+ *
99
+ * filter(
100
+ * collection Filterable,
101
+ * predicate Predicate
102
+ * ) -> result Promise|Filterable
103
+ *
104
+ * filter(predicate Predicate)(collection Filterable)
105
+ * -> result Promise|Filterable
140
106
  * ```
141
107
  *
142
108
  * @description
@@ -149,7 +115,7 @@ const _filter = function (value, predicate) {
149
115
  * * `Iterator`/`Generator`
150
116
  * * `AsyncIterator`/`AsyncGenerator`
151
117
  *
152
- * With arrays (type `Array`), `filter` applies the predicate function to each item of the array, returning a new array containing only the items that tested truthy by the predicate. The order of the items is preserved.
118
+ * For arrays (type `Array`), `filter` applies the predicate function to each item of the array, returning a new array containing only the items that tested truthy by the predicate. The order of the items is preserved. On each iteration, the predicate is passed the item, the index of the item, and a reference to the array.
153
119
  *
154
120
  * ```javascript [playground]
155
121
  * const isOdd = number => number % 2 == 1
@@ -160,7 +126,7 @@ const _filter = function (value, predicate) {
160
126
  * console.log(filter(array, isOdd)) // [1, 3, 5]
161
127
  * ```
162
128
  *
163
- * With objects (type `Object`), `filter` applies the predicate function to each value of the object, returning a new object containing only the values that tested truthy by the predicate.
129
+ * For objects (type `Object`), `filter` applies the predicate function to each value of the object, returning a new object containing only the values that tested truthy by the predicate. On each iteration, the predicate is passed the object value, the key of the object value, and a reference to the object.
164
130
  *
165
131
  * ```javascript [playground]
166
132
  * const isOdd = number => number % 2 == 1
@@ -171,7 +137,7 @@ const _filter = function (value, predicate) {
171
137
  * console.log(filter(obj, isOdd)) // { a: 1, c: 3, e: 5 }
172
138
  * ```
173
139
  *
174
- * With sets (type `Set`), `filter` applies the predicate function to each item in the set, returning a new set containing only the items that tested truthy by the predicate.
140
+ * For sets (type `Set`), `filter` applies the predicate function to each item in the set, returning a new set containing only the items that tested truthy by the predicate. On each iteration, the predicate is passed the item, the same item as the key argument, and a reference to the set.
175
141
  *
176
142
  * ```javascript [playground]
177
143
  * const isOdd = number => number % 2 == 1
@@ -182,7 +148,7 @@ const _filter = function (value, predicate) {
182
148
  * console.log(filter(set, isOdd)) // Set { 1, 3, 5 }
183
149
  * ```
184
150
  *
185
- * With maps (type `Map`), `filter` applies the predicate function to the value of each entry of the map, returning a new map containing only the entries where the values tested truthy by the predicate. The order of the entries are preserved.
151
+ * For maps (type `Map`), `filter` applies the predicate function to the value of each entry of the map, returning a new map containing only the entries where the values tested truthy by the predicate. The order of the entries are preserved. On each iteration, the predicate is passed the map value, the key of the value, and a reference to the map.
186
152
  *
187
153
  * ```javascript [playground]
188
154
  * const isOdd = number => number % 2 == 1
@@ -194,7 +160,7 @@ const _filter = function (value, predicate) {
194
160
  * console.log(filter(m, isOdd)) // Map(3) { 'a' => 1, 'c' => 3, 'e' => 5 }
195
161
  * ```
196
162
  *
197
- * With iterators (type `Iterator`) or generators (type `Generator`), `filter` returns a lazily filtered iterator/generator; all values that are normally yielded by the iterator/generator that test falsy by the predicate function are skipped by the lazily filtered iterator/generator.
163
+ * For iterators (type `Iterator`) or generators (type `Generator`), `filter` returns a lazily filtered iterator/generator; all values that are normally yielded by the iterator/generator that test falsy by the predicate function are skipped by the lazily filtered iterator/generator. On each iteration, the predicate is passed the iteration value only.
198
164
  *
199
165
  * ```javascript [playground]
200
166
  * const isOdd = number => number % 2 == 1
@@ -228,7 +194,7 @@ const _filter = function (value, predicate) {
228
194
  * }
229
195
  * ```
230
196
  *
231
- * With asyncIterators (type `AsyncIterator`) or asyncGenerators (type `AsyncGenerator`), `filter` returns a lazily filtered asyncIterator/asyncGenerator; all values that are normally yielded by the asyncIterator/asyncGenerator that test falsy by the predicate function are skipped by the lazily filtered asyncIterator/asyncGenerator.
197
+ * With asyncIterators (type `AsyncIterator`) or asyncGenerators (type `AsyncGenerator`), `filter` returns a lazily filtered asyncIterator/asyncGenerator; all values that are normally yielded by the asyncIterator/asyncGenerator that test falsy by the predicate function are skipped by the lazily filtered asyncIterator/asyncGenerator. On each iteration, the predicate is passed the iteration value only.
232
198
  *
233
199
  * ```javascript [playground]
234
200
  * const asyncIsOdd = async number => number % 2 == 1
@@ -271,44 +237,10 @@ const _filter = function (value, predicate) {
271
237
 
272
238
  const filter = function (...args) {
273
239
  const predicate = args.pop()
274
- if (args.length > 0) {
275
- return _filter(args[0], predicate)
276
- }
277
- return curry2(_filter, __, predicate)
278
- }
279
-
280
- /**
281
- * @name filter.withIndex
282
- *
283
- * @synopsis
284
- * ```coffeescript [specscript]
285
- * filter.withIndex(
286
- * indexedPredicate (item any, index number, array Array)=>Promise|boolean
287
- * )(array Array) -> result Array
288
- * ```
289
- *
290
- * @description
291
- * `filter` with each predicate call supplemented by index and reference to original collection.
292
- *
293
- * ```javascript [playground]
294
- * const uniq = filter.withIndex(
295
- * (item, index, array) => item !== array[index + 1]
296
- * )
297
- *
298
- * console.log(
299
- * uniq([1, 1, 1, 2, 2, 2, 3, 3, 3]),
300
- * ) // [1, 2, 3]
301
- * ```
302
- *
303
- * @DEPRECATED
304
- *
305
- * @execution concurrent
306
- */
307
- filter.withIndex = predicate => function filteringWithIndex(value) {
308
- if (isArray(value)) {
309
- return arrayFilterWithIndex(value, predicate)
240
+ if (args.length == 0) {
241
+ return curry2(_filter, __, predicate)
310
242
  }
311
- throw new TypeError(`${value} is not an Array`)
243
+ return _filter(args[0], predicate)
312
244
  }
313
245
 
314
246
  module.exports = filter
package/flatMap.js CHANGED
@@ -1,36 +1,83 @@
1
+ const isPromise = require('./_internal/isPromise')
1
2
  const FlatMappingIterator = require('./_internal/FlatMappingIterator')
2
3
  const FlatMappingAsyncIterator = require('./_internal/FlatMappingAsyncIterator')
3
4
  const isArray = require('./_internal/isArray')
4
- const isGeneratorFunction = require('./_internal/isGeneratorFunction')
5
- const isAsyncGeneratorFunction = require('./_internal/isAsyncGeneratorFunction')
6
- const isBinary = require('./_internal/isBinary')
7
5
  const arrayFlatMap = require('./_internal/arrayFlatMap')
8
6
  const objectFlatMap = require('./_internal/objectFlatMap')
9
7
  const setFlatMap = require('./_internal/setFlatMap')
10
8
  const stringFlatMap = require('./_internal/stringFlatMap')
11
- const streamFlatMap = require('./_internal/streamFlatMap')
12
- const binaryFlatMap = require('./_internal/binaryFlatMap')
13
- const reducerFlatMap = require('./_internal/reducerFlatMap')
14
- const generatorFunctionFlatMap = require('./_internal/generatorFunctionFlatMap')
15
- const asyncGeneratorFunctionFlatMap = require('./_internal/asyncGeneratorFunctionFlatMap')
16
9
  const symbolIterator = require('./_internal/symbolIterator')
17
- const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
10
+ const curry2 = require('./_internal/curry2')
11
+ const __ = require('./_internal/placeholder')
12
+
13
+ /**
14
+ * @name _flatMap
15
+ *
16
+ * @synopsis
17
+ * ```coffeescript [specscript]
18
+ * type FlatMappable = Array|String|Set|Iterator|AsyncIterator
19
+ * type Iterable = Iterable|AsyncIterable|Object<value any>
20
+ *
21
+ * _flatMap(
22
+ * value FlatMappable,
23
+ * flatMapper (item any)=>Promise|Iterable,
24
+ * ) -> result Promise|FlatMappable
25
+ * ```
26
+ */
27
+ const _flatMap = function (value, flatMapper) {
28
+ if (isArray(value)) {
29
+ return arrayFlatMap(value, flatMapper)
30
+ }
31
+ if (value == null) {
32
+ return flatMapper(value)
33
+ }
34
+
35
+ if (typeof value.then == 'function') {
36
+ return value.then(flatMapper)
37
+ }
38
+ if (typeof value.next == 'function') {
39
+ return symbolIterator in value
40
+ ? FlatMappingIterator(value, flatMapper)
41
+ : FlatMappingAsyncIterator(value, flatMapper)
42
+ }
43
+ if (typeof value.chain == 'function') {
44
+ return value.chain(flatMapper)
45
+ }
46
+ if (typeof value.flatMap == 'function') {
47
+ return value.flatMap(flatMapper)
48
+ }
49
+ const valueConstructor = value.constructor
50
+ if (valueConstructor == Object) {
51
+ return objectFlatMap(value, flatMapper)
52
+ }
53
+ if (valueConstructor == Set) {
54
+ return setFlatMap(value, flatMapper)
55
+ }
56
+ if (typeof value == 'string' || valueConstructor == String) {
57
+ return stringFlatMap(value, flatMapper)
58
+ }
59
+ return flatMapper(value)
60
+ }
18
61
 
19
62
  /**
20
63
  * @name flatMap
21
64
  *
22
65
  * @synopsis
23
66
  * ```coffeescript [specscript]
24
- * type Monad = Array|String|Set|Iterator|AsyncIterator
25
- * type Foldable = Iterable|AsyncIterable|Object
67
+ * type FlatMappable = Array|String|Set|Iterator|AsyncIterator
68
+ * type Iterable = Iterable|AsyncIterable|Object<value any>
26
69
  *
27
70
  * flatMap(
28
- * flatMapper (item any)=>Promise|Foldable,
29
- * )(value Monad) -> result Promise|Monad
71
+ * collection FlatMappable,
72
+ * flatMapper (item any)=>Promise|Iterable,
73
+ * ) -> result Promise|FlatMappable
74
+ *
75
+ * flatMap(flatMapper (item any)=>Promise|Iterable)(collection FlatMappable)
76
+ * -> result Promise|FlatMappable
30
77
  * ```
31
78
  *
32
79
  * @description
33
- * Applies a synchronous or asynchronous flatMapper function concurrently to each item of a collection, creating a new collection of the same type. A flatMapping operation iterates through each item of a collection and applies the flatMapper function to each item, flattening the result of the execution into the result collection. The result of an individual execution can be any iterable, async iterable, or object values iterable collection.
80
+ * Applies a flatMapper function concurrently to each item of a collection, creating a new collection of the same type. A flatMapping operation iterates through each item of a collection and applies the flatMapper function to each item, flattening the result of the execution into the result collection. The result of an individual execution can be any iterable, async iterable, or object values iterable collection. The flatMapper function may be asynchronous.
34
81
  *
35
82
  * * `Iterable` - the execution result is iterated and each item is added to the result collection
36
83
  * * `AsyncIterable` - the execution result is asynchronously iterated and each item is added to the result collection
@@ -52,7 +99,7 @@ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
52
99
  * // [1, 1, 2, 3, 3, 5, 5, 8, 7, 7]
53
100
  * ```
54
101
  *
55
- * A flatMapping operation concatenates onto the result collection synchronous values and muxes any asynchronous values. Muxing, or asynchronously "mixing", is the process of combining multiple asynchronous sources into one source, with order determined by the asynchronous resolution of the individual items.
102
+ * A flatMapping operation concatenates onto the resulting collection synchronous values and muxes any asynchronous values. Muxing, or asynchronously "mixing", is the process of combining multiple asynchronous sources into one source, with order determined by the asynchronous resolution of the individual items.
56
103
  *
57
104
  * ```javascript [playground]
58
105
  * const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
@@ -62,7 +109,7 @@ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
62
109
  * }
63
110
  *
64
111
  * console.log( // sync is concatenated
65
- * flatMap(repeat3)(['foo', 'bar', 'baz']),
112
+ * flatMap(['foo', 'bar', 'baz'], repeat3),
66
113
  * ) // ['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'baz', 'baz', 'baz']
67
114
  *
68
115
  * const asyncRepeat3 = async function* (message) {
@@ -74,7 +121,7 @@ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
74
121
  * }
75
122
  *
76
123
  * // async is muxed
77
- * flatMap(asyncRepeat3)(['foo', 'bar', 'baz']).then(console.log)
124
+ * flatMap(['foo', 'bar', 'baz'], asyncRepeat3).then(console.log)
78
125
  * // ['foo', 'bar', 'baz', 'foo', 'bar', 'baz', 'foo', 'bar', 'baz']
79
126
  * ```
80
127
  *
@@ -84,7 +131,7 @@ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
84
131
  * const duplicate = value => [value, value]
85
132
  *
86
133
  * console.log(
87
- * flatMap(duplicate)([1, 2, 3, 4, 5])
134
+ * flatMap([1, 2, 3, 4, 5], duplicate)
88
135
  * ) // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
89
136
  * ```
90
137
  *
@@ -94,7 +141,7 @@ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
94
141
  * const duplicate = value => [value, value]
95
142
  *
96
143
  * console.log(
97
- * flatMap(duplicate)('12345')
144
+ * flatMap('12345', duplicate)
98
145
  * ) // 1122334455
99
146
  * ```
100
147
  *
@@ -104,7 +151,7 @@ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
104
151
  * const pairPlus100 = value => [value, value + 100]
105
152
  *
106
153
  * console.log(
107
- * flatMap(pairPlus100)(new Set([1, 2, 3, 4, 5]))
154
+ * flatMap(new Set([1, 2, 3, 4, 5]), pairPlus100)
108
155
  * ) // Set(10) { 1, 101, 2, 102, 3, 103, 4, 104, 5, 105 }
109
156
  * ```
110
157
  *
@@ -117,57 +164,15 @@ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
117
164
  *
118
165
  * * For Node.js duplex streams (type [Stream](https://nodejs.org/api/stream.html#class-streamduplex)), `flatMap` applies a flatMapper function to each item of the stream, writing (`.write`) each item of each execution into the duplex stream
119
166
  */
120
- const flatMap = flatMapper => function flatMapping(value) {
121
- if (isArray(value)) {
122
- return arrayFlatMap(value, flatMapper)
123
- }
124
- if (typeof value == 'function') {
125
- if (isGeneratorFunction(value)) {
126
- return generatorFunctionFlatMap(value, flatMapper)
127
- }
128
- if (isAsyncGeneratorFunction(value)) {
129
- return asyncGeneratorFunctionFlatMap(value, flatMapper)
130
- }
131
- return reducerFlatMap(value, flatMapper)
132
- }
133
- if (isBinary(value)) {
134
- return binaryFlatMap(value, flatMapper)
135
- }
136
- if (value == null) {
137
- return flatMapper(value)
138
- }
139
-
140
- if (typeof value.then == 'function') {
141
- return value.then(flatMapper)
142
- }
143
- if (typeof value.next == 'function') {
144
- return symbolIterator in value
145
- ? FlatMappingIterator(value, flatMapper)
146
- : FlatMappingAsyncIterator(value, flatMapper)
147
- }
148
- if (typeof value.chain == 'function') {
149
- return value.chain(flatMapper)
150
- }
151
- if (typeof value.flatMap == 'function') {
152
- return value.flatMap(flatMapper)
153
- }
154
- if (
155
- typeof value[symbolAsyncIterator] == 'function'
156
- && typeof value.write == 'function'
157
- ) {
158
- return streamFlatMap(value, flatMapper)
167
+ const flatMap = (...args) => {
168
+ const flatMapper = args.pop()
169
+ if (args.length == 0) {
170
+ return curry2(_flatMap, __, flatMapper)
159
171
  }
160
- const valueConstructor = value.constructor
161
- if (valueConstructor == Object) {
162
- return objectFlatMap(value, flatMapper)
163
- }
164
- if (valueConstructor == Set) {
165
- return setFlatMap(value, flatMapper)
166
- }
167
- if (typeof value == 'string' || valueConstructor == String) {
168
- return stringFlatMap(value, flatMapper)
169
- }
170
- return flatMapper(value)
172
+ const collection = args[0]
173
+ return isPromise(collection)
174
+ ? collection.then(curry2(_flatMap, __, flatMapper))
175
+ : _flatMap(args[0], flatMapper)
171
176
  }
172
177
 
173
178
  module.exports = flatMap
package/forEach.js ADDED
@@ -0,0 +1,82 @@
1
+ const isPromise = require('./_internal/isPromise')
2
+ const __ = require('./_internal/placeholder')
3
+ const curry2 = require('./_internal/curry2')
4
+ const isArray = require('./_internal/isArray')
5
+ const isGeneratorFunction = require('./_internal/isGeneratorFunction')
6
+ const isAsyncGeneratorFunction = require('./_internal/isAsyncGeneratorFunction')
7
+ const arrayForEach = require('./_internal/arrayForEach')
8
+ const objectForEach = require('./_internal/objectForEach')
9
+ const iteratorForEach = require('./_internal/iteratorForEach')
10
+ const asyncIteratorForEach = require('./_internal/asyncIteratorForEach')
11
+ const symbolIterator = require('./_internal/symbolIterator')
12
+ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
13
+
14
+ // type Collection = Array|Iterable|AsyncIterable|{ forEach: function }|Object
15
+ // _forEach(collection Collection, callback function) -> collection Collection
16
+ const _forEach = function (collection, callback) {
17
+ if (isArray(collection)) {
18
+ return arrayForEach(collection, callback)
19
+ }
20
+ if (collection == null) {
21
+ return collection
22
+ }
23
+ if (typeof collection.forEach == 'function') {
24
+ return collection.forEach(callback)
25
+ }
26
+ if (typeof collection[symbolIterator] == 'function') {
27
+ return iteratorForEach(collection[symbolIterator](), callback)
28
+ }
29
+ if (typeof collection[symbolAsyncIterator] == 'function') {
30
+ return asyncIteratorForEach(collection[symbolAsyncIterator](), callback)
31
+ }
32
+ if (collection.constructor == Object) {
33
+ return objectForEach(collection, callback)
34
+ }
35
+ return collection
36
+ }
37
+
38
+ /**
39
+ * @name forEach
40
+ *
41
+ * @synopsis
42
+ * ```coffeescript [specscript]
43
+ * type Collection = Array|Iterable|AsyncIterable|{ forEach: function }|Object
44
+ *
45
+ * forEach(collection Collection, callback function) -> collection Collection
46
+ *
47
+ * forEach(callback function)(collection Collection) -> collection Collection
48
+ * ```
49
+ *
50
+ * @description
51
+ * Execute a callback for each item of a collection, returning a Promise if the execution is asynchronous.
52
+ *
53
+ * ```javascript [playground]
54
+ * forEach([1, 2, 3, 4, 5l], console.log) // 1 2 3 4 5
55
+ *
56
+ * forEach({ a: 1, b: 2, c: 3 }, console.log) // 1 2 3
57
+ * ```
58
+ *
59
+ * Omit the data argument for a composable API
60
+ *
61
+ * ```javascript [playground]
62
+ * pipe([1, 2, 3, 4, 5], [
63
+ * filter(number => number % 2 == 1),
64
+ * map(number => number ** 2),
65
+ * forEach(console.log), // 1
66
+ * // 9
67
+ * // 25
68
+ * ])
69
+ * ```
70
+ */
71
+ const forEach = function (...args) {
72
+ const callback = args.pop()
73
+ if (args.length == 0) {
74
+ return curry2(_forEach, __, callback)
75
+ }
76
+ const collection = args[0]
77
+ return isPromise(collection)
78
+ ? collection.then(curry2(_forEach, __, callback))
79
+ : _forEach(collection, callback)
80
+ }
81
+
82
+ module.exports = forEach
package/get.js CHANGED
@@ -1,5 +1,18 @@
1
+ const isPromise = require('./_internal/isPromise')
2
+ const __ = require('./_internal/placeholder')
3
+ const curry3 = require('./_internal/curry3')
4
+ const isArray = require('./_internal/isArray')
5
+ const isObject = require('./_internal/isObject')
1
6
  const getByPath = require('./_internal/getByPath')
2
7
 
8
+ // _get(object Object, path string, defaultValue function|any)
9
+ const _get = function (object, path, defaultValue) {
10
+ const result = object == null ? undefined : getByPath(object, path)
11
+ return result === undefined
12
+ ? typeof defaultValue == 'function' ? defaultValue(object) : defaultValue
13
+ : result
14
+ }
15
+
3
16
  /**
4
17
  * @name get
5
18
  *
@@ -7,7 +20,7 @@ const getByPath = require('./_internal/getByPath')
7
20
  * ```coffeescript [specscript]
8
21
  * get(
9
22
  * path string|number|Array<string|number>,
10
- * defaultValue function|any
23
+ * defaultValue? function|any
11
24
  * )(object Object) -> result Promise|Object
12
25
  * ```
13
26
  *
@@ -52,11 +65,15 @@ const getByPath = require('./_internal/getByPath')
52
65
  * console.log(get00000ArrayNotation([[[[['foo']]]]])) // foo
53
66
  * ```
54
67
  */
55
- const get = (path, defaultValue) => function getter(value) {
56
- const result = value == null ? undefined : getByPath(value, path)
57
- return result === undefined
58
- ? typeof defaultValue == 'function' ? defaultValue(value) : defaultValue
59
- : result
68
+
69
+ const get = function (arg0, arg1, arg2) {
70
+ if (isPromise(arg0)) {
71
+ return arg0.then(curry3(_get, __, arg1, arg2))
72
+ }
73
+ if (isObject(arg0) && !isArray(arg0)) {
74
+ return _get(arg0, arg1, arg2)
75
+ }
76
+ return curry3(_get, __, arg0, arg1)
60
77
  }
61
78
 
62
79
  module.exports = get
package/global.js CHANGED
@@ -1,7 +1,8 @@
1
1
  globalThis.pipe = require('./pipe')
2
- globalThis.fork = require('./fork')
3
- globalThis.assign = require('./assign')
2
+ globalThis.compose = require('./compose')
4
3
  globalThis.tap = require('./tap')
4
+ globalThis.all = require('./all')
5
+ globalThis.assign = require('./assign')
5
6
  globalThis.tryCatch = require('./tryCatch')
6
7
  globalThis.switchCase = require('./switchCase')
7
8
  globalThis.map = require('./map')
@@ -9,8 +10,9 @@ globalThis.filter = require('./filter')
9
10
  globalThis.reduce = require('./reduce')
10
11
  globalThis.transform = require('./transform')
11
12
  globalThis.flatMap = require('./flatMap')
12
- globalThis.any = require('./any')
13
- globalThis.all = require('./all')
13
+ globalThis.forEach = require('./forEach')
14
+ globalThis.some = require('./some')
15
+ globalThis.every = require('./every')
14
16
  globalThis.and = require('./and')
15
17
  globalThis.or = require('./or')
16
18
  globalThis.not = require('./not')