rubico 2.11.0 → 2.12.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 (361) hide show
  1. package/README.md +16 -20
  2. package/Transducer.js +37 -58
  3. package/__.js +3 -3
  4. package/always.js +4 -4
  5. package/and.js +34 -26
  6. package/assign.js +2 -2
  7. package/compose.js +1 -0
  8. package/curry.js +48 -28
  9. package/dist/Transducer.es.js +1 -1
  10. package/dist/Transducer.es.min.js +1 -1
  11. package/dist/Transducer.js +1 -1
  12. package/dist/Transducer.min.js +1 -1
  13. package/dist/Transducer.mjs +1 -1
  14. package/dist/__.es.js +1 -1
  15. package/dist/__.es.min.js +1 -1
  16. package/dist/__.js +1 -1
  17. package/dist/__.min.js +1 -1
  18. package/dist/__.mjs +1 -1
  19. package/dist/all.es.js +1 -1
  20. package/dist/all.es.min.js +1 -1
  21. package/dist/all.js +1 -1
  22. package/dist/all.min.js +1 -1
  23. package/dist/all.mjs +1 -1
  24. package/dist/always.es.js +1 -1
  25. package/dist/always.es.min.js +1 -1
  26. package/dist/always.js +1 -1
  27. package/dist/always.min.js +1 -1
  28. package/dist/always.mjs +1 -1
  29. package/dist/and.es.js +1 -1
  30. package/dist/and.es.min.js +1 -1
  31. package/dist/and.js +1 -1
  32. package/dist/and.min.js +1 -1
  33. package/dist/and.mjs +1 -1
  34. package/dist/assign.es.js +1 -1
  35. package/dist/assign.es.min.js +1 -1
  36. package/dist/assign.js +1 -1
  37. package/dist/assign.min.js +1 -1
  38. package/dist/assign.mjs +1 -1
  39. package/dist/compose.es.js +1 -1
  40. package/dist/compose.es.min.js +1 -1
  41. package/dist/compose.js +1 -1
  42. package/dist/compose.min.js +1 -1
  43. package/dist/compose.mjs +1 -1
  44. package/dist/curry.es.js +1 -1
  45. package/dist/curry.es.min.js +1 -1
  46. package/dist/curry.js +1 -1
  47. package/dist/curry.min.js +1 -1
  48. package/dist/curry.mjs +1 -1
  49. package/dist/eq.es.js +1 -1
  50. package/dist/eq.es.min.js +1 -1
  51. package/dist/eq.js +1 -1
  52. package/dist/eq.min.js +1 -1
  53. package/dist/eq.mjs +1 -1
  54. package/dist/every.es.js +1 -1
  55. package/dist/every.es.min.js +1 -1
  56. package/dist/every.js +1 -1
  57. package/dist/every.min.js +1 -1
  58. package/dist/every.mjs +1 -1
  59. package/dist/filter.es.js +113 -19
  60. package/dist/filter.es.min.js +2 -2
  61. package/dist/filter.js +113 -19
  62. package/dist/filter.min.js +2 -2
  63. package/dist/filter.mjs +113 -19
  64. package/dist/flatMap.es.js +1 -1
  65. package/dist/flatMap.es.min.js +1 -1
  66. package/dist/flatMap.js +1 -1
  67. package/dist/flatMap.min.js +1 -1
  68. package/dist/flatMap.mjs +1 -1
  69. package/dist/forEach.es.js +1 -1
  70. package/dist/forEach.es.min.js +1 -1
  71. package/dist/forEach.js +1 -1
  72. package/dist/forEach.min.js +1 -1
  73. package/dist/forEach.mjs +1 -1
  74. package/dist/get.es.js +1 -1
  75. package/dist/get.es.min.js +1 -1
  76. package/dist/get.js +1 -1
  77. package/dist/get.min.js +1 -1
  78. package/dist/get.mjs +1 -1
  79. package/dist/gt.es.js +1 -1
  80. package/dist/gt.es.min.js +1 -1
  81. package/dist/gt.js +1 -1
  82. package/dist/gt.min.js +1 -1
  83. package/dist/gt.mjs +1 -1
  84. package/dist/gte.es.js +1 -1
  85. package/dist/gte.es.min.js +1 -1
  86. package/dist/gte.js +1 -1
  87. package/dist/gte.min.js +1 -1
  88. package/dist/gte.mjs +1 -1
  89. package/dist/lt.es.js +1 -1
  90. package/dist/lt.es.min.js +1 -1
  91. package/dist/lt.js +1 -1
  92. package/dist/lt.min.js +1 -1
  93. package/dist/lt.mjs +1 -1
  94. package/dist/lte.es.js +1 -1
  95. package/dist/lte.es.min.js +1 -1
  96. package/dist/lte.js +1 -1
  97. package/dist/lte.min.js +1 -1
  98. package/dist/lte.mjs +1 -1
  99. package/dist/map.es.js +1 -1
  100. package/dist/map.es.min.js +1 -1
  101. package/dist/map.js +1 -1
  102. package/dist/map.min.js +1 -1
  103. package/dist/map.mjs +1 -1
  104. package/dist/not.es.js +1 -1
  105. package/dist/not.es.min.js +1 -1
  106. package/dist/not.js +1 -1
  107. package/dist/not.min.js +1 -1
  108. package/dist/not.mjs +1 -1
  109. package/dist/omit.es.js +1 -1
  110. package/dist/omit.es.min.js +1 -1
  111. package/dist/omit.js +1 -1
  112. package/dist/omit.min.js +1 -1
  113. package/dist/omit.mjs +1 -1
  114. package/dist/or.es.js +1 -1
  115. package/dist/or.es.min.js +1 -1
  116. package/dist/or.js +1 -1
  117. package/dist/or.min.js +1 -1
  118. package/dist/or.mjs +1 -1
  119. package/dist/pick.es.js +1 -1
  120. package/dist/pick.es.min.js +1 -1
  121. package/dist/pick.js +1 -1
  122. package/dist/pick.min.js +1 -1
  123. package/dist/pick.mjs +1 -1
  124. package/dist/pipe.es.js +1 -1
  125. package/dist/pipe.es.min.js +1 -1
  126. package/dist/pipe.js +1 -1
  127. package/dist/pipe.min.js +1 -1
  128. package/dist/pipe.mjs +1 -1
  129. package/dist/reduce.es.js +1 -1
  130. package/dist/reduce.es.min.js +1 -1
  131. package/dist/reduce.js +1 -1
  132. package/dist/reduce.min.js +1 -1
  133. package/dist/reduce.mjs +1 -1
  134. package/dist/rubico.es.js +57 -19
  135. package/dist/rubico.es.min.js +2 -2
  136. package/dist/rubico.global.js +57 -19
  137. package/dist/rubico.global.min.js +2 -2
  138. package/dist/rubico.js +57 -19
  139. package/dist/rubico.min.js +2 -2
  140. package/dist/rubico.mjs +57 -19
  141. package/dist/set.es.js +1 -1
  142. package/dist/set.es.min.js +1 -1
  143. package/dist/set.js +1 -1
  144. package/dist/set.min.js +1 -1
  145. package/dist/set.mjs +1 -1
  146. package/dist/some.es.js +1 -1
  147. package/dist/some.es.min.js +1 -1
  148. package/dist/some.js +1 -1
  149. package/dist/some.min.js +1 -1
  150. package/dist/some.mjs +1 -1
  151. package/dist/switchCase.es.js +1 -1
  152. package/dist/switchCase.es.min.js +1 -1
  153. package/dist/switchCase.js +1 -1
  154. package/dist/switchCase.min.js +1 -1
  155. package/dist/switchCase.mjs +1 -1
  156. package/dist/tap.es.js +1 -1
  157. package/dist/tap.es.min.js +1 -1
  158. package/dist/tap.js +1 -1
  159. package/dist/tap.min.js +1 -1
  160. package/dist/tap.mjs +1 -1
  161. package/dist/thunkify.es.js +1 -1
  162. package/dist/thunkify.es.min.js +1 -1
  163. package/dist/thunkify.js +1 -1
  164. package/dist/thunkify.min.js +1 -1
  165. package/dist/thunkify.mjs +1 -1
  166. package/dist/transform.es.js +1 -1
  167. package/dist/transform.es.min.js +1 -1
  168. package/dist/transform.js +1 -1
  169. package/dist/transform.min.js +1 -1
  170. package/dist/transform.mjs +1 -1
  171. package/dist/tryCatch.es.js +1 -1
  172. package/dist/tryCatch.es.min.js +1 -1
  173. package/dist/tryCatch.js +1 -1
  174. package/dist/tryCatch.min.js +1 -1
  175. package/dist/tryCatch.mjs +1 -1
  176. package/dist/x/append.es.js +1 -1
  177. package/dist/x/append.es.min.js +1 -1
  178. package/dist/x/append.js +1 -1
  179. package/dist/x/append.min.js +1 -1
  180. package/dist/x/append.mjs +1 -1
  181. package/dist/x/callProp.es.js +1 -1
  182. package/dist/x/callProp.es.min.js +1 -1
  183. package/dist/x/callProp.js +1 -1
  184. package/dist/x/callProp.min.js +1 -1
  185. package/dist/x/callProp.mjs +1 -1
  186. package/dist/x/defaultsDeep.es.js +1 -1
  187. package/dist/x/defaultsDeep.es.min.js +1 -1
  188. package/dist/x/defaultsDeep.js +1 -1
  189. package/dist/x/defaultsDeep.min.js +1 -1
  190. package/dist/x/defaultsDeep.mjs +1 -1
  191. package/dist/x/differenceWith.es.js +1 -1
  192. package/dist/x/differenceWith.es.min.js +1 -1
  193. package/dist/x/differenceWith.js +1 -1
  194. package/dist/x/differenceWith.min.js +1 -1
  195. package/dist/x/differenceWith.mjs +1 -1
  196. package/dist/x/filterOut.es.js +113 -19
  197. package/dist/x/filterOut.es.min.js +2 -2
  198. package/dist/x/filterOut.js +113 -19
  199. package/dist/x/filterOut.min.js +2 -2
  200. package/dist/x/filterOut.mjs +113 -19
  201. package/dist/x/find.es.js +1 -1
  202. package/dist/x/find.es.min.js +1 -1
  203. package/dist/x/find.js +1 -1
  204. package/dist/x/find.min.js +1 -1
  205. package/dist/x/find.mjs +1 -1
  206. package/dist/x/findIndex.es.js +1 -1
  207. package/dist/x/findIndex.es.min.js +1 -1
  208. package/dist/x/findIndex.js +1 -1
  209. package/dist/x/findIndex.min.js +1 -1
  210. package/dist/x/findIndex.mjs +1 -1
  211. package/dist/x/first.es.js +1 -1
  212. package/dist/x/first.es.min.js +1 -1
  213. package/dist/x/first.js +1 -1
  214. package/dist/x/first.min.js +1 -1
  215. package/dist/x/first.mjs +1 -1
  216. package/dist/x/flatten.es.js +1 -1
  217. package/dist/x/flatten.es.min.js +1 -1
  218. package/dist/x/flatten.js +1 -1
  219. package/dist/x/flatten.min.js +1 -1
  220. package/dist/x/flatten.mjs +1 -1
  221. package/dist/x/groupBy.es.js +1 -1
  222. package/dist/x/groupBy.es.min.js +1 -1
  223. package/dist/x/groupBy.js +1 -1
  224. package/dist/x/groupBy.min.js +1 -1
  225. package/dist/x/groupBy.mjs +1 -1
  226. package/dist/x/has.es.js +1 -1
  227. package/dist/x/has.es.min.js +1 -1
  228. package/dist/x/has.js +1 -1
  229. package/dist/x/has.min.js +1 -1
  230. package/dist/x/has.mjs +1 -1
  231. package/dist/x/identity.es.js +1 -1
  232. package/dist/x/identity.es.min.js +1 -1
  233. package/dist/x/identity.js +1 -1
  234. package/dist/x/identity.min.js +1 -1
  235. package/dist/x/identity.mjs +1 -1
  236. package/dist/x/includes.es.js +1 -1
  237. package/dist/x/includes.es.min.js +1 -1
  238. package/dist/x/includes.js +1 -1
  239. package/dist/x/includes.min.js +1 -1
  240. package/dist/x/includes.mjs +1 -1
  241. package/dist/x/isDeepEqual.es.js +1 -1
  242. package/dist/x/isDeepEqual.es.min.js +1 -1
  243. package/dist/x/isDeepEqual.js +1 -1
  244. package/dist/x/isDeepEqual.min.js +1 -1
  245. package/dist/x/isDeepEqual.mjs +1 -1
  246. package/dist/x/isEmpty.es.js +1 -1
  247. package/dist/x/isEmpty.es.min.js +1 -1
  248. package/dist/x/isEmpty.js +1 -1
  249. package/dist/x/isEmpty.min.js +1 -1
  250. package/dist/x/isEmpty.mjs +1 -1
  251. package/dist/x/isEqual.es.js +1 -1
  252. package/dist/x/isEqual.es.min.js +1 -1
  253. package/dist/x/isEqual.js +1 -1
  254. package/dist/x/isEqual.min.js +1 -1
  255. package/dist/x/isEqual.mjs +1 -1
  256. package/dist/x/isFunction.es.js +1 -1
  257. package/dist/x/isFunction.es.min.js +1 -1
  258. package/dist/x/isFunction.js +1 -1
  259. package/dist/x/isFunction.min.js +1 -1
  260. package/dist/x/isFunction.mjs +1 -1
  261. package/dist/x/isIn.es.js +1 -1
  262. package/dist/x/isIn.es.min.js +1 -1
  263. package/dist/x/isIn.js +1 -1
  264. package/dist/x/isIn.min.js +1 -1
  265. package/dist/x/isIn.mjs +1 -1
  266. package/dist/x/isObject.es.js +1 -1
  267. package/dist/x/isObject.es.min.js +1 -1
  268. package/dist/x/isObject.js +1 -1
  269. package/dist/x/isObject.min.js +1 -1
  270. package/dist/x/isObject.mjs +1 -1
  271. package/dist/x/isString.es.js +1 -1
  272. package/dist/x/isString.es.min.js +1 -1
  273. package/dist/x/isString.js +1 -1
  274. package/dist/x/isString.min.js +1 -1
  275. package/dist/x/isString.mjs +1 -1
  276. package/dist/x/keys.es.js +1 -1
  277. package/dist/x/keys.es.min.js +1 -1
  278. package/dist/x/keys.js +1 -1
  279. package/dist/x/keys.min.js +1 -1
  280. package/dist/x/keys.mjs +1 -1
  281. package/dist/x/last.es.js +1 -1
  282. package/dist/x/last.es.min.js +1 -1
  283. package/dist/x/last.js +1 -1
  284. package/dist/x/last.min.js +1 -1
  285. package/dist/x/last.mjs +1 -1
  286. package/dist/x/maxBy.es.js +1 -1
  287. package/dist/x/maxBy.es.min.js +1 -1
  288. package/dist/x/maxBy.js +1 -1
  289. package/dist/x/maxBy.min.js +1 -1
  290. package/dist/x/maxBy.mjs +1 -1
  291. package/dist/x/noop.es.js +1 -1
  292. package/dist/x/noop.es.min.js +1 -1
  293. package/dist/x/noop.js +1 -1
  294. package/dist/x/noop.min.js +1 -1
  295. package/dist/x/noop.mjs +1 -1
  296. package/dist/x/pluck.es.js +1 -1
  297. package/dist/x/pluck.es.min.js +1 -1
  298. package/dist/x/pluck.js +1 -1
  299. package/dist/x/pluck.min.js +1 -1
  300. package/dist/x/pluck.mjs +1 -1
  301. package/dist/x/prepend.es.js +1 -1
  302. package/dist/x/prepend.es.min.js +1 -1
  303. package/dist/x/prepend.js +1 -1
  304. package/dist/x/prepend.min.js +1 -1
  305. package/dist/x/prepend.mjs +1 -1
  306. package/dist/x/size.es.js +1 -1
  307. package/dist/x/size.es.min.js +1 -1
  308. package/dist/x/size.js +1 -1
  309. package/dist/x/size.min.js +1 -1
  310. package/dist/x/size.mjs +1 -1
  311. package/dist/x/trace.es.js +1 -1
  312. package/dist/x/trace.es.min.js +1 -1
  313. package/dist/x/trace.js +1 -1
  314. package/dist/x/trace.min.js +1 -1
  315. package/dist/x/trace.mjs +1 -1
  316. package/dist/x/unionWith.es.js +1 -1
  317. package/dist/x/unionWith.es.min.js +1 -1
  318. package/dist/x/unionWith.js +1 -1
  319. package/dist/x/unionWith.min.js +1 -1
  320. package/dist/x/unionWith.mjs +1 -1
  321. package/dist/x/uniq.es.js +1 -1
  322. package/dist/x/uniq.es.min.js +1 -1
  323. package/dist/x/uniq.js +1 -1
  324. package/dist/x/uniq.min.js +1 -1
  325. package/dist/x/uniq.mjs +1 -1
  326. package/dist/x/unless.es.js +1 -1
  327. package/dist/x/unless.es.min.js +1 -1
  328. package/dist/x/unless.js +1 -1
  329. package/dist/x/unless.min.js +1 -1
  330. package/dist/x/unless.mjs +1 -1
  331. package/dist/x/values.es.js +1 -1
  332. package/dist/x/values.es.min.js +1 -1
  333. package/dist/x/values.js +1 -1
  334. package/dist/x/values.min.js +1 -1
  335. package/dist/x/values.mjs +1 -1
  336. package/dist/x/when.es.js +1 -1
  337. package/dist/x/when.es.min.js +1 -1
  338. package/dist/x/when.js +1 -1
  339. package/dist/x/when.min.js +1 -1
  340. package/dist/x/when.mjs +1 -1
  341. package/eq.js +29 -30
  342. package/es.js +57 -19
  343. package/every.js +14 -20
  344. package/filter.js +38 -75
  345. package/flatMap.js +13 -13
  346. package/forEach.js +8 -8
  347. package/get.js +3 -3
  348. package/gt.js +18 -25
  349. package/gte.js +22 -29
  350. package/index.js +57 -19
  351. package/lt.js +33 -31
  352. package/lte.js +24 -31
  353. package/map.js +32 -35
  354. package/not.js +12 -17
  355. package/or.js +34 -26
  356. package/package.json +1 -1
  357. package/reduce.js +60 -67
  358. package/some.js +11 -34
  359. package/switchCase.js +3 -3
  360. package/thunkify.js +42 -12
  361. package/transform.js +57 -56
