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
@@ -0,0 +1,43 @@
1
+ const __ = require('./placeholder')
2
+
3
+ // argument resolver for curryArgs2
4
+ const curryArgs2ResolveArgs0 = (
5
+ baseFunc, arg1, arg2,
6
+ ) => function args0Resolver(...args) {
7
+ return baseFunc(args, arg1)
8
+ }
9
+
10
+ // argument resolver for curryArgs2
11
+ const curryArgs2ResolveArgs1 = (
12
+ baseFunc, arg0, arg2,
13
+ ) => function arg1Resolver(...args) {
14
+ return baseFunc(arg0, args)
15
+ }
16
+
17
+ /**
18
+ * @name curryArgs2
19
+ *
20
+ * @synopsis
21
+ * ```coffeescript [specscript]
22
+ * type __ = Symbol('placeholder')
23
+ *
24
+ * curryArgs2(
25
+ * baseFunc function,
26
+ * arg0 __|any,
27
+ * arg1 __|any,
28
+ * ) -> function
29
+ * ```
30
+ *
31
+ * @description
32
+ * Curry arguments for a 2-ary function. Arguments are supplied in placeholder position as an array.
33
+ *
34
+ * Note: at least one argument must be the placeholder
35
+ */
36
+ const curryArgs2 = function (baseFunc, arg0, arg1) {
37
+ if (arg0 == __) {
38
+ return curryArgs2ResolveArgs0(baseFunc, arg1)
39
+ }
40
+ return curryArgs2ResolveArgs1(baseFunc, arg0)
41
+ }
42
+
43
+ module.exports = curryArgs2
@@ -0,0 +1,21 @@
1
+ const assert = require('assert')
2
+ const curryArgs3 = require('./curryArgs3')
3
+ const __ = require('./placeholder')
4
+
5
+ describe('curryArgs3', () => {
6
+ const func = function (a, b, c) {
7
+ return [a, b, c]
8
+ }
9
+ it('resolves arguments in __ position for arg0', async () => {
10
+ const curried = curryArgs3(func, __, 1, 2)
11
+ assert.deepEqual(curried(3), [[3], 1, 2])
12
+ })
13
+ it('resolves arguments in __ position for arg1', async () => {
14
+ const curried = curryArgs3(func, 1, __, 2)
15
+ assert.deepEqual(curried(3), [1, [3], 2])
16
+ })
17
+ it('resolves arguments in __ position for arg2', async () => {
18
+ const curried = curryArgs3(func, 1, 2, __)
19
+ assert.deepEqual(curried(3), [1, 2, [3]])
20
+ })
21
+ })
@@ -0,0 +1,65 @@
1
+ const __ = require('./placeholder')
2
+
3
+ // argument resolver for curryArgs4
4
+ const curryArgs4ResolveArgs0 = (
5
+ baseFunc, arg1, arg2, arg3,
6
+ ) => function args0Resolver(...args) {
7
+ return baseFunc(args, arg1, arg2, arg3)
8
+ }
9
+
10
+ // argument resolver for curryArgs4
11
+ const curryArgs4ResolveArgs1 = (
12
+ baseFunc, arg0, arg2, arg3,
13
+ ) => function args1Resolver(...args) {
14
+ return baseFunc(arg0, args, arg2, arg3)
15
+ }
16
+
17
+ // argument resolver for curryArgs4
18
+ const curryArgs4ResolveArgs2 = (
19
+ baseFunc, arg0, arg1, arg3,
20
+ ) => function args2Resolver(...args) {
21
+ return baseFunc(arg0, arg1, args, arg3)
22
+ }
23
+
24
+ // argument resolver for curryArgs4
25
+ const curryArgs4ResolveArgs3 = (
26
+ baseFunc, arg0, arg1, arg2,
27
+ ) => function args3Resolver(...args) {
28
+ return baseFunc(arg0, arg1, arg2, args)
29
+ }
30
+
31
+ /**
32
+ * @name curryArgs4
33
+ *
34
+ * @synopsis
35
+ * ```coffeescript [specscript]
36
+ * __ = Symbol('placeholder')
37
+ *
38
+ * curryArgs4(
39
+ * baseFunc function,
40
+ * arg0 __|any,
41
+ * arg1 __|any,
42
+ * arg2 __|any
43
+ * arg3 __|any,
44
+ * ) -> function
45
+ * ```
46
+ *
47
+ * @description
48
+ * Curry arguments for a 4-ary function. Arguments are supplied in placeholder position as an array.
49
+ *
50
+ * Note: at least one argument must be the placeholder
51
+ */
52
+ const curryArgs4 = function (baseFunc, arg0, arg1, arg2, arg3) {
53
+ if (arg0 == __) {
54
+ return curryArgs4ResolveArgs0(baseFunc, arg1, arg2, arg3)
55
+ }
56
+ if (arg1 == __) {
57
+ return curryArgs4ResolveArgs1(baseFunc, arg0, arg2, arg3)
58
+ }
59
+ if (arg2 == __) {
60
+ return curryArgs4ResolveArgs2(baseFunc, arg0, arg1, arg3)
61
+ }
62
+ return curryArgs4ResolveArgs3(baseFunc, arg0, arg1, arg2)
63
+ }
64
+
65
+ module.exports = curryArgs4
@@ -0,0 +1,25 @@
1
+ const assert = require('assert')
2
+ const curryArgs4 = require('./curryArgs4')
3
+ const __ = require('./placeholder')
4
+
5
+ describe('curryArgs4', () => {
6
+ const func = function (a, b, c, d) {
7
+ return [a, b, c, d]
8
+ }
9
+ it('resolves arguments in __ position for arg0', async () => {
10
+ const curried = curryArgs4(func, __, 1, 2, 3)
11
+ assert.deepEqual(curried(1, 2, 3), [[1, 2, 3], 1, 2, 3])
12
+ })
13
+ it('resolves arguments in __ position for arg1', async () => {
14
+ const curried = curryArgs4(func, 1, __, 2, 3)
15
+ assert.deepEqual(curried(1, 2, 3), [1, [1, 2, 3], 2, 3])
16
+ })
17
+ it('resolves arguments in __ position for arg2', async () => {
18
+ const curried = curryArgs4(func, 1, 2, __, 3)
19
+ assert.deepEqual(curried(1, 2, 3), [1, 2, [1, 2, 3], 3])
20
+ })
21
+ it('resolves arguments in __ position for arg3', async () => {
22
+ const curried = curryArgs4(func, 1, 2, 3, __)
23
+ assert.deepEqual(curried(1, 2, 3), [1, 2, 3, [1, 2, 3]])
24
+ })
25
+ })
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @name equals
3
+ *
4
+ * @synopsis
5
+ * ```coffeescript [specscript]
6
+ * equals(left any, right any) -> boolean
7
+ * ```
8
+ */
9
+ const equals = function (left, right) {
10
+ return left == right
11
+ }
12
+
13
+ module.exports = equals
@@ -0,0 +1,22 @@
1
+ const fs = require('fs')
2
+ const pathResolve = require('./pathResolve')
3
+
4
+ // findAllFilePaths(path string) -> filePaths Promise<Array<string>>
5
+ const findAllFilePaths = async function (path) {
6
+ const files = await fs.promises.readdir(path, {
7
+ withFileTypes: true,
8
+ recursive: true,
9
+ })
10
+ const result = []
11
+ for (const file of files) {
12
+ if (file.isDirectory()) {
13
+ const filePaths = await findAllFilePaths(pathResolve(path, file.name))
14
+ result.push(...filePaths)
15
+ } else {
16
+ result.push(pathResolve(path, file.name))
17
+ }
18
+ }
19
+ return result
20
+ }
21
+
22
+ module.exports = findAllFilePaths
@@ -13,3 +13,5 @@
13
13
  * Apply arguments to a function.
