rubico 1.9.7 → 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 (587) 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 +75 -26
  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 +106 -40
  53. package/and.js +54 -36
  54. package/archive/{FlatMappingIteratorCool.js → FlatMappingIterator-2020-09-28.js} +1 -1
  55. package/archive/_Promise-2023-05-29.js +93 -0
  56. package/archive/arrayMap2-2023-05-29.js +73 -0
  57. package/archive/benchmarks-v1.9.7/all.js +34 -0
  58. package/archive/benchmarks-v1.9.7/and.js +24 -0
  59. package/archive/benchmarks-v1.9.7/assign.js +174 -0
  60. package/archive/benchmarks-v1.9.7/curry.js +55 -0
  61. package/archive/benchmarks-v1.9.7/eq.js +25 -0
  62. package/archive/benchmarks-v1.9.7/filter.js +1322 -0
  63. package/archive/benchmarks-v1.9.7/flatMap.js +48 -0
  64. package/archive/benchmarks-v1.9.7/get.js +44 -0
  65. package/archive/benchmarks-v1.9.7/gt.js +25 -0
  66. package/archive/benchmarks-v1.9.7/gte.js +25 -0
  67. package/archive/benchmarks-v1.9.7/lt.js +25 -0
  68. package/archive/benchmarks-v1.9.7/lte.js +25 -0
  69. package/archive/benchmarks-v1.9.7/map.js +892 -0
  70. package/archive/benchmarks-v1.9.7/omit.js +28 -0
  71. package/archive/benchmarks-v1.9.7/or.js +51 -0
  72. package/archive/benchmarks-v1.9.7/pick.js +24 -0
  73. package/archive/benchmarks-v1.9.7/pipe.js +152 -0
  74. package/archive/benchmarks-v1.9.7/reduce.js +739 -0
  75. package/archive/benchmarks-v1.9.7/switchCase.js +256 -0
  76. package/archive/benchmarks-v1.9.7/tap.js +90 -0
  77. package/archive/benchmarks-v1.9.7/transform.js +218 -0
  78. package/archive/benchmarks-v1.9.7/tryCatch.js +108 -0
  79. package/assign.js +18 -8
  80. package/bench +65 -0
  81. package/benchmark-output/v1.9.7 +268 -0
  82. package/benchmarks/all.async.js +43 -0
  83. package/benchmarks/all.js +42 -33
  84. package/benchmarks/always.js +15 -0
  85. package/benchmarks/and.async.js +25 -0
  86. package/benchmarks/and.js +20 -19
  87. package/benchmarks/assign.async.js +27 -0
  88. package/benchmarks/assign.js +20 -167
  89. package/benchmarks/curry.js +34 -54
  90. package/benchmarks/eq.async.js +23 -0
  91. package/benchmarks/eq.js +17 -19
  92. package/benchmarks/every.async.js +19 -0
  93. package/benchmarks/every.js +19 -0
  94. package/benchmarks/filter.async.js +32 -0
  95. package/benchmarks/filter.js +27 -1311
  96. package/benchmarks/flatMap.async.js +26 -0
  97. package/benchmarks/flatMap.js +26 -36
  98. package/benchmarks/get.async.js +19 -0
  99. package/benchmarks/get.js +27 -32
  100. package/benchmarks/gt.async.js +23 -0
  101. package/benchmarks/gt.js +17 -19
  102. package/benchmarks/gte.async.js +23 -0
  103. package/benchmarks/gte.js +17 -19
  104. package/benchmarks/lt.async.js +23 -0
  105. package/benchmarks/lt.js +17 -19
  106. package/benchmarks/lte.async.js +23 -0
  107. package/benchmarks/lte.js +17 -19
  108. package/benchmarks/map.async.js +43 -0
  109. package/benchmarks/map.js +24 -876
  110. package/benchmarks/misc/Promise.js +26 -0
  111. package/benchmarks/misc/isPromise.js +30 -0
  112. package/benchmarks/misc/promiseAll.js +36 -0
  113. package/benchmarks/not.js +23 -0
  114. package/benchmarks/omit.js +30 -20
  115. package/benchmarks/or.async.js +25 -0
  116. package/benchmarks/or.js +23 -49
  117. package/benchmarks/pick.js +30 -16
  118. package/benchmarks/pipe.async.js +47 -0
  119. package/benchmarks/pipe.js +46 -151
  120. package/benchmarks/reduce.async.js +32 -0
  121. package/benchmarks/reduce.js +27 -728
  122. package/benchmarks/set.async.js +19 -0
  123. package/benchmarks/set.js +41 -0
  124. package/benchmarks/some.async.js +19 -0
  125. package/benchmarks/some.js +19 -0
  126. package/benchmarks/switchCase.async.js +27 -0
  127. package/benchmarks/switchCase.js +55 -256
  128. package/benchmarks/tap.js +10 -85
  129. package/benchmarks/thunkify.js +15 -0
  130. package/benchmarks/transform.async.js +27 -0
  131. package/benchmarks/transform.js +28 -206
  132. package/benchmarks/tryCatch.async.js +25 -0
  133. package/benchmarks/tryCatch.js +24 -100
  134. package/{distributor.js → build} +50 -50
  135. package/compose.js +46 -0
  136. package/dist/__.es.js +2 -2
  137. package/dist/__.es.min.js +2 -2
  138. package/dist/__.js +2 -2
  139. package/dist/__.min.js +2 -2
  140. package/dist/__.min.mjs +2 -2
  141. package/dist/__.mjs +2 -2
  142. package/dist/all.es.js +173 -92
  143. package/dist/all.es.min.js +3 -3
  144. package/dist/all.js +173 -92
  145. package/dist/all.min.js +3 -3
  146. package/dist/all.min.mjs +3 -3
  147. package/dist/all.mjs +173 -92
  148. package/dist/always.es.js +2 -2
  149. package/dist/always.es.min.js +2 -2
  150. package/dist/always.js +2 -2
  151. package/dist/always.min.js +2 -2
  152. package/dist/always.min.mjs +2 -2
  153. package/dist/always.mjs +2 -2
  154. package/dist/and.es.js +101 -32
  155. package/dist/and.es.min.js +3 -3
  156. package/dist/and.js +101 -32
  157. package/dist/and.min.js +3 -3
  158. package/dist/and.min.mjs +3 -3
  159. package/dist/and.mjs +101 -32
  160. package/dist/assign.es.js +37 -10
  161. package/dist/assign.es.min.js +3 -3
  162. package/dist/assign.js +37 -10
  163. package/dist/assign.min.js +3 -3
  164. package/dist/assign.min.mjs +3 -3
  165. package/dist/assign.mjs +37 -10
  166. package/dist/compose.es.js +71 -0
  167. package/dist/compose.es.min.js +7 -0
  168. package/dist/compose.js +78 -0
  169. package/dist/compose.min.js +8 -0
  170. package/dist/compose.min.mjs +7 -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.min.mjs +2 -2
  177. package/dist/curry.mjs +2 -2
  178. package/dist/eq.es.js +172 -49
  179. package/dist/eq.es.min.js +3 -3
  180. package/dist/eq.js +172 -49
  181. package/dist/eq.min.js +3 -3
  182. package/dist/eq.min.mjs +3 -3
  183. package/dist/eq.mjs +172 -49
  184. package/dist/every.es.js +194 -0
  185. package/dist/every.es.min.js +7 -0
  186. package/dist/every.js +201 -0
  187. package/dist/every.min.js +8 -0
  188. package/dist/every.min.mjs +7 -0
  189. package/dist/every.mjs +194 -0
  190. package/dist/filter.es.js +14 -108
  191. package/dist/filter.es.min.js +3 -3
  192. package/dist/filter.js +14 -108
  193. package/dist/filter.min.js +3 -3
  194. package/dist/filter.min.mjs +3 -3
  195. package/dist/filter.mjs +14 -108
  196. package/dist/flatMap.es.js +27 -214
  197. package/dist/flatMap.es.min.js +3 -3
  198. package/dist/flatMap.js +27 -214
  199. package/dist/flatMap.min.js +3 -3
  200. package/dist/flatMap.min.mjs +3 -3
  201. package/dist/flatMap.mjs +27 -214
  202. package/dist/{x/forEach.es.js → forEach.es.js} +52 -70
  203. package/dist/forEach.es.min.js +7 -0
  204. package/dist/{x/forEach.js → forEach.js} +52 -70
  205. package/dist/forEach.min.js +8 -0
  206. package/dist/forEach.min.mjs +7 -0
  207. package/dist/{x/forEach.mjs → forEach.mjs} +52 -70
  208. package/dist/get.es.js +60 -5
  209. package/dist/get.es.min.js +3 -3
  210. package/dist/get.js +60 -5
  211. package/dist/get.min.js +3 -3
  212. package/dist/get.min.mjs +3 -3
  213. package/dist/get.mjs +60 -5
  214. package/dist/gt.es.js +171 -48
  215. package/dist/gt.es.min.js +3 -3
  216. package/dist/gt.js +171 -48
  217. package/dist/gt.min.js +3 -3
  218. package/dist/gt.min.mjs +3 -3
  219. package/dist/gt.mjs +171 -48
  220. package/dist/gte.es.js +171 -48
  221. package/dist/gte.es.min.js +3 -3
  222. package/dist/gte.js +171 -48
  223. package/dist/gte.min.js +3 -3
  224. package/dist/gte.min.mjs +3 -3
  225. package/dist/gte.mjs +171 -48
  226. package/dist/lt.es.js +171 -48
  227. package/dist/lt.es.min.js +3 -3
  228. package/dist/lt.js +171 -48
  229. package/dist/lt.min.js +3 -3
  230. package/dist/lt.min.mjs +3 -3
  231. package/dist/lt.mjs +171 -48
  232. package/dist/lte.es.js +171 -48
  233. package/dist/lte.es.min.js +3 -3
  234. package/dist/lte.js +171 -48
  235. package/dist/lte.min.js +3 -3
  236. package/dist/lte.min.mjs +3 -3
  237. package/dist/lte.mjs +171 -48
  238. package/dist/map.es.js +12 -101
  239. package/dist/map.es.min.js +3 -3
  240. package/dist/map.js +12 -101
  241. package/dist/map.min.js +3 -3
  242. package/dist/map.min.mjs +3 -3
  243. package/dist/map.mjs +12 -101
  244. package/dist/not.es.js +75 -14
  245. package/dist/not.es.min.js +3 -3
  246. package/dist/not.js +75 -14
  247. package/dist/not.min.js +3 -3
  248. package/dist/not.min.mjs +3 -3
  249. package/dist/not.mjs +75 -14
  250. package/dist/omit.es.js +7 -2
  251. package/dist/omit.es.min.js +3 -3
  252. package/dist/omit.js +7 -2
  253. package/dist/omit.min.js +3 -3
  254. package/dist/omit.min.mjs +3 -3
  255. package/dist/omit.mjs +7 -2
  256. package/dist/or.es.js +99 -31
  257. package/dist/or.es.min.js +3 -3
  258. package/dist/or.js +99 -31
  259. package/dist/or.min.js +3 -3
  260. package/dist/or.min.mjs +3 -3
  261. package/dist/or.mjs +99 -31
  262. package/dist/pick.es.js +8 -3
  263. package/dist/pick.es.min.js +3 -3
  264. package/dist/pick.js +8 -3
  265. package/dist/pick.min.js +3 -3
  266. package/dist/pick.min.mjs +3 -3
  267. package/dist/pick.mjs +8 -3
  268. package/dist/pipe.es.js +42 -46
  269. package/dist/pipe.es.min.js +3 -3
  270. package/dist/pipe.js +42 -46
  271. package/dist/pipe.min.js +3 -3
  272. package/dist/pipe.min.mjs +3 -3
  273. package/dist/pipe.mjs +42 -46
  274. package/dist/reduce.es.js +52 -94
  275. package/dist/reduce.es.min.js +3 -3
  276. package/dist/reduce.js +52 -94
  277. package/dist/reduce.min.js +3 -3
  278. package/dist/reduce.min.mjs +3 -3
  279. package/dist/reduce.mjs +52 -94
  280. package/dist/rubico.es.js +730 -869
  281. package/dist/rubico.es.min.js +3 -3
  282. package/dist/rubico.js +730 -869
  283. package/dist/rubico.min.js +3 -3
  284. package/dist/rubico.min.mjs +3 -3
  285. package/dist/rubico.mjs +730 -869
  286. package/dist/set.es.js +18 -3
  287. package/dist/set.es.min.js +3 -3
  288. package/dist/set.js +18 -3
  289. package/dist/set.min.js +3 -3
  290. package/dist/set.min.mjs +3 -3
  291. package/dist/set.mjs +18 -3
  292. package/dist/{any.js → some.es.js} +64 -54
  293. package/dist/some.es.min.js +7 -0
  294. package/dist/{any.mjs → some.js} +72 -48
  295. package/dist/some.min.js +8 -0
  296. package/dist/some.min.mjs +7 -0
  297. package/dist/{any.es.js → some.mjs} +65 -48
  298. package/dist/switchCase.es.js +55 -5
  299. package/dist/switchCase.es.min.js +3 -3
  300. package/dist/switchCase.js +55 -5
  301. package/dist/switchCase.min.js +3 -3
  302. package/dist/switchCase.min.mjs +3 -3
  303. package/dist/switchCase.mjs +55 -5
  304. package/dist/tap.es.js +2 -9
  305. package/dist/tap.es.min.js +3 -3
  306. package/dist/tap.js +2 -9
  307. package/dist/tap.min.js +3 -3
  308. package/dist/tap.min.mjs +3 -3
  309. package/dist/tap.mjs +2 -9
  310. package/dist/thunkify.es.js +45 -2
  311. package/dist/thunkify.es.min.js +3 -3
  312. package/dist/thunkify.js +45 -2
  313. package/dist/thunkify.min.js +3 -3
  314. package/dist/thunkify.min.mjs +3 -3
  315. package/dist/thunkify.mjs +45 -2
  316. package/dist/transform.es.js +35 -71
  317. package/dist/transform.es.min.js +3 -3
  318. package/dist/transform.js +35 -71
  319. package/dist/transform.min.js +3 -3
  320. package/dist/transform.min.mjs +3 -3
  321. package/dist/transform.mjs +35 -71
  322. package/dist/tryCatch.es.js +33 -17
  323. package/dist/tryCatch.es.min.js +3 -3
  324. package/dist/tryCatch.js +33 -17
  325. package/dist/tryCatch.min.js +3 -3
  326. package/dist/tryCatch.min.mjs +3 -3
  327. package/dist/tryCatch.mjs +33 -17
  328. package/dist/x/append.es.js +2 -2
  329. package/dist/x/append.es.min.js +2 -2
  330. package/dist/x/append.js +2 -2
  331. package/dist/x/append.min.js +2 -2
  332. package/dist/x/append.min.mjs +2 -2
  333. package/dist/x/append.mjs +2 -2
  334. package/dist/x/callProp.es.js +2 -2
  335. package/dist/x/callProp.es.min.js +2 -2
  336. package/dist/x/callProp.js +2 -2
  337. package/dist/x/callProp.min.js +2 -2
  338. package/dist/x/callProp.min.mjs +2 -2
  339. package/dist/x/callProp.mjs +2 -2
  340. package/dist/x/defaultsDeep.es.js +2 -2
  341. package/dist/x/defaultsDeep.es.min.js +2 -2
  342. package/dist/x/defaultsDeep.js +2 -2
  343. package/dist/x/defaultsDeep.min.js +2 -2
  344. package/dist/x/defaultsDeep.min.mjs +2 -2
  345. package/dist/x/defaultsDeep.mjs +2 -2
  346. package/dist/x/differenceWith.es.js +7 -7
  347. package/dist/x/differenceWith.es.min.js +3 -3
  348. package/dist/x/differenceWith.js +7 -7
  349. package/dist/x/differenceWith.min.js +2 -2
  350. package/dist/x/differenceWith.min.mjs +3 -3
  351. package/dist/x/differenceWith.mjs +7 -7
  352. package/dist/x/filterOut.es.js +60 -117
  353. package/dist/x/filterOut.es.min.js +3 -3
  354. package/dist/x/filterOut.js +60 -117
  355. package/dist/x/filterOut.min.js +3 -3
  356. package/dist/x/filterOut.min.mjs +3 -3
  357. package/dist/x/filterOut.mjs +60 -117
  358. package/dist/x/find.es.js +2 -2
  359. package/dist/x/find.es.min.js +2 -2
  360. package/dist/x/find.js +2 -2
  361. package/dist/x/find.min.js +2 -2
  362. package/dist/x/find.min.mjs +2 -2
  363. package/dist/x/find.mjs +2 -2
  364. package/dist/x/findIndex.es.js +2 -2
  365. package/dist/x/findIndex.es.min.js +2 -2
  366. package/dist/x/findIndex.js +2 -2
  367. package/dist/x/findIndex.min.js +2 -2
  368. package/dist/x/findIndex.min.mjs +2 -2
  369. package/dist/x/findIndex.mjs +2 -2
  370. package/dist/x/first.es.js +2 -2
  371. package/dist/x/first.es.min.js +2 -2
  372. package/dist/x/first.js +2 -2
  373. package/dist/x/first.min.js +2 -2
  374. package/dist/x/first.min.mjs +2 -2
  375. package/dist/x/first.mjs +2 -2
  376. package/dist/x/flatten.es.js +20 -207
  377. package/dist/x/flatten.es.min.js +3 -3
  378. package/dist/x/flatten.js +20 -207
  379. package/dist/x/flatten.min.js +3 -3
  380. package/dist/x/flatten.min.mjs +3 -3
  381. package/dist/x/flatten.mjs +20 -207
  382. package/dist/x/groupBy.es.js +52 -94
  383. package/dist/x/groupBy.es.min.js +3 -3
  384. package/dist/x/groupBy.js +52 -94
  385. package/dist/x/groupBy.min.js +3 -3
  386. package/dist/x/groupBy.min.mjs +3 -3
  387. package/dist/x/groupBy.mjs +52 -94
  388. package/dist/x/has.es.js +2 -2
  389. package/dist/x/has.es.min.js +2 -2
  390. package/dist/x/has.js +2 -2
  391. package/dist/x/has.min.js +2 -2
  392. package/dist/x/has.min.mjs +2 -2
  393. package/dist/x/has.mjs +2 -2
  394. package/dist/x/identity.es.js +2 -2
  395. package/dist/x/identity.es.min.js +2 -2
  396. package/dist/x/identity.js +2 -2
  397. package/dist/x/identity.min.js +2 -2
  398. package/dist/x/identity.min.mjs +2 -2
  399. package/dist/x/identity.mjs +2 -2
  400. package/dist/x/includes.es.js +2 -2
  401. package/dist/x/includes.es.min.js +2 -2
  402. package/dist/x/includes.js +2 -2
  403. package/dist/x/includes.min.js +2 -2
  404. package/dist/x/includes.min.mjs +2 -2
  405. package/dist/x/includes.mjs +2 -2
  406. package/dist/x/isDeepEqual.es.js +2 -2
  407. package/dist/x/isDeepEqual.es.min.js +2 -2
  408. package/dist/x/isDeepEqual.js +2 -2
  409. package/dist/x/isDeepEqual.min.js +2 -2
  410. package/dist/x/isDeepEqual.min.mjs +2 -2
  411. package/dist/x/isDeepEqual.mjs +2 -2
  412. package/dist/x/isEmpty.es.js +2 -2
  413. package/dist/x/isEmpty.es.min.js +2 -2
  414. package/dist/x/isEmpty.js +2 -2
  415. package/dist/x/isEmpty.min.js +2 -2
  416. package/dist/x/isEmpty.min.mjs +2 -2
  417. package/dist/x/isEmpty.mjs +2 -2
  418. package/dist/x/isEqual.es.js +2 -2
  419. package/dist/x/isEqual.es.min.js +2 -2
  420. package/dist/x/isEqual.js +2 -2
  421. package/dist/x/isEqual.min.js +2 -2
  422. package/dist/x/isEqual.min.mjs +2 -2
  423. package/dist/x/isEqual.mjs +2 -2
  424. package/dist/x/isFunction.es.js +2 -2
  425. package/dist/x/isFunction.es.min.js +2 -2
  426. package/dist/x/isFunction.js +2 -2
  427. package/dist/x/isFunction.min.js +2 -2
  428. package/dist/x/isFunction.min.mjs +2 -2
  429. package/dist/x/isFunction.mjs +2 -2
  430. package/dist/x/isIn.es.js +2 -2
  431. package/dist/x/isIn.es.min.js +2 -2
  432. package/dist/x/isIn.js +2 -2
  433. package/dist/x/isIn.min.js +2 -2
  434. package/dist/x/isIn.min.mjs +2 -2
  435. package/dist/x/isIn.mjs +2 -2
  436. package/dist/x/isObject.es.js +2 -2
  437. package/dist/x/isObject.es.min.js +2 -2
  438. package/dist/x/isObject.js +2 -2
  439. package/dist/x/isObject.min.js +2 -2
  440. package/dist/x/isObject.min.mjs +2 -2
  441. package/dist/x/isObject.mjs +2 -2
  442. package/dist/x/isString.es.js +2 -2
  443. package/dist/x/isString.es.min.js +2 -2
  444. package/dist/x/isString.js +2 -2
  445. package/dist/x/isString.min.js +2 -2
  446. package/dist/x/isString.min.mjs +2 -2
  447. package/dist/x/isString.mjs +2 -2
  448. package/dist/x/keys.es.js +2 -2
  449. package/dist/x/keys.es.min.js +2 -2
  450. package/dist/x/keys.js +2 -2
  451. package/dist/x/keys.min.js +2 -2
  452. package/dist/x/keys.min.mjs +2 -2
  453. package/dist/x/keys.mjs +2 -2
  454. package/dist/x/last.es.js +2 -2
  455. package/dist/x/last.es.min.js +2 -2
  456. package/dist/x/last.js +2 -2
  457. package/dist/x/last.min.js +2 -2
  458. package/dist/x/last.min.mjs +2 -2
  459. package/dist/x/last.mjs +2 -2
  460. package/dist/x/maxBy.es.js +59 -6
  461. package/dist/x/maxBy.es.min.js +3 -3
  462. package/dist/x/maxBy.js +59 -6
  463. package/dist/x/maxBy.min.js +3 -3
  464. package/dist/x/maxBy.min.mjs +3 -3
  465. package/dist/x/maxBy.mjs +59 -6
  466. package/dist/x/noop.es.js +2 -2
  467. package/dist/x/noop.es.min.js +2 -2
  468. package/dist/x/noop.js +2 -2
  469. package/dist/x/noop.min.js +2 -2
  470. package/dist/x/noop.min.mjs +2 -2
  471. package/dist/x/noop.mjs +2 -2
  472. package/dist/x/pluck.es.js +32 -103
  473. package/dist/x/pluck.es.min.js +3 -3
  474. package/dist/x/pluck.js +32 -103
  475. package/dist/x/pluck.min.js +3 -3
  476. package/dist/x/pluck.min.mjs +3 -3
  477. package/dist/x/pluck.mjs +32 -103
  478. package/dist/x/prepend.es.js +2 -2
  479. package/dist/x/prepend.es.min.js +2 -2
  480. package/dist/x/prepend.js +2 -2
  481. package/dist/x/prepend.min.js +2 -2
  482. package/dist/x/prepend.min.mjs +2 -2
  483. package/dist/x/prepend.mjs +2 -2
  484. package/dist/x/size.es.js +2 -2
  485. package/dist/x/size.es.min.js +2 -2
  486. package/dist/x/size.js +2 -2
  487. package/dist/x/size.min.js +2 -2
  488. package/dist/x/size.min.mjs +2 -2
  489. package/dist/x/size.mjs +2 -2
  490. package/dist/x/trace.es.js +2 -9
  491. package/dist/x/trace.es.min.js +3 -3
  492. package/dist/x/trace.js +2 -9
  493. package/dist/x/trace.min.js +3 -3
  494. package/dist/x/trace.min.mjs +3 -3
  495. package/dist/x/trace.mjs +2 -9
  496. package/dist/x/unionWith.es.js +2 -2
  497. package/dist/x/unionWith.es.min.js +2 -2
  498. package/dist/x/unionWith.js +2 -2
  499. package/dist/x/unionWith.min.js +2 -2
  500. package/dist/x/unionWith.min.mjs +2 -2
  501. package/dist/x/unionWith.mjs +2 -2
  502. package/dist/x/uniq.es.js +2 -2
  503. package/dist/x/uniq.es.min.js +2 -2
  504. package/dist/x/uniq.js +2 -2
  505. package/dist/x/uniq.min.js +2 -2
  506. package/dist/x/uniq.min.mjs +2 -2
  507. package/dist/x/uniq.mjs +2 -2
  508. package/dist/x/unless.es.js +2 -2
  509. package/dist/x/unless.es.min.js +2 -2
  510. package/dist/x/unless.js +2 -2
  511. package/dist/x/unless.min.js +2 -2
  512. package/dist/x/unless.min.mjs +2 -2
  513. package/dist/x/unless.mjs +2 -2
  514. package/dist/x/values.es.js +2 -2
  515. package/dist/x/values.es.min.js +2 -2
  516. package/dist/x/values.js +2 -2
  517. package/dist/x/values.min.js +2 -2
  518. package/dist/x/values.min.mjs +2 -2
  519. package/dist/x/values.mjs +2 -2
  520. package/dist/x/when.es.js +2 -2
  521. package/dist/x/when.es.min.js +2 -2
  522. package/dist/x/when.js +2 -2
  523. package/dist/x/when.min.js +2 -2
  524. package/dist/x/when.min.mjs +2 -2
  525. package/dist/x/when.mjs +2 -2
  526. package/dist-test.js +9 -2042
  527. package/eq.js +21 -63
  528. package/es.js +730 -869
  529. package/every.js +94 -0
  530. package/filter.js +23 -91
  531. package/flatMap.js +75 -70
  532. package/forEach.js +82 -0
  533. package/get.js +23 -6
  534. package/global.js +6 -4
  535. package/gt.js +15 -58
  536. package/gte.js +14 -57
  537. package/index.js +730 -869
  538. package/lt.js +17 -60
  539. package/lte.js +14 -57
  540. package/map.js +9 -94
  541. package/memory-usage/reduce.js +2 -2
  542. package/not.js +27 -45
  543. package/omit.js +4 -0
  544. package/or.js +50 -33
  545. package/package.json +7 -7
  546. package/pick.js +5 -1
  547. package/pipe.js +13 -50
  548. package/reduce.js +42 -51
  549. package/rubico.js +10 -8
  550. package/set.js +43 -10
  551. package/some.js +105 -0
  552. package/switchCase.js +13 -3
  553. package/tap.js +0 -24
  554. package/test.js +847 -1096
  555. package/thunkify.js +9 -0
  556. package/transform.js +31 -16
  557. package/tryCatch.js +19 -15
  558. package/x/differenceWith.js +3 -3
  559. package/x/filterOut.test.js +6 -6
  560. package/x/flatten.js +1 -1
  561. package/x/flatten.test.js +0 -8
  562. package/x/index.js +0 -2
  563. package/x/pluck.js +18 -27
  564. package/x/pluck.test.js +3 -7
  565. package/x/timeInLoop.js +16 -25
  566. package/x/timeInLoop.test.js +8 -4
  567. package/any.js +0 -82
  568. package/dist/any.es.min.js +0 -7
  569. package/dist/any.min.js +0 -8
  570. package/dist/any.min.mjs +0 -7
  571. package/dist/fork.es.js +0 -159
  572. package/dist/fork.es.min.js +0 -7
  573. package/dist/fork.js +0 -166
  574. package/dist/fork.min.js +0 -8
  575. package/dist/fork.min.mjs +0 -7
  576. package/dist/fork.mjs +0 -159
  577. package/dist/x/forEach.es.min.js +0 -7
  578. package/dist/x/forEach.min.js +0 -8
  579. package/dist/x/forEach.min.mjs +0 -7
  580. package/fork.js +0 -101
  581. package/x/forEach.js +0 -93
  582. package/x/forEach.test.js +0 -218
  583. /package/{benchmarks → archive/benchmarks-v1.9.7}/any.js +0 -0
  584. /package/{x/forEach.benchmark.js → archive/benchmarks-v1.9.7/forEach.js} +0 -0
  585. /package/{benchmarks → archive/benchmarks-v1.9.7}/fork.js +0 -0
  586. /package/{benchmarks → archive/benchmarks-v1.9.7}/integration.js +0 -0
  587. /package/{benchmarks → archive/benchmarks-v1.9.7}/misc.js +0 -0
