rubico 1.9.6 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc.js +3 -2
  3. package/.github/workflows/nodejs.yml +1 -1
  4. package/AggregateReducer.js +19 -0
  5. package/AggregateReducer.test.js +82 -0
  6. package/CHANGELOG.md +22 -1
  7. package/Transducer.js +162 -0
  8. package/Transducer.test.js +117 -0
  9. package/_internal/ComparisonOperator.js +68 -0
  10. package/_internal/File.js +41 -0
  11. package/_internal/FlatMappingAsyncIterator.js +4 -4
  12. package/_internal/FlatMappingIterator.js +1 -1
  13. package/_internal/TimeInLoopSuite.js +138 -0
  14. package/_internal/areAnyValuesPromises.js +23 -0
  15. package/_internal/{arrayAll.js → arrayEvery.js} +4 -4
  16. package/_internal/arrayExtend.js +3 -2
  17. package/_internal/arrayFilter.js +3 -4
  18. package/_internal/{arrayAny.js → arraySome.js} +8 -8
  19. package/_internal/{asyncIteratorAll.js → asyncIteratorEvery.js} +4 -4
  20. package/_internal/{asyncIteratorAny.js → asyncIteratorSome.js} +4 -4
  21. package/_internal/curry4.test.js +25 -0
  22. package/_internal/curry5.test.js +29 -0
  23. package/_internal/curryArgs2.js +43 -0
  24. package/_internal/curryArgs3.test.js +21 -0
  25. package/_internal/curryArgs4.js +65 -0
  26. package/_internal/curryArgs4.test.js +25 -0
  27. package/_internal/equals.js +13 -0
  28. package/_internal/findAllFilePaths.js +22 -0
  29. package/_internal/funcApply.js +2 -0
  30. package/_internal/funcCall.js +14 -0
  31. package/_internal/functionArrayAll.js +26 -0
  32. package/_internal/functionArrayAllSeries.js +55 -0
  33. package/_internal/functionObjectAll.js +32 -0
  34. package/_internal/genericReduce.js +4 -22
  35. package/_internal/genericTransform.js +15 -15
  36. package/_internal/improvedGenericTransform.js +93 -0
  37. package/_internal/{iteratorAll.js → iteratorEvery.js} +4 -4
  38. package/_internal/{iteratorAny.js → iteratorSome.js} +6 -6
  39. package/_internal/leftResolverRightResolverCompare.js +19 -0
  40. package/_internal/leftResolverRightValueCompare.js +16 -0
  41. package/_internal/leftValueRightResolverCompare.js +16 -0
  42. package/_internal/objectReduce.js +0 -1
  43. package/_internal/pathResolve.js +6 -0
  44. package/_internal/{reducerAll.js → reducerEvery.js} +4 -4
  45. package/_internal/reducerFlatMap.js +4 -4
  46. package/_internal/reducerFlatten.js +1 -1
  47. package/_internal/{reducerAny.js → reducerSome.js} +4 -4
  48. package/_internal/timeInLoop.js +37 -0
  49. package/_internal/timeInLoop.test.js +18 -0
  50. package/_internal/timeInLoopAsync.js +35 -0
  51. package/_internal/timeInLoopAsync.test.js +22 -0
  52. package/all.js +105 -45
  53. package/always.js +3 -9
  54. package/and.js +69 -45
  55. package/archive/{FlatMappingIteratorCool.js → FlatMappingIterator-2020-09-28.js} +1 -1
  56. package/archive/_Promise-2023-05-29.js +93 -0
  57. package/archive/arrayMap2-2023-05-29.js +73 -0
  58. package/archive/benchmarks-v1.9.7/all.js +34 -0
  59. package/archive/benchmarks-v1.9.7/and.js +24 -0
  60. package/archive/benchmarks-v1.9.7/assign.js +174 -0
  61. package/archive/benchmarks-v1.9.7/curry.js +55 -0
  62. package/archive/benchmarks-v1.9.7/eq.js +25 -0
  63. package/archive/benchmarks-v1.9.7/filter.js +1322 -0
  64. package/archive/benchmarks-v1.9.7/flatMap.js +48 -0
  65. package/archive/benchmarks-v1.9.7/get.js +44 -0
  66. package/archive/benchmarks-v1.9.7/gt.js +25 -0
  67. package/archive/benchmarks-v1.9.7/gte.js +25 -0
  68. package/archive/benchmarks-v1.9.7/lt.js +25 -0
  69. package/archive/benchmarks-v1.9.7/lte.js +25 -0
  70. package/archive/benchmarks-v1.9.7/map.js +892 -0
  71. package/archive/benchmarks-v1.9.7/omit.js +28 -0
  72. package/archive/benchmarks-v1.9.7/or.js +51 -0
  73. package/archive/benchmarks-v1.9.7/pick.js +24 -0
  74. package/archive/benchmarks-v1.9.7/pipe.js +152 -0
  75. package/archive/benchmarks-v1.9.7/reduce.js +739 -0
  76. package/archive/benchmarks-v1.9.7/switchCase.js +256 -0
  77. package/archive/benchmarks-v1.9.7/tap.js +90 -0
  78. package/archive/benchmarks-v1.9.7/transform.js +218 -0
  79. package/archive/benchmarks-v1.9.7/tryCatch.js +108 -0
  80. package/assign.js +45 -22
  81. package/bench +65 -0
  82. package/benchmark-output/v1.9.7 +268 -0
  83. package/benchmarks/all.async.js +43 -0
  84. package/benchmarks/all.js +42 -33
  85. package/benchmarks/always.js +15 -0
  86. package/benchmarks/and.async.js +25 -0
  87. package/benchmarks/and.js +20 -19
  88. package/benchmarks/assign.async.js +27 -0
  89. package/benchmarks/assign.js +20 -167
  90. package/benchmarks/curry.js +34 -54
  91. package/benchmarks/eq.async.js +23 -0
  92. package/benchmarks/eq.js +17 -19
  93. package/benchmarks/every.async.js +19 -0
  94. package/benchmarks/every.js +19 -0
  95. package/benchmarks/filter.async.js +32 -0
  96. package/benchmarks/filter.js +27 -1311
  97. package/benchmarks/flatMap.async.js +26 -0
  98. package/benchmarks/flatMap.js +26 -36
  99. package/benchmarks/get.async.js +19 -0
  100. package/benchmarks/get.js +27 -32
  101. package/benchmarks/gt.async.js +23 -0
  102. package/benchmarks/gt.js +17 -19
  103. package/benchmarks/gte.async.js +23 -0
  104. package/benchmarks/gte.js +17 -19
  105. package/benchmarks/lt.async.js +23 -0
  106. package/benchmarks/lt.js +17 -19
  107. package/benchmarks/lte.async.js +23 -0
  108. package/benchmarks/lte.js +17 -19
  109. package/benchmarks/map.async.js +43 -0
  110. package/benchmarks/map.js +24 -876
  111. package/benchmarks/misc/Promise.js +26 -0
  112. package/benchmarks/misc/isPromise.js +30 -0
  113. package/benchmarks/misc/promiseAll.js +36 -0
  114. package/benchmarks/not.js +23 -0
  115. package/benchmarks/omit.js +30 -20
  116. package/benchmarks/or.async.js +25 -0
  117. package/benchmarks/or.js +23 -49
  118. package/benchmarks/pick.js +30 -16
  119. package/benchmarks/pipe.async.js +47 -0
  120. package/benchmarks/pipe.js +46 -151
  121. package/benchmarks/reduce.async.js +32 -0
  122. package/benchmarks/reduce.js +27 -728
  123. package/benchmarks/set.async.js +19 -0
  124. package/benchmarks/set.js +41 -0
  125. package/benchmarks/some.async.js +19 -0
  126. package/benchmarks/some.js +19 -0
  127. package/benchmarks/switchCase.async.js +27 -0
  128. package/benchmarks/switchCase.js +55 -256
  129. package/benchmarks/tap.js +10 -85
  130. package/benchmarks/thunkify.js +15 -0
  131. package/benchmarks/transform.async.js +27 -0
  132. package/benchmarks/transform.js +28 -206
  133. package/benchmarks/tryCatch.async.js +25 -0
  134. package/benchmarks/tryCatch.js +24 -100
  135. package/{distributor.js → build} +50 -50
  136. package/compose.js +46 -0
  137. package/curry.js +20 -12
  138. package/dist/__.es.js +2 -2
  139. package/dist/__.es.min.js +2 -2
  140. package/dist/__.js +2 -2
  141. package/dist/__.min.js +2 -2
  142. package/dist/__.min.mjs +2 -2
  143. package/dist/__.mjs +2 -2
  144. package/dist/all.es.js +173 -92
  145. package/dist/all.es.min.js +3 -3
  146. package/dist/all.js +173 -92
  147. package/dist/all.min.js +3 -3
  148. package/dist/all.min.mjs +3 -3
  149. package/dist/all.mjs +173 -92
  150. package/dist/always.es.js +2 -2
  151. package/dist/always.es.min.js +2 -2
  152. package/dist/always.js +2 -2
  153. package/dist/always.min.js +2 -2
  154. package/dist/always.min.mjs +2 -2
  155. package/dist/always.mjs +2 -2
  156. package/dist/and.es.js +101 -32
  157. package/dist/and.es.min.js +3 -3
  158. package/dist/and.js +101 -32
  159. package/dist/and.min.js +3 -3
  160. package/dist/and.min.mjs +3 -3
  161. package/dist/and.mjs +101 -32
  162. package/dist/assign.es.js +37 -10
  163. package/dist/assign.es.min.js +3 -3
  164. package/dist/assign.js +37 -10
  165. package/dist/assign.min.js +3 -3
  166. package/dist/assign.min.mjs +3 -3
  167. package/dist/assign.mjs +37 -10
  168. package/dist/compose.es.js +71 -0
  169. package/dist/compose.es.min.js +7 -0
  170. package/dist/compose.js +78 -0
  171. package/dist/compose.min.js +8 -0
  172. package/dist/compose.min.mjs +7 -0
  173. package/dist/compose.mjs +71 -0
  174. package/dist/curry.es.js +2 -2
  175. package/dist/curry.es.min.js +2 -2
  176. package/dist/curry.js +2 -2
  177. package/dist/curry.min.js +2 -2
  178. package/dist/curry.min.mjs +2 -2
  179. package/dist/curry.mjs +2 -2
  180. package/dist/eq.es.js +172 -49
  181. package/dist/eq.es.min.js +3 -3
  182. package/dist/eq.js +172 -49
  183. package/dist/eq.min.js +3 -3
  184. package/dist/eq.min.mjs +3 -3
  185. package/dist/eq.mjs +172 -49
  186. package/dist/every.es.js +194 -0
  187. package/dist/every.es.min.js +7 -0
  188. package/dist/every.js +201 -0
  189. package/dist/every.min.js +8 -0
  190. package/dist/every.min.mjs +7 -0
  191. package/dist/every.mjs +194 -0
  192. package/dist/filter.es.js +14 -108
  193. package/dist/filter.es.min.js +3 -3
  194. package/dist/filter.js +14 -108
  195. package/dist/filter.min.js +3 -3
  196. package/dist/filter.min.mjs +3 -3
  197. package/dist/filter.mjs +14 -108
  198. package/dist/flatMap.es.js +27 -214
  199. package/dist/flatMap.es.min.js +3 -3
  200. package/dist/flatMap.js +27 -214
  201. package/dist/flatMap.min.js +3 -3
  202. package/dist/flatMap.min.mjs +3 -3
  203. package/dist/flatMap.mjs +27 -214
  204. package/dist/{x/forEach.es.js → forEach.es.js} +52 -70
  205. package/dist/forEach.es.min.js +7 -0
  206. package/dist/{x/forEach.js → forEach.js} +52 -70
  207. package/dist/forEach.min.js +8 -0
  208. package/dist/forEach.min.mjs +7 -0
  209. package/dist/{x/forEach.mjs → forEach.mjs} +52 -70
  210. package/dist/get.es.js +60 -5
  211. package/dist/get.es.min.js +3 -3
  212. package/dist/get.js +60 -5
  213. package/dist/get.min.js +3 -3
  214. package/dist/get.min.mjs +3 -3
  215. package/dist/get.mjs +60 -5
  216. package/dist/gt.es.js +171 -48
  217. package/dist/gt.es.min.js +3 -3
  218. package/dist/gt.js +171 -48
  219. package/dist/gt.min.js +3 -3
  220. package/dist/gt.min.mjs +3 -3
  221. package/dist/gt.mjs +171 -48
  222. package/dist/gte.es.js +171 -48
  223. package/dist/gte.es.min.js +3 -3
  224. package/dist/gte.js +171 -48
  225. package/dist/gte.min.js +3 -3
  226. package/dist/gte.min.mjs +3 -3
  227. package/dist/gte.mjs +171 -48
  228. package/dist/lt.es.js +171 -48
  229. package/dist/lt.es.min.js +3 -3
  230. package/dist/lt.js +171 -48
  231. package/dist/lt.min.js +3 -3
  232. package/dist/lt.min.mjs +3 -3
  233. package/dist/lt.mjs +171 -48
  234. package/dist/lte.es.js +171 -48
  235. package/dist/lte.es.min.js +3 -3
  236. package/dist/lte.js +171 -48
  237. package/dist/lte.min.js +3 -3
  238. package/dist/lte.min.mjs +3 -3
  239. package/dist/lte.mjs +171 -48
  240. package/dist/map.es.js +12 -101
  241. package/dist/map.es.min.js +3 -3
  242. package/dist/map.js +12 -101
  243. package/dist/map.min.js +3 -3
  244. package/dist/map.min.mjs +3 -3
  245. package/dist/map.mjs +12 -101
  246. package/dist/not.es.js +75 -14
  247. package/dist/not.es.min.js +3 -3
  248. package/dist/not.js +75 -14
  249. package/dist/not.min.js +3 -3
  250. package/dist/not.min.mjs +3 -3
  251. package/dist/not.mjs +75 -14
  252. package/dist/omit.es.js +38 -3
  253. package/dist/omit.es.min.js +3 -3
  254. package/dist/omit.js +38 -3
  255. package/dist/omit.min.js +3 -3
  256. package/dist/omit.min.mjs +3 -3
  257. package/dist/omit.mjs +38 -3
  258. package/dist/or.es.js +99 -31
  259. package/dist/or.es.min.js +3 -3
  260. package/dist/or.js +99 -31
  261. package/dist/or.min.js +3 -3
  262. package/dist/or.min.mjs +3 -3
  263. package/dist/or.mjs +99 -31
  264. package/dist/pick.es.js +38 -3
  265. package/dist/pick.es.min.js +3 -3
  266. package/dist/pick.js +38 -3
  267. package/dist/pick.min.js +3 -3
  268. package/dist/pick.min.mjs +3 -3
  269. package/dist/pick.mjs +38 -3
  270. package/dist/pipe.es.js +42 -46
  271. package/dist/pipe.es.min.js +3 -3
  272. package/dist/pipe.js +42 -46
  273. package/dist/pipe.min.js +3 -3
  274. package/dist/pipe.min.mjs +3 -3
  275. package/dist/pipe.mjs +42 -46
  276. package/dist/reduce.es.js +52 -94
  277. package/dist/reduce.es.min.js +3 -3
  278. package/dist/reduce.js +52 -94
  279. package/dist/reduce.min.js +3 -3
  280. package/dist/reduce.min.mjs +3 -3
  281. package/dist/reduce.mjs +52 -94
  282. package/dist/rubico.es.js +746 -869
  283. package/dist/rubico.es.min.js +3 -3
  284. package/dist/rubico.js +746 -869
  285. package/dist/rubico.min.js +3 -3
  286. package/dist/rubico.min.mjs +3 -3
  287. package/dist/rubico.mjs +746 -869
  288. package/dist/set.es.js +18 -3
  289. package/dist/set.es.min.js +3 -3
  290. package/dist/set.js +18 -3
  291. package/dist/set.min.js +3 -3
  292. package/dist/set.min.mjs +3 -3
  293. package/dist/set.mjs +18 -3
  294. package/dist/{any.js → some.es.js} +64 -54
  295. package/dist/some.es.min.js +7 -0
  296. package/dist/{any.mjs → some.js} +72 -48
  297. package/dist/some.min.js +8 -0
  298. package/dist/some.min.mjs +7 -0
  299. package/dist/{any.es.js → some.mjs} +65 -48
  300. package/dist/switchCase.es.js +55 -5
  301. package/dist/switchCase.es.min.js +3 -3
  302. package/dist/switchCase.js +55 -5
  303. package/dist/switchCase.min.js +3 -3
  304. package/dist/switchCase.min.mjs +3 -3
  305. package/dist/switchCase.mjs +55 -5
  306. package/dist/tap.es.js +2 -9
  307. package/dist/tap.es.min.js +3 -3
  308. package/dist/tap.js +2 -9
  309. package/dist/tap.min.js +3 -3
  310. package/dist/tap.min.mjs +3 -3
  311. package/dist/tap.mjs +2 -9
  312. package/dist/thunkify.es.js +45 -2
  313. package/dist/thunkify.es.min.js +3 -3
  314. package/dist/thunkify.js +45 -2
  315. package/dist/thunkify.min.js +3 -3
  316. package/dist/thunkify.min.mjs +3 -3
  317. package/dist/thunkify.mjs +45 -2
  318. package/dist/transform.es.js +35 -71
  319. package/dist/transform.es.min.js +3 -3
  320. package/dist/transform.js +35 -71
  321. package/dist/transform.min.js +3 -3
  322. package/dist/transform.min.mjs +3 -3
  323. package/dist/transform.mjs +35 -71
  324. package/dist/tryCatch.es.js +33 -17
  325. package/dist/tryCatch.es.min.js +3 -3
  326. package/dist/tryCatch.js +33 -17
  327. package/dist/tryCatch.min.js +3 -3
  328. package/dist/tryCatch.min.mjs +3 -3
  329. package/dist/tryCatch.mjs +33 -17
  330. package/dist/x/append.es.js +2 -2
  331. package/dist/x/append.es.min.js +2 -2
  332. package/dist/x/append.js +2 -2
  333. package/dist/x/append.min.js +2 -2
  334. package/dist/x/append.min.mjs +2 -2
  335. package/dist/x/append.mjs +2 -2
  336. package/dist/x/callProp.es.js +2 -2
  337. package/dist/x/callProp.es.min.js +2 -2
  338. package/dist/x/callProp.js +2 -2
  339. package/dist/x/callProp.min.js +2 -2
  340. package/dist/x/callProp.min.mjs +2 -2
  341. package/dist/x/callProp.mjs +2 -2
  342. package/dist/x/defaultsDeep.es.js +2 -2
  343. package/dist/x/defaultsDeep.es.min.js +2 -2
  344. package/dist/x/defaultsDeep.js +2 -2
  345. package/dist/x/defaultsDeep.min.js +2 -2
  346. package/dist/x/defaultsDeep.min.mjs +2 -2
  347. package/dist/x/defaultsDeep.mjs +2 -2
  348. package/dist/x/differenceWith.es.js +7 -7
  349. package/dist/x/differenceWith.es.min.js +3 -3
  350. package/dist/x/differenceWith.js +7 -7
  351. package/dist/x/differenceWith.min.js +2 -2
  352. package/dist/x/differenceWith.min.mjs +3 -3
  353. package/dist/x/differenceWith.mjs +7 -7
  354. package/dist/x/filterOut.es.js +60 -117
  355. package/dist/x/filterOut.es.min.js +3 -3
  356. package/dist/x/filterOut.js +60 -117
  357. package/dist/x/filterOut.min.js +3 -3
  358. package/dist/x/filterOut.min.mjs +3 -3
  359. package/dist/x/filterOut.mjs +60 -117
  360. package/dist/x/find.es.js +2 -2
  361. package/dist/x/find.es.min.js +2 -2
  362. package/dist/x/find.js +2 -2
  363. package/dist/x/find.min.js +2 -2
  364. package/dist/x/find.min.mjs +2 -2
  365. package/dist/x/find.mjs +2 -2
  366. package/dist/x/findIndex.es.js +2 -2
  367. package/dist/x/findIndex.es.min.js +2 -2
  368. package/dist/x/findIndex.js +2 -2
  369. package/dist/x/findIndex.min.js +2 -2
  370. package/dist/x/findIndex.min.mjs +2 -2
  371. package/dist/x/findIndex.mjs +2 -2
  372. package/dist/x/first.es.js +2 -2
  373. package/dist/x/first.es.min.js +2 -2
  374. package/dist/x/first.js +2 -2
  375. package/dist/x/first.min.js +2 -2
  376. package/dist/x/first.min.mjs +2 -2
  377. package/dist/x/first.mjs +2 -2
  378. package/dist/x/flatten.es.js +20 -207
  379. package/dist/x/flatten.es.min.js +3 -3
  380. package/dist/x/flatten.js +20 -207
  381. package/dist/x/flatten.min.js +3 -3
  382. package/dist/x/flatten.min.mjs +3 -3
  383. package/dist/x/flatten.mjs +20 -207
  384. package/dist/x/groupBy.es.js +52 -94
  385. package/dist/x/groupBy.es.min.js +3 -3
  386. package/dist/x/groupBy.js +52 -94
  387. package/dist/x/groupBy.min.js +3 -3
  388. package/dist/x/groupBy.min.mjs +3 -3
  389. package/dist/x/groupBy.mjs +52 -94
  390. package/dist/x/has.es.js +2 -2
  391. package/dist/x/has.es.min.js +2 -2
  392. package/dist/x/has.js +2 -2
  393. package/dist/x/has.min.js +2 -2
  394. package/dist/x/has.min.mjs +2 -2
  395. package/dist/x/has.mjs +2 -2
  396. package/dist/x/identity.es.js +2 -2
  397. package/dist/x/identity.es.min.js +2 -2
  398. package/dist/x/identity.js +2 -2
  399. package/dist/x/identity.min.js +2 -2
  400. package/dist/x/identity.min.mjs +2 -2
  401. package/dist/x/identity.mjs +2 -2
  402. package/dist/x/includes.es.js +2 -2
  403. package/dist/x/includes.es.min.js +2 -2
  404. package/dist/x/includes.js +2 -2
  405. package/dist/x/includes.min.js +2 -2
  406. package/dist/x/includes.min.mjs +2 -2
  407. package/dist/x/includes.mjs +2 -2
  408. package/dist/x/isDeepEqual.es.js +2 -2
  409. package/dist/x/isDeepEqual.es.min.js +2 -2
  410. package/dist/x/isDeepEqual.js +2 -2
  411. package/dist/x/isDeepEqual.min.js +2 -2
  412. package/dist/x/isDeepEqual.min.mjs +2 -2
  413. package/dist/x/isDeepEqual.mjs +2 -2
  414. package/dist/x/isEmpty.es.js +2 -2
  415. package/dist/x/isEmpty.es.min.js +2 -2
  416. package/dist/x/isEmpty.js +2 -2
  417. package/dist/x/isEmpty.min.js +2 -2
  418. package/dist/x/isEmpty.min.mjs +2 -2
  419. package/dist/x/isEmpty.mjs +2 -2
  420. package/dist/x/isEqual.es.js +2 -2
  421. package/dist/x/isEqual.es.min.js +2 -2
  422. package/dist/x/isEqual.js +2 -2
  423. package/dist/x/isEqual.min.js +2 -2
  424. package/dist/x/isEqual.min.mjs +2 -2
  425. package/dist/x/isEqual.mjs +2 -2
  426. package/dist/x/isFunction.es.js +2 -2
  427. package/dist/x/isFunction.es.min.js +2 -2
  428. package/dist/x/isFunction.js +2 -2
  429. package/dist/x/isFunction.min.js +2 -2
  430. package/dist/x/isFunction.min.mjs +2 -2
  431. package/dist/x/isFunction.mjs +2 -2
  432. package/dist/x/isIn.es.js +2 -2
  433. package/dist/x/isIn.es.min.js +2 -2
  434. package/dist/x/isIn.js +2 -2
  435. package/dist/x/isIn.min.js +2 -2
  436. package/dist/x/isIn.min.mjs +2 -2
  437. package/dist/x/isIn.mjs +2 -2
  438. package/dist/x/isObject.es.js +2 -2
  439. package/dist/x/isObject.es.min.js +2 -2
  440. package/dist/x/isObject.js +2 -2
  441. package/dist/x/isObject.min.js +2 -2
  442. package/dist/x/isObject.min.mjs +2 -2
  443. package/dist/x/isObject.mjs +2 -2
  444. package/dist/x/isString.es.js +2 -2
  445. package/dist/x/isString.es.min.js +2 -2
  446. package/dist/x/isString.js +2 -2
  447. package/dist/x/isString.min.js +2 -2
  448. package/dist/x/isString.min.mjs +2 -2
  449. package/dist/x/isString.mjs +2 -2
  450. package/dist/x/keys.es.js +2 -2
  451. package/dist/x/keys.es.min.js +2 -2
  452. package/dist/x/keys.js +2 -2
  453. package/dist/x/keys.min.js +2 -2
  454. package/dist/x/keys.min.mjs +2 -2
  455. package/dist/x/keys.mjs +2 -2
  456. package/dist/x/last.es.js +2 -2
  457. package/dist/x/last.es.min.js +2 -2
  458. package/dist/x/last.js +2 -2
  459. package/dist/x/last.min.js +2 -2
  460. package/dist/x/last.min.mjs +2 -2
  461. package/dist/x/last.mjs +2 -2
  462. package/dist/x/maxBy.es.js +59 -6
  463. package/dist/x/maxBy.es.min.js +3 -3
  464. package/dist/x/maxBy.js +59 -6
  465. package/dist/x/maxBy.min.js +3 -3
  466. package/dist/x/maxBy.min.mjs +3 -3
  467. package/dist/x/maxBy.mjs +59 -6
  468. package/dist/x/noop.es.js +2 -2
  469. package/dist/x/noop.es.min.js +2 -2
  470. package/dist/x/noop.js +2 -2
  471. package/dist/x/noop.min.js +2 -2
  472. package/dist/x/noop.min.mjs +2 -2
  473. package/dist/x/noop.mjs +2 -2
  474. package/dist/x/pluck.es.js +32 -103
  475. package/dist/x/pluck.es.min.js +3 -3
  476. package/dist/x/pluck.js +32 -103
  477. package/dist/x/pluck.min.js +3 -3
  478. package/dist/x/pluck.min.mjs +3 -3
  479. package/dist/x/pluck.mjs +32 -103
  480. package/dist/x/prepend.es.js +2 -2
  481. package/dist/x/prepend.es.min.js +2 -2
  482. package/dist/x/prepend.js +2 -2
  483. package/dist/x/prepend.min.js +2 -2
  484. package/dist/x/prepend.min.mjs +2 -2
  485. package/dist/x/prepend.mjs +2 -2
  486. package/dist/x/size.es.js +2 -2
  487. package/dist/x/size.es.min.js +2 -2
  488. package/dist/x/size.js +2 -2
  489. package/dist/x/size.min.js +2 -2
  490. package/dist/x/size.min.mjs +2 -2
  491. package/dist/x/size.mjs +2 -2
  492. package/dist/x/trace.es.js +2 -9
  493. package/dist/x/trace.es.min.js +3 -3
  494. package/dist/x/trace.js +2 -9
  495. package/dist/x/trace.min.js +3 -3
  496. package/dist/x/trace.min.mjs +3 -3
  497. package/dist/x/trace.mjs +2 -9
  498. package/dist/x/unionWith.es.js +2 -2
  499. package/dist/x/unionWith.es.min.js +2 -2
  500. package/dist/x/unionWith.js +2 -2
  501. package/dist/x/unionWith.min.js +2 -2
  502. package/dist/x/unionWith.min.mjs +2 -2
  503. package/dist/x/unionWith.mjs +2 -2
  504. package/dist/x/uniq.es.js +2 -2
  505. package/dist/x/uniq.es.min.js +2 -2
  506. package/dist/x/uniq.js +2 -2
  507. package/dist/x/uniq.min.js +2 -2
  508. package/dist/x/uniq.min.mjs +2 -2
  509. package/dist/x/uniq.mjs +2 -2
  510. package/dist/x/unless.es.js +2 -2
  511. package/dist/x/unless.es.min.js +2 -2
  512. package/dist/x/unless.js +2 -2
  513. package/dist/x/unless.min.js +2 -2
  514. package/dist/x/unless.min.mjs +2 -2
  515. package/dist/x/unless.mjs +2 -2
  516. package/dist/x/values.es.js +2 -2
  517. package/dist/x/values.es.min.js +2 -2
  518. package/dist/x/values.js +2 -2
  519. package/dist/x/values.min.js +2 -2
  520. package/dist/x/values.min.mjs +2 -2
  521. package/dist/x/values.mjs +2 -2
  522. package/dist/x/when.es.js +2 -2
  523. package/dist/x/when.es.min.js +2 -2
  524. package/dist/x/when.js +2 -2
  525. package/dist/x/when.min.js +2 -2
  526. package/dist/x/when.min.mjs +2 -2
  527. package/dist/x/when.mjs +2 -2
  528. package/dist-test.js +9 -2025
  529. package/eq.js +21 -63
  530. package/es.js +746 -869
  531. package/every.js +94 -0
  532. package/filter.js +83 -125
  533. package/flatMap.js +105 -154
  534. package/forEach.js +82 -0
  535. package/get.js +44 -36
  536. package/global.js +6 -4
  537. package/gt.js +15 -58
  538. package/gte.js +14 -57
  539. package/index.js +746 -869
  540. package/lt.js +17 -60
  541. package/lte.js +14 -57
  542. package/map.js +153 -203
  543. package/memory-usage/reduce.js +2 -2
  544. package/not.js +30 -49
  545. package/omit.js +36 -13
  546. package/or.js +64 -41
  547. package/package.json +7 -7
  548. package/pick.js +52 -22
  549. package/pipe.js +27 -92
  550. package/reduce.js +114 -129
  551. package/rubico.js +10 -8
  552. package/set.js +60 -24
  553. package/some.js +105 -0
  554. package/switchCase.js +29 -25
  555. package/tap.js +15 -45
  556. package/test.js +847 -1083
  557. package/thunkify.js +11 -5
  558. package/transform.js +57 -81
  559. package/tryCatch.js +38 -32
  560. package/x/differenceWith.js +3 -3
  561. package/x/filterOut.test.js +6 -6
  562. package/x/flatten.js +1 -1
  563. package/x/flatten.test.js +0 -8
  564. package/x/index.js +0 -2
  565. package/x/pluck.js +18 -27
  566. package/x/pluck.test.js +3 -7
  567. package/x/timeInLoop.js +16 -25
  568. package/x/timeInLoop.test.js +8 -4
  569. package/any.js +0 -88
  570. package/dist/any.es.min.js +0 -7
  571. package/dist/any.min.js +0 -8
  572. package/dist/any.min.mjs +0 -7
  573. package/dist/fork.es.js +0 -159
  574. package/dist/fork.es.min.js +0 -7
  575. package/dist/fork.js +0 -166
  576. package/dist/fork.min.js +0 -8
  577. package/dist/fork.min.mjs +0 -7
  578. package/dist/fork.mjs +0 -159
  579. package/dist/x/forEach.es.min.js +0 -7
  580. package/dist/x/forEach.min.js +0 -8
  581. package/dist/x/forEach.min.mjs +0 -7
  582. package/fork.js +0 -91
  583. package/x/forEach.js +0 -93
  584. package/x/forEach.test.js +0 -218
  585. /package/{benchmarks → archive/benchmarks-v1.9.7}/any.js +0 -0
  586. /package/{x/forEach.benchmark.js → archive/benchmarks-v1.9.7/forEach.js} +0 -0
  587. /package/{benchmarks → archive/benchmarks-v1.9.7}/fork.js +0 -0
  588. /package/{benchmarks → archive/benchmarks-v1.9.7}/integration.js +0 -0
  589. /package/{benchmarks → archive/benchmarks-v1.9.7}/misc.js +0 -0
