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
@@ -11,27 +11,26 @@ const promiseRace = require('./promiseRace')
11
11
  * arrayMapPoolAsync<
12
12
  * T any,
13
13
  * array Array<T>,
14
- * mapper T=>Promise|any,
14
+ * f T=>Promise|any,
15
15
  * concurrencyLimit number,
16
16
  * result Array,
17
17
  * index number,
18
18
  * promises Set<Promise>,
19
- * >(array, mapper, concurrencyLimit, result, index, promises) -> result
19
+ * >(array, f, concurrencyLimit, result, index, promises) -> result
20
20
  * ```
21
21
  *
22
22
  * @description
23
- * Apply a mapper with limited concurrency to each item of an array, returning a Promise of an array of results.
23
+ * Apply a function `f` with limited concurrency to each item of an array, returning a Promise of an array of results.
24
24
  */
25
25
  const arrayMapPoolAsync = async function (
26
- array, mapper, concurrencyLimit, result, index, promises,
26
+ array, f, concurrencyLimit, result, index, promises,
27
27
  ) {
28
28
  const arrayLength = array.length
29
29
  while (++index < arrayLength) {
30
30
  if (promises.size >= concurrencyLimit) {
31
31
  await promiseRace(promises)
32
32
  }
33
-
34
- const resultItem = mapper(array[index])
33
+ const resultItem = f(array[index])
35
34
  if (isPromise(resultItem)) {
36
35
  const selfDeletingPromise = resultItem.then(
37
36
  tapSync(() => promises.delete(selfDeletingPromise)))
@@ -45,29 +44,22 @@ const arrayMapPoolAsync = async function (
45
44
  }
46
45
 
47
46
  /**
48
- * @name
49
- * arrayMapPool
47
+ * @name arrayMapPool
50
48
  *
51
49
  * @synopsis
52
50
  * ```coffeescript [specscript]