package/dist/x/values.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rubico v2.10.0
2
+ * Rubico v2.12.1
3
3
  * https://rubico.land/
4
4
  *
5
5
  * © Richard Yufei Tong, King of Software
package/dist/x/when.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rubico v2.10.0
2
+ * Rubico v2.12.1
3
3
  * https://rubico.land/
4
4
  *
5
5
  * © Richard Yufei Tong, King of Software
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rubico v2.10.0
2
+ * Rubico v2.12.1
3
3
  * https://rubico.land/
4
4
  *
5
5
  * © Richard Yufei Tong, King of Software
package/dist/x/when.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rubico v2.10.0
2
+ * Rubico v2.12.1
3
3
  * https://rubico.land/
4
4
  *
5
5
  * © Richard Yufei Tong, King of Software
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rubico v2.10.0
2
+ * Rubico v2.12.1
3
3
  * https://rubico.land/
4
4
  *
5
5
  * © Richard Yufei Tong, King of Software
package/dist/x/when.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rubico v2.10.0
2
+ * Rubico v2.12.1
3
3
  * https://rubico.land/
4
4
  *
5
5
  * © Richard Yufei Tong, King of Software
package/eq.js CHANGED
@@ -6,59 +6,58 @@ const equals = require('./_internal/equals')
6
6
  *
