rubico 2.5.0 → 2.6.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 (368) hide show
  1. package/_internal/arrayMapPool.js +11 -19
  2. package/_internal/mapMapPool.js +80 -0
  3. package/_internal/objectMapPool.js +77 -0
  4. package/_internal/objectMapSeries.js +1 -0
  5. package/_internal/setMapPool.js +79 -0
  6. package/_internal/stringMapPool.js +22 -0
  7. package/all.js +11 -1
  8. package/and.js +9 -0
  9. package/assign.js +14 -1
  10. package/compose.js +8 -0
  11. package/dist/Transducer.es.js +1 -1
  12. package/dist/Transducer.es.min.js +1 -1
  13. package/dist/Transducer.js +1 -1
  14. package/dist/Transducer.min.js +1 -1
  15. package/dist/Transducer.mjs +1 -1
  16. package/dist/__.es.js +1 -1
  17. package/dist/__.es.min.js +1 -1
  18. package/dist/__.js +1 -1
  19. package/dist/__.min.js +1 -1
  20. package/dist/__.mjs +1 -1
  21. package/dist/all.es.js +1 -1
  22. package/dist/all.es.min.js +1 -1
  23. package/dist/all.js +1 -1
  24. package/dist/all.min.js +1 -1
  25. package/dist/all.mjs +1 -1
  26. package/dist/always.es.js +1 -1
  27. package/dist/always.es.min.js +1 -1
  28. package/dist/always.js +1 -1
  29. package/dist/always.min.js +1 -1
  30. package/dist/always.mjs +1 -1
  31. package/dist/and.es.js +1 -1
  32. package/dist/and.es.min.js +1 -1
  33. package/dist/and.js +1 -1
  34. package/dist/and.min.js +1 -1
  35. package/dist/and.mjs +1 -1
  36. package/dist/assign.es.js +1 -1
  37. package/dist/assign.es.min.js +1 -1
  38. package/dist/assign.js +1 -1
  39. package/dist/assign.min.js +1 -1
  40. package/dist/assign.mjs +1 -1
  41. package/dist/compose.es.js +1 -1
  42. package/dist/compose.es.min.js +1 -1
  43. package/dist/compose.js +1 -1
  44. package/dist/compose.min.js +1 -1
  45. package/dist/compose.mjs +1 -1
  46. package/dist/curry.es.js +1 -1
  47. package/dist/curry.es.min.js +1 -1
  48. package/dist/curry.js +1 -1
  49. package/dist/curry.min.js +1 -1
  50. package/dist/curry.mjs +1 -1
  51. package/dist/eq.es.js +1 -1
  52. package/dist/eq.es.min.js +1 -1
  53. package/dist/eq.js +1 -1
  54. package/dist/eq.min.js +1 -1
  55. package/dist/eq.mjs +1 -1
  56. package/dist/every.es.js +1 -1
  57. package/dist/every.es.min.js +1 -1
  58. package/dist/every.js +1 -1
  59. package/dist/every.min.js +1 -1
  60. package/dist/every.mjs +1 -1
  61. package/dist/filter.es.js +1 -1
  62. package/dist/filter.es.min.js +1 -1
  63. package/dist/filter.js +1 -1
  64. package/dist/filter.min.js +1 -1
  65. package/dist/filter.mjs +1 -1
  66. package/dist/flatMap.es.js +1 -1
  67. package/dist/flatMap.es.min.js +1 -1
  68. package/dist/flatMap.js +1 -1
  69. package/dist/flatMap.min.js +1 -1
  70. package/dist/flatMap.mjs +1 -1
  71. package/dist/forEach.es.js +3 -2
  72. package/dist/forEach.es.min.js +2 -2
  73. package/dist/forEach.js +3 -2
  74. package/dist/forEach.min.js +2 -2
  75. package/dist/forEach.mjs +3 -2
  76. package/dist/get.es.js +1 -1
  77. package/dist/get.es.min.js +1 -1
  78. package/dist/get.js +1 -1
  79. package/dist/get.min.js +1 -1
  80. package/dist/get.mjs +1 -1
  81. package/dist/gt.es.js +1 -1
  82. package/dist/gt.es.min.js +1 -1
  83. package/dist/gt.js +1 -1
  84. package/dist/gt.min.js +1 -1
  85. package/dist/gt.mjs +1 -1
  86. package/dist/gte.es.js +1 -1
  87. package/dist/gte.es.min.js +1 -1
  88. package/dist/gte.js +1 -1
  89. package/dist/gte.min.js +1 -1
  90. package/dist/gte.mjs +1 -1
  91. package/dist/lt.es.js +1 -1
  92. package/dist/lt.es.min.js +1 -1
  93. package/dist/lt.js +1 -1
  94. package/dist/lt.min.js +1 -1
  95. package/dist/lt.mjs +1 -1
  96. package/dist/lte.es.js +1 -1
  97. package/dist/lte.es.min.js +1 -1
  98. package/dist/lte.js +1 -1
  99. package/dist/lte.min.js +1 -1
  100. package/dist/lte.mjs +1 -1
  101. package/dist/map.es.js +221 -44
  102. package/dist/map.es.min.js +2 -2
  103. package/dist/map.js +221 -44
  104. package/dist/map.min.js +2 -2
  105. package/dist/map.mjs +221 -44
  106. package/dist/not.es.js +1 -1
  107. package/dist/not.es.min.js +1 -1
  108. package/dist/not.js +1 -1
  109. package/dist/not.min.js +1 -1
  110. package/dist/not.mjs +1 -1
  111. package/dist/omit.es.js +1 -1
  112. package/dist/omit.es.min.js +1 -1
  113. package/dist/omit.js +1 -1
  114. package/dist/omit.min.js +1 -1
  115. package/dist/omit.mjs +1 -1
  116. package/dist/or.es.js +1 -1
  117. package/dist/or.es.min.js +1 -1
  118. package/dist/or.js +1 -1
  119. package/dist/or.min.js +1 -1
  120. package/dist/or.mjs +1 -1
  121. package/dist/pick.es.js +1 -1
  122. package/dist/pick.es.min.js +1 -1
  123. package/dist/pick.js +1 -1
  124. package/dist/pick.min.js +1 -1
  125. package/dist/pick.mjs +1 -1
  126. package/dist/pipe.es.js +1 -1
  127. package/dist/pipe.es.min.js +1 -1
  128. package/dist/pipe.js +1 -1
  129. package/dist/pipe.min.js +1 -1
  130. package/dist/pipe.mjs +1 -1
  131. package/dist/reduce.es.js +1 -1
  132. package/dist/reduce.es.min.js +1 -1
  133. package/dist/reduce.js +1 -1
  134. package/dist/reduce.min.js +1 -1
  135. package/dist/reduce.mjs +1 -1
  136. package/dist/rubico.es.js +197 -16
  137. package/dist/rubico.es.min.js +2 -2
  138. package/dist/rubico.global.js +197 -16
  139. package/dist/rubico.global.min.js +2 -2
  140. package/dist/rubico.js +197 -16
  141. package/dist/rubico.min.js +2 -2
  142. package/dist/rubico.mjs +197 -16
  143. package/dist/set.es.js +1 -1
  144. package/dist/set.es.min.js +1 -1
  145. package/dist/set.js +1 -1
  146. package/dist/set.min.js +1 -1
  147. package/dist/set.mjs +1 -1
  148. package/dist/some.es.js +1 -1
  149. package/dist/some.es.min.js +1 -1
  150. package/dist/some.js +1 -1
  151. package/dist/some.min.js +1 -1
  152. package/dist/some.mjs +1 -1
  153. package/dist/switchCase.es.js +1 -1
  154. package/dist/switchCase.es.min.js +1 -1
  155. package/dist/switchCase.js +1 -1
  156. package/dist/switchCase.min.js +1 -1
  157. package/dist/switchCase.mjs +1 -1
  158. package/dist/tap.es.js +38 -1
  159. package/dist/tap.es.min.js +2 -2
  160. package/dist/tap.js +38 -1
  161. package/dist/tap.min.js +2 -2
  162. package/dist/tap.mjs +38 -1
  163. package/dist/thunkify.es.js +1 -1
  164. package/dist/thunkify.es.min.js +1 -1
  165. package/dist/thunkify.js +1 -1
  166. package/dist/thunkify.min.js +1 -1
  167. package/dist/thunkify.mjs +1 -1
  168. package/dist/transform.es.js +1 -1
  169. package/dist/transform.es.min.js +1 -1
  170. package/dist/transform.js +1 -1
  171. package/dist/transform.min.js +1 -1
  172. package/dist/transform.mjs +1 -1
  173. package/dist/tryCatch.es.js +1 -1
  174. package/dist/tryCatch.es.min.js +1 -1
  175. package/dist/tryCatch.js +1 -1
  176. package/dist/tryCatch.min.js +1 -1
  177. package/dist/tryCatch.mjs +1 -1
  178. package/dist/x/append.es.js +1 -1
  179. package/dist/x/append.es.min.js +1 -1
  180. package/dist/x/append.js +1 -1
  181. package/dist/x/append.min.js +1 -1
  182. package/dist/x/append.mjs +1 -1
  183. package/dist/x/callProp.es.js +1 -1
  184. package/dist/x/callProp.es.min.js +1 -1
  185. package/dist/x/callProp.js +1 -1
  186. package/dist/x/callProp.min.js +1 -1
  187. package/dist/x/callProp.mjs +1 -1
  188. package/dist/x/defaultsDeep.es.js +1 -1
  189. package/dist/x/defaultsDeep.es.min.js +1 -1
  190. package/dist/x/defaultsDeep.js +1 -1
  191. package/dist/x/defaultsDeep.min.js +1 -1
  192. package/dist/x/defaultsDeep.mjs +1 -1
  193. package/dist/x/differenceWith.es.js +1 -1
  194. package/dist/x/differenceWith.es.min.js +1 -1
  195. package/dist/x/differenceWith.js +1 -1
  196. package/dist/x/differenceWith.min.js +1 -1
  197. package/dist/x/differenceWith.mjs +1 -1
  198. package/dist/x/filterOut.es.js +1 -1
  199. package/dist/x/filterOut.es.min.js +1 -1
  200. package/dist/x/filterOut.js +1 -1
  201. package/dist/x/filterOut.min.js +1 -1
  202. package/dist/x/filterOut.mjs +1 -1
  203. package/dist/x/find.es.js +1 -1
  204. package/dist/x/find.es.min.js +1 -1
  205. package/dist/x/find.js +1 -1
  206. package/dist/x/find.min.js +1 -1
  207. package/dist/x/find.mjs +1 -1
  208. package/dist/x/findIndex.es.js +1 -1
  209. package/dist/x/findIndex.es.min.js +1 -1
  210. package/dist/x/findIndex.js +1 -1
  211. package/dist/x/findIndex.min.js +1 -1
  212. package/dist/x/findIndex.mjs +1 -1
  213. package/dist/x/first.es.js +1 -1
  214. package/dist/x/first.es.min.js +1 -1
  215. package/dist/x/first.js +1 -1
  216. package/dist/x/first.min.js +1 -1
  217. package/dist/x/first.mjs +1 -1
  218. package/dist/x/flatten.es.js +1 -1
  219. package/dist/x/flatten.es.min.js +1 -1
  220. package/dist/x/flatten.js +1 -1
  221. package/dist/x/flatten.min.js +1 -1
  222. package/dist/x/flatten.mjs +1 -1
  223. package/dist/x/groupBy.es.js +1 -1
  224. package/dist/x/groupBy.es.min.js +1 -1
  225. package/dist/x/groupBy.js +1 -1
  226. package/dist/x/groupBy.min.js +1 -1
  227. package/dist/x/groupBy.mjs +1 -1
  228. package/dist/x/has.es.js +1 -1
  229. package/dist/x/has.es.min.js +1 -1
  230. package/dist/x/has.js +1 -1
  231. package/dist/x/has.min.js +1 -1
  232. package/dist/x/has.mjs +1 -1
  233. package/dist/x/identity.es.js +1 -1
  234. package/dist/x/identity.es.min.js +1 -1
  235. package/dist/x/identity.js +1 -1
  236. package/dist/x/identity.min.js +1 -1
  237. package/dist/x/identity.mjs +1 -1
  238. package/dist/x/includes.es.js +1 -1
  239. package/dist/x/includes.es.min.js +1 -1
  240. package/dist/x/includes.js +1 -1
  241. package/dist/x/includes.min.js +1 -1
  242. package/dist/x/includes.mjs +1 -1
  243. package/dist/x/isDeepEqual.es.js +1 -1
  244. package/dist/x/isDeepEqual.es.min.js +1 -1
  245. package/dist/x/isDeepEqual.js +1 -1
  246. package/dist/x/isDeepEqual.min.js +1 -1
  247. package/dist/x/isDeepEqual.mjs +1 -1
  248. package/dist/x/isEmpty.es.js +1 -1
  249. package/dist/x/isEmpty.es.min.js +1 -1
  250. package/dist/x/isEmpty.js +1 -1
  251. package/dist/x/isEmpty.min.js +1 -1
  252. package/dist/x/isEmpty.mjs +1 -1
  253. package/dist/x/isEqual.es.js +1 -1
  254. package/dist/x/isEqual.es.min.js +1 -1
  255. package/dist/x/isEqual.js +1 -1
  256. package/dist/x/isEqual.min.js +1 -1
  257. package/dist/x/isEqual.mjs +1 -1
  258. package/dist/x/isFunction.es.js +1 -1
  259. package/dist/x/isFunction.es.min.js +1 -1
  260. package/dist/x/isFunction.js +1 -1
  261. package/dist/x/isFunction.min.js +1 -1
  262. package/dist/x/isFunction.mjs +1 -1
  263. package/dist/x/isIn.es.js +1 -1
  264. package/dist/x/isIn.es.min.js +1 -1
  265. package/dist/x/isIn.js +1 -1
  266. package/dist/x/isIn.min.js +1 -1
  267. package/dist/x/isIn.mjs +1 -1
  268. package/dist/x/isObject.es.js +1 -1
  269. package/dist/x/isObject.es.min.js +1 -1
  270. package/dist/x/isObject.js +1 -1
  271. package/dist/x/isObject.min.js +1 -1
  272. package/dist/x/isObject.mjs +1 -1
  273. package/dist/x/isString.es.js +1 -1
  274. package/dist/x/isString.es.min.js +1 -1
  275. package/dist/x/isString.js +1 -1
  276. package/dist/x/isString.min.js +1 -1
  277. package/dist/x/isString.mjs +1 -1
  278. package/dist/x/keys.es.js +1 -1
  279. package/dist/x/keys.es.min.js +1 -1
  280. package/dist/x/keys.js +1 -1
  281. package/dist/x/keys.min.js +1 -1
  282. package/dist/x/keys.mjs +1 -1
  283. package/dist/x/last.es.js +1 -1
  284. package/dist/x/last.es.min.js +1 -1
  285. package/dist/x/last.js +1 -1
  286. package/dist/x/last.min.js +1 -1
  287. package/dist/x/last.mjs +1 -1
  288. package/dist/x/maxBy.es.js +1 -1
  289. package/dist/x/maxBy.es.min.js +1 -1
  290. package/dist/x/maxBy.js +1 -1
  291. package/dist/x/maxBy.min.js +1 -1
  292. package/dist/x/maxBy.mjs +1 -1
  293. package/dist/x/noop.es.js +1 -1
  294. package/dist/x/noop.es.min.js +1 -1
  295. package/dist/x/noop.js +1 -1
  296. package/dist/x/noop.min.js +1 -1
  297. package/dist/x/noop.mjs +1 -1
  298. package/dist/x/pluck.es.js +221 -44
  299. package/dist/x/pluck.es.min.js +2 -2
  300. package/dist/x/pluck.js +221 -44
  301. package/dist/x/pluck.min.js +2 -2
  302. package/dist/x/pluck.mjs +221 -44
  303. package/dist/x/prepend.es.js +1 -1
  304. package/dist/x/prepend.es.min.js +1 -1
  305. package/dist/x/prepend.js +1 -1
  306. package/dist/x/prepend.min.js +1 -1
  307. package/dist/x/prepend.mjs +1 -1
  308. package/dist/x/size.es.js +1 -1
  309. package/dist/x/size.es.min.js +1 -1
  310. package/dist/x/size.js +1 -1
  311. package/dist/x/size.min.js +1 -1
  312. package/dist/x/size.mjs +1 -1
  313. package/dist/x/trace.es.js +38 -1
  314. package/dist/x/trace.es.min.js +2 -2
  315. package/dist/x/trace.js +38 -1
  316. package/dist/x/trace.min.js +2 -2
  317. package/dist/x/trace.mjs +38 -1
  318. package/dist/x/unionWith.es.js +1 -1
  319. package/dist/x/unionWith.es.min.js +1 -1
  320. package/dist/x/unionWith.js +1 -1
  321. package/dist/x/unionWith.min.js +1 -1
  322. package/dist/x/unionWith.mjs +1 -1
  323. package/dist/x/uniq.es.js +1 -1
  324. package/dist/x/uniq.es.min.js +1 -1
  325. package/dist/x/uniq.js +1 -1
  326. package/dist/x/uniq.min.js +1 -1
  327. package/dist/x/uniq.mjs +1 -1
  328. package/dist/x/unless.es.js +1 -1
  329. package/dist/x/unless.es.min.js +1 -1
  330. package/dist/x/unless.js +1 -1
  331. package/dist/x/unless.min.js +1 -1
  332. package/dist/x/unless.mjs +1 -1
  333. package/dist/x/values.es.js +1 -1
  334. package/dist/x/values.es.min.js +1 -1
  335. package/dist/x/values.js +1 -1
  336. package/dist/x/values.min.js +1 -1
  337. package/dist/x/values.mjs +1 -1
  338. package/dist/x/when.es.js +1 -1
  339. package/dist/x/when.es.min.js +1 -1
  340. package/dist/x/when.js +1 -1
  341. package/dist/x/when.min.js +1 -1
  342. package/dist/x/when.mjs +1 -1
  343. package/eq.js +6 -0
  344. package/es.js +197 -16
  345. package/every.js +6 -0
  346. package/filter.js +9 -0
  347. package/flatMap.js +7 -0
  348. package/forEach.js +20 -1
  349. package/get.js +6 -0
  350. package/gt.js +6 -0
  351. package/gte.js +6 -0
  352. package/index.js +197 -16
  353. package/lt.js +6 -0
  354. package/lte.js +6 -0
  355. package/map.js +118 -45
  356. package/not.js +8 -0
  357. package/omit.js +7 -0
  358. package/or.js +9 -0
  359. package/package.json +1 -1
  360. package/pick.js +7 -0
  361. package/pipe.js +8 -0
  362. package/reduce.js +8 -0
  363. package/set.js +6 -0
  364. package/some.js +6 -0
  365. package/switchCase.js +12 -0
  366. package/tap.js +11 -0
  367. package/transform.js +38 -10
  368. package/tryCatch.js +14 -0