53
- * arrayMapPool<
54
- * T any,
55
- * array Array<T>
56
- * mapper T=>Promise|any,
57
- * concurrentLimit number,
58
- * >(array, mapper, concurrentLimit) -> Promise|Array
51
+ * arrayMapPool(array Array, concurrency number, f function) -> Promise|string
59
52
  * ```
60
53
  *
61
54
  * @description
62
- * Apply a mapper with limited concurrency to each item of an array, returning an array of results.
55
+ * Apply a function `f` with limited concurrency to each item of an array, returning an array of results.
63
56
  */
64
- const arrayMapPool = function (array, mapper, concurrentLimit) {
57
+ const arrayMapPool = function (array, concurrency, f) {
65
58
  const arrayLength = array.length,
66
59
  result = Array(arrayLength)
67
60
  let index = -1
68
61
  while (++index < arrayLength) {
69
-
70
- const resultItem = mapper(array[index])
62
+ const resultItem = f(array[index])
71
63
  if (isPromise(resultItem)) {
72
64
  const promises = new Set(),
73
65
  selfDeletingPromise = resultItem.then(
@@ -75,7 +67,7 @@ const arrayMapPool = function (array, mapper, concurrentLimit) {
75
67
  promises.add(selfDeletingPromise)
76
68
  result[index] = selfDeletingPromise
77
69
  return arrayMapPoolAsync(
78
- array, mapper, concurrentLimit, result, index, promises)
70
+ array, f, concurrency, result, index, promises)
79
71
  }
80
72
  result[index] = resultItem
81
73
  }
@@ -0,0 +1,80 @@
1
+ const isPromise = require('./isPromise')
2
+ const promiseRace = require('./promiseRace')
3
+ const promiseAll = require('./promiseAll')
4
+ const symbolIterator = require('./symbolIterator')
5
+
6
+ /**
7
+ * @name _mapMapPoolAsync
8
+ *
9
+ * @synopsis
10
+ * ```coffeescript [specscript]
11
+ * _mapMapPoolAsync(
12
+ * m Map,
13
+ * iterator Iterator,
14
+ * concurrency number,
15
+ * f function,
16
+ * result Map,
17
+ * promises Set,
18
+ * ) -> Promise<Map>
19
+ * ```
20
+ */
21
+ const _mapMapPoolAsync = async function (
22
+ m, iterator, concurrency, f, result, promises,
23
+ ) {
24
+ let iteration = iterator.next()
25
+ while (!iteration.done) {
26
+ if (promises.size >= concurrency) {
27
+ await promiseRace(promises)
28
+ }
29
+ const key = iteration.value[0]
30
+ const resultItem = f(iteration.value[1], key, m)
31
+ if (isPromise(resultItem)) {
32
+ result.set(key, resultItem)
33
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
34
+ promises.delete(selfDeletingPromise)
35
+ result.set(key, resolvedValue)
36
+ })
37
+ promises.add(selfDeletingPromise)
38
+ } else {
39
+ result.set(key, resultItem)
40
+ }
41
+ iteration = iterator.next()
42
+ }
43
+ if (promises.size > 0) {
44
+ await promiseAll(promises)
45
+ }
46
+ return result
47
+ }
48
+
49
+ /**
50
+ * @name mapMapPool
51
+ *
52
+ * @synopsis
53
+ * ```coffeescript [specscript]
54
+ * mapMapPool(m Map, concurrency number, f function) -> Promise|Map
55
+ * ```
56
+ */
57
+ const mapMapPool = function (m, concurrency, f) {
58
+ const result = new Map()
59
+ const iterator = m[symbolIterator]()
60
+ let iteration = iterator.next()
61
+ while (!iteration.done) {
62
+ const key = iteration.value[0]
63
+ const resultItem = f(iteration.value[1], key, m)
64
+ if (isPromise(resultItem)) {
65
+ const promises = new Set()
66
+ result.set(key, resultItem)
67
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
68
+ promises.delete(selfDeletingPromise)
69
+ result.set(key, resolvedValue)
70
+ })
71
+ promises.add(selfDeletingPromise)
72
+ return _mapMapPoolAsync(m, iterator, concurrency, f, result, promises)
73
+ }
74
+ result.set(key, resultItem)
75
+ iteration = iterator.next()
76
+ }
77
+ return result
78
+ }
79
+
80
+ module.exports = mapMapPool
@@ -0,0 +1,77 @@
1
+ const isPromise = require('./isPromise')
2
+ const promiseRace = require('./promiseRace')
3
+ const promiseAll = require('./promiseAll')
4
+
5
+ /**
6
+ * @name _objectMapPoolAsync
7
+ *
8
+ * @synopsis
9
+ * ```coffeescript [specscript]
10
+ * _objectMapPoolAsync(
11
+ * o Object,
12
+ * concurrency number,
13
+ * f function,
14
+ * result Object,
15
+ * doneKeys Object,
16
+ * promises Set,
17
+ * ) -> result Promise|Object
18
+ * ```
19
+ */
20
+ const _objectMapPoolAsync = async function (
21
+ o, concurrency, f, result, doneKeys, promises,
22
+ ) {
23
+ for (const key in o) {
24
+ if (key in doneKeys) {
25
+ continue
26
+ }
27
+ if (promises.size >= concurrency) {
28
+ await promiseRace(promises)
29
+ }
30
+ const resultItem = f(o[key], key, o)
31
+ if (isPromise(resultItem)) {
32
+ result[key] = resultItem
33
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
34
+ promises.delete(selfDeletingPromise)
35
+ result[key] = resolvedValue
36
+ })
37
+ promises.add(selfDeletingPromise)
38
+ } else {
39
+ result[key] = resultItem
40
+ }
41
+ }
42
+ if (promises.size > 0) {
43
+ await promiseAll(promises)
44
+ }
45
+ return result
46
+ }
47
+
48
+ /**
49
+ * @name objectMapPool
50
+ *
51
+ * @synopsis
52
+ * ```coffeescript [specscript]
53
+ * objectMapPool(o Object, concurrency number, f function) -> Promise|Object
54
+ * ```
55
+ */
56
+ const objectMapPool = function (o, concurrency, f) {
57
+ const result = {}
58
+ const doneKeys = {}
59
+ for (const key in o) {
60
+ doneKeys[key] = true
61
+ const resultItem = f(o[key], key, o)
62
+ if (isPromise(resultItem)) {
63
+ const promises = new Set()
64
+ result[key] = resultItem
65
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
66
+ promises.delete(selfDeletingPromise)
67
+ result[key] = resolvedValue
68
+ })
69
+ promises.add(selfDeletingPromise)
70
+ return _objectMapPoolAsync(o, concurrency, f, result, doneKeys, promises)
71
+ }
72
+ result[key] = resultItem
73
+ }
74
+ return result
75
+ }
76
+
77
+ module.exports = objectMapPool
@@ -54,6 +54,7 @@ const objectMapSeries = function (object, f) {
54
54
  thunkify4(_objectMapSeriesAsync, object, f, result, doneKeys),
55
55
  ))
56
56
  }
57
+ result[key] = resultItem
57
58
  }
58
59
  return result
59
60
  }
@@ -0,0 +1,79 @@
1
+ const isPromise = require('./isPromise')
2
+ const promiseRace = require('./promiseRace')
3
+ const promiseAll = require('./promiseAll')
4
+ const symbolIterator = require('./symbolIterator')
5
+
6
+ /**
7
+ * @name _setMapPoolAsync
8
+ *
9
+ * @synopsis
10
+ * ```coffeescript [specscript]
11
+ * _setMapPoolAsync(
12
+ * s Set,
13
+ * iterator Iterator,
14
+ * concurrency number,
15
+ * f function,
16
+ * result Set,
17
+ * promises Set,
18
+ * ) -> result Promise<Set>
19
+ * ```
20
+ */
21
+ const _setMapPoolAsync = async function (
22
+ s, iterator, concurrency, f, result, promises,
23
+ ) {
24
+ let iteration = iterator.next()
25
+ while (!iteration.done) {
26
+ if (promises.size >= concurrency) {
27
+ await promiseRace(promises)
28
+ }
29
+ const resultItem = f(iteration.value, iteration.value, s)
30
+ if (isPromise(resultItem)) {
31
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
32
+ promises.delete(selfDeletingPromise)
33
+ result.add(resolvedValue)
34
+ })
35
+ promises.add(selfDeletingPromise)
36
+ } else {
37
+ result.add(resultItem)
38
+ }
39
+ iteration = iterator.next()
40
+ }
41
+ if (promises.size > 0) {
42
+ await promiseAll(promises)
43
+ }
44
+ return result
45
+ }
46
+
47
+ /**
48
+ * @name setMapPool
49
+ *
50
+ * @synopsis
51
+ * ```coffeescript [specscript]
52
+ * setMapPool(s Set, concurrency number, f function) -> Promise|Set
53
+ * ```
54
+ *
55
+ * @description
56
+ * Apply a function `f` with limited concurrency to each item of a set `s`, returning an array of results.
57
+ */
58
+ const setMapPool = function (s, concurrency, f) {
59
+ const result = new Set()
60
+ const iterator = s[symbolIterator]()
61
+ let iteration = iterator.next()
62
+ while (!iteration.done) {
63
+ const resultItem = f(iteration.value, iteration.value, s)
64
+ if (isPromise(resultItem)) {
65
+ const promises = new Set()
66
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
67
+ promises.delete(selfDeletingPromise)
68
+ result.add(resolvedValue)
69
+ })
70
+ promises.add(selfDeletingPromise)
71
+ return _setMapPoolAsync(s, iterator, concurrency, f, result, promises)
72
+ }
73
+ result.add(resultItem)
74
+ iteration = iterator.next()
75
+ }
76
+ return result
77
+ }
78
+
79
+ module.exports = setMapPool
@@ -0,0 +1,22 @@
1
+ const isPromise = require('./isPromise')
2
+ const curry3 = require('./curry3')
3
+ const __ = require('./placeholder')
4
+ const callPropUnary = require('./callPropUnary')
5
+ const arrayMapPool = require('./arrayMapPool')
6
+
7
+ /**
8
+ * @name stringMapPool
9
+ *
10
+ * @synopsis
11
+ * ```coffeescript [specscript]
12
+ * stringMapPool(s string, concurrency number, f function) -> Promise|string
13
+ * ```
14
+ */
15
+ const stringMapPool = function (s, concurrency, f) {
16
+ const result = arrayMapPool(s, concurrency, f)
17
+ return isPromise(result)
18
+ ? result.then(curry3(callPropUnary, __, 'join', ''))
19
+ : result.join('')
20
+ }
21
+
22
+ module.exports = stringMapPool
package/all.js CHANGED
@@ -23,7 +23,7 @@ const functionObjectAll = require('./_internal/functionObjectAll')
23
23
  * ```