7
7
  * @synopsis
8
8
  * ```coffeescript [specscript]
9
- * args Array<any>
10
- * argsOrPromises Array<Promise|any>
9
+ * type SyncOrAsyncResolver = (...arguments)=>Promise|any
11
10
  *
12
- * type SyncOrAsyncResolver = (...args)=>Promise|any
13
- *
14
- * leftValue Promise|any
15
- * rightValue Promise|any
16
- * leftResolver SyncOrAsyncResolver
17
- * rightResolver SyncOrAsyncResolver
18
- *
19
- * eq(leftValue, rightValue) -> Promise|boolean
20
- * eq(...argsOrPromises, leftResolver, rightValue) -> Promise|boolean
21
- * eq(...argsOrPromises, leftValue, rightResolver) -> Promise|boolean
22
- * eq(...argsOrPromises, leftResolver, rightResolver) -> Promise|boolean
23
- * eq(leftResolver, rightValue)(...args) -> Promise|boolean
24
- * eq(leftValue, rightResolver)(...args) -> Promise|boolean
25
- * eq(leftResolver, rightResolver)(...args) -> Promise|boolean
11
+ * eq(leftValue Promise|any, rightValue Promise|any) -> Promise|boolean
12
+ * eq(...arguments, leftResolver SyncOrAsyncResolver, rightValue Promise|any) -> Promise|boolean
13
+ * eq(...arguments, leftValue Promise|any, rightResolver SyncOrAsyncResolver) -> Promise|boolean
14
+ * eq(...arguments, leftResolver SyncOrAsyncResolver, rightResolver SyncOrAsyncResolver) -> Promise|boolean
26
15
  *
16
+ * eq(leftResolver SyncOrAsyncResolver, rightValue Promise|any)(...arguments) -> Promise|boolean
17
+ * eq(leftValue Promise|any, rightResolver SyncOrAsyncResolver)(...arguments) -> Promise|boolean
18
+ * eq(leftResolver SyncOrAsyncResolver, rightResolver SyncOrAsyncResolver)(...arguments) -> Promise|boolean
27
19
  * ```
