rubico 1.9.7 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (593) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc.js +3 -2
  3. package/.github/workflows/nodejs.yml +1 -1
  4. package/AggregateReducer.js +19 -0
  5. package/AggregateReducer.test.js +82 -0
  6. package/CHANGELOG.md +22 -1
  7. package/README.md +158 -81
  8. package/Transducer.js +75 -26
  9. package/Transducer.test.js +117 -0
  10. package/_internal/ComparisonOperator.js +68 -0
  11. package/_internal/File.js +41 -0
  12. package/_internal/FlatMappingAsyncIterator.js +4 -4
  13. package/_internal/FlatMappingIterator.js +1 -1
  14. package/_internal/TimeInLoopSuite.js +138 -0
  15. package/_internal/areAnyValuesPromises.js +23 -0
  16. package/_internal/{arrayAll.js → arrayEvery.js} +4 -4
  17. package/_internal/arrayExtend.js +3 -2
  18. package/_internal/arrayFilter.js +3 -4
  19. package/_internal/{arrayAny.js → arraySome.js} +8 -8
  20. package/_internal/{asyncIteratorAll.js → asyncIteratorEvery.js} +4 -4
  21. package/_internal/{asyncIteratorAny.js → asyncIteratorSome.js} +4 -4
  22. package/_internal/curry4.test.js +25 -0
  23. package/_internal/curry5.test.js +29 -0
  24. package/_internal/curryArgs2.js +43 -0
  25. package/_internal/curryArgs3.test.js +21 -0
  26. package/_internal/curryArgs4.js +65 -0
  27. package/_internal/curryArgs4.test.js +25 -0
  28. package/_internal/equals.js +13 -0
  29. package/_internal/findAllFilePaths.js +22 -0
  30. package/_internal/funcApply.js +2 -0
  31. package/_internal/funcCall.js +14 -0
  32. package/_internal/functionArrayAll.js +26 -0
  33. package/_internal/functionArrayAllSeries.js +55 -0
  34. package/_internal/functionObjectAll.js +32 -0
  35. package/_internal/genericReduce.js +4 -22
  36. package/_internal/genericTransform.js +15 -15
  37. package/_internal/improvedGenericTransform.js +93 -0
  38. package/_internal/{iteratorAll.js → iteratorEvery.js} +4 -4
  39. package/_internal/{iteratorAny.js → iteratorSome.js} +6 -6
  40. package/_internal/leftResolverRightResolverCompare.js +19 -0
  41. package/_internal/leftResolverRightValueCompare.js +16 -0
  42. package/_internal/leftValueRightResolverCompare.js +16 -0
  43. package/_internal/objectReduce.js +0 -1
  44. package/_internal/pathResolve.js +6 -0
  45. package/_internal/{reducerAll.js → reducerEvery.js} +4 -4
  46. package/_internal/reducerFlatMap.js +4 -4
  47. package/_internal/reducerFlatten.js +1 -1
  48. package/_internal/{reducerAny.js → reducerSome.js} +4 -4
  49. package/_internal/timeInLoop.js +37 -0
  50. package/_internal/timeInLoop.test.js +18 -0
  51. package/_internal/timeInLoopAsync.js +35 -0
  52. package/_internal/timeInLoopAsync.test.js +22 -0
  53. package/all.js +106 -40
  54. package/and.js +54 -36
  55. package/archive/{FlatMappingIteratorCool.js → FlatMappingIterator-2020-09-28.js} +1 -1
  56. package/archive/_Promise-2023-05-29.js +93 -0
  57. package/archive/arrayMap2-2023-05-29.js +73 -0
  58. package/archive/benchmarks-v1.9.7/all.js +34 -0
  59. package/archive/benchmarks-v1.9.7/and.js +24 -0
  60. package/archive/benchmarks-v1.9.7/assign.js +174 -0
  61. package/archive/benchmarks-v1.9.7/curry.js +55 -0
  62. package/archive/benchmarks-v1.9.7/eq.js +25 -0
  63. package/archive/benchmarks-v1.9.7/filter.js +1322 -0
  64. package/archive/benchmarks-v1.9.7/flatMap.js +48 -0
  65. package/archive/benchmarks-v1.9.7/get.js +44 -0
  66. package/archive/benchmarks-v1.9.7/gt.js +25 -0
  67. package/archive/benchmarks-v1.9.7/gte.js +25 -0
  68. package/archive/benchmarks-v1.9.7/lt.js +25 -0
  69. package/archive/benchmarks-v1.9.7/lte.js +25 -0
  70. package/archive/benchmarks-v1.9.7/map.js +892 -0
  71. package/archive/benchmarks-v1.9.7/omit.js +28 -0
  72. package/archive/benchmarks-v1.9.7/or.js +51 -0
  73. package/archive/benchmarks-v1.9.7/pick.js +24 -0
  74. package/archive/benchmarks-v1.9.7/pipe.js +152 -0
  75. package/archive/benchmarks-v1.9.7/reduce.js +739 -0
  76. package/archive/benchmarks-v1.9.7/switchCase.js +256 -0
  77. package/archive/benchmarks-v1.9.7/tap.js +90 -0
  78. package/archive/benchmarks-v1.9.7/transform.js +218 -0
  79. package/archive/benchmarks-v1.9.7/tryCatch.js +108 -0
  80. package/assign.js +18 -8
  81. package/bench +65 -0
  82. package/benchmark-output/v1.9.7 +268 -0
  83. package/benchmarks/all.async.js +43 -0
  84. package/benchmarks/all.js +42 -33
  85. package/benchmarks/always.js +15 -0
  86. package/benchmarks/and.async.js +25 -0
  87. package/benchmarks/and.js +20 -19
  88. package/benchmarks/assign.async.js +27 -0
  89. package/benchmarks/assign.js +20 -167
  90. package/benchmarks/curry.js +34 -54
  91. package/benchmarks/eq.async.js +23 -0
  92. package/benchmarks/eq.js +17 -19
  93. package/benchmarks/every.async.js +19 -0
  94. package/benchmarks/every.js +19 -0
  95. package/benchmarks/filter.async.js +32 -0
  96. package/benchmarks/filter.js +27 -1311
  97. package/benchmarks/flatMap.async.js +26 -0
  98. package/benchmarks/flatMap.js +26 -36
  99. package/benchmarks/get.async.js +19 -0
  100. package/benchmarks/get.js +27 -32
  101. package/benchmarks/gt.async.js +23 -0
  102. package/benchmarks/gt.js +17 -19
  103. package/benchmarks/gte.async.js +23 -0
  104. package/benchmarks/gte.js +17 -19
  105. package/benchmarks/lt.async.js +23 -0
  106. package/benchmarks/lt.js +17 -19
  107. package/benchmarks/lte.async.js +23 -0
  108. package/benchmarks/lte.js +17 -19
  109. package/benchmarks/map.async.js +43 -0
  110. package/benchmarks/map.js +24 -876
  111. package/benchmarks/misc/Promise.js +26 -0
  112. package/benchmarks/misc/isPromise.js +30 -0
  113. package/benchmarks/misc/promiseAll.js +36 -0
  114. package/benchmarks/not.js +23 -0
  115. package/benchmarks/omit.js +30 -20
  116. package/benchmarks/or.async.js +25 -0
  117. package/benchmarks/or.js +23 -49
  118. package/benchmarks/pick.js +30 -16
  119. package/benchmarks/pipe.async.js +47 -0
  120. package/benchmarks/pipe.js +46 -151
  121. package/benchmarks/reduce.async.js +32 -0
  122. package/benchmarks/reduce.js +27 -728
  123. package/benchmarks/set.async.js +19 -0
  124. package/benchmarks/set.js +41 -0
  125. package/benchmarks/some.async.js +19 -0
  126. package/benchmarks/some.js +19 -0
  127. package/benchmarks/switchCase.async.js +27 -0
  128. package/benchmarks/switchCase.js +55 -256
  129. package/benchmarks/tap.js +10 -85
  130. package/benchmarks/thunkify.js +15 -0
  131. package/benchmarks/transform.async.js +27 -0
  132. package/benchmarks/transform.js +28 -206
  133. package/benchmarks/tryCatch.async.js +25 -0
  134. package/benchmarks/tryCatch.js +24 -100
  135. package/build +472 -0
  136. package/compose.js +46 -0
  137. package/dist/Transducer.es.js +481 -0
  138. package/dist/Transducer.es.min.js +7 -0
  139. package/dist/Transducer.js +488 -0
  140. package/dist/Transducer.min.js +8 -0
  141. package/dist/Transducer.mjs +481 -0
  142. package/dist/__.es.js +2 -2
  143. package/dist/__.es.min.js +2 -2
  144. package/dist/__.js +2 -2
  145. package/dist/__.min.js +2 -2
  146. package/dist/__.mjs +2 -2
  147. package/dist/all.es.js +173 -92
  148. package/dist/all.es.min.js +3 -3
  149. package/dist/all.js +173 -92
  150. package/dist/all.min.js +3 -3
  151. package/dist/all.mjs +173 -92
  152. package/dist/always.es.js +2 -2
  153. package/dist/always.es.min.js +2 -2
  154. package/dist/always.js +2 -2
  155. package/dist/always.min.js +2 -2
  156. package/dist/always.mjs +2 -2
  157. package/dist/and.es.js +101 -32
  158. package/dist/and.es.min.js +3 -3
  159. package/dist/and.js +101 -32
  160. package/dist/and.min.js +3 -3
  161. package/dist/and.mjs +101 -32
  162. package/dist/assign.es.js +37 -10
  163. package/dist/assign.es.min.js +3 -3
  164. package/dist/assign.js +37 -10
  165. package/dist/assign.min.js +3 -3
  166. package/dist/assign.mjs +37 -10
  167. package/dist/compose.es.js +71 -0
  168. package/dist/compose.es.min.js +7 -0
  169. package/dist/compose.js +78 -0
  170. package/dist/compose.min.js +8 -0
  171. package/dist/compose.mjs +71 -0
  172. package/dist/curry.es.js +2 -2
  173. package/dist/curry.es.min.js +2 -2
  174. package/dist/curry.js +2 -2
  175. package/dist/curry.min.js +2 -2
  176. package/dist/curry.mjs +2 -2
  177. package/dist/eq.es.js +172 -49
  178. package/dist/eq.es.min.js +3 -3
  179. package/dist/eq.js +172 -49
  180. package/dist/eq.min.js +3 -3
  181. package/dist/eq.mjs +172 -49
  182. package/dist/every.es.js +194 -0
  183. package/dist/every.es.min.js +7 -0
  184. package/dist/every.js +201 -0
  185. package/dist/every.min.js +8 -0
  186. package/dist/every.mjs +194 -0
  187. package/dist/filter.es.js +14 -108
  188. package/dist/filter.es.min.js +3 -3
  189. package/dist/filter.js +14 -108
  190. package/dist/filter.min.js +3 -3
  191. package/dist/filter.mjs +14 -108
  192. package/dist/flatMap.es.js +27 -214
  193. package/dist/flatMap.es.min.js +3 -3
  194. package/dist/flatMap.js +27 -214
  195. package/dist/flatMap.min.js +3 -3
  196. package/dist/flatMap.mjs +27 -214
  197. package/dist/{x/forEach.es.js → forEach.es.js} +52 -70
  198. package/dist/forEach.es.min.js +7 -0
  199. package/dist/{x/forEach.js → forEach.js} +52 -70
  200. package/dist/forEach.min.js +8 -0
  201. package/dist/{x/forEach.mjs → forEach.mjs} +52 -70
  202. package/dist/get.es.js +60 -5
  203. package/dist/get.es.min.js +3 -3
  204. package/dist/get.js +60 -5
  205. package/dist/get.min.js +3 -3
  206. package/dist/get.mjs +60 -5
  207. package/dist/gt.es.js +171 -48
  208. package/dist/gt.es.min.js +3 -3
  209. package/dist/gt.js +171 -48
  210. package/dist/gt.min.js +3 -3
  211. package/dist/gt.mjs +171 -48
  212. package/dist/gte.es.js +171 -48
  213. package/dist/gte.es.min.js +3 -3
  214. package/dist/gte.js +171 -48
  215. package/dist/gte.min.js +3 -3
  216. package/dist/gte.mjs +171 -48
  217. package/dist/lt.es.js +171 -48
  218. package/dist/lt.es.min.js +3 -3
  219. package/dist/lt.js +171 -48
  220. package/dist/lt.min.js +3 -3
  221. package/dist/lt.mjs +171 -48
  222. package/dist/lte.es.js +171 -48
  223. package/dist/lte.es.min.js +3 -3
  224. package/dist/lte.js +171 -48
  225. package/dist/lte.min.js +3 -3
  226. package/dist/lte.mjs +171 -48
  227. package/dist/map.es.js +12 -101
  228. package/dist/map.es.min.js +3 -3
  229. package/dist/map.js +12 -101
  230. package/dist/map.min.js +3 -3
  231. package/dist/map.mjs +12 -101
  232. package/dist/not.es.js +75 -14
  233. package/dist/not.es.min.js +3 -3
  234. package/dist/not.js +75 -14
  235. package/dist/not.min.js +3 -3
  236. package/dist/not.mjs +75 -14
  237. package/dist/omit.es.js +7 -2
  238. package/dist/omit.es.min.js +3 -3
  239. package/dist/omit.js +7 -2
  240. package/dist/omit.min.js +3 -3
  241. package/dist/omit.mjs +7 -2
  242. package/dist/or.es.js +99 -31
  243. package/dist/or.es.min.js +3 -3
  244. package/dist/or.js +99 -31
  245. package/dist/or.min.js +3 -3
  246. package/dist/or.mjs +99 -31
  247. package/dist/pick.es.js +8 -3
  248. package/dist/pick.es.min.js +3 -3
  249. package/dist/pick.js +8 -3
  250. package/dist/pick.min.js +3 -3
  251. package/dist/pick.mjs +8 -3
  252. package/dist/pipe.es.js +42 -46
  253. package/dist/pipe.es.min.js +3 -3
  254. package/dist/pipe.js +42 -46
  255. package/dist/pipe.min.js +3 -3
  256. package/dist/pipe.mjs +42 -46
  257. package/dist/reduce.es.js +52 -94
  258. package/dist/reduce.es.min.js +3 -3
  259. package/dist/reduce.js +52 -94
  260. package/dist/reduce.min.js +3 -3
  261. package/dist/reduce.mjs +52 -94
  262. package/dist/rubico.es.js +762 -883
  263. package/dist/rubico.es.min.js +3 -3
  264. package/dist/rubico.global.js +2794 -0
  265. package/dist/rubico.global.min.js +8 -0
  266. package/dist/rubico.js +739 -869
  267. package/dist/rubico.min.js +3 -3
  268. package/dist/rubico.mjs +762 -883
  269. package/dist/set.es.js +18 -3
  270. package/dist/set.es.min.js +3 -3
  271. package/dist/set.js +18 -3
  272. package/dist/set.min.js +3 -3
  273. package/dist/set.mjs +18 -3
  274. package/dist/{any.js → some.es.js} +64 -54
  275. package/dist/some.es.min.js +7 -0
  276. package/dist/{any.mjs → some.js} +72 -48
  277. package/dist/some.min.js +8 -0
  278. package/dist/{any.es.js → some.mjs} +65 -48
  279. package/dist/switchCase.es.js +55 -5
  280. package/dist/switchCase.es.min.js +3 -3
  281. package/dist/switchCase.js +55 -5
  282. package/dist/switchCase.min.js +3 -3
  283. package/dist/switchCase.mjs +55 -5
  284. package/dist/tap.es.js +2 -9
  285. package/dist/tap.es.min.js +3 -3
  286. package/dist/tap.js +2 -9
  287. package/dist/tap.min.js +3 -3
  288. package/dist/tap.mjs +2 -9
  289. package/dist/thunkify.es.js +45 -2
  290. package/dist/thunkify.es.min.js +3 -3
  291. package/dist/thunkify.js +45 -2
  292. package/dist/thunkify.min.js +3 -3
  293. package/dist/thunkify.mjs +45 -2
  294. package/dist/transform.es.js +35 -71
  295. package/dist/transform.es.min.js +3 -3
  296. package/dist/transform.js +35 -71
  297. package/dist/transform.min.js +3 -3
  298. package/dist/transform.mjs +35 -71
  299. package/dist/tryCatch.es.js +33 -17
  300. package/dist/tryCatch.es.min.js +3 -3
  301. package/dist/tryCatch.js +33 -17
  302. package/dist/tryCatch.min.js +3 -3
  303. package/dist/tryCatch.mjs +33 -17
  304. package/dist/x/append.es.js +2 -2
  305. package/dist/x/append.es.min.js +2 -2
  306. package/dist/x/append.js +2 -2
  307. package/dist/x/append.min.js +2 -2
  308. package/dist/x/append.mjs +2 -2
  309. package/dist/x/callProp.es.js +2 -2
  310. package/dist/x/callProp.es.min.js +2 -2
  311. package/dist/x/callProp.js +2 -2
  312. package/dist/x/callProp.min.js +2 -2
  313. package/dist/x/callProp.mjs +2 -2
  314. package/dist/x/defaultsDeep.es.js +2 -2
  315. package/dist/x/defaultsDeep.es.min.js +2 -2
  316. package/dist/x/defaultsDeep.js +2 -2
  317. package/dist/x/defaultsDeep.min.js +2 -2
  318. package/dist/x/defaultsDeep.mjs +2 -2
  319. package/dist/x/differenceWith.es.js +7 -7
  320. package/dist/x/differenceWith.es.min.js +3 -3
  321. package/dist/x/differenceWith.js +7 -7
  322. package/dist/x/differenceWith.min.js +2 -2
  323. package/dist/x/differenceWith.mjs +7 -7
  324. package/dist/x/filterOut.es.js +60 -117
  325. package/dist/x/filterOut.es.min.js +3 -3
  326. package/dist/x/filterOut.js +60 -117
  327. package/dist/x/filterOut.min.js +3 -3
  328. package/dist/x/filterOut.mjs +60 -117
  329. package/dist/x/find.es.js +2 -2
  330. package/dist/x/find.es.min.js +2 -2
  331. package/dist/x/find.js +2 -2
  332. package/dist/x/find.min.js +2 -2
  333. package/dist/x/find.mjs +2 -2
  334. package/dist/x/findIndex.es.js +2 -2
  335. package/dist/x/findIndex.es.min.js +2 -2
  336. package/dist/x/findIndex.js +2 -2
  337. package/dist/x/findIndex.min.js +2 -2
  338. package/dist/x/findIndex.mjs +2 -2
  339. package/dist/x/first.es.js +2 -2
  340. package/dist/x/first.es.min.js +2 -2
  341. package/dist/x/first.js +2 -2
  342. package/dist/x/first.min.js +2 -2
  343. package/dist/x/first.mjs +2 -2
  344. package/dist/x/flatten.es.js +20 -207
  345. package/dist/x/flatten.es.min.js +3 -3
  346. package/dist/x/flatten.js +20 -207
  347. package/dist/x/flatten.min.js +3 -3
  348. package/dist/x/flatten.mjs +20 -207
  349. package/dist/x/groupBy.es.js +52 -94
  350. package/dist/x/groupBy.es.min.js +3 -3
  351. package/dist/x/groupBy.js +52 -94
  352. package/dist/x/groupBy.min.js +3 -3
  353. package/dist/x/groupBy.mjs +52 -94
  354. package/dist/x/has.es.js +2 -2
  355. package/dist/x/has.es.min.js +2 -2
  356. package/dist/x/has.js +2 -2
  357. package/dist/x/has.min.js +2 -2
  358. package/dist/x/has.mjs +2 -2
  359. package/dist/x/identity.es.js +2 -2
  360. package/dist/x/identity.es.min.js +2 -2
  361. package/dist/x/identity.js +2 -2
  362. package/dist/x/identity.min.js +2 -2
  363. package/dist/x/identity.mjs +2 -2
  364. package/dist/x/includes.es.js +2 -2
  365. package/dist/x/includes.es.min.js +2 -2
  366. package/dist/x/includes.js +2 -2
  367. package/dist/x/includes.min.js +2 -2
  368. package/dist/x/includes.mjs +2 -2
  369. package/dist/x/isDeepEqual.es.js +2 -2
  370. package/dist/x/isDeepEqual.es.min.js +2 -2
  371. package/dist/x/isDeepEqual.js +2 -2
  372. package/dist/x/isDeepEqual.min.js +2 -2
  373. package/dist/x/isDeepEqual.mjs +2 -2
  374. package/dist/x/isEmpty.es.js +2 -2
  375. package/dist/x/isEmpty.es.min.js +2 -2
  376. package/dist/x/isEmpty.js +2 -2
  377. package/dist/x/isEmpty.min.js +2 -2
  378. package/dist/x/isEmpty.mjs +2 -2
  379. package/dist/x/isEqual.es.js +2 -2
  380. package/dist/x/isEqual.es.min.js +2 -2
  381. package/dist/x/isEqual.js +2 -2
  382. package/dist/x/isEqual.min.js +2 -2
  383. package/dist/x/isEqual.mjs +2 -2
  384. package/dist/x/isFunction.es.js +2 -2
  385. package/dist/x/isFunction.es.min.js +2 -2
  386. package/dist/x/isFunction.js +2 -2
  387. package/dist/x/isFunction.min.js +2 -2
  388. package/dist/x/isFunction.mjs +2 -2
  389. package/dist/x/isIn.es.js +2 -2
  390. package/dist/x/isIn.es.min.js +2 -2
  391. package/dist/x/isIn.js +2 -2
  392. package/dist/x/isIn.min.js +2 -2
  393. package/dist/x/isIn.mjs +2 -2
  394. package/dist/x/isObject.es.js +2 -2
  395. package/dist/x/isObject.es.min.js +2 -2
  396. package/dist/x/isObject.js +2 -2
  397. package/dist/x/isObject.min.js +2 -2
  398. package/dist/x/isObject.mjs +2 -2
  399. package/dist/x/isString.es.js +2 -2
  400. package/dist/x/isString.es.min.js +2 -2
  401. package/dist/x/isString.js +2 -2
  402. package/dist/x/isString.min.js +2 -2
  403. package/dist/x/isString.mjs +2 -2
  404. package/dist/x/keys.es.js +2 -2
  405. package/dist/x/keys.es.min.js +2 -2
  406. package/dist/x/keys.js +2 -2
  407. package/dist/x/keys.min.js +2 -2
  408. package/dist/x/keys.mjs +2 -2
  409. package/dist/x/last.es.js +2 -2
  410. package/dist/x/last.es.min.js +2 -2
  411. package/dist/x/last.js +2 -2
  412. package/dist/x/last.min.js +2 -2
  413. package/dist/x/last.mjs +2 -2
  414. package/dist/x/maxBy.es.js +59 -6
  415. package/dist/x/maxBy.es.min.js +3 -3
  416. package/dist/x/maxBy.js +59 -6
  417. package/dist/x/maxBy.min.js +3 -3
  418. package/dist/x/maxBy.mjs +59 -6
  419. package/dist/x/noop.es.js +2 -2
  420. package/dist/x/noop.es.min.js +2 -2
  421. package/dist/x/noop.js +2 -2
  422. package/dist/x/noop.min.js +2 -2
  423. package/dist/x/noop.mjs +2 -2
  424. package/dist/x/pluck.es.js +32 -103
  425. package/dist/x/pluck.es.min.js +3 -3
  426. package/dist/x/pluck.js +32 -103
  427. package/dist/x/pluck.min.js +3 -3
  428. package/dist/x/pluck.mjs +32 -103
  429. package/dist/x/prepend.es.js +2 -2
  430. package/dist/x/prepend.es.min.js +2 -2
  431. package/dist/x/prepend.js +2 -2
  432. package/dist/x/prepend.min.js +2 -2
  433. package/dist/x/prepend.mjs +2 -2
  434. package/dist/x/size.es.js +2 -2
  435. package/dist/x/size.es.min.js +2 -2
  436. package/dist/x/size.js +2 -2
  437. package/dist/x/size.min.js +2 -2
  438. package/dist/x/size.mjs +2 -2
  439. package/dist/x/trace.es.js +2 -9
  440. package/dist/x/trace.es.min.js +3 -3
  441. package/dist/x/trace.js +2 -9
  442. package/dist/x/trace.min.js +3 -3
  443. package/dist/x/trace.mjs +2 -9
  444. package/dist/x/unionWith.es.js +2 -2
  445. package/dist/x/unionWith.es.min.js +2 -2
  446. package/dist/x/unionWith.js +2 -2
  447. package/dist/x/unionWith.min.js +2 -2
  448. package/dist/x/unionWith.mjs +2 -2
  449. package/dist/x/uniq.es.js +2 -2
  450. package/dist/x/uniq.es.min.js +2 -2
  451. package/dist/x/uniq.js +2 -2
  452. package/dist/x/uniq.min.js +2 -2
  453. package/dist/x/uniq.mjs +2 -2
  454. package/dist/x/unless.es.js +2 -2
  455. package/dist/x/unless.es.min.js +2 -2
  456. package/dist/x/unless.js +2 -2
  457. package/dist/x/unless.min.js +2 -2
  458. package/dist/x/unless.mjs +2 -2
  459. package/dist/x/values.es.js +2 -2
  460. package/dist/x/values.es.min.js +2 -2
  461. package/dist/x/values.js +2 -2
  462. package/dist/x/values.min.js +2 -2
  463. package/dist/x/values.mjs +2 -2
  464. package/dist/x/when.es.js +2 -2
  465. package/dist/x/when.es.min.js +2 -2
  466. package/dist/x/when.js +2 -2
  467. package/dist/x/when.min.js +2 -2
  468. package/dist/x/when.mjs +2 -2
  469. package/dist-test.js +31 -2042
  470. package/eq.js +21 -63
  471. package/es.js +739 -869
  472. package/every.js +94 -0
  473. package/filter.js +23 -91
  474. package/flatMap.js +75 -70
  475. package/forEach.js +82 -0
  476. package/get.js +23 -6
  477. package/global.js +6 -4
  478. package/gt.js +15 -58
  479. package/gte.js +14 -57
  480. package/index.js +739 -869
  481. package/lt.js +17 -60
  482. package/lte.js +14 -57
  483. package/map.js +9 -94
  484. package/memory-usage/reduce.js +2 -2
  485. package/not.js +27 -45
  486. package/omit.js +4 -0
  487. package/or.js +50 -33
  488. package/package.json +7 -7
  489. package/pick.js +5 -1
  490. package/pipe.js +13 -50
  491. package/reduce.js +42 -51
  492. package/rubico.js +22 -11
  493. package/set.js +43 -10
  494. package/some.js +105 -0
  495. package/switchCase.js +13 -3
  496. package/tap.js +0 -24
  497. package/test.js +847 -1096
  498. package/thunkify.js +9 -0
  499. package/tmp.js +1 -0
  500. package/transform.js +31 -16
  501. package/tryCatch.js +19 -15
  502. package/x/differenceWith.js +3 -3
  503. package/x/filterOut.test.js +6 -6
  504. package/x/flatten.js +1 -1
  505. package/x/flatten.test.js +0 -8
  506. package/x/index.js +0 -2
  507. package/x/pluck.js +18 -27
  508. package/x/pluck.test.js +3 -7
  509. package/x/timeInLoop.js +16 -25
  510. package/x/timeInLoop.test.js +8 -4
  511. package/any.js +0 -82
  512. package/dist/__.min.mjs +0 -7
  513. package/dist/all.min.mjs +0 -7
  514. package/dist/always.min.mjs +0 -7
  515. package/dist/and.min.mjs +0 -7
  516. package/dist/any.es.min.js +0 -7
  517. package/dist/any.min.js +0 -8
  518. package/dist/any.min.mjs +0 -7
  519. package/dist/assign.min.mjs +0 -7
  520. package/dist/curry.min.mjs +0 -7
  521. package/dist/eq.min.mjs +0 -7
  522. package/dist/filter.min.mjs +0 -7
  523. package/dist/flatMap.min.mjs +0 -7
  524. package/dist/fork.es.js +0 -159
  525. package/dist/fork.es.min.js +0 -7
  526. package/dist/fork.js +0 -166
  527. package/dist/fork.min.js +0 -8
  528. package/dist/fork.min.mjs +0 -7
  529. package/dist/fork.mjs +0 -159
  530. package/dist/get.min.mjs +0 -7
  531. package/dist/gt.min.mjs +0 -7
  532. package/dist/gte.min.mjs +0 -7
  533. package/dist/lt.min.mjs +0 -7
  534. package/dist/lte.min.mjs +0 -7
  535. package/dist/map.min.mjs +0 -7
  536. package/dist/not.min.mjs +0 -7
  537. package/dist/omit.min.mjs +0 -7
  538. package/dist/or.min.mjs +0 -7
  539. package/dist/pick.min.mjs +0 -7
  540. package/dist/pipe.min.mjs +0 -7
  541. package/dist/reduce.min.mjs +0 -7
  542. package/dist/rubico.min.mjs +0 -7
  543. package/dist/set.min.mjs +0 -7
  544. package/dist/switchCase.min.mjs +0 -7
  545. package/dist/tap.min.mjs +0 -7
  546. package/dist/thunkify.min.mjs +0 -7
  547. package/dist/transform.min.mjs +0 -7
  548. package/dist/tryCatch.min.mjs +0 -7
  549. package/dist/x/append.min.mjs +0 -7
  550. package/dist/x/callProp.min.mjs +0 -7
  551. package/dist/x/defaultsDeep.min.mjs +0 -7
  552. package/dist/x/differenceWith.min.mjs +0 -7
  553. package/dist/x/filterOut.min.mjs +0 -7
  554. package/dist/x/find.min.mjs +0 -7
  555. package/dist/x/findIndex.min.mjs +0 -7
  556. package/dist/x/first.min.mjs +0 -7
  557. package/dist/x/flatten.min.mjs +0 -7
  558. package/dist/x/forEach.es.min.js +0 -7
  559. package/dist/x/forEach.min.js +0 -8
  560. package/dist/x/forEach.min.mjs +0 -7
  561. package/dist/x/groupBy.min.mjs +0 -7
  562. package/dist/x/has.min.mjs +0 -7
  563. package/dist/x/identity.min.mjs +0 -7
  564. package/dist/x/includes.min.mjs +0 -7
  565. package/dist/x/isDeepEqual.min.mjs +0 -7
  566. package/dist/x/isEmpty.min.mjs +0 -7
  567. package/dist/x/isEqual.min.mjs +0 -7
  568. package/dist/x/isFunction.min.mjs +0 -7
  569. package/dist/x/isIn.min.mjs +0 -7
  570. package/dist/x/isObject.min.mjs +0 -7
  571. package/dist/x/isString.min.mjs +0 -7
  572. package/dist/x/keys.min.mjs +0 -7
  573. package/dist/x/last.min.mjs +0 -7
  574. package/dist/x/maxBy.min.mjs +0 -7
  575. package/dist/x/noop.min.mjs +0 -7
  576. package/dist/x/pluck.min.mjs +0 -7
  577. package/dist/x/prepend.min.mjs +0 -7
  578. package/dist/x/size.min.mjs +0 -7
  579. package/dist/x/trace.min.mjs +0 -7
  580. package/dist/x/unionWith.min.mjs +0 -7
  581. package/dist/x/uniq.min.mjs +0 -7
  582. package/dist/x/unless.min.mjs +0 -7
  583. package/dist/x/values.min.mjs +0 -7
  584. package/dist/x/when.min.mjs +0 -7
  585. package/distributor.js +0 -495
  586. package/fork.js +0 -101
  587. package/x/forEach.js +0 -93
  588. package/x/forEach.test.js +0 -218
  589. /package/{benchmarks → archive/benchmarks-v1.9.7}/any.js +0 -0
  590. /package/{x/forEach.benchmark.js → archive/benchmarks-v1.9.7/forEach.js} +0 -0
  591. /package/{benchmarks → archive/benchmarks-v1.9.7}/fork.js +0 -0
  592. /package/{benchmarks → archive/benchmarks-v1.9.7}/integration.js +0 -0
  593. /package/{benchmarks → archive/benchmarks-v1.9.7}/misc.js +0 -0
