rubico 1.9.7 → 2.0.1

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 (593) 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/README.md +158 -81
  8. package/Transducer.js +75 -26
  9. package/Transducer.test.js +117 -0
  10. package/_internal/ComparisonOperator.js +68 -0
  11. package/_internal/File.js +41 -0
  12. package/_internal/FlatMappingAsyncIterator.js +4 -4
  13. package/_internal/FlatMappingIterator.js +1 -1
  14. package/_internal/TimeInLoopSuite.js +138 -0
  15. package/_internal/areAnyValuesPromises.js +23 -0
  16. package/_internal/{arrayAll.js → arrayEvery.js} +4 -4
  17. package/_internal/arrayExtend.js +3 -2
  18. package/_internal/arrayFilter.js +3 -4
  19. package/_internal/{arrayAny.js → arraySome.js} +8 -8
  20. package/_internal/{asyncIteratorAll.js → asyncIteratorEvery.js} +4 -4
  21. package/_internal/{asyncIteratorAny.js → asyncIteratorSome.js} +4 -4
  22. package/_internal/curry4.test.js +25 -0
  23. package/_internal/curry5.test.js +29 -0
  24. package/_internal/curryArgs2.js +43 -0
  25. package/_internal/curryArgs3.test.js +21 -0
  26. package/_internal/curryArgs4.js +65 -0
  27. package/_internal/curryArgs4.test.js +25 -0
  28. package/_internal/equals.js +13 -0
  29. package/_internal/findAllFilePaths.js +22 -0
  30. package/_internal/funcApply.js +2 -0
  31. package/_internal/funcCall.js +14 -0
  32. package/_internal/functionArrayAll.js +26 -0
  33. package/_internal/functionArrayAllSeries.js +55 -0
  34. package/_internal/functionObjectAll.js +32 -0
  35. package/_internal/genericReduce.js +4 -22
  36. package/_internal/genericTransform.js +15 -15
  37. package/_internal/improvedGenericTransform.js +93 -0
  38. package/_internal/{iteratorAll.js → iteratorEvery.js} +4 -4
  39. package/_internal/{iteratorAny.js → iteratorSome.js} +6 -6
  40. package/_internal/leftResolverRightResolverCompare.js +19 -0
  41. package/_internal/leftResolverRightValueCompare.js +16 -0
  42. package/_internal/leftValueRightResolverCompare.js +16 -0
  43. package/_internal/objectReduce.js +0 -1
  44. package/_internal/pathResolve.js +6 -0
  45. package/_internal/{reducerAll.js → reducerEvery.js} +4 -4
  46. package/_internal/reducerFlatMap.js +4 -4
  47. package/_internal/reducerFlatten.js +1 -1
  48. package/_internal/{reducerAny.js → reducerSome.js} +4 -4
  49. package/_internal/timeInLoop.js +37 -0
  50. package/_internal/timeInLoop.test.js +18 -0
  51. package/_internal/timeInLoopAsync.js +35 -0
  52. package/_internal/timeInLoopAsync.test.js +22 -0
  53. package/all.js +106 -40
  54. package/and.js +54 -36
  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 +18 -8
  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/build +472 -0
  136. package/compose.js +46 -0
  137. package/dist/Transducer.es.js +481 -0
  138. package/dist/Transducer.es.min.js +7 -0
  139. package/dist/Transducer.js +488 -0
  140. package/dist/Transducer.min.js +8 -0
  141. package/dist/Transducer.mjs +481 -0
  142. package/dist/__.es.js +2 -2
  143. package/dist/__.es.min.js +2 -2
  144. package/dist/__.js +2 -2
  145. package/dist/__.min.js +2 -2
  146. package/dist/__.mjs +2 -2
  147. package/dist/all.es.js +173 -92
  148. package/dist/all.es.min.js +3 -3
  149. package/dist/all.js +173 -92
  150. package/dist/all.min.js +3 -3
  151. package/dist/all.mjs +173 -92
  152. package/dist/always.es.js +2 -2
  153. package/dist/always.es.min.js +2 -2
  154. package/dist/always.js +2 -2
  155. package/dist/always.min.js +2 -2
  156. package/dist/always.mjs +2 -2
  157. package/dist/and.es.js +101 -32
  158. package/dist/and.es.min.js +3 -3
  159. package/dist/and.js +101 -32
  160. package/dist/and.min.js +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.mjs +37 -10
  167. package/dist/compose.es.js +71 -0
  168. package/dist/compose.es.min.js +7 -0
  169. package/dist/compose.js +78 -0
  170. package/dist/compose.min.js +8 -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.mjs +2 -2
  177. package/dist/eq.es.js +172 -49
  178. package/dist/eq.es.min.js +3 -3
  179. package/dist/eq.js +172 -49
  180. package/dist/eq.min.js +3 -3
  181. package/dist/eq.mjs +172 -49
  182. package/dist/every.es.js +194 -0
  183. package/dist/every.es.min.js +7 -0
  184. package/dist/every.js +201 -0
  185. package/dist/every.min.js +8 -0
  186. package/dist/every.mjs +194 -0
  187. package/dist/filter.es.js +14 -108
  188. package/dist/filter.es.min.js +3 -3
  189. package/dist/filter.js +14 -108
  190. package/dist/filter.min.js +3 -3
  191. package/dist/filter.mjs +14 -108
  192. package/dist/flatMap.es.js +27 -214
  193. package/dist/flatMap.es.min.js +3 -3
  194. package/dist/flatMap.js +27 -214
  195. package/dist/flatMap.min.js +3 -3
  196. package/dist/flatMap.mjs +27 -214
  197. package/dist/{x/forEach.es.js → forEach.es.js} +52 -70
  198. package/dist/forEach.es.min.js +7 -0
  199. package/dist/{x/forEach.js → forEach.js} +52 -70
  200. package/dist/forEach.min.js +8 -0
  201. package/dist/{x/forEach.mjs → forEach.mjs} +52 -70
  202. package/dist/get.es.js +60 -5
  203. package/dist/get.es.min.js +3 -3
  204. package/dist/get.js +60 -5
  205. package/dist/get.min.js +3 -3
  206. package/dist/get.mjs +60 -5
  207. package/dist/gt.es.js +171 -48
  208. package/dist/gt.es.min.js +3 -3
  209. package/dist/gt.js +171 -48
  210. package/dist/gt.min.js +3 -3
  211. package/dist/gt.mjs +171 -48
  212. package/dist/gte.es.js +171 -48
  213. package/dist/gte.es.min.js +3 -3
  214. package/dist/gte.js +171 -48
  215. package/dist/gte.min.js +3 -3
  216. package/dist/gte.mjs +171 -48
  217. package/dist/lt.es.js +171 -48
  218. package/dist/lt.es.min.js +3 -3
  219. package/dist/lt.js +171 -48
  220. package/dist/lt.min.js +3 -3
  221. package/dist/lt.mjs +171 -48
  222. package/dist/lte.es.js +171 -48
  223. package/dist/lte.es.min.js +3 -3
  224. package/dist/lte.js +171 -48
  225. package/dist/lte.min.js +3 -3
  226. package/dist/lte.mjs +171 -48
  227. package/dist/map.es.js +12 -101
  228. package/dist/map.es.min.js +3 -3
  229. package/dist/map.js +12 -101
  230. package/dist/map.min.js +3 -3
  231. package/dist/map.mjs +12 -101
  232. package/dist/not.es.js +75 -14
  233. package/dist/not.es.min.js +3 -3
  234. package/dist/not.js +75 -14
  235. package/dist/not.min.js +3 -3
  236. package/dist/not.mjs +75 -14
  237. package/dist/omit.es.js +7 -2
  238. package/dist/omit.es.min.js +3 -3
  239. package/dist/omit.js +7 -2
  240. package/dist/omit.min.js +3 -3
  241. package/dist/omit.mjs +7 -2
  242. package/dist/or.es.js +99 -31
  243. package/dist/or.es.min.js +3 -3
  244. package/dist/or.js +99 -31
  245. package/dist/or.min.js +3 -3
  246. package/dist/or.mjs +99 -31
  247. package/dist/pick.es.js +8 -3
  248. package/dist/pick.es.min.js +3 -3
  249. package/dist/pick.js +8 -3
  250. package/dist/pick.min.js +3 -3
  251. package/dist/pick.mjs +8 -3
  252. package/dist/pipe.es.js +42 -46
  253. package/dist/pipe.es.min.js +3 -3
  254. package/dist/pipe.js +42 -46
  255. package/dist/pipe.min.js +3 -3
  256. package/dist/pipe.mjs +42 -46
  257. package/dist/reduce.es.js +52 -94
  258. package/dist/reduce.es.min.js +3 -3
  259. package/dist/reduce.js +52 -94
  260. package/dist/reduce.min.js +3 -3
  261. package/dist/reduce.mjs +52 -94
  262. package/dist/rubico.es.js +762 -883
  263. package/dist/rubico.es.min.js +3 -3
  264. package/dist/rubico.global.js +2794 -0
  265. package/dist/rubico.global.min.js +8 -0
  266. package/dist/rubico.js +739 -869
  267. package/dist/rubico.min.js +3 -3
  268. package/dist/rubico.mjs +762 -883
  269. package/dist/set.es.js +18 -3
  270. package/dist/set.es.min.js +3 -3
  271. package/dist/set.js +18 -3
  272. package/dist/set.min.js +3 -3
  273. package/dist/set.mjs +18 -3
  274. package/dist/{any.js → some.es.js} +64 -54
  275. package/dist/some.es.min.js +7 -0
  276. package/dist/{any.mjs → some.js} +72 -48
  277. package/dist/some.min.js +8 -0
  278. package/dist/{any.es.js → some.mjs} +65 -48
  279. package/dist/switchCase.es.js +55 -5
  280. package/dist/switchCase.es.min.js +3 -3
  281. package/dist/switchCase.js +55 -5
  282. package/dist/switchCase.min.js +3 -3
  283. package/dist/switchCase.mjs +55 -5
  284. package/dist/tap.es.js +2 -9
  285. package/dist/tap.es.min.js +3 -3
  286. package/dist/tap.js +2 -9
  287. package/dist/tap.min.js +3 -3
  288. package/dist/tap.mjs +2 -9
  289. package/dist/thunkify.es.js +45 -2
  290. package/dist/thunkify.es.min.js +3 -3
  291. package/dist/thunkify.js +45 -2
  292. package/dist/thunkify.min.js +3 -3
  293. package/dist/thunkify.mjs +45 -2
  294. package/dist/transform.es.js +35 -71
  295. package/dist/transform.es.min.js +3 -3
  296. package/dist/transform.js +35 -71
  297. package/dist/transform.min.js +3 -3
  298. package/dist/transform.mjs +35 -71
  299. package/dist/tryCatch.es.js +33 -17
  300. package/dist/tryCatch.es.min.js +3 -3
  301. package/dist/tryCatch.js +33 -17
  302. package/dist/tryCatch.min.js +3 -3
  303. package/dist/tryCatch.mjs +33 -17
  304. package/dist/x/append.es.js +2 -2
  305. package/dist/x/append.es.min.js +2 -2
  306. package/dist/x/append.js +2 -2
  307. package/dist/x/append.min.js +2 -2
  308. package/dist/x/append.mjs +2 -2
  309. package/dist/x/callProp.es.js +2 -2
  310. package/dist/x/callProp.es.min.js +2 -2
  311. package/dist/x/callProp.js +2 -2
  312. package/dist/x/callProp.min.js +2 -2
  313. package/dist/x/callProp.mjs +2 -2
  314. package/dist/x/defaultsDeep.es.js +2 -2
  315. package/dist/x/defaultsDeep.es.min.js +2 -2
  316. package/dist/x/defaultsDeep.js +2 -2
  317. package/dist/x/defaultsDeep.min.js +2 -2
  318. package/dist/x/defaultsDeep.mjs +2 -2
  319. package/dist/x/differenceWith.es.js +7 -7
  320. package/dist/x/differenceWith.es.min.js +3 -3
  321. package/dist/x/differenceWith.js +7 -7
  322. package/dist/x/differenceWith.min.js +2 -2
  323. package/dist/x/differenceWith.mjs +7 -7
  324. package/dist/x/filterOut.es.js +60 -117
  325. package/dist/x/filterOut.es.min.js +3 -3
  326. package/dist/x/filterOut.js +60 -117
  327. package/dist/x/filterOut.min.js +3 -3
  328. package/dist/x/filterOut.mjs +60 -117
  329. package/dist/x/find.es.js +2 -2
  330. package/dist/x/find.es.min.js +2 -2
  331. package/dist/x/find.js +2 -2
  332. package/dist/x/find.min.js +2 -2
  333. package/dist/x/find.mjs +2 -2
  334. package/dist/x/findIndex.es.js +2 -2
  335. package/dist/x/findIndex.es.min.js +2 -2
  336. package/dist/x/findIndex.js +2 -2
  337. package/dist/x/findIndex.min.js +2 -2
  338. package/dist/x/findIndex.mjs +2 -2
  339. package/dist/x/first.es.js +2 -2
  340. package/dist/x/first.es.min.js +2 -2
  341. package/dist/x/first.js +2 -2
  342. package/dist/x/first.min.js +2 -2
  343. package/dist/x/first.mjs +2 -2
  344. package/dist/x/flatten.es.js +20 -207
  345. package/dist/x/flatten.es.min.js +3 -3
  346. package/dist/x/flatten.js +20 -207
  347. package/dist/x/flatten.min.js +3 -3
  348. package/dist/x/flatten.mjs +20 -207
  349. package/dist/x/groupBy.es.js +52 -94
  350. package/dist/x/groupBy.es.min.js +3 -3
  351. package/dist/x/groupBy.js +52 -94
  352. package/dist/x/groupBy.min.js +3 -3
  353. package/dist/x/groupBy.mjs +52 -94
  354. package/dist/x/has.es.js +2 -2
  355. package/dist/x/has.es.min.js +2 -2
  356. package/dist/x/has.js +2 -2
  357. package/dist/x/has.min.js +2 -2
  358. package/dist/x/has.mjs +2 -2
  359. package/dist/x/identity.es.js +2 -2
  360. package/dist/x/identity.es.min.js +2 -2
  361. package/dist/x/identity.js +2 -2
  362. package/dist/x/identity.min.js +2 -2
  363. package/dist/x/identity.mjs +2 -2
  364. package/dist/x/includes.es.js +2 -2
  365. package/dist/x/includes.es.min.js +2 -2
  366. package/dist/x/includes.js +2 -2
  367. package/dist/x/includes.min.js +2 -2
  368. package/dist/x/includes.mjs +2 -2
  369. package/dist/x/isDeepEqual.es.js +2 -2
  370. package/dist/x/isDeepEqual.es.min.js +2 -2
  371. package/dist/x/isDeepEqual.js +2 -2
  372. package/dist/x/isDeepEqual.min.js +2 -2
  373. package/dist/x/isDeepEqual.mjs +2 -2
  374. package/dist/x/isEmpty.es.js +2 -2
  375. package/dist/x/isEmpty.es.min.js +2 -2
  376. package/dist/x/isEmpty.js +2 -2
  377. package/dist/x/isEmpty.min.js +2 -2
  378. package/dist/x/isEmpty.mjs +2 -2
  379. package/dist/x/isEqual.es.js +2 -2
  380. package/dist/x/isEqual.es.min.js +2 -2
  381. package/dist/x/isEqual.js +2 -2
  382. package/dist/x/isEqual.min.js +2 -2
  383. package/dist/x/isEqual.mjs +2 -2
  384. package/dist/x/isFunction.es.js +2 -2
  385. package/dist/x/isFunction.es.min.js +2 -2
  386. package/dist/x/isFunction.js +2 -2
  387. package/dist/x/isFunction.min.js +2 -2
  388. package/dist/x/isFunction.mjs +2 -2
  389. package/dist/x/isIn.es.js +2 -2
  390. package/dist/x/isIn.es.min.js +2 -2
  391. package/dist/x/isIn.js +2 -2
  392. package/dist/x/isIn.min.js +2 -2
  393. package/dist/x/isIn.mjs +2 -2
  394. package/dist/x/isObject.es.js +2 -2
  395. package/dist/x/isObject.es.min.js +2 -2
  396. package/dist/x/isObject.js +2 -2
  397. package/dist/x/isObject.min.js +2 -2
  398. package/dist/x/isObject.mjs +2 -2
  399. package/dist/x/isString.es.js +2 -2
  400. package/dist/x/isString.es.min.js +2 -2
  401. package/dist/x/isString.js +2 -2
  402. package/dist/x/isString.min.js +2 -2
  403. package/dist/x/isString.mjs +2 -2
  404. package/dist/x/keys.es.js +2 -2
  405. package/dist/x/keys.es.min.js +2 -2
  406. package/dist/x/keys.js +2 -2
  407. package/dist/x/keys.min.js +2 -2
  408. package/dist/x/keys.mjs +2 -2
  409. package/dist/x/last.es.js +2 -2
  410. package/dist/x/last.es.min.js +2 -2
  411. package/dist/x/last.js +2 -2
  412. package/dist/x/last.min.js +2 -2
  413. package/dist/x/last.mjs +2 -2
  414. package/dist/x/maxBy.es.js +59 -6
  415. package/dist/x/maxBy.es.min.js +3 -3
  416. package/dist/x/maxBy.js +59 -6
  417. package/dist/x/maxBy.min.js +3 -3
  418. package/dist/x/maxBy.mjs +59 -6
  419. package/dist/x/noop.es.js +2 -2
  420. package/dist/x/noop.es.min.js +2 -2
  421. package/dist/x/noop.js +2 -2
  422. package/dist/x/noop.min.js +2 -2
  423. package/dist/x/noop.mjs +2 -2
  424. package/dist/x/pluck.es.js +32 -103
  425. package/dist/x/pluck.es.min.js +3 -3
  426. package/dist/x/pluck.js +32 -103
  427. package/dist/x/pluck.min.js +3 -3
  428. package/dist/x/pluck.mjs +32 -103
  429. package/dist/x/prepend.es.js +2 -2
  430. package/dist/x/prepend.es.min.js +2 -2
  431. package/dist/x/prepend.js +2 -2
  432. package/dist/x/prepend.min.js +2 -2
  433. package/dist/x/prepend.mjs +2 -2
  434. package/dist/x/size.es.js +2 -2
  435. package/dist/x/size.es.min.js +2 -2
  436. package/dist/x/size.js +2 -2
  437. package/dist/x/size.min.js +2 -2
  438. package/dist/x/size.mjs +2 -2
  439. package/dist/x/trace.es.js +2 -9
  440. package/dist/x/trace.es.min.js +3 -3
  441. package/dist/x/trace.js +2 -9
  442. package/dist/x/trace.min.js +3 -3
  443. package/dist/x/trace.mjs +2 -9
  444. package/dist/x/unionWith.es.js +2 -2
  445. package/dist/x/unionWith.es.min.js +2 -2
  446. package/dist/x/unionWith.js +2 -2
  447. package/dist/x/unionWith.min.js +2 -2
  448. package/dist/x/unionWith.mjs +2 -2
  449. package/dist/x/uniq.es.js +2 -2
  450. package/dist/x/uniq.es.min.js +2 -2
  451. package/dist/x/uniq.js +2 -2
  452. package/dist/x/uniq.min.js +2 -2
  453. package/dist/x/uniq.mjs +2 -2
  454. package/dist/x/unless.es.js +2 -2
  455. package/dist/x/unless.es.min.js +2 -2
  456. package/dist/x/unless.js +2 -2
  457. package/dist/x/unless.min.js +2 -2
  458. package/dist/x/unless.mjs +2 -2
  459. package/dist/x/values.es.js +2 -2
  460. package/dist/x/values.es.min.js +2 -2
  461. package/dist/x/values.js +2 -2
  462. package/dist/x/values.min.js +2 -2
  463. package/dist/x/values.mjs +2 -2
  464. package/dist/x/when.es.js +2 -2
  465. package/dist/x/when.es.min.js +2 -2
  466. package/dist/x/when.js +2 -2
  467. package/dist/x/when.min.js +2 -2
  468. package/dist/x/when.mjs +2 -2
  469. package/dist-test.js +31 -2042
  470. package/eq.js +21 -63
  471. package/es.js +739 -869
  472. package/every.js +94 -0
  473. package/filter.js +23 -91
  474. package/flatMap.js +75 -70
  475. package/forEach.js +82 -0
  476. package/get.js +23 -6
  477. package/global.js +6 -4
  478. package/gt.js +15 -58
  479. package/gte.js +14 -57
  480. package/index.js +739 -869
  481. package/lt.js +17 -60
  482. package/lte.js +14 -57
  483. package/map.js +9 -94
  484. package/memory-usage/reduce.js +2 -2
  485. package/not.js +27 -45
  486. package/omit.js +4 -0
  487. package/or.js +50 -33
  488. package/package.json +7 -7
  489. package/pick.js +5 -1
  490. package/pipe.js +13 -50
  491. package/reduce.js +42 -51
  492. package/rubico.js +22 -11
  493. package/set.js +43 -10
  494. package/some.js +105 -0
  495. package/switchCase.js +13 -3
  496. package/tap.js +0 -24
  497. package/test.js +847 -1096
  498. package/thunkify.js +9 -0
  499. package/tmp.js +1 -0
  500. package/transform.js +31 -16
  501. package/tryCatch.js +19 -15
  502. package/x/differenceWith.js +3 -3
  503. package/x/filterOut.test.js +6 -6
  504. package/x/flatten.js +1 -1
  505. package/x/flatten.test.js +0 -8
  506. package/x/index.js +0 -2
  507. package/x/pluck.js +18 -27
  508. package/x/pluck.test.js +3 -7
  509. package/x/timeInLoop.js +16 -25
  510. package/x/timeInLoop.test.js +8 -4
  511. package/any.js +0 -82
  512. package/dist/__.min.mjs +0 -7
  513. package/dist/all.min.mjs +0 -7
  514. package/dist/always.min.mjs +0 -7
  515. package/dist/and.min.mjs +0 -7
  516. package/dist/any.es.min.js +0 -7
  517. package/dist/any.min.js +0 -8
  518. package/dist/any.min.mjs +0 -7
  519. package/dist/assign.min.mjs +0 -7
  520. package/dist/curry.min.mjs +0 -7
  521. package/dist/eq.min.mjs +0 -7
  522. package/dist/filter.min.mjs +0 -7
  523. package/dist/flatMap.min.mjs +0 -7
  524. package/dist/fork.es.js +0 -159
  525. package/dist/fork.es.min.js +0 -7
  526. package/dist/fork.js +0 -166
  527. package/dist/fork.min.js +0 -8
  528. package/dist/fork.min.mjs +0 -7
  529. package/dist/fork.mjs +0 -159
  530. package/dist/get.min.mjs +0 -7
  531. package/dist/gt.min.mjs +0 -7
  532. package/dist/gte.min.mjs +0 -7
  533. package/dist/lt.min.mjs +0 -7
  534. package/dist/lte.min.mjs +0 -7
  535. package/dist/map.min.mjs +0 -7
  536. package/dist/not.min.mjs +0 -7
  537. package/dist/omit.min.mjs +0 -7
  538. package/dist/or.min.mjs +0 -7
  539. package/dist/pick.min.mjs +0 -7
  540. package/dist/pipe.min.mjs +0 -7
  541. package/dist/reduce.min.mjs +0 -7
  542. package/dist/rubico.min.mjs +0 -7
  543. package/dist/set.min.mjs +0 -7
  544. package/dist/switchCase.min.mjs +0 -7
  545. package/dist/tap.min.mjs +0 -7
  546. package/dist/thunkify.min.mjs +0 -7
  547. package/dist/transform.min.mjs +0 -7
  548. package/dist/tryCatch.min.mjs +0 -7
  549. package/dist/x/append.min.mjs +0 -7
  550. package/dist/x/callProp.min.mjs +0 -7
  551. package/dist/x/defaultsDeep.min.mjs +0 -7
  552. package/dist/x/differenceWith.min.mjs +0 -7
  553. package/dist/x/filterOut.min.mjs +0 -7
  554. package/dist/x/find.min.mjs +0 -7
  555. package/dist/x/findIndex.min.mjs +0 -7
  556. package/dist/x/first.min.mjs +0 -7
  557. package/dist/x/flatten.min.mjs +0 -7
  558. package/dist/x/forEach.es.min.js +0 -7
  559. package/dist/x/forEach.min.js +0 -8
  560. package/dist/x/forEach.min.mjs +0 -7
  561. package/dist/x/groupBy.min.mjs +0 -7
  562. package/dist/x/has.min.mjs +0 -7
  563. package/dist/x/identity.min.mjs +0 -7
  564. package/dist/x/includes.min.mjs +0 -7
  565. package/dist/x/isDeepEqual.min.mjs +0 -7
  566. package/dist/x/isEmpty.min.mjs +0 -7
  567. package/dist/x/isEqual.min.mjs +0 -7
  568. package/dist/x/isFunction.min.mjs +0 -7
  569. package/dist/x/isIn.min.mjs +0 -7
  570. package/dist/x/isObject.min.mjs +0 -7
  571. package/dist/x/isString.min.mjs +0 -7
  572. package/dist/x/keys.min.mjs +0 -7
  573. package/dist/x/last.min.mjs +0 -7
  574. package/dist/x/maxBy.min.mjs +0 -7
  575. package/dist/x/noop.min.mjs +0 -7
  576. package/dist/x/pluck.min.mjs +0 -7
  577. package/dist/x/prepend.min.mjs +0 -7
  578. package/dist/x/size.min.mjs +0 -7
  579. package/dist/x/trace.min.mjs +0 -7
  580. package/dist/x/unionWith.min.mjs +0 -7
  581. package/dist/x/uniq.min.mjs +0 -7
  582. package/dist/x/unless.min.mjs +0 -7
  583. package/dist/x/values.min.mjs +0 -7
  584. package/dist/x/when.min.mjs +0 -7
  585. package/distributor.js +0 -495
  586. package/fork.js +0 -101
  587. package/x/forEach.js +0 -93
  588. package/x/forEach.test.js +0 -218
  589. /package/{benchmarks → archive/benchmarks-v1.9.7}/any.js +0 -0
  590. /package/{x/forEach.benchmark.js → archive/benchmarks-v1.9.7/forEach.js} +0 -0
  591. /package/{benchmarks → archive/benchmarks-v1.9.7}/fork.js +0 -0
  592. /package/{benchmarks → archive/benchmarks-v1.9.7}/integration.js +0 -0
  593. /package/{benchmarks → archive/benchmarks-v1.9.7}/misc.js +0 -0