28
20
  *
29
21
  * @description
30
- * Function equivalent to the [Equality (==)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality) operator. Tests for equality (`==`) between two values.
22
+ * Comparison operator. Tests for equality (`==`) between two values.
31
23
  *
32
24
  * ```javascript [playground]
33
25
  * const areNamesEqual = eq('Ted', 'John')
34
26
  *
35
- * console.log(areNamesEqual) // false
27
+ * console.log(areNamesEqual)
36
28
  * ```
37
29
  *
38
- * If either of the two values are resolver functions, `eq` returns a function that resolves the value(s) to compare.
30
+ * If either of the two values are resolver functions, `eq` returns a function that resolves the values to compare.
39
31
  *
40
32
  * ```javascript [playground]
41
33
  * const personIsJohn = eq(get('name'), 'John')
34
+ * const personLikesBananas = eq(get('likes'), 'bananas')
42
35
  *
43
36
  * const person = { name: 'John', likes: 'bananas' }
44
37
  *
45
- * if (personIsJohn(person)) {
46
- * console.log('The person is John')
38
+ * if (personIsJohn(person) && personLikesBananas(person)) {
39
+ * console.log('John likes bananas.')
47
40
  * }
48
41
  * ```
49
42
  *
50
43
  * If either of the two resolver functions is asynchronous, `eq` returns an asynchronous function.
