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/flatMap.js CHANGED
@@ -1,80 +1,105 @@
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')
18
12
 
19
13
  /**
20
- * @name flatMap
14
+ * @name _flatMap
21
15
  *
22
16
  * @synopsis
23
17
  * ```coffeescript [specscript]
24
- * Stream<T> = { read: ()=>T, write: T=>() }
25
- * Monad<T> = Array<T>|String<T>|Set<T>
26
- * |TypedArray<T>|Stream<T>|Iterator<T>|AsyncIterator<T>
27
- * |{ chain: T=>Monad<T> }|{ flatMap: T=>Monad<T> }|Object<T>
28
- * Reducer<T> = (any, T)=>Promise|any
29
- * Foldable<T> = Iterable<T>|AsyncIterable<T>|{ reduce: Reducer<T>=>any }|Object<T>
30
- *
31
- * var T any,
32
- * flatMapper T=>Promise|Monad<T>|Foldable<T>|T,
33
- * monad Monad<T>,
34
- * args ...any,
35
- * generatorFunction ...args=>Generator<Promise|T>,
36
- * asyncGeneratorFunction ...args=>AsyncGenerator<T>,
37
- * reducer Reducer<T>
18
+ * type FlatMappable = Array|String|Set|Iterator|AsyncIterator
19
+ * type Iterable = Iterable|AsyncIterable|Object<value any>
38
20
  *
39
- * flatMap(flatMapper)(monad) -> Monad<T>
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
+ }
61
+
62
+ /**
63
+ * @name flatMap
40
64
  *
41
- * flatMap(flatMapper)(generatorFunction) -> ...args=>Generator<T>
65
+ * @synopsis
66
+ * ```coffeescript [specscript]
67
+ * type FlatMappable = Array|String|Set|Iterator|AsyncIterator
68
+ * type Iterable = Iterable|AsyncIterable|Object<value any>
42
69
  *
43
- * flatMap(flatMapper)(asyncGeneratorFunction) -> ...args=>AsyncGenerator<T>
70
+ * flatMap(
71
+ * collection FlatMappable,
72
+ * flatMapper (item any)=>Promise|Iterable,
73
+ * ) -> result Promise|FlatMappable
44
74
  *
45
- * flatMap(flatMapper)(reducer) -> Reducer<T>
75
+ * flatMap(flatMapper (item any)=>Promise|Iterable)(collection FlatMappable)
76
+ * -> result Promise|FlatMappable
46
77
  * ```
47
78
  *
48
79
  * @description
49
- * Apply a flatMapper concurrently to each item of a monad, flattening the items of each execution into a new monad that is the same type as the original.
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.
50
81
  *
51
- * The following list outlines high level behavior for various input monads.
82
+ * * `Iterable` - the execution result is iterated and each item is added to the result collection
83
+ * * `AsyncIterable` - the execution result is asynchronously iterated and each item is added to the result collection
84
+ * * `Object` - the execution result values are added to the result collection
52
85
  *
53
- * * `Array` - Apply a flatMapper to each item, pushing (`.push`) the items of each execution into a new array
54
- * * `String` - Apply a flatMapper to each character, adding (`+`) the items of each execution into a new string
55
- * * `Set` - Apply a flatMapper to each item, adding (`.add`) the items of each execution into a new set
56
- * * `TypedArray` - Apply a flatMapper to each byte, setting (`.set`) the items of each execution into a new typed array
57
- * * `Buffer (Node.js)` - Apply a flatMapper to each byte, setting (`.set`) the items of each execution into a new Node.js Buffer
58
- * * `stream.Duplex (Node.js)` - Apply a flatMapper to each item, writing (`.write`) the items of each execution into a new duplex stream
59
- * * `Object` - Apply a flatMapper to each value, assigning (`Object.assign`) the items of each execution into a new object
60
- * * `Reducer` - Apply a flatMapper to each item of a reducer's reducing operation, calling each item of each execution with the reducer.
61
- * * `{ chain: function }` - Call `.chain` directly with flatMapper
62
- * * `{ flatMap: function }` - Call `.flatMap` directly with flatMapper
86
+ * The following example demonstrates various execution results being flattened into the same array.
63
87
  *
64
88
  * ```javascript [playground]
65
- * const duplicate = number => [number, number]
66
- *
67
- * console.log(
68
- * flatMap(duplicate)([1, 2, 3, 4, 5]),
69
- * ) // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
70
- *
71
- * const asyncDuplicate = async number => [number, number]
89
+ * const identity = value => value
72
90
  *
73
- * flatMap(asyncDuplicate)( // concurrent execution
74
- * [1, 2, 3, 4, 5]).then(console.log) // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
91
+ * flatMap(identity)([
92
+ * [1, 1], // array
93
+ * new Set([2, 2]), // set
94
+ * (function* () { yield 3; yield 3 })(), // generator
95
+ * (async function* () { yield 7; yield 7 })(), // asyncGenerator
96
+ * { a: 5, b: 5 }, // object
97
+ * new Uint8Array([8]), // typedArray
98
+ * ]).then(console.log)
99
+ * // [1, 1, 2, 3, 3, 5, 5, 8, 7, 7]
75
100
  * ```
76
101
  *
77
- * A flatMapping operation concatenates onto the result 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.
78
103
  *
79
104
  * ```javascript [playground]
80
105
  * const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
@@ -84,7 +109,7 @@ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
84
109
  * }
85
110
  *
86
111
  * console.log( // sync is concatenated
87
- * flatMap(repeat3)(['foo', 'bar', 'baz']),
112
+ * flatMap(['foo', 'bar', 'baz'], repeat3),
88
113
  * ) // ['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'baz', 'baz', 'baz']
89
114
  *
90
115
  * const asyncRepeat3 = async function* (message) {
@@ -95,133 +120,59 @@ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
95
120
  * yield message
96
121
  * }
97
122
  *
98
- * flatMap(asyncRepeat3)( // async is muxed
99
- * ['foo', 'bar', 'baz']).then(console.log)
123
+ * // async is muxed
124
+ * flatMap(['foo', 'bar', 'baz'], asyncRepeat3).then(console.log)
100
125
  * // ['foo', 'bar', 'baz', 'foo', 'bar', 'baz', 'foo', 'bar', 'baz']
101
126
  * ```
102
127
  *
103
- * In general, flattening is by order of concatenation with the exception of async iterables, which are muxed. Below, the two `4`s are asynchronous and are pushed onto the result after all the synchronous values have been flattened.
128
+ * For arrays (type `Array`), `flatMap` applies the flatMapper function to each item, pushing (`.push`) the items of each execution into a new array.
104
129
  *
105
130
  * ```javascript [playground]
106
- * const identity = value => value
131
+ * const duplicate = value => [value, value]
107
132
  *
108
- * flatMap(identity)([
109
- * [1, 1],
110
- * new Set([2, 2]),
111
- * (function* () { yield 3; yield 3 })(),
112
- * (async function* () { yield 4; yield 4 })(),
113
- * { a: 5, b: 5 },
114
- * 6,
115
- * Promise.resolve(7),
116
- * new Uint8Array([8]),
117
- * ]).then(console.log)
118
- * // [1, 1, 2, 3, 3, 5, 5, 6, 7, 8, 4, 4]
133
+ * console.log(
134
+ * flatMap([1, 2, 3, 4, 5], duplicate)
135
+ * ) // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
119
136
  * ```
120
137
  *
121
- * Purer functional programming is possible with `flatMap` and explicit monads. An explicit monad is any object that defines a method `.chain` or `.flatMap`.
138
+ * For strings (type `String`), `flatMap` applies the flatMapper function to each character, adding (`+`) the items of each execution into a new string
122
139
  *
123
140
  * ```javascript [playground]
124
- * const Maybe = value => ({
125
- * chain(flatMapper) {
126
- * return value == null ? value : flatMapper(value)
127
- * },
128
- * })
129
- *
130
- * const userbase = new Map([
131
- * ['1', { _id: '1', name: 'George' }],
132
- * ['2', { _id: '2', name: 'Jane' }],
133
- * ['3', { _id: '3', name: 'Jim' }],
134
- * ])
135
- *
136
- * const getUserByID = async userID => userbase.get(userID)
137
- *
138
- * const logUserByID = pipe([
139
- * getUserByID,
140
- * Maybe,
141
- * flatMap(console.log),
142
- * ])
141
+ * const duplicate = value => [value, value]
143
142
  *
144
- * logUserByID('5')
145
- *
146
- * logUserByID('1') // { _id: '1', name: 'George' }
143
+ * console.log(
144
+ * flatMap('12345', duplicate)
145
+ * ) // 1122334455
147
146
  * ```
148
147
  *
149
- * Additionally, `flatMap` is a powerful option when working with transducers. A flatMapping transducer applies a flatMapper to each item of a reducer's reducing operation, calling each item of each execution with the reducer.
148
+ * For sets (type `Set`), `flatMap` applies the flatMapper function to each item, adding (`.add`) the items of each execution into a new set
150
149
  *
151
150
  * ```javascript [playground]
152
- * const isOdd = number => number % 2 == 1
153
- *
154
- * const powers = number => [number, number ** 2, number ** 3]
155
- *
156
- * const oddPowers = pipe([
157
- * filter(isOdd),
158
- * flatMap(powers),
159
- * ])
160
- *
161
- * const arrayConcat = (array, value) => array.concat(value)
151
+ * const pairPlus100 = value => [value, value + 100]
162
152
  *
163
153
  * console.log(
164
- * reduce(oddPowers(arrayConcat), [])([1, 2, 3, 4, 5]),
165
- * ) // [1, 1, 1, 3, 9, 27, 5, 25, 125]
154
+ * flatMap(new Set([1, 2, 3, 4, 5]), pairPlus100)
155
+ * ) // Set(10) { 1, 101, 2, 102, 3, 103, 4, 104, 5, 105 }
166
156
  * ```
167
157
  *
168
- * In the case above, each item of the array of numbers returned by `powers` is called with the reducer `arrayConcat` for flattening into the final result.
169
- *
170
158
  * @execution concurrent
171
159
  *
172
160
  * @transducing
161
+ *
162
+ * @archive
163
+ * * For typed arrays (type [`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects)) and Node.js buffers (type [`Buffer`](https://nodejs.org/api/buffer.html)), `flatMap` applies a flatMapper function to each value of the typed array/buffer, joining the result of each execution with `.set` into the resulting typed array
164
+ *
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
173
166
  */
