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
@@ -0,0 +1,138 @@
1
+ const timeInLoop = require('./timeInLoop')
2
+ const timeInLoopAsync = require('./timeInLoopAsync')
3
+
4
+ /**
5
+ * @name formatRunOutput
6
+ *
7
+ * @synopsis
8
+ * ```coffeescript [specscript]
9
+ * formatRunOutput(
10
+ * description string,
11
+ * loopCount number,
12
+ * duration number
13
+ * ) -> formatted string
14
+ * ```
15
+ */
16
+ const formatRunOutput = function (description, loopCount, duration) {
17
+ const formattedDuration = duration < 1e3
18
+ ? `${duration.toFixed(3)}ms`
19
+ : `${(duration / 1e3).toFixed(3)}s`
20
+ return `
21
+ ${description}: ${loopCount.toExponential()}: ${formattedDuration}
22
+ `.trim()
23
+ }
24
+
25
+ /**
26
+ * @name TimeInLoopSuite
27
+ *
28
+ * @synopsis
29
+ * ```coffeescript [specscript]
30
+ * new TimeInLoopSuite(options? {
31
+ * loopCount?: number,
32
+ * runs?: number,
33
+ * async?: boolean,
34
+ * }) -> TimeInLoopSuite
35
+ * ```
36
+ */
37
+ const TimeInLoopSuite = function (options = {}) {
38
+ this.loopCount = options.loopCount ?? 1e6
39
+ this.runs = options.runs ?? 5
40
+ this.isAsync = options.async ?? false
41
+ this.benchmarkCases = []
42
+ this.handlerMap = new Map()
43
+ }
44
+
45
+
46
+ /**
47
+ * @name TimeInLoopSuite.prototype.emit
48
+ *
49
+ * @synopsis
50
+ * ```coffeescript [specscript]
51
+ * new TimeInLoopSuite(...).emit(eventName string, event Object) -> ()
52
+ * ```
53
+ */
54
+ TimeInLoopSuite.prototype.emit = function (eventName, event) {
55
+ const handlerMap = this.handlerMap
56
+ if (handlerMap.has(eventName)) {
57
+ handlerMap.get(eventName).forEach(handler => handler(event))
58
+ }
59
+ }
60
+
61
+ /**
62
+ * @name TimeInLoopSuite.prototype.on
63
+ *
64
+ * @synopsis
65
+ * ```coffeescript [specscript]
66
+ * new TimeInLoopSuite(...).on(eventName string, handler function) -> ()
67
+ * ```
68
+ */
69
+ TimeInLoopSuite.prototype.on = function (eventName, handler) {
70
+ const handlerMap = this.handlerMap
71
+ if (handlerMap.has(eventName)) {
72
+ handlerMap.get(eventName).add(handler)
73
+ } else {
74
+ handlerMap.set(eventName, new Set([handler]))
75
+ }
76
+ }
77
+
78
+ /**
79
+ * @name TimeInLoopSuite.prototype.add
80
+ *
81
+ * @synopsis
82
+ * ```coffeescript [specscript]
83
+ * new TimeInLoopSuite(...).add(description string, func function) -> ()
84
+ * ```
85
+ */
86
+ TimeInLoopSuite.prototype.add = function (description, func) {
87
+ const { loopCount, isAsync } = this
88
+ this.benchmarkCases.push({
89
+ description,
90
+ loopCount,
91
+ benchmark: isAsync
92
+ ? () => timeInLoopAsync(description, loopCount, func, { silent: true })
93
+ : () => timeInLoop(description, loopCount, func, { silent: true }),
94
+ })
95
+ }
96
+
97
+ /**
98
+ * @name TimeInLoopSuite.prototype.run
99
+ *
100
+ * @synopsis
101
+ * ```coffeescript [specscript]
102
+ * new TimeInLoopSuite(...).run() -> Promise<>
103
+ * ```
104
+ */
105
+ TimeInLoopSuite.prototype.run = async function () {
106
+ const caseBestRuns = []
107
+ for (const { description, loopCount, benchmark } of this.benchmarkCases) {
108
+ const durations = []
109
+ let runCount = 0
110
+ while (runCount < this.runs) {
111
+ const { duration } = await benchmark()
112
+ durations.push(duration)
113
+ runCount += 1
114
+ this.emit('run', { description, duration, loopCount })
115
+ }
116
+
117
+ const caseBestDuration = Math.min(...durations)
118
+
119
+ const caseBestRun = {
120
+ description,
121
+ duration: caseBestDuration,
122
+ loopCount,
123
+ output: formatRunOutput(description, loopCount, caseBestDuration),
124
+ }
125
+
126
+ caseBestRuns.push(caseBestRun)
127
+
128
+ this.emit('caseBestRun', caseBestRun)
129
+ }
130
+
131
+ const suiteBestRun = caseBestRuns.reduce(
132
+ (suiteBest, run) => run.duration < suiteBest.duration ? run : suiteBest
133
+ )
134
+
135
+ this.emit('suiteBestRun', suiteBestRun)
136
+ }
137
+
138
+ module.exports = TimeInLoopSuite
@@ -0,0 +1,23 @@
1
+ const isPromise = require('./isPromise')
2
+
3
+ /**
4
+ * @name areAnyValuesPromises
5
+ *
6
+ * @synopsis
7
+ * ```coffeescript [specscript]
8
+ * areAnyValuesPromises(values Array) -> boolean
9
+ * ```
10
+ */
11
+ const areAnyValuesPromises = function (values) {
12
+ const length = values.length
13
+ let index = -1
14
+ while (++index < length) {
15
+ const value = values[index]
16
+ if (isPromise(value)) {
17
+ return true
18
+ }
19
+ }
20
+ return false
21
+ }
22
+
23
+ module.exports = areAnyValuesPromises
@@ -5,14 +5,14 @@ const promiseAll = require('./promiseAll')
5
5
  const callPropUnary = require('./callPropUnary')
