rubico 2.7.1 → 2.7.3

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 (355) hide show
  1. package/all.js +29 -30
  2. package/and.js +25 -14
  3. package/assign.js +15 -23
  4. package/compose.js +2 -4
  5. package/dist/Transducer.es.js +1 -1
  6. package/dist/Transducer.es.min.js +1 -1
  7. package/dist/Transducer.js +1 -1
  8. package/dist/Transducer.min.js +1 -1
  9. package/dist/Transducer.mjs +1 -1
  10. package/dist/__.es.js +1 -1
  11. package/dist/__.es.min.js +1 -1
  12. package/dist/__.js +1 -1
  13. package/dist/__.min.js +1 -1
  14. package/dist/__.mjs +1 -1
  15. package/dist/all.es.js +1 -1
  16. package/dist/all.es.min.js +1 -1
  17. package/dist/all.js +1 -1
  18. package/dist/all.min.js +1 -1
  19. package/dist/all.mjs +1 -1
  20. package/dist/always.es.js +1 -1
  21. package/dist/always.es.min.js +1 -1
  22. package/dist/always.js +1 -1
  23. package/dist/always.min.js +1 -1
  24. package/dist/always.mjs +1 -1
  25. package/dist/and.es.js +1 -1
  26. package/dist/and.es.min.js +1 -1
  27. package/dist/and.js +1 -1
  28. package/dist/and.min.js +1 -1
  29. package/dist/and.mjs +1 -1
  30. package/dist/assign.es.js +1 -1
  31. package/dist/assign.es.min.js +1 -1
  32. package/dist/assign.js +1 -1
  33. package/dist/assign.min.js +1 -1
  34. package/dist/assign.mjs +1 -1
  35. package/dist/compose.es.js +1 -1
  36. package/dist/compose.es.min.js +1 -1
  37. package/dist/compose.js +1 -1
  38. package/dist/compose.min.js +1 -1
  39. package/dist/compose.mjs +1 -1
  40. package/dist/curry.es.js +1 -1
  41. package/dist/curry.es.min.js +1 -1
  42. package/dist/curry.js +1 -1
  43. package/dist/curry.min.js +1 -1
  44. package/dist/curry.mjs +1 -1
  45. package/dist/eq.es.js +1 -1
  46. package/dist/eq.es.min.js +1 -1
  47. package/dist/eq.js +1 -1
  48. package/dist/eq.min.js +1 -1
  49. package/dist/eq.mjs +1 -1
  50. package/dist/every.es.js +1 -1
  51. package/dist/every.es.min.js +1 -1
  52. package/dist/every.js +1 -1
  53. package/dist/every.min.js +1 -1
  54. package/dist/every.mjs +1 -1
  55. package/dist/filter.es.js +1 -1
  56. package/dist/filter.es.min.js +1 -1
  57. package/dist/filter.js +1 -1
  58. package/dist/filter.min.js +1 -1
  59. package/dist/filter.mjs +1 -1
  60. package/dist/flatMap.es.js +1 -1
  61. package/dist/flatMap.es.min.js +1 -1
  62. package/dist/flatMap.js +1 -1
  63. package/dist/flatMap.min.js +1 -1
  64. package/dist/flatMap.mjs +1 -1
  65. package/dist/forEach.es.js +1 -1
  66. package/dist/forEach.es.min.js +1 -1
  67. package/dist/forEach.js +1 -1
  68. package/dist/forEach.min.js +1 -1
  69. package/dist/forEach.mjs +1 -1
  70. package/dist/get.es.js +1 -1
  71. package/dist/get.es.min.js +1 -1
  72. package/dist/get.js +1 -1
  73. package/dist/get.min.js +1 -1
  74. package/dist/get.mjs +1 -1
  75. package/dist/gt.es.js +1 -1
  76. package/dist/gt.es.min.js +1 -1
  77. package/dist/gt.js +1 -1
  78. package/dist/gt.min.js +1 -1
  79. package/dist/gt.mjs +1 -1
  80. package/dist/gte.es.js +1 -1
  81. package/dist/gte.es.min.js +1 -1
  82. package/dist/gte.js +1 -1
  83. package/dist/gte.min.js +1 -1
  84. package/dist/gte.mjs +1 -1
  85. package/dist/lt.es.js +1 -1
  86. package/dist/lt.es.min.js +1 -1
  87. package/dist/lt.js +1 -1
  88. package/dist/lt.min.js +1 -1
  89. package/dist/lt.mjs +1 -1
  90. package/dist/lte.es.js +1 -1
  91. package/dist/lte.es.min.js +1 -1
  92. package/dist/lte.js +1 -1
  93. package/dist/lte.min.js +1 -1
  94. package/dist/lte.mjs +1 -1
  95. package/dist/map.es.js +1 -1
  96. package/dist/map.es.min.js +1 -1
  97. package/dist/map.js +1 -1
  98. package/dist/map.min.js +1 -1
  99. package/dist/map.mjs +1 -1
  100. package/dist/not.es.js +4 -2
  101. package/dist/not.es.min.js +2 -2
  102. package/dist/not.js +4 -2
  103. package/dist/not.min.js +2 -2
  104. package/dist/not.mjs +4 -2
  105. package/dist/omit.es.js +1 -1
  106. package/dist/omit.es.min.js +1 -1
  107. package/dist/omit.js +1 -1
  108. package/dist/omit.min.js +1 -1
  109. package/dist/omit.mjs +1 -1
  110. package/dist/or.es.js +1 -1
  111. package/dist/or.es.min.js +1 -1
  112. package/dist/or.js +1 -1
  113. package/dist/or.min.js +1 -1
  114. package/dist/or.mjs +1 -1
  115. package/dist/pick.es.js +1 -1
  116. package/dist/pick.es.min.js +1 -1
  117. package/dist/pick.js +1 -1
  118. package/dist/pick.min.js +1 -1
  119. package/dist/pick.mjs +1 -1
  120. package/dist/pipe.es.js +1 -1
  121. package/dist/pipe.es.min.js +1 -1
  122. package/dist/pipe.js +1 -1
  123. package/dist/pipe.min.js +1 -1
  124. package/dist/pipe.mjs +1 -1
  125. package/dist/reduce.es.js +1 -1
  126. package/dist/reduce.es.min.js +1 -1
  127. package/dist/reduce.js +1 -1
  128. package/dist/reduce.min.js +1 -1
  129. package/dist/reduce.mjs +1 -1
  130. package/dist/rubico.es.js +7 -9
  131. package/dist/rubico.es.min.js +2 -2
  132. package/dist/rubico.global.js +7 -9
  133. package/dist/rubico.global.min.js +2 -2
  134. package/dist/rubico.js +7 -9
  135. package/dist/rubico.min.js +2 -2
  136. package/dist/rubico.mjs +7 -9
  137. package/dist/set.es.js +1 -1
  138. package/dist/set.es.min.js +1 -1
  139. package/dist/set.js +1 -1
  140. package/dist/set.min.js +1 -1
  141. package/dist/set.mjs +1 -1
  142. package/dist/some.es.js +1 -1
  143. package/dist/some.es.min.js +1 -1
  144. package/dist/some.js +1 -1
  145. package/dist/some.min.js +1 -1
  146. package/dist/some.mjs +1 -1
  147. package/dist/switchCase.es.js +1 -1
  148. package/dist/switchCase.es.min.js +1 -1
  149. package/dist/switchCase.js +1 -1
  150. package/dist/switchCase.min.js +1 -1
  151. package/dist/switchCase.mjs +1 -1
  152. package/dist/tap.es.js +1 -1
  153. package/dist/tap.es.min.js +1 -1
  154. package/dist/tap.js +1 -1
  155. package/dist/tap.min.js +1 -1
  156. package/dist/tap.mjs +1 -1
  157. package/dist/thunkify.es.js +4 -8
  158. package/dist/thunkify.es.min.js +2 -2
  159. package/dist/thunkify.js +4 -8
  160. package/dist/thunkify.min.js +2 -2
  161. package/dist/thunkify.mjs +4 -8
  162. package/dist/transform.es.js +1 -1
  163. package/dist/transform.es.min.js +1 -1
  164. package/dist/transform.js +1 -1
  165. package/dist/transform.min.js +1 -1
  166. package/dist/transform.mjs +1 -1
  167. package/dist/tryCatch.es.js +1 -1
  168. package/dist/tryCatch.es.min.js +1 -1
  169. package/dist/tryCatch.js +1 -1
  170. package/dist/tryCatch.min.js +1 -1
  171. package/dist/tryCatch.mjs +1 -1
  172. package/dist/x/append.es.js +1 -1
  173. package/dist/x/append.es.min.js +1 -1
  174. package/dist/x/append.js +1 -1
  175. package/dist/x/append.min.js +1 -1
  176. package/dist/x/append.mjs +1 -1
  177. package/dist/x/callProp.es.js +1 -1
  178. package/dist/x/callProp.es.min.js +1 -1
  179. package/dist/x/callProp.js +1 -1
  180. package/dist/x/callProp.min.js +1 -1
  181. package/dist/x/callProp.mjs +1 -1
  182. package/dist/x/defaultsDeep.es.js +1 -1
  183. package/dist/x/defaultsDeep.es.min.js +1 -1
  184. package/dist/x/defaultsDeep.js +1 -1
  185. package/dist/x/defaultsDeep.min.js +1 -1
  186. package/dist/x/defaultsDeep.mjs +1 -1
  187. package/dist/x/differenceWith.es.js +1 -1
  188. package/dist/x/differenceWith.es.min.js +1 -1
  189. package/dist/x/differenceWith.js +1 -1
  190. package/dist/x/differenceWith.min.js +1 -1
  191. package/dist/x/differenceWith.mjs +1 -1
  192. package/dist/x/filterOut.es.js +4 -2
  193. package/dist/x/filterOut.es.min.js +2 -2
  194. package/dist/x/filterOut.js +4 -2
  195. package/dist/x/filterOut.min.js +2 -2
  196. package/dist/x/filterOut.mjs +4 -2
  197. package/dist/x/find.es.js +1 -1
  198. package/dist/x/find.es.min.js +1 -1
  199. package/dist/x/find.js +1 -1
  200. package/dist/x/find.min.js +1 -1
  201. package/dist/x/find.mjs +1 -1
  202. package/dist/x/findIndex.es.js +1 -1
  203. package/dist/x/findIndex.es.min.js +1 -1
  204. package/dist/x/findIndex.js +1 -1
  205. package/dist/x/findIndex.min.js +1 -1
  206. package/dist/x/findIndex.mjs +1 -1
  207. package/dist/x/first.es.js +1 -1
  208. package/dist/x/first.es.min.js +1 -1
  209. package/dist/x/first.js +1 -1
  210. package/dist/x/first.min.js +1 -1
  211. package/dist/x/first.mjs +1 -1
  212. package/dist/x/flatten.es.js +1 -1
  213. package/dist/x/flatten.es.min.js +1 -1
  214. package/dist/x/flatten.js +1 -1
  215. package/dist/x/flatten.min.js +1 -1
  216. package/dist/x/flatten.mjs +1 -1
  217. package/dist/x/groupBy.es.js +1 -1
  218. package/dist/x/groupBy.es.min.js +1 -1
  219. package/dist/x/groupBy.js +1 -1
  220. package/dist/x/groupBy.min.js +1 -1
  221. package/dist/x/groupBy.mjs +1 -1
  222. package/dist/x/has.es.js +1 -1
  223. package/dist/x/has.es.min.js +1 -1
  224. package/dist/x/has.js +1 -1
  225. package/dist/x/has.min.js +1 -1
  226. package/dist/x/has.mjs +1 -1
  227. package/dist/x/identity.es.js +1 -1
  228. package/dist/x/identity.es.min.js +1 -1
  229. package/dist/x/identity.js +1 -1
  230. package/dist/x/identity.min.js +1 -1
  231. package/dist/x/identity.mjs +1 -1
  232. package/dist/x/includes.es.js +1 -1
  233. package/dist/x/includes.es.min.js +1 -1
  234. package/dist/x/includes.js +1 -1
  235. package/dist/x/includes.min.js +1 -1
  236. package/dist/x/includes.mjs +1 -1
  237. package/dist/x/isDeepEqual.es.js +1 -1
  238. package/dist/x/isDeepEqual.es.min.js +1 -1
  239. package/dist/x/isDeepEqual.js +1 -1
  240. package/dist/x/isDeepEqual.min.js +1 -1
  241. package/dist/x/isDeepEqual.mjs +1 -1
  242. package/dist/x/isEmpty.es.js +1 -1
  243. package/dist/x/isEmpty.es.min.js +1 -1
  244. package/dist/x/isEmpty.js +1 -1
  245. package/dist/x/isEmpty.min.js +1 -1
  246. package/dist/x/isEmpty.mjs +1 -1
  247. package/dist/x/isEqual.es.js +1 -1
  248. package/dist/x/isEqual.es.min.js +1 -1
  249. package/dist/x/isEqual.js +1 -1
  250. package/dist/x/isEqual.min.js +1 -1
  251. package/dist/x/isEqual.mjs +1 -1
  252. package/dist/x/isFunction.es.js +1 -1
  253. package/dist/x/isFunction.es.min.js +1 -1
  254. package/dist/x/isFunction.js +1 -1
  255. package/dist/x/isFunction.min.js +1 -1
  256. package/dist/x/isFunction.mjs +1 -1
  257. package/dist/x/isIn.es.js +1 -1
  258. package/dist/x/isIn.es.min.js +1 -1
  259. package/dist/x/isIn.js +1 -1
  260. package/dist/x/isIn.min.js +1 -1
  261. package/dist/x/isIn.mjs +1 -1
  262. package/dist/x/isObject.es.js +1 -1
  263. package/dist/x/isObject.es.min.js +1 -1
  264. package/dist/x/isObject.js +1 -1
  265. package/dist/x/isObject.min.js +1 -1
  266. package/dist/x/isObject.mjs +1 -1
  267. package/dist/x/isString.es.js +1 -1
  268. package/dist/x/isString.es.min.js +1 -1
  269. package/dist/x/isString.js +1 -1
  270. package/dist/x/isString.min.js +1 -1
  271. package/dist/x/isString.mjs +1 -1
  272. package/dist/x/keys.es.js +1 -1
  273. package/dist/x/keys.es.min.js +1 -1
  274. package/dist/x/keys.js +1 -1
  275. package/dist/x/keys.min.js +1 -1
  276. package/dist/x/keys.mjs +1 -1
  277. package/dist/x/last.es.js +1 -1
  278. package/dist/x/last.es.min.js +1 -1
  279. package/dist/x/last.js +1 -1
  280. package/dist/x/last.min.js +1 -1
  281. package/dist/x/last.mjs +1 -1
  282. package/dist/x/maxBy.es.js +1 -1
  283. package/dist/x/maxBy.es.min.js +1 -1
  284. package/dist/x/maxBy.js +1 -1
  285. package/dist/x/maxBy.min.js +1 -1
  286. package/dist/x/maxBy.mjs +1 -1
  287. package/dist/x/noop.es.js +1 -1
  288. package/dist/x/noop.es.min.js +1 -1
  289. package/dist/x/noop.js +1 -1
  290. package/dist/x/noop.min.js +1 -1
  291. package/dist/x/noop.mjs +1 -1
  292. package/dist/x/pluck.es.js +1 -1
  293. package/dist/x/pluck.es.min.js +1 -1
  294. package/dist/x/pluck.js +1 -1
  295. package/dist/x/pluck.min.js +1 -1
  296. package/dist/x/pluck.mjs +1 -1
  297. package/dist/x/prepend.es.js +1 -1
  298. package/dist/x/prepend.es.min.js +1 -1
  299. package/dist/x/prepend.js +1 -1
  300. package/dist/x/prepend.min.js +1 -1
  301. package/dist/x/prepend.mjs +1 -1
  302. package/dist/x/size.es.js +1 -1
  303. package/dist/x/size.es.min.js +1 -1
  304. package/dist/x/size.js +1 -1
  305. package/dist/x/size.min.js +1 -1
  306. package/dist/x/size.mjs +1 -1
  307. package/dist/x/trace.es.js +1 -1
  308. package/dist/x/trace.es.min.js +1 -1
  309. package/dist/x/trace.js +1 -1
  310. package/dist/x/trace.min.js +1 -1
  311. package/dist/x/trace.mjs +1 -1
  312. package/dist/x/unionWith.es.js +1 -1
  313. package/dist/x/unionWith.es.min.js +1 -1
  314. package/dist/x/unionWith.js +1 -1
  315. package/dist/x/unionWith.min.js +1 -1
  316. package/dist/x/unionWith.mjs +1 -1
  317. package/dist/x/uniq.es.js +1 -1
  318. package/dist/x/uniq.es.min.js +1 -1
  319. package/dist/x/uniq.js +1 -1
  320. package/dist/x/uniq.min.js +1 -1
  321. package/dist/x/uniq.mjs +1 -1
  322. package/dist/x/unless.es.js +1 -1
  323. package/dist/x/unless.es.min.js +1 -1
  324. package/dist/x/unless.js +1 -1
  325. package/dist/x/unless.min.js +1 -1
  326. package/dist/x/unless.mjs +1 -1
  327. package/dist/x/values.es.js +1 -1
  328. package/dist/x/values.es.min.js +1 -1
  329. package/dist/x/values.js +1 -1
  330. package/dist/x/values.min.js +1 -1
  331. package/dist/x/values.mjs +1 -1
  332. package/dist/x/when.es.js +1 -1
  333. package/dist/x/when.es.min.js +1 -1
  334. package/dist/x/when.js +1 -1
  335. package/dist/x/when.min.js +1 -1
  336. package/dist/x/when.mjs +1 -1
  337. package/es.js +7 -9
  338. package/every.js +2 -3
  339. package/filter.js +3 -3
  340. package/flatMap.js +5 -3
  341. package/index.js +7 -9
  342. package/map.js +3 -3
  343. package/not.js +11 -4
  344. package/omit.js +2 -3
  345. package/or.js +28 -15
  346. package/package.json +1 -1
  347. package/pick.js +2 -3
  348. package/pipe.js +2 -4
  349. package/reduce.js +6 -11
  350. package/some.js +2 -3
  351. package/switchCase.js +9 -11
  352. package/tap.js +4 -2
  353. package/thunkify.js +5 -22
  354. package/transform.js +5 -10
  355. package/tryCatch.js +35 -8
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/x/values.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/x/values.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/x/when.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/x/when.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/x/when.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -2873,7 +2873,9 @@ const not = function (...args) {
2873
2873
  }