14
14
  */
15
15
  const funcApply = (func, args) => func(...args)
16
+
17
+ module.exports = funcApply
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @name funcCall
3
+ *
4
+ * @synopsis
5
+ * ```coffeescript [specscript]
6
+ * funcCall(func function, context Object, ...args) -> any
7
+ * ```
8
+ *
9
+ * @description
10
+ * Apply arguments to a function.
11
+ */
12
+ const funcCall = (func, context, ...args) => func.call(context, ...args)
13
+
14
+ module.exports = funcCall
@@ -0,0 +1,26 @@
1
+ const isPromise = require('./isPromise')
2
+ const promiseAll = require('./promiseAll')
3
+
4
+ /**
5
+ * @name functionArrayAll
6
+ *
7
+ * @synopsis
8
+ * ```coffeescript [specscript]
9
+ * functionArrayAll(funcs Array<function>, args Array) -> Promise|Array
10
+ * ```
11
+ */
12
+ const functionArrayAll = function (funcs, args) {
13
+ const funcsLength = funcs.length,
14
+ result = Array(funcsLength)
15
+ let funcsIndex = -1, isAsync = false
16
+ while (++funcsIndex < funcsLength) {
17
+ const resultItem = funcs[funcsIndex](...args)
18
+ if (isPromise(resultItem)) {
19
+ isAsync = true
20
+ }
21
+ result[funcsIndex] = resultItem
22
+ }
23
+ return isAsync ? promiseAll(result) : result
24
+ }
25
+
26
+ module.exports = functionArrayAll
@@ -0,0 +1,55 @@
1
+ const funcConcat = require('./funcConcat')
2
+ const isPromise = require('./isPromise')
3
+ const __ = require('./placeholder')
4
+ const curry3 = require('./curry3')
5
+ const curry4 = require('./curry4')
6
+ const objectSet = require('./objectSet')
7
+
8
+ /**
9
+ * @name asyncFunctionArrayAllSeries
10
+ *
11
+ * @synopsis
12
+ * ```coffeescript [specscript]
13
+ * asyncFunctionArrayAllSeries(
14
+ * funcs Array<function>,
15
+ * args Array,
16
+ * result Array,
17
+ * funcsIndex number
18
+ * ) -> Promise|Array
19
+ * ```
20
+ *
21
+ * @TODO benchmark vs regular promise handling
22
+ */
23
+ const asyncFunctionArrayAllSeries = async function (funcs, args, result, funcsIndex) {
24
+ const funcsLength = funcs.length
25
+ while (++funcsIndex < funcsLength) {
26
+ const resultItem = funcs[funcsIndex](...args)
27
+ result[funcsIndex] = isPromise(resultItem) ? await resultItem : resultItem
28
+ }
29
+ return result
30
+ }
31
+
32
+ /**
33
+ * @name functionArrayAllSeries
34
+ *
35
+ * @synopsis
36
+ * ```coffeescript [specscript]
37
+ * functionArrayAllSeries(funcs Array<function>, args Array) -> Promise|Array
38
+ * ```
39
+ */
40
+ const functionArrayAllSeries = function (funcs, args) {
41
+ const funcsLength = funcs.length, result = []
42
+ let funcsIndex = -1
43
+ while (++funcsIndex < funcsLength) {
44
+ const resultItem = funcs[funcsIndex](...args)
45
+ if (isPromise(resultItem)) {
46
+ return resultItem.then(funcConcat(
47
+ curry3(objectSet, result, funcsIndex, __),
48
+ curry4(asyncFunctionArrayAllSeries, funcs, args, __, funcsIndex)))
49
+ }
50
+ result[funcsIndex] = resultItem
51
+ }
52
+ return result
53
+ }
54
+
55
+ module.exports = functionArrayAllSeries
@@ -0,0 +1,32 @@
1
+ const always = require('./always')
2
+ const isPromise = require('./isPromise')
3
+ const promiseAll = require('./promiseAll')
4
+ const __ = require('./placeholder')
5
+ const curry3 = require('./curry3')
6
+ const objectSet = require('./objectSet')
7
+
8
+ /**
9
+ * @name functionObjectAll
10
+ *
11
+ * @synopsis
12
+ * ```coffeescript [specscript]
13
+ * functionObjectAll(funcs Array<function>, args Array) -> Promise|Object
14
+ * ```
15
+ *
16
+ * @description
17
+ * Concurrently execute the same arguments for each function of an object of functions, returning an object of results.
18
+ */
19
+ const functionObjectAll = function (funcs, args) {
20
+ const result = {}, promises = []
21
+ for (const key in funcs) {
22
+ const resultItem = funcs[key](...args)
23
+ if (isPromise(resultItem)) {
24
+ promises.push(resultItem.then(curry3(objectSet, result, key, __)))
25
+ } else {
26
+ result[key] = resultItem
27
+ }
28
+ }
29
+ return promises.length == 0 ? result : promiseAll(promises).then(always(result))
30
+ }
31
+
32
+ module.exports = functionObjectAll
@@ -12,8 +12,6 @@ const curryArgs3 = require('./curryArgs3')
12
12
  const arrayReduce = require('./arrayReduce')
