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
@@ -2,7 +2,6 @@ const isPromise = require('./isPromise')
2
2
  const __ = require('./placeholder')
3
3
  const curry5 = require('./curry5')
4
4
  const objectKeys = require('./objectKeys')
5
- const objectGetFirstKey = require('./objectGetFirstKey')
6
5
 
7
6
  /**
8
7
  * @name objectReduceAsync
@@ -0,0 +1,6 @@
1
+ const path = require('path')
2
+
3
+ // pathResolve(...args) -> resolvedPath string
4
+ const pathResolve = (...args) => path.resolve(...args)
5
+
6
+ module.exports = pathResolve
@@ -4,20 +4,20 @@ const curry3 = require('./curry3')
4
4
  const reducerAllSync = require('./reducerAllSync')
5
5
 
6
6
  /**
7
- * @name reducerAll
7
+ * @name reducerEvery
8
8
  *
9
9
  * @synopsis
10
10
  * ```coffeescript [specscript]
11
- * reducerAll(
11
+ * reducerEvery(
12
12
  * predicate any=>boolean,
13
13
  * ) -> reducer(result boolean, item any)=>boolean
14
14
  * ```
15
15
  */
16
- const reducerAll = predicate => function allReducer(result, item) {
16
+ const reducerEvery = predicate => function allReducer(result, item) {
17
17
  return result === false ? false
18
18
  : isPromise(result) ? result.then(
19
19
  curry3(reducerAllSync, predicate, __, item))
20
20
  : result ? predicate(item) : false
21
21
  }
22
22
 
23
- module.exports = reducerAll
23
+ module.exports = reducerEvery
@@ -1,7 +1,7 @@
1
- const curryArgs3 = require('./curryArgs3')
2
- const genericReduce = require('./genericReduce')
1
+ const curry3 = require('./curry3')
3
2
  const __ = require('./placeholder')
4
3
  const isPromise = require('./isPromise')
4
+ const genericReduce = require('./genericReduce')
5
5
 
6
6
  /**
7
7
  * @name reducerFlatMap
@@ -26,8 +26,8 @@ const reducerFlatMap = (
26
26
  ) => function flatMappingReducer(result, value) {
27
27
  const monad = flatMapper(value)
28
28
  return isPromise(monad)
29
- ? monad.then(curryArgs3(genericReduce, __, reducer, result))
30
- : genericReduce([monad], reducer, result)
29
+ ? monad.then(curry3(genericReduce, __, reducer, result))
30
+ : genericReduce(monad, reducer, result)
31
31
  }
32
32
 
33
33
  module.exports = reducerFlatMap
@@ -26,7 +26,7 @@ const genericReduce = require('./genericReduce')
26
26
  const reducerFlatten = reducer => function flatteningReducer(
27
27
  result, reducerItem,
28
28
  ) {
29
- return genericReduce([reducerItem], reducer, result)
29
+ return genericReduce(reducerItem, reducer, result)
30
30
  }
31
31
 
32
32
  module.exports = reducerFlatten
@@ -4,11 +4,11 @@ const __ = require('./placeholder')
4
4
  const isPromise = require('./isPromise')
5
5
 
6
6
  /**
7
- * @name reducerAny
7
+ * @name reducerSome
8
8
  *
9
9
  * @synopsis
10
10
  * ```coffeescript [specscript]
11
- * reducerAny(
11
+ * reducerSome(
12
12
  * predicate any=>boolean,
13
13
  * ) -> anyReducer (result boolean, item any)=>boolean
14
14
  * ```
@@ -17,10 +17,10 @@ const isPromise = require('./isPromise')
17
17
  *
18
18
  * @TODO throw to break early?
19
19
  */
20
- const reducerAny = predicate => function anyReducer(result, item) {
20
+ const reducerSome = predicate => function anyReducer(result, item) {
21
21
  return result === true ? result
22
22
  : isPromise(result) ? result.then(curry2(reducerAnySync(predicate), __, item))
23
23
  : result ? true : predicate(item)
24
24
  }
25
25
 
26
- module.exports = reducerAny
26
+ module.exports = reducerSome
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @name timeInLoop
3
+ *
4
+ * @synopsis
5
+ * ```coffeescript [specscript]
6
+ * timeInLoop(description string, loopCount number, fn function, options? {
7
+ * silent?: boolean,
8
+ * }) -> undefined
9
+ * ```
10
+ *
11
+ * @description
12
+ * Logs the amount of time required for a function to run a certain number of times
13
+ *
14
+ * ```js
15
+ * timeInLoop('hello', 1e6, () => 'hello') // hello: 1e+6: 3.474ms
16
+ * ```
17
+ *
18
+ * Reference: https://gist.github.com/funfunction/91b5876a5f562e1e352aed0fcabc3858
19
+ */
20
+ const timeInLoop = (description, loopCount, fn, options = {}) => {
21
+ const d = `${description}: ${loopCount.toExponential()}`
22
+ const start = performance.now()
23
+ for (let i = 0; i < loopCount; i++) {
24
+ fn()
25
+ }
26
+ const end = performance.now()
27
+ const duration = end - start
28
+
29
+ if (options.silent) {
30
+ return { description, loopCount, duration }
31
+ }
32
+
33
+ console.log(`${d}: ${duration}`)
34
+ return { description, loopCount, duration }
35
+ }
36
+
37
+ module.exports = timeInLoop
@@ -0,0 +1,18 @@
1
+ const assert = require('assert')
2
+ const timeInLoop = require('./timeInLoop')
3
+
4
+ describe('timeInLoop', () => {
5
+ it('times a function in a loop', async () => {
6
+ const result = timeInLoop('hey', 1e5, () => 'hey')
7
+ assert.equal(result.description, 'hey')
8
+ assert.equal(result.loopCount, 1e5)
9
+ assert.equal(typeof result.duration, 'number')
10
+ })
11
+
12
+ it('can be silent', async () => {
13
+ const result = timeInLoop('hey', 1e5, () => 'hey', { silent: true })
14
+ assert.equal(result.description, 'hey')
15
+ assert.equal(result.loopCount, 1e5)
16
+ assert.equal(typeof result.duration, 'number')
17
+ })
18
+ })
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @name timeInLoopAsync
3
+ *
4
+ * @synopsis
5
+ * ```coffeescript [specscript]
6
+ * timeInLoop.async(description string, loopCount number, fn function, options? {
7
+ * silent?: boolean,
8
+ * }) -> undefined
9
+ * ```
10
+ *
11
+ * @description
12
+ * Like timeInLoop, but every call is awaited
13
+ *
14
+ * ```js
15
+ * timeInLoop.async('async hello', 1e6, async () => 'hello') // async hello: 1e+6: 116.006ms
16
+ * ```
17
+ */
18
+ const timeInLoopAsync = async (description, loopCount, fn, options = {}) => {
19
+ const d = `${description}: ${loopCount.toExponential()}`
20
+ const start = performance.now()
21
+ for (let i = 0; i < loopCount; i++) {
22
+ await fn()
23
+ }
24
+ const end = performance.now()
25
+ const duration = end - start
26
+
27
+ if (options.silent) {
28
+ return { description, loopCount, duration }
29
+ }
30
+
31
+ console.log(`${d}: ${duration}`)
32
+ return { description, loopCount, duration }
33
+ }
34
+
35
+ module.exports = timeInLoopAsync
@@ -0,0 +1,22 @@
1
+ const assert = require('assert')
2
+ const timeInLoopAsync = require('./timeInLoopAsync')
3
+
4
+ describe('timeInLoopAsync', () => {
5
+ it('times an async function in a loop', async () => {
6
+ const p = timeInLoopAsync('asyncHey', 1e5, async () => 'asyncHey')
7
+ assert(p instanceof Promise)
8
+ const result = await p
9
+ assert.equal(result.description, 'asyncHey')
10
+ assert.equal(result.loopCount, 1e5)
11
+ assert.equal(typeof result.duration, 'number')
12
+ })
13
+
14
+ it('can be silent', async () => {
15
+ const p = timeInLoopAsync('asyncHey', 1e5, async () => 'asyncHey', { silent: true })
16
+ assert(p instanceof Promise)
17
+ const result = await p
18
+ assert.equal(result.description, 'asyncHey')
19
+ assert.equal(result.loopCount, 1e5)
20
+ assert.equal(typeof result.duration, 'number')
21
+ })
22
+ })
package/all.js CHANGED
@@ -1,72 +1,138 @@
1
+ const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
2
+ const promiseAll = require('./_internal/promiseAll')
1
3
  const isArray = require('./_internal/isArray')
2
- const arrayAll = require('./_internal/arrayAll')
3
- const iteratorAll = require('./_internal/iteratorAll')
4
- const asyncIteratorAll = require('./_internal/asyncIteratorAll')
5
- const objectValues = require('./_internal/objectValues')
6
- const reducerAll = require('./_internal/reducerAll')
7
- const symbolIterator = require('./_internal/symbolIterator')
8
- const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
4
+ const __ = require('./_internal/placeholder')
5
+ const curry2 = require('./_internal/curry2')
6
+ const curryArgs2 = require('./_internal/curryArgs2')
7
+ const functionArrayAll = require('./_internal/functionArrayAll')
8
+ const functionArrayAllSeries = require('./_internal/functionArrayAllSeries')
9
+ const functionObjectAll = require('./_internal/functionObjectAll')
9
10
 
10
11
  /**
11
12
  * @name all
12
13
  *
13
14
  * @synopsis
14
15
  * ```coffeescript [specscript]
15
- * type Foldable = Iterable|AsyncIterable|Object
16
+ * all(...args, funcsArray Array<function>) -> result Promise|Array
16
17
  *
17
- * all(predicate function)(collection Foldable) -> result Promise|boolean
18
+ * all(funcsArray Array<function>)(...args) -> result Promise|Array
19
+ *
20
+ * all(...args, funcsObject Object<function>) -> result Promise|Object
21
+ *
22
+ * all(funcsObject Object<function>)(...args) -> result Promise|Object
18
23
  * ```
19
24
  *
20
25
  * @description
21
- * Test a predicate concurrently across all items of a collection, returning true if all predications are truthy.
26
+ * Function executor and composer. Accepts either an array of functions or an object of functions as the values. Calls each function of the provided array or object in parallel with the provided arguments. Returns either an array or object of the results of the function executions.
22
27
  *
23
28
  * ```javascript [playground]
24
- * const isOdd = number => number % 2 == 1
29
+ * const createArrayOfGreetingsFor = all([
30
+ * name => `Hi ${name}`,
31
+ * name => `Hey ${name}`,
32
+ * name => `Hello ${name}`,
33
+ * ])
34
+ *
35
+ * const arrayOfGreetingsForFred = createArrayOfGreetingsFor('Fred')
36
+ *
37
+ * console.log(arrayOfGreetingsForFred)
38
+ * // ['Hi Fred', 'Hey Fred', 'Hello Fred']
25
39
  *
26
- * console.log(
27
- * all(isOdd)([1, 2, 3, 4, 5]),
28
- * ) // false
40
+ * const createObjectOfGreetingsFor = all({
41
+ * hi: name => `Hi ${name}`,
42
+ * hey: name => `Hey ${name}`,
43
+ * hello: name => `Hello ${name}`,
44
+ * })
29
45
  *
30
- * console.log(
31
- * all(isOdd)([1, 3, 5]),
32
- * ) // true
46
+ * const objectOfGreetingsForJane = createObjectOfGreetingsFor('Jane')
47
+ *
48
+ * console.log(objectOfGreetingsForJane)
49
+ * // { hi: 'Hi Jane', hey: 'Hey Jane', hello: 'Hello Jane' }
33
50
  * ```
34
51
  *
35
- * The collection can be any iterable, async iterable, or object values iterable collection. Below is an example of `all` accepting an async generator as the collection.
52
+ * `all` can simultaneously compose objects and handle promises.
36
53
  *
37
54
  * ```javascript [playground]
38
- * const asyncNumbers = async function* () {
39
- * yield 1; yield 2; yield 3; yield 4; yield 5
40
- * }
55
+ * const identity = value => value
56
+ *
57
+ * const userbase = new Map()
58
+ * userbase.set('1', { _id: 1, name: 'George' })
59
+ *
60
+ * const getUserByID = async id => userbase.get(id)
61
+ *
62
+ * const getAndLogUserById = pipe([
63
+ * all({
64
+ * id: identity,
65
+ * user: getUserByID,
66
+ * }),
67
+ * tap(({ id, user }) => {
68
+ * console.log(`Got user ${JSON.stringify(user)} by id ${id}`)
69
+ * }),
70
+ * ])
41
71
  *
42
- * all(async number => number < 6)(asyncNumbers()).then(console.log) // true
72
+ * getAndLogUserById('1') // Got user {"_id":1,"name":"George"} by id 1
43
73
  * ```
44
74
  *
45
75
  * @execution concurrent
46
- *
47
- * @muxing
48
76
  */
49
- const all = predicate => function allTruthy(value) {
50
- if (isArray(value)) {
51
- return arrayAll(value, predicate)
52
- }
53
- if (value == null) {
54
- return predicate(value)
55
- }
56
77
 
57
- if (typeof value[symbolIterator] == 'function') {
58
- return iteratorAll(value[symbolIterator](), predicate)
78
+ const all = function (...args) {
79
+ const funcs = args.pop()
80
+ if (args.length == 0) {
81
+ return isArray(funcs)
82
+ ? curryArgs2(functionArrayAll, funcs, __)
83
+ : curryArgs2(functionObjectAll, funcs, __)
59
84
  }
60
- if (typeof value[symbolAsyncIterator] == 'function') {
61
- return asyncIteratorAll(value[symbolAsyncIterator](), predicate, new Set())
85
+
86
+ if (areAnyValuesPromises(args)) {
87
+ return isArray(funcs)
88
+ ? promiseAll(args).then(curry2(functionArrayAll, funcs, __))
89
+ : promiseAll(args).then(curry2(functionObjectAll, funcs, __))
62
90
  }
63
- if (typeof value.reduce == 'function') {
64
- return value.reduce(reducerAll(predicate), true)
91
+
92
+ return isArray(funcs)
93
+ ? functionArrayAll(funcs, args)
94
+ : functionObjectAll(funcs, args)
95
+ }
96
+
97
+ /**
98
+ * @name all.series
99
+ *
100
+ * @synopsis
101
+ * ```coffeescript [specscript]
102
+ * all.series(...args, funcsArray Array<function>) -> result Promise|Array
103
+ *
104
+ * all.series(funcsArray Array<function>)(...args) -> result Promise|Array
105
+ * ```
106
+ *
107
+ * @description
108
+ * `all` with serial execution.
109
+ *
110
+ * ```javascript [playground]
111
+ * const sleep = ms => () => new Promise(resolve => setTimeout(resolve, ms))
112
+ *
113
+ * all.series([
114
+ * greeting => console.log(greeting + ' world'),
115
+ * sleep(1000),
116
+ * greeting => console.log(greeting + ' mom'),
117
+ * sleep(1000),
118
+ * greeting => console.log(greeting + ' goodbye'),
119
+ * ])('hello') // hello world
120
+ * // hello mom
121
+ * // hello goodbye
122
+ * ```
123
+ *
124
+ * @execution series
125
+ */
126
+
127
+ all.series = function allSeries(...args) {
128
+ const funcs = args.pop()
129
+ if (args.length == 0) {
130
+ return curryArgs2(functionArrayAllSeries, funcs, __)
65
131
  }
66
- if (value.constructor == Object) {
67
- return arrayAll(objectValues(value), predicate)
132
+ if (areAnyValuesPromises(args)) {
133
+ return promiseAll(args).then(curry2(functionArrayAllSeries, funcs, __))
68
134
  }
69
- return predicate(value)
135
+ return functionArrayAllSeries(funcs, args)
70
136
  }
71
137
 
72
138
  module.exports = all
package/and.js CHANGED
@@ -1,6 +1,10 @@
1
+ const promiseAll = require('./_internal/promiseAll')
1
2
  const isPromise = require('./_internal/isPromise')
2
- const curry3 = require('./_internal/curry3')
3
+ const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
3
4
  const __ = require('./_internal/placeholder')
5
+ const curry2 = require('./_internal/curry2')
6
+ const curry3 = require('./_internal/curry3')
7
+ const curryArgs2 = require('./_internal/curryArgs2')
4
8
  const thunkConditional = require('./_internal/thunkConditional')
5
9
  const areAllValuesNonfunctions = require('./_internal/areAllValuesNonfunctions')
6
10
  const thunkify2 = require('./_internal/thunkify2')
@@ -8,22 +12,22 @@ const thunkify3 = require('./_internal/thunkify3')
8
12
  const always = require('./_internal/always')
9
13
 
10
14
  /**
11
- * @name areAllNonfunctionsTruthy
15
+ * @name areAllValuesTruthy
12
16
  *
13
17
  * @synopsis
14
18
  * ```coffeescript [specscript]
15
- * areAllNonfunctionsTruthy(predicates Array<value>) -> Promise|boolean
19
+ * areAllValuesTruthy(predicates Array<value>) -> Promise|boolean
16
20
  * ```
17
21
  */
18
- const areAllNonfunctionsTruthy = function (predicates, index) {
22
+ const areAllValuesTruthy = function (predicates, index) {
19
23
  const length = predicates.length
20
24
  while (++index < length) {
21
- let predicate = predicates[index]
25
+ const predicate = predicates[index]
22
26
  if (isPromise(predicate)) {
23
27
  return predicate.then(curry3(
24
28
  thunkConditional,
25
29
  __,
26
- thunkify2(areAllNonfunctionsTruthy, predicates, index),
30
+ thunkify2(areAllValuesTruthy, predicates, index),
27
31
  always(false),
28
32
  ))
29
33
  }
@@ -41,17 +45,17 @@ const areAllNonfunctionsTruthy = function (predicates, index) {
41
45
  * ```coffeescript [specscript]
42
46
  * asyncArePredicatesAllTruthy(
43
47
  * predicates Array<value=>Promise|boolean>
44
- * point any,
48
+ * args Array,
45
49
  * index number,
46
50
  * ) -> allTruthy boolean
47
51
  * ```
48
52
  */
49
- const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
53
+ const asyncArePredicatesAllTruthy = async function (args, predicates, index) {
50
54
  const length = predicates.length
51
55
  while (++index < length) {
52
56
  let predicate = predicates[index]
53
57
  if (typeof predicate == 'function') {
54
- predicate = predicate(point)
58
+ predicate = predicate(...args)
55
59
  }
56
60
  if (isPromise(predicate)) {
57
61
  predicate = await predicate
@@ -63,6 +67,31 @@ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
63
67
  return true
64
68
  }
65
69
 
70
+ // areAllPredicatesTruthy(args Array, predicates Array<function>) -> Promise|boolean
71
+ const areAllPredicatesTruthy = function (args, predicates) {
72
+ const length = predicates.length
73
+ let index = -1
74
+
75
+ while (++index < length) {
76
+ let predicate = predicates[index]
77
+ if (typeof predicate == 'function') {
78
+ predicate = predicate(...args)
79
+ }
80
+ if (isPromise(predicate)) {
81
+ return predicate.then(curry3(
82
+ thunkConditional,
83
+ __,
84
+ thunkify3(asyncArePredicatesAllTruthy, args, predicates, index),
85
+ always(false),
86
+ ))
87
+ }
88
+ if (!predicate) {
89
+ return false
90
+ }
91
+ }
92
+ return true
93
+ }
94
+
66
95
  /**
67
96
  * @name and
68
97
  *
@@ -70,9 +99,9 @@ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
70
99
  * ```coffeescript [specscript]
71
100
  * and(values Array<boolean>) -> result boolean
72
101
  *
73
- * and(
74
- * predicatesOrValues Array<function|boolean>
75
- * )(value any) -> result Promise|boolean
102
+ * and(...args, predicatesOrValues Array<function|boolean>) -> Promise|boolean
103
+ *
104
+ * and(predicatesOrValues Array<function|boolean>)(...args) -> Promise|boolean
76
105
  * ```
77
106
  *
78
107
  * @description
@@ -106,33 +135,22 @@ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
106
135
  *
107
136
  * @note ...args slows down here by an order of magnitude
108
137
  */
109
- const and = predicates => {
110
- if (areAllValuesNonfunctions(predicates)) {
111
- return areAllNonfunctionsTruthy(predicates, -1)
138
+ const and = function (...args) {
139
+ const predicatesOrValues = args.pop()
140
+ if (areAllValuesNonfunctions(predicatesOrValues)) {
141
+ return areAllValuesTruthy(predicatesOrValues, -1)
112
142
  }
113
- return function arePredicatesAllTruthy(point) {
114
- const length = predicates.length
115
- let index = -1
116
143
 
117
- while (++index < length) {
118
- let predicate = predicates[index]
119
- if (typeof predicate == 'function') {
120
- predicate = predicate(point)
121
- }
122
- if (isPromise(predicate)) {
123
- return predicate.then(curry3(
124
- thunkConditional,
125
- __,
126
- thunkify3(asyncArePredicatesAllTruthy, predicates, point, index),
127
- always(false),
128
- ))
129
- }
130
- if (!predicate) {
131
- return false
132
- }
133
- }
134
- return true
144
+ if (args.length == 0) {
145
+ return curryArgs2(areAllPredicatesTruthy, __, predicatesOrValues)
135
146
  }
147
+
148
+ if (areAnyValuesPromises(args)) {
149
+ return promiseAll(args)
150
+ .then(curry2(areAllPredicatesTruthy, __, predicatesOrValues))
151
+ }
152
+
153
+ return areAllPredicatesTruthy(args, predicatesOrValues)
136
154
  }
137
155
 
138
156
  module.exports = and
@@ -21,7 +21,7 @@ const FlatMappingIterator = function (iterator, flatMapper) {
21
21
  const buffer = [], promises = [],
22
22
  bufferPush = curry3(callPropUnary, buffer, 'push', __),
23
23
  bufferPushReducer = funcConcatSync(getArg1, bufferPush),
24
- flattenIntoBuffer = curryArgs3(genericReduce, __, bufferPushReducer, null),
24
+ flattenIntoBuffer = curry3(genericReduce, __, bufferPushReducer, null),
25
25
  loadIntoBuffer = funcConcatSync(flattenIntoBuffer, tapSync(bufferLoading => {
26
26
  if (isPromise(bufferLoading)) {
27
27
  const promise = bufferLoading.then(() => promises.delete(promise))
@@ -0,0 +1,93 @@
1
+ const isPromise = require('./isPromise')
2
+
3
+ /**
4
+ * @name _Promise
5
+ *
6
+ * @synopsis
7
+ * ```coffeescript [specscript]
8
+ * new _Promise() -> _Promise
9
+ * ```
10
+ *
11
+ * @description
12
+ * Internal _Promise. Does not conform to spec.
13
+ */
14
+ const _Promise = function () {
15
+ this.onFulfilledCallbacks = []
16
+ this.onRejectedCallbacks = []
17
+ this.value = null
18
+ this.error = null
19
+ this.status = 'pending'
20
+ }
21
+
22
+ _Promise.prototype._fulfill = function (value) {
23
+ if (this.status == 'pending') {
24
+ this.status = 'fulfilled'
25
+ this.value = value
26
+ this.onFulfilledCallbacks.forEach(cb => cb(value)) // TODO optimize
27
+ }
28
+ }
29
+
30
+ _Promise.prototype._reject = function (error) {
31
+ if (this.status == 'pending') {
32
+ this.status = 'rejected'
33
+ this.error = error
34
+ this.onRejectedCallbacks.forEach(cb => cb(error)) // TODO optimize
35
+ }
36
+ }
37
+
38
+ _Promise.prototype.then = function (onFulfilled, onRejected) {
39
+ return new Promise((resolve, reject) => {
40
+ if (this.status == 'pending') {
41
+ this.onFulfilledCallbacks.push(() => {
42
+ try {
43
+ const ret = onFulfilled(this.value)
44
+ if (isPromise(ret)) {
45
+ ret.then(resolve, reject)
46
+ } else {
47
+ resolve(ret)
48
+ }
49
+ } catch (error) {
50
+ reject(error)
51
+ }
52
+ })
53
+ this.onRejectedCallbacks.push(() => {
54
+ try {
55
+ const ret = onRejected(this.error)
56
+ if (isPromise(ret)) {
57
+ ret.then(resolve, reject)
58
+ } else {
59
+ reject(ret)
60
+ }
61
+ } catch (error) {
62
+ reject(error)
63
+ }
64
+ })
65
+ }
66
+ else if (this.status == 'fulfilled') {
67
+ try {
68
+ const ret = onFulfilled(this.value)
69
+ if (isPromise(ret)) {
70
+ ret.then(resolve, reject)
71
+ } else {
72
+ resolve(ret)
73
+ }
74
+ } catch (error) {
75
+ reject(error)
76
+ }
77
+ }
78
+ else {
79
+ try {
80
+ const ret = onRejected(this.error)
81
+ if (isPromise(ret)) {
82
+ ret.then(resolve, reject)
83
+ } else {
84
+ reject(ret)
85
+ }
86
+ } catch (error) {
87
+ reject(error)
88
+ }
89
+ }
90
+ })
91
+ }
92
+
93
+ module.exports = _Promise