@@ -0,0 +1,256 @@
1
+ const { switchCase } = require('..')
2
+ const { timeInLoop } = require('../x')
3
+
4
+ const isPromise = value => value != null && typeof value.then == 'function'
5
+
6
+ const possiblePromiseThen = (value, func) => (
7
+ isPromise(value) ? value.then(func) : func(value))
8
+
9
+ /**
10
+ * @name funcConditional
11
+ *
12
+ * @synopsis
13
+ * funcConditional(
14
+ * funcs Array<args=>Promise|any>,
15
+ * )(args ...any) -> Promise|any
16
+ */
17
+ const funcConditional = funcs => function funcSwitching(...args) {
18
+ const lastIndex = funcs.length - 1
19
+ let funcsIndex = -2
20
+ while ((funcsIndex += 2) < lastIndex) {
21
+ const shouldReturnNext = funcs[funcsIndex].apply(null, args)
22
+ if (isPromise(shouldReturnNext)) {
23
+ return shouldReturnNext.then(res => res
24
+ ? funcs[funcsIndex + 1].apply(null, args)
25
+ : asyncFuncSwitch(funcs, args, funcsIndex))
26
+ }
27
+ if (shouldReturnNext) {
28
+ return funcs[funcsIndex + 1].apply(null, args)
29
+ }
30
+ }
31
+ return funcs[funcsIndex].apply(null, args)
32
+ }
33
+
34
+ const funcConditionalRegularCalls = funcs => function funcSwitching(...args) {
35
+ const lastIndex = funcs.length - 1
36
+ let funcsIndex = -2
37
+ while ((funcsIndex += 2) < lastIndex) {
38
+ const shouldReturnNext = funcs[funcsIndex](...args)
39
+ if (isPromise(shouldReturnNext)) {
40
+ return shouldReturnNext.then(res => res
41
+ ? funcs[funcsIndex + 1](...args)
42
+ : asyncFuncSwitch(funcs, args, funcsIndex))
43
+ }
44
+ if (shouldReturnNext) {
45
+ return funcs[funcsIndex + 1](...args)
46
+ }
47
+ }
48
+ return funcs[funcsIndex](...args)
49
+ }
50
+
51
+ const arraySwitchCase = (funcs, args, index) => {
52
+ if (index === funcs.length - 1) return funcs[index](...args)
53
+ return possiblePromiseThen(
54
+ funcs[index](...args),
55
+ ok => ok
56
+ ? funcs[index + 1](...args)
57
+ : arraySwitchCase(funcs, args, index + 2),
58
+ )
59
+ }
60
+
61
+ const switchCase1 = funcConditional
62
+
63
+ const switchCase10 = funcConditionalRegularCalls
64
+
65
+ const switchCase2 = funcs => (...args) => arraySwitchCase(funcs, args, 0)
66
+
67
+ // argument resolver for curry2
68
+ const curry2ResolveArg0 = (
69
+ baseFunc, arg1,
70
+ ) => function arg0Resolver(arg0) {
71
+ return baseFunc(arg0, arg1)
72
+ }
73
+
74
+ // argument resolver for curry2
75
+ const curry2ResolveArg1 = (
76
+ baseFunc, arg0,
77
+ ) => function arg1Resolver(arg1) {
78
+ return baseFunc(arg0, arg1)
79
+ }
80
+
81
+ /**
82
+ * @name curry2
83
+ *
84
+ * @synopsis
85
+ * __ = Symbol('placeholder')
86
+ *
87
+ * curry2(
88
+ * baseFunc function,
89
+ * arg0 __|any,
90
+ * arg1 __|any,
91
+ * ) -> function
92
+ */
93
+ const curry2 = function (baseFunc, arg0, arg1) {
94
+ return arg0 == __
95
+ ? curry2ResolveArg0(baseFunc, arg1)
96
+ : curry2ResolveArg1(baseFunc, arg0)
97
+ }
98
+
99
+ const thunkify1 = (func, arg0) => () => func(arg0)
100
+
101
+ const thunkify3 = (func, arg0, arg1, arg2) => () => func(arg0, arg1, arg2)
102
+
103
+ const asyncFuncSwitch = async function (funcs, args, funcsIndex) {
104
+ const lastIndex = funcs.length - 1
105
+ while ((funcsIndex += 2) < lastIndex) {
106
+ if (await funcs[funcsIndex](...args)) {
107
+ return funcs[funcsIndex + 1](...args)
108
+ }
109
+ }
110
+ return funcs[funcsIndex](...args)
111
+ }
112
+
113
+ const __ = Symbol('placeholder')
114
+
115
+ const thunkConditional = (
116
+ boolean, thunkA, thunkB,
117
+ ) => boolean ? thunkA() : thunkB()
118
+
119
+ const switchCase3 = funcs => function funcSwitching(...args) {
120
+ const lastIndex = funcs.length - 1
121
+ let funcsIndex = -2
122
+
123
+ while ((funcsIndex += 2) < lastIndex) {
124
+ const shouldReturnNext = funcs[funcsIndex](...args)
125
+ if (isPromise(shouldReturnNext)) {
126
+ return shouldReturnNext.then(
127
+ curry3(
128
+ thunkConditional,
129
+ __,
130
+ thunkify1(
131
+ curry2(funcApply, funcs[funcsIndex + 1], __),
132
+ args),
133
+ thunkify3(asyncFuncSwitch, funcs, args, funcsIndex)))
134
+ }
135
+ if (shouldReturnNext) {
136
+ return funcs[funcsIndex + 1](...args)
137
+ }
138
+ }
139
+ return funcs[funcsIndex](...args)
140
+ }
141
+
142
+
143
+ /**
144
+ * @name switchCase
145
+ *
146
+ * @benchmark
147
+ *
148
+ * @NOTE Bo5 runs
149
+ * fiveCases_switchCaseRubico1: 1e+6: 369.264ms
150
+ * fiveCases_switchCaseRubico10: 1e+6: 314.024ms
151
+ * fiveCases_switchCaseRubico2: 1e+6: 301.841ms
152
+ * fiveCases_switchCaseRubico3: 1e+6: 271.723ms
153
+ *
154
+ * fiveMilCases_switchCaseRubico1: 5e+0: 326.556ms
155
+ * fiveMilCases_switchCaseRubico10: 5e+0: 263.211ms
156
+ * fiveMilCases_switchCaseRubico2: Error: Maximum call stack size exceeded
157
+ * fiveMilCases_switchCaseRubico3: 5e+0: 262.337ms
158
+ *
159
+ * fiveThousandCases_switchCaseRubico1: 5e+2: 63.736ms
160
+ * fiveThousandCases_switchCaseRubico10: 5e+2: 48.004ms
161
+ * fiveThousandCases_switchCaseRubico2: 5e+2: 270.643ms
162
+ * fiveThousandCases_switchCaseRubico3: 5e+2: 25.742ms
163
+ */
164
+
165
+ {
166
+ const isOdd = x => x % 2 === 1
167
+
168
+ const odd = () => 'odd'
169
+
170
+ const even = () => 'even'
171
+
172
+ /**
173
+ * @name createCases
174
+ *
175
+ * @synopsis
176
+ * createCases(length number) -> cases Array<function, length>
177
+ */
178
+ const createCases = function (length) {
179
+ if (!isOdd(length)) throw new RangeError('length must be odd')
180
+ const output = [], lastIndex = length - 1
181
+ let index = -1
182
+ while (++index < lastIndex) {
183
+ output[index] = isOdd(index) ? odd : isOdd
184
+ }
185
+ output[index] = even
186
+ return output
187
+ }
188
+
189
+ const fiveCases = createCases(5)
190
+
191
+ const fiveCases_vanilla = num => isOdd(num) ? odd() : isOdd(num) ? odd() : even()
192
+
193
+ const fiveCases_vanillaArgs = (...args) => isOdd(...args) ? odd(...args) : isOdd(...args) ? odd(...args) : even(...args)
194
+
195
+ const fiveCases_switchCaseRubico1 = switchCase1(fiveCases)
196
+
197
+ const fiveCases_switchCaseRubico10 = switchCase10(fiveCases)
198
+
199
+ const fiveCases_switchCaseRubico2 = switchCase2(fiveCases)
200
+
201
+ const fiveCases_switchCaseRubico3 = switchCase3(fiveCases)
202
+
203
+ const fiveMilCases = createCases(4_999_999)
204
+
205
+ const fiveMilCases_switchCaseRubico = switchCase(fiveMilCases)
206
+
207
+ const fiveMilCases_switchCaseRubico1 = switchCase1(fiveMilCases)
208
+
209
+ const fiveMilCases_switchCaseRubico10 = switchCase10(fiveMilCases)
210
+
211
+ const fiveMilCases_switchCaseRubico2 = switchCase2(fiveMilCases)
212
+
213
+ const fiveMilCases_switchCaseRubico3 = switchCase3(fiveMilCases)
214
+
215
+ const fiveThousandCases = createCases(4_999)
216
+
217
+ const fiveThousandCases_switchCaseRubico = switchCase(fiveThousandCases)
218
+
219
+ const fiveThousandCases_switchCaseRubico1 = switchCase1(fiveThousandCases)
220
+
221
+ const fiveThousandCases_switchCaseRubico10 = switchCase10(fiveThousandCases)
222
+
223
+ const fiveThousandCases_switchCaseRubico2 = switchCase2(fiveThousandCases)
224
+
225
+ const fiveThousandCases_switchCaseRubico3 = switchCase3(fiveThousandCases)
226
+
227
+ // timeInLoop('fiveCases_vanilla', 1e6, () => fiveCases_vanilla(2))
228
+
229
+ // timeInLoop('fiveCases_vanillaArgs', 1e6, () => fiveCases_vanillaArgs(2))
230
+
231
+ // timeInLoop('fiveCases_switchCaseRubico1', 1e6, () => fiveCases_switchCaseRubico1(2))
232
+
233
+ // timeInLoop('fiveCases_switchCaseRubico10', 1e6, () => fiveCases_switchCaseRubico10(2))
234
+
235
+ // timeInLoop('fiveCases_switchCaseRubico2', 1e6, () => fiveCases_switchCaseRubico2(2))
236
+
237
+ // console.log(fiveCases_switchCaseRubico3(2))
238
+
239
+ // timeInLoop('fiveCases_switchCaseRubico3', 1e6, () => fiveCases_switchCaseRubico3(2))
240
+
241
+ // timeInLoop('fiveMilCases_switchCaseRubico1', 5, () => fiveMilCases_switchCaseRubico1(2))
242
+
243
+ // timeInLoop('fiveMilCases_switchCaseRubico10', 5, () => fiveMilCases_switchCaseRubico10(2))
244
+
245
+ // timeInLoop('fiveMilCases_switchCaseRubico2', 5, () => fiveMilCases_switchCaseRubico2(2))
246
+
247
+ // timeInLoop('fiveMilCases_switchCaseRubico3', 5, () => fiveMilCases_switchCaseRubico3(2))
248
+
249
+ // timeInLoop('fiveThousandCases_switchCaseRubico1', 500, () => fiveThousandCases_switchCaseRubico1(2))
250
+
251
+ // timeInLoop('fiveThousandCases_switchCaseRubico10', 500, () => fiveThousandCases_switchCaseRubico10(2))
252
+
253
+ // timeInLoop('fiveThousandCases_switchCaseRubico2', 500, () => fiveThousandCases_switchCaseRubico2(2))
254
+
255
+ // timeInLoop('fiveThousandCases_switchCaseRubico3', 500, () => fiveThousandCases_switchCaseRubico3(2))
256
+ }
@@ -0,0 +1,90 @@
1
+ const timeInLoop = require('../x/timeInLoop')
2
+ const _ = require('lodash/fp')
3
+ const { tap } = require('..')
4
+ const R = require('ramda')
5
+
6
+ const isPromise = value => value != null && typeof value.then == 'function'
7
+
8
+ /**
9
+ * @name tap
10
+ *
11
+ * @benchmark
12
+ * tapNoopThunk: 1e+6: 4.242ms
13
+ * tapRegularCallNoopThunk: 1e+6: 4.969ms
14
+ * _tapNoopThunk: 1e+6: 155.716ms
15
+ * RTapNoopThunk: 1e+6: 291.025ms
16
+ */
17
+
18
+ {
19
+ const noop = () => {}
20
+
21
+ const tapNoop = tap(noop)
22
+
23
+ const tapNoopThunk = () => tapNoop('yo')
24
+
25
+ tap.regularCall = func => function tapping(input) {
26
+ const call = func(input)
27
+ return isPromise(call) ? call.then(() => input) : input
28
+ }
29
+
30
+ const tapRegularCallNoop = tap.regularCall(noop)
31
+
32
+ const tapRegularCallNoopThunk = () => tapRegularCallNoop('yo')
33
+
34
+ const _tapNoop = _.tap(noop)
35
+
36
+ const _tapNoopThunk = () => _tapNoop('yo')
37
+
38
+ const RTapNoop = R.tap(noop)
39
+
40
+ const RTapNoopThunk = () => RTapNoop('yo')
41
+
42
+ // const func = tapNoopThunk
43
+ // const func = tapRegularCallNoopThunk
44
+ // const func = tapNoopThunk
45
+ // const func = _tapNoopThunk
46
+ // const func = RTapNoopThunk
47
+
48
+ // console.log(func())
49
+
50
+ // timeInLoop(func.name, 1e6, func)
51
+ }
52
+
53
+ const tap0 = func => function tapping(...args) {
54
+ const point = args[0],
55
+ call = func(...args)
56
+ return isPromise(call) ? call.then(() => point) : point
57
+ }
58
+
59
+ const always = value => function getter() { return value }
60
+
61
+ const tap1 = func => function tapping(...args) {
62
+ const point = args[0],
63
+ call = func(...args)
64
+ return isPromise(call) ? call.then(always(point)) : point
65
+ }
66
+
67
+ /**
68
+ * @name tap
69
+ *
70
+ * @benchmark
71
+ * tap0: 1e+7: 141.116ms
72
+ * tap1: 1e+7: 141.007ms
73
+ */
74
+
75
+ {
76
+ const array = []
77
+
78
+ const noop = function () {}
79
+
80
+ // timeInLoop('tap0', 1e7, () => tap0(noop)(0))
81
+
82
+ // timeInLoop('tap1', 1e7, () => tap1(noop)(0))
83
+ }
84
+
85
+ /**
86
+ * @name tap.if
87
+ *
88
+ * @benchmark
89
+ * TODO
90
+ */
@@ -0,0 +1,218 @@
1
+ const timeInLoop = require('../x/timeInLoop')
2
+ const rubico = require('rubico')
3
+ const R = require('ramda')
4
+ const _ = require('lodash')
5
+ const _fp = require('lodash/fp')
6
+ const { Readable, Writable } = require('stream')
7
+
8
+ const isPromise = value => value != null && typeof value.then == 'function'
9
+
10
+ const {
11
+ pipe, fork, assign,
12
+ tap, tryCatch, switchCase,
13
+ map, filter, reduce, transform, flatMap,
14
+ any, all, and, or, not,
15
+ eq, gt, lt, gte, lte,
16
+ get, pick, omit,
17
+ } = rubico
18
+
19
+ const square = number => number ** 2
20
+
21
+ const isOdd = number => number % 2 == 1
22
+
23
+ const squaredOdds = pipe([
24
+ filter(isOdd),
25
+ map(square),
26
+ ])
27
+
28
+ const squaredOddsArrayConcat = transform(
29
+ squaredOdds, [],
30
+ )
31
+
32
+ /**
33
+ * @name squaredOddsArrayConcat
34
+ *
35
+ * @benchmark
36
+ * squaredOddsArrayConcat: 1e+5: 85.147ms
37
+ *
38
+ * @note Bo5
39
+ */
40
+
41
+ {
42
+ const numbers = [1, 2, 3, 4, 5]
43
+
44
+ const arrayEmpty = () => []
45
+
46
+ const squaredOddsArrayConcat = transform(squaredOdds, arrayEmpty)
47
+
48
+ // timeInLoop('squaredOddsArrayConcat', 1e5, () => squaredOddsArrayConcat(numbers))
49
+ }
50
+
51
+ /**
52
+ * @name squaredOddsStringAdd
53
+ *
54
+ * @benchmark
55
+ * squaredOddsStringAdd: 1e+5: 176.517ms
56
+ *
57
+ * @note Bo5
58
+ */
59
+
60
+ {
61
+ const numbers = [1, 2, 3, 4, 5]
62
+
63
+ const squaredOddsStringAdd = transform(squaredOdds, '')
64
+
65
+ // console.log(squaredOddsStringAdd(numbers))
66
+
67
+ // timeInLoop('squaredOddsStringAdd', 1e5, () => squaredOddsStringAdd(numbers))
68
+ }
69
+
70
+ /**
71
+ * @name squaredOddsSetAdd
72
+ *
73
+ * @benchmark
74
+ * squaredOddsSetAdd: 1e+5: 93.28ms
75
+ *
76
+ * @note Bo5
77
+ */
78
+
79
+ {
80
+ const numbers = [1, 2, 3, 4, 5]
81
+
82
+ const setEmpty = () => new Set()
83
+
84
+ const squaredOddsSetAdd = transform(squaredOdds, setEmpty)
85
+
86
+ // console.log(squaredOddsSetAdd(numbers))
87
+
88
+ // timeInLoop('squaredOddsSetAdd', 1e5, () => squaredOddsSetAdd(numbers))
89
+ }
90
+
91
+ /**
92
+ * @name squaredOddsUint8ArrayConcat
93
+ *
94
+ * @benchmark
95
+ * squaredOddsUint8ArrayConcat: 1e+5: 237.538ms
96
+ *
97
+ * @note Bo5
98
+ */
99
+
100
+ {
101
+ const numbers = [1, 2, 3, 4, 5]
102
+
103
+ const setEmpty = () => new Set()
104
+
105
+ const uint8ArrayEmpty = () => new Uint8Array(0)
106
+
107
+ const squaredOddsUint8ArrayConcat = transform(squaredOdds, uint8ArrayEmpty)
108
+
109
+ // console.log(squaredOddsUint8ArrayConcat(numbers))
110
+
111
+ // timeInLoop('squaredOddsUint8ArrayConcat', 1e5, () => squaredOddsUint8ArrayConcat(numbers))
112
+ }
113
+
114
+ const MockWritable = function (values) {
115
+ Writable.call(this)
116
+ this.array = [...values]
117
+ this.handlers = new Map()
118
+ }
119
+
120
+ MockWritable.prototype.write = function (chunk, encoding, callback) {
121
+ this.array.push(chunk)
122
+ }
123
+
124
+ MockWritable.prototype.on = function (eventName, handler) {
125
+ if (this.handlers.has(eventName)) {
126
+ this.handlers.get(eventName).push(handler)
127
+ } else {
128
+ this.handlers.set(eventName, [handler])
129
+ }
130
+ }
131
+
132
+ MockWritable.prototype.once = function (eventName, handler) {
133
+ this.handlers.set(eventName, [handler])
134
+ }
135
+
136
+ MockWritable.prototype.emit = function (eventName, ...args) {
137
+ if (!this.handlers.has(eventName)) {
138
+ return undefined
139
+ }
140
+ return this.handlers.get(eventName).map(handler => handler(...args))
141
+ }
142
+
143
+ /**
144
+ * @name squaredOddsStreamConcat
145
+ *
146
+ * @benchmark
147
+ *
148
+ * @note Bo5
149
+ * squaredOddsStreamConcat: 1e+5: 90.274ms
150
+ */
151
+
152
+ {
153
+ const numbers = [1, 2, 3, 4, 5]
154
+
155
+ const setEmpty = () => new Set()
156
+
157
+ const uint8ArrayEmpty = () => new Uint8Array(0)
158
+
159
+ const square = number => number ** 2
160
+
161
+ const squaredOddsStreamConcat = transform(squaredOdds, new MockWritable([]))
162
+
163
+ // console.log(squaredOddsStreamConcat(numbers))
164
+
165
+ // timeInLoop('squaredOddsStreamConcat', 1e5, () => squaredOddsStreamConcat(numbers))
166
+ }
167
+
168
+ /**
169
+ * @name squaredOddsObjectAssign
170
+ *
171
+ * @benchmark
172
+ * squaredOddsObjectAssign: 1e+5: 96.854ms
173
+ *
174
+ * @note Bo5
175
+ */
176
+
177
+ {
178
+ const numbers = [1, 2, 3, 4, 5]
179
+
180
+ const setEmpty = () => new Set()
181
+
182
+ const uint8ArrayEmpty = () => new Uint8Array(0)
183
+
184
+ const square = number => number ** 2
185
+
186
+ const objectEmpty = () => ({})
187
+
188
+ const squaredOddsObjectAssign = transform(squaredOdds, objectEmpty)
189
+
190
+ // console.log(squaredOddsObjectAssign(numbers))
191
+
192
+ // timeInLoop('squaredOddsObjectAssign', 1e5, () => squaredOddsObjectAssign(numbers))
193
+ }
194
+
195
+ /**
196
+ * @name squaredOddsNullTransform
197
+ *
198
+ * @benchmark
199
+ * squaredOddsNullTransform: 1e+5: 78.409ms
200
+ *
201
+ * @note Bo5
202
+ */
203
+
204
+ {
205
+ const numbers = [1, 2, 3, 4, 5]
206
+
207
+ const setEmpty = () => new Set()
208
+
209
+ const uint8ArrayEmpty = () => new Uint8Array(0)
210
+
211
+ const square = number => number ** 2
212
+
213
+ const squaredOddsNullTransform = transform(squaredOdds, null)
214
+
215
+ // console.log(squaredOddsNullTransform(numbers))
216
+
217
+ // timeInLoop('squaredOddsNullTransform', 1e5, () => squaredOddsNullTransform(numbers))
218
+ }
@@ -0,0 +1,108 @@
1
+ const tryCatch = require('../tryCatch')
2
+ const timeInLoop = require('../x/timeInLoop')
3
+
4
+ const isPromise = value => value != null && typeof value.then == 'function'
5
+
6
+ const tryCatch2 = (tryer, catcher) => function tryCatcher(...args) {
7
+ try {
8
+ const output = tryer.apply(null, args)
9
+ return isPromise(output)
10
+ ? output.catch(err => catcher.call(null, err, ...args))
11
+ : output
12
+ } catch (err) {
13
+ return catcher.call(null, err, ...args)
14
+ }
15
+ }
16
+
17
+ // argument resolver for curry3
18
+ const curry3ResolveArg0 = (
19
+ baseFunc, arg1, arg2,
20
+ ) => function arg0Resolver(arg0) {
21
+ return baseFunc(arg0, arg1, arg2)
22
+ }
23
+
24
+ // argument resolver for curry3
25
+ const curry3ResolveArg1 = (
26
+ baseFunc, arg0, arg2,
27
+ ) => function arg1Resolver(arg1) {
28
+ return baseFunc(arg0, arg1, arg2)
29
+ }
30
+
31
+ // argument resolver for curry3
32
+ const curry3ResolveArg2 = (
33
+ baseFunc, arg0, arg1,
34
+ ) => function arg2Resolver(arg2) {
35
+ return baseFunc(arg0, arg1, arg2)
36
+ }
37
+
38
+ /**
39
+ * @name curry3
40
+ *
41
+ * @synopsis
42
+ * __ = Symbol('placeholder')
43
+ *
44
+ * curry3(
45
+ * baseFunc function,
46
+ * arg0 __|any,
47
+ * arg1 __|any,
48
+ * arg2 __|any
49
+ * ) -> function
50
+ */
51
+ const curry3 = function (baseFunc, arg0, arg1, arg2) {
52
+ if (arg0 == __) {
53
+ return curry3ResolveArg0(baseFunc, arg1, arg2)
54
+ }
55
+ if (arg1 == __) {
56
+ return curry3ResolveArg1(baseFunc, arg0, arg2)
57
+ }
58
+ return curry3ResolveArg2(baseFunc, arg0, arg1)
59
+ }
60
+
61
+ const tryCatch3 = (tryer, catcher) => function tryCatcher(...args) {
62
+ try {
63
+ const result = tryer(...args)
64
+ return isPromise(result)
65
+ ? result.catch(curry3(catcherApply, catcher, __, args))
66
+ : result
67
+ } catch (err) {
68
+ return catcher(err, ...args)
69
+ }
70
+ }
71
+
72
+ /**
73
+ * @name tryCatch
74
+ *
75
+ * @benchmark
76
+ * tryCatch2: 1e+6: 36.369ms
77
+ * tryCatch3: 1e+6: 17.027ms
78
+ *
79
+ * TODO find the date
80
+ */
81
+
82
+ {
83
+ const identity = value => value
84
+
85
+ const noop = () => {}
86
+
87
+ const isPromise = value => value != null && typeof value.then == 'function'
88
+
89
+ // console.log(tryCatch2(identity, noop)('yo'))
90
+ // console.log(tryCatch3(identity, noop)('yo'))
91
+
92
+ // timeInLoop('tryCatch2', 1e6, () => tryCatch2(identity, noop)('yo'))
93
+
94
+ // timeInLoop('tryCatch3', 1e6, () => tryCatch3(identity, noop)('yo'))
95
+ }
96
+
97
+ /**
98
+ * @name tryCatch 2022-06-13
99
+ *
100
+ * @benchmark
101
+ * tryCatch: 1e+6: tryCatch: 1e+6: 39.787ms
102
+ */
103
+
104
+ {
105
+ const identity = value => value
106
+ const noop = () => {}
107
+ timeInLoop('tryCatch', 1e6, () => tryCatch2(identity, noop)('yo'))
108
+ }
package/assign.js CHANGED
@@ -1,14 +1,25 @@
1
1
  const isPromise = require('./_internal/isPromise')