174
- const flatMap = flatMapper => function flatMapping(value) {
175
- if (isArray(value)) {
176
- return arrayFlatMap(value, flatMapper)
177
- }
178
- if (typeof value == 'function') {
179
- if (isGeneratorFunction(value)) {
180
- return generatorFunctionFlatMap(value, flatMapper)
181
- }
182
- if (isAsyncGeneratorFunction(value)) {
183
- return asyncGeneratorFunctionFlatMap(value, flatMapper)
184
- }
185
- return reducerFlatMap(value, flatMapper)
186
- }
187
- if (isBinary(value)) {
188
- return binaryFlatMap(value, flatMapper)
167
+ const flatMap = (...args) => {
168
+ const flatMapper = args.pop()
169
+ if (args.length == 0) {
170
+ return curry2(_flatMap, __, flatMapper)
189
171
  }
190
- if (value == null) {
191
- return flatMapper(value)
192
- }
193
-
194
- if (typeof value.then == 'function') {
195
- return value.then(flatMapper)
196
- }
197
- if (typeof value.next == 'function') {
198
- return symbolIterator in value
199
- ? FlatMappingIterator(value, flatMapper)
200
- : FlatMappingAsyncIterator(value, flatMapper)
201
- }
202
- if (typeof value.chain == 'function') {
203
- return value.chain(flatMapper)
204
- }
205
- if (typeof value.flatMap == 'function') {
206
- return value.flatMap(flatMapper)
207
- }
208
- if (
209
- typeof value[symbolAsyncIterator] == 'function'
210
- && typeof value.write == 'function'
211
- ) {
212
- return streamFlatMap(value, flatMapper)
213
- }
214
- const valueConstructor = value.constructor
215
- if (valueConstructor == Object) {
216
- return objectFlatMap(value, flatMapper)
217
- }
218
- if (valueConstructor == Set) {
219
- return setFlatMap(value, flatMapper)
220
- }
221
- if (typeof value == 'string' || valueConstructor == String) {
222
- return stringFlatMap(value, flatMapper)
223
- }
224
- return flatMapper(value)
172
+ const collection = args[0]
173
+ return isPromise(collection)
174
+ ? collection.then(curry2(_flatMap, __, flatMapper))
175
+ : _flatMap(args[0], flatMapper)
225
176
  }
226
177
 
227
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,36 +1,48 @@
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
  *
6
19
  * @synopsis
7
20
  * ```coffeescript [specscript]
8
- * var value any,
21
+ * get(
9
22
  * path string|number|Array<string|number>,
10
- * defaultValue (value=>any)|any
11
- *
12
- * get(path, defaultValue?) -> getter value=>any
23
+ * defaultValue? function|any
24
+ * )(object Object) -> result Promise|Object
13
25
  * ```
14
26
  *
15
27
  * @description
16
- * Create a getter that accesses a property on a value denoted by path.
28
+ * Accesses a property of an object given a path denoted by a string, number, or an array of string or numbers.
17
29
  *
18
30
  * ```javascript [playground]
19
- * console.log(
20
- * get('hello')({ hello: 'world' }),
21
- * ) // world
31
+ * const getHello = get('hello')
32
+ *
33
+ * console.log(getHello({ hello: 'world' })) // world
22
34
  * ```
23
35
  *
24
- * It is possible to return a default value on not found by supplying the value or resolver of such value as the second parameter.
36
+ * If the value at the end of the path is not found on the object, returns an optional default value. The default value can be a function resolver that takes the object as an argument. If no default value is provided, returns `undefined`. The function resolver may be asynchronous (returns a promise).
25
37
  *
26
38
  * ```javascript [playground]
27
- * console.log(
28
- * get('hello', 'default')({ foo: 'bar' }),
29
- * ) // default
39
+ * const getHelloWithDefaultValue = get('hello', 'default')
40
+ *
41
+ * console.log(getHelloWithDefaultValue({ foo: 'bar' })) // default
30
42
  *
31
- * console.log(
32
- * get('hello', object => object.foo)({ foo: 'bar' }),
33
- * ) // bar
43
+ * const getHelloWithDefaultResolver = get('hello', object => object.foo)
44
+ *
45
+ * console.log(getHelloWithDefaultResolver({ foo: 'bar' })) // bar
34
46
  * ```
35
47
  *
36
48
  * `get` supports three types of path patterns for nested property access.
@@ -40,32 +52,28 @@ const getByPath = require('./_internal/getByPath')
40
52
  * * an array of keys or indices - `['a', 0, 'value']`
41
53
  *
42
54
  * ```javascript [playground]
43
- * const nestedABC0 = { a: { b: { c: ['hello'] } } }
44
- *
45
- * console.log(
46
- * get('a.b.c[0]')(nestedABC0),
47
- * ) // hello
48
- *
49
- * const nested00000 = [[[[['foo']]]]]
55
+ * const getABC0 = get('a.b.c[0]')
50
56
  *
51
- * console.log(
52
- * get('0.0.0.0.0')(nested00000),
53
- * ) // foo
57
+ * console.log(getABC0({ a: { b: { c: ['hello'] } } })) // hello
54
58
  *
55
- * console.log(
56
- * get('[0][0][0][0][0]')(nested00000),
57
- * ) // foo
59
+ * const get00000DotNotation = get('0.0.0.0.0')
60
+ * const get00000BracketNotation = get('[0][0][0][0][0]')
61
+ * const get00000ArrayNotation = get([0, 0, 0, 0, 0])
58
62
  *
59
- * console.log(
60
- * get([0, 0, 0, 0, 0])(nested00000),
61
- * ) // foo
63
+ * console.log(get00000DotNotation([[[[['foo']]]]])) // foo
64
+ * console.log(get00000BracketNotation([[[[['foo']]]]])) // foo
65
+ * console.log(get00000ArrayNotation([[[[['foo']]]]])) // foo
62
66
  * ```
63
67
  */
64
- const get = (path, defaultValue) => function getter(value) {
65
- const result = value == null ? undefined : getByPath(value, path)
66
- return result === undefined
67
- ? typeof defaultValue == 'function' ? defaultValue(value) : defaultValue
68
- : 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)
69
77
  }
70
78
 
71
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')
package/gt.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 greaterThan = require('./_internal/greaterThan')
5
- const curry2 = require('./_internal/curry2')
6
- const always = require('./_internal/always')
7
- const __ = require('./_internal/placeholder')
8
3
 
9
4
  /**
10
5
  * @name gt
11
6
  *
12
7
  * @synopsis
13
8
  * ```coffeescript [specscript]
14
- * gt(leftValue any, rightValue any) -> boolean
15
- * gt(leftValue any, right function)(value any) -> Promise|boolean
16
- * gt(left function, rightValue any)(value any) -> Promise|boolean
17
- * gt(left function, right function)(value any) -> Promise|boolean
9
+ * gt(leftValue Promise|any, rightValue Promise|any) -> boolean
10
+ *
11
+ * gt(leftValue Promise|any, right function)(...args) -> Promise|boolean
12
+ * gt(...args, leftValue Promise|any, right function) -> Promise|boolean
13
+ *
14
+ * gt(left function, rightValue Promise|any)(...args) -> Promise|boolean
15
+ * gt(...args, left function, rightValue Promise|any) -> Promise|boolean
16
+ *
17
+ * gt(left function, right function)(...args) -> Promise|boolean
18
+ * gt(...args, left function, right function) -> Promise|boolean
18
19
  * ```
19
20
  *
20
21
  * @description
21
- * Test if a left value is greater than (`>`) a right value. Either parameter may be an actual value.
22
- *
23
- * If both arguments are values, `gt` eagerly computes and returns a boolean value.
22
+ * Test if a value is greater than (`>`) another value.
24
23
  *
25
24
  * ```javascript [playground]
26
25
  * const age = 40
@@ -30,58 +29,16 @@ const __ = require('./_internal/placeholder')
30
29
  * console.log(isAgeGreaterThan21) // true
31
30
  * ```
32
31
  *
33
- * If both arguments are functions, `gt` treats those functions as argument resolvers and returns a function that first resolves its arguments by the argument resolvers before making the comparison.
34
- *
35
- * If only one argument is a function, `gt` 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.
32
+ * If either of the two values are resolver functions, `gt` returns a function that resolves the values to compare from its arguments.
36
33
  *
37
34
  * ```javascript [playground]
38
- * const isOfLegalAge = gt(21, person => person.age)
35
+ * const isOfLegalAge = gt(21, get('age'))
39
36
  *
40
37
  * const juvenile = { age: 16 }
41
38
  *
42
39
  * console.log(isOfLegalAge(juvenile)) // false
43
40
  * ```
44
41
  */
45
- const gt = function (left, right) {
46
- const isLeftResolver = typeof left == 'function',
47
- isRightResolver = typeof right == 'function'
48
-
49
- if (isLeftResolver && isRightResolver) {
50
- return function greaterThanBy(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(greaterThan))
58
- } else if (isLeftPromise) {
59
- return leftResolve.then(curry2(greaterThan, __, rightResolve))
60
- } else if (isRightPromise) {
61
- return rightResolve.then(curry2(greaterThan, leftResolve, __))
62
- }
63
- return leftResolve > rightResolve
64
- }
65
- }
66
-
67
- if (isLeftResolver) {
68
- return function greaterThanBy(value) {
69
- const leftResolve = left(value)
70
- return isPromise(leftResolve)
71
- ? leftResolve.then(curry2(greaterThan, __, right))
72
- : leftResolve > right
73
- }
74
- }
75
- if (isRightResolver) {
76
- return function strictEqualBy(value) {
77
- const rightResolve = right(value)
78
- return isPromise(rightResolve)
79
- ? rightResolve.then(curry2(greaterThan, left, __))
80
- : left > rightResolve
81
- }
82
- }
83
-
84
- return left > right
85
- }
42
+ const gt = ComparisonOperator(greaterThan)
86
43
 
87
44
  module.exports = gt