13
13
  const objectReduce = require('./objectReduce')
14
14
  const mapReduce = require('./mapReduce')
15
- const generatorFunctionReduce = require('./generatorFunctionReduce')
16
- const asyncGeneratorFunctionReduce = require('./asyncGeneratorFunctionReduce')
17
15
  const reducerConcat = require('./reducerConcat')
18
16
 
19
17
  /**
@@ -25,7 +23,7 @@ const reducerConcat = require('./reducerConcat')
25
23
  * |{ reduce: (any, T)=>any }|Object<T>
26
24
  *
27
25
  * genericReduce<T>(
28
- * args [collection Foldable<T>, ...any],
26
+ * collection Foldable<T>,
29
27
  * reducer (any, T)=>any,
30
28
  * result any?,
31
29
  * ) -> result
@@ -33,33 +31,17 @@ const reducerConcat = require('./reducerConcat')
33
31
  *
34
32
  * @related genericReduceConcurrent
35
33
  *
36
- * @TODO genericReduceSync(args, reducer, init) - performance optimization for some of these genericReduces that we know are synchronous
34
+ * @TODO genericReduceSync(collection, reducer, init) - performance optimization for some of these genericReduces that we know are synchronous
37
35
  *
38
- * @TODO genericReducePool(poolSize, args, reducer, init) - for some of these genericReduces that we want to race - result should not care about order of concatenations
36
+ * @TODO genericReducePool(poolSize, collection, reducer, init) - for some of these genericReduces that we want to race - result should not care about order of concatenations
39
37
  * reduce.pool
40
38
  * transform.pool
41
39
  * flatMap.pool
42
40
  */