24
24
  *
25
25
  * @description
26
- * Function executor and composer. Accepts either an array of functions or an object of functions as the values. Calls each function of the provided array or object in parallel with the provided arguments. Returns either an array or object of the results of the function executions.
26
+ * Function executor and composer. Accepts either an array of functions or an object of functions. Calls each function of the provided array or object in parallel with the provided arguments. Returns either an array or object of the execution results.
27
27
  *
28
28
  * ```javascript [playground]
29
29
  * const createArrayOfGreetingsFor = all([
@@ -72,6 +72,16 @@ const functionObjectAll = require('./_internal/functionObjectAll')
72
72
  * getAndLogUserById('1') // Got user {"_id":1,"name":"George"} by id 1
73
73
  * ```
74
74
  *
75
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
76
+ *
77
+ * ```javascript [playground]
78
+ * all(Promise.resolve({ a: 1 }), [
79
+ * obj => obj.a + 1,
80
+ * obj => obj.a + 2,
81
+ * obj => obj.a + 3,
82
+ * ]).then(console.log) // [2, 3, 4]
83
+ * ```
84
+ *
75
85
  * @execution concurrent
76
86
  */
77
87
 
package/and.js CHANGED
@@ -131,6 +131,15 @@ const areAllPredicatesTruthy = function (args, predicates) {
131
131
  * ) // true
