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/dist/flatMap.mjs CHANGED
@@ -1,10 +1,12 @@
1
1
  /**
2
- * rubico v1.9.7
2
+ * rubico v2.0.0
3
3
  * https://github.com/a-synchronous/rubico
4
- * (c) 2019-2021 Richard Tong
4
+ * (c) 2019-2023 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
6
6
  */
7
7
 
8
+ const isPromise = value => value != null && typeof value.then == 'function'
9
+
8
10
  const isArray = Array.isArray
9
11
 
10
12
  const objectValues = Object.values
@@ -56,8 +58,6 @@ const curry3 = function (baseFunc, arg0, arg1, arg2) {
56
58
  return curry3ResolveArg2(baseFunc, arg0, arg1)
57
59
  }
58
60
 
59
- const isPromise = value => value != null && typeof value.then == 'function'
60
-
61
61
  const iteratorReduceAsync = async function (
62
62
  iterator, reducer, result,
63
63
  ) {
@@ -289,13 +289,6 @@ const curry5 = function (baseFunc, arg0, arg1, arg2, arg3, arg4) {
289
289
 
290
290
  const objectKeys = Object.keys
291
291
 
292
- const objectGetFirstKey = function (object) {
293
- for (const key in object) {
294
- return key
295
- }
296
- return undefined
297
- }
298
-
299
292
  const objectReduceAsync = async function (object, reducer, result, keys, index) {
300
293
  const keysLength = keys.length
301
294
  while (++index < keysLength) {
@@ -356,24 +349,6 @@ const mapReduce = function (map, reducer, result) {
356
349
  return result
357
350
  }
358
351
 
359
- const funcConcatSync = (
360
- funcA, funcB,
361
- ) => function pipedFunction(...args) {
362
- return funcB(funcA(...args))
363
- }
364
-
365
- const generatorFunctionReduce = (
366
- generatorFunction, reducer, result,
367
- ) => funcConcatSync(
368
- generatorFunction,
369
- curry3(iteratorReduce, __, reducer, result))
370
-
371
- const asyncGeneratorFunctionReduce = (
372
- asyncGeneratorFunction, reducer, result,
373
- ) => funcConcatSync(
374
- asyncGeneratorFunction,
375
- curry3(asyncIteratorReduce, __, reducer, result))
376
-
377
352
  const reducerConcat = (
378
353
  reducerA, reducerB,
379
354
  ) => function pipedReducer(result, item) {
@@ -383,26 +358,10 @@ const reducerConcat = (
383
358
  : reducerB(intermediate, item)
384
359
  }
385
360
 
386
- const genericReduce = function (args, reducer, result) {
387
- const collection = args[0]
361
+ const genericReduce = function (collection, reducer, result) {
388
362
  if (isArray(collection)) {
389
363
  return arrayReduce(collection, reducer, result)
390
364
  }
391
- if (typeof collection == 'function') {
392
- if (isGeneratorFunction(collection)) {
393
- return generatorFunctionReduce(collection, reducer, result)
394
- }
395
- if (isAsyncGeneratorFunction(collection)) {
396
- return asyncGeneratorFunctionReduce(collection, reducer, result)
397
- }
398
- return curryArgs3(
399
- genericReduce,
400
- __,
401
- args.length == 1
402
- ? reducerConcat(reducer, collection)
403
- : args.reduce(reducerConcat, reducer),
404
- result)
405
- }
406
365
  if (collection == null) {
407
366
  return result === undefined
408
367
  ? curry2(reducer, collection, __)
@@ -461,7 +420,7 @@ const FlatMappingIterator = function (iterator, flatMapper) {
461
420
  return iteration
462
421
  }
463
422
  const monadAsArray = genericReduce(
464
- [flatMapper(iteration.value)],
423
+ flatMapper(iteration.value),
465
424
  arrayPush,
466
425
  []) // this will always have at least one item
467
426
  if (monadAsArray.length > 1) {
@@ -507,12 +466,12 @@ const FlatMappingAsyncIterator = function (asyncIterator, flatMapper) {
507
466
  } else {
508
467
  const monad = flatMapper(value)
509
468
  if (isPromise(monad)) {
510
- const bufferLoading = monad.then(
511
- curryArgs3(genericReduce, __, arrayPush, buffer))
469
+ const bufferLoading =
470
+ monad.then(curry3(genericReduce, __, arrayPush, buffer))
512
471
  const promise = bufferLoading.then(() => promises.delete(promise))
513
472
  promises.add(promise)
514
473
  } else {
515
- const bufferLoading = genericReduce([monad], arrayPush, buffer)
474
+ const bufferLoading = genericReduce(monad, arrayPush, buffer)
516
475
  if (isPromise(bufferLoading)) {
517
476
  const promise = bufferLoading.then(() => promises.delete(promise))
518
477
  promises.add(promise)
@@ -532,8 +491,6 @@ const FlatMappingAsyncIterator = function (asyncIterator, flatMapper) {
532
491
  }
533
492
  }
534
493
 
535
- const isBinary = ArrayBuffer.isView
536
-
537
494
  const always = value => function getter() { return value }
538
495
 
539
496
  const getArg1 = (arg0, arg1) => arg1
@@ -542,6 +499,12 @@ const identity = value => value
542
499
 
543
500
  const promiseAll = Promise.all.bind(Promise)
544
501
 
502
+ const funcConcatSync = (
503
+ funcA, funcB,
504
+ ) => function pipedFunction(...args) {
505
+ return funcB(funcA(...args))
506
+ }
507
+
545
508
  const asyncIteratorForEach = async function (asyncIterator, callback) {
546
509
  const promises = []
547
510
  for await (const item of asyncIterator) {
@@ -811,165 +774,10 @@ const stringFlatMap = function (string, flatMapper) {
811
774
  : arrayFlattenToString(monadArray)
812
775
  }
813
776
 
814
- const streamWrite = function (stream, chunk, encoding, callback) {
815
- stream.write(chunk, encoding, callback)
816
- return stream
817
- }
818
-
819
- const streamFlatExtend = async function (stream, item) {
820
- const resultStreamWrite = curry2(streamWrite, stream, __),
821
- // resultStreamWriteReducer = (_, subItem) => stream.write(subItem),
822
- resultStreamWriteReducer = funcConcatSync(getArg1, resultStreamWrite),
823
- promises = []
824
- if (isArray(item)) {
825
- const itemLength = item.length
826
- let itemIndex = -1
827
- while (++itemIndex < itemLength) {
828
- stream.write(item[itemIndex])
829
- }
830
- } else if (item == null) {
831
- stream.write(item)
832
- } else if (typeof item[symbolIterator] == 'function') {
833
- for (const subItem of item) {
834
- stream.write(subItem)
835
- }
836
- } else if (typeof item[symbolAsyncIterator] == 'function') {
837
- promises.push(
838
- asyncIteratorForEach(item[symbolAsyncIterator](), resultStreamWrite))
839
- } else if (typeof item.chain == 'function') {
840
- const monadValue = item.chain(identity)
841
- isPromise(monadValue)
842
- ? promises.push(monadValue.then(resultStreamWrite))
843
- : stream.write(monadValue)
844
- } else if (typeof item.flatMap == 'function') {
845
- const monadValue = item.flatMap(identity)
846
- isPromise(monadValue)
847
- ? promises.push(monadValue.then(resultStreamWrite))
848
- : stream.write(monadValue)
849
- } else if (typeof item.reduce == 'function') {
850
- const folded = item.reduce(resultStreamWriteReducer, null)
851
- isPromise(folded) && promises.push(folded)
852
- } else if (item.constructor == Object) {
853
- for (const key in item) {
854
- stream.write(item[key])
855
- }
856
- } else {
857
- stream.write(item)
858
- }
859
- return promises.length == 0
860
- ? stream
861
- : promiseAll(promises).then(always(stream))
862
- }
863
-
864
- const streamFlatMap = async function (stream, flatMapper) {
865
- const promises = new Set()
866
- for await (const item of stream) {
867
- const monad = flatMapper(item)
868
- if (isPromise(monad)) {
869
- const selfDeletingPromise = monad.then(
870
- curry2(streamFlatExtend, stream, __)).then(
871
- () => promises.delete(selfDeletingPromise))
872
- promises.add(selfDeletingPromise)
873
- } else {
874
- const streamFlatteningOperation = streamFlatExtend(stream, monad)
875
- if (isPromise(streamFlatteningOperation)) {
876
- const selfDeletingPromise = streamFlatteningOperation.then(
877
- () => promises.delete(selfDeletingPromise))
878
- promises.add(selfDeletingPromise)
879
- }
880
- }
881
- }
882
- await promiseAll(promises)
883
- return stream
884
- }
885
-
886
- const globalThisHasBuffer = typeof Buffer == 'function'
887
-
888
- const noop = function () {}
889
-
890
- const bufferAlloc = globalThisHasBuffer ? Buffer.alloc : noop
891
-
892
- const _binaryExtend = function (typedArray, array) {
893
- const offset = typedArray.length
894
- const result = globalThisHasBuffer && typedArray.constructor == Buffer
895
- ? bufferAlloc(offset + array.length)
896
- : new typedArray.constructor(offset + array.length)
897
- result.set(typedArray)
898
- result.set(array, offset)
899
- return result
900
- }
901
-
902
- const binaryExtend = function (typedArray, array) {
903
- if (isArray(array) || isBinary(array)) {
904
- return _binaryExtend(typedArray, array)
905
- }
906
- return _binaryExtend(typedArray, [array])
907
- }
908
-
909
- const arrayJoinToBinary = function (array, init) {
910
- const length = array.length
911
- let index = -1,
912
- result = init
913
- while (++index < length) {
914
- result = binaryExtend(result, array[index])
915
- }
916
- return result
917
- }
918
-
919
- const arrayFlattenToBinary = function (array, result) {
920
- const flattened = arrayFlatten(array)
921
- return isPromise(flattened)
922
- ? flattened.then(curry2(arrayJoinToBinary, __, result))
923
- : arrayJoinToBinary(flattened, result)
924
- }
925
-
926
- const binaryFlatMap = function (binary, flatMapper) {
927
- const monadArray = arrayMap(binary, flatMapper),
928
- result = globalThisHasBuffer && binary.constructor == Buffer
929
- ? bufferAlloc(0)
930
- : new binary.constructor(0)
931
- return isPromise(monadArray)
932
- ? monadArray.then(curry2(arrayFlattenToBinary, __, result))
933
- : arrayFlattenToBinary(monadArray, result)
934
- }
935
-
936
- const reducerFlatMap = (
937
- reducer, flatMapper,
938
- ) => function flatMappingReducer(result, value) {
939
- const monad = flatMapper(value)
940
- return isPromise(monad)
941
- ? monad.then(curryArgs3(genericReduce, __, reducer, result))
942
- : genericReduce([monad], reducer, result)
943
- }
944
-
945
- const generatorFunctionFlatMap = (
946
- generatorFunction, flatMapper,
947
- ) => function* flatMappingGeneratorFunction(...args) {
948
- yield* FlatMappingIterator(generatorFunction(...args), flatMapper)
949
- }
950
-
951
- const asyncGeneratorFunctionFlatMap = (
952
- asyncGeneratorFunction, flatMapper,
953
- ) => async function* flatMappingAsyncGeneratorFunction(...args) {
954
- yield* FlatMappingAsyncIterator(asyncGeneratorFunction(...args), flatMapper)
955
- }
956
-
957
- const flatMap = flatMapper => function flatMapping(value) {
777
+ const _flatMap = function (value, flatMapper) {
958
778
  if (isArray(value)) {
959
779
  return arrayFlatMap(value, flatMapper)
960
780
  }
961
- if (typeof value == 'function') {
962
- if (isGeneratorFunction(value)) {
963
- return generatorFunctionFlatMap(value, flatMapper)
964
- }
965
- if (isAsyncGeneratorFunction(value)) {
966
- return asyncGeneratorFunctionFlatMap(value, flatMapper)
967
- }
968
- return reducerFlatMap(value, flatMapper)
969
- }
970
- if (isBinary(value)) {
971
- return binaryFlatMap(value, flatMapper)
972
- }
973
781
  if (value == null) {
974
782
  return flatMapper(value)
975
783
  }
@@ -988,12 +796,6 @@ const flatMap = flatMapper => function flatMapping(value) {
988
796
  if (typeof value.flatMap == 'function') {
989
797
  return value.flatMap(flatMapper)
990
798
  }
991
- if (
992
- typeof value[symbolAsyncIterator] == 'function'
993
- && typeof value.write == 'function'
994
- ) {
995
- return streamFlatMap(value, flatMapper)
996
- }
997
799
  const valueConstructor = value.constructor
998
800
  if (valueConstructor == Object) {
999
801
  return objectFlatMap(value, flatMapper)
@@ -1007,4 +809,15 @@ const flatMap = flatMapper => function flatMapping(value) {
1007
809
  return flatMapper(value)
1008
810
  }
1009
811
 
812
+ const flatMap = (...args) => {
813
+ const flatMapper = args.pop()
814
+ if (args.length == 0) {
815
+ return curry2(_flatMap, __, flatMapper)
816
+ }
817
+ const collection = args[0]
818
+ return isPromise(collection)
819
+ ? collection.then(curry2(_flatMap, __, flatMapper))
820
+ : _flatMap(args[0], flatMapper)
821
+ }
822
+
1010
823
  export default flatMap
@@ -1,10 +1,34 @@
1
1
  /**
2
- * rubico v1.9.7
2
+ * rubico v2.0.0
3
3
  * https://github.com/a-synchronous/rubico
4
- * (c) 2019-2021 Richard Tong
4
+ * (c) 2019-2023 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
6
6
  */
7
7
 
8
+ const isPromise = value => value != null && typeof value.then == 'function'
9
+
10
+ const __ = Symbol.for('placeholder')
11
+
12
+ // argument resolver for curry2
13
+ const curry2ResolveArg0 = (
14
+ baseFunc, arg1,
15
+ ) => function arg0Resolver(arg0) {
16
+ return baseFunc(arg0, arg1)
17
+ }
18
+
19
+ // argument resolver for curry2
20
+ const curry2ResolveArg1 = (
21
+ baseFunc, arg0,
22
+ ) => function arg1Resolver(arg1) {
23
+ return baseFunc(arg0, arg1)
24
+ }
25
+
26
+ const curry2 = function (baseFunc, arg0, arg1) {
27
+ return arg0 == __
28
+ ? curry2ResolveArg0(baseFunc, arg1)
29
+ : curry2ResolveArg1(baseFunc, arg0)
30
+ }
31
+
8
32
  const isArray = Array.isArray
9
33
 
10
34
  const objectProto = Object.prototype
@@ -21,8 +45,6 @@ const asyncGeneratorFunctionTag = '[object AsyncGeneratorFunction]'
21
45
 
22
46
  const isAsyncGeneratorFunction = value => objectToString(value) == asyncGeneratorFunctionTag
23
47
 
24
- const isPromise = value => value != null && typeof value.then == 'function'
25
-
26
48
  const promiseAll = Promise.all.bind(Promise)
27
49
 
28
50
  const always = value => function getter() { return value }
@@ -74,83 +96,43 @@ const asyncIteratorForEach = async function (asyncIterator, callback) {
74
96
  : promiseAll(promises).then(always(asyncIterator))
75
97
  }
76
98
 
77
- const generatorFunctionForEach = (
78
- generatorFunction, callback,
79
- ) => function* executingCallbackForEach(...args) {
80
- const promises = [],
81
- generator = generatorFunction(...args)
82
- for (const item of generator) {
83
- const operation = callback(item)
84
- if (isPromise(operation)) {
85
- promises.push(operation)
86
- }
87
- }
88
- return promises.length == 0 ? generator
89
- : promiseAll(promises).then(always(generator))
90
- }
91
-
92
- const asyncGeneratorFunctionForEach = (
93
- asyncGeneratorFunction, callback,
94
- ) => async function* executingCallbackForEach(...args) {
95
- const promises = [],
96
- asyncIterator = asyncGeneratorFunction(...args)
97
- for await (const item of asyncIterator) {
98
- const operation = callback(item)
99
- if (isPromise(operation)) {
100
- promises.push(operation)
101
- }
102
- }
103
- return promises.length == 0 ? asyncIterator
104
- : promiseAll(promises).then(always(asyncIterator))
105
- }
106
-
107
- const thunkify2 = (func, arg0, arg1) => function thunk() {
108
- return func(arg0, arg1)
109
- }
110
-
111
- const reducerForEach = (
112
- reducer, callback,
113
- ) => function executingForEach(result, item) {
114
- const operation = callback(item)
115
- if (isPromise(operation)) {
116
- return operation.then(thunkify2(reducer, result, item))
117
- }
118
- return reducer(result, item)
119
- }
120
-
121
99
  const symbolIterator = Symbol.iterator
122
100
 
123
101
  const symbolAsyncIterator = Symbol.asyncIterator
124
102
 
125
- const forEach = callback => function executingCallbackForEach(value) {
126
- if (isArray(value)) {
127
- return arrayForEach(value, callback)
103
+ // type Collection = Array|Iterable|AsyncIterable|{ forEach: function }|Object
104
+ // _forEach(collection Collection, callback function) -> collection Collection
105
+ const _forEach = function (collection, callback) {
106
+ if (isArray(collection)) {
107
+ return arrayForEach(collection, callback)
128
108
  }
129
- if (typeof value == 'function') {
130
- if (isGeneratorFunction(value)) {
131
- return generatorFunctionForEach(value, callback)
132
- }
133
- if (isAsyncGeneratorFunction(value)) {
134
- return asyncGeneratorFunctionForEach(value, callback)
135
- }
136
- return reducerForEach(value, callback)
109
+ if (collection == null) {
110
+ return collection
137
111
  }
138
- if (value == null) {
139
- return value
112
+ if (typeof collection.forEach == 'function') {
113
+ return collection.forEach(callback)
140
114
  }
141
- if (typeof value.forEach == 'function') {
142
- return value.forEach(callback)
115
+ if (typeof collection[symbolIterator] == 'function') {
116
+ return iteratorForEach(collection[symbolIterator](), callback)
143
117
  }
144
- if (typeof value[symbolIterator] == 'function') {
145
- return iteratorForEach(value[symbolIterator](), callback)
118
+ if (typeof collection[symbolAsyncIterator] == 'function') {
119
+ return asyncIteratorForEach(collection[symbolAsyncIterator](), callback)
146
120
  }
147
- if (typeof value[symbolAsyncIterator] == 'function') {
148
- return asyncIteratorForEach(value[symbolAsyncIterator](), callback)
121
+ if (collection.constructor == Object) {
122
+ return objectForEach(collection, callback)
149
123
  }
150
- if (value.constructor == Object) {
151
- return objectForEach(value, callback)
124
+ return collection
125
+ }
126
+
127
+ const forEach = function (...args) {
128
+ const callback = args.pop()
129
+ if (args.length == 0) {
130
+ return curry2(_forEach, __, callback)
152
131
  }
153
- return value
132
+ const collection = args[0]
133
+ return isPromise(collection)
134
+ ? collection.then(curry2(_forEach, __, callback))
135
+ : _forEach(collection, callback)
154
136
  }
155
137
 
156
138
  export default forEach
@@ -0,0 +1,7 @@
1
+ /**
2
+ * rubico v2.0.0
3
+ * https://github.com/a-synchronous/rubico
4
+ * (c) 2019-2023 Richard Tong
5
+ * rubico may be freely distributed under the MIT license.
6
+ */
7
+ const isPromise=r=>null!=r&&"function"==typeof r.then,__=Symbol.for("placeholder"),curry2ResolveArg0=(r,o)=>function(t){return r(t,o)},curry2ResolveArg1=(r,o)=>function(t){return r(o,t)},curry2=function(r,o,t){return o==__?curry2ResolveArg0(r,t):curry2ResolveArg1(r,o)},isArray=Array.isArray,objectProto=Object.prototype,nativeObjectToString=objectProto.toString,objectToString=r=>nativeObjectToString.call(r),generatorFunctionTag="[object GeneratorFunction]",isGeneratorFunction=r=>objectToString(r)==generatorFunctionTag,asyncGeneratorFunctionTag="[object AsyncGeneratorFunction]",isAsyncGeneratorFunction=r=>objectToString(r)==asyncGeneratorFunctionTag,promiseAll=Promise.all.bind(Promise),always=r=>function(){return r},arrayForEach=function(r,o){const t=r.length,n=[];let e=-1;for(;++e<t;){const t=o(r[e]);isPromise(t)&&n.push(t)}return 0==n.length?r:promiseAll(n).then(always(r))},objectForEach=function(r,o){const t=[];for(const n in r){const e=o(r[n]);isPromise(e)&&t.push(e)}return 0==t.length?r:promiseAll(t).then(always(r))},iteratorForEach=function(r,o){const t=[];for(const n of r){const r=o(n);isPromise(r)&&t.push(r)}return 0==t.length?r:promiseAll(t).then(always(r))},asyncIteratorForEach=async function(r,o){const t=[];for await(const n of r){const r=o(n);isPromise(r)&&t.push(r)}return 0==t.length?r:promiseAll(t).then(always(r))},symbolIterator=Symbol.iterator,symbolAsyncIterator=Symbol.asyncIterator,_forEach=function(r,o){return isArray(r)?arrayForEach(r,o):null==r?r:"function"==typeof r.forEach?r.forEach(o):"function"==typeof r[symbolIterator]?iteratorForEach(r[symbolIterator](),o):"function"==typeof r[symbolAsyncIterator]?asyncIteratorForEach(r[symbolAsyncIterator](),o):r.constructor==Object?objectForEach(r,o):r},forEach=function(...r){const o=r.pop();if(0==r.length)return curry2(_forEach,__,o);const t=r[0];return isPromise(t)?t.then(curry2(_forEach,__,o)):_forEach(t,o)};export default forEach;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * rubico v1.9.7
2
+ * rubico v2.0.0
3
3
  * https://github.com/a-synchronous/rubico
4
- * (c) 2019-2021 Richard Tong
4
+ * (c) 2019-2023 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
6
6
  */
7
7
 
@@ -11,6 +11,30 @@
11
11
  else (root.forEach = forEach) // Browser
12
12
  }(typeof globalThis == 'object' ? globalThis : this, (function () { 'use strict'
13
13
 
14
+ const isPromise = value => value != null && typeof value.then == 'function'
15
+
16
+ const __ = Symbol.for('placeholder')
17
+
18
+ // argument resolver for curry2
19
+ const curry2ResolveArg0 = (
20
+ baseFunc, arg1,
21
+ ) => function arg0Resolver(arg0) {
22
+ return baseFunc(arg0, arg1)
23
+ }
24
+
25
+ // argument resolver for curry2
26
+ const curry2ResolveArg1 = (
27
+ baseFunc, arg0,
28
+ ) => function arg1Resolver(arg1) {
29
+ return baseFunc(arg0, arg1)
30
+ }
31
+
32
+ const curry2 = function (baseFunc, arg0, arg1) {
33
+ return arg0 == __
34
+ ? curry2ResolveArg0(baseFunc, arg1)
35
+ : curry2ResolveArg1(baseFunc, arg0)
36
+ }
37
+
14
38
  const isArray = Array.isArray
15
39
 
16
40
  const objectProto = Object.prototype
@@ -27,8 +51,6 @@ const asyncGeneratorFunctionTag = '[object AsyncGeneratorFunction]'
27
51
 
28
52
  const isAsyncGeneratorFunction = value => objectToString(value) == asyncGeneratorFunctionTag
29
53
 
30
- const isPromise = value => value != null && typeof value.then == 'function'
31
-
32
54
  const promiseAll = Promise.all.bind(Promise)
33
55
 
34
56
  const always = value => function getter() { return value }
@@ -80,83 +102,43 @@ const asyncIteratorForEach = async function (asyncIterator, callback) {
80
102
  : promiseAll(promises).then(always(asyncIterator))
81
103
  }
82
104
 
83
- const generatorFunctionForEach = (
84
- generatorFunction, callback,
85
- ) => function* executingCallbackForEach(...args) {
86
- const promises = [],
87
- generator = generatorFunction(...args)
88
- for (const item of generator) {
89
- const operation = callback(item)
90
- if (isPromise(operation)) {
91
- promises.push(operation)
92
- }
93
- }
94
- return promises.length == 0 ? generator
95
- : promiseAll(promises).then(always(generator))
96
- }
97
-
98
- const asyncGeneratorFunctionForEach = (
99
- asyncGeneratorFunction, callback,
100
- ) => async function* executingCallbackForEach(...args) {
101
- const promises = [],
102
- asyncIterator = asyncGeneratorFunction(...args)
103
- for await (const item of asyncIterator) {
104
- const operation = callback(item)
105
- if (isPromise(operation)) {
106
- promises.push(operation)
107
- }
108
- }
109
- return promises.length == 0 ? asyncIterator
110
- : promiseAll(promises).then(always(asyncIterator))
111
- }
112
-
113
- const thunkify2 = (func, arg0, arg1) => function thunk() {
114
- return func(arg0, arg1)
115
- }
116
-
117
- const reducerForEach = (
118
- reducer, callback,
119
- ) => function executingForEach(result, item) {
120
- const operation = callback(item)
121
- if (isPromise(operation)) {
122
- return operation.then(thunkify2(reducer, result, item))
123
- }
124
- return reducer(result, item)
125
- }
126
-
127
105
  const symbolIterator = Symbol.iterator
128
106
 
129
107
  const symbolAsyncIterator = Symbol.asyncIterator
130
108
 
131
- const forEach = callback => function executingCallbackForEach(value) {
132
- if (isArray(value)) {
133
- return arrayForEach(value, callback)
109
+ // type Collection = Array|Iterable|AsyncIterable|{ forEach: function }|Object
110
+ // _forEach(collection Collection, callback function) -> collection Collection
111
+ const _forEach = function (collection, callback) {
112
+ if (isArray(collection)) {
113
+ return arrayForEach(collection, callback)
134
114
  }
135
- if (typeof value == 'function') {
136
- if (isGeneratorFunction(value)) {
137
- return generatorFunctionForEach(value, callback)
138
- }
139
- if (isAsyncGeneratorFunction(value)) {
140
- return asyncGeneratorFunctionForEach(value, callback)
141
- }
142
- return reducerForEach(value, callback)
115
+ if (collection == null) {
116
+ return collection
143
117
  }
144
- if (value == null) {
145
- return value
118
+ if (typeof collection.forEach == 'function') {
119
+ return collection.forEach(callback)
146
120
  }
147
- if (typeof value.forEach == 'function') {
148
- return value.forEach(callback)
121
+ if (typeof collection[symbolIterator] == 'function') {
122
+ return iteratorForEach(collection[symbolIterator](), callback)
149
123
  }
150
- if (typeof value[symbolIterator] == 'function') {
151
- return iteratorForEach(value[symbolIterator](), callback)
124
+ if (typeof collection[symbolAsyncIterator] == 'function') {
125
+ return asyncIteratorForEach(collection[symbolAsyncIterator](), callback)
152
126
  }
153
- if (typeof value[symbolAsyncIterator] == 'function') {
154
- return asyncIteratorForEach(value[symbolAsyncIterator](), callback)
127
+ if (collection.constructor == Object) {
128
+ return objectForEach(collection, callback)
155
129
  }
156
- if (value.constructor == Object) {
157
- return objectForEach(value, callback)
130
+ return collection
131
+ }
132
+
133
+ const forEach = function (...args) {
134
+ const callback = args.pop()
135
+ if (args.length == 0) {
136
+ return curry2(_forEach, __, callback)
158
137
  }
159
- return value
138
+ const collection = args[0]
139
+ return isPromise(collection)
140
+ ? collection.then(curry2(_forEach, __, callback))
141
+ : _forEach(collection, callback)
160
142
  }
161
143
 
162
144
  return forEach
@@ -0,0 +1,8 @@
1
+ /**
2
+ * rubico v2.0.0
3
+ * https://github.com/a-synchronous/rubico
4
+ * (c) 2019-2023 Richard Tong
5
+ * rubico may be freely distributed under the MIT license.
6
+ */
7
+
8
+ !function(n,t){"object"==typeof module?module.exports=t:"function"==typeof define?define((()=>t)):n.forEach=t}("object"==typeof globalThis?globalThis:this,function(){"use strict";const n=n=>null!=n&&"function"==typeof n.then,t=Symbol.for("placeholder"),o=function(n,o,e){return o==t?((n,t)=>function(o){return n(o,t)})(n,e):((n,t)=>function(o){return n(t,o)})(n,o)},e=Array.isArray,r=(Object.prototype.toString,Promise.all.bind(Promise)),c=n=>function(){return n},u=Symbol.iterator,f=Symbol.asyncIterator,i=function(t,o){return e(t)?function(t,o){const e=t.length,u=[];let f=-1;for(;++f<e;){const e=o(t[f]);n(e)&&u.push(e)}return 0==u.length?t:r(u).then(c(t))}(t,o):null==t?t:"function"==typeof t.forEach?t.forEach(o):"function"==typeof t[u]?function(t,o){const e=[];for(const r of t){const t=o(r);n(t)&&e.push(t)}return 0==e.length?t:r(e).then(c(t))}(t[u](),o):"function"==typeof t[f]?async function(t,o){const e=[];for await(const r of t){const t=o(r);n(t)&&e.push(t)}return 0==e.length?t:r(e).then(c(t))}(t[f](),o):t.constructor==Object?function(t,o){const e=[];for(const r in t){const c=o(t[r]);n(c)&&e.push(c)}return 0==e.length?t:r(e).then(c(t))}(t,o):t};return function(...e){const r=e.pop();if(0==e.length)return o(i,t,r);const c=e[0];return n(c)?c.then(o(i,t,r)):i(c,r)}}());
@@ -0,0 +1,7 @@
1
+ /**
2
+ * rubico v2.0.0
3
+ * https://github.com/a-synchronous/rubico
4
+ * (c) 2019-2023 Richard Tong
5
+ * rubico may be freely distributed under the MIT license.
6
+ */
7
+ const isPromise=r=>null!=r&&"function"==typeof r.then,__=Symbol.for("placeholder"),curry2ResolveArg0=(r,o)=>function(t){return r(t,o)},curry2ResolveArg1=(r,o)=>function(t){return r(o,t)},curry2=function(r,o,t){return o==__?curry2ResolveArg0(r,t):curry2ResolveArg1(r,o)},isArray=Array.isArray,objectProto=Object.prototype,nativeObjectToString=objectProto.toString,objectToString=r=>nativeObjectToString.call(r),generatorFunctionTag="[object GeneratorFunction]",isGeneratorFunction=r=>objectToString(r)==generatorFunctionTag,asyncGeneratorFunctionTag="[object AsyncGeneratorFunction]",isAsyncGeneratorFunction=r=>objectToString(r)==asyncGeneratorFunctionTag,promiseAll=Promise.all.bind(Promise),always=r=>function(){return r},arrayForEach=function(r,o){const t=r.length,n=[];let e=-1;for(;++e<t;){const t=o(r[e]);isPromise(t)&&n.push(t)}return 0==n.length?r:promiseAll(n).then(always(r))},objectForEach=function(r,o){const t=[];for(const n in r){const e=o(r[n]);isPromise(e)&&t.push(e)}return 0==t.length?r:promiseAll(t).then(always(r))},iteratorForEach=function(r,o){const t=[];for(const n of r){const r=o(n);isPromise(r)&&t.push(r)}return 0==t.length?r:promiseAll(t).then(always(r))},asyncIteratorForEach=async function(r,o){const t=[];for await(const n of r){const r=o(n);isPromise(r)&&t.push(r)}return 0==t.length?r:promiseAll(t).then(always(r))},symbolIterator=Symbol.iterator,symbolAsyncIterator=Symbol.asyncIterator,_forEach=function(r,o){return isArray(r)?arrayForEach(r,o):null==r?r:"function"==typeof r.forEach?r.forEach(o):"function"==typeof r[symbolIterator]?iteratorForEach(r[symbolIterator](),o):"function"==typeof r[symbolAsyncIterator]?asyncIteratorForEach(r[symbolAsyncIterator](),o):r.constructor==Object?objectForEach(r,o):r},forEach=function(...r){const o=r.pop();if(0==r.length)return curry2(_forEach,__,o);const t=r[0];return isPromise(t)?t.then(curry2(_forEach,__,o)):_forEach(t,o)};export default forEach;