6
6
 
7
7
  /**
8
- * @name arrayAll
8
+ * @name arrayEvery
9
9
  *
10
10
  * @synopsis
11
11
  * ```coffeescript [specscript]
12
- * arrayAll(array Array, predicate ...any=>boolean) -> boolean
12
+ * arrayEvery(array Array, predicate ...any=>boolean) -> boolean
13
13
  * ```
14
14
  */
15
- const arrayAll = function (array, predicate) {
15
+ const arrayEvery = function (array, predicate) {
16
16
  const arrayLength = array.length,
17
17
  promises = []
18
18
  let index = -1
@@ -29,4 +29,4 @@ const arrayAll = function (array, predicate) {
29
29
  : promiseAll(promises).then(curry3(callPropUnary, __, 'every', Boolean))
30
30
  }
31
31
 
32
- module.exports = arrayAll
32
+ module.exports = arrayEvery
@@ -1,4 +1,5 @@
1
- const isArrayLike = require('./isArrayLike')
1
+ const isArray = require('./isArray')
2
+ const isBinary = require('./isBinary')
2
3
 
3
4
  /**
4
5
  * @name _arrayExtend
@@ -30,7 +31,7 @@ const _arrayExtend = function (array, values) {
30
31
  * Extend an array with values.
31
32
  */
32
33
  const arrayExtend = function (array, values) {
33
- if (isArrayLike(values)) {
34
+ if (isArray(values) || isBinary(values)) {
34
35
  return _arrayExtend(array, values)
35
36
  }
36
37
  array.push(values)
@@ -26,12 +26,11 @@ const arrayFilter = function (array, predicate) {
26
26
  resultIndex = -1
27
27
  while (++index < arrayLength) {
28
28
  const item = array[index],
29
- shouldIncludeItem = predicate(item)
29
+ shouldIncludeItem = predicate(item, index, array)
30
30
  if (isPromise(shouldIncludeItem)) {
31
31
  return promiseAll(
32
- arrayExtendMap(
33
- [shouldIncludeItem], array, predicate, index)).then(
34
- curry4(arrayFilterByConditions, array, result, index - 1, __))
32
+ arrayExtendMap([shouldIncludeItem], array, predicate, index)
33
+ ).then(curry4(arrayFilterByConditions, array, result, index - 1, __))
35
34
  }
36
35
  if (shouldIncludeItem) {
37
36
  result[++resultIndex] = item
@@ -3,11 +3,11 @@ const isPromise = require('./isPromise')
3
3
  const promiseRace = require('./promiseRace')
4
4
 
5
5
  /**
6
- * @name asyncArrayAny
6
+ * @name asyncArraySome
7
7
  *
8
8
  * @synopsis
9
9
  * ```coffeescript [specscript]
10
- * asyncArrayAny(
10
+ * asyncArraySome(
11
11
  * array Array,
12
12
  * predicate any=>Promise|boolean,
13
13
  * index number,
@@ -15,7 +15,7 @@ const promiseRace = require('./promiseRace')
15
15
  * ) -> boolean
16
16
  * ```
17
17
  */
18
- const asyncArrayAny = async function (
18
+ const asyncArraySome = async function (
19
19
  array, predicate, index, promisesInFlight,
20
20
  ) {
21
21
  const length = array.length
@@ -39,23 +39,23 @@ const asyncArrayAny = async function (
39
39
  }
40
40
 
41
41
  /**
42
- * @name arrayAny
42
+ * @name arraySome
43
43
  *
44
44
  * @synopsis
45
45
  * ```coffeescript [specscript]
46
- * arrayAny(
46
+ * arraySome(
47
47
  * array Array,
48
48
  * predicate any=>Promise|boolean,
49
49
  * ) -> boolean
50
50
  * ```
51
51
  */
52
- const arrayAny = function (array, predicate) {
52
+ const arraySome = function (array, predicate) {
53
53
  const length = array.length
54
54
  let index = -1
55
55
  while (++index < length) {
56
56
  const predication = predicate(array[index])
57
57
  if (isPromise(predication)) {
58
- return asyncArrayAny(
58
+ return asyncArraySome(
59
59
  array, predicate, index, new Set([SelfReferencingPromise(predication)]))
60
60
  }
61
61
  if (predication) {
@@ -65,4 +65,4 @@ const arrayAny = function (array, predicate) {
65
65
  return false
66
66
  }
67
67
 
68
- module.exports = arrayAny
68
+ module.exports = arraySome
@@ -3,7 +3,7 @@ const isPromise = require('./isPromise')
3
3
  const promiseRace = require('./promiseRace')
4
4
 
5
5
  /**
6
- * @name asyncIteratorAll
6
+ * @name asyncIteratorEvery
7
7
  *
8
8
  * @synopsis
9
9
  * var T any,
@@ -12,11 +12,11 @@ const promiseRace = require('./promiseRace')
12
12
  * promisesInFlight Set<Promise<[T, Promise]>>,
13
13
  * maxConcurrency number
14
14
  *
15
- * asyncIteratorAll(
15
+ * asyncIteratorEvery(
16
16
  * asyncIterator, predicate, promisesInFlight, maxConcurrency,
17
17
  * ) -> Promise<boolean>
18
18
  */
19
- const asyncIteratorAll = async function (
19
+ const asyncIteratorEvery = async function (
20
20
  asyncIterator, predicate, promisesInFlight, maxConcurrency = 20,
21
21
  ) {
22
22
  let iteration = await asyncIterator.next()
@@ -47,4 +47,4 @@ const asyncIteratorAll = async function (
47
47
  return true
48
48
  }
49
49
 
50
- module.exports = asyncIteratorAll
50
+ module.exports = asyncIteratorEvery
@@ -3,11 +3,11 @@ const isPromise = require('./isPromise')
3
3
  const promiseRace = require('./promiseRace')
4
4
 
5
5
  /**
6
- * @name asyncIteratorAny
6
+ * @name asyncIteratorSome
7
7
  *
8
8
  * @synopsis
9
9
  * ```coffeescript [specscript]
10
- * asyncIteratorAny(
10
+ * asyncIteratorSome(
11
11
  * iterator Iterator|AsyncIterator,
12
12
  * predicate any=>Promise|boolean,
13
13
  * index number,
@@ -16,7 +16,7 @@ const promiseRace = require('./promiseRace')
16
16
  * ) -> boolean
17
17
  * ```
18
18
  */
19
- const asyncIteratorAny = async function (
19
+ const asyncIteratorSome = async function (
20
20
  iterator, predicate, promisesInFlight, maxConcurrency = 20,
21
21
  ) {
22
22
  let iteration = iterator.next()
@@ -53,4 +53,4 @@ const asyncIteratorAny = async function (
53
53
  return false
54
54
  }
55
55
 
56
- module.exports = asyncIteratorAny
56
+ module.exports = asyncIteratorSome
@@ -0,0 +1,25 @@
1
+ const assert = require('assert')
2
+ const curry4 = require('./curry4')
3
+ const __ = require('./placeholder')
4
+
5
+ describe('curry4', () => {
6
+ const func = function (a, b, c, d) {
7
+ return [a, b, c, d]
8
+ }
9
+ it('resolves arguments in __ position for arg0', async () => {
10
+ const curried = curry4(func, __, 1, 2, 3)
11
+ assert.deepEqual(curried(4), [4, 1, 2, 3])
12
+ })
13
+ it('resolves arguments in __ position for arg1', async () => {
14
+ const curried = curry4(func, 1, __, 2, 3)
15
+ assert.deepEqual(curried(4), [1, 4, 2, 3])
16
+ })
17
+ it('resolves arguments in __ position for arg2', async () => {
18
+ const curried = curry4(func, 1, 2, __, 3)
19
+ assert.deepEqual(curried(4), [1, 2, 4, 3])
20
+ })
21
+ it('resolves arguments in __ position for arg3', async () => {
22
+ const curried = curry4(func, 1, 2, 3, __)
23
+ assert.deepEqual(curried(4), [1, 2, 3, 4])
24
+ })
25
+ })
@@ -0,0 +1,29 @@
1
+ const assert = require('assert')
2
+ const curry5 = require('./curry5')
3
+ const __ = require('./placeholder')
4
+
5
+ describe('curry5', () => {
6
+ const func = function (a, b, c, d, e) {
7
+ return [a, b, c, d, e]
8
+ }
9
+ it('resolves arguments in __ position for arg0', async () => {
10
+ const curried = curry5(func, __, 1, 2, 3, 4)
11
+ assert.deepEqual(curried(5), [5, 1, 2, 3, 4])
12
+ })
13
+ it('resolves arguments in __ position for arg1', async () => {
14
+ const curried = curry5(func, 1, __, 2, 3, 4)
15
+ assert.deepEqual(curried(5), [1, 5, 2, 3, 4])
16
+ })
17
+ it('resolves arguments in __ position for arg2', async () => {
18
+ const curried = curry5(func, 1, 2, __, 3, 4)
19
+ assert.deepEqual(curried(5), [1, 2, 5, 3, 4])
20
+ })
21
+ it('resolves arguments in __ position for arg3', async () => {
22
+ const curried = curry5(func, 1, 2, 3, __, 4)
23
+ assert.deepEqual(curried(5), [1, 2, 3, 5, 4])
24
+ })
25
+ it('resolves arguments in __ position for arg4', async () => {
26
+ const curried = curry5(func, 1, 2, 3, 4, __)
27
+ assert.deepEqual(curried(5), [1, 2, 3, 4, 5])
28
+ })
29
+ })
@@ -0,0 +1,43 @@
1
+ const __ = require('./placeholder')
2
+
3
+ // argument resolver for curryArgs2
4
+ const curryArgs2ResolveArgs0 = (
5
+ baseFunc, arg1, arg2,
6
+ ) => function args0Resolver(...args) {
7
+ return baseFunc(args, arg1)
8
+ }
9
+
10
+ // argument resolver for curryArgs2
11
+ const curryArgs2ResolveArgs1 = (
12
+ baseFunc, arg0, arg2,
13
+ ) => function arg1Resolver(...args) {
14
+ return baseFunc(arg0, args)
15
+ }
16
+
17
+ /**
18
+ * @name curryArgs2
19
+ *
20
+ * @synopsis
21
+ * ```coffeescript [specscript]
22
+ * type __ = Symbol('placeholder')
23
+ *
24
+ * curryArgs2(
25
+ * baseFunc function,
26
+ * arg0 __|any,
27
+ * arg1 __|any,
28
+ * ) -> function
29
+ * ```
30
+ *
31
+ * @description
32
+ * Curry arguments for a 2-ary function. Arguments are supplied in placeholder position as an array.
33
+ *
34
+ * Note: at least one argument must be the placeholder
35
+ */
36
+ const curryArgs2 = function (baseFunc, arg0, arg1) {
37
+ if (arg0 == __) {
38
+ return curryArgs2ResolveArgs0(baseFunc, arg1)
39
+ }
40
+ return curryArgs2ResolveArgs1(baseFunc, arg0)
41
+ }
42
+
43
+ module.exports = curryArgs2
@@ -0,0 +1,21 @@
1
+ const assert = require('assert')
2
+ const curryArgs3 = require('./curryArgs3')
3
+ const __ = require('./placeholder')
4
+
5
+ describe('curryArgs3', () => {
6
+ const func = function (a, b, c) {
7
+ return [a, b, c]
8
+ }
9
+ it('resolves arguments in __ position for arg0', async () => {
10
+ const curried = curryArgs3(func, __, 1, 2)
11
+ assert.deepEqual(curried(3), [[3], 1, 2])
12
+ })
13
+ it('resolves arguments in __ position for arg1', async () => {
14
+ const curried = curryArgs3(func, 1, __, 2)
15
+ assert.deepEqual(curried(3), [1, [3], 2])
16
+ })
17
+ it('resolves arguments in __ position for arg2', async () => {
18
+ const curried = curryArgs3(func, 1, 2, __)
19
+ assert.deepEqual(curried(3), [1, 2, [3]])
20
+ })
21
+ })
@@ -0,0 +1,65 @@
1
+ const __ = require('./placeholder')
2
+
3
+ // argument resolver for curryArgs4
4
+ const curryArgs4ResolveArgs0 = (
5
+ baseFunc, arg1, arg2, arg3,
6
+ ) => function args0Resolver(...args) {
7
+ return baseFunc(args, arg1, arg2, arg3)
8
+ }
9
+
10
+ // argument resolver for curryArgs4
11
+ const curryArgs4ResolveArgs1 = (
12
+ baseFunc, arg0, arg2, arg3,
13
+ ) => function args1Resolver(...args) {
14
+ return baseFunc(arg0, args, arg2, arg3)
15
+ }
16
+
17
+ // argument resolver for curryArgs4
18
+ const curryArgs4ResolveArgs2 = (
19
+ baseFunc, arg0, arg1, arg3,
20
+ ) => function args2Resolver(...args) {
21
+ return baseFunc(arg0, arg1, args, arg3)
22
+ }
23
+
24
+ // argument resolver for curryArgs4
25
+ const curryArgs4ResolveArgs3 = (
26
+ baseFunc, arg0, arg1, arg2,
27
+ ) => function args3Resolver(...args) {
28
+ return baseFunc(arg0, arg1, arg2, args)
29
+ }
30
+
31
+ /**
32
+ * @name curryArgs4
33
+ *
34
+ * @synopsis
35
+ * ```coffeescript [specscript]
36
+ * __ = Symbol('placeholder')
37
+ *
38
+ * curryArgs4(
39
+ * baseFunc function,
40
+ * arg0 __|any,
41
+ * arg1 __|any,
42
+ * arg2 __|any
43
+ * arg3 __|any,
44
+ * ) -> function
45
+ * ```
46
+ *
47
+ * @description
48
+ * Curry arguments for a 4-ary function. Arguments are supplied in placeholder position as an array.
49
+ *
50
+ * Note: at least one argument must be the placeholder
51
+ */
52
+ const curryArgs4 = function (baseFunc, arg0, arg1, arg2, arg3) {
53
+ if (arg0 == __) {
54
+ return curryArgs4ResolveArgs0(baseFunc, arg1, arg2, arg3)
55
+ }
56
+ if (arg1 == __) {
57
+ return curryArgs4ResolveArgs1(baseFunc, arg0, arg2, arg3)
58
+ }
59
+ if (arg2 == __) {
60
+ return curryArgs4ResolveArgs2(baseFunc, arg0, arg1, arg3)
61
+ }
62
+ return curryArgs4ResolveArgs3(baseFunc, arg0, arg1, arg2)
63
+ }
64
+
65
+ module.exports = curryArgs4
@@ -0,0 +1,25 @@
1
+ const assert = require('assert')
2
+ const curryArgs4 = require('./curryArgs4')
3
+ const __ = require('./placeholder')
4
+
5
+ describe('curryArgs4', () => {
6
+ const func = function (a, b, c, d) {
7
+ return [a, b, c, d]
8
+ }
9
+ it('resolves arguments in __ position for arg0', async () => {
10
+ const curried = curryArgs4(func, __, 1, 2, 3)
11
+ assert.deepEqual(curried(1, 2, 3), [[1, 2, 3], 1, 2, 3])
12
+ })
13
+ it('resolves arguments in __ position for arg1', async () => {
14
+ const curried = curryArgs4(func, 1, __, 2, 3)
15
+ assert.deepEqual(curried(1, 2, 3), [1, [1, 2, 3], 2, 3])
16
+ })
17
+ it('resolves arguments in __ position for arg2', async () => {
18
+ const curried = curryArgs4(func, 1, 2, __, 3)
19
+ assert.deepEqual(curried(1, 2, 3), [1, 2, [1, 2, 3], 3])
20
+ })
21
+ it('resolves arguments in __ position for arg3', async () => {
22
+ const curried = curryArgs4(func, 1, 2, 3, __)
23
+ assert.deepEqual(curried(1, 2, 3), [1, 2, 3, [1, 2, 3]])
24
+ })
25
+ })
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @name equals
3
+ *
4
+ * @synopsis
5
+ * ```coffeescript [specscript]
6
+ * equals(left any, right any) -> boolean
7
+ * ```
8
+ */
9
+ const equals = function (left, right) {
10
+ return left == right
11
+ }
12
+
13
+ module.exports = equals
@@ -0,0 +1,22 @@
1
+ const fs = require('fs')
2
+ const pathResolve = require('./pathResolve')
3
+
4
+ // findAllFilePaths(path string) -> filePaths Promise<Array<string>>
5
+ const findAllFilePaths = async function (path) {
6
+ const files = await fs.promises.readdir(path, {
7
+ withFileTypes: true,
8
+ recursive: true,
9
+ })
10
+ const result = []
11
+ for (const file of files) {
12
+ if (file.isDirectory()) {
13
+ const filePaths = await findAllFilePaths(pathResolve(path, file.name))
14
+ result.push(...filePaths)
15
+ } else {
16
+ result.push(pathResolve(path, file.name))
17
+ }
18
+ }
19
+ return result
20
+ }
21
+
22
+ module.exports = findAllFilePaths
@@ -13,3 +13,5 @@
13
13
  * Apply arguments to a function.
14
14
  */
15
15
  const funcApply = (func, args) => func(...args)
16
+
17
+ module.exports = funcApply
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @name funcCall
3
+ *
4
+ * @synopsis
5
+ * ```coffeescript [specscript]
6
+ * funcCall(func function, context Object, ...args) -> any
7
+ * ```
8
+ *
9
+ * @description
10
+ * Apply arguments to a function.
11
+ */
12
+ const funcCall = (func, context, ...args) => func.call(context, ...args)
13
+
14
+ module.exports = funcCall
@@ -0,0 +1,26 @@
1
+ const isPromise = require('./isPromise')
2
+ const promiseAll = require('./promiseAll')
3
+
4
+ /**
5
+ * @name functionArrayAll
6
+ *
7
+ * @synopsis
8
+ * ```coffeescript [specscript]
9
+ * functionArrayAll(funcs Array<function>, args Array) -> Promise|Array
10
+ * ```
11
+ */
12
+ const functionArrayAll = function (funcs, args) {
13
+ const funcsLength = funcs.length,
14
+ result = Array(funcsLength)
15
+ let funcsIndex = -1, isAsync = false
16
+ while (++funcsIndex < funcsLength) {
17
+ const resultItem = funcs[funcsIndex](...args)
18
+ if (isPromise(resultItem)) {
19
+ isAsync = true
20
+ }
21
+ result[funcsIndex] = resultItem
22
+ }
23
+ return isAsync ? promiseAll(result) : result
24
+ }
25
+
26
+ module.exports = functionArrayAll
@@ -0,0 +1,55 @@
1
+ const funcConcat = require('./funcConcat')
2
+ const isPromise = require('./isPromise')
3
+ const __ = require('./placeholder')
4
+ const curry3 = require('./curry3')
5
+ const curry4 = require('./curry4')
6
+ const objectSet = require('./objectSet')
7
+
8
+ /**
9
+ * @name asyncFunctionArrayAllSeries
10
+ *
11
+ * @synopsis
12
+ * ```coffeescript [specscript]
13
+ * asyncFunctionArrayAllSeries(
14
+ * funcs Array<function>,
15
+ * args Array,
16
+ * result Array,
17
+ * funcsIndex number
18
+ * ) -> Promise|Array
19
+ * ```
20
+ *
21
+ * @TODO benchmark vs regular promise handling
22
+ */
23
+ const asyncFunctionArrayAllSeries = async function (funcs, args, result, funcsIndex) {
24
+ const funcsLength = funcs.length
25
+ while (++funcsIndex < funcsLength) {
26
+ const resultItem = funcs[funcsIndex](...args)
27
+ result[funcsIndex] = isPromise(resultItem) ? await resultItem : resultItem
28
+ }
29
+ return result
30
+ }
31
+
32
+ /**
33
+ * @name functionArrayAllSeries
34
+ *
35
+ * @synopsis
36
+ * ```coffeescript [specscript]
37
+ * functionArrayAllSeries(funcs Array<function>, args Array) -> Promise|Array
38
+ * ```
39
+ */
40
+ const functionArrayAllSeries = function (funcs, args) {
41
+ const funcsLength = funcs.length, result = []
42
+ let funcsIndex = -1
43
+ while (++funcsIndex < funcsLength) {
44
+ const resultItem = funcs[funcsIndex](...args)
45
+ if (isPromise(resultItem)) {
46
+ return resultItem.then(funcConcat(
47
+ curry3(objectSet, result, funcsIndex, __),
48
+ curry4(asyncFunctionArrayAllSeries, funcs, args, __, funcsIndex)))
49
+ }
50
+ result[funcsIndex] = resultItem
51
+ }
52
+ return result
53
+ }
54
+
55
+ module.exports = functionArrayAllSeries