2874
2874
  return _not(args, predicateOrValue)
2875
2875
  }
2876
- return !predicateOrValue
2876
+ return isPromise(predicateOrValue)
2877
+ ? predicateOrValue.then(negate)
2878
+ : !predicateOrValue
2877
2879
  }
2878
2880
 
2879
2881
  // argument resolver for curryArgs4
@@ -3276,15 +3278,11 @@ const omit = function (arg0, arg1) {
3276
3278
  return _omit(arg0, arg1)
3277
3279
  }
3278
3280
 
3279
- const thunkify = function (func, ...args) {
3281
+ const thunkify = (func, ...args) => function thunk() {
3280
3282
  if (areAnyValuesPromises(args)) {
3281
- return promiseAll(args).then(resolvedArgs => function thunk() {
3282
- return func(...resolvedArgs)
3283
- })
3284
- }
3285
- return function thunk() {
3286
- return func(...args)
3283
+ return promiseAll(args).then(curry2(funcApply, func, __))
3287
3284
  }
3285
+ return func(...args)
3288
3286
  }
3289
3287
 
3290
3288
  const curry = (func, ...args) => curryArity(func.length, func, args)
package/every.js CHANGED
@@ -43,9 +43,8 @@ const _every = function (collection, predicate) {
43
43
  * ```coffeescript [specscript]
44
44
  * type Foldable = Array|Set|Map|Generator|AsyncGenerator|{ reduce: function }|Object
45
45
  *
46
- * every(fold Foldable, predicate function) -> result Promise|boolean
47
- *
48
- * every(predicate function)(fold Foldable) -> result Promise|boolean
46
+ * every(foldable Foldable, predicate function) -> result Promise|boolean
47
+ * every(predicate function)(foldable Foldable) -> result Promise|boolean
49
48
  * ```
50
49
  *
51
50
  * @description
package/filter.js CHANGED
@@ -95,11 +95,11 @@ const _filter = function (value, predicate) {
95
95
  * type Predicate = (
96
96
  * value any,
97
97
  * indexOrKey number|string|any,
98
- * filt Filterable,
98
+ * filterable Filterable,
99
99
  * )=>boolean
100
100
  *
101
- * filter(filt Filterable, predicate Predicate) -> result Promise|Filterable
102
- * filter(predicate Predicate)(filt Filterable) -> result Promise|Filterable
101
+ * filter(filterable Promise|Filterable, predicate Predicate) -> result Promise|Filterable
102
+ * filter(predicate Predicate)(filterable Filterable) -> result Promise|Filterable
103
103
  * ```
104
104
  *
105
105
  * @description
package/flatMap.js CHANGED
@@ -69,11 +69,13 @@ const _flatMap = function (value, flatMapper) {
69
69
  * type FlatMapper = (
70
70
  * item any,
71
71
  * indexOrKey number|string|any,
72
- * mon Monad
72
+ * monad Monad
73
73
  * )=>Promise|Monad|any
74
74
  *
75
- * flatMap(mon Monad, flatMapper FlatMapper) -> result Promise|Monad
76
- * flatMap(flatMapper FlatMapper)(mon Monad) -> result Promise|Monad
75
+ * flatMapper FlatMapper
76
+ *
77
+ * flatMap(monad Promise|Monad, flatMapper) -> result Promise|Monad
78
+ * flatMap(flatMapper)(monad Monad) -> result Promise|Monad
77
79
  * ```
78
80
  *
79
81
  * @description
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.7.1
2
+ * rubico v2.7.3
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2025 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -2879,7 +2879,9 @@ const not = function (...args) {
2879
2879
  }
2880
2880
  return _not(args, predicateOrValue)
2881
2881
  }
2882
- return !predicateOrValue
2882
+ return isPromise(predicateOrValue)
2883
+ ? predicateOrValue.then(negate)
2884
+ : !predicateOrValue
2883
2885
  }
2884
2886
 
2885
2887
  // argument resolver for curryArgs4
@@ -3282,15 +3284,11 @@ const omit = function (arg0, arg1) {
3282
3284
  return _omit(arg0, arg1)
3283
3285
  }
3284
3286
 
3285
- const thunkify = function (func, ...args) {
3287
+ const thunkify = (func, ...args) => function thunk() {
3286
3288
  if (areAnyValuesPromises(args)) {
3287
- return promiseAll(args).then(resolvedArgs => function thunk() {
3288
- return func(...resolvedArgs)
3289
- })
3290
- }
3291
- return function thunk() {
3292
- return func(...args)
3289
+ return promiseAll(args).then(curry2(funcApply, func, __))
3293
3290
  }
3291
+ return func(...args)
3294
3292
  }
3295
3293
 
3296
3294
  const curry = (func, ...args) => curryArity(func.length, func, args)
package/map.js CHANGED
@@ -98,11 +98,11 @@ const _map = function (value, f) {
98
98
  * type Mapper = (
99
99
  * item any,
100
100
  * indexOrKey number|string|any,
101
- * ftor Functor
101
+ * functor Functor
102
102
  * )=>(resultItem Promise|any)
103
103
  *
104
- * map(ftor Promise|Functor, mapper Mapper) -> result Promise|Functor
105
- * map(mapper Mapper)(ftor Functor) -> result Promise|Functor
104
+ * map(functor Promise|Functor, mapper Mapper) -> result Promise|Functor
105
+ * map(mapper Mapper)(functor Functor) -> result Promise|Functor
106
106
  * ```
107
107
  *
108
108
  * @description
package/not.js CHANGED
@@ -19,11 +19,16 @@ const _not = function (args, predicate) {
19
19
  *
20
20
  * @synopsis
21
21
  * ```coffeescript [specscript]
22
- * not(value boolean) -> negated boolean
22
+ * args Array<any>
23
+ * argsOrPromises Array<Promise|any>
24
+ *
25
+ * type Predicate = (...args)=>Promise|boolean
23
26
  *
24
- * not(...args, predicate function) -> negated boolean
27
+ * predicate Predicate
25
28
  *
26
- * not(predicate function)(...args) -> negated boolean
29
+ * not(value boolean) -> negated boolean
30
+ * not(...argsOrPromises, predicate) -> negated Promise|boolean
31
+ * not(predicate)(...args) -> negated Promise|boolean
27
32
  * ```
28
33
  *
29
34
  * @description
@@ -73,7 +78,9 @@ const not = function (...args) {
73
78
  }
74
79
  return _not(args, predicateOrValue)
75
80
  }
76
- return !predicateOrValue
81
+ return isPromise(predicateOrValue)
82
+ ? predicateOrValue.then(negate)
83
+ : !predicateOrValue
77
84
  }
78
85
 
79
86
  module.exports = not
package/omit.js CHANGED
@@ -20,9 +20,8 @@ const _omit = function (source, paths) {
20
20
  *
21
21
  * @synopsis
22
22
  * ```coffeescript [specscript]
23
- * omit(paths Array<string>)(source Object) -> omitted Object
24
- *
25
- * omit(source Object, paths Array<string>) -> omitted Object
23
+ * omit(source Promise|Object, paths Array<string>) -> result Object
24
+ * omit(paths Array<string>)(source Object) -> result Object
26
25
  * ```
27
26
  *
28
27
  * @description
package/or.js CHANGED
@@ -97,36 +97,49 @@ const areAnyPredicatesTruthy = function (args, predicates) {
97
97
  *
98
98
  * @synopsis
99
99
  * ```coffeescript [specscript]
100
- * or(values Array<boolean>) -> result boolean
100
+ * args Array<any>
101
+ * argsOrPromises Array<Promise|any>
102
+ * predicatesOrValues Array<function|boolean|any>
101
103
  *
102
- * or(...args, predicatesOrValues Array<function|boolean>) -> Promise|boolean
103
- *
104
- * or(predicatesOrValues Array<function|boolean>)(...args) -> Promise|boolean
104
+ * or(values Array<boolean|any>) -> result boolean
105
+ * or(...argsOrPromises, predicatesOrValues) -> Promise|boolean
106
+ * or(predicatesOrValues)(...args) -> Promise|boolean
105
107
  * ```
106
108
  *
107
109
  * @description
108
- * Tests an array of boolean values, returning true if any boolean values are truthy.
110
+ * Function equivalent to the [logical OR](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR) operator. Tests arrays of predicate functions, promises, values, or a mix thereof.
111
+ *
112
+ * If provided an array of boolean values, `or` returns true if any boolean values are truthy.
109
113
  *
110
114
  * ```javascript [playground]
111
115
  * const oneIsLessThanZero = 1 < 0
112
116
  * const oneIsGreaterThanTwo = 1 > 2
113
117
  * const threeIsNotEqualToThree = 3 !== 3
114
118
  *
115
- * console.log(
116
- * or([oneIsLessThanZero, oneIsGreaterThanTwo, threeIsNotEqualToThree]),
117
- * ) // false
119
+ * const condition = or([
120
+ * oneIsLessThanZero,
121
+ * oneIsGreaterThanTwo,
122
+ * threeIsNotEqualToThree
123
+ * ])
124
+ * console.log(condition) // false
118
125
  * ```
119
126
  *
120
- * If any values in the array are synchronous or asynchronous predicate functions, `or` takes another argument to test concurrently against the predicate functions, returning true if any array values or resolved values from the predicates are truthy.
127
+ * If any predicate functions are provided in the array, `or` returns an aggregate predicate function that returns true for a given set of arguments if any provided predicate functions test true. If any provided predicate functions are asynchronous, the aggregate predicate function becomes asynchronous.
121
128
  *
122
129
  * ```javascript [playground]
123
130
  * const isOdd = number => number % 2 == 1
124
- *
125
- * const isEven = number => number % 2 == 0
126
- *
127
- * console.log(
128
- * or([isOdd, isEven])(0),
129
- * ) // true
131
+ * const isNegative = number => number < 0
132
+ * const asyncIsGreaterThan3 = async number => number > 3
133
+ *
134
+ * const aggregatePredicate = or([
135
+ * false,
136
+ * isOdd,
137
+ * isNegative,
138
+ * asyncIsGreaterThan3,
139
+ * ])
140
+ *
141
+ * const condition = await aggregatePredicate(2)
142
+ * console.log(condition) // false
130
143
  * ```
131
144
  *
132
145
  * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rubico",
3
- "version": "2.7.1",
3
+ "version": "2.7.3",
4
4
  "description": "[a]synchronous functional programming",
5
5
  "author": "Richard Tong",
6
6
  "license": "MIT",
package/pick.js CHANGED
@@ -27,9 +27,8 @@ const _pick = function (source, keys) {
27
27
  *
28
28
  * @synopsis
29
29
  * ```coffeescript [specscript]
30
- * pick(object Object, keys Array<string>) -> result Object
31
- *
32
- * pick(keys Array<string>)(object Object) -> result Object
30
+ * pick(source Promise|Object, keys Array<string>) -> result Object
31
+ * pick(keys Array<string>)(source Object) -> result Object
33
32
  * ```
34
33
  *
35
34
  * @description
package/pipe.js CHANGED
@@ -12,12 +12,10 @@ const __ = require('./_internal/placeholder')
12
12
  * ```coffeescript [specscript]
13
13
  * funcs Array<function>
14
14
  * args Array<any>
15
- * argsWithPromises Array<Promise|any>
15
+ * argsOrPromises Array<Promise|any>
16
16
  *
17
17
  * pipe(funcs)(...args) -> result Promise|any
18
- *
19
- * pipe(...argsWithPromises, funcs Array<function>) -> result Promise|any
20
- *
18
+ * pipe(...argsOrPromises, funcs Array<function>) -> result Promise|any
21
19
  * pipe(...funcs)(...args) -> result Promise|any
22
20
  * ```
23
21
  *
package/reduce.js CHANGED
@@ -27,21 +27,16 @@ const _reduce = function (collection, reducer, initial) {
27
27
  * accumulator any,
28
28
  * item any,
29
29
  * indexOrKey number|string|any,
30
- * fold Foldable
30
+ * foldable Foldable
31
31
  * )=>(nextAccumulator Promise|any)
32
32
  *
33
- * type Resolver = (fold Foldable)=>Promise|any
33
+ * type Resolver = (foldable Foldable)=>Promise|any
34
34
  *
35
- * reduce(
36
- * fold Foldable,
37
- * reducer Reducer,
38
- * initial? Resolver|any
39
- * ) -> result Promise|any
35
+ * reducer Reducer
36
+ * initial Resolver|any
40
37
  *
41
- * reduce(
42
- * reducer Reducer,
43
- * initial? Resolver|any
44
- * )(fold Foldable) -> result Promise|any
38
+ * reduce(foldable Promise|Foldable, reducer, initial?) -> result Promise|any
39
+ * reduce(reducer, initial?)(foldable Foldable) -> result Promise|any
45
40
  * ```
46
41
  *
47
42
  * @description
package/some.js CHANGED
@@ -42,9 +42,8 @@ const _some = function (collection, predicate) {
42
42
  * ```coffeescript [specscript]
43
43
  * type Foldable = Array|Set|Map|Generator|AsyncGenerator|{ reduce: function }|Object
44
44
  *
45
- * some(collection Foldable, predicate function) -> Promise|boolean
46
- *
47
- * some(predicate function)(collection Foldable) -> Promise|boolean
45
+ * some(foldable Foldable, predicate function) -> Promise|boolean
46
+ * some(predicate function)(foldable Foldable) -> Promise|boolean
48
47
  * ```
49
48
  *
50
49
  * @description
package/switchCase.js CHANGED
@@ -12,20 +12,18 @@ const curryArgs3 = require('./_internal/curryArgs3')
12
12
  *
13
13
  * @synopsis
14
14
  * ```coffeescript [specscript]
15
- * switchCase(conditionalValues Array<boolean|any>) -> Promise|any
16
- *
17
- * switchCase(
18
- * ...args,
19
- * conditionalFuncsOrValues Array<function|boolean|any>
20
- * ) -> Promise|any
21
- *
22
- * switchCase(
23
- * conditionalFuncsOrValues Array<function|boolean|any>
24
- * )(...args) -> Promise|any
15
+ * args Array<any>
16
+ * argsOrPromises Array<Promise|any>
17
+ * conditionalPromisesOrValues Array<Promise|boolean|any>
18
+ * conditionalFuncsOrPromisesOrValues Array<function|Promise|boolean|any>
19
+ *
20
+ * switchCase(conditionalPromisesOrValues) -> Promise|any
21
+ * switchCase(...argsOrPromises, conditionalFuncsOrPromisesOrValues) -> Promise|any
22
+ * switchCase(conditionalFuncsOrPromisesOrValues)(...args) -> Promise|any
25
23
  * ```
26
24
  *
27
25
  * @description
28
- * Functional equivalent to the [Conditional (ternary) operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator). Accepts an array of conditional functions that specifies cases as pairings of `predicate` and `resolver` functions with the exception of the last, default resolver. All functions are provided with the same arguments and executed in series. The result of a `switchCase` operation is either the result of the execution the last default resolver, or the result of the execution of the first resolver where the associated predicate tested true.
26
+ * Function equivalent to the [Conditional (ternary) operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator). Accepts an array of conditional functions that specifies cases as pairings of `predicate` and `resolver` functions with the exception of the last, default resolver. All functions are provided with the same arguments and executed in series. The result of a `switchCase` operation is either the result of the execution the last default resolver, or the result of the execution of the first resolver where the associated predicate tested true.
29
27
  *
30
28
  * ```javascript [playground]
31
29
  * const fruitIsYellow = fruit => fruit.color == 'yellow'
package/tap.js CHANGED
@@ -23,8 +23,9 @@ const _tap = function (args, f) {
23
23
  * @synopsis
24
24
  * ```coffeescript [specscript]
25
25
  * args Array<any>
26
+ * argsOrPromises Array<Promise|any>
26
27
  *
27
- * tap(...args, f function) -> Promise|args[0]
28
+ * tap(...argsOrPromises, f function) -> Promise|args[0]
28
29
  * tap(f function)(...args) -> Promise|args[0]
29
30
  * ```
30
31
  *
@@ -104,8 +105,9 @@ const _tapIf = function (predicate, f, args) {
104
105
  * @synopsis
105
106
  * ```coffeescript [specscript]
106
107
  * args Array<any>
108
+ * argsOrPromises Array<Promise|any>
107
109
  *
108
- * tap.if(...args, predicate function, f function) -> Promise|args[0]
110
+ * tap.if(...argsOrPromises, predicate function, f function) -> Promise|args[0]
109
111
  * tap.if(predicate function, f function)(...args) -> Promise|args[0]
110
112
  * ```
111
113
  *
package/thunkify.js CHANGED
@@ -9,13 +9,11 @@ const funcApply = require('./_internal/funcApply')
9
9
  *
10
10
  * @synopsis
11
11
  * ```coffeescript [specscript]
12
- * argsWithPromises Array<Promise|any>
13
- *
14
- * thunkify(func function, ...argsWithPromises) -> thunk function
12
+ * thunkify(func function, ...args) -> thunk ()=>func(...args)
15
13
  * ```
16
14
  *
17
15
  * @description
18
- * Create a thunk function from an original function and any number of arguments. A thunk function takes no arguments, and when called, executes the original function with the previously provided arguments. The original function is said to be "thunkified".
16
+ * Create a thunk function from another function and any number of arguments. The thunk function takes no arguments, and when called, executes the other function with the provided arguments. The other function is said to be "thunkified".
19
17
  *
20
18
  * ```javascript [playground]
21
19
  * const add = (a, b) => a + b
@@ -25,17 +23,6 @@ const funcApply = require('./_internal/funcApply')
25
23
  * console.log(thunkAdd12()) // 3
26
24
  * ```
27
25
  *
28
- * If any promises are passed as arguments, they are resolved before being applied to the original function, and `thunkify` returns a promise of the thunk function.
29
- *
30
- * ```javascript [playground]
31
- * const add = (a, b) => a + b
32
- *
33
- * const promise = thunkify(add, Promise.resolve(1), 2)
34
- * const thunkAdd12 = await promise
35
- *
36
- * console.log(thunkAdd12()) // 3
37
- * ```
38
- *
39
26
  * See also:
40
27
  * * [eq](/docs/eq)
41
28
  * * [always](/docs/always)
@@ -44,15 +31,11 @@ const funcApply = require('./_internal/funcApply')
44
31
  * * [Transducer.map](/docs/Transducer.map)
45
32
  *
46
33
  */
47
- const thunkify = function (func, ...args) {
34
+ const thunkify = (func, ...args) => function thunk() {
48
35
  if (areAnyValuesPromises(args)) {
49
- return promiseAll(args).then(resolvedArgs => function thunk() {
50
- return func(...resolvedArgs)
51
- })
52
- }
53
- return function thunk() {
54
- return func(...args)
36
+ return promiseAll(args).then(curry2(funcApply, func, __))
55
37
  }
38
+ return func(...args)
56
39
  }
57
40
 
58
41
  module.exports = thunkify
package/transform.js CHANGED
@@ -33,18 +33,13 @@ const _transform = function (collection, transducer, initialValue) {
33
33
  * type Semigroup =
34
34
  * Array|String|Set|TypedArray|{ concat: function }|{ write: function }|Object
35
35
  *
36
- * type SemigroupResolver = (fold Foldable)=>Promise|Semigroup
36
+ * type SemigroupResolver = (foldable Foldable)=>Promise|Semigroup
37
37
  *
38
- * transform(
39
- * fold Foldable,
40
- * transducer Transducer,
41
- * initial? Semigroup|SemigroupResolver,
42
- * ) -> result Promise|Semigroup
38
+ * transducer Transducer
39
+ * initial Semigroup|SemigroupResolver
43
40
  *
44
- * transform(
45
- * transducer Transducer,
46
- * initial? Semigroup|SemigroupResolver,
47
- * )(fold Foldable) -> result Promise|Semigroup
41
+ * transform(foldable Promise|Foldable, transducer, initial?) -> result Promise|Semigroup
42
+ * transform(transducer, initial?)(foldable Foldable) -> result Promise|Semigroup
48
43
  * ```
49
44
  *
50
45
  * @description
package/tryCatch.js CHANGED
@@ -22,13 +22,15 @@ const _tryCatch = function (tryer, catcher, args) {
22
22
  *
23
23
  * @synopsis
24
24
  * ```coffeescript [specscript]
25
- * tryCatch(tryer function, catcher function)(...args) -> Promise|any
25
+ * args Array<any>
26
+ * argsOrPromises Array<Promise|any>
26
27
  *
27
- * tryCatch(...args, tryer function, catcher function) -> Promise|any
28
+ * tryCatch(tryer function, catcher function)(...args) -> Promise|any
29
+ * tryCatch(...argsOrPromises, tryer function, catcher function) -> Promise|any
28
30
  * ```
29
31
  *
30
32
  * @description
31
- * Handles errors with a `tryer` and a `catcher` function. Calls the `tryer` function with the provided arguments and catches any errors thrown by the `tryer` function with the `catcher` function. If the `tryer` function is asynchronous and returns a rejected promise, the `catcher` function will execute with the value of the rejected promise. The `catcher` function is called with the error and all arguments supplied to the `tryer` function.
33
+ * Function equivalent to the [try...catch](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch) statement. Accepts two functions: a `tryer` function and a `catcher` function. Calls the `tryer` function and catches any errors thrown by the `tryer` function with the `catcher` function.
32
34
  *
33
35
  * ```javascript [playground]
34
36
  * const throwsIfOdd = number => {
@@ -38,18 +40,43 @@ const _tryCatch = function (tryer, catcher, args) {
38
40
  * console.log('did not throw for', number)
39
41
  * }
40
42
  *
41
- * const errorHandler = tryCatch(throwsIfOdd, (error, number) => {
43
+ * const errorHandler = (error, number) => {
42
44
  * console.log('caught error from number', number)
43
45
  * console.log(error)
44
- * })
46
+ * }
47
+ *
48
+ * const handler = tryCatch(throwsIfOdd, errorHandler)
49
+ *
50
+ * handler(2) // did not throw for 2
51
+ * handler(3) // caught error from number 3
52
+ * // Error: 3 is odd
53
+ *
54
+ * ```
55
+ *
56
+ * If the `tryer` function is asynchronous and throws an error, the `catcher` function will catch the rejected promise.
57
+ *
58
+ * ```javascript [playground]
59
+ * const rejectsIfOdd = async number => {
60
+ * if (number % 2 == 1) {
61
+ * throw new Error(`${number} is odd`)
62
+ * }
63
+ * console.log('did not throw for', number)
64
+ * }
65
+ *
66
+ * const errorHandler = (error, number) => {
67
+ * console.log('caught error from number', number)
68
+ * console.log(error)
69
+ * }
70
+ *
71
+ * const asyncHandler = tryCatch(rejectsIfOdd, errorHandler)
45
72
  *
46
- * errorHandler(2) // did not throw for 2
47
- * errorHandler(3) // caught error from number 3
73
+ * asyncHandler(2) // did not throw for 2
74
+ * asyncHandler(3) // caught error from number 3
48
75
  * // Error: 3 is odd
49
76
  *
50
77
  * ```
51
78
  *
52
- * `tryCatch` behaves eagerly (executes immediately with a single call and not with multiple calls like a higher order function) when passed any amount of nonfunction (primitive or object) arguments before the `tryer` and `catcher` functions.
79
+ * When provided any number of arguments before the tryer and catcher functions, `tryCatch` executes immediately.
53
80
  *
54
81
  * ```javascript [playground]
55
82
  * const add = (a, b) => a + b