package/dist-test.js CHANGED
@@ -1,2048 +1,37 @@
1
- const Test = require('thunk-test')
2
1
  const assert = require('assert')
3
- const funcConcatSync = require('./_internal/funcConcatSync')
4
- const thunkify1 = require('./_internal/thunkify1')
5
- const mapFrom = require('./_internal/mapFrom')
6
-
7
- const {
8
- pipe, tap,
9
- switchCase, tryCatch,
10
- fork, assign, get, pick, omit,
11
- map, filter, reduce, transform, flatMap,
12
- and, or, not, any, all,
13
- eq, gt, lt, gte, lte,
14
- thunkify, always,
15
- curry, __,
16
- } = require('./rubico')
17
-
18
- const mapFromObject = function (object) {
19
- const result = new Map()
20
- for (const key in object) {
21
- result.set(key, object[key])
22
- }
23
- return result
24
- }
25
-
26
- const TestsMap = new Map()
27
-
28
- TestsMap.set('pipe', pipe => [
29
- Test(
30
- 'pipe: awesome username generator',
31
- pipe([
32
- (arg0, arg1) => arg1 == null ? arg0 : arg0 + arg1,
33
- string => string.toUpperCase(),
34
- string => `x${string}x`,
35
- string => `X${string}X`,
36
- string => `x${string}x`,
37
- ]))
38
- .case('deimos', 'xXxDEIMOSxXx')
39
- .case('aa', 'bb', 'xXxAABBxXx')
40
- .case('|', result => assert.equal(result, 'xXx|xXx'))
41
- .case('?', async result => assert.equal(result, 'xXx?xXx'))
42
- .throws(1, new TypeError('string.toUpperCase is not a function'))
43
- .throws(2, async (err, arg0) => {
44
- assert.strictEqual(arg0, 2)
45
- assert.strictEqual(err.name, 'TypeError')
46
- assert.strictEqual(err.message, 'string.toUpperCase is not a function')
47
- }),
48
-
49
- Test(
50
- 'pipe: object transducer',
51
- pipe([
52
- map(obj => Object.assign(obj, { a: 1 })),
53
- map(obj => Object.assign(obj, { b: 2 })),
54
- map(obj => Object.assign(obj, { c: 3 })),
55
- ]))
56
- .case([{}], [{ a: 1, b: 2, c: 3 }])
57
- .case(function add(a, b) {
58
- return a + b
59
- }, reducer => {
60
- assert.strictEqual([1, 2, 3, 4, 5].reduce(reducer, 0), 15)
61
- }),
62
-
63
- Test('eager pipe', pipe)
64
- .case(1, 2, 3, [Array.of], [1, 2, 3]),
65
- ])
66
-
67
- TestsMap.set('pipe.sync', pipeSync => [
68
- Test(
69
- 'pipe.sync',
70
- pipeSync([
71
- value => Promise.resolve(value),
72
- promise => promise.then(res => res ** 2)
73
- ]))
74
- .case(1, 1)
75
- .case(2, 4)
76
- .case(3, 9)
77
- .case(null, 0)
78
- ])
79
-
80
- TestsMap.set('tap', tap => [
81
- Test(
82
- 'tap syncTapper',
83
- tap(function noop() {}))
84
- .case(1, 1)
85
- .case('hey', 'hey')
86
- .case(null, null)
87
- .case({}, {})
88
- .case({ a: 1, b: 2, c: 3 }, { a: 1, b: 2, c: 3 })
89
- .case({ a: 1, b: 2, c: 3, d: ['ayo'] }, { a: 1, b: 2, c: 3, d: ['ayo'] }),
90
-
91
- Test(
92
- 'tap asyncTapper',
93
- tap(async function asyncNoop() {}))
94
- .case(1, 1)
95
- .case('hey', 'hey')
96
- .case(null, null)
97
- .case({}, {})
98
- .case({ a: 1, b: 2, c: 3 }, { a: 1, b: 2, c: 3 })
99
- .case({ a: 1, b: 2, c: 3, d: ['ayo'] }, { a: 1, b: 2, c: 3, d: ['ayo'] }),
100
- ])
101
-
102
- TestsMap.set('tap.sync', tapSync => [
103
- Test(
104
- 'tap.sync syncTapper',
105
- tapSync(function noop() {}))
106
- .case(1, 1)
107
- .case('hey', 'hey')
108
- .case(null, null)
109
- .case({}, {})
110
- .case({ a: 1, b: 2, c: 3 }, { a: 1, b: 2, c: 3 })
111
- .case({ a: 1, b: 2, c: 3, d: ['ayo'] }, { a: 1, b: 2, c: 3, d: ['ayo'] }),
112
-
113
- Test(
114
- 'tap.sync asyncTapper',
115
- tapSync(async function asyncNoop() {}))
116
- .case(1, 1)
117
- .case('hey', 'hey')
118
- .case(null, null)
119
- .case({}, {})
120
- .case({ a: 1, b: 2, c: 3 }, { a: 1, b: 2, c: 3 })
121
- .case({ a: 1, b: 2, c: 3, d: ['ayo'] }, { a: 1, b: 2, c: 3, d: ['ayo'] }),
122
- ])
123
-
124
- TestsMap.set('tap.if', tapIf => [
125
- Test(
126
- 'tap.if',
127
- tapIf(number => number % 2 == 1, function noop() {}))
128
- .case(1, 1)
129
- .case(2, 2),
130
-
131
- Test(
132
- 'tap.if',
133
- tapIf(async number => number % 2 == 1, function noop() {}))
134
- .case(1, 1)
135
- .case(2, 2),
136
-
137
- Test(
138
- 'tap.if',
139
- tapIf(number => number % 2 == 1, async function noop() {}))
140
- .case(1, 1)
141
- .case(2, 2),
142
- ])
143
-
144
- TestsMap.set('fork', fork => [
145
- Test(
146
- 'fork object',
147
- fork({
148
- number: number => number,
149
- squared: number => number ** 2,
150
- cubed: number => number ** 3,
151
- }))
152
- .case(1, { number: 1, squared: 1, cubed: 1 })
153
- .case(2, { number: 2, squared: 4, cubed: 8 })
154
- .case(3, { number: 3, squared: 9, cubed: 27 }),
155
-
156
- Test(
157
- 'fork array',
158
- fork([
159
- object => object.a,
160
- async object => object.b,
161
- object => object.c,
162
- ]))
163
- .case({ a: 1, b: 2, c: 3 }, [1, 2, 3])
164
- ])
165
-
166
- TestsMap.set('fork.series', forkSeries => [
167
- Test(
168
- 'fork.series object',
169
- forkSeries({
170
- number: number => number,
171
- squared: number => number ** 2,
172
- cubed: number => number ** 3,
173
- }))
174
- .case(1, { number: 1, squared: 1, cubed: 1 })
175
- .case(2, { number: 2, squared: 4, cubed: 8 })
176
- .case(3, { number: 3, squared: 9, cubed: 27 }),
177
-
178
- Test(
179
- 'fork.series array',
180
- forkSeries([
181
- object => object.a,
182
- async object => object.b,
183
- object => object.c,
184
- ]))
185
- .case({ a: 1, b: 2, c: 3 }, [1, 2, 3])
186
- ])
187
-
188
- TestsMap.set('assign', assign => [
189
- Test(
190
- 'assign',
191
- assign({
192
- fifthPower({ number }) {
193
- return number ** 5
194
- },
195
- sixthPower({ number }) {
196
- return number ** 6
197
- },
198
- }))
199
- .case({ number: 1 }, { number: 1, fifthPower: 1, sixthPower: 1 })
200
- .case({ number: 2 }, { number: 2, fifthPower: 32, sixthPower: 64 })
201
- .case({ number: 3 }, { number: 3, fifthPower: 243, sixthPower: 729 }),
202
- ])
203
-
204
- TestsMap.set('get', get => [
205
- Test(
206
- 'get',
207
- get('a'))
208
- .case({ a: 1 }, 1)
209
- .case({ a: [] }, [])
210
- .case({ a: {} }, {})
211
- .case({ b: 1 }, undefined),
212
-
213
- Test(
214
- 'get default',
215
- get('a', 'abc'))
216
- .case({ a: 1 }, 1)
217
- .case({ a: [] }, [])
218
- .case({ a: {} }, {})
219
- .case({ b: 1 }, 'abc'),
220
-
221
- Test(
222
- 'get default getter',
223
- get('a', () => 'abc'))
224
- .case({ a: 1 }, 1)
225
- .case({ a: [] }, [])
226
- .case({ a: {} }, {})
227
- .case({ b: 1 }, 'abc'),
228
- ])
229
-
230
- TestsMap.set('set', set => [
231
- Test('set', set('a', 1))
232
- .case(null, null)
233
- .case(undefined, undefined)
234
- .case({}, { a: 1 })
235
- .case({ a: 1 }, { a: 1 })
236
- .case({ b: 2 }, { a: 1, b: 2 }),
237
-
238
- Test('set - nested', set('a.b', 1))
239
- .case(null, null)
240
- .case(undefined, undefined)
241
- .case({}, { a: { b: 1 } })
242
- .case({ a: 1 }, { a: { b: 1 } })
243
- .case({ b: 2 }, { a: { b: 1 }, b: 2 }),
244
-
245
- Test('set - resolver', async function () {
246
- { // sync
247
- const myObj = { a: 1 }
248
- const myNewObj = set('b', obj => obj.a + 2)(myObj)
249
- assert.deepEqual(myNewObj, { a: 1, b: 3 })
250
- }
251
-
252
- { // async
253
- const myObj = { a: 1 }
254
- const myNewObj = await set('b', async obj => obj.a + 2)(myObj)
255
- assert.deepEqual(myNewObj, { a: 1, b: 3 })
256
- }
257
- }).case()
258
- ])
259
-
260
- TestsMap.set('pick', pick => [
261
- Test('pick', pick(['a', 'b']))
262
- .case({ a: 1 }, { a: 1 })
263
- .case({ a: 1, b: 2 }, { a: 1, b: 2 })
264
- .case({ a: 1, b: 2, c: 3 }, { a: 1, b: 2 })
265
- .case({}, {})
266
- .case([], {}),
267
-
268
- Test('pick - nested', pick(['a.b', 'a.c']))
269
- .case(null, null)
270
- .case(undefined, undefined)
271
- .case({ a: { b: 1 }, c: 3 }, { a: { b: 1 } })
272
- .case({ a: { b: 1, c: 3 }, c: 3 }, { a: { b: 1, c: 3 } })
273
- .case({ a: { c: 3 }, c: 3 }, { a: { c: 3 } })
274
- .case({}, {})
275
- .case([], {}),
276
-
277
- Test('pick - eager', async function () {
278
- const abc = { a: 1, b: 2, c: 3 }
279
- assert.deepEqual(pick(abc, ['a']), { a: 1 })
280
- assert.deepEqual(pick(abc, ['a', 'd']), { a: 1 })
281
- assert.deepEqual(pick(abc, ['d']), {})
282
- }).case()
283
- ])
284
-
285
- TestsMap.set('omit', omit => [
286
- Test(
287
- 'omit',
288
- omit(['c']))
289
- .case({ a: 1 }, { a: 1 })
290
- .case({ a: 1, b: 2 }, { a: 1, b: 2 })
291
- .case({ a: 1, b: 2, c: 3 }, { a: 1, b: 2 })
292
- .case(null, null)
293
- .case({}, {})
294
- .case([], []),
295
-
296
- Test(
297
- 'omit nested',
298
- omit(['a.b.c.e[0]']))
299
- .case({
300
- a: {
301
- b: {
302
- c: {
303
- d: 1,
304
- e: [2, 3],
305
- },
306
- }
307
- },
308
- }, {
309
- a: {
310
- b: {
311
- c: {
312
- d: 1,
313
- e: [, 3],
314
- },
315
- }
316
- },
317
- })
318
- .case(null, null)
319
- .case({}, {})
320
- .case([], []),
321
-
322
- Test('omit - eager', async function () {
323
- const abc = { a: 1, b: 2, c: 3 }
324
- const nested = [[[[[1]]]]]
325
- assert.deepEqual(omit(nested, []), nested)
326
- assert.deepEqual(omit([1, 2, 3], []), [1, 2, 3])
327
- assert.deepEqual(omit(abc, ['a']), { b: 2, c: 3 })
328
- assert.deepEqual(omit(abc, ['a', 'd']), { b: 2, c: 3 })
329
- assert.deepEqual(omit(abc, ['d']), { a: 1, b: 2, c: 3 })
330
- }).case()
331
- ])
332
-
333
- TestsMap.set('switchCase', switchCase => [
334
- Test('switchCase values', switchCase)
335
- .case([false, 1, 2], 2)
336
- .case([true, 1, 2], 1)
337
- .case([false, 1], undefined)
338
- .case([true, 1], 1)
339
- .case([false, Promise.resolve(1), 2], 2)
340
- .case([true, 1, Promise.resolve(2)], 1)
341
- .case([Promise.resolve(false), 1], undefined)
342
- .case([Promise.resolve(true), 1], 1),
343
-
344
- Test(
345
- 'switchCase functions and values',
346
- switchCase([
347
- number => number == 1, 'one',
348
- number => number == 2, () => 'two',
349
- 'something',
350
- ]))
351
- .case(1, 'one')
352
- .case(2, 'two')
353
- .case(3, 'something'),
354
-
355
- Test(
356
- 'switchCase sync functions',
357
- switchCase([
358
- number => number == 1, () => 'one',
359
- number => number == 2, () => 'two',
360
- () => 'something',
361
- ]))
362
- .case(1, 'one')
363
- .case(2, 'two')
364
- .case(3, 'something'),
365
-
366
- Test(
367
- 'switchCase async',
368
- switchCase([
369
- async number => number == 1, async () => 'one',
370
- async number => number == 2, async () => 'two',
371
- async () => 'something',
372
- ]))
373
- .case(1, 'one')
374
- .case(2, 'two')
375
- .case(3, 'something'),
376
-
377
- Test(
378
- 'switchCase async variadic',
379
- switchCase([
380
- number => number == 1, async () => 'one',
381
- number => number == 2, async () => 'two',
382
- async () => 'something',
383
- ]))
384
- .case(1, 'one')
385
- .case(2, 'two')
386
- .case(3, 'something'),
387
- ])
388
-
389
- TestsMap.set('tryCatch', tryCatch => [
390
- Test(
391
- 'eager sync tryCatch',
392
- function testEagerTryCatch() {
393
- const add = (a, b) => a + b
394
-
395
- let sum = null
396
-
397
- tryCatch(1, 2, 3, function throwSum(...numbers) {
398
- const sum = numbers.reduce(add)
399
- throw new Error(`${sum}`)
400
- }, function logErrorMessage(error) {
401
- sum = Number(error.message)
402
- })
403
-
404
- assert.equal(sum, 6)
405
- },
406
- ).case(),
407
-
408
- Test(
409
- 'eager async tryCatch',
410
- async function testEagerTryCatch() {
411
- const add = (a, b) => a + b
412
-
413
- let sum = null
414
-
415
- await tryCatch(1, 2, 3, async function throwSum(...numbers) {
416
- const sum = numbers.reduce(add)
417
- throw new Error(`${sum}`)
418
- }, async function logErrorMessage(error) {
419
- sum = Number(error.message)
420
- })
421
-
422
- assert.equal(sum, 6)
423
- },
424
- ).case(),
425
-
426
- Test(
427
- 'sync tryCatch',
428
- function () {
429
- const errProp = (err, x) => { err.x = x; return err }
430
- const throwError = x => { throw new Error(x) }
431
- assert.strictEqual(tryCatch(x => x + 1, errProp)(1), 2)
432
- const e1 = tryCatch(throwError, errProp)(1)
433
- assert.ok(e1 instanceof Error)
434
- assert.strictEqual(e1.name, 'Error')
435
- assert.strictEqual(e1.message, '1')
436
- assert.strictEqual(e1.x, 1)
437
- },
438
- ).case(),
439
-
440
- Test(
441
- 'async tryer sync catcher tryCatch',
442
- async function () {
443
- const errProp = (err, x) => { err.x = x; return err }
444
- const asyncThrowError = async x => { throw new Error(x) }
445
- const reject = x => Promise.reject(new Error(x))
446
- assert.ok(tryCatch(async x => x + 1, errProp)(1) instanceof Promise)
447
- assert.strictEqual(await tryCatch(async x => x + 1, errProp)(1), 2)
448
- assert.ok(tryCatch(asyncThrowError, errProp)(1) instanceof Promise)
449
- const e1 = await tryCatch(asyncThrowError, errProp)(1)
450
- assert.ok(e1 instanceof Error)
451
- assert.strictEqual(e1.name, 'Error')
452
- assert.strictEqual(e1.message, '1')
453
- assert.strictEqual(e1.x, 1)
454
- assert.ok(tryCatch(reject, errProp)(1) instanceof Promise)
455
- const e2 = await tryCatch(reject, errProp)(1)
456
- assert.ok(e2 instanceof Error)
457
- assert.strictEqual(e2.name, 'Error')
458
- assert.strictEqual(e2.message, '1')
459
- assert.strictEqual(e2.x, 1)
460
- },
461
- ).case(),
462
-
463
- Test(
464
- 'sync tryer async catcher tryCatch',
465
- async function () {
466
- const asyncErrProp = async (err, x) => { err.x = x; return err }
467
- const throwError = x => { throw new Error(x) }
468
- assert.strictEqual(tryCatch(x => x + 1, asyncErrProp)(1), 2)
469
- assert.ok(tryCatch(throwError, asyncErrProp)(1) instanceof Promise)
470
- const e1 = await tryCatch(throwError, asyncErrProp)(1)
471
- assert.ok(e1 instanceof Error)
472
- assert.strictEqual(e1.name, 'Error')
473
- assert.strictEqual(e1.message, '1')
474
- assert.strictEqual(e1.x, 1)
475
- },
476
- ).case(),
477
-
478
- Test(
479
- 'async tryCatch',
480
- async function () {
481
- const asyncErrProp = async (err, x) => { err.x = x; return err }
482
- const asyncThrowError = async x => { throw new Error(x) }
483
- const reject = x => Promise.reject(new Error(x))
484
- assert.ok(tryCatch(async x => x + 1, asyncErrProp)(1) instanceof Promise)
485
- assert.strictEqual(await tryCatch(async x => x + 1, asyncErrProp)(1), 2)
486
- assert.ok(tryCatch(asyncThrowError, asyncErrProp)(1) instanceof Promise)
487
- const e1 = await tryCatch(asyncThrowError, asyncErrProp)(1)
488
- assert.ok(e1 instanceof Error)
489
- assert.strictEqual(e1.name, 'Error')
490
- assert.strictEqual(e1.message, '1')
491
- assert.strictEqual(e1.x, 1)
492
- assert.ok(tryCatch(reject, asyncErrProp)(1) instanceof Promise)
493
- const e2 = await tryCatch(reject, asyncErrProp)(1)
494
- assert.ok(e2 instanceof Error)
495
- assert.strictEqual(e2.name, 'Error')
496
- assert.strictEqual(e2.message, '1')
497
- assert.strictEqual(e2.x, 1)
498
- },
499
- ).case(),
500
- ])
501
-
502
- TestsMap.set('map', map => [
503
- Test('eager map', function () {
504
- const myArray = [1, 2, 3]
505
- const mappedArray = map(myArray, number => number ** 2)
506
- assert.deepEqual(mappedArray, [1, 4, 9])
507
- }).case(),
508
-
509
- Test(
510
- 'map syncMapper',
511
- map(number => number ** 2))
512
- .case([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
513
- .case(new Set([1, 2, 3, 4, 5]), new Set([1, 4, 9, 16, 25]))
514
- .case({ a: 1, b: 2, c: 3 }, { a: 1, b: 4, c: 9 })
515
- .case(mapFromObject({ a: 1, b: 2, c: 3 }), mapFromObject({ a: 1, b: 4, c: 9 }))
516
- .case({ map: mapper => mapper(3) }, 9)
517
- .case(3, 9)
518
- .case((a, b) => a + b, squaredAdd => {
519
- assert.strictEqual([1, 2, 3, 4, 5].reduce(squaredAdd, 0), 55)
520
- })
521
- .case(function* range(from, to) {
522
- for (let i = from; i < to; i++) {
523
- yield i
524
- }
525
- }, squaredRange => {
526
- assert.deepEqual([...squaredRange(1, 6)], [1, 4, 9, 16, 25])
527
- })
528
- .case((function* range(from, to) {
529
- for (let i = from; i < to; i++) {
530
- yield i
531
- }
532
- })(1, 6), numbersGenerator => {
533
- assert.deepEqual([...numbersGenerator], [1, 4, 9, 16, 25])
534
- })
535
- .case(async function* asyncRange(from, to) {
536
- for (let i = from; i < to; i++) {
537
- yield i
538
- }
539
- }, async squaredRange => {
540
- const array = []
541
- for await (const number of squaredRange(1, 6)) {
542
- array.push(number)
543
- }
544
- assert.deepEqual(array, [1, 4, 9, 16, 25])
545
- })
546
- .case((async function* asyncRange(from, to) {
547
- for (let i = from; i < to; i++) {
548
- yield i
549
- }
550
- })(1, 6), async asyncNumbersGenerator => {
551
- const array = []
552
- for await (const number of asyncNumbersGenerator) {
553
- array.push(number)
554
- }
555
- assert.deepEqual(array, [1, 4, 9, 16, 25])
556
- }),
557
-
558
- Test(
559
- 'map asyncMapper',
560
- map(async number => number ** 2))
561
- .case([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
562
- .case(new Set([1, 2, 3, 4, 5]), new Set([1, 4, 9, 16, 25]))
563
- .case(mapFromObject({ a: 1, b: 2, c: 3 }), mapFromObject({ a: 1, b: 4, c: 9 }))
564
- .case({ map: mapper => mapper(3) }, 9)
565
- .case(3, 9)
566
- .case(function* range(from, to) {
567
- for (let i = from; i < to; i++) {
568
- yield i
569
- }
570
- }, squaredRange => {
571
- assert.deepEqual([...squaredRange(1, 6)], [1, 4, 9, 16, 25].map(number => Promise.resolve(number)))
572
- })
573
- .case(async function* asyncRange(from, to) {
574
- for (let i = from; i < to; i++) {
575
- yield i
576
- }
577
- }, async squaredRange => {
578
- const array = []
579
- for await (const number of squaredRange(1, 6)) {
580
- array.push(number)
581
- }
582
- assert.deepEqual(array, [1, 4, 9, 16, 25])
583
- })
584
- .case((async function* asyncRange(from, to) {
585
- for (let i = from; i < to; i++) {
586
- yield i
587
- }
588
- })(1, 6), async asyncNumbersGenerator => {
589
- const array = []
590
- for await (const number of asyncNumbersGenerator) {
591
- array.push(number)
592
- }
593
- assert.deepEqual(array, [1, 4, 9, 16, 25])
594
- }),
595
- ])
596
-
597
- TestsMap.set('map.entries', mapEntries => [
598
- Test('map.entries', mapEntries)
599
- .case(([key, value]) => [key, value], mappingEntries => {
600
- assert.deepEqual(mappingEntries({ a: 1, b: 2, c: 3 }), { a: 1, b: 2, c: 3 })
601
- assert.deepEqual(mappingEntries(mapFrom({ a: 1, b: 2, c: 3 })), mapFrom({ a: 1, b: 2, c: 3 }))
602
- assert.throws(() => mappingEntries([]), new TypeError('value is not an Object or Map'))
603
- assert.throws(() => mappingEntries(null), new TypeError('value is not an Object or Map'))
604
- assert.throws(() => mappingEntries(), new TypeError('value is not an Object or Map'))
605
- })
606
- .case(async ([key, value]) => [key, value], async mappingEntries => {
607
- assert.deepEqual(await mappingEntries({ a: 1, b: 2, c: 3 }), { a: 1, b: 2, c: 3 })
608
- assert.deepEqual(await mappingEntries(mapFrom({ a: 1, b: 2, c: 3 })), mapFrom({ a: 1, b: 2, c: 3 }))
609
- assert.throws(() => mappingEntries([]), new TypeError('value is not an Object or Map'))
610
- assert.throws(() => mappingEntries(null), new TypeError('value is not an Object or Map'))
611
- assert.throws(() => mappingEntries(), new TypeError('value is not an Object or Map'))
612
- })
613
- .case(([key, value]) => value % 2 == 1 ? Promise.resolve([key, value]) : [key, value], async mappingEntries => {
614
- assert.deepEqual(await mappingEntries({ a: 1, b: 2, c: 3 }), { a: 1, b: 2, c: 3 })
615
- assert.deepEqual(await mappingEntries(mapFrom({ a: 1, b: 2, c: 3 })), mapFrom({ a: 1, b: 2, c: 3 }))
616
- assert.throws(() => mappingEntries([]), new TypeError('value is not an Object or Map'))
617
- assert.throws(() => mappingEntries(null), new TypeError('value is not an Object or Map'))
618
- assert.throws(() => mappingEntries(), new TypeError('value is not an Object or Map'))
619
- }),
620
- ])
621
-
622
- TestsMap.set('map.series', mapSeries => [
623
- Test(
624
- 'map.series',
625
- mapSeries(number => number ** 2),
626
- mapSeries(async number => number ** 2))
627
- .case([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
628
- .throws(new Set(), TypeError('[object Set] is not an Array'))
629
- .throws(null, TypeError('null is not an Array'))
630
- ])
631
-
632
- TestsMap.set('map.pool', function (mapPool) {
633
- const sleep = ms => new Promise(resolve => { setTimeout(resolve, ms) })
634
- let i = 0,
635
- maxi = 0,
636
- period = 10
637
- const plusSleepMinus = n => (async () => {
638
- i += 1
639
- maxi = Math.max(maxi, i)
640
- })().then(() => sleep(period)).then(() => {
641
- i -= 1
642
- return n
643
- })
644
-
645
- return [
646
- Test(
647
- 'map.pool poolSize 2',
648
- mapPool(2, plusSleepMinus))
649
- .case([1, 2, 3, 4, 5, 6], result => {
650
- assert.deepEqual(result, [1, 2, 3, 4, 5, 6])
651
- assert.strictEqual(maxi, 2)
652
- assert.strictEqual(i, 0)
653
- maxi = 0
654
- }),
655
-
656
- Test(
657
- 'map.pool poolSize 3',
658
- mapPool(3, plusSleepMinus))
659
- .case([1, 2, 3, 4, 5, 6], result => {
660
- assert.deepEqual(result, [1, 2, 3, 4, 5, 6])
661
- assert.strictEqual(maxi, 3)
662
- assert.strictEqual(i, 0)
663
- maxi = 0
664
- }),
665
-
666
- Test(
667
- 'map.pool square',
668
- mapPool(5, number => number ** 2))
669
- .case([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
670
- .throws(1, TypeError('1 is not an Array')),
671
- ]
672
- })
673
-
674
- TestsMap.set('map.withIndex', mapWithIndex => [
675
- Test(
676
- 'map.withIndex',
677
- mapWithIndex((item, index, array) => [item, index, array]))
678
- .case([1, 2, 3], [[1, 0, [1, 2, 3]], [2, 1, [1, 2, 3]], [3, 2, [1, 2, 3]]]),
679
- ])
680
-
681
- TestsMap.set('filter', filter => [
682
- Test('eager filter', async function () {
683
- const numbers = [1, 2, 3]
684
- const odds = filter(numbers, number => number % 2 == 1)
685
- assert.deepEqual(odds, [1, 3])
686
- }).case(),
687
-
688
- Test(
689
- 'filter syncPredicate',
690
- filter(number => number % 2 == 1))
691
- .case([1, 2, 3, 4, 5], [1, 3, 5])
692
- .case(new Set([1, 2, 3, 4, 5]), new Set([1, 3, 5]))
693
- .case({ a: 1, b: 2, c: 3 }, { a: 1, c: 3 })
694
- .case(mapFromObject({ a: 1, b: 2, c: 3 }), mapFromObject({ a: 1, c: 3 }))
695
- .case({ filter: predicate => predicate(3) }, true)
696
- .case(3, 3)
697
- .case((a, b) => a + b, oddsAdd => {
698
- assert.strictEqual([1, 2, 3, 4, 5].reduce(oddsAdd, 0), 9)
699
- })
700
- .case(function* range(from, to) {
701
- for (let i = from; i < to; i++) {
702
- yield i
703
- }
704
- }, oddRange => {
705
- assert.deepEqual([...oddRange(1, 6)], [1, 3, 5])
706
- })
707
- .case((function* range(from, to) {
708
- for (let i = from; i < to; i++) {
709
- yield i
710
- }
711
- })(1, 6), numbersGenerator => {
712
- assert.deepEqual([...numbersGenerator], [1, 3, 5])
713
- })
714
- .case(async function* asyncRange(from, to) {
715
- for (let i = from; i < to; i++) {
716
- yield i
717
- }
718
- }, async oddRange => {
719
- const array = []
720
- for await (const number of oddRange(1, 6)) {
721
- array.push(number)
722
- }
723
- assert.deepEqual(array, [1, 3, 5])
724
- })
725
- .case((async function* asyncRange(from, to) {
726
- for (let i = from; i < to; i++) {
727
- yield i
728
- }
729
- })(1, 6), async asyncNumbersGenerator => {
730
- const array = []
731
- for await (const number of asyncNumbersGenerator) {
732
- array.push(number)
733
- }
734
- assert.deepEqual(array, [1, 3, 5])
735
- }),
736
-
737
- Test(
738
- 'filter asyncPredicate',
739
- filter(async number => number % 2 == 1))
740
- .case([1, 2, 3, 4, 5], [1, 3, 5])
741
- .case(new Set([1, 2, 3, 4, 5]), new Set([1, 3, 5]))
742
- .case({ a: 1, b: 2, c: 3 }, { a: 1, c: 3 })
743
- .case(mapFromObject({ a: 1, b: 2, c: 3 }), mapFromObject({ a: 1, c: 3 }))
744
- .case({ filter: predicate => predicate(3) }, true)
745
- .case(3, 3)
746
- .case((a, b) => a + b, async oddsAdd => {
747
- assert.strictEqual(await reduce(oddsAdd, 0)([1, 2, 3, 4, 5]), 9)
748
- })
749
- .case(function* range(from, to) {
750
- for (let i = from; i < to; i++) {
751
- yield i
752
- }
753
- }, oddRange => {
754
- assert.deepEqual([...oddRange(1, 6)], [1, 2, 3, 4, 5]) // invalid filter because promises
755
- })
756
- .case((function* range(from, to) {
757
- for (let i = from; i < to; i++) {
758
- yield i
759
- }
760
- })(1, 6), numbersGenerator => {
761
- assert.deepEqual([...numbersGenerator], [1, 2, 3, 4, 5]) // invalid filter because promises
762
- })
763
- .case(async function* asyncRange(from, to) {
764
- for (let i = from; i < to; i++) {
765
- yield i
766
- }
767
- }, async oddRange => {
768
- const array = []
769
- for await (const number of oddRange(1, 6)) {
770
- array.push(number)
771
- }
772
- assert.deepEqual(array, [1, 3, 5])
773
- })
774
- .case((async function* asyncRange(from, to) {
775
- for (let i = from; i < to; i++) {
776
- yield i
777
- }
778
- })(1, 6), async asyncNumbersGenerator => {
779
- const array = []
780
- for await (const number of asyncNumbersGenerator) {
781
- array.push(number)
782
- }
783
- assert.deepEqual(array, [1, 3, 5])
784
- }),
785
- ])
786
-
787
- TestsMap.set('filter.withIndex', filterWithIndex => [
788
- Test(
789
- 'filter.withIndex',
790
- filterWithIndex(
791
- (item, index, array) => item !== array[index + 1]))
792
- .case([1, 1, 2, 2, 3, 3], [1, 2, 3])
793
- .case([1, 2, 3], [1, 2, 3])
794
-
795
- ])
796
-
797
- TestsMap.set('reduce', reduce => [
798
- Test('eager reduce', async function () {
799
- const numbers = [1, 2, 3, 4, 5]
800
- const sum = reduce(numbers, (a, b) => a + b)
801
- assert.equal(sum, 15)
802
- }).case(),
803
-
804
- Test(
805
- 'reduce sync init 0',
806
- reduce(function add(a, b) { return a + b }, 0))
807
- .case([1, 2, 3, 4, 5], 15)
808
- .case(function* range(from, to) {
809
- for (let i = from; i < to; i++) {
810
- yield i
811
- }
812
- }, addingRange => {
813
- assert.strictEqual(addingRange(1, 6), 15)
814
- })
815
- .case(async function* asyncRange(from, to) {
816
- for (let i = from; i < to; i++) {
817
- yield i
818
- }
819
- }, async asyncAddingRange => {
820
- assert.strictEqual(await asyncAddingRange(1, 6), 15)
821
- })
822
- .case(function add(a, b) { return a + b }, doubleAdd => {
823
- assert.strictEqual(doubleAdd([1, 2, 3, 4, 5]), 30)
824
- })
825
- .case((function* range(from, to) {
826
- for (let i = from; i < to; i++) {
827
- yield i
828
- }
829
- })(1, 6), 15)
830
- .case((async function* asyncRange(from, to) {
831
- for (let i = from; i < to; i++) {
832
- yield i
833
- }
834
- })(1, 6), 15)
835
- .case({ reduce: reducer => reducer(1, 2) }, 3)
836
- .case({ chain: flatMapper => flatMapper(1) }, 1)
837
- .case({ flatMap: flatMapper => flatMapper(1) }, 1)
838
- .case({ a: 1, b: 2, c: 3, d: 4, e: 5 }, 15)
839
- .case(new Map([[1, 1], [3, 3], [5, 5]]), 9)
840
- .case(1, 1),
841
-
842
- Test(
843
- 'reduce async init 0',
844
- reduce(async function asyncAdd (a, b) { return a + b }, 0))
845
- .case([1, 2, 3, 4, 5], 15)
846
- .case(function* range(from, to) {
847
- for (let i = from; i < to; i++) {
848
- yield i
849
- }
850
- }, async addingRange => {
851
- assert.strictEqual(await addingRange(1, 6), 15)
852
- })
853
- .case(async function* asyncRange(from, to) {
854
- for (let i = from; i < to; i++) {
855
- yield i
856
- }
857
- }, async asyncAddingRange => {
858
- assert.strictEqual(await asyncAddingRange(1, 6), 15)
859
- })
860
- .case(function add(a, b) { return a + b }, async doubleAdd => {
861
- assert.strictEqual(await doubleAdd([1, 2, 3, 4, 5]), 30)
862
- })
863
- .case((function* range(from, to) {
864
- for (let i = from; i < to; i++) {
865
- yield i
866
- }
867
- })(1, 6), 15)
868
- .case((async function* asyncRange(from, to) {
869
- for (let i = from; i < to; i++) {
870
- yield i
871
- }
872
- })(1, 6), 15)
873
- .case({ reduce: reducer => reducer(1, 2) }, 3)
874
- .case({ chain: flatMapper => flatMapper(1) }, 1)
875
- .case({ flatMap: flatMapper => flatMapper(1) }, 1)
876
- .case({ a: 1, b: 2, c: 3, d: 4, e: 5 }, 15)
877
- .case(new Map([[1, 1], [3, 3], [5, 5]]), 9)
878
- .case(1, 1),
879
-
880
- Test(
881
- 'reduce sync init unary',
882
- reduce(function add(a, b) { return a + b }))
883
- .case([1, 2, 3, 4, 5], 15)
884
- .case(function* range(from, to) {
885
- for (let i = from; i < to; i++) {
886
- yield i
887
- }
888
- }, addingRange => {
889
- assert.strictEqual(addingRange(1, 6), 15)
890
- })
891
- .case(async function* asyncRange(from, to) {
892
- for (let i = from; i < to; i++) {
893
- yield i
894
- }
895
- }, async asyncAddingRange => {
896
- assert.strictEqual(await asyncAddingRange(1, 6), 15)
897
- })
898
- .case(function add(a, b) { return a + b }, doubleAdd => {
899
- assert.strictEqual(doubleAdd([1, 2, 3, 4, 5]), 29) // doubling effect skips 1 since 1 starts out as the result
900
- })
901
- .case((function* range(from, to) {
902
- for (let i = from; i < to; i++) {
903
- yield i
904
- }
905
- })(1, 6), 15)
906
- .case((async function* asyncRange(from, to) {
907
- for (let i = from; i < to; i++) {
908
- yield i
909
- }
910
- })(1, 6), 15)
911
- .case({ reduce: reducer => reducer(1, 2) }, 3)
912
- .case({ chain: flatMapper => flatMapper(1) }, result => assert(isNaN(result)))
913
- .case({ flatMap: flatMapper => flatMapper(1) }, result => assert(isNaN(result)))
914
- .case({ a: 1, b: 2, c: 3, d: 4, e: 5 }, 15)
915
- .case(new Map([[1, 1], [3, 3], [5, 5]]), 9)
916
- .case(1, result => assert(isNaN(result))),
917
-
918
- Test(
919
- 'reduce sync init undefined',
920
- reduce(function add(a, b) { return a + b }, undefined))
921
- .case([1, 2, 3, 4, 5], 15)
922
- .case(function* range(from, to) {
923
- for (let i = from; i < to; i++) {
924
- yield i
925
- }
926
- }, addingRange => {
927
- assert.strictEqual(addingRange(1, 6), 15)
928
- })
929
- .case(async function* asyncRange(from, to) {
930
- for (let i = from; i < to; i++) {
931
- yield i
932
- }
933
- }, async asyncAddingRange => {
934
- assert.strictEqual(await asyncAddingRange(1, 6), 15)
935
- })
936
- .case(function add(a, b) { return a + b }, doubleAdd => {
937
- assert.strictEqual(doubleAdd([1, 2, 3, 4, 5]), 29) // doubling effect skips 1 since 1 starts out as the result
938
- })
939
- .case((function* range(from, to) {
940
- for (let i = from; i < to; i++) {
941
- yield i
942
- }
943
- })(1, 6), 15)
944
- .case((async function* asyncRange(from, to) {
945
- for (let i = from; i < to; i++) {
946
- yield i
947
- }
948
- })(1, 6), 15)
949
- .case({ reduce: reducer => reducer(1, 2) }, 3)
950
- .case({ chain: flatMapper => flatMapper(1) }, result => assert(isNaN(result)))
951
- .case({ flatMap: flatMapper => flatMapper(1) }, result => assert(isNaN(result)))
952
- .case({ a: 1, b: 2, c: 3, d: 4, e: 5 }, 15)
953
- .case(new Map([[1, 1], [3, 3], [5, 5]]), 9)
954
- .case(1, result => assert(isNaN(result))),
955
- ])
956
-
957
- TestsMap.set('transform', transform => [
958
- Test(
959
- 'transform Array',
960
- transform(map(number => number ** 2), []))
961
- .case([1, 2, 3, 4, 5], [1, 4, 9, 16, 25]),
962
-
963
- Test(
964
- 'transform ()=>Array',
965
- transform(map(number => number ** 2), () => []))
966
- .case([1, 2, 3, 4, 5], [1, 4, 9, 16, 25]),
967
-
968
- Test(
969
- 'transform Set',
970
- transform(map(number => number ** 2), new Set()))
971
- .case([1, 2, 3, 4, 5], new Set([1, 4, 9, 16, 25])),
972
-
973
- Test(
974
- 'transform Object',
975
- transform(map(number => ({ [number.toString()]: number ** 2 })), {}))
976
- .case([1, 2, 3, 4, 5], { 1: 1, 2: 4, 3: 9, 4: 16, 5: 25 }),
977
-
978
- Test(
979
- 'transform Uint8Array',
980
- transform(map(number => number ** 2), new Uint8Array()))
981
- .case([1, 2, 3, 4, 5], new Uint8Array([1, 4, 9, 16, 25])),
982
-
983
- Test(
984
- 'transform null',
985
- transform(map(number => number ** 2), null))
986
- .case([1, 2, 3, 4, 5], null),
987
-
988
- Test(
989
- 'transform string',
990
- transform(map(value => `${value}${value}`), ''))
991
- .case([1, 2, 3, 4, 5], '1122334455'),
992
-
993
- Test(
994
- 'transform explicitSemigroup',
995
- transform(map(value => `${value}${value}`), { concat() { return this } }))
996
- .case([1, 2, 3, 4, 5], semigroup => assert(typeof semigroup.concat == 'function')),
997
-
998
- Test(
999
- 'transform writable',
1000
- transform(map(value => `${value}${value}`), { write() { return this } }))
1001
- .case([1, 2, 3, 4, 5], writable => assert(typeof writable.write == 'function')),
1002
-
1003
- Test(
1004
- 'transform 0',
1005
- transform(map(value => `${value}${value}`), 0))
1006
- .case([1, 2, 3, 4, 5], 0),
1007
- ])
1008
-
1009
- TestsMap.set('flatMap', flatMap => [
1010
- Test(
1011
- 'flatMap duplicate',
1012
- flatMap(value => [value, value]))
1013
- .case([1, 2, 3, 4, 5], [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
1014
- .case(new Uint8Array([1, 2, 3, 4, 5]), new Uint8Array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5]))
1015
- .case(function* range(from, to) {
1016
- for (let i = from; i < to; i++) {
1017
- yield i
1018
- }
1019
- }, duplicateRangeGeneratorFunc => {
1020
- assert.deepEqual([...duplicateRangeGeneratorFunc(1, 6)], [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
1021
- })
1022
- .case(async function* asyncRange(from, to) {
1023
- for (let i = from; i < to; i++) {
1024
- yield i
1025
- }
1026
- }, async duplicateAsyncRangeGeneratorFunc => {
1027
- const array = []
1028
- for await (const number of duplicateAsyncRangeGeneratorFunc(1, 6)) {
1029
- array.push(number)
1030
- }
1031
- assert.deepEqual(array, [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
1032
- })
1033
- .case(function add(a, b) { return a + b }, doubleAddReducer => {
1034
- assert.strictEqual([1, 2, 3, 4, 5].reduce(doubleAddReducer, 0), 30)
1035
- })
1036
- .case((function* range(from, to) {
1037
- for (let i = from; i < to; i++) {
1038
- yield i
1039
- }
1040
- })(1, 6), numbersGenerator => {
1041
- assert.deepEqual([...numbersGenerator], [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
1042
- })
1043
- .case((async function* asyncRange(from, to) {
1044
- for (let i = from; i < to; i++) {
1045
- yield i
1046
- }
1047
- })(1, 6), async asyncNumbersGenerator => {
1048
- const array = []
1049
- for await (const number of asyncNumbersGenerator) {
1050
- array.push(number)
1051
- }
1052
- assert.deepEqual(array, [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
1053
- })
1054
- .case({ chain: flatMapper => flatMapper(3) }, [3, 3])
1055
- .case({ flatMap: flatMapper => flatMapper(3) }, [3, 3])
1056
- .case({
1057
- [Symbol.asyncIterator]() {
1058
- return (async function* () {
1059
- yield 1; yield 2; yield 3; yield 4; yield 5
1060
- })()
1061
- },
1062
- values: [],
1063
- write(value) {
1064
- this.values.push(value)
1065
- },
1066
- }, mockStream => {
1067
- assert.deepEqual(mockStream.values, [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
1068
- }),
1069
-
1070
- Test(
1071
- 'flatMap asyncDuplicate',
1072
- flatMap(async value => [value, value]))
1073
- .case([1, 2, 3, 4, 5], [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
1074
- .case(new Uint8Array([1, 2, 3, 4, 5]), new Uint8Array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5]))
1075
- .case(function* range(from, to) {
1076
- for (let i = from; i < to; i++) {
1077
- yield i
1078
- }
1079
- }, async duplicateRangeGeneratorFunc => {
1080
- assert.deepEqual(await Promise.all([...duplicateRangeGeneratorFunc(1, 6)]), [1, 2, 3, 4, 5].map(value => [value, value]))
1081
- })
1082
- .case(async function* asyncRange(from, to) {
1083
- for (let i = from; i < to; i++) {
1084
- yield i
1085
- }
1086
- }, async duplicateAsyncRangeGeneratorFunc => {
1087
- const array = []
1088
- for await (const number of duplicateAsyncRangeGeneratorFunc(1, 6)) {
1089
- array.push(number)
1090
- }
1091
- assert.deepEqual(array, [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
1092
- })
1093
- .case(function add(a, b) { return a + b }, async doubleAddReducer => {
1094
- assert.strictEqual(await reduce(doubleAddReducer, 0)([1, 2, 3, 4, 5]), 30)
1095
- })
1096
- .case((function* range(from, to) {
1097
- for (let i = from; i < to; i++) {
1098
- yield i
2
+ const findAllFilePaths = require('./_internal/findAllFilePaths')
3
+
4
+ const distTest = async function main() {
5
+ const filePaths = await findAllFilePaths(`${__dirname}/dist`)
6
+ filePaths.push(`${__dirname}/index.js`)
7
+ filePaths.push(`${__dirname}/es.js`)
8
+
9
+ for (const path of filePaths) {
10
+ if (
11
+ path.includes('.es')
12
+ || path.endsWith('.mjs')
13
+ || path.includes('es.js')
14
+ ) {
15
+ // TODO
16
+ }
17
+ else {
18
+ console.log('Testing', path)
19
+ const required = require(path)
20
+
21
+ if (
22
+ path.includes('rubico.js')
23
+ || path.includes('rubico.min.js')
24
+ || path.includes('index.js')
25
+ ) {
26
+ assert.equal(Object.keys(required).length, 31)
27
+ } else if (
28
+ path.includes('Transducer.js')
29
+ || path.includes('Transducer.min.js')
30
+ ) {
31
+ assert.equal(Object.keys(required).length, 5)
1099
32
  }
1100
- })(1, 6), async numbersGenerator => {
1101
- assert.deepEqual(await Promise.all([...numbersGenerator]), [1, 2, 3, 4, 5].map(value => [value, value]))
1102
- })
1103
- .case((async function* asyncRange(from, to) {
1104
- for (let i = from; i < to; i++) {
1105
- yield i
1106
- }
1107
- })(1, 6), async asyncNumbersGenerator => {
1108
- const array = []
1109
- for await (const number of asyncNumbersGenerator) {
1110
- array.push(number)
1111
- }
1112
- assert.deepEqual(array, [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
1113
- })
1114
- .case({ chain: flatMapper => flatMapper(3) }, [3, 3])
1115
- .case({ flatMap: flatMapper => flatMapper(3) }, [3, 3])
1116
- .case({
1117
- [Symbol.asyncIterator]() {
1118
- return (async function* () {
1119
- yield 1; yield 2; yield 3; yield 4; yield 5
1120
- })()
1121
- },
1122
- values: [],
1123
- write(value) {
1124
- this.values.push(value)
1125
- },
1126
- }, mockStream => {
1127
- assert.deepEqual(mockStream.values, [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
1128
- })
1129
- ])
1130
-
1131
- TestsMap.set('and', and => [
1132
- Test('and nonfunctions', and)
1133
- .case([true, true, true], true)
1134
- .case([true, true, false], false)
1135
- .case([false, false, false], false),
1136
-
1137
- Test(
1138
- 'and sync',
1139
- and([
1140
- number => number % 2 == 1,
1141
- number => number > 0,
1142
- true,
1143
- ]))
1144
- .case(1, true)
1145
- .case(2, false)
1146
- .case(-1, false),
1147
-
1148
- Test(
1149
- 'and async',
1150
- and([
1151
- async number => number % 2 == 1,
1152
- async number => number > 0,
1153
- true,
1154
- ]))
1155
- .case(1, true)
1156
- .case(2, false)
1157
- .case(-1, false),
1158
- ])
1159
-
1160
- TestsMap.set('or', or => [
1161
- Test('or nonfunctions', or)
1162
- .case([true, true, true], true)
1163
- .case([false, false, true], true)
1164
- .case([false, false, false], false),
1165
-
1166
- Test(
1167
- 'or sync',
1168
- or([
1169
- number => number % 2 == 1,
1170
- number => number > 0,
1171
- false,
1172
- ]))
1173
- .case(0, false)
1174
- .case(1, true)
1175
- .case(2, true),
1176
-
1177
- Test(
1178
- 'or async',
1179
- or([
1180
- async number => number % 2 == 1,
1181
- async number => number > 0,
1182
- false,
1183
- ]))
1184
- .case(0, false)
1185
- .case(1, true)
1186
- .case(2, true),
1187
- ])
1188
-
1189
- TestsMap.set('not', not => [
1190
- Test('not value', () => {
1191
- assert.strictEqual(not(true), false)
1192
- assert.strictEqual(not(false), true)
1193
- assert.strictEqual(not(null), true)
1194
- const myObj = { a: 1 }
1195
- assert.strictEqual(not('a' in myObj), false)
1196
- assert.strictEqual(not('b' in myObj), true)
1197
- }).case(),
1198
-
1199
- Test(
1200
- 'not sync function',
1201
- not(number => number == 1))
1202
- .case(0, true)
1203
- .case(1, false)
1204
- .case(2, true),
1205
-
1206
- Test(
1207
- 'not async function',
1208
- not(async number => number == 1))
1209
- .case(0, true)
1210
- .case(1, false)
1211
- .case(2, true),
1212
- ])
1213
-
1214
- TestsMap.set('any', any => [
1215
- Test(
1216
- 'any sync',
1217
- any(number => number == 1))
1218
- .case([1, 2, 3], true)
1219
- .case([4, 5, 6], false)
1220
- .case({ a: 1, b: 2, c: 3 }, true)
1221
- .case({ d: 4, e: 5, f: 6 }, false)
1222
- .case(null, false)
1223
- .case(new Set([1, 2, 3]), true)
1224
- .case(new Set([4, 5, 6]), false)
1225
- .case((function* yield123() {
1226
- yield 1; yield 2; yield 3
1227
- })(), true)
1228
- .case((async function* asyncYield123() {
1229
- yield 1; yield 2; yield 3
1230
- })(), true)
1231
- .case((function* yield123() {
1232
- yield 4; yield 5; yield 6
1233
- })(), false)
1234
- .case((async function* asyncYield123() {
1235
- yield 4; yield 5; yield 6
1236
- })(), false),
1237
-
1238
- Test(
1239
- 'any async',
1240
- any(number => number == 1))
1241
- .case([1, 2, 3], true)
1242
- .case([4, 5, 6], false)
1243
- .case({ a: 1, b: 2, c: 3 }, true)
1244
- .case({ d: 4, e: 5, f: 6 }, false)
1245
- .case(null, false)
1246
- .case(new Set([1, 2, 3]), true)
1247
- .case(new Set([4, 5, 6]), false)
1248
- .case((function* yield123() {
1249
- yield 1; yield 2; yield 3
1250
- })(), true)
1251
- .case((async function* asyncYield123() {
1252
- yield 1; yield 2; yield 3
1253
- })(), true)
1254
- .case((function* yield123() {
1255
- yield 4; yield 5; yield 6
1256
- })(), false)
1257
- .case({ a: 1, b: 2, c: 3 }, true)
1258
- .case({ d: 4, e: 5, f: 6 }, false)
1259
- .case((async function* asyncYield123() {
1260
- yield 4; yield 5; yield 6
1261
- })(), false),
1262
- ])
1263
-
1264
- TestsMap.set('all', all => [
1265
- Test(
1266
- 'all sync',
1267
- all(number => number == 1))
1268
- .case([1, 1, 1], true)
1269
- .case([1, 2, 3], false)
1270
- .case({ a: 1, b: 1, c: 1 }, true)
1271
- .case({ d: 1, e: 2, f: 3 }, false)
1272
- .case(null, false)
1273
- .case(new Set([1, 1, 1]), true)
1274
- .case(new Set([1, 2, 3]), false)
1275
- .case((function* yield123() {
1276
- yield 1; yield 1; yield 1
1277
- })(), true)
1278
- .case((async function* asyncYield123() {
1279
- yield 1; yield 1; yield 1
1280
- })(), true)
1281
- .case((function* yield123() {
1282
- yield 1; yield 2; yield 3
1283
- })(), false)
1284
- .case((async function* asyncYield123() {
1285
- yield 1; yield 2; yield 3
1286
- })(), false),
1287
-
1288
- Test(
1289
- 'all async',
1290
- all(async number => number == 1))
1291
- .case([1, 1, 1], true)
1292
- .case([1, 2, 3], false)
1293
- .case({ a: 1, b: 1, c: 1 }, true)
1294
- .case({ d: 1, e: 2, f: 3 }, false)
1295
- .case(null, false)
1296
- .case(new Set([1, 1, 1]), true)
1297
- .case(new Set([1, 2, 3]), false)
1298
- .case((function* yield123() {
1299
- yield 1; yield 1; yield 1
1300
- })(), true)
1301
- .case((async function* asyncYield123() {
1302
- yield 1; yield 1; yield 1
1303
- })(), true)
1304
- .case((function* yield123() {
1305
- yield 1; yield 2; yield 3
1306
- })(), false)
1307
- .case((async function* asyncYield123() {
1308
- yield 1; yield 2; yield 3
1309
- })(), false),
1310
- ])
1311
-
1312
- TestsMap.set('eq', eq => [
1313
- Test(
1314
- 'eq',
1315
- eq(1, value => value),
1316
- eq(1, async value => value),
1317
- eq(value => value, 1),
1318
- eq(async value => value, 1))
1319
- .case(1, true)
1320
- .case(0, false),
1321
- ])
1322
-
1323
- TestsMap.set('gt', gt => [
1324
- Test(
1325
- 'gt',
1326
- gt(1, value => value),
1327
- gt(1, async value => value),
1328
- gt(() => 1, value => value),
1329
- gt(() => 1, async value => value))
1330
- .case(0, true)
1331
- .case(1, false)
1332
- .case(2, false),
1333
- ])
1334
-
1335
- TestsMap.set('lt', lt => [
1336
- Test(
1337
- 'lt',
1338
- lt(1, value => value),
1339
- lt(1, async value => value),
1340
- lt(() => 1, value => value),
1341
- lt(() => 1, async value => value))
1342
- .case(2, true)
1343
- .case(1, false)
1344
- .case(0, false),
1345
- ])
1346
-
1347
- TestsMap.set('gte', gte => [
1348
- Test(
1349
- 'gte',
1350
- gte(1, value => value),
1351
- gte(1, async value => value),
1352
- gte(() => 1, value => value),
1353
- gte(() => 1, async value => value))
1354
- .case(0, true)
1355
- .case(1, true)
1356
- .case(2, false),
1357
- ])
1358
-
1359
- TestsMap.set('lte', lte => [
1360
- Test(
1361
- 'lte',
1362
- lte(1, value => value),
1363
- lte(1, async value => value),
1364
- lte(() => 1, value => value),
1365
- lte(() => 1, async value => value))
1366
- .case(2, true)
1367
- .case(1, true)
1368
- .case(0, false),
1369
- ])
1370
-
1371
- TestsMap.set('thunkify', thunkify => [
1372
- Test(
1373
- 'thunkify',
1374
- thunkify(value => value, 10))
1375
- .case(1, 10)
1376
- .case(null, 10)
1377
- .case(undefined, 10)
1378
- ])
1379
-
1380
- TestsMap.set('always', always => [
1381
- Test(
1382
- 'always',
1383
- always(10))
1384
- .case(1, 10)
1385
- .case(null, 10)
1386
- .case(undefined, 10)
1387
- ])
1388
-
1389
- TestsMap.set('curry', curry => [
1390
- Test(
1391
- 'curry',
1392
- curry(function add (a, b) { return a + b }, __, 1),
1393
- curry(function add (a, b) { return a + b }, 1, __))
1394
- .case(2, 3)
1395
- ])
1396
-
1397
-
1398
- TestsMap.set('curry.arity', curryArity => [
1399
- Test(
1400
- 'curry.arity',
1401
- curryArity(2, function add (a, b) { return a + b }, __, 1),
1402
- curryArity(2, function add (a, b) { return a + b }, 1, __))
1403
- .case(2, 3)
1404
- ])
1405
-
1406
- TestsMap.set('__', __ => [
1407
- Test('__', () => __)
1408
- .case(null, __ => {
1409
- assert.strictEqual(typeof __, 'symbol')
1410
- })
1411
- ])
1412
-
1413
- TestsMap.set('append', append => [
1414
- Test('append - string', append('ed'))
1415
- .case('head', 'headed')
1416
- .case('', 'ed')
1417
- .throws(1, new TypeError('1 is not an Array or string'))
1418
- .throws(null, new TypeError('null is not an Array or string'))
1419
- .throws(undefined, new TypeError('undefined is not an Array or string')),
1420
-
1421
- Test('append - array', append([5, 6, 7]))
1422
- .case([1, 2, 3], [1, 2, 3, 5, 6, 7])
1423
- .case([], [5, 6, 7]),
1424
- ])
1425
-
1426
- TestsMap.set('callProp', callProp => [
1427
- Test('callProp', callProp('toFixed', 2))
1428
- .case(5.992, '5.99')
1429
- .case(5.996, '6.00'),
1430
- ])
1431
-
1432
- TestsMap.set('defaultsDeep', defaultsDeep => [
1433
- Test(
1434
- 'defaultsDeep',
1435
- defaultsDeep({ a: 1, b: [1, 2, { c: 3 }] }))
1436
- .case({}, { a: 1, b: [1, 2, { c: 3 }] })
1437
- .case({ a: 2 }, { a: 2, b: [1, 2, { c: 3 }] })
1438
- .case({ a: 1, b: [] }, { a: 1, b: [1, 2, { c: 3 }] })
1439
- .case({ a: 1, e: 5 }, { a: 1, b: [1, 2, { c: 3 }], e: 5 })
1440
- .case({ a: 1, b: [1, 2] }, { a: 1, b: [1, 2, { c: 3 }] })
1441
- .case({ a: 1, b: [1, 2, {}] }, { a: 1, b: [1, 2, { c: 3 }] })
1442
- .case({ a: 1, b: [1, 2, { c: 2 }] }, { a: 1, b: [1, 2, { c: 2 }] })
1443
- .case({ a: 1, b: [1, 2, { c: 3 }] }, { a: 1, b: [1, 2, { c: 3 }] }),
1444
-
1445
- Test('defaultsDeep null', defaultsDeep(null))
1446
- .case({ a: 1 }, { a: 1 })
1447
- .case({}, {})
1448
- .case(1, 1)
1449
- .case([1, 2, 3], [1, 2, 3])
1450
- .case([], []),
1451
-
1452
- Test('defaultsDeep undefined', defaultsDeep(undefined))
1453
- .case({ a: 1 }, { a: 1 })
1454
- .case({}, {})
1455
- .case(1, 1)
1456
- .case([1, 2, 3], [1, 2, 3])
1457
- .case([], []),
1458
-
1459
- Test('defaultsDeep object item null', defaultsDeep({ a: null }))
1460
- .case({ a: 1 }, { a: 1 })
1461
- .case({ a: undefined }, { a: null }),
1462
-
1463
- Test('defaultsDeep array item null', defaultsDeep([null, 1, 2]))
1464
- .case([0], [0, 1, 2]),
1465
- ])
1466
-
1467
- TestsMap.set('differenceWith', differenceWith => [
1468
- Test(
1469
- 'differenceWith strictEqual',
1470
- differenceWith((a, b) => a === b, [1, 2, 3, 4, 5]))
1471
- .case([1, 2, 3, 4, 5], [])
1472
- .case([1], [2, 3, 4, 5])
1473
- .case([1, 2], [3, 4, 5])
1474
- .case([1, 2, 3], [4, 5])
1475
- .case([1, 2, 3, 4], [5])
1476
- .case([], [1, 2, 3, 4, 5])
1477
- .throws('', TypeError(' is not an Array'))
1478
- .throws(null, TypeError('null is not an Array')),
1479
-
1480
- Test(
1481
- 'differenceWith strictEqual',
1482
- differenceWith(async (a, b) => a === b, [1, 2, 3, 4, 5]))
1483
- .case([1, 2, 3, 4, 5], [])
1484
- .case([1], [2, 3, 4, 5])
1485
- .case([1, 2], [3, 4, 5])
1486
- .case([1, 2, 3], [4, 5])
1487
- .case([1, 2, 3, 4], [5])
1488
- .case([], [1, 2, 3, 4, 5])
1489
- .throws('', TypeError(' is not an Array'))
1490
- .throws(null, TypeError('null is not an Array')),
1491
-
1492
- Test(
1493
- 'differenceWith strictEqual variadicA',
1494
- differenceWith((a, b) => a === b ? Promise.resolve(true) : false, [1, 2, 3, 4, 5]))
1495
- .case([1, 2, 3, 4, 5], [])
1496
- .case([1], [2, 3, 4, 5])
1497
- .case([1, 2], [3, 4, 5])
1498
- .case([1, 2, 3], [4, 5])
1499
- .case([1, 2, 3, 4], [5])
1500
- .case([], [1, 2, 3, 4, 5])
1501
- .throws('', TypeError(' is not an Array'))
1502
- .throws(null, TypeError('null is not an Array'))
1503
- ])
1504
-
1505
- TestsMap.set('filterOut', filterOut => [
1506
- Test('rejects values that test true by the predicate', filterOut(number => number % 2 == 1))
1507
- .case([1, 2, 3, 4, 5], [2, 4])
1508
- .case([], [])
1509
- .case({ a: 1, b: 2, c: 3 }, { b: 2 })
1510
- .case(new Set([1, 2, 3, 4, 5]), new Set([2, 4]))
1511
- .case(new Map([['a', 1], ['b', 2], ['c', 3]]), new Map([['b', 2]]))
1512
- .case(function* (array) {
1513
- for (const value of array) {
1514
- yield value
1515
- }
1516
- }, oddsRejectingGeneratorFunc => {
1517
- const evensArray = []
1518
- for (const number of oddsRejectingGeneratorFunc([1, 2, 3, 4, 5])) {
1519
- evensArray.push(number)
1520
- }
1521
- assert.deepEqual(evensArray, [2, 4])
1522
- })
1523
- .case(async function* (array) {
1524
- for (const value of array) {
1525
- yield value
1526
- }
1527
- }, async oddsRejectingGeneratorFunc => {
1528
- const evensArray = []
1529
- for await (const number of oddsRejectingGeneratorFunc([1, 2, 3, 4, 5])) {
1530
- evensArray.push(number)
1531
- }
1532
- assert.deepEqual(evensArray, [2, 4])
1533
- })
1534
- ])
1535
-
1536
- TestsMap.set('find', find => [
1537
- Test(
1538
- 'find sync',
1539
- find(number => number == 1))
1540
- .case([1, 2, 3], 1)
1541
- .case([], undefined)
1542
- .case(new Set([1, 2, 3]), 1)
1543
- .case(new Set(), undefined)
1544
- .case((function* range(from, to) {
1545
- for (let i = from; i < to; i++) {
1546
- yield i
1547
- }
1548
- })(1, 6), 1)
1549
- .case((function* range(from, to) {
1550
- for (let i = from; i < to; i++) {
1551
- yield i
1552
- }
1553
- })(2, 5), undefined)
1554
- .case((async function* range(from, to) {
1555
- for (let i = from; i < to; i++) {
1556
- yield i
1557
- }
1558
- })(1, 6), 1)
1559
- .case((async function* range(from, to) {
1560
- for (let i = from; i < to; i++) {
1561
- yield i
1562
- }
1563
- })(2, 5), undefined)
1564
- .case({ find: () => 'hey' }, 'hey')
1565
- .case({ a: 1, b: 2, c: 3 }, 1)
1566
- .case({}, undefined),
1567
-
1568
- Test(
1569
- 'find async',
1570
- find(async number => number == 1))
1571
- .case([1, 2, 3], 1)
1572
- .case([], undefined)
1573
- .case(new Set([1, 2, 3]), 1)
1574
- .case(new Set(), undefined)
1575
- .case((function* range(from, to) {
1576
- for (let i = from; i < to; i++) {
1577
- yield i
1578
- }
1579
- })(1, 6), 1)
1580
- .case((function* range(from, to) {
1581
- for (let i = from; i < to; i++) {
1582
- yield i
1583
- }
1584
- })(2, 5), undefined)
1585
- .case((async function* range(from, to) {
1586
- for (let i = from; i < to; i++) {
1587
- yield i
1588
- }
1589
- })(1, 6), 1)
1590
- .case((async function* range(from, to) {
1591
- for (let i = from; i < to; i++) {
1592
- yield i
1593
- }
1594
- })(2, 5), undefined)
1595
- .case({ find: () => 'hey' }, 'hey')
1596
- .case({ a: 1, b: 2, c: 3 }, 1)
1597
- .case({}, undefined),
1598
- ])
1599
-
1600
- TestsMap.set('findIndex', function (findIndex) {
1601
- return [Test(async function () {
1602
- const startsWithAAA = string => string.startsWith('AAA')
1603
- {
1604
- const foundIndex = findIndex(startsWithAAA)([
1605
- 'BBB',
1606
- 'AAB',
1607
- 'AAA',
1608
- ])
1609
- assert.equal(foundIndex, 2)
1610
-
1611
- const notFoundIndex = findIndex(startsWithAAA)([
1612
- 'CCC',
1613
- 'CCD',
1614
- 'EEE',
1615
- ])
1616
- assert.equal(notFoundIndex, -1)
1617
- }
1618
-
1619
- const startsWithAAAAsync = async string => string.startsWith('AAA')
1620
- {
1621
- const foundIndex = await findIndex(startsWithAAAAsync)([
1622
- 'BBB',
1623
- 'AAB',
1624
- 'AAA',
1625
- ])
1626
- assert.equal(foundIndex, 2)
1627
-
1628
- const notFoundIndex = await findIndex(startsWithAAAAsync)([
1629
- 'CCC',
1630
- 'CCD',
1631
- 'EEE',
1632
- ])
1633
- assert.equal(notFoundIndex, -1)
1634
- }
1635
- }).case()]
1636
- })
1637
-
1638
- TestsMap.set('first', first => [
1639
- Test('first', first)
1640
- .case([1, 2, 3], 1)
1641
- .case('abc', 'a')
1642
- .case(null, undefined)
1643
- .case(undefined, undefined)
1644
- ])
1645
-
1646
- TestsMap.set('flatten', flatten => [
1647
- Test('flatten', flatten)
1648
- .case([[1], [2], [3]], [1, 2, 3])
1649
- .case([1, 2, 3], [1, 2, 3])
1650
- .case(null, null)
1651
- .case(new Set([[1], [2], [3]]), new Set([1, 2, 3]))
1652
- .case({ a: { a: 1 }, b: { b: 2 }, c: { c: 3 } }, { a: 1, b: 2, c: 3 }),
1653
- ])
1654
-
1655
- TestsMap.set('forEach', forEach => [
1656
- Test('forEach sync', forEach(function noop() {}))
1657
- .case([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
1658
- .case(function add(a, b) { return a + b }, add => {
1659
- assert.strictEqual([1, 2, 3, 4, 5].reduce(add, 0), 15)
1660
- }),
1661
-
1662
- Test('forEach async', forEach(function noop() {}))
1663
- .case([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
1664
- .case(async function add(a, b) { return a + b }, async asyncAdd => {
1665
- assert.strictEqual(await reduce(asyncAdd, 0)([1, 2, 3, 4, 5]), 15)
1666
- }),
1667
- ])
1668
-
1669
- TestsMap.set('groupBy', groupBy => [
1670
- Test('groupBy property', groupBy('age'))
1671
- .case(
1672
- [{ age: 21 }, { age: 22 }, { age: 21 }, { age: 23 }, { age: 21 }],
1673
- new Map([
1674
- [21, [{ age: 21 }, { age: 21 }, { age: 21 }]],
1675
- [22, [{ age: 22 }]],
1676
- [23, [{ age: 23 }]],
1677
- ]),
1678
- )
1679
- .case(
1680
- new Set([{ age: 21 }, { age: 22 }, { age: 21 }, { age: 23 }, { age: 21 }]),
1681
- new Map([
1682
- [21, [{ age: 21 }, { age: 21 }, { age: 21 }]],
1683
- [22, [{ age: 22 }]],
1684
- [23, [{ age: 23 }]],
1685
- ]),
1686
- ),
1687
-
1688
- Test('groupBy resolver', groupBy(object => object.age))
1689
- .case(
1690
- [{ age: 21 }, { age: 22 }, { age: 21 }, { age: 23 }, { age: 21 }],
1691
- new Map([
1692
- [21, [{ age: 21 }, { age: 21 }, { age: 21 }]],
1693
- [22, [{ age: 22 }]],
1694
- [23, [{ age: 23 }]],
1695
- ]),
1696
- )
1697
- .case(
1698
- new Set([{ age: 21 }, { age: 22 }, { age: 21 }, { age: 23 }, { age: 21 }]),
1699
- new Map([
1700
- [21, [{ age: 21 }, { age: 21 }, { age: 21 }]],
1701
- [22, [{ age: 22 }]],
1702
- [23, [{ age: 23 }]],
1703
- ]),
1704
- ),
1705
-
1706
- Test('groupBy resolver async', groupBy(async object => object.age))
1707
- .case(
1708
- [{ age: 21 }, { age: 22 }, { age: 21 }, { age: 23 }, { age: 21 }],
1709
- new Map([
1710
- [21, [{ age: 21 }, { age: 21 }, { age: 21 }]],
1711
- [22, [{ age: 22 }]],
1712
- [23, [{ age: 23 }]],
1713
- ]),
1714
- )
1715
- .case(
1716
- new Set([{ age: 21 }, { age: 22 }, { age: 21 }, { age: 23 }, { age: 21 }]),
1717
- new Map([
1718
- [21, [{ age: 21 }, { age: 21 }, { age: 21 }]],
1719
- [22, [{ age: 22 }]],
1720
- [23, [{ age: 23 }]],
1721
- ]),
1722
- ),
1723
- ])
1724
-
1725
- TestsMap.set('has', has => [
1726
- Test(has)
1727
- .case('b', hasB => {
1728
- assert.strictEqual(hasB(new Set(['a', 'b', 'c'])), true)
1729
- assert.strictEqual(hasB(new Set(['a', 'c'])), false)
1730
- assert.strictEqual(hasB(new Map([['a', 1], ['b', 2], ['c', 3]])), true)
1731
- assert.strictEqual(hasB(new Map([['a', 1], ['c', 3]])), false)
1732
- assert.strictEqual(hasB({ a: 1, b: 2, c: 3 }), true)
1733
- assert.strictEqual(hasB({ a: 1, c: 3 }), false)
1734
- assert.strictEqual(hasB(null), false)
1735
- assert.strictEqual(hasB(15), false)
1736
- }),
1737
- ])
1738
-
1739
- TestsMap.set('includes', includes => [
1740
- Test(includes)
1741
- .case(5, includes5 => {
1742
- assert.strictEqual(includes5([1, 2, 3, 4, 5]), true)
1743
- assert.strictEqual(includes5([1, 2, 3]), false)
1744
- assert.strictEqual(includes5({ a: 1, b: 2, c: 3, d: 4, e: 5 }), true)
1745
- assert.strictEqual(includes5({ a: 1, b: 2, c: 3 }), false)
1746
- assert.strictEqual(includes5(null), false)
1747
- assert.strictEqual(includes5(15), false)
1748
- }),
1749
- ])
1750
-
1751
- TestsMap.set('isDeepEqual', isDeepEqual => [
1752
- Test('isDeepEqual', isDeepEqual)
1753
- .case({ a: 1, b: 2, c: 3 }, { a: 1, b: 2, c: 3 }, true)
1754
- .case({ a: 1, b: 2, c: 3 }, {}, false)
1755
- .case({ a: 1, b: 2, c: [] }, { a: 1, b: 2, c: [] }, true)
1756
- .case({ a: 1, b: 2, c: [1] }, { a: 1, b: 2, c: [] }, false)
1757
- .case({ a: 1, b: 2, c: [1, { e: 5 }] }, { a: 1, b: 2, c: [1, { e: 5 }] }, true)
1758
- .case([1, 2, 3], array => array, isDeepEqual123 => {
1759
- assert.strictEqual(isDeepEqual123([1, 2, 3]), true)
1760
- assert.strictEqual(isDeepEqual123([]), false)
1761
- })
1762
- .case(array => array, [1, 2, 3], isDeepEqual123 => {
1763
- assert.strictEqual(isDeepEqual123([1, 2, 3]), true)
1764
- assert.strictEqual(isDeepEqual123([]), false)
1765
- })
1766
- .case(array => array, () => [1, 2, 3], isDeepEqual123 => {
1767
- assert.strictEqual(isDeepEqual123([1, 2, 3]), true)
1768
- assert.strictEqual(isDeepEqual123([]), false)
1769
- })
1770
- .case({}, {}, true)
1771
- .case([], {}, false)
1772
- .case([], [], true)
1773
- .case(null, null, true)
1774
- .case(undefined, undefined, true)
1775
- .case(undefined, null, false)
1776
- ])
1777
-
1778
- TestsMap.set('isEmpty', isEmpty => [
1779
- Test('isEmpty', isEmpty)
1780
- .case('', true)
1781
- .case('abc', false)
1782
- .case([], true)
1783
- .case([1, 2, 3], false)
1784
- .case(new Set(), true)
1785
- .case(new Set([1, 2, 3]), false)
1786
- .case(new Map(), true)
1787
- .case(new Map([['a', 1]]), false)
1788
- .case(null, true)
1789
- .case(undefined, true)
1790
- ])
1791
-
1792
- TestsMap.set('isFunction', isFunction => [
1793
- Test('isFunction', isFunction)
1794
- .case(0, false)
1795
- .case(null, false)
1796
- .case('hey', false)
1797
- .case(() => {}, true)
1798
- .case(function noop() {}, true)
1799
- .case(async function noop() {}, true)
1800
- .case(function* noop() {}, true)
1801
- .case(async function* noop() {}, true)
1802
- ])
1803
-
1804
- TestsMap.set('isObject', isObject => [
1805
- Test('isObject', isObject)
1806
- .case({ a: 1 }, true)
1807
- .case({}, true)
1808
- .case([], true)
1809
- .case('', false)
1810
- .case('abc', false)
1811
- .case(1, false)
1812
- .case(null, false)
1813
- .case(undefined, false)
1814
- ])
1815
-
1816
- TestsMap.set('isString', isString => [
1817
- Test('isString', isString)
1818
- .case('abc', true)
1819
- .case('', true)
1820
- .case(String('hey'), true)
1821
- .case(new String('hey'), true)
1822
- .case(0, false)
1823
- .case(null, false)
1824
- .case(undefined, false)
1825
- ])
1826
-
1827
- TestsMap.set('keys', function (keys) {
1828
- const Foo = function () {
1829
- this.a = 1;
1830
- this.b = 2;
1831
- }
1832
- Foo.prototype.toString = () => '[object Foo]'
1833
- Foo.prototype.c = 3;
1834
- return [
1835
- Test(keys)
1836
- .case({ a: 1, b: 2, c: 3 }, ['a', 'b', 'c'])
1837
- .case(new Map([['a', 1], ['b', 2], ['c', 3]]), ['a', 'b', 'c'])
1838
- .case(new Set([1, 2, 3]), [1, 2, 3])
1839
- .case(['a', 'b', 'c'], [0, 1, 2])
1840
- .case('abc', ['0', '1', '2'])
1841
- .case([], [])
1842
- .case({}, [])
1843
- .case(10, [])
1844
- .case(new Foo(), ['a', 'b'])
1845
- .case(null, []),
1846
- ]
1847
- })
1848
-
1849
- TestsMap.set('last', last => [
1850
- Test('last', last)
1851
- .case([1, 2, 3], 3)
1852
- .case('abc', 'c')
1853
- .case(null, undefined)
1854
- .case(undefined, undefined)
1855
- ])
1856
-
1857
- TestsMap.set('maxBy', maxBy => [
1858
- Test('maxBy', async function () {
1859
- { // Finds the item that is the max by a property denoted by path
1860
- const array = [{ a: 1 }, { a: 2 }, { a: 3 }]
1861
- const maxItem = maxBy(array, 'a')
1862
- assert.deepEqual(maxItem, { a: 3 })
1863
- }
1864
-
1865
- { // composes in a pointfree way
1866
- const numbers = [1, 2, 3]
1867
- const maxItem = pipe(numbers, [
1868
- map(number => number ** 2),
1869
- map(number => ({ a: { b: { c: number } } })),
1870
- maxBy('a.b.c'),
1871
- ])
1872
- assert.deepEqual(maxItem, { a: { b: { c: 9 } } })
1873
- }
1874
-
1875
- { // returns undefined for empty array
1876
- assert.strictEqual(maxBy([], 'a'), undefined)
1877
- }
1878
- }).case()
1879
- ])
1880
-
1881
- TestsMap.set('pluck', pluck => [
1882
- Test('pluck', pluck('a'))
1883
- .case([{ a: 1 }, { a: 2 }, { a: 3 }], [1, 2, 3])
1884
- .case([{ a: 1 }, { b: 2 }, { a: 3 }], [1, undefined, 3]),
1885
-
1886
- Test('pluck', pluck('a.b'))
1887
- .case([{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }], [1, 2, 3]),
1888
-
1889
- Test('pluck', pluck('a[0]'))
1890
- .case([{ a: [1] }, { a: [2] }, { a: [3] }], [1, 2, 3]),
1891
- ])
1892
-
1893
- TestsMap.set('prepend', prepend => [
1894
- Test('prepend - string', prepend('hey '))
1895
- .case('there', 'hey there')
1896
- .case('', 'hey ')
1897
- .throws(null, new TypeError('null is not an Array or string'))
1898
- .throws(undefined, new TypeError('undefined is not an Array or string')),
1899
-
1900
- Test('prepend - array', prepend([1, 2, 3]))
1901
- .case(['a', 'b', 'c'], [1, 2, 3, 'a', 'b', 'c'])
1902
- .case([], [1, 2, 3]),
1903
- ])
1904
-
1905
- TestsMap.set('size', size => [
1906
- Test('size', size)
1907
- .case('abc', 3)
1908
- .case('', 0)
1909
- .case({ a: 1 }, 1)
1910
- .case({}, 0)
1911
- .case([1, 2, 3], 3)
1912
- .case([], 0)
1913
- .case(new Set([1, 2, 3]), 3)
1914
- .case(new Set(), 0)
1915
- .case(new Map([[1, 2]]), 1)
1916
- .case(new Map(), 0)
1917
- .case(null, 0)
1918
- .case(undefined, 0)
1919
- .case(1, 1)
1920
- ])
1921
-
1922
- TestsMap.set('trace', trace => [
1923
- Test('trace', trace)
1924
- .case('hey', 'hey')
1925
- .case(1, 1)
1926
- .case(null, null)
1927
- .case(undefined, undefined)
1928
- .case(object => object.a, traceResolver => {
1929
- assert.deepEqual(traceResolver({ a: 1 }), { a: 1 })
1930
- })
1931
- ])
1932
-
1933
- TestsMap.set('unionWith', unionWith => [
1934
- Test('unionWith number', unionWith((a, b) => a == b))
1935
- .case([[1, 2, 3], [1, 2, 3]], [1, 2, 3])
1936
- .throws('ayo', TypeError('ayo is not an Array')),
1937
-
1938
- Test('unionWith namedObject', unionWith((a, b) => a.name == b.name))
1939
- .case([[{ name: 'hey' }, { name: 'ho' }, { name: 'hey' }]], [{ name: 'hey' }, { name: 'ho' }])
1940
- .throws(1, TypeError('1 is not an Array')),
1941
- ])
1942
-
1943
- TestsMap.set('uniq', uniq => [
1944
- Test('uniq', uniq)
1945
- .case([1, 1, 2, 2, 3, 3], [1, 2, 3])
1946
- .case([1, 2, 3], [1, 2, 3])
1947
- .case([3, 3, 3, 3, 3, 2, 2, 1], [3, 2, 1])
1948
- .case([3, 3, 3, 3, 3, 1, 2, 2, 1], [3, 1, 2])
1949
- .throws(1, Error('uniq(arr): arr is not an array'))
1950
- ])
1951
-
1952
- TestsMap.set('unless', unless => [
1953
- Test('unless - sync', unless(function isEven(number) {
1954
- return number % 2 == 0
1955
- }, number => number * 2))
1956
- .case(1, 2)
1957
- .case(2, 2)
1958
- .case(3, 6),
1959
-
1960
- Test('unless - async', unless(async function asyncIsEven(number) {
1961
- return number % 2 == 0
1962
- }, number => number * 2))
1963
- .case(1, 2)
1964
- .case(2, 2)
1965
- .case(3, 6),
1966
- ])
1967
-
1968
- TestsMap.set('values', function (values) {
1969
- const Foo = function () {
1970
- this.a = 1;
1971
- this.b = 2;
1972
- }
1973
- Foo.prototype.toString = () => '[object Foo]'
1974
- Foo.prototype.c = 3;
1975
- return [
1976
- Test(values)
1977
- .case([1, 2, 3], [1, 2, 3])
1978
- .case([], [])
1979
- .case({ a: 1, b: 2, c: 3 }, [1, 2, 3])
1980
- .case({}, [])
1981
- .case(new Set([1, 2, 3]), [1, 2, 3])
1982
- .case(new Set(), [])
1983
- .case(new Map([[1, 1], [2, 2], [3, 3]]), [1, 2, 3])
1984
- .case(new Map(), [])
1985
- .case('hey', ['h', 'e', 'y'])
1986
- .case(10, [])
1987
- .case(new Foo(), [1, 2])
1988
- .case(null, [])
1989
- .case(undefined, [])
1990
- ]
1991
- })
1992
-
1993
- TestsMap.set('when', when => [
1994
- Test('when', when(num => num % 2 == 0, num => num *= 2))
1995
- .case(1, 1)
1996
- .case(6, 12),
1997
-
1998
- Test('when - async predicate', when(async num => num % 2 == 0, num => num *= 2))
1999
- .case(1, 1)
2000
- .case(6, 12),
2001
- ])
2002
-
2003
- async function runTestSeries({ name, path }) {
2004
- const Tests = TestsMap.get(name)
2005
- if (Tests == null) {
2006
- return
2007
- }
2008
- const func = require(path)
2009
- for (const test of Tests(func)) {
2010
- await test()
2011
- }
2012
- for (const property in func) {
2013
- const Tests = TestsMap.get(`${name}.${property}`)
2014
- if (Tests == null) {
2015
- continue
2016
- }
2017
- for (const test of Tests(func[property])) {
2018
- await test()
2019
33
  }
2020
34
  }
2021
35
  }
2022
36
 
2023
- ;(async function main() {
2024
- for (const name of Object.keys(require('./rubico'))) {
2025
- await runTestSeries({ name, path: `./${name}` })
2026
- }
2027
- for (const name of Object.keys(require('./rubico'))) {
2028
- await runTestSeries({ name, path: `./dist/${name}.min` })
2029
- }
2030
- for (const name of Object.keys(require('./rubico'))) {
2031
- await runTestSeries({ name, path: `./dist/${name}` })
2032
- }
2033
- for (const name of Object.keys(require('./rubico'))) {
2034
- await runTestSeries({ name, path: `./dist/${name}.min` })
2035
- }
2036
- for (const name of Object.keys(require('./x'))) {
2037
- await runTestSeries({ name, path: `./x/${name}` })
2038
- }
2039
- for (const name of Object.keys(require('./x'))) {
2040
- await runTestSeries({ name, path: `./dist/x/${name}.min` })
2041
- }
2042
- for (const name of Object.keys(require('./x'))) {
2043
- await runTestSeries({ name, path: `./dist/x/${name}` })
2044
- }
2045
- for (const name of Object.keys(require('./x'))) {
2046
- await runTestSeries({ name, path: `./dist/x/${name}.min` })
2047
- }
2048
- })()
37
+ distTest()