51
44
  *
52
45
  * ```javascript [playground]
53
- * const asyncPersonIsJohn = eq(async person => person.name, 'John')
46
+ * const userbase = new Map()
54
47
  *
55
- * const person = { name: 'John', likes: 'bananas' }
48
+ * userbase.set('example-id', { name: 'John', likes: 'bananas' })
56
49
  *
57
- * asyncPersonIsJohn(person).then(condition => {
58
- * if (condition) {
59
- * console.log('The person is John')
50
+ * async function getUserNameById(id) {
51
+ * const user = userbase.get(id)
52
+ * if (user) {
53
+ * return user.name
60
54
  * }
61
- * })
55
+ * return undefined
56
+ * }
57
+ *
58
+ * const booleanResult = await eq('example-id', getUserNameById, 'John')
59
+ *
60
+ * console.log(booleanResult)
62
61
  * ```
63
62
  *
64
63
  * `eq` supports a lazy interface for composability.
@@ -66,14 +65,14 @@ const equals = require('./_internal/equals')
66
65
  * ```javascript [playground]
67
66
  * pipe({ name: 'John' }, [
68
67
  * eq('John', get('name')),
69
- * console.log, // true
68
+ * console.log,
70
69
  * ])
71
70
  * ```
72
71
  *
73
- * Any promises passed in data argument position are resolved for their values before further execution.
72
+ * Any promises in `arguments` are resolved for their values before further execution for the eager interface only.
74
73
  *
75
74
  * ```javascript [playground]
76
- * eq(Promise.resolve({ a: 1, b: 1 }), get('a'), get('b')).then(console.log) // true
75
+ * eq(Promise.resolve({ a: 1, b: 1 }), get('a'), get('b')).then(console.log)
77
76
  * ```
78
77
  *
79
78
  * See also:
package/es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rubico v2.10.0
2
+ * Rubico v2.12.1
3
3
  * https://rubico.land/
4
4
  *
5
5
  * © Richard Yufei Tong, King of Software
@@ -1474,26 +1474,64 @@ const FilteringIterator = (iterator, predicate) => ({
1474
1474
  },
1475
1475
  })
1476
1476
 
