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
package/dist/filter.es.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
- * rubico v1.9.7
2
+ * rubico v2.0.0
3
3
  * https://github.com/a-synchronous/rubico
4
- * (c) 2019-2021 Richard Tong
4
+ * (c) 2019-2023 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
6
6
  */
7
7
  const __ = Symbol.for('placeholder')
@@ -72,20 +72,6 @@ const FilteringAsyncIterator = (asyncIterator, predicate) => ({
72
72
 
73
73
  const isArray = Array.isArray
74
74
 
75
- const objectProto = Object.prototype
76
-
77
- const nativeObjectToString = objectProto.toString
78
-
79
- const objectToString = value => nativeObjectToString.call(value)
80
-
81
- const generatorFunctionTag = '[object GeneratorFunction]'
82
-
83
- const isGeneratorFunction = value => objectToString(value) == generatorFunctionTag
84
-
85
- const asyncGeneratorFunctionTag = '[object AsyncGeneratorFunction]'
86
-
87
- const isAsyncGeneratorFunction = value => objectToString(value) == asyncGeneratorFunctionTag
88
-
89
75
  // argument resolver for curry4
90
76
  const curry4ResolveArg0 = (
91
77
  baseFunc, arg1, arg2, arg3,
@@ -160,12 +146,11 @@ const arrayFilter = function (array, predicate) {
160
146
  resultIndex = -1
161
147
  while (++index < arrayLength) {
162
148
  const item = array[index],
163
- shouldIncludeItem = predicate(item)
149
+ shouldIncludeItem = predicate(item, index, array)
164
150
  if (isPromise(shouldIncludeItem)) {
165
151
  return promiseAll(
166
- arrayExtendMap(
167
- [shouldIncludeItem], array, predicate, index)).then(
168
- curry4(arrayFilterByConditions, array, result, index - 1, __))
152
+ arrayExtendMap([shouldIncludeItem], array, predicate, index)
153
+ ).then(curry4(arrayFilterByConditions, array, result, index - 1, __))
169
154
  }
170
155
  if (shouldIncludeItem) {
171
156
  result[++resultIndex] = item
@@ -174,18 +159,6 @@ const arrayFilter = function (array, predicate) {
174
159
  return result
175
160
  }
176
161
 
177
- const generatorFunctionFilter = (
178
- generatorFunction, predicate,
179
- ) => function* filteringGeneratorFunction(...args) {
180
- yield* FilteringIterator(generatorFunction(...args), predicate)
181
- }
182
-
183
- const asyncGeneratorFunctionFilter = (
184
- asyncGeneratorFunction, predicate,
185
- ) => async function* filteringAsyncGeneratorFunction(...args) {
186
- yield* FilteringAsyncIterator(asyncGeneratorFunction(...args), predicate)
187
- }
188
-
189
162
  // argument resolver for curry3
190
163
  const curry3ResolveArg0 = (
191
164
  baseFunc, arg1, arg2,
@@ -217,29 +190,6 @@ const curry3 = function (baseFunc, arg0, arg1, arg2) {
217
190
  return curry3ResolveArg2(baseFunc, arg0, arg1)
218
191
  }
219
192
 
220
- const thunkify2 = (func, arg0, arg1) => function thunk() {
221
- return func(arg0, arg1)
222
- }
223
-
224
- const thunkConditional = (
225
- conditionalExpression, thunkOnTruthy, thunkOnFalsy,
226
- ) => conditionalExpression ? thunkOnTruthy() : thunkOnFalsy()
227
-
228
- const always = value => function getter() { return value }
229
-
230
- const reducerFilter = (
231
- reducer, predicate,
232
- ) => function filteringReducer(result, item) {
233
- const shouldInclude = predicate(item)
234
- return isPromise(shouldInclude)
235
- ? shouldInclude.then(curry3(
236
- thunkConditional,
237
- __,
238
- thunkify2(reducer, result, item),
239
- always(result)))
240
- : shouldInclude ? reducer(result, item) : result
241
- }
242
-
243
193
  const callPropUnary = (value, property, arg0) => value[property](arg0)
244
194
 
245
195
  const stringFilter = function (string, predicate) {
@@ -249,6 +199,12 @@ const stringFilter = function (string, predicate) {
249
199
  : filteredCharactersArray.join('')
250
200
  }
251
201
 
202
+ const always = value => function getter() { return value }
203
+
204
+ const thunkConditional = (
205
+ conditionalExpression, thunkOnTruthy, thunkOnFalsy,
206
+ ) => conditionalExpression ? thunkOnTruthy() : thunkOnFalsy()
207
+
252
208
  const thunkify1 = (func, arg0) => function thunk() {
253
209
  return func(arg0)
254
210
  }
@@ -323,53 +279,10 @@ const objectFilter = function (object, predicate) {
323
279
  : promiseAll(promises).then(always(result))
324
280
  }
325
281
 
326
- const arrayExtendMapWithIndex = function (
327
- array, values, valuesMapper, valuesIndex,
328
- ) {
329
- const valuesLength = values.length
330
- let arrayIndex = array.length - 1
331
-
332
- while (++valuesIndex < valuesLength) {
333
- array[++arrayIndex] = valuesMapper(
334
- values[valuesIndex], valuesIndex, values)
335
- }
336
- return array
337
- }
338
-
339
- const arrayFilterWithIndex = function (array, predicate) {
340
- const arrayLength = array.length,
341
- result = []
342
- let index = -1,
343
- resultIndex = -1
344
- while (++index < arrayLength) {
345
- const item = array[index],
346
- shouldIncludeItem = predicate(item, index, array)
347
- if (isPromise(shouldIncludeItem)) {
348
- return promiseAll(
349
- arrayExtendMapWithIndex(
350
- [shouldIncludeItem], array, predicate, index)).then(
351
- curry4(arrayFilterByConditions, array, result, index - 1, __))
352
- }
353
- if (shouldIncludeItem) {
354
- result[++resultIndex] = item
355
- }
356
- }
357
- return result
358
- }
359
-
360
282
  const _filter = function (value, predicate) {
361
283
  if (isArray(value)) {
362
284
  return arrayFilter(value, predicate)
363
285
  }
364
- if (typeof value == 'function') {
365
- if (isGeneratorFunction(value)) {
366
- return generatorFunctionFilter(value, predicate)
367
- }
368
- if (isAsyncGeneratorFunction(value)) {
369
- return asyncGeneratorFunctionFilter(value, predicate)
370
- }
371
- return reducerFilter(value, predicate)
372
- }
373
286
  if (value == null) {
374
287
  return value
375
288
  }
@@ -400,17 +313,10 @@ const _filter = function (value, predicate) {
400
313
 
401
314
  const filter = function (...args) {
402
315
  const predicate = args.pop()
403
- if (args.length > 0) {
404
- return _filter(args[0], predicate)
405
- }
406
- return curry2(_filter, __, predicate)
407
- }
408
-
409
- filter.withIndex = predicate => function filteringWithIndex(value) {
410
- if (isArray(value)) {
411
- return arrayFilterWithIndex(value, predicate)
316
+ if (args.length == 0) {
317
+ return curry2(_filter, __, predicate)
412
318
  }
413
- throw new TypeError(`${value} is not an Array`)
319
+ return _filter(args[0], predicate)
414
320
  }
415
321
 
416
322
  export default filter
@@ -1,7 +1,7 @@
1
1
  /**
2
- * rubico v1.9.7
2
+ * rubico v2.0.0
3
3
  * https://github.com/a-synchronous/rubico
4
- * (c) 2019-2021 Richard Tong
4
+ * (c) 2019-2023 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
6
6
  */
7
- const __=Symbol.for("placeholder"),curry2ResolveArg0=(r,t)=>function(n){return r(n,t)},curry2ResolveArg1=(r,t)=>function(n){return r(t,n)},curry2=function(r,t,n){return t==__?curry2ResolveArg0(r,n):curry2ResolveArg1(r,t)},symbolIterator=Symbol.iterator,FilteringIterator=(r,t)=>({[symbolIterator](){return this},next(){let n=r.next();for(;!n.done;){const{value:e}=n;if(t(e))return{value:e,done:!1};n=r.next()}return n}}),isPromise=r=>null!=r&&"function"==typeof r.then,symbolAsyncIterator=Symbol.asyncIterator,FilteringAsyncIterator=(r,t)=>({isAsyncIteratorDone:!1,[symbolAsyncIterator](){return this},async next(){for(;!this.isAsyncIteratorDone;){const{value:n,done:e}=await r.next();if(e)this.isAsyncIteratorDone=!0;else{const r=t(n);if(isPromise(r)?await r:r)return{value:n,done:!1}}}return{value:void 0,done:!0}}}),isArray=Array.isArray,objectProto=Object.prototype,nativeObjectToString=objectProto.toString,objectToString=r=>nativeObjectToString.call(r),generatorFunctionTag="[object GeneratorFunction]",isGeneratorFunction=r=>objectToString(r)==generatorFunctionTag,asyncGeneratorFunctionTag="[object AsyncGeneratorFunction]",isAsyncGeneratorFunction=r=>objectToString(r)==asyncGeneratorFunctionTag,curry4ResolveArg0=(r,t,n,e)=>function(o){return r(o,t,n,e)},curry4ResolveArg1=(r,t,n,e)=>function(o){return r(t,o,n,e)},curry4ResolveArg2=(r,t,n,e)=>function(o){return r(t,n,o,e)},curry4ResolveArg3=(r,t,n,e)=>function(o){return r(t,n,e,o)},curry4=function(r,t,n,e,o){return t==__?curry4ResolveArg0(r,n,e,o):n==__?curry4ResolveArg1(r,t,e,o):e==__?curry4ResolveArg2(r,t,n,o):curry4ResolveArg3(r,t,n,e)},promiseAll=Promise.all.bind(Promise),arrayExtendMap=function(r,t,n,e){const o=t.length;let i=r.length-1;for(;++e<o;)r[++i]=n(t[e],e,r);return r},arrayFilterByConditions=function(r,t,n,e){const o=r.length;let i=-1;for(;++n<o;)e[++i]&&t.push(r[n]);return t},arrayFilter=function(r,t){const n=r.length,e=[];let o=-1,i=-1;for(;++o<n;){const n=r[o],c=t(n);if(isPromise(c))return promiseAll(arrayExtendMap([c],r,t,o)).then(curry4(arrayFilterByConditions,r,e,o-1,__));c&&(e[++i]=n)}return e},generatorFunctionFilter=(r,t)=>function*(...n){yield*FilteringIterator(r(...n),t)},asyncGeneratorFunctionFilter=(r,t)=>async function*(...n){yield*FilteringAsyncIterator(r(...n),t)},curry3ResolveArg0=(r,t,n)=>function(e){return r(e,t,n)},curry3ResolveArg1=(r,t,n)=>function(e){return r(t,e,n)},curry3ResolveArg2=(r,t,n)=>function(e){return r(t,n,e)},curry3=function(r,t,n,e){return t==__?curry3ResolveArg0(r,n,e):n==__?curry3ResolveArg1(r,t,e):curry3ResolveArg2(r,t,n)},thunkify2=(r,t,n)=>function(){return r(t,n)},thunkConditional=(r,t,n)=>r?t():n(),always=r=>function(){return r},reducerFilter=(r,t)=>function(n,e){const o=t(e);return isPromise(o)?o.then(curry3(thunkConditional,__,(i=r,c=n,u=e,function(){return i(c,u)}),always(n))):o?r(n,e):n;var i,c,u},callPropUnary=(r,t,n)=>r[t](n),stringFilter=function(r,t){const n=arrayFilter(r,t);return isPromise(n)?n.then(curry3(callPropUnary,__,"join","")):n.join("")},thunkify1=(r,t)=>function(){return r(t)},noop=function(){},setFilter=function(r,t){const n=new Set,e=n.add.bind(n),o=[];for(const i of r){const c=t(i,i,r);isPromise(c)?o.push(c.then(curry3(thunkConditional,__,thunkify1(e,i),noop))):c&&n.add(i)}return 0==o.length?n:promiseAll(o).then(always(n))},thunkify4=(r,t,n,e,o)=>function(){return r(t,n,e,o)},callPropBinary=(r,t,n,e)=>r[t](n,e),mapFilter=function(r,t){const n=new Map,e=[];for(const[o,i]of r){const c=t(i,o,r);isPromise(c)?e.push(c.then(curry3(thunkConditional,__,thunkify4(callPropBinary,n,"set",o,i),noop))):c&&n.set(o,i)}return 0==e.length?n:promiseAll(e).then(always(n))},objectSetIf=function(r,t,n,e){e&&(r[t]=n)},objectFilter=function(r,t){const n={},e=[];for(const o in r){const i=r[o],c=t(i,o,r);isPromise(c)?e.push(c.then(curry4(objectSetIf,n,o,r[o],__))):c&&(n[o]=i)}return 0==e.length?n:promiseAll(e).then(always(n))},arrayExtendMapWithIndex=function(r,t,n,e){const o=t.length;let i=r.length-1;for(;++e<o;)r[++i]=n(t[e],e,t);return r},arrayFilterWithIndex=function(r,t){const n=r.length,e=[];let o=-1,i=-1;for(;++o<n;){const n=r[o],c=t(n,o,r);if(isPromise(c))return promiseAll(arrayExtendMapWithIndex([c],r,t,o)).then(curry4(arrayFilterByConditions,r,e,o-1,__));c&&(e[++i]=n)}return e},_filter=function(r,t){return isArray(r)?arrayFilter(r,t):"function"==typeof r?isGeneratorFunction(r)?generatorFunctionFilter(r,t):isAsyncGeneratorFunction(r)?asyncGeneratorFunctionFilter(r,t):reducerFilter(r,t):null==r?r:"string"==typeof r||r.constructor==String?stringFilter(r,t):r.constructor==Set?setFilter(r,t):r.constructor==Map?mapFilter(r,t):"function"==typeof r.filter?r.filter(t):"function"==typeof r[symbolIterator]?FilteringIterator(r[symbolIterator](),t):"function"==typeof r[symbolAsyncIterator]?FilteringAsyncIterator(r[symbolAsyncIterator](),t):r.constructor==Object?objectFilter(r,t):r},filter=function(...r){const t=r.pop();return r.length>0?_filter(r[0],t):(n=_filter,o=t,(e=__)==__?curry2ResolveArg0(n,o):curry2ResolveArg1(n,e));var n,e,o};filter.withIndex=r=>function(t){if(isArray(t))return arrayFilterWithIndex(t,r);throw new TypeError(`${t} is not an Array`)};export default filter;
7
+ const __=Symbol.for("placeholder"),curry2ResolveArg0=(r,t)=>function(n){return r(n,t)},curry2ResolveArg1=(r,t)=>function(n){return r(t,n)},curry2=function(r,t,n){return t==__?curry2ResolveArg0(r,n):curry2ResolveArg1(r,t)},symbolIterator=Symbol.iterator,FilteringIterator=(r,t)=>({[symbolIterator](){return this},next(){let n=r.next();for(;!n.done;){const{value:e}=n;if(t(e))return{value:e,done:!1};n=r.next()}return n}}),isPromise=r=>null!=r&&"function"==typeof r.then,symbolAsyncIterator=Symbol.asyncIterator,FilteringAsyncIterator=(r,t)=>({isAsyncIteratorDone:!1,[symbolAsyncIterator](){return this},async next(){for(;!this.isAsyncIteratorDone;){const{value:n,done:e}=await r.next();if(e)this.isAsyncIteratorDone=!0;else{const r=t(n);if(isPromise(r)?await r:r)return{value:n,done:!1}}}return{value:void 0,done:!0}}}),isArray=Array.isArray,curry4ResolveArg0=(r,t,n,e)=>function(o){return r(o,t,n,e)},curry4ResolveArg1=(r,t,n,e)=>function(o){return r(t,o,n,e)},curry4ResolveArg2=(r,t,n,e)=>function(o){return r(t,n,o,e)},curry4ResolveArg3=(r,t,n,e)=>function(o){return r(t,n,e,o)},curry4=function(r,t,n,e,o){return t==__?curry4ResolveArg0(r,n,e,o):n==__?curry4ResolveArg1(r,t,e,o):e==__?curry4ResolveArg2(r,t,n,o):curry4ResolveArg3(r,t,n,e)},promiseAll=Promise.all.bind(Promise),arrayExtendMap=function(r,t,n,e){const o=t.length;let i=r.length-1;for(;++e<o;)r[++i]=n(t[e],e,r);return r},arrayFilterByConditions=function(r,t,n,e){const o=r.length;let i=-1;for(;++n<o;)e[++i]&&t.push(r[n]);return t},arrayFilter=function(r,t){const n=r.length,e=[];let o=-1,i=-1;for(;++o<n;){const n=r[o],u=t(n,o,r);if(isPromise(u))return promiseAll(arrayExtendMap([u],r,t,o)).then(curry4(arrayFilterByConditions,r,e,o-1,__));u&&(e[++i]=n)}return e},curry3ResolveArg0=(r,t,n)=>function(e){return r(e,t,n)},curry3ResolveArg1=(r,t,n)=>function(e){return r(t,e,n)},curry3ResolveArg2=(r,t,n)=>function(e){return r(t,n,e)},curry3=function(r,t,n,e){return t==__?curry3ResolveArg0(r,n,e):n==__?curry3ResolveArg1(r,t,e):curry3ResolveArg2(r,t,n)},callPropUnary=(r,t,n)=>r[t](n),stringFilter=function(r,t){const n=arrayFilter(r,t);return isPromise(n)?n.then(curry3(callPropUnary,__,"join","")):n.join("")},always=r=>function(){return r},thunkConditional=(r,t,n)=>r?t():n(),thunkify1=(r,t)=>function(){return r(t)},noop=function(){},setFilter=function(r,t){const n=new Set,e=n.add.bind(n),o=[];for(const i of r){const u=t(i,i,r);isPromise(u)?o.push(u.then(curry3(thunkConditional,__,thunkify1(e,i),noop))):u&&n.add(i)}return 0==o.length?n:promiseAll(o).then(always(n))},thunkify4=(r,t,n,e,o)=>function(){return r(t,n,e,o)},callPropBinary=(r,t,n,e)=>r[t](n,e),mapFilter=function(r,t){const n=new Map,e=[];for(const[o,i]of r){const u=t(i,o,r);isPromise(u)?e.push(u.then(curry3(thunkConditional,__,thunkify4(callPropBinary,n,"set",o,i),noop))):u&&n.set(o,i)}return 0==e.length?n:promiseAll(e).then(always(n))},objectSetIf=function(r,t,n,e){e&&(r[t]=n)},objectFilter=function(r,t){const n={},e=[];for(const o in r){const i=r[o],u=t(i,o,r);isPromise(u)?e.push(u.then(curry4(objectSetIf,n,o,r[o],__))):u&&(n[o]=i)}return 0==e.length?n:promiseAll(e).then(always(n))},_filter=function(r,t){return isArray(r)?arrayFilter(r,t):null==r?r:"string"==typeof r||r.constructor==String?stringFilter(r,t):r.constructor==Set?setFilter(r,t):r.constructor==Map?mapFilter(r,t):"function"==typeof r.filter?r.filter(t):"function"==typeof r[symbolIterator]?FilteringIterator(r[symbolIterator](),t):"function"==typeof r[symbolAsyncIterator]?FilteringAsyncIterator(r[symbolAsyncIterator](),t):r.constructor==Object?objectFilter(r,t):r},filter=function(...r){const t=r.pop();return 0==r.length?(n=_filter,o=t,(e=__)==__?curry2ResolveArg0(n,o):curry2ResolveArg1(n,e)):_filter(r[0],t);var n,e,o};export default filter;
package/dist/filter.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
- * rubico v1.9.7
2
+ * rubico v2.0.0
3
3
  * https://github.com/a-synchronous/rubico
4
- * (c) 2019-2021 Richard Tong
4
+ * (c) 2019-2023 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
6
6
  */
7
7
 
@@ -78,20 +78,6 @@ const FilteringAsyncIterator = (asyncIterator, predicate) => ({
78
78
 
79
79
  const isArray = Array.isArray
80
80
 
81
- const objectProto = Object.prototype
82
-
83
- const nativeObjectToString = objectProto.toString
84
-
85
- const objectToString = value => nativeObjectToString.call(value)
86
-
87
- const generatorFunctionTag = '[object GeneratorFunction]'
88
-
89
- const isGeneratorFunction = value => objectToString(value) == generatorFunctionTag
90
-
91
- const asyncGeneratorFunctionTag = '[object AsyncGeneratorFunction]'
92
-
93
- const isAsyncGeneratorFunction = value => objectToString(value) == asyncGeneratorFunctionTag
94
-
95
81
  // argument resolver for curry4
96
82
  const curry4ResolveArg0 = (
97
83
  baseFunc, arg1, arg2, arg3,
@@ -166,12 +152,11 @@ const arrayFilter = function (array, predicate) {
166
152
  resultIndex = -1
167
153
  while (++index < arrayLength) {
168
154
  const item = array[index],
169
- shouldIncludeItem = predicate(item)
155
+ shouldIncludeItem = predicate(item, index, array)
170
156
  if (isPromise(shouldIncludeItem)) {
171
157
  return promiseAll(
172
- arrayExtendMap(
173
- [shouldIncludeItem], array, predicate, index)).then(
174
- curry4(arrayFilterByConditions, array, result, index - 1, __))
158
+ arrayExtendMap([shouldIncludeItem], array, predicate, index)
159
+ ).then(curry4(arrayFilterByConditions, array, result, index - 1, __))
175
160
  }
176
161
  if (shouldIncludeItem) {
177
162
  result[++resultIndex] = item
@@ -180,18 +165,6 @@ const arrayFilter = function (array, predicate) {
180
165
  return result
181
166
  }
182
167
 
183
- const generatorFunctionFilter = (
184
- generatorFunction, predicate,
185
- ) => function* filteringGeneratorFunction(...args) {
186
- yield* FilteringIterator(generatorFunction(...args), predicate)
187
- }
188
-
189
- const asyncGeneratorFunctionFilter = (
190
- asyncGeneratorFunction, predicate,
191
- ) => async function* filteringAsyncGeneratorFunction(...args) {
192
- yield* FilteringAsyncIterator(asyncGeneratorFunction(...args), predicate)
193
- }
194
-
195
168
  // argument resolver for curry3
196
169
  const curry3ResolveArg0 = (
197
170
  baseFunc, arg1, arg2,
@@ -223,29 +196,6 @@ const curry3 = function (baseFunc, arg0, arg1, arg2) {
223
196
  return curry3ResolveArg2(baseFunc, arg0, arg1)
224
197
  }
225
198
 
226
- const thunkify2 = (func, arg0, arg1) => function thunk() {
227
- return func(arg0, arg1)
228
- }
229
-
230
- const thunkConditional = (
231
- conditionalExpression, thunkOnTruthy, thunkOnFalsy,
232
- ) => conditionalExpression ? thunkOnTruthy() : thunkOnFalsy()
233
-
234
- const always = value => function getter() { return value }
235
-
236
- const reducerFilter = (
237
- reducer, predicate,
238
- ) => function filteringReducer(result, item) {
239
- const shouldInclude = predicate(item)
240
- return isPromise(shouldInclude)
241
- ? shouldInclude.then(curry3(
242
- thunkConditional,
243
- __,
244
- thunkify2(reducer, result, item),
245
- always(result)))
246
- : shouldInclude ? reducer(result, item) : result
247
- }
248
-
249
199
  const callPropUnary = (value, property, arg0) => value[property](arg0)
250
200
 
251
201
  const stringFilter = function (string, predicate) {
@@ -255,6 +205,12 @@ const stringFilter = function (string, predicate) {
255
205
  : filteredCharactersArray.join('')
256
206
  }
257
207
 
208
+ const always = value => function getter() { return value }
209
+
210
+ const thunkConditional = (
211
+ conditionalExpression, thunkOnTruthy, thunkOnFalsy,
212
+ ) => conditionalExpression ? thunkOnTruthy() : thunkOnFalsy()
213
+
258
214
  const thunkify1 = (func, arg0) => function thunk() {
259
215
  return func(arg0)
260
216
  }
@@ -329,53 +285,10 @@ const objectFilter = function (object, predicate) {
329
285
  : promiseAll(promises).then(always(result))
330
286
  }
331
287
 
332
- const arrayExtendMapWithIndex = function (
333
- array, values, valuesMapper, valuesIndex,
334
- ) {
335
- const valuesLength = values.length
336
- let arrayIndex = array.length - 1
337
-
338
- while (++valuesIndex < valuesLength) {
339
- array[++arrayIndex] = valuesMapper(
340
- values[valuesIndex], valuesIndex, values)
341
- }
342
- return array
343
- }
344
-
345
- const arrayFilterWithIndex = function (array, predicate) {
346
- const arrayLength = array.length,
347
- result = []
348
- let index = -1,
349
- resultIndex = -1
350
- while (++index < arrayLength) {
351
- const item = array[index],
352
- shouldIncludeItem = predicate(item, index, array)
353
- if (isPromise(shouldIncludeItem)) {
354
- return promiseAll(
355
- arrayExtendMapWithIndex(
356
- [shouldIncludeItem], array, predicate, index)).then(
357
- curry4(arrayFilterByConditions, array, result, index - 1, __))
358
- }
359
- if (shouldIncludeItem) {
360
- result[++resultIndex] = item
361
- }
362
- }
363
- return result
364
- }
365
-
366
288
  const _filter = function (value, predicate) {
367
289
  if (isArray(value)) {
368
290
  return arrayFilter(value, predicate)
369
291
  }
370
- if (typeof value == 'function') {
371
- if (isGeneratorFunction(value)) {
372
- return generatorFunctionFilter(value, predicate)
373
- }
374
- if (isAsyncGeneratorFunction(value)) {
375
- return asyncGeneratorFunctionFilter(value, predicate)
376
- }
377
- return reducerFilter(value, predicate)
378
- }
379
292
  if (value == null) {
380
293
  return value
381
294
  }
@@ -406,17 +319,10 @@ const _filter = function (value, predicate) {
406
319
 
407
320
  const filter = function (...args) {
408
321
  const predicate = args.pop()
409
- if (args.length > 0) {
410
- return _filter(args[0], predicate)
411
- }
412
- return curry2(_filter, __, predicate)
413
- }
414
-
415
- filter.withIndex = predicate => function filteringWithIndex(value) {
416
- if (isArray(value)) {
417
- return arrayFilterWithIndex(value, predicate)
322
+ if (args.length == 0) {
323
+ return curry2(_filter, __, predicate)
418
324
  }
419
- throw new TypeError(`${value} is not an Array`)
325
+ return _filter(args[0], predicate)
420
326
  }
421
327
 
422
328
  return filter
@@ -1,8 +1,8 @@
1
1
  /**
2
- * rubico v1.9.7
2
+ * rubico v2.0.0
3
3
  * https://github.com/a-synchronous/rubico
4
- * (c) 2019-2021 Richard Tong
4
+ * (c) 2019-2023 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
6
6
  */
7
7
 
8
- !function(n,t){"object"==typeof module?module.exports=t:"function"==typeof define?define((()=>t)):n.filter=t}("object"==typeof globalThis?globalThis:this,function(){"use strict";const n=Symbol.for("placeholder"),t=Symbol.iterator,e=(n,e)=>({[t](){return this},next(){let t=n.next();for(;!t.done;){const{value:o}=t;if(e(o))return{value:o,done:!1};t=n.next()}return t}}),o=n=>null!=n&&"function"==typeof n.then,r=Symbol.asyncIterator,u=(n,t)=>({isAsyncIteratorDone:!1,[r](){return this},async next(){for(;!this.isAsyncIteratorDone;){const{value:e,done:r}=await n.next();if(r)this.isAsyncIteratorDone=!0;else{const n=t(e);if(o(n)?await n:n)return{value:e,done:!1}}}return{value:void 0,done:!0}}}),c=Array.isArray,i=Object.prototype.toString,f=n=>i.call(n),s=function(t,e,o,r,u){return e==n?((n,t,e,o)=>function(r){return n(r,t,e,o)})(t,o,r,u):o==n?((n,t,e,o)=>function(r){return n(t,r,e,o)})(t,e,r,u):r==n?((n,t,e,o)=>function(r){return n(t,e,r,o)})(t,e,o,u):((n,t,e,o)=>function(r){return n(t,e,o,r)})(t,e,o,r)},l=Promise.all.bind(Promise),h=function(n,t,e,o){const r=t.length;let u=n.length-1;for(;++o<r;)n[++u]=e(t[o],o,n);return n},a=function(n,t,e,o){const r=n.length;let u=-1;for(;++e<r;)o[++u]&&t.push(n[e]);return t},y=function(t,e){const r=t.length,u=[];let c=-1,i=-1;for(;++c<r;){const r=t[c],f=e(r);if(o(f))return l(h([f],t,e,c)).then(s(a,t,u,c-1,n));f&&(u[++i]=r)}return u},p=function(t,e,o,r){return e==n?((n,t,e)=>function(o){return n(o,t,e)})(t,o,r):o==n?((n,t,e)=>function(o){return n(t,o,e)})(t,e,r):((n,t,e)=>function(o){return n(t,e,o)})(t,e,o)},d=(n,t,e)=>n?t():e(),g=n=>function(){return n},b=(n,t,e)=>n[t](e),j=(n,t)=>function(){return n(t)},v=function(){},m=(n,t,e,o,r)=>function(){return n(t,e,o,r)},w=(n,t,e,o)=>n[t](e,o),x=function(n,t,e,o){o&&(n[t]=e)},A=function(n,t,e,o){const r=t.length;let u=n.length-1;for(;++o<r;)n[++u]=e(t[o],o,t);return n},S=function(i,h){return c(i)?y(i,h):"function"==typeof i?(n=>"[object GeneratorFunction]"==f(n))(i)?((n,t)=>function*(...o){yield*e(n(...o),t)})(i,h):(n=>"[object AsyncGeneratorFunction]"==f(n))(i)?((n,t)=>async function*(...e){yield*u(n(...e),t)})(i,h):((t,e)=>function(r,u){const c=e(u);return o(c)?c.then(p(d,n,(i=t,f=r,s=u,function(){return i(f,s)}),g(r))):c?t(r,u):r;var i,f,s})(i,h):null==i?i:"string"==typeof i||i.constructor==String?function(t,e){const r=y(t,e);return o(r)?r.then(p(b,n,"join","")):r.join("")}(i,h):i.constructor==Set?function(t,e){const r=new Set,u=r.add.bind(r),c=[];for(const i of t){const f=e(i,i,t);o(f)?c.push(f.then(p(d,n,j(u,i),v))):f&&r.add(i)}return 0==c.length?r:l(c).then(g(r))}(i,h):i.constructor==Map?function(t,e){const r=new Map,u=[];for(const[c,i]of t){const f=e(i,c,t);o(f)?u.push(f.then(p(d,n,m(w,r,"set",c,i),v))):f&&r.set(c,i)}return 0==u.length?r:l(u).then(g(r))}(i,h):"function"==typeof i.filter?i.filter(h):"function"==typeof i[t]?e(i[t](),h):"function"==typeof i[r]?u(i[r](),h):i.constructor==Object?function(t,e){const r={},u=[];for(const c in t){const i=t[c],f=e(i,c,t);o(f)?u.push(f.then(s(x,r,c,t[c],n))):f&&(r[c]=i)}return 0==u.length?r:l(u).then(g(r))}(i,h):i},I=function(...t){const e=t.pop();return t.length>0?S(t[0],e):(o=S,u=e,(r=n)==n?((n,t)=>function(e){return n(e,t)})(o,u):((n,t)=>function(e){return n(t,e)})(o,r));var o,r,u};return I.withIndex=t=>function(e){if(c(e))return function(t,e){const r=t.length,u=[];let c=-1,i=-1;for(;++c<r;){const r=t[c],f=e(r,c,t);if(o(f))return l(A([f],t,e,c)).then(s(a,t,u,c-1,n));f&&(u[++i]=r)}return u}(e,t);throw new TypeError(`${e} is not an Array`)},I}());
8
+ !function(n,t){"object"==typeof module?module.exports=t:"function"==typeof define?define((()=>t)):n.filter=t}("object"==typeof globalThis?globalThis:this,function(){"use strict";const n=Symbol.for("placeholder"),t=Symbol.iterator,e=(n,e)=>({[t](){return this},next(){let t=n.next();for(;!t.done;){const{value:o}=t;if(e(o))return{value:o,done:!1};t=n.next()}return t}}),o=n=>null!=n&&"function"==typeof n.then,r=Symbol.asyncIterator,u=(n,t)=>({isAsyncIteratorDone:!1,[r](){return this},async next(){for(;!this.isAsyncIteratorDone;){const{value:e,done:r}=await n.next();if(r)this.isAsyncIteratorDone=!0;else{const n=t(e);if(o(n)?await n:n)return{value:e,done:!1}}}return{value:void 0,done:!0}}}),c=Array.isArray,i=function(t,e,o,r,u){return e==n?((n,t,e,o)=>function(r){return n(r,t,e,o)})(t,o,r,u):o==n?((n,t,e,o)=>function(r){return n(t,r,e,o)})(t,e,r,u):r==n?((n,t,e,o)=>function(r){return n(t,e,r,o)})(t,e,o,u):((n,t,e,o)=>function(r){return n(t,e,o,r)})(t,e,o,r)},f=Promise.all.bind(Promise),s=function(n,t,e,o){const r=t.length;let u=n.length-1;for(;++o<r;)n[++u]=e(t[o],o,n);return n},l=function(n,t,e,o){const r=n.length;let u=-1;for(;++e<r;)o[++u]&&t.push(n[e]);return t},h=function(t,e){const r=t.length,u=[];let c=-1,h=-1;for(;++c<r;){const r=t[c],a=e(r,c,t);if(o(a))return f(s([a],t,e,c)).then(i(l,t,u,c-1,n));a&&(u[++h]=r)}return u},a=function(t,e,o,r){return e==n?((n,t,e)=>function(o){return n(o,t,e)})(t,o,r):o==n?((n,t,e)=>function(o){return n(t,o,e)})(t,e,r):((n,t,e)=>function(o){return n(t,e,o)})(t,e,o)},p=(n,t,e)=>n[t](e),y=n=>function(){return n},d=(n,t,e)=>n?t():e(),g=(n,t)=>function(){return n(t)},b=function(){},m=(n,t,e,o,r)=>function(){return n(t,e,o,r)},v=(n,t,e,o)=>n[t](e,o),x=function(n,t,e,o){o&&(n[t]=e)},S=function(s,l){return c(s)?h(s,l):null==s?s:"string"==typeof s||s.constructor==String?function(t,e){const r=h(t,e);return o(r)?r.then(a(p,n,"join","")):r.join("")}(s,l):s.constructor==Set?function(t,e){const r=new Set,u=r.add.bind(r),c=[];for(const i of t){const f=e(i,i,t);o(f)?c.push(f.then(a(d,n,g(u,i),b))):f&&r.add(i)}return 0==c.length?r:f(c).then(y(r))}(s,l):s.constructor==Map?function(t,e){const r=new Map,u=[];for(const[c,i]of t){const f=e(i,c,t);o(f)?u.push(f.then(a(d,n,m(v,r,"set",c,i),b))):f&&r.set(c,i)}return 0==u.length?r:f(u).then(y(r))}(s,l):"function"==typeof s.filter?s.filter(l):"function"==typeof s[t]?e(s[t](),l):"function"==typeof s[r]?u(s[r](),l):s.constructor==Object?function(t,e){const r={},u=[];for(const c in t){const f=t[c],s=e(f,c,t);o(s)?u.push(s.then(i(x,r,c,t[c],n))):s&&(r[c]=f)}return 0==u.length?r:f(u).then(y(r))}(s,l):s};return function(...t){const e=t.pop();return 0==t.length?(o=S,u=e,(r=n)==n?((n,t)=>function(e){return n(e,t)})(o,u):((n,t)=>function(e){return n(t,e)})(o,r)):S(t[0],e);var o,r,u}}());
@@ -1,7 +1,7 @@
1
1
  /**
2
- * rubico v1.9.7
2
+ * rubico v2.0.0
3
3
  * https://github.com/a-synchronous/rubico
4
- * (c) 2019-2021 Richard Tong
4
+ * (c) 2019-2023 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
6
6
  */
7
- const __=Symbol.for("placeholder"),curry2ResolveArg0=(r,t)=>function(n){return r(n,t)},curry2ResolveArg1=(r,t)=>function(n){return r(t,n)},curry2=function(r,t,n){return t==__?curry2ResolveArg0(r,n):curry2ResolveArg1(r,t)},symbolIterator=Symbol.iterator,FilteringIterator=(r,t)=>({[symbolIterator](){return this},next(){let n=r.next();for(;!n.done;){const{value:e}=n;if(t(e))return{value:e,done:!1};n=r.next()}return n}}),isPromise=r=>null!=r&&"function"==typeof r.then,symbolAsyncIterator=Symbol.asyncIterator,FilteringAsyncIterator=(r,t)=>({isAsyncIteratorDone:!1,[symbolAsyncIterator](){return this},async next(){for(;!this.isAsyncIteratorDone;){const{value:n,done:e}=await r.next();if(e)this.isAsyncIteratorDone=!0;else{const r=t(n);if(isPromise(r)?await r:r)return{value:n,done:!1}}}return{value:void 0,done:!0}}}),isArray=Array.isArray,objectProto=Object.prototype,nativeObjectToString=objectProto.toString,objectToString=r=>nativeObjectToString.call(r),generatorFunctionTag="[object GeneratorFunction]",isGeneratorFunction=r=>objectToString(r)==generatorFunctionTag,asyncGeneratorFunctionTag="[object AsyncGeneratorFunction]",isAsyncGeneratorFunction=r=>objectToString(r)==asyncGeneratorFunctionTag,curry4ResolveArg0=(r,t,n,e)=>function(o){return r(o,t,n,e)},curry4ResolveArg1=(r,t,n,e)=>function(o){return r(t,o,n,e)},curry4ResolveArg2=(r,t,n,e)=>function(o){return r(t,n,o,e)},curry4ResolveArg3=(r,t,n,e)=>function(o){return r(t,n,e,o)},curry4=function(r,t,n,e,o){return t==__?curry4ResolveArg0(r,n,e,o):n==__?curry4ResolveArg1(r,t,e,o):e==__?curry4ResolveArg2(r,t,n,o):curry4ResolveArg3(r,t,n,e)},promiseAll=Promise.all.bind(Promise),arrayExtendMap=function(r,t,n,e){const o=t.length;let i=r.length-1;for(;++e<o;)r[++i]=n(t[e],e,r);return r},arrayFilterByConditions=function(r,t,n,e){const o=r.length;let i=-1;for(;++n<o;)e[++i]&&t.push(r[n]);return t},arrayFilter=function(r,t){const n=r.length,e=[];let o=-1,i=-1;for(;++o<n;){const n=r[o],c=t(n);if(isPromise(c))return promiseAll(arrayExtendMap([c],r,t,o)).then(curry4(arrayFilterByConditions,r,e,o-1,__));c&&(e[++i]=n)}return e},generatorFunctionFilter=(r,t)=>function*(...n){yield*FilteringIterator(r(...n),t)},asyncGeneratorFunctionFilter=(r,t)=>async function*(...n){yield*FilteringAsyncIterator(r(...n),t)},curry3ResolveArg0=(r,t,n)=>function(e){return r(e,t,n)},curry3ResolveArg1=(r,t,n)=>function(e){return r(t,e,n)},curry3ResolveArg2=(r,t,n)=>function(e){return r(t,n,e)},curry3=function(r,t,n,e){return t==__?curry3ResolveArg0(r,n,e):n==__?curry3ResolveArg1(r,t,e):curry3ResolveArg2(r,t,n)},thunkify2=(r,t,n)=>function(){return r(t,n)},thunkConditional=(r,t,n)=>r?t():n(),always=r=>function(){return r},reducerFilter=(r,t)=>function(n,e){const o=t(e);return isPromise(o)?o.then(curry3(thunkConditional,__,(i=r,c=n,u=e,function(){return i(c,u)}),always(n))):o?r(n,e):n;var i,c,u},callPropUnary=(r,t,n)=>r[t](n),stringFilter=function(r,t){const n=arrayFilter(r,t);return isPromise(n)?n.then(curry3(callPropUnary,__,"join","")):n.join("")},thunkify1=(r,t)=>function(){return r(t)},noop=function(){},setFilter=function(r,t){const n=new Set,e=n.add.bind(n),o=[];for(const i of r){const c=t(i,i,r);isPromise(c)?o.push(c.then(curry3(thunkConditional,__,thunkify1(e,i),noop))):c&&n.add(i)}return 0==o.length?n:promiseAll(o).then(always(n))},thunkify4=(r,t,n,e,o)=>function(){return r(t,n,e,o)},callPropBinary=(r,t,n,e)=>r[t](n,e),mapFilter=function(r,t){const n=new Map,e=[];for(const[o,i]of r){const c=t(i,o,r);isPromise(c)?e.push(c.then(curry3(thunkConditional,__,thunkify4(callPropBinary,n,"set",o,i),noop))):c&&n.set(o,i)}return 0==e.length?n:promiseAll(e).then(always(n))},objectSetIf=function(r,t,n,e){e&&(r[t]=n)},objectFilter=function(r,t){const n={},e=[];for(const o in r){const i=r[o],c=t(i,o,r);isPromise(c)?e.push(c.then(curry4(objectSetIf,n,o,r[o],__))):c&&(n[o]=i)}return 0==e.length?n:promiseAll(e).then(always(n))},arrayExtendMapWithIndex=function(r,t,n,e){const o=t.length;let i=r.length-1;for(;++e<o;)r[++i]=n(t[e],e,t);return r},arrayFilterWithIndex=function(r,t){const n=r.length,e=[];let o=-1,i=-1;for(;++o<n;){const n=r[o],c=t(n,o,r);if(isPromise(c))return promiseAll(arrayExtendMapWithIndex([c],r,t,o)).then(curry4(arrayFilterByConditions,r,e,o-1,__));c&&(e[++i]=n)}return e},_filter=function(r,t){return isArray(r)?arrayFilter(r,t):"function"==typeof r?isGeneratorFunction(r)?generatorFunctionFilter(r,t):isAsyncGeneratorFunction(r)?asyncGeneratorFunctionFilter(r,t):reducerFilter(r,t):null==r?r:"string"==typeof r||r.constructor==String?stringFilter(r,t):r.constructor==Set?setFilter(r,t):r.constructor==Map?mapFilter(r,t):"function"==typeof r.filter?r.filter(t):"function"==typeof r[symbolIterator]?FilteringIterator(r[symbolIterator](),t):"function"==typeof r[symbolAsyncIterator]?FilteringAsyncIterator(r[symbolAsyncIterator](),t):r.constructor==Object?objectFilter(r,t):r},filter=function(...r){const t=r.pop();return r.length>0?_filter(r[0],t):(n=_filter,o=t,(e=__)==__?curry2ResolveArg0(n,o):curry2ResolveArg1(n,e));var n,e,o};filter.withIndex=r=>function(t){if(isArray(t))return arrayFilterWithIndex(t,r);throw new TypeError(`${t} is not an Array`)};export default filter;
7
+ const __=Symbol.for("placeholder"),curry2ResolveArg0=(r,t)=>function(n){return r(n,t)},curry2ResolveArg1=(r,t)=>function(n){return r(t,n)},curry2=function(r,t,n){return t==__?curry2ResolveArg0(r,n):curry2ResolveArg1(r,t)},symbolIterator=Symbol.iterator,FilteringIterator=(r,t)=>({[symbolIterator](){return this},next(){let n=r.next();for(;!n.done;){const{value:e}=n;if(t(e))return{value:e,done:!1};n=r.next()}return n}}),isPromise=r=>null!=r&&"function"==typeof r.then,symbolAsyncIterator=Symbol.asyncIterator,FilteringAsyncIterator=(r,t)=>({isAsyncIteratorDone:!1,[symbolAsyncIterator](){return this},async next(){for(;!this.isAsyncIteratorDone;){const{value:n,done:e}=await r.next();if(e)this.isAsyncIteratorDone=!0;else{const r=t(n);if(isPromise(r)?await r:r)return{value:n,done:!1}}}return{value:void 0,done:!0}}}),isArray=Array.isArray,curry4ResolveArg0=(r,t,n,e)=>function(o){return r(o,t,n,e)},curry4ResolveArg1=(r,t,n,e)=>function(o){return r(t,o,n,e)},curry4ResolveArg2=(r,t,n,e)=>function(o){return r(t,n,o,e)},curry4ResolveArg3=(r,t,n,e)=>function(o){return r(t,n,e,o)},curry4=function(r,t,n,e,o){return t==__?curry4ResolveArg0(r,n,e,o):n==__?curry4ResolveArg1(r,t,e,o):e==__?curry4ResolveArg2(r,t,n,o):curry4ResolveArg3(r,t,n,e)},promiseAll=Promise.all.bind(Promise),arrayExtendMap=function(r,t,n,e){const o=t.length;let i=r.length-1;for(;++e<o;)r[++i]=n(t[e],e,r);return r},arrayFilterByConditions=function(r,t,n,e){const o=r.length;let i=-1;for(;++n<o;)e[++i]&&t.push(r[n]);return t},arrayFilter=function(r,t){const n=r.length,e=[];let o=-1,i=-1;for(;++o<n;){const n=r[o],u=t(n,o,r);if(isPromise(u))return promiseAll(arrayExtendMap([u],r,t,o)).then(curry4(arrayFilterByConditions,r,e,o-1,__));u&&(e[++i]=n)}return e},curry3ResolveArg0=(r,t,n)=>function(e){return r(e,t,n)},curry3ResolveArg1=(r,t,n)=>function(e){return r(t,e,n)},curry3ResolveArg2=(r,t,n)=>function(e){return r(t,n,e)},curry3=function(r,t,n,e){return t==__?curry3ResolveArg0(r,n,e):n==__?curry3ResolveArg1(r,t,e):curry3ResolveArg2(r,t,n)},callPropUnary=(r,t,n)=>r[t](n),stringFilter=function(r,t){const n=arrayFilter(r,t);return isPromise(n)?n.then(curry3(callPropUnary,__,"join","")):n.join("")},always=r=>function(){return r},thunkConditional=(r,t,n)=>r?t():n(),thunkify1=(r,t)=>function(){return r(t)},noop=function(){},setFilter=function(r,t){const n=new Set,e=n.add.bind(n),o=[];for(const i of r){const u=t(i,i,r);isPromise(u)?o.push(u.then(curry3(thunkConditional,__,thunkify1(e,i),noop))):u&&n.add(i)}return 0==o.length?n:promiseAll(o).then(always(n))},thunkify4=(r,t,n,e,o)=>function(){return r(t,n,e,o)},callPropBinary=(r,t,n,e)=>r[t](n,e),mapFilter=function(r,t){const n=new Map,e=[];for(const[o,i]of r){const u=t(i,o,r);isPromise(u)?e.push(u.then(curry3(thunkConditional,__,thunkify4(callPropBinary,n,"set",o,i),noop))):u&&n.set(o,i)}return 0==e.length?n:promiseAll(e).then(always(n))},objectSetIf=function(r,t,n,e){e&&(r[t]=n)},objectFilter=function(r,t){const n={},e=[];for(const o in r){const i=r[o],u=t(i,o,r);isPromise(u)?e.push(u.then(curry4(objectSetIf,n,o,r[o],__))):u&&(n[o]=i)}return 0==e.length?n:promiseAll(e).then(always(n))},_filter=function(r,t){return isArray(r)?arrayFilter(r,t):null==r?r:"string"==typeof r||r.constructor==String?stringFilter(r,t):r.constructor==Set?setFilter(r,t):r.constructor==Map?mapFilter(r,t):"function"==typeof r.filter?r.filter(t):"function"==typeof r[symbolIterator]?FilteringIterator(r[symbolIterator](),t):"function"==typeof r[symbolAsyncIterator]?FilteringAsyncIterator(r[symbolAsyncIterator](),t):r.constructor==Object?objectFilter(r,t):r},filter=function(...r){const t=r.pop();return 0==r.length?(n=_filter,o=t,(e=__)==__?curry2ResolveArg0(n,o):curry2ResolveArg1(n,e)):_filter(r[0],t);var n,e,o};export default filter;
package/dist/filter.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
- * rubico v1.9.7
2
+ * rubico v2.0.0
3
3
  * https://github.com/a-synchronous/rubico
4
- * (c) 2019-2021 Richard Tong
4
+ * (c) 2019-2023 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
6
6
  */
7
7
  const __ = Symbol.for('placeholder')
@@ -72,20 +72,6 @@ const FilteringAsyncIterator = (asyncIterator, predicate) => ({
72
72
 
73
73
  const isArray = Array.isArray
74
74
 
75
- const objectProto = Object.prototype
76
-
77
- const nativeObjectToString = objectProto.toString
78
-
79
- const objectToString = value => nativeObjectToString.call(value)
80
-
81
- const generatorFunctionTag = '[object GeneratorFunction]'
82
-
83
- const isGeneratorFunction = value => objectToString(value) == generatorFunctionTag
84
-
85
- const asyncGeneratorFunctionTag = '[object AsyncGeneratorFunction]'
86
-
87
- const isAsyncGeneratorFunction = value => objectToString(value) == asyncGeneratorFunctionTag
88
-
89
75
  // argument resolver for curry4
90
76
  const curry4ResolveArg0 = (
91
77
  baseFunc, arg1, arg2, arg3,
@@ -160,12 +146,11 @@ const arrayFilter = function (array, predicate) {
160
146
  resultIndex = -1
161
147
  while (++index < arrayLength) {
162
148
  const item = array[index],
163
- shouldIncludeItem = predicate(item)
149
+ shouldIncludeItem = predicate(item, index, array)
164
150
  if (isPromise(shouldIncludeItem)) {
165
151
  return promiseAll(
166
- arrayExtendMap(
167
- [shouldIncludeItem], array, predicate, index)).then(
168
- curry4(arrayFilterByConditions, array, result, index - 1, __))
152
+ arrayExtendMap([shouldIncludeItem], array, predicate, index)
153
+ ).then(curry4(arrayFilterByConditions, array, result, index - 1, __))
169
154
  }
170
155
  if (shouldIncludeItem) {
171
156
  result[++resultIndex] = item
@@ -174,18 +159,6 @@ const arrayFilter = function (array, predicate) {
174
159
  return result
175
160
  }
176
161
 
177
- const generatorFunctionFilter = (
178
- generatorFunction, predicate,
179
- ) => function* filteringGeneratorFunction(...args) {
180
- yield* FilteringIterator(generatorFunction(...args), predicate)
181
- }
182
-
183
- const asyncGeneratorFunctionFilter = (
184
- asyncGeneratorFunction, predicate,
185
- ) => async function* filteringAsyncGeneratorFunction(...args) {
186
- yield* FilteringAsyncIterator(asyncGeneratorFunction(...args), predicate)
187
- }
188
-
189
162
  // argument resolver for curry3
190
163
  const curry3ResolveArg0 = (
191
164
  baseFunc, arg1, arg2,
@@ -217,29 +190,6 @@ const curry3 = function (baseFunc, arg0, arg1, arg2) {
217
190
  return curry3ResolveArg2(baseFunc, arg0, arg1)
218
191
  }
219
192
 
220
- const thunkify2 = (func, arg0, arg1) => function thunk() {
221
- return func(arg0, arg1)
222
- }
223
-
224
- const thunkConditional = (
225
- conditionalExpression, thunkOnTruthy, thunkOnFalsy,
226
- ) => conditionalExpression ? thunkOnTruthy() : thunkOnFalsy()
227
-
228
- const always = value => function getter() { return value }
229
-
230
- const reducerFilter = (
231
- reducer, predicate,
232
- ) => function filteringReducer(result, item) {
233
- const shouldInclude = predicate(item)
234
- return isPromise(shouldInclude)
235
- ? shouldInclude.then(curry3(
236
- thunkConditional,
237
- __,
238
- thunkify2(reducer, result, item),
239
- always(result)))
240
- : shouldInclude ? reducer(result, item) : result
241
- }
242
-
243
193
  const callPropUnary = (value, property, arg0) => value[property](arg0)
244
194
 
245
195
  const stringFilter = function (string, predicate) {
@@ -249,6 +199,12 @@ const stringFilter = function (string, predicate) {
249
199
  : filteredCharactersArray.join('')
250
200
  }
251
201
 
202
+ const always = value => function getter() { return value }
203
+
204
+ const thunkConditional = (
205
+ conditionalExpression, thunkOnTruthy, thunkOnFalsy,
206
+ ) => conditionalExpression ? thunkOnTruthy() : thunkOnFalsy()
207
+
252
208
  const thunkify1 = (func, arg0) => function thunk() {
253
209
  return func(arg0)
254
210
  }
@@ -323,53 +279,10 @@ const objectFilter = function (object, predicate) {
323
279
  : promiseAll(promises).then(always(result))
324
280
  }
325
281
 
326
- const arrayExtendMapWithIndex = function (
327
- array, values, valuesMapper, valuesIndex,
328
- ) {
329
- const valuesLength = values.length
330
- let arrayIndex = array.length - 1
331
-
332
- while (++valuesIndex < valuesLength) {
333
- array[++arrayIndex] = valuesMapper(
334
- values[valuesIndex], valuesIndex, values)
335
- }
336
- return array
337
- }
338
-
339
- const arrayFilterWithIndex = function (array, predicate) {
340
- const arrayLength = array.length,
341
- result = []
342
- let index = -1,
343
- resultIndex = -1
344
- while (++index < arrayLength) {
345
- const item = array[index],
346
- shouldIncludeItem = predicate(item, index, array)
347
- if (isPromise(shouldIncludeItem)) {
348
- return promiseAll(
349
- arrayExtendMapWithIndex(
350
- [shouldIncludeItem], array, predicate, index)).then(
351
- curry4(arrayFilterByConditions, array, result, index - 1, __))
352
- }
353
- if (shouldIncludeItem) {
354
- result[++resultIndex] = item
355
- }
356
- }
357
- return result
358
- }
359
-
360
282
  const _filter = function (value, predicate) {
361
283
  if (isArray(value)) {
362
284
  return arrayFilter(value, predicate)
363
285
  }
364
- if (typeof value == 'function') {
365
- if (isGeneratorFunction(value)) {
366
- return generatorFunctionFilter(value, predicate)
367
- }
368
- if (isAsyncGeneratorFunction(value)) {
369
- return asyncGeneratorFunctionFilter(value, predicate)
370
- }
371
- return reducerFilter(value, predicate)
372
- }
373
286
  if (value == null) {
374
287
  return value
375
288
  }
@@ -400,17 +313,10 @@ const _filter = function (value, predicate) {
400
313
 
401
314
  const filter = function (...args) {
402
315
  const predicate = args.pop()
403
- if (args.length > 0) {
404
- return _filter(args[0], predicate)
405
- }
406
- return curry2(_filter, __, predicate)
407
- }
408
-
409
- filter.withIndex = predicate => function filteringWithIndex(value) {
410
- if (isArray(value)) {
411
- return arrayFilterWithIndex(value, predicate)
316
+ if (args.length == 0) {
317
+ return curry2(_filter, __, predicate)
412
318
  }
413
- throw new TypeError(`${value} is not an Array`)
319
+ return _filter(args[0], predicate)
414
320
  }
415
321
 
416
322
  export default filter