package/all.js CHANGED
@@ -1,78 +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
- * Reducer<T> = (any, T)=>Promise|any
16
- * Foldable<T> = Iterable<T>|AsyncIterable<T>
17
- * |{ reduce: Reducer<T>=>any }|Object<T>
16
+ * all(...args, funcsArray Array<function>) -> result Promise|Array
18
17
  *
19
- * var T any,
20
- * predicate T=>Promise|boolean,
21
- * foldable Foldable<T>
18
+ * all(funcsArray Array<function>)(...args) -> result Promise|Array
22
19
  *
23
- * all(predicate)(foldable) -> Promise|boolean
20
+ * all(...args, funcsObject Object<function>) -> result Promise|Object
21
+ *
22
+ * all(funcsObject Object<function>)(...args) -> result Promise|Object
24
23
  * ```
25
24
  *
26
25
  * @description
27
- * 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.
28
27
  *
29
28
  * ```javascript [playground]
30
- * 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']
39
+ *
40
+ * const createObjectOfGreetingsFor = all({
41
+ * hi: name => `Hi ${name}`,
42
+ * hey: name => `Hey ${name}`,
43
+ * hello: name => `Hello ${name}`,
44
+ * })
31
45
  *
32
- * console.log(
33
- * all(isOdd)([1, 2, 3, 4, 5]),
34
- * ) // false
46
+ * const objectOfGreetingsForJane = createObjectOfGreetingsFor('Jane')
35
47
  *