43
- const genericReduce = function (args, reducer, result) {
44
- const collection = args[0]
41
+ const genericReduce = function (collection, reducer, result) {
45
42
  if (isArray(collection)) {
46
43
  return arrayReduce(collection, reducer, result)
47
44
  }
48
- if (typeof collection == 'function') {
49
- if (isGeneratorFunction(collection)) {
50
- return generatorFunctionReduce(collection, reducer, result)
51
- }
52
- if (isAsyncGeneratorFunction(collection)) {
53
- return asyncGeneratorFunctionReduce(collection, reducer, result)
54
- }
55
- return curryArgs3(
56
- genericReduce,
57
- __,
58
- args.length == 1
59
- ? reducerConcat(reducer, collection)
60
- : args.reduce(reducerConcat, reducer),
61
- result)
62
- }
63
45
  if (collection == null) {
64
46
  return result === undefined
65
47
  ? curry2(reducer, collection, __)
@@ -24,7 +24,7 @@ const callConcat = require('./callConcat')
24
24
  * Reducer = (any, any)=>Promise|any
25
25
  *
26
26
  * identityTransform<
27
- * args Array,
27
+ * collection any,
28
28
  * transducer Reducer=>Reducer,
29
29
  * result undefined|null,
30
30
  * >(args, transducer, result) -> Promise|result
@@ -33,8 +33,8 @@ const callConcat = require('./callConcat')
33
33
  * @description
34
34
  * Reduce a value, always returning the initial result
35
35
  */
36
- const identityTransform = function (args, transducer, result) {
37
- const nil = genericReduce(args, transducer(noop), null)
36
+ const identityTransform = function (collection, transducer, result) {
37
+ const nil = genericReduce(collection, transducer(noop), null)
38
38
  return isPromise(nil) ? nil.then(always(result)) : result
39
39
  }
40
40
 
@@ -48,44 +48,44 @@ const identityTransform = function (args, transducer, result) {
48
48
  * |{ concat: function }|{ write: function }|Object
49
49
  *
50
50
  * genericTransform<
51
- * args ...any,
51
+ * collection any,
52
52
  * transducer Reducer=>Reducer,
53
53
  * result Semigroup|any,
54
- * >(args, transducer, result) -> result
54
+ * >(collection, transducer, result) -> result
55
55
  * ```
56
56
  */
57
- const genericTransform = function (args, transducer, result) {
57
+ const genericTransform = function (collection, transducer, result) {
58
58
  if (isArray(result)) {
59
- return genericReduce(args, transducer(arrayExtend), result)
59
+ return genericReduce(collection, transducer(arrayExtend), result)
60
60
  }
61
61
  if (isBinary(result)) {
62
- const intermediateArray = genericReduce(args, transducer(arrayExtend), [])
62
+ const intermediateArray = genericReduce(collection, transducer(arrayExtend), [])
63
63
  return isPromise(intermediateArray)
64
64
  ? intermediateArray.then(curry2(binaryExtend, result, __))
65
65
  : binaryExtend(result, intermediateArray)
66
66
  }
67
67
  if (result == null) {
68
- return identityTransform(args, transducer, result)
68
+ return identityTransform(collection, transducer, result)
69
69
  }
70
70
 
71
71
  const resultConstructor = result.constructor
72
72
  if (typeof result == 'string' || resultConstructor == String) {
73
73
  // TODO: use array + join over adding
74
- return genericReduce(args, transducer(add), result)
74
+ return genericReduce(collection, transducer(add), result)
75
75
  }
76
76
  if (typeof result.concat == 'function') {
77
- return genericReduce(args, transducer(callConcat), result)
77
+ return genericReduce(collection, transducer(callConcat), result)
78
78
  }
79
79
  if (typeof result.write == 'function') {
80
- return genericReduce(args, transducer(streamExtend), result)
80
+ return genericReduce(collection, transducer(streamExtend), result)
81
81
  }
82
82
  if (resultConstructor == Set) {
83
- return genericReduce(args, transducer(setExtend), result)
83
+ return genericReduce(collection, transducer(setExtend), result)
84
84
  }
85
85
  if (resultConstructor == Object) {
86
- return genericReduce(args, transducer(objectAssign), result)
86
+ return genericReduce(collection, transducer(objectAssign), result)
87
87
  }
88
- return identityTransform(args, transducer, result)
88
+ return identityTransform(collection, transducer, result)
89
89
  }
90
90
 
91
91
  module.exports = genericTransform
@@ -0,0 +1,93 @@
1
+ const isPromise = require('./isPromise')
2
+ const isArray = require('./isArray')
3
+ const isBinary = require('./isBinary')
4
+ const callPropUnary = require('./callPropUnary')
5
+ const __ = require('./placeholder')
6
+ const curry2 = require('./curry2')
7
+ const curry3 = require('./curry3')
8
+ const always = require('./always')
9
+ const noop = require('./noop')
10
+ const add = require('./add')
11
+ const genericReduce = require('./genericReduce')
12
+ const objectAssign = require('./objectAssign')
13
+ const arrayExtend = require('./arrayExtend')
14
+ const binaryExtend = require('./binaryExtend')
15
+ const streamExtend = require('./streamExtend')
16
+ const setExtend = require('./setExtend')
17
+ const callConcat = require('./callConcat')
18
+
19
+ /**
20
+ * @name identityTransform
21
+ *
22
+ * @synopsis
23
+ * ```coffeescript [specscript]
24
+ * Reducer = (any, any)=>Promise|any
25
+ *
26
+ * identityTransform<
27
+ * collection any,
28
+ * transducer Reducer=>Reducer,
29
+ * accum undefined|null,
30
+ * >(args, transducer, accum) -> Promise|accum
31
+ * ```
32
+ *
33
+ * @description
34
+ * Reduce a value, always returning the initial accum
35
+ */
36
+ const identityTransform = function (collection, transducer, accum) {
37
+ const nil = genericReduce(collection, transducer(noop), null)
38
+ return isPromise(nil) ? nil.then(always(accum)) : accum
39
+ }
40
+
41
+ /**
42
+ * @name genericTransform
43
+ *
44
+ * @synopsis
45
+ * ```coffeescript [specscript]
46
+ * Reducer = (any, any)=>Promise|any
47
+ * Semigroup = Array|string|Set|TypedArray
48
+ * |{ concat: function }|{ write: function }|Object
49
+ *
50
+ * genericTransform<
51
+ * collection any,
52
+ * transducer Reducer=>Reducer,
53
+ * accum Semigroup|any,
54
+ * >(collection, transducer, accum) -> accum
55
+ * ```
56
+ */
57
+ const genericTransform = function (collection, transducer, accum) {
58
+ if (isArray(accum)) {
59
+ return genericReduce(collection, transducer(arrayExtend), accum)
60
+ }
61
+ if (isBinary(accum)) {
62
+ const intermediateArray = genericReduce(collection, transducer(arrayExtend), [])
63
+ return isPromise(intermediateArray)
64
+ ? intermediateArray.then(curry2(binaryExtend, accum, __))
65
+ : binaryExtend(accum, intermediateArray)
66
+ }
67
+ if (accum == null) {
68
+ return identityTransform(collection, transducer, accum)
69
+ }
70
+
71
+ const constructor = accum.constructor
72
+ if (typeof accum == 'string' || constructor == String) {
73
+ const result = genericReduce(collection, transducer(arrayExtend), [accum])
74
+ return isPromise(result)
75
+ ? result.then(curry3(callPropUnary, __, 'join', ''))
76
+ : result.join('')
77
+ }
78
+ if (typeof accum.concat == 'function') {
79
+ return genericReduce(collection, transducer(callConcat), accum)
80
+ }
81
+ if (typeof accum.write == 'function') {
82
+ return genericReduce(collection, transducer(streamExtend), accum)
83
+ }
84
+ if (constructor == Set) {
85
+ return genericReduce(collection, transducer(setExtend), accum)
86
+ }
87
+ if (constructor == Object) {
88
+ return genericReduce(collection, transducer(objectAssign), accum)
89
+ }
90
+ return identityTransform(collection, transducer, accum)
91
+ }
92
+
93
+ module.exports = genericTransform
@@ -5,16 +5,16 @@ const curry3 = require('./curry3')
5
5
  const callPropUnary = require('./callPropUnary')
6
6
 
7
7
  /**
8
- * @name iteratorAll
8
+ * @name iteratorEvery
9
9
  *
10
10
  * @synopsis
11
11
  * ```coffeescript [specscript]
12
- * iteratorAll(iterator Iterator, predicate ...any=>boolean) -> boolean
12
+ * iteratorEvery(iterator Iterator, predicate ...any=>boolean) -> boolean
13
13
  * ```
14
14
  *
15
15
  * @TODO use .next() calls
16
16
  */
17
- const iteratorAll = function (iterator, predicate) {
17
+ const iteratorEvery = function (iterator, predicate) {
18
18
  const promises = []
19
19
  for (const item of iterator) {
20
20
  const predication = predicate(item)
@@ -29,4 +29,4 @@ const iteratorAll = function (iterator, predicate) {
29
29
  : promiseAll(promises).then(curry3(callPropUnary, __, 'every', Boolean))
30
30
  }
31
31
 
32
- module.exports = iteratorAll
32
+ module.exports = iteratorEvery
@@ -1,23 +1,23 @@
1
1
  const SelfReferencingPromise = require('./SelfReferencingPromise')
2
- const asyncIteratorAny = require('./asyncIteratorAny')
2
+ const asyncIteratorSome = require('./asyncIteratorSome')
3
3
  const isPromise = require('./isPromise')
4
4
 
5
5
  /**
6
- * @name iteratorAny
6
+ * @name iteratorSome
7
7
  *
8
8
  * @synopsis
9
9
  * ```coffeescript [specscript]
10
- * iteratorAny(
10
+ * iteratorSome(
11
11
  * iterator Iterator,
12
12
  * predicate any=>Promise|boolean,
13
13
  * ) -> boolean
14
14
  * ```
15
15
  */
16
- const iteratorAny = function (iterator, predicate) {
16
+ const iteratorSome = function (iterator, predicate) {
17
17
  for (const item of iterator) {
18
18
  const predication = predicate(item)
19
19
  if (isPromise(predication)) {
20
- return asyncIteratorAny(
20
+ return asyncIteratorSome(
21
21
  iterator, predicate, new Set([SelfReferencingPromise(predication)]))
22
22
  }
23
23
  if (predication) {
@@ -27,4 +27,4 @@ const iteratorAny = function (iterator, predicate) {
27
27
  return false
28
28
  }
29
29
 
30
- module.exports = iteratorAny
30
+ module.exports = iteratorSome
@@ -0,0 +1,19 @@
1
+ const spread2 = require('./spread2')
2
+ const isPromise = require('./isPromise')
3
+ const promiseAll = require('./promiseAll')
4
+
5
+ // leftResolverRightResolverCompare(
6
+ // args Array, comparator function, left function, right function,
7
+ // ) -> Promise|boolean
8
+ const leftResolverRightResolverCompare = function (
9
+ args, comparator, left, right,
10
+ ) {
11
+ const leftResult = left(...args),
12
+ rightResult = right(...args)
13
+ if (isPromise(leftResult) || isPromise(rightResult)) {
14
+ return promiseAll([leftResult, rightResult]).then(spread2(comparator))
15
+ }
16
+ return comparator(leftResult, rightResult)
17
+ }
18
+
19
+ module.exports = leftResolverRightResolverCompare
@@ -0,0 +1,16 @@
1
+ const spread2 = require('./spread2')
2
+ const isPromise = require('./isPromise')
3
+ const promiseAll = require('./promiseAll')
4
+
5
+ // leftResolverRightValueCompare(
6
+ // args Array, comparator function, left function, right any
7
+ // ) -> Promise|boolean
8
+ const leftResolverRightValueCompare = function (args, comparator, left, right) {
9
+ const leftResult = left(...args)
10
+ if (isPromise(leftResult) || isPromise(right)) {
11
+ return promiseAll([leftResult, right]).then(spread2(comparator))
12
+ }
13
+ return comparator(leftResult, right)
14
+ }
15
+
16
+ module.exports = leftResolverRightValueCompare
@@ -0,0 +1,16 @@
1
+ const spread2 = require('./spread2')
2
+ const isPromise = require('./isPromise')
3
+ const promiseAll = require('./promiseAll')
4
+
5
+ // leftValueRightResolverCompare(
6
+ // args Array, comparator function, left any, right any,
7
+ // ) -> Promise|boolean
8
+ const leftValueRightResolverCompare = function (args, comparator, left, right) {
9
+ const rightResult = right(...args)
10
+ if (isPromise(left) || isPromise(rightResult)) {
11
+ return promiseAll([left, rightResult]).then(spread2(comparator))
12
+ }
13
+ return comparator(left, rightResult)
14
+ }
15
+
16
+ module.exports = leftValueRightResolverCompare