132
132
  * ```
133
133
  *
134
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
135
+ *
136
+ * ```javascript [playground]
137
+ * and(Promise.resolve(5), [
138
+ * n => n > 0,
139
+ * n => n < 10,
140
+ * ]).then(console.log) // true
141
+ * ```
142
+ *
134
143
  * @execution series
135
144
  *
136
145
  * @note ...args slows down here by an order of magnitude
package/assign.js CHANGED
@@ -18,7 +18,7 @@ const _assign = function (object, funcs) {
18
18
  *
19
19
  * @synopsis
20
20
  * ```coffeescript [specscript]
21
- * assign(object Object, resolvers Object<function>) -> result Promise|Object
21
+ * assign(object Promise|Object, resolvers Object<function>) -> result Promise|Object
22
22
  *
23
23
  * assign(resolvers Object<function>)(object Object) -> result Promise|Object
24
24
  * ```
@@ -55,6 +55,19 @@ const _assign = function (object, funcs) {
55
55
  * // { numbers: [1, 2, 3, 4, 5], total: 15 }
56
56
  * ```
57
57
  *
58
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
59
+ *
60
+ * ```javascript [playground]
61
+ * assign(Promise.resolve({}), {
62
+ * a() {
63
+ * return 1
64
+ * },
65
+ * b() {
66
+ * return 2
67
+ * },
68
+ * }).then(console.log)
69
+ * ```
70
+ *
58
71
  * @execution concurrent
59
72
  */
60
73
  const assign = function (arg0, arg1) {
package/compose.js CHANGED
@@ -27,6 +27,14 @@ const funcConcat = require('./_internal/funcConcat')
27
27
  * compose(5, [f, g]),
28
28
  * ) // 16
29
29
  * ```
30
+ *
31
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
32
+ *
33
+ * ```javascript [playground]
34
+ * compose(Promise.resolve(1), 2, Promise.resolve(3), [
35
+ * console.log, // [1, 2, 3]
36
+ * ])
37
+ * ```
30
38
  */
31
39
  const compose = function (...args) {
32
40
  const funcs = args.pop()
@@ -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/__.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.
package/dist/__.es.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/__.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/__.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/__.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/all.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/all.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/all.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/all.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/always.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/always.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/always.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/and.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/and.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/and.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/and.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/assign.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/assign.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.