1477
- const FilteringAsyncIterator = (asyncIterator, predicate) => ({
1478
- isAsyncIteratorDone: false,
1479
- [symbolAsyncIterator]() {
1480
- return this
1481
- },
1482
- async next() {
1483
- while (!this.isAsyncIteratorDone) {
1484
- const { value, done } = await asyncIterator.next()
1485
- if (done) {
1486
- this.isAsyncIteratorDone = true
1487
- } else {
1488
- const predication = predicate(value)
1489
- if (isPromise(predication) ? await predication : predication) {
1490
- return { value, done: false }
1477
+ const FilteringAsyncIterator = (asyncIterator, predicate) => {
1478
+ const buffer = new LinkedList()
1479
+
1480
+ let index = -1
1481
+ let consumingAsyncIterator = false
1482
+ let isAsyncIteratorDone = false
1483
+
1484
+ return {
1485
+ [symbolAsyncIterator]() {
1486
+ return this
1487
+ },
1488
+
1489
+ // _consumeAsyncIterator() -> Promise<>
1490
+ async _consumeAsyncIterator() {
1491
+ for await (const item of asyncIterator) {
1492
+ index += 1
1493
+ const booleanResult = predicate(item)
1494
+ buffer.append([booleanResult, item])
1495
+ }
1496
+ isAsyncIteratorDone = true
1497
+ },
1498
+
1499
+
1500
+ async next() {
1501
+ if (!consumingAsyncIterator) {
1502
+ this._consumeAsyncIterator()
1503
+ consumingAsyncIterator = true
1504
+ }
1505
+
1506
+ while (!isAsyncIteratorDone) {
1507
+ if (buffer.length > 0) {
1508
+ let [booleanResult, item] = buffer.popFirst()
1509
+ if (isPromise(booleanResult)) {
1510
+ booleanResult = await booleanResult
1511
+ }
1512
+ if (booleanResult) {
1513
+ return { value: item, done: false }
1514
+ }
1515
+ continue
1491
1516
  }
1517
+ await sleep(10)
1492
1518
  }
1493
- }
1494
- return { value: undefined, done: true }
1495
- },
1496
- })
1519
+
1520
+ while (buffer.length > 0) {
1521
+ let [booleanResult, item] = buffer.popFirst()
1522
+ if (isPromise(booleanResult)) {
1523
+ booleanResult = await booleanResult
1524
+ }
1525
+ if (booleanResult) {
1526
+ return { value: item, done: false }
1527
+ }
1528
+ }
1529
+
1530
+ return { value: undefined, done: true }
1531
+ },
1532
+
1533
+ }
1534
+ }
1497
1535
 
1498
1536
  const arrayExtendMap = function (
1499
1537
  array, values, valuesMapper, valuesIndex,
package/every.js CHANGED
@@ -51,18 +51,22 @@ const _every = function (collection, predicate) {
51
51
  * ```
52
52
  *
53
53
  * @description
54
- * Test a predicate concurrently across all elements of a foldable, returning true if all executions return true.
54
+ * Tests a predicate concurrently across all items of a foldable. Returns true if every item tests true by the predicate.
55
55
  *
56
56
  * ```javascript [playground]
57
57
  * const isOdd = number => number % 2 == 1
58
58
  *
59
- * console.log(
60
- * every([1, 2, 3, 4, 5], isOdd),
61
- * ) // false
59
+ * {
60
+ * const array = [1, 2, 3, 4, 5]
61
+ * const isEveryNumberOdd = every(array, isOdd)
62
+ * console.log(isEveryNumberOdd)
63
+ * }
62
64
  *
63
- * console.log(
64
- * every([1, 3, 5], isOdd),
65
- * ) // true
65
+ * {
66
+ * const array = [1, 3, 5]
67
+ * const isEveryNumberOdd = every(array, isOdd)
68
+ * console.log(isEveryNumberOdd)
69
+ * }
66
70
  * ```
67
71
  *
68
72
  * The following data types are considered to be foldables:
@@ -74,29 +78,19 @@ const _every = function (collection, predicate) {
74
78
  * * `object with .reduce method`
75
79
  * * `object`
76
80
  *
77
- * `every` works for async generators.
78
- *
79
- * ```javascript [playground]
80
- * const asyncNumbers = async function* () {
81
- * yield 1; yield 2; yield 3; yield 4; yield 5
82
- * }
83
- *
84
- * every(asyncNumbers(), async number => number < 6).then(console.log) // true
85
- * ```
86
- *
87
81
  * `every` supports a lazy interface for composability.
88
82
  *
89
83
  * ```javascript [playground]
90
84
  * pipe([1, 2, 3], [
91
85
  * every(number => number < 5),
92
- * console.log, // true
86
+ * console.log,
93
87
  * ])
94
88
  * ```
95
89
  *
96
- * Any promises passed in data argument position are resolved for their values before further execution.
90
+ * If the foldable is a promise, it is resolved for its value before further execution for the eager interface only.
97
91
  *
98
92
  * ```javascript [playground]
99
- * every(Promise.resolve([1, 2, 3, 4, 5]), n => n < 6).then(console.log) // true
93
+ * every(Promise.resolve([1, 2, 3, 4, 5]), n => n < 6).then(console.log)
100
94
  * ```
101
95
  *
102
96
  * See also:
package/filter.js CHANGED
@@ -96,14 +96,24 @@ const _filter = function (value, predicate) {
96
96
  * value any,
97
97
  * indexOrKey number|string|any,
98
98
  * filterable Filterable,
99
- * )=>(booleanResult Promise|boolean)
99
+ * )=>(booleanResult Promise|boolean|any)
100
100
  *
101
101
  * filter(filterable Promise|Filterable, predicate SyncOrAsyncPredicate) -> filteredFilterable Promise|Filterable
102
102
  * filter(predicate SyncOrAsyncPredicate)(filterable Filterable) -> filteredFilterable Promise|Filterable
103
103
  * ```
104
104
  *
105
105
  * @description
106
- * Filters out items from a filterable, returning a filterable of the same type. The order of the items of the filterable is preserved.
106
+ * Filters out items from a filterable, returning a filtered filterable of the same type. The order of the items of the filterable is preserved.
107
+ *
108
+ * ```javascript [playground]
109
+ * const isOdd = number => number % 2 == 1
110
+ *
111
+ * const array = [1, 2, 3, 4, 5]
112
+ *
113
+ * const filteredArray = filter(array, isOdd)
114
+ *
115
+ * console.log(filteredArray)
116
+ * ```
107
117
  *
108
118
  * The following data types are considered to be filterables:
109
119
  * * `array`
@@ -114,11 +124,11 @@ const _filter = function (value, predicate) {
114
124
  * * `object with .filter method`
115
125
  * * `object`
116
126
  *
117
- * The filtering operation is defined by a given predicate function. The predicate function dictates whether a given item from the filterable should be included in the returned filterable.
127
+ * The filtering operation is defined by the predicate function, which determines whether a given item from the filterable should be included in the filtered filterable.
118
128
  *
119
129
  * ```javascript
120
130
  * const predicate = function (item) {
121
- * // booleanResult is the boolean result of the predicate test on item
131
+ * // booleanResult is the boolean result of the predicate
122
132
  * return booleanResult
123
133
  * }
124
134
  * ```
@@ -150,118 +160,71 @@ const _filter = function (value, predicate) {
150
160
  * predicate(item any) -> booleanResult Promise|boolean|any
151
161
  * ```
152
162
  *
153
- * If the filterable is an object with a `.filter` method, the predicate function signature is defined externally.
154
- *
155
163
  * If the filterable is a plain object:
156
164
  * ```coffeescript [specscript]
157
165
  * predicate(item any, key string, filterable Object) -> booleanResult Promise|boolean|any
158
166
  * ```
159
167
  *
160
- * ```javascript [playground]
161
- * const isOdd = number => number % 2 == 1
162
- *
163
- * const array = [1, 2, 3, 4, 5]
164
- *
165
- * const filteredArray = filter(array, isOdd)
168
+ * If the filterable is an object with a `.filter` method, the predicate function signature is defined externally.
166
169
  *
167
- * console.log(filteredArray)
168
- * ```
170
+ * If the filterable is a generator, the predicate function must be synchronous.
169
171
  *
170
- * If the predicate is asynchronous, it is executed concurrently.
172
+ * If the predicate function is asynchronous, it is executed concurrently.
171
173
  *
172
174
  * ```javascript [playground]
173
175
  * const asyncIsOdd = async number => number % 2 == 1
174
176
  *
175
177
  * const array = [1, 2, 3, 4, 5]
176
178
  *
177
- * const promise = filter(array, asyncIsOdd)
178
- * promise.then(console.log) // [1, 3, 5]
179
- * ```
180
- *
181
- * `filter` applies the predicate function to just the values of an object.
182
- *
183
- * ```javascript [playground]
184
- * const isOdd = number => number % 2 == 1
185
- *
186
- * const obj = { a: 1, b: 2, c: 3, d: 4, e: 5 }
179
+ * const result = await filter(array, asyncIsOdd)
187
180
  *
188
- * const result = filter(obj, isOdd)
189
- * console.log(result) // { a: 1, c: 3, e: 5 }
181
+ * console.log(result)
190
182
  * ```
191
183
  *
192
- * `filter` applies the predicate to the values of the entries of a map.
184
+ * `filter` applies the predicate function to just the values of objects and maps.
193
185
  *
194
186
  * ```javascript [playground]
195
187
  * const isOdd = number => number % 2 == 1
196
188
  *
197
- * const myMap = new Map([['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]])
189
+ * const object = { a: 1, b: 2, c: 3, d: 4, e: 5 }
190
+ * const map = new Map([['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]])
198
191
  *
199
- * const result = filter(myMap, isOdd)
200
- * console.log(result) // Map(3) { 'a' => 1, 'c' => 3, 'e' => 5 }
201
- * ```
202
- *
203
- * For generators, `filter` returns a lazily filtered generator. All values that are normally yielded by the generator that test false by the predicate are excluded from the returned generator.
204
- *
205
- * ```javascript [playground]
206
- * const isOdd = number => number % 2 == 1
192
+ * const filteredObject = filter(object, isOdd)
193
+ * const filteredMap = filter(map, isOdd)
207
194
  *
208
- * const numbersGeneratorFunction = function* () {
209
- * yield 1; yield 2; yield 3; yield 4; yield 5
210
- * }
211
- *
212
- * const numbersGenerator = numbersGeneratorFunction()
213
- * const oddNumbersGenerator = filter(numbersGeneratorFunction(), isOdd)
214
- *
215
- * for (const number of numbersGenerator) {
216
- * console.log(number) // 1
217
- * // 2
218
- * // 3
219
- * // 4
220
- * // 5
221
- * }
222
- *
223
- * for (const number of oddNumbersGenerator) {
224
- * console.log(number) // 1
225
- * // 3
226
- * // 5
227
- * }
195
+ * console.log(filteredObject)
196
+ * console.log(filteredMap)
228
197
  * ```
229
198
  *
230
- * For async generators, `filter` returns a lazily filtered async generator. All values that are normally yielded by the async generator that test falsy by the predicate are excluded from the returned async generator.
199
+ * For generators, `filter` returns a filtered generator.
231
200
  *
232
201
  * ```javascript [playground]
233
- * const asyncIsOdd = async number => number % 2 == 1
202
+ * const isOdd = number => number % 2 == 1
234
203
  *
235
- * const asyncNumbersGeneratorFunction = async function* () {
204
+ * const generateNumbers = function* () {
236
205
  * yield 1; yield 2; yield 3; yield 4; yield 5
237
206
  * }
238
207
  *
239
- * const asyncNumbersGenerator = asyncNumbersGeneratorFunction()
240
- *
241
- * const asyncOddNumbersGenerator = filter(asyncNumbersGeneratorFunction(), asyncIsOdd)
208
+ * const numbers = generateNumbers()
209
+ * const oddNumbers = filter(generateNumbers(), isOdd)
242
210
  *
243
- * for await (const number of asyncNumbersGenerator) {
244
- * console.log(number) // 1
245
- * // 2
246
- * // 3
247
- * // 4
248
- * // 5
211
+ * console.log('numbers')
212
+ * for (const number of numbers) {
213
+ * console.log(number)
249
214
  * }
250
215
  *
251
- * for await (const number of asyncOddNumbersGenerator) {
252
- * console.log(number) // 1
253
- * // 3
254
- * // 5
216
+ * console.log('odd numbers')
217
+ * for (const number of oddNumbers) {
218
+ * console.log(number)
255
219
  * }
256
220
  * ```
257
221
  *
258
- * Any promises passed in data argument position are resolved for their values before further execution.
222
+ * If the filterable is a promise, it is resolved for its value before further execution for the eager interface only.
259
223
  *
260
224
  * ```javascript [playground]
261
225
  * const isOdd = number => number % 2 == 1
262
226
  *
263
227
  * filter(Promise.resolve([1, 2, 3, 4, 5]), isOdd).then(console.log)
264
- * // [1, 3, 5]
265
228
  * ```
266
229
  *
267
230
  * See also:
package/flatMap.js CHANGED
@@ -79,9 +79,17 @@ const _flatMap = function (value, flatMapper) {
79
79
  * @description
80
80
  * Applies a flat-mapper function to each item of a monad, returning a flat-mapped monad of the same type.
81
81
  *
82
- * A flat-mapping operation iterates through each item of a monad and applies the flat-mapper function to each item, flattening the result of the execution into the returned monad.
82
+ * ```javascript [playground]
83
+ * const duplicate = value => [value, value]
84
+ *
85
+ * const duplicated = flatMap([1, 2, 3, 4, 5], duplicate)
86
+ *
87
+ * console.log(duplicated)
88
+ * ```
89
+ *
90
+ * `flatMap` iterates through each item of a monad and applies the flat-mapper function to each item, concatenating the execution result (flat-mapped item) into the flat-mapped monad. If the execution result is a promise, it is resolved for its value before being concatenated into the flat-mapped monad. If the execution result is asynchronously iterable, it is muxed into the flat-mapped monad.
83
91
  *
84
- * If the flat-mapper is asynchronous, it is executed concurrently. The execution result may be asynchronously iterable, in which case it is muxed into the returned monad.
92
+ * If the flat-mapper function is asynchronous, it is executed concurrently.
85
93
  *
86
94
  * The following data types are considered to be monads:
87
95
  * * `array`
@@ -125,15 +133,7 @@ const _flatMap = function (value, flatMapper) {
125
133
  * flatMapper(item any, key string, monad Object) -> flatMappedItem Promise|Monad|any
126
134
  * ```
127
135
  *
128
- * ```javascript [playground]
129
- * const duplicate = value => [value, value]
130
- *
131
- * const duplicated = flatMap([1, 2, 3, 4, 5], duplicate)
132
- *
133
- * console.log(duplicated)
134
- * ```
135
- *
136
- * If the iterable is an object with a `.flatMap` or `.chain` method, the flat-mapper function signature is defined externally.
136
+ * If the iterable is an object with a `flatMap` or `chain` method, the flat-mapper function signature is defined externally.
137
137
  *
138
138
  * Values from async generators are muxed. Muxing, or asynchronously "mixing", is the process of combining multiple asynchronous sources into one source, with order determined by the asynchronous resolution of the individual promise elements.
139
139
  *
@@ -153,7 +153,7 @@ const _flatMap = function (value, flatMapper) {
153
153
  * // values from async generators are muxed
154
154
  * const muxed = await flatMap(['foo', 'bar', 'baz'], asyncRepeat3)
155
155
  *
156
- * console.log(muxed)
156
+ * console.log('muxed:', muxed)
157
157
  *
158
158
  * const repeat3 = function* (message) {
159
159
  * yield message; yield message; yield message
@@ -162,7 +162,7 @@ const _flatMap = function (value, flatMapper) {
162
162
  * // values from generators and other monads are concatenated
163
163
  * const repeated = flatMap(['foo', 'bar', 'baz'], repeat3)
164
164
  *
165
- * console.log(repeated)
165
+ * console.log('repeated:', repeated)
166
166
  * ```
167
167
  *
168
168
  * If the monad is a promise, it is resolved for its value before further execution for the eager interface only.
package/forEach.js CHANGED
@@ -60,6 +60,14 @@ const _forEach = function (collection, callback) {
60
60
  * @description
61
61
  * Executes a callback function for each item of an iterable, returning the original iterable unmodified.
62
62
  *
63
+ * ```javascript [playground]
64
+ * console.log('array')
65
+ * forEach([1, 2, 3, 4, 5], num => console.log(num))
66
+ *
67
+ * console.log('object')
68
+ * forEach({ a: 1, b: 2, c: 3 }, num => console.log(num))
69
+ * ```
70
+ *
63
71
  * The following data types are considered to be iterable:
64
72
  * * `array`
65
73
  * * `set`
@@ -101,14 +109,6 @@ const _forEach = function (collection, callback) {
101
109
  * callback(item any, key string, iterable Object) -> Promise|undefined
102
110
  * ```
103
111
  *
104
- * ```javascript [playground]
105
- * console.log('array')
106
- * forEach([1, 2, 3, 4, 5], num => console.log(num))
107
- *
108
- * console.log('object')
109
- * forEach({ a: 1, b: 2, c: 3 }, num => console.log(num))
110
- * ```
111
- *
112
112
  * If the iterable is an object with a `.forEach` method, the callback function signature is defined externally.
113
113
  *
114
114
  * If the callback function is asynchronous, it is executed concurrently.
package/get.js CHANGED
@@ -74,9 +74,9 @@ const _get = function (object, path, defaultValue) {
74
74
  * ```javascript [playground]
75
75
  * const asyncDefaultResolver = async object => object.a
76
76
  *
77
- * const promise = get({ a: 1 }, 'notfound', asyncDefaultResolver)
77
+ * const result = await get({ a: 1 }, 'notfound', asyncDefaultResolver)
78
78
  *
79
- * promise.then(console.log)
79
+ * console.log(result)
80
80
  * ```
81
81
  *
82
82
  * `get` supports three types of path patterns for nested property access.
@@ -96,7 +96,7 @@ const _get = function (object, path, defaultValue) {
96
96
  * const get00000BracketNotation = get('[0][0][0][0][0]')
97
97
  * const get00000ArrayNotation = get([0, 0, 0, 0, 0])
98
98
  *
99
- * const nested = [[[[['foo']]]]]
99
+ * const nested = [[[[[1]]]]]
100
100
  *
101
101
  * console.log(get00000DotNotation(nested))
102
102
  * console.log(get00000BracketNotation(nested))