2
2
  const objectAssign = require('./_internal/objectAssign')
3
3
  const __ = require('./_internal/placeholder')
4
+ const curry2 = require('./_internal/curry2')
4
5
  const curry3 = require('./_internal/curry3')
5
- const funcObjectAll = require('./_internal/funcObjectAll')
6
+ const functionObjectAll = require('./_internal/functionObjectAll')
7
+
8
+ // _assign(object Object, funcs Object<function>) -> Promise|Object
9
+ const _assign = function (object, funcs) {
10
+ const result = functionObjectAll(funcs, [object])
11
+ return isPromise(result)
12
+ ? result.then(curry3(objectAssign, {}, object, __))
13
+ : ({ ...object, ...result })
14
+ }
6
15
 
7
16
  /**
8
17
  * @name assign
9
18
  *
10
19
  * @synopsis
11
20
  * ```coffeescript [specscript]
21
+ * assign(object Object, resolvers Object<function>) -> result Promise|Object
22
+ *
12
23
  * assign(resolvers Object<function>)(object Object) -> result Promise|Object
13
24
  * ```
14
25
  *
@@ -46,14 +57,13 @@ const funcObjectAll = require('./_internal/funcObjectAll')
46
57
  *
47
58
  * @execution concurrent
48
59
  */
49
- const assign = function (funcs) {
50
- const allFuncs = funcObjectAll(funcs)
51
- return function assignment(value) {
52
- const result = allFuncs(value)
53
- return isPromise(result)
54
- ? result.then(curry3(objectAssign, {}, value, __))
55
- : ({ ...value, ...result })
60
+ const assign = function (arg0, arg1) {
61
+ if (arg1 == null) {
62
+ return curry2(_assign, __, arg0)
56
63
  }
64
+ return isPromise(arg0)
65
+ ? arg0.then(curry2(_assign, __, arg1))
66
+ : _assign(arg0, arg1)
57
67
  }
58
68
 
59
69
  module.exports = assign