package/pipe.js CHANGED
@@ -1,8 +1,9 @@
1
- const noop = require('./_internal/noop')
1
+ const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
2
+ const promiseAll = require('./_internal/promiseAll')
2
3
  const funcConcat = require('./_internal/funcConcat')
3
- const funcConcatSync = require('./_internal/funcConcatSync')
4
- const isGeneratorFunction = require('./_internal/isGeneratorFunction')
5
- const isAsyncGeneratorFunction = require('./_internal/isAsyncGeneratorFunction')
4
+ const funcApply = require('./_internal/funcApply')
5
+ const curry2 = require('./_internal/curry2')
6
+ const __ = require('./_internal/placeholder')
6
7
 
7
8
  /**
8
9
  * @name pipe
@@ -15,7 +16,7 @@ const isAsyncGeneratorFunction = require('./_internal/isAsyncGeneratorFunction')
15
16
  * ```
16
17
  *
17
18
  * @description
18
- * Creates a function pipeline with an array of functions where each function passes its return value as a single argument to the next function until all functions have executed. The result of a pipeline execution is the return of its last function. If any function of the pipeline is asynchronous, the result of the execution is a Promise.
19
+ * Creates a function pipeline from an array of functions, where each function passes its return value as a single argument to the next function until all functions have executed. The first function is called with the arguments to the pipeline, while the result of the pipeline execution is the return of its last function. If any function of the pipeline is asynchronous, the result of the execution is a Promise.
19
20
  *
20
21
  * ```javascript [playground]
21
22
  * const syncAdd123 = pipe([
@@ -53,55 +54,17 @@ const isAsyncGeneratorFunction = require('./_internal/isAsyncGeneratorFunction')
53
54
  */