36
- * console.log(
37
- * all(isOdd)([1, 3, 5]),
38
- * ) // true
48
+ * console.log(objectOfGreetingsForJane)
49
+ * // { hi: 'Hi Jane', hey: 'Hey Jane', hello: 'Hello Jane' }
39
50
  * ```
40
51
  *
41
- * The value may be an asynchronous stream.
52
+ * `all` can simultaneously compose objects and handle promises.
42
53
  *
43
54
  * ```javascript [playground]
44
- * const asyncNumbers = async function* () {
45
- * yield 1; yield 2; yield 3; yield 4; yield 5
46
- * }
55
+ * const identity = value => value
47
56
  *
48
- * all(async number => number < 6)(asyncNumbers()).then(console.log) // true
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
+ * ])
71
+ *
72
+ * getAndLogUserById('1') // Got user {"_id":1,"name":"George"} by id 1
49
73
  * ```
50
74
  *
51
75
  * @execution concurrent
52
- *
53
- * @muxing
54
76
  */
55
- const all = predicate => function allTruthy(value) {
56
- if (isArray(value)) {
57
- return arrayAll(value, predicate)
58
- }
59
- if (value == null) {
60
- return predicate(value)
61
- }
62
77
 
63
- if (typeof value[symbolIterator] == 'function') {
64
- 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, __)
65
84
  }
66
- if (typeof value[symbolAsyncIterator] == 'function') {
67
- 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, __))
68
90
  }
69
- if (typeof value.reduce == 'function') {
70
- 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, __)
71
131
  }
72
- if (value.constructor == Object) {
73
- return arrayAll(objectValues(value), predicate)
132
+ if (areAnyValuesPromises(args)) {
133
+ return promiseAll(args).then(curry2(functionArrayAllSeries, funcs, __))
74
134
  }
75
- return predicate(value)
135
+ return functionArrayAllSeries(funcs, args)
76
136
  }
77
137
 
78
138
  module.exports = all
package/always.js CHANGED
@@ -9,20 +9,14 @@ const always = require('./_internal/always')
9
9
  * ```