package/dist/rubico.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -158,6 +158,9 @@ const tap = function (...args) {
158
158
  if (args.length == 0) {
159
159
  return curryArgs2(_tap, __, func)
160
160
  }
161
+ if (areAnyValuesPromises(args)) {
162
+ return promiseAll(args).then(curry2(_tap, __, func))
163
+ }
161
164
  return _tap(args, func)
162
165
  }
163
166
 
@@ -701,6 +704,7 @@ const objectMapSeries = function (object, f) {
701
704
  thunkify4(_objectMapSeriesAsync, object, f, result, doneKeys),
702
705
  ))
703
706
  }
707
+ result[key] = resultItem
704
708
  }
705
709
  return result
706
710
  }
@@ -795,15 +799,14 @@ const tapSync = func => function tapping(...args) {
795
799
  const promiseRace = Promise.race.bind(Promise)
796
800
 
797
801
  const arrayMapPoolAsync = async function (
798
- array, mapper, concurrencyLimit, result, index, promises,
802
+ array, f, concurrencyLimit, result, index, promises,
799
803
  ) {
800
804
  const arrayLength = array.length
801
805
  while (++index < arrayLength) {
802
806
  if (promises.size >= concurrencyLimit) {
803
807
  await promiseRace(promises)
804
808
  }
805
-
806
- const resultItem = mapper(array[index])
809
+ const resultItem = f(array[index])
807
810
  if (isPromise(resultItem)) {
808
811
  const selfDeletingPromise = resultItem.then(
809
812
  tapSync(() => promises.delete(selfDeletingPromise)))
@@ -816,13 +819,12 @@ const arrayMapPoolAsync = async function (
816
819
  return promiseAll(result)
817
820
  }
818
821
 
819
- const arrayMapPool = function (array, mapper, concurrentLimit) {
822
+ const arrayMapPool = function (array, concurrency, f) {
820
823
  const arrayLength = array.length,
821
824
  result = Array(arrayLength)
822
825
  let index = -1
823
826
  while (++index < arrayLength) {
824
-
825
- const resultItem = mapper(array[index])
827
+ const resultItem = f(array[index])
826
828
  if (isPromise(resultItem)) {
827
829
  const promises = new Set(),
828
830
  selfDeletingPromise = resultItem.then(
@@ -830,13 +832,167 @@ const arrayMapPool = function (array, mapper, concurrentLimit) {
830
832
  promises.add(selfDeletingPromise)
831
833
  result[index] = selfDeletingPromise
832
834
  return arrayMapPoolAsync(
833
- array, mapper, concurrentLimit, result, index, promises)
835
+ array, f, concurrency, result, index, promises)
834
836
  }
835
837
  result[index] = resultItem
836
838
  }
837
839
  return result
838
840
  }
839
841
 
842
+ const stringMapPool = function (s, concurrency, f) {
843
+ const result = arrayMapPool(s, concurrency, f)
844
+ return isPromise(result)
845
+ ? result.then(curry3(callPropUnary, __, 'join', ''))
846
+ : result.join('')
847
+ }
848
+
849
+ const _setMapPoolAsync = async function (
850
+ s, iterator, concurrency, f, result, promises,
851
+ ) {
852
+ let iteration = iterator.next()
853
+ while (!iteration.done) {
854
+ if (promises.size >= concurrency) {
855
+ await promiseRace(promises)
856
+ }
857
+ const resultItem = f(iteration.value, iteration.value, s)
858
+ if (isPromise(resultItem)) {
859
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
860
+ promises.delete(selfDeletingPromise)
861
+ result.add(resolvedValue)
862
+ })
863
+ promises.add(selfDeletingPromise)
864
+ } else {
865
+ result.add(resultItem)
866
+ }
867
+ iteration = iterator.next()
868
+ }
869
+ if (promises.size > 0) {
870
+ await promiseAll(promises)
871
+ }
872
+ return result
873
+ }
874
+
875
+ const setMapPool = function (s, concurrency, f) {
876
+ const result = new Set()
877
+ const iterator = s[symbolIterator]()
878
+ let iteration = iterator.next()
879
+ while (!iteration.done) {
880
+ const resultItem = f(iteration.value, iteration.value, s)
881
+ if (isPromise(resultItem)) {
882
+ const promises = new Set()
883
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
884
+ promises.delete(selfDeletingPromise)
885
+ result.add(resolvedValue)
886
+ })
887
+ promises.add(selfDeletingPromise)
888
+ return _setMapPoolAsync(s, iterator, concurrency, f, result, promises)
889
+ }
890
+ result.add(resultItem)
891
+ iteration = iterator.next()
892
+ }
893
+ return result
894
+ }
895
+
896
+ const _mapMapPoolAsync = async function (
897
+ m, iterator, concurrency, f, result, promises,
898
+ ) {
899
+ let iteration = iterator.next()
900
+ while (!iteration.done) {
901
+ if (promises.size >= concurrency) {
902
+ await promiseRace(promises)
903
+ }
904
+ const key = iteration.value[0]
905
+ const resultItem = f(iteration.value[1], key, m)
906
+ if (isPromise(resultItem)) {
907
+ result.set(key, resultItem)
908
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
909
+ promises.delete(selfDeletingPromise)
910
+ result.set(key, resolvedValue)
911
+ })
912
+ promises.add(selfDeletingPromise)
913
+ } else {
914
+ result.set(key, resultItem)
915
+ }
916
+ iteration = iterator.next()
917
+ }
918
+ if (promises.size > 0) {
919
+ await promiseAll(promises)
920
+ }
921
+ return result
922
+ }
923
+
924
+ const mapMapPool = function (m, concurrency, f) {
925
+ const result = new Map()
926
+ const iterator = m[symbolIterator]()
927
+ let iteration = iterator.next()
928
+ while (!iteration.done) {
929
+ const key = iteration.value[0]
930
+ const resultItem = f(iteration.value[1], key, m)
931
+ if (isPromise(resultItem)) {
932
+ const promises = new Set()
933
+ result.set(key, resultItem)
934
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
935
+ promises.delete(selfDeletingPromise)
936
+ result.set(key, resolvedValue)
937
+ })
938
+ promises.add(selfDeletingPromise)
939
+ return _mapMapPoolAsync(m, iterator, concurrency, f, result, promises)
940
+ }
941
+ result.set(key, resultItem)
942
+ iteration = iterator.next()
943
+ }
944
+ return result
945
+ }
946
+
947
+ const _objectMapPoolAsync = async function (
948
+ o, concurrency, f, result, doneKeys, promises,
949
+ ) {
950
+ for (const key in o) {
951
+ if (key in doneKeys) {
952
+ continue
953
+ }
954
+ if (promises.size >= concurrency) {
955
+ await promiseRace(promises)
956
+ }
957
+ const resultItem = f(o[key], key, o)
958
+ if (isPromise(resultItem)) {
959
+ result[key] = resultItem
960
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
961
+ promises.delete(selfDeletingPromise)
962
+ result[key] = resolvedValue
963
+ })
964
+ promises.add(selfDeletingPromise)
965
+ } else {
966
+ result[key] = resultItem
967
+ }
968
+ }
969
+ if (promises.size > 0) {
970
+ await promiseAll(promises)
971
+ }
972
+ return result
973
+ }
974
+
975
+ const objectMapPool = function (o, concurrency, f) {
976
+ const result = {}
977
+ const doneKeys = {}
978
+ for (const key in o) {
979
+ doneKeys[key] = true
980
+ const resultItem = f(o[key], key, o)
981
+ if (isPromise(resultItem)) {
982
+ const promises = new Set()
983
+ result[key] = resultItem
984
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
985
+ promises.delete(selfDeletingPromise)
986
+ result[key] = resolvedValue
987
+ })
988
+ promises.add(selfDeletingPromise)
989
+ return _objectMapPoolAsync(o, concurrency, f, result, doneKeys, promises)
990
+ }
991
+ result[key] = resultItem
992
+ }
993
+ return result
994
+ }
995
+
840
996
  const _curryArity = (arity, func, args) => function curried(...curriedArgs) {
841
997
  const argsLength = args.length,
842
998
  curriedArgsLength = curriedArgs.length,
@@ -972,7 +1128,7 @@ const _map = function (value, mapper) {
972
1128
  }
973
1129
 
974
1130
  const map = function (arg0, arg1) {
975
- if (typeof arg0 == 'function') {
1131
+ if (arg1 == null) {
976
1132
  return curry2(_map, __, arg0)
977
1133
  }
978
1134
  return isPromise(arg0)
@@ -995,7 +1151,7 @@ const _mapEntries = (value, mapper) => {
995
1151
  }
996
1152
 
997
1153
  map.entries = function mapEntries(arg0, arg1) {
998
- if (typeof arg0 == 'function') {
1154
+ if (arg1 == null) {
999
1155
  return curry2(_mapEntries, __, arg0)
1000
1156
  }
1001
1157
  return isPromise(arg0)
@@ -1027,7 +1183,7 @@ const _mapSeries = function (collection, f) {
1027
1183
  }
1028
1184
 
1029
1185
  map.series = function mapSeries(arg0, arg1) {
1030
- if (typeof arg0 == 'function') {
1186
+ if (arg1 == null) {
1031
1187
  return curry2(_mapSeries, __, arg0)
1032
1188
  }
1033
1189
  return isPromise(arg0)
@@ -1035,11 +1191,35 @@ map.series = function mapSeries(arg0, arg1) {
1035
1191
  : _mapSeries(arg0, arg1)
1036
1192
  }
1037
1193
 
1038
- map.pool = (concurrencyLimit, mapper) => function concurrentPoolMapping(value) {
1039
- if (isArray(value)) {
1040
- return arrayMapPool(value, mapper, concurrencyLimit)
1194
+ const _mapPool = function (collection, concurrency, f) {
1195
+ if (isArray(collection)) {
1196
+ return arrayMapPool(collection, concurrency, f)
1197
+ }
1198
+ if (collection == null) {
1199
+ throw new TypeError(`invalid collection ${collection}`)
1041
1200
  }
1042
- throw new TypeError(`${value} is not an Array`)
1201
+ if (typeof collection == 'string' || collection.constructor == String) {
1202
+ return stringMapPool(collection, concurrency, f)
1203
+ }
1204
+ if (collection.constructor == Set) {
1205
+ return setMapPool(collection, concurrency, f)
1206
+ }
1207
+ if (collection.constructor == Map) {
1208
+ return mapMapPool(collection, concurrency, f)
1209
+ }
1210
+ if (collection.constructor == Object) {
1211
+ return objectMapPool(collection, concurrency, f)
1212
+ }
1213
+ throw new TypeError(`invalid collection ${collection}`)
1214
+ }
1215
+
1216
+ map.pool = function mapPool(arg0, arg1, arg2) {
1217
+ if (arg2 == null) {
1218
+ return curry3(_mapPool, __, arg0, arg1)
1219
+ }
1220
+ return isPromise(arg0)
1221
+ ? arg0.then(curry3(_mapPool, __, arg1, arg2))
1222
+ : _mapPool(arg0, arg1, arg2)
1043
1223
  }
1044
1224
 
1045
1225
  const FilteringIterator = (iterator, predicate) => ({
@@ -2146,7 +2326,8 @@ const _forEach = function (collection, callback) {
2146
2326
  return collection
2147
2327
  }
2148
2328
  if (typeof collection.forEach == 'function') {
2149
- return collection.forEach(callback)
2329
+ collection.forEach(callback)
2330
+ return collection
2150
2331
  }
2151
2332
  if (typeof collection[symbolIterator] == 'function') {
2152
2333
  return iteratorForEach(collection[symbolIterator](), callback)
package/dist/set.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/set.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/set.min.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/set.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/some.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/some.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/some.min.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/some.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/tap.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -19,6 +19,26 @@ const thunkConditional = (
19
19
 
20
20
  const __ = Symbol.for('placeholder')
21
21
 
22
+ // argument resolver for curry2
23
+ const curry2ResolveArg0 = (
24
+ baseFunc, arg1,
25
+ ) => function arg0Resolver(arg0) {
26
+ return baseFunc(arg0, arg1)
27
+ }
28
+
29
+ // argument resolver for curry2
30
+ const curry2ResolveArg1 = (
31
+ baseFunc, arg0,
32
+ ) => function arg1Resolver(arg1) {
33
+ return baseFunc(arg0, arg1)
34
+ }
35
+
36
+ const curry2 = function (baseFunc, arg0, arg1) {
37
+ return arg0 == __
38
+ ? curry2ResolveArg0(baseFunc, arg1)
39
+ : curry2ResolveArg1(baseFunc, arg0)
40
+ }
41
+
22
42
  // argument resolver for curry3
23
43
  const curry3ResolveArg0 = (
24
44
  baseFunc, arg1, arg2,
@@ -71,6 +91,20 @@ const curryArgs2 = function (baseFunc, arg0, arg1) {
71
91
  return curryArgs2ResolveArgs1(baseFunc, arg0)
72
92
  }
73
93
 
94
+ const areAnyValuesPromises = function (values) {
95
+ const length = values.length
96
+ let index = -1
97
+ while (++index < length) {
98
+ const value = values[index]
99
+ if (isPromise(value)) {
100
+ return true
101
+ }
102
+ }
103
+ return false
104
+ }
105
+
106
+ const promiseAll = Promise.all.bind(Promise)
107
+
74
108
  // _tap(args Array, func function) -> Promise|any
75
109
  const _tap = function (args, func) {
76
110
  const result = args[0],
@@ -83,6 +117,9 @@ const tap = function (...args) {
83
117
  if (args.length == 0) {
84
118
  return curryArgs2(_tap, __, func)
85
119
  }
120
+ if (areAnyValuesPromises(args)) {
121
+ return promiseAll(args).then(curry2(_tap, __, func))
122
+ }
86
123
  return _tap(args, func)
87
124
  }
88
125
 
@@ -1,7 +1,7 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
6
6
  */
7
- const isPromise=r=>null!=r&&"function"==typeof r.then,always=r=>function(){return r},thunkifyArgs=(r,n)=>function(){return r(...n)},thunkConditional=(r,n,t)=>r?n():t(),__=Symbol.for("placeholder"),curry3ResolveArg0=(r,n,t)=>function(e){return r(e,n,t)},curry3ResolveArg1=(r,n,t)=>function(e){return r(n,e,t)},curry3ResolveArg2=(r,n,t)=>function(e){return r(n,t,e)},curry3=function(r,n,t,e){return n==__?curry3ResolveArg0(r,t,e):t==__?curry3ResolveArg1(r,n,e):curry3ResolveArg2(r,n,t)},curryArgs2ResolveArgs0=(r,n,t)=>function(...t){return r(t,n)},curryArgs2ResolveArgs1=(r,n,t)=>function(...t){return r(n,t)},curryArgs2=function(r,n,t){return n==__?curryArgs2ResolveArgs0(r,t):curryArgs2ResolveArgs1(r,n)},_tap=function(r,n){const t=r[0],e=n(...r);return isPromise(e)?e.then(always(t)):t},tap=function(...r){const n=r.pop();return 0==r.length?curryArgs2(_tap,__,n):_tap(r,n)};tap.if=(r,n)=>function(...t){const e=r(...t);if(isPromise(e))return e.then(curry3(thunkConditional,__,thunkifyArgs(tap(n),t),always(t[0])));if(e){const r=n(...t);if(isPromise(r))return r.then(always(t[0]))}return t[0]};export default tap;
7
+ const isPromise=r=>null!=r&&"function"==typeof r.then,always=r=>function(){return r},thunkifyArgs=(r,n)=>function(){return r(...n)},thunkConditional=(r,n,e)=>r?n():e(),__=Symbol.for("placeholder"),curry2ResolveArg0=(r,n)=>function(e){return r(e,n)},curry2ResolveArg1=(r,n)=>function(e){return r(n,e)},curry2=function(r,n,e){return n==__?curry2ResolveArg0(r,e):curry2ResolveArg1(r,n)},curry3ResolveArg0=(r,n,e)=>function(t){return r(t,n,e)},curry3ResolveArg1=(r,n,e)=>function(t){return r(n,t,e)},curry3ResolveArg2=(r,n,e)=>function(t){return r(n,e,t)},curry3=function(r,n,e,t){return n==__?curry3ResolveArg0(r,e,t):e==__?curry3ResolveArg1(r,n,t):curry3ResolveArg2(r,n,e)},curryArgs2ResolveArgs0=(r,n,e)=>function(...e){return r(e,n)},curryArgs2ResolveArgs1=(r,n,e)=>function(...e){return r(n,e)},curryArgs2=function(r,n,e){return n==__?curryArgs2ResolveArgs0(r,e):curryArgs2ResolveArgs1(r,n)},areAnyValuesPromises=function(r){const n=r.length;let e=-1;for(;++e<n;){const n=r[e];if(isPromise(n))return!0}return!1},promiseAll=Promise.all.bind(Promise),_tap=function(r,n){const e=r[0],t=n(...r);return isPromise(t)?t.then(always(e)):e},tap=function(...r){const n=r.pop();return 0==r.length?curryArgs2(_tap,__,n):areAnyValuesPromises(r)?promiseAll(r).then(curry2(_tap,__,n)):_tap(r,n)};tap.if=(r,n)=>function(...e){const t=r(...e);if(isPromise(t))return t.then(curry3(thunkConditional,__,thunkifyArgs(tap(n),e),always(e[0])));if(t){const r=n(...e);if(isPromise(r))return r.then(always(e[0]))}return e[0]};export default tap;
package/dist/tap.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -25,6 +25,26 @@ const thunkConditional = (
25
25
 
26
26
  const __ = Symbol.for('placeholder')
27
27
 
28
+ // argument resolver for curry2
29
+ const curry2ResolveArg0 = (
30
+ baseFunc, arg1,
31
+ ) => function arg0Resolver(arg0) {
32
+ return baseFunc(arg0, arg1)
33
+ }
34
+
35
+ // argument resolver for curry2
36
+ const curry2ResolveArg1 = (
37
+ baseFunc, arg0,
38
+ ) => function arg1Resolver(arg1) {
39
+ return baseFunc(arg0, arg1)
40
+ }
41
+
42
+ const curry2 = function (baseFunc, arg0, arg1) {
43
+ return arg0 == __
44
+ ? curry2ResolveArg0(baseFunc, arg1)
45
+ : curry2ResolveArg1(baseFunc, arg0)
46
+ }
47
+
28
48
  // argument resolver for curry3
29
49
  const curry3ResolveArg0 = (
30
50
  baseFunc, arg1, arg2,
@@ -77,6 +97,20 @@ const curryArgs2 = function (baseFunc, arg0, arg1) {
77
97
  return curryArgs2ResolveArgs1(baseFunc, arg0)
78
98
  }
79
99
 
100
+ const areAnyValuesPromises = function (values) {
101
+ const length = values.length
102
+ let index = -1
103
+ while (++index < length) {
104
+ const value = values[index]
105
+ if (isPromise(value)) {
106
+ return true
107
+ }
108
+ }
109
+ return false
110
+ }
111
+
112
+ const promiseAll = Promise.all.bind(Promise)
113
+
80
114
  // _tap(args Array, func function) -> Promise|any
81
115
  const _tap = function (args, func) {
82
116
  const result = args[0],
@@ -89,6 +123,9 @@ const tap = function (...args) {
89
123
  if (args.length == 0) {
90
124
  return curryArgs2(_tap, __, func)
91
125
  }
126
+ if (areAnyValuesPromises(args)) {
127
+ return promiseAll(args).then(curry2(_tap, __, func))
128
+ }
92
129
  return _tap(args, func)
93
130
  }
94
131
 
package/dist/tap.min.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 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.tap=t}("object"==typeof globalThis?globalThis:this,function(){"use strict";const n=n=>null!=n&&"function"==typeof n.then,t=n=>function(){return n},e=(n,t,e)=>n?t():e(),o=Symbol.for("placeholder"),r=function(e,o){const r=e[0],u=o(...e);return n(u)?u.then(t(r)):r},u=function(...n){const t=n.pop();return 0==n.length?(e=r,f=t,(u=o)==o?((n,t)=>function(...e){return n(e,t)})(e,f):((n,t)=>function(...e){return n(t,e)})(e,u)):r(n,t);var e,u,f};return u.if=(r,f)=>function(...i){const c=r(...i);if(n(c))return c.then((l=e,s=o,h=((n,t)=>function(){return n(...t)})(u(f),i),p=t(i[0]),s==o?((n,t,e)=>function(o){return n(o,t,e)})(l,h,p):h==o?((n,t,e)=>function(o){return n(t,o,e)})(l,s,p):((n,t,e)=>function(o){return n(t,e,o)})(l,s,h)));var l,s,h,p;if(c){const e=f(...i);if(n(e))return e.then(t(i[0]))}return i[0]},u}());
8
+ !function(n,t){"object"==typeof module?module.exports=t:"function"==typeof define?define((()=>t)):n.tap=t}("object"==typeof globalThis?globalThis:this,function(){"use strict";const n=n=>null!=n&&"function"==typeof n.then,t=n=>function(){return n},r=(n,t,r)=>n?t():r(),e=Symbol.for("placeholder"),o=Promise.all.bind(Promise),u=function(r,e){const o=r[0],u=e(...r);return n(u)?u.then(t(o)):o},i=function(...t){const r=t.pop();return 0==t.length?(i=u,c=r,(f=e)==e?((n,t)=>function(...r){return n(r,t)})(i,c):((n,t)=>function(...r){return n(t,r)})(i,f)):function(t){const r=t.length;let e=-1;for(;++e<r;){const r=t[e];if(n(r))return!0}return!1}(t)?o(t).then(function(n,t,r){return t==e?((n,t)=>function(r){return n(r,t)})(n,r):((n,t)=>function(r){return n(t,r)})(n,t)}(u,e,r)):u(t,r);var i,f,c};return i.if=(o,u)=>function(...f){const c=o(...f);if(n(c))return c.then((l=r,s=e,h=((n,t)=>function(){return n(...t)})(i(u),f),p=t(f[0]),s==e?((n,t,r)=>function(e){return n(e,t,r)})(l,h,p):h==e?((n,t,r)=>function(e){return n(t,e,r)})(l,s,p):((n,t,r)=>function(e){return n(t,r,e)})(l,s,h)));var l,s,h,p;if(c){const r=u(...f);if(n(r))return r.then(t(f[0]))}return f[0]},i}());
package/dist/tap.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -19,6 +19,26 @@ const thunkConditional = (
19
19
 
20
20
  const __ = Symbol.for('placeholder')
21
21
 
22
+ // argument resolver for curry2
23
+ const curry2ResolveArg0 = (
24
+ baseFunc, arg1,
25
+ ) => function arg0Resolver(arg0) {
26
+ return baseFunc(arg0, arg1)
27
+ }
28
+
29
+ // argument resolver for curry2
30
+ const curry2ResolveArg1 = (
31
+ baseFunc, arg0,
32
+ ) => function arg1Resolver(arg1) {
33
+ return baseFunc(arg0, arg1)
34
+ }
35
+
36
+ const curry2 = function (baseFunc, arg0, arg1) {
37
+ return arg0 == __
38
+ ? curry2ResolveArg0(baseFunc, arg1)
39
+ : curry2ResolveArg1(baseFunc, arg0)
40
+ }
41
+
22
42
  // argument resolver for curry3
23
43
  const curry3ResolveArg0 = (
24
44
  baseFunc, arg1, arg2,
@@ -71,6 +91,20 @@ const curryArgs2 = function (baseFunc, arg0, arg1) {
71
91
  return curryArgs2ResolveArgs1(baseFunc, arg0)
72
92
  }
73
93
 
94
+ const areAnyValuesPromises = function (values) {
95
+ const length = values.length
96
+ let index = -1
97
+ while (++index < length) {
98
+ const value = values[index]
99
+ if (isPromise(value)) {
100
+ return true
101
+ }
102
+ }
103
+ return false
104
+ }
105
+
106
+ const promiseAll = Promise.all.bind(Promise)
107
+
74
108
  // _tap(args Array, func function) -> Promise|any
75
109
  const _tap = function (args, func) {
76
110
  const result = args[0],
@@ -83,6 +117,9 @@ const tap = function (...args) {
83
117
  if (args.length == 0) {
84
118
  return curryArgs2(_tap, __, func)
85
119
  }
120
+ if (areAnyValuesPromises(args)) {
121
+ return promiseAll(args).then(curry2(_tap, __, func))
122
+ }
86
123
  return _tap(args, func)
87
124
  }
88
125
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
package/dist/thunkify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.0
3
3
  * https://github.com/a-synchronous/rubico
4
4
  * (c) 2019-2024 Richard Tong
5
5
  * rubico may be freely distributed under the MIT license.