54
55
  const pipe = function (...args) {
55
56
  const funcs = args.pop()
57
+ const pipeline = funcs.reduce(funcConcat)
56
58
 
57
- if (args.length > 0) {
58
- return funcs.reduce(funcConcat)(...args)
59
+ if (args.length == 0) {
60
+ return pipeline
59
61
  }
60
62
 
61
- let functionPipeline = noop,
62
- functionComposition = noop
63
- return function pipeline(...args) {
64
- const firstArg = args[0]
65
-
66
- if (
67
- typeof firstArg == 'function'
68
- && !isGeneratorFunction(firstArg)
69
- && !isAsyncGeneratorFunction(firstArg)
70
- ) {
71
- if (functionComposition == noop) {
72
- functionComposition = funcs.reduceRight(funcConcat)
73
- }
74
- return functionComposition(firstArg)
75
- }
76
-
77
- if (functionPipeline == noop) {
78
- functionPipeline = funcs.reduce(funcConcat)
79
- }
80
- return functionPipeline(...args)
63
+ if (areAnyValuesPromises(args)) {
64
+ return promiseAll(args).then(curry2(funcApply, pipeline, __))
81
65
  }
82
- }
83
-
84
- // funcs Array<function> -> pipeline function
85
- const pipeSync = funcs => funcs.reduce(funcConcatSync)
86
66
 
87
- /**
88
- * @name pipe.sync
89
- *
90
- * @synopsis
91
- * ```coffeescript [specscript]
92
- * pipe.sync(funcs Array<function>)(...args) -> result Promise|any
93
- * ```
94
- *
95
- * @description
96
- * A synchronous version of `pipe` that does not resolve promises by default.
97
- *
98
- * ```javascript [playground]
99
- * pipe.sync([
100
- * value => Promise.resolve(value),
101
- * promise => promise.then(console.log)
102
- * ])('hey') // hey
103
- * ```
104
- */
105
- pipe.sync = pipeSync
67
+ return pipeline(...args)
68
+ }
106
69
 
107
70
  module.exports = pipe
package/reduce.js CHANGED
@@ -1,39 +1,44 @@
1
1
  const isPromise = require('./_internal/isPromise')
2
2
  const __ = require('./_internal/placeholder')
3
3
  const curry3 = require('./_internal/curry3')
4
- const curryArgs3 = require('./_internal/curryArgs3')
5
4
  const genericReduce = require('./_internal/genericReduce')
6
5
 
6
+ // _reduce(collection any, reducer function, initialValue function|any) -> Promise
7
+ const _reduce = function (collection, reducer, initialValue) {
8
+ if (typeof initialValue == 'function') {
9
+ const actualInitialValue = initialValue(collection)
10
+ return isPromise(actualInitialValue)
11
+ ? actualInitialValue.then(curry3(genericReduce, collection, reducer, __))
12
+ : genericReduce(collection, reducer, actualInitialValue)
13
+ }
14
+ return isPromise(initialValue)
15
+ ? initialValue.then(curry3(genericReduce, collection, reducer, __))
16
+ : genericReduce(collection, reducer, initialValue)
17
+ }
18
+
7
19
  /**
8
20
  * @name reduce
9
21
  *
10
22
  * @synopsis
11
23
  * ```coffeescript [specscript]
12
- * arrayReducer (result any, value any, index number, array Array)=>(result Promise|any)
13
- * initialValue function|any
14
- *
15
- * reduce(arrayReducer, initialValue?)(array Array) -> result Promise|any
16
- * reduce(array Array, arrayReducer, initialValue?) -> result Promise|any
17
- *
18
- * objectReducer (result any, value any, key string, object Object)=>(result Promise|any)
19
- *
20
- * reduce(objectReducer, initialValue?)(object Object) -> result Promise|any
21
- * reduce(object Object, objectReducer, initialValue?) -> result Promise|any
22
- *
23
- * mapReducer (result any, value any, key any, map Map)=>(result Promise|any)
24
- *
25
- * reduce(mapReducer, initialValue?)(m Map) -> result Promise|any
26
- * reduce(m Map, mapReducer, initialValue?) -> result Promise|any
27
- *
28
- * reducer (result any, value any)=>(result Promise|any)
29
- *
30
- * reduce(reducer, initialValue?)(iterator Iterator) -> result Promise|any
31
- * reduce(iterator Iterator, reducer, initialValue?) -> result Promise|any
32
- *
33
- * reduce(reducer, initialValue?)(asyncIterator AsyncIterator)
34
- * -> result Promise|any
35
- * reduce(asyncIterator AsyncIterator, reducer, initialValue?)
36
- * -> result Promise|any
24
+ * type Foldable = Array|Object|Map|Iterator|AsyncIterator
25
+ * type Reducer = (
26
+ * accumulator any,
27
+ * value any,
28
+ * indexOrKey? number|string,
29
+ * collection? Foldable,
30
+ * )=>(nextAccumulator Promise|any)
31
+ *
32
+ * reduce(
33
+ * collection Foldable,
34
+ * reducer Reducer,
35
+ * initialValue? function|any
36
+ * ) -> result Promise|any
37
+ *
38
+ * reduce(
39
+ * reducer Reducer,
40
+ * initialValue? function|any
41
+ * )(collection Foldable) -> result Promise|any
37
42
  * ```
38
43
  *
39
44
  * @description
@@ -46,7 +51,7 @@ const genericReduce = require('./_internal/genericReduce')
46
51
  * * `Iterator`/`Generator`
47
52
  * * `AsyncIterator`/`AsyncGenerator`
48
53
  *
49
- * For arrays (type `Array`), `reduce` executes the reducer function for each item of the array in order, returning a new result at each execution to be used in the next execution.
54
+ * For arrays (type `Array`), `reduce` executes the reducer function for each item of the array in order, returning a new result at each execution to be used in the next execution. On each iteration, the reducer is passed the accumulator, the item of the iteration, the index of the item in the array, and a reference to the original array.
50
55
  *
51
56
  * ```javascript [playground]
52
57
  * const max = (a, b) => a > b ? a : b
@@ -84,7 +89,7 @@ const genericReduce = require('./_internal/genericReduce')
84
89
  * // ['initial length 5', 1, 4, 9, 16, 25]
85
90
  * ```
86
91
  *
87
- * For objects (type `Object`), `reduce` executes the reducer function for each value of the object.
92
+ * For objects (type `Object`), `reduce` executes the reducer function for each value of the object. On each iteration, the reducer is passed the accumulator, the object value, the key of the object value, and a reference to the original object.
88
93
  *
89
94
  * ```javascript [playground]
90
95
  * const add = (a, b) => a + b
@@ -100,7 +105,7 @@ const genericReduce = require('./_internal/genericReduce')
100
105
  * ) // 15
101
106
  * ```
102
107
  *
103
- * For sets (type `Set`), `reduce` executes the reducer function for each item of the set.
108
+ * For sets (type `Set`), `reduce` executes the reducer function for each item of the set. On each iteration, the reducer is passed the accumulator and item of the set.
104
109
  *
105
110
  * ```javascript [playground]
106
111
  * const add = (a, b) => a + b
@@ -116,7 +121,7 @@ const genericReduce = require('./_internal/genericReduce')
116
121
  * ) // 15
117
122
  * ```
118
123
  *
119
- * For maps (type `Map`), `reduce` executes the reducer function for each value of each entry of the map.
124
+ * For maps (type `Map`), `reduce` executes the reducer function for each value of each entry of the map. On each iteration, the reducer is passed the accumulator, the map item, the key of the map item, and a reference to the original map.
120
125
  *
121
126
  * ```javascript [playground]
122
127
  * const add = (a, b) => a + b
@@ -132,7 +137,7 @@ const genericReduce = require('./_internal/genericReduce')
132
137
  * ) // 15
133
138
  * ```
134
139
  *
135
- * For iterators (type `Iterator`) and generators (type `Generator`), `reduce` executes the reducer function for each value of the iterator/generator. The iterator/generator is consumed in the process.
140
+ * For iterators (type `Iterator`) and generators (type `Generator`), `reduce` executes the reducer function for each value of the iterator/generator. On each iteration, the reducer is passed the accumulator and the item of the iteration. The iterator/generator is consumed in the process.
136
141
  *
137
142
  * ```javascript [playground]
138
143
  * const add = (a, b) => a + b
@@ -150,7 +155,7 @@ const genericReduce = require('./_internal/genericReduce')
150
155
  * ) // 15
151
156
  * ```
152
157
  *
153
- * For asyncIterators (type `AsyncIterator`) and asyncGenerators (type `AsyncGenerator`), `reduce` executes the reducer function for each value of the asyncIterator/asyncGenerator. The asyncIterator/asyncGenerator is consumed in the process.
158
+ * For asyncIterators (type `AsyncIterator`) and asyncGenerators (type `AsyncGenerator`), `reduce` executes the reducer function for each value of the asyncIterator/asyncGenerator. On each iteration, the reducer is passed the accumulator and the item of the async iteration. The asyncIterator/asyncGenerator is consumed in the process.
154
159
  *
155
160
  * ```javascript [playground]
156
161
  * const asyncAdd = async (a, b) => a + b
@@ -174,27 +179,13 @@ const genericReduce = require('./_internal/genericReduce')
174
179
  */
175
180
 
176
181
  const reduce = function (...args) {
177
- if (typeof args[0] != 'function') {
178
- const reducer = args[1]
179
- const initialValue = args[2]
180
- if (typeof initialValue == 'function') {
181
- return genericReduce([args[0]], reducer, initialValue(args[0]))
182
- }
183
- return genericReduce([args[0]], reducer, initialValue)
182
+ if (typeof args[0] == 'function') {
183
+ return curry3(_reduce, __, args[0], args[1])
184
184
  }
185
-
186
- const reducer = args[0]
187
- const initialValue = args[1]
188
-
189
- if (typeof initialValue == 'function') {
190
- return function reducing(...args) {
191
- const result = initialValue(...args)
192
- return isPromise(result)
193
- ? result.then(curry3(genericReduce, args, reducer, __))
194
- : genericReduce(args, reducer, result)
195
- }
185
+ if (isPromise(args[0])) {
186
+ return args[0].then(curry3(_reduce, __, args[1], args[2]))
196
187
  }
197
- return curryArgs3(genericReduce, __, reducer, initialValue)
188
+ return _reduce(args[0], args[1], args[2])
198
189
  }
199
190
 
200
191
  module.exports = reduce
package/rubico.js CHANGED
@@ -1,7 +1,8 @@
1
1
  const pipe = require('./pipe')
2
- const fork = require('./fork')
3
- const assign = require('./assign')
2
+ const compose = require('./compose')
4
3
  const tap = require('./tap')
4
+ const all = require('./all')
5
+ const assign = require('./assign')
5
6
  const tryCatch = require('./tryCatch')
6
7
  const switchCase = require('./switchCase')
7
8
  const map = require('./map')
@@ -9,8 +10,9 @@ const filter = require('./filter')
9
10
  const reduce = require('./reduce')
10
11
  const transform = require('./transform')
11
12
  const flatMap = require('./flatMap')
12
- const any = require('./any')
13
- const all = require('./all')
13
+ const forEach = require('./forEach')
14
+ const some = require('./some')
15
+ const every = require('./every')
14
16
  const and = require('./and')
15
17
  const or = require('./or')
16
18
  const not = require('./not')
@@ -42,14 +44,23 @@ const __ = require('./__')
42
44
  */
43
45
 
44
46
  const rubico = {
45
- pipe, tap,
46
- switchCase, tryCatch,
47
- fork, assign, get, set, pick, omit,
48
- map, filter, reduce, transform, flatMap,
49
- and, or, not, any, all,
47
+ pipe, compose,
48
+
49
+ tap, forEach,
50
+
51
+ switchCase,
52
+
53
+ tryCatch,
54
+
55
+ all, assign, get, set, pick, omit,
56
+
57
+ map, filter, flatMap, reduce, transform,
58
+
59
+ and, or, not, some, every,
60
+
50
61
  eq, gt, lt, gte, lte,
51
- thunkify, always,
52
- curry, __,
62
+
63
+ thunkify, always, curry, __,
53
64
  }
54
65
 
55
66
  module.exports = rubico
package/set.js CHANGED
@@ -3,12 +3,48 @@ const setByPath = require('./_internal/setByPath')
3
3
  const curry3 = require('./_internal/curry3')
4
4
  const __ = require('./_internal/placeholder')
5
5
 
6
+ /**
7
+ * @name _set
8
+ *
9
+ * @synopsis
10
+ * ```coffeescript [specscript]
11
+ * _set(
12
+ * obj Object,
13
+ * path string|Array<string|number>,
14
+ * value function|any,
15
+ * ) -> result Promise|Object
16
+ * ```
17
+ */
18
+ const _set = function (obj, path, value) {
19
+ if (typeof value == 'function') {
20
+ const actualValue = value(obj)
21
+ if (isPromise(actualValue)) {
22
+ return actualValue.then(
23
+ curry3(setByPath, obj, __, path)
24
+ )
25
+ }
26
+ return setByPath(obj, actualValue, path)
27
+ }
28
+ if (isPromise(value)) {
29
+ return value.then(
30
+ curry3(setByPath, obj, __, path)
31
+ )
32
+ }
33
+ return setByPath(obj, value, path)
34
+ }
35
+
6
36
  /**
7
37
  * @name set
8
38
  *
9
39
  * @synopsis
10
40
  * ```coffeescript [specscript]
11
41
  * set(
42
+ * object Object,
43
+ * path string|Array<string|number>,
44
+ * value function|any,
45
+ * ) -> result Promise|Object
46
+ *
47
+ * set(
12
48
  * path string|Array<string|number>,
13
49
  * value function|any,
14
50
  * )(object Object) -> result Promise|Object
@@ -48,17 +84,14 @@ const __ = require('./_internal/placeholder')
48
84
  * @since 1.7.0
49
85
  */
50
86
 
51
- const set = (path, value) => function setter(obj) {
52
- if (typeof value == 'function') {
53
- const actualValue = value(obj)
54
- if (isPromise(actualValue)) {
55
- return actualValue.then(
56
- curry3(setByPath, obj, __, path)
57
- )
58
- }
59
- return setByPath(obj, actualValue, path)
87
+ const set = function (arg0, arg1, arg2) {
88
+ if (arg2 == null) {
89
+ return curry3(_set, __, arg0, arg1)
60
90
  }
61
- return setByPath(obj, value, path)
91
+ if (isPromise(arg0)) {
92
+ return arg0.then(curry3(_set, __, arg1, arg2))
93
+ }
94
+ return _set(arg0, arg1, arg2)
62
95
  }
63
96
 
64
97
  module.exports = set
package/some.js ADDED
@@ -0,0 +1,105 @@
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 objectValues = require('./_internal/objectValues')
6
+ const arraySome = require('./_internal/arraySome')
7
+ const iteratorSome = require('./_internal/iteratorSome')
8
+ const asyncIteratorSome = require('./_internal/asyncIteratorSome')
9
+ const reducerSome = require('./_internal/reducerSome')
10
+ const symbolIterator = require('./_internal/symbolIterator')
11
+ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
12
+
13
+ // _some(collection Array|Iterable|AsyncIterable|{ reduce: function }|Object, predicate function) -> Promise|boolean
14
+ const _some = function (collection, predicate) {
15
+ if (isArray(collection)) {
16
+ return arraySome(collection, predicate)
17
+ }
18
+ if (collection == null) {
19
+ return predicate(collection)
20
+ }
21
+ if (typeof collection[symbolIterator] == 'function') {
22
+ return iteratorSome(collection[symbolIterator](), predicate)
23
+ }
24
+ if (typeof collection[symbolAsyncIterator] == 'function') {
25
+ return asyncIteratorSome(
26
+ collection[symbolAsyncIterator](), predicate, new Set()
27
+ )
28
+ }
29
+ if (typeof collection.reduce == 'function') {
30
+ return collection.reduce(reducerSome(predicate), false)
31
+ }
32
+ if (collection.constructor == Object) {
33
+ return arraySome(objectValues(collection), predicate)
34
+ }
35
+ return predicate(collection)
36
+ }
37
+
38
+ /**
39
+ * @name some
40
+ *
41
+ * @synopsis
42
+ * ```coffeescript [specscript]
43
+ * type Foldable = Array|Iterable|AsyncIterable|{ reduce: function }|Object
44
+ *
45
+ * some(collection Foldable, predicate function) -> Promise|boolean
46
+ *
47
+ * some(predicate function)(collection Foldable) -> Promise|boolean
48
+ * ```
49
+ *
50
+ * @description
51
+ * Test a predicate concurrently across all items of a collection, returning true if any executions return truthy.
52
+ *
53
+ * ```javascript [playground]
54
+ * const isOdd = number => number % 2 == 1
55
+ *
56
+ * console.log(
57
+ * some([1, 2, 3, 4, 5], isOdd),
58
+ * ) // true
59
+ * ```
60
+ *
61
+ * The collection can be any iterable, async iterable, or object values iterable collection. Below is an example of `some` accepting an async generator as the collection.
62
+ *
63
+ * ```javascript [playground]
64
+ * const toTodosUrl = id => 'https://jsonplaceholder.typicode.com/todos/' + id
65
+ *
66
+ * const fetchedToJson = fetched => fetched.json()
67
+ *
68
+ * const fetchTodo = pipe([
69
+ * toTodosUrl,
70
+ * fetch,
71
+ * fetchedToJson,
72
+ * ])
73
+ *
74
+ * const todoIDsGenerator = async function* () {
75
+ * yield 1; yield 2; yield 3; yield 4; yield 5
76
+ * }
77
+ *
78
+ * some(pipe([
79
+ * fetchTodo,
80
+ * todo => todo.title.startsWith('fugiat'),
81
+ * ]))(todoIDsGenerator()).then(console.log) // true
82
+ * ```
83
+ *
84
+ * @execution concurrent
85
+ *
86
+ * @muxing
87
+ *
88
+ * @related or
89
+ */
90
+
91
+ const some = function (...args) {
92
+ const predicate = args.pop()
93
+ if (args.length == 0) {
94
+ return curry2(_some, __, predicate)
95
+ }
96
+
97
+ const collection = args[0]
98
+ if (isPromise(collection)) {
99
+ return collection.then(curry2(_some, __, predicate))
100
+ }
101
+
102
+ return _some(collection, predicate)
103
+ }
104
+
105
+ module.exports = some
package/switchCase.js CHANGED
@@ -1,6 +1,11 @@
1
+ const promiseAll = require('./_internal/promiseAll')
2
+ const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
1
3
  const arrayConditional = require('./_internal/arrayConditional')
2
4
  const areAllValuesNonfunctions = require('./_internal/areAllValuesNonfunctions')
3
5
  const nonfunctionsConditional = require('./_internal/nonfunctionsConditional')
6
+ const __ = require('./_internal/placeholder')
7
+ const curry3 = require('./_internal/curry3')
8
+ const curryArgs3 = require('./_internal/curryArgs3')
4
9
 
5
10
  /**
6
11
  * @name switchCase
@@ -57,13 +62,18 @@ const nonfunctionsConditional = require('./_internal/nonfunctionsConditional')
57
62
  *
58
63
  * @execution series
59
64
  */
60
- const switchCase = values => {
65
+ const switchCase = (...args) => {
66
+ const values = args.pop()
61
67
  if (areAllValuesNonfunctions(values)) {
62
68
  return nonfunctionsConditional(values, -2)
63
69
  }
64
- return function switchingCases(...args) {
65
- return arrayConditional(values, args, -2)
70
+ if (args.length == 0) {
71
+ return curryArgs3(arrayConditional, values, __, -2)
66
72
  }
73
+ if (areAnyValuesPromises(args)) {
74
+ return promiseAll(args).then(curry3(arrayConditional, values, __, -2))
75
+ }
76
+ return arrayConditional(values, args, -2)
67
77
  }
68
78
 
69
79
  module.exports = switchCase
package/tap.js CHANGED
@@ -1,6 +1,5 @@
1
1
  const isPromise = require('./_internal/isPromise')
2
2
  const always = require('./_internal/always')
3
- const tapSync = require('./_internal/tapSync')
4
3
  const thunkifyArgs = require('./_internal/thunkifyArgs')
5
4
  const thunkConditional = require('./_internal/thunkConditional')
6
5
  const curry3 = require('./_internal/curry3')
@@ -35,29 +34,6 @@ const tap = func => function tapping(...args) {
35
34
  return isPromise(call) ? call.then(always(result)) : result
36
35
  }
37
36
 
38
- /**
39
- * @name tap.sync
40
- *
41
- * @synopsis
42
- * ```coffeescript [specscript]
43
- * tap.sync(func function)(...args) -> args[0]
44
- * ```
45
- *
46
- * @description
47
- * Synchronous `tap`
48
- *
49
- * ```javascript [playground]
50
- * const pipeline = pipe([
51
- * tap.sync(number => console.log('square', number ** 2)),
52
- * tap.sync(number => console.log('cube', number ** 3)),
53
- * ])
54
- *
55
- * pipeline(3) // 9
56
- * // 27
57
- * ```
58
- */
59
- tap.sync = tapSync
60
-
61
37
  /**
62
38
  * @name tap.if
63
39
  *