10
10
  *
11
11
  * @description
12
- * Create a function that always returns a value.
12
+ * Creates a function from a value that always returns the provided value.
13
13
  *
14
14
  * ```javascript [playground]
15
15
  * const always5 = always(5)
16
16
  *
17
17
  * console.log(always5()) // 5
18
- *
19
- * console.log(
20
- * fork({
21
- * a: always(1),
22
- * b: always(2),
23
- * c: always(3),
24
- * })(),
25
- * ) // { a: 1, b: 2, c: 3 }
18
+ * console.log(always5()) // 5
19
+ * console.log(always5()) // 5
26
20
  * ```
27
21
  */
28
22
 
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,36 +67,67 @@ 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
  *
69
98
  * @synopsis
70
99
  * ```coffeescript [specscript]
71
- * and(
72
- * predicates Array<predicate function|nonfunction>
73
- * )(point any) -> Promise|boolean
100
+ * and(values Array<boolean>) -> result boolean
101
+ *
102
+ * and(...args, predicatesOrValues Array<function|boolean>) -> Promise|boolean
103
+ *
104
+ * and(predicatesOrValues Array<function|boolean>)(...args) -> Promise|boolean
74
105
  * ```
75
106
  *
76
107
  * @description
77
- * Test an array of predicates or nonfunction values concurrently against a single input, returning true if all test truthy.
108
+ * Tests an array of boolean values, returning true if all boolean values are truthy.
78
109
  *
79
110
  * ```javascript [playground]
80
- * const isOdd = number => number % 2 == 1
81
- *
82
- * const isPositive = number => number > 0
83
- *
84
- * const isLessThan3 = number => number < 3
111
+ * const oneIsLessThanThree = 1 < 3
112
+ * const twoIsGreaterThanOne = 2 > 1
113
+ * const threeIsEqualToThree = 3 === 3
85
114
  *
86
115
  * console.log(
87
- * and([isOdd, isPositive, isLessThan3])(1),
116
+ * and([oneIsLessThanThree, twoIsGreaterThanOne, threeIsEqualToThree]),
88
117
  * ) // true
89
118
  * ```
90
119
  *
91
- * `and` behaves eagerly if provided only nonfunction values
120
+ * If any values in the array are synchronous or asynchronous predicate functions, `and` takes another argument to test concurrently against the predicate functions, returning true if all array values and resolved values from the predicates are truthy.
92
121
  *
93
122
  * ```javascript [playground]
123
+ * const isOdd = number => number % 2 == 1
124
+ *
125
+ * const isPositive = number => number > 0
126
+ *
127
+ * const isLessThan3 = number => number < 3
128
+ *
94
129
  * console.log(
95
- * and([true, true, true]),
130
+ * and([isOdd, isPositive, isLessThan3])(1),
96
131
  * ) // true
97
132
  * ```
98
133
  *
@@ -100,33 +135,22 @@ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
100
135
  *
101
136
  * @note ...args slows down here by an order of magnitude
102
137
  */
103
- const and = predicates => {
104
- if (areAllValuesNonfunctions(predicates)) {
105
- return areAllNonfunctionsTruthy(predicates, -1)
138
+ const and = function (...args) {
139
+ const predicatesOrValues = args.pop()
140
+ if (areAllValuesNonfunctions(predicatesOrValues)) {
141
+ return areAllValuesTruthy(predicatesOrValues, -1)
106
142
  }
107
- return function arePredicatesAllTruthy(point) {
108
- const length = predicates.length
109
- let index = -1
110
143
 
111
- while (++index < length) {
112
- let predicate = predicates[index]
113
- if (typeof predicate == 'function') {
114
- predicate = predicate(point)
115
- }
116
- if (isPromise(predicate)) {
117
- return predicate.then(curry3(
118
- thunkConditional,
119
- __,
120
- thunkify3(asyncArePredicatesAllTruthy, predicates, point, index),
121
- always(false),
122
- ))
123
- }
124
- if (!predicate) {
125
- return false
126
- }
127
- }
128
- return true
144
+ if (args.length == 0) {
145
+ return curryArgs2(areAllPredicatesTruthy, __, predicatesOrValues)
129
146
  }
147
+
148
+ if (areAnyValuesPromises(args)) {
149
+ return promiseAll(args)
150
+ .then(curry2(areAllPredicatesTruthy, __, predicatesOrValues))
151
+ }
152
+
153
+ return areAllPredicatesTruthy(args, predicatesOrValues)
130
154
  }
131
155
 
132
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
@@ -0,0 +1,73 @@
1
+ const funcCall = require('./funcCall')
2
+ const thunkify4 = require('./thunkify4')
3
+ const __ = require('./placeholder')
4
+ const curry2 = require('./curry2')
5
+ const curry3 = require('./curry3')
6
+ const curry4 = require('./curry4')
7
+ const isPromise = require('./isPromise')
8
+ const promiseAll = require('./promiseAll')
9
+ const _Promise = require('./_Promise')
10
+
11
+ /**
12
+ * @name arrayMap
13
+ *
14
+ * @synopsis
15
+ * ```coffeescript [specscript]
16
+ * arrayMap(
17
+ * array Array,
18
+ * mapper (item any, index number, array Array)=>Promise|any,
19
+ * ) -> Promise|Array
20
+ * ```
21
+ *
22
+ * @description
23
+ * Apply a mapper to each item of an array, returning an array. Mapper may be asynchronous.
24
+ */
25
+
26
+ const arrayMapHandlePromise = function (
27
+ result, promise, index, promiseCounts, _promise
28
+ ) {
29
+ promiseCounts.pending += 1
30
+ promise.then(value => {
31
+ result[index] = value
32
+ promiseCounts.resolved += 1
33
+ if (promiseCounts.resolved == promiseCounts.pending) {
34
+ _promise._fulfill(result)
35
+ }
36
+ }, error => {
37
+ _promise.reject(error)
38
+ })
39
+ }
40
+
41
+ const arrayMap2 = function (array, mapper) {
42
+ const length = array.length
43
+ const result = Array(length)
44
+ const promiseCounts = { pending: 0, resolved: 0 }
45
+
46
+ let index = -1
47
+ let _promise = new _Promise()
48
+
49
+ while (++index < length) {
50
+ const ret = mapper(array[index], index, array)
51
+ if (isPromise(ret)) {
52
+ arrayMapHandlePromise(result, ret, index, promiseCounts, _promise)
53
+ } else {
54
+ result[index] = ret
55
+ }
56
+ }
57
+
58
+ if (promiseCounts.pending == 0) {
59
+ return result
60
+ }
61
+
62
+ return _promise
63
+ }
64
+
65
+ if (process.argv[1] == __filename) {
66
+ const timeInLoopAsync = require('./timeInLoopAsync')
67
+
68
+ timeInLoopAsync('arrayMap2', 1e6, async () => {
69
+ await arrayMap2([1, 2, 3, 4, 5], async value => value + 1)
70
+ })
71
+ }
72
+
73
+ module.exports = arrayMap2
@@ -0,0 +1,34 @@
1
+ const timeInLoop = require('../x/timeInLoop')
2
+ const rubico = require('..')
3
+ const _ = require('lodash')
4
+ const R = require('ramda')
5
+
6
+ const isOdd = number => number % 2 == 1
7
+
8
+ const isEven = number => number % 2 == 0
9
+
10
+ /**
11
+ * @name allRace
12
+ *
13
+ * @benchmark
14
+ * _.every: 1e+6: 20.984ms
15
+ * R.all: 1e+6: 368.142ms
16
+ * rubico.all: 1e+6: 24.772ms
17
+ *
18
+ * @remarks
19
+ * promise check
20
+ */
21
+
22
+ {
23
+ const evenNumbers = [2, 4, 6, 8, 10]
24
+
25
+ // console.log(_.every(evenNumbers, isEven))
26
+ // console.log(R.all(isEven)(evenNumbers))
27
+ // console.log(rubico.all(isEven)(evenNumbers))
28
+
29
+ // timeInLoop('_.every', 1e6, () => _.every(evenNumbers, isEven))
30
+
31
+ // timeInLoop('R.all', 1e6, () => R.all(isEven)(evenNumbers))
32
+
33
+ // timeInLoop('rubico.all', 1e6, () => rubico.all(isEven)(evenNumbers))
34
+ }
@@ -0,0 +1,24 @@
1
+ const timeInLoop = require('../x/timeInLoop')
2
+ const rubico = require('..')
3
+
4
+ const { and } = rubico
5
+
6
+ const isOdd = x => x % 2 == 1
7
+
8
+ const threeOddChecks = number => isOdd(number) && isOdd(number) && isOdd(number)
9
+
10
+ const threeIsOdd = and([isOdd, isOdd, isOdd])
11
+
12
+ /**
13
+ * @name or
14
+ *
15
+ * @benchmark
16
+ * isOdd(value) && isOdd(value) && isOdd(value): 1e+6: 6.664ms
17
+ * and([isOdd, isOdd, isOdd]): 1e+6: 16.842ms
18
+ */
19
+
20
+ {
21
+ // timeInLoop('isOdd(value) && isOdd(value) && isOdd(value)', 1e6, () => threeOddChecks(1))
22
+
23
+ // timeInLoop('and([isOdd, isOdd, isOdd])', 1e6, () => threeIsOdd(1))
24
+ }