rubico 2.5.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +259 -60
  137. package/dist/rubico.es.min.js +2 -2
  138. package/dist/rubico.global.js +259 -60
  139. package/dist/rubico.global.min.js +2 -2
  140. package/dist/rubico.js +259 -60
  141. package/dist/rubico.min.js +2 -2
  142. package/dist/rubico.mjs +259 -60
  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 +100 -14
  159. package/dist/tap.es.min.js +2 -2
  160. package/dist/tap.js +100 -14
  161. package/dist/tap.min.js +2 -2
  162. package/dist/tap.mjs +100 -14
  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 +100 -14
  314. package/dist/x/trace.es.min.js +2 -2
  315. package/dist/x/trace.js +100 -14
  316. package/dist/x/trace.min.js +2 -2
  317. package/dist/x/trace.mjs +100 -14
  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 +259 -60
  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 +259 -60
  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 +75 -26
  367. package/transform.js +38 -10
  368. package/tryCatch.js +14 -0
package/dist/x/pluck.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.1
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.
@@ -74,35 +74,6 @@ const curry2 = function (baseFunc, arg0, arg1) {
74
74
  : curry2ResolveArg1(baseFunc, arg0)
75
75
  }
76
76
 
77
- const isArray = Array.isArray
78
-
79
- const isObject = value => {
80
- if (value == null) {
81
- return false
82
- }
83
-
84
- const typeofValue = typeof value
85
- return (typeofValue == 'object') || (typeofValue == 'function')
86
- }
87
-
88
- const promiseAll = Promise.all.bind(Promise)
89
-
90
- const arrayMap = function (array, mapper) {
91
- const arrayLength = array.length,
92
- result = Array(arrayLength)
93
- let index = -1,
94
- isAsync = false
95
-
96
- while (++index < arrayLength) {
97
- const resultItem = mapper(array[index], index, array)
98
- if (isPromise(resultItem)) {
99
- isAsync = true
100
- }
101
- result[index] = resultItem
102
- }
103
- return isAsync ? promiseAll(result) : result
104
- }
105
-
106
77
  // argument resolver for curry3
107
78
  const curry3ResolveArg0 = (
108
79
  baseFunc, arg1, arg2,
@@ -134,6 +105,35 @@ const curry3 = function (baseFunc, arg0, arg1, arg2) {
134
105
  return curry3ResolveArg2(baseFunc, arg0, arg1)
135
106
  }
136
107
 
108
+ const isArray = Array.isArray
109
+
110
+ const isObject = value => {
111
+ if (value == null) {
112
+ return false
113
+ }
114
+
115
+ const typeofValue = typeof value
116
+ return (typeofValue == 'object') || (typeofValue == 'function')
117
+ }
118
+
119
+ const promiseAll = Promise.all.bind(Promise)
120
+
121
+ const arrayMap = function (array, mapper) {
122
+ const arrayLength = array.length,
123
+ result = Array(arrayLength)
124
+ let index = -1,
125
+ isAsync = false
126
+
127
+ while (++index < arrayLength) {
128
+ const resultItem = mapper(array[index], index, array)
129
+ if (isPromise(resultItem)) {
130
+ isAsync = true
131
+ }
132
+ result[index] = resultItem
133
+ }
134
+ return isAsync ? promiseAll(result) : result
135
+ }
136
+
137
137
  const callPropUnary = (value, property, arg0) => value[property](arg0)
138
138
 
139
139
  const stringMap = function (string, mapper) {
@@ -335,6 +335,7 @@ const objectMapSeries = function (object, f) {
335
335
  thunkify4(_objectMapSeriesAsync, object, f, result, doneKeys),
336
336
  ))
337
337
  }
338
+ result[key] = resultItem
338
339
  }
339
340
  return result
340
341
  }
@@ -433,15 +434,14 @@ const tapSync = func => function tapping(...args) {
433
434
  const promiseRace = Promise.race.bind(Promise)
434
435
 
435
436
  const arrayMapPoolAsync = async function (
436
- array, mapper, concurrencyLimit, result, index, promises,
437
+ array, f, concurrencyLimit, result, index, promises,
437
438
  ) {
438
439
  const arrayLength = array.length
439
440
  while (++index < arrayLength) {
440
441
  if (promises.size >= concurrencyLimit) {
441
442
  await promiseRace(promises)
442
443
  }
443
-
444
- const resultItem = mapper(array[index])
444
+ const resultItem = f(array[index])
445
445
  if (isPromise(resultItem)) {
446
446
  const selfDeletingPromise = resultItem.then(
447
447
  tapSync(() => promises.delete(selfDeletingPromise)))
@@ -454,13 +454,12 @@ const arrayMapPoolAsync = async function (
454
454
  return promiseAll(result)
455
455
  }
456
456
 
457
- const arrayMapPool = function (array, mapper, concurrentLimit) {
457
+ const arrayMapPool = function (array, concurrency, f) {
458
458
  const arrayLength = array.length,
459
459
  result = Array(arrayLength)
460
460
  let index = -1
461
461
  while (++index < arrayLength) {
462
-
463
- const resultItem = mapper(array[index])
462
+ const resultItem = f(array[index])
464
463
  if (isPromise(resultItem)) {
465
464
  const promises = new Set(),
466
465
  selfDeletingPromise = resultItem.then(
@@ -468,13 +467,167 @@ const arrayMapPool = function (array, mapper, concurrentLimit) {
468
467
  promises.add(selfDeletingPromise)
469
468
  result[index] = selfDeletingPromise
470
469
  return arrayMapPoolAsync(
471
- array, mapper, concurrentLimit, result, index, promises)
470
+ array, f, concurrency, result, index, promises)
472
471
  }
473
472
  result[index] = resultItem
474
473
  }
475
474
  return result
476
475
  }
477
476
 
477
+ const stringMapPool = function (s, concurrency, f) {
478
+ const result = arrayMapPool(s, concurrency, f)
479
+ return isPromise(result)
480
+ ? result.then(curry3(callPropUnary, __, 'join', ''))
481
+ : result.join('')
482
+ }
483
+
484
+ const _setMapPoolAsync = async function (
485
+ s, iterator, concurrency, f, result, promises,
486
+ ) {
487
+ let iteration = iterator.next()
488
+ while (!iteration.done) {
489
+ if (promises.size >= concurrency) {
490
+ await promiseRace(promises)
491
+ }
492
+ const resultItem = f(iteration.value, iteration.value, s)
493
+ if (isPromise(resultItem)) {
494
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
495
+ promises.delete(selfDeletingPromise)
496
+ result.add(resolvedValue)
497
+ })
498
+ promises.add(selfDeletingPromise)
499
+ } else {
500
+ result.add(resultItem)
501
+ }
502
+ iteration = iterator.next()
503
+ }
504
+ if (promises.size > 0) {
505
+ await promiseAll(promises)
506
+ }
507
+ return result
508
+ }
509
+
510
+ const setMapPool = function (s, concurrency, f) {
511
+ const result = new Set()
512
+ const iterator = s[symbolIterator]()
513
+ let iteration = iterator.next()
514
+ while (!iteration.done) {
515
+ const resultItem = f(iteration.value, iteration.value, s)
516
+ if (isPromise(resultItem)) {
517
+ const promises = new Set()
518
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
519
+ promises.delete(selfDeletingPromise)
520
+ result.add(resolvedValue)
521
+ })
522
+ promises.add(selfDeletingPromise)
523
+ return _setMapPoolAsync(s, iterator, concurrency, f, result, promises)
524
+ }
525
+ result.add(resultItem)
526
+ iteration = iterator.next()
527
+ }
528
+ return result
529
+ }
530
+
531
+ const _mapMapPoolAsync = async function (
532
+ m, iterator, concurrency, f, result, promises,
533
+ ) {
534
+ let iteration = iterator.next()
535
+ while (!iteration.done) {
536
+ if (promises.size >= concurrency) {
537
+ await promiseRace(promises)
538
+ }
539
+ const key = iteration.value[0]
540
+ const resultItem = f(iteration.value[1], key, m)
541
+ if (isPromise(resultItem)) {
542
+ result.set(key, resultItem)
543
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
544
+ promises.delete(selfDeletingPromise)
545
+ result.set(key, resolvedValue)
546
+ })
547
+ promises.add(selfDeletingPromise)
548
+ } else {
549
+ result.set(key, resultItem)
550
+ }
551
+ iteration = iterator.next()
552
+ }
553
+ if (promises.size > 0) {
554
+ await promiseAll(promises)
555
+ }
556
+ return result
557
+ }
558
+
559
+ const mapMapPool = function (m, concurrency, f) {
560
+ const result = new Map()
561
+ const iterator = m[symbolIterator]()
562
+ let iteration = iterator.next()
563
+ while (!iteration.done) {
564
+ const key = iteration.value[0]
565
+ const resultItem = f(iteration.value[1], key, m)
566
+ if (isPromise(resultItem)) {
567
+ const promises = new Set()
568
+ result.set(key, resultItem)
569
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
570
+ promises.delete(selfDeletingPromise)
571
+ result.set(key, resolvedValue)
572
+ })
573
+ promises.add(selfDeletingPromise)
574
+ return _mapMapPoolAsync(m, iterator, concurrency, f, result, promises)
575
+ }
576
+ result.set(key, resultItem)
577
+ iteration = iterator.next()
578
+ }
579
+ return result
580
+ }
581
+
582
+ const _objectMapPoolAsync = async function (
583
+ o, concurrency, f, result, doneKeys, promises,
584
+ ) {
585
+ for (const key in o) {
586
+ if (key in doneKeys) {
587
+ continue
588
+ }
589
+ if (promises.size >= concurrency) {
590
+ await promiseRace(promises)
591
+ }
592
+ const resultItem = f(o[key], key, o)
593
+ if (isPromise(resultItem)) {
594
+ result[key] = resultItem
595
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
596
+ promises.delete(selfDeletingPromise)
597
+ result[key] = resolvedValue
598
+ })
599
+ promises.add(selfDeletingPromise)
600
+ } else {
601
+ result[key] = resultItem
602
+ }
603
+ }
604
+ if (promises.size > 0) {
605
+ await promiseAll(promises)
606
+ }
607
+ return result
608
+ }
609
+
610
+ const objectMapPool = function (o, concurrency, f) {
611
+ const result = {}
612
+ const doneKeys = {}
613
+ for (const key in o) {
614
+ doneKeys[key] = true
615
+ const resultItem = f(o[key], key, o)
616
+ if (isPromise(resultItem)) {
617
+ const promises = new Set()
618
+ result[key] = resultItem
619
+ const selfDeletingPromise = resultItem.then(resolvedValue => {
620
+ promises.delete(selfDeletingPromise)
621
+ result[key] = resolvedValue
622
+ })
623
+ promises.add(selfDeletingPromise)
624
+ return _objectMapPoolAsync(o, concurrency, f, result, doneKeys, promises)
625
+ }
626
+ result[key] = resultItem
627
+ }
628
+ return result
629
+ }
630
+
478
631
  const _curryArity = (arity, func, args) => function curried(...curriedArgs) {
479
632
  const argsLength = args.length,
480
633
  curriedArgsLength = curriedArgs.length,
@@ -610,7 +763,7 @@ const _map = function (value, mapper) {
610
763
  }
611
764
 
612
765
  const map = function (arg0, arg1) {
613
- if (typeof arg0 == 'function') {
766
+ if (arg1 == null) {
614
767
  return curry2(_map, __, arg0)
615
768
  }
616
769
  return isPromise(arg0)
@@ -633,7 +786,7 @@ const _mapEntries = (value, mapper) => {
633
786
  }
634
787
 
635
788
  map.entries = function mapEntries(arg0, arg1) {
636
- if (typeof arg0 == 'function') {
789
+ if (arg1 == null) {
637
790
  return curry2(_mapEntries, __, arg0)
638
791
  }
639
792
  return isPromise(arg0)
@@ -665,7 +818,7 @@ const _mapSeries = function (collection, f) {
665
818
  }
666
819
 
667
820
  map.series = function mapSeries(arg0, arg1) {
668
- if (typeof arg0 == 'function') {
821
+ if (arg1 == null) {
669
822
  return curry2(_mapSeries, __, arg0)
670
823
  }
671
824
  return isPromise(arg0)
@@ -673,11 +826,35 @@ map.series = function mapSeries(arg0, arg1) {
673
826
  : _mapSeries(arg0, arg1)
674
827
  }
675
828
 
676
- map.pool = (concurrencyLimit, mapper) => function concurrentPoolMapping(value) {
677
- if (isArray(value)) {
678
- return arrayMapPool(value, mapper, concurrencyLimit)
829
+ const _mapPool = function (collection, concurrency, f) {
830
+ if (isArray(collection)) {
831
+ return arrayMapPool(collection, concurrency, f)
679
832
  }
680
- throw new TypeError(`${value} is not an Array`)
833
+ if (collection == null) {
834
+ throw new TypeError(`invalid collection ${collection}`)
835
+ }
836
+ if (typeof collection == 'string' || collection.constructor == String) {
837
+ return stringMapPool(collection, concurrency, f)
838
+ }
839
+ if (collection.constructor == Set) {
840
+ return setMapPool(collection, concurrency, f)
841
+ }
842
+ if (collection.constructor == Map) {
843
+ return mapMapPool(collection, concurrency, f)
844
+ }
845
+ if (collection.constructor == Object) {
846
+ return objectMapPool(collection, concurrency, f)
847
+ }
848
+ throw new TypeError(`invalid collection ${collection}`)
849
+ }
850
+
851
+ map.pool = function mapPool(arg0, arg1, arg2) {
852
+ if (arg2 == null) {
853
+ return curry3(_mapPool, __, arg0, arg1)
854
+ }
855
+ return isPromise(arg0)
856
+ ? arg0.then(curry3(_mapPool, __, arg1, arg2))
857
+ : _mapPool(arg0, arg1, arg2)
681
858
  }
682
859
 
683
860
  const memoizeCappedUnary = function (func, cap) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.1
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.1
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/x/prepend.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.1
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.1
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.1
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/x/size.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.1
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.1
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/x/size.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.1
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.1
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/x/size.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.1
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.1
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.
@@ -28,6 +28,26 @@ const thunkConditional = (
28
28
 
29
29
  const __ = Symbol.for('placeholder')
30
30
 
31
+ // argument resolver for curry2
32
+ const curry2ResolveArg0 = (
33
+ baseFunc, arg1,
34
+ ) => function arg0Resolver(arg0) {
35
+ return baseFunc(arg0, arg1)
36
+ }
37
+
38
+ // argument resolver for curry2
39
+ const curry2ResolveArg1 = (
40
+ baseFunc, arg0,
41
+ ) => function arg1Resolver(arg1) {
42
+ return baseFunc(arg0, arg1)
43
+ }
44
+
45
+ const curry2 = function (baseFunc, arg0, arg1) {
46
+ return arg0 == __
47
+ ? curry2ResolveArg0(baseFunc, arg1)
48
+ : curry2ResolveArg1(baseFunc, arg0)
49
+ }
50
+
31
51
  // argument resolver for curry3
32
52
  const curry3ResolveArg0 = (
33
53
  baseFunc, arg1, arg2,
@@ -80,29 +100,81 @@ const curryArgs2 = function (baseFunc, arg0, arg1) {
80
100
  return curryArgs2ResolveArgs1(baseFunc, arg0)
81
101
  }
82
102
 
83
- // _tap(args Array, func function) -> Promise|any
84
- const _tap = function (args, func) {
103
+ // argument resolver for curryArgs3
104
+ const curryArgs3ResolveArgs0 = (
105
+ baseFunc, arg1, arg2,
106
+ ) => function args0Resolver(...args) {
107
+ return baseFunc(args, arg1, arg2)
108
+ }
109
+
110
+ // argument resolver for curryArgs3
111
+ const curryArgs3ResolveArgs1 = (
112
+ baseFunc, arg0, arg2,
113
+ ) => function arg1Resolver(...args) {
114
+ return baseFunc(arg0, args, arg2)
115
+ }
116
+
117
+ // argument resolver for curryArgs3
118
+ const curryArgs3ResolveArgs2 = (
119
+ baseFunc, arg0, arg1,
120
+ ) => function arg2Resolver(...args) {
121
+ return baseFunc(arg0, arg1, args)
122
+ }
123
+
124
+ const curryArgs3 = function (baseFunc, arg0, arg1, arg2) {
125
+ if (arg0 == __) {
126
+ return curryArgs3ResolveArgs0(baseFunc, arg1, arg2)
127
+ }
128
+ if (arg1 == __) {
129
+ return curryArgs3ResolveArgs1(baseFunc, arg0, arg2)
130
+ }
131
+ return curryArgs3ResolveArgs2(baseFunc, arg0, arg1)
132
+ }
133
+
134
+ const areAnyValuesPromises = function (values) {
135
+ const length = values.length
136
+ let index = -1
137
+ while (++index < length) {
138
+ const value = values[index]
139
+ if (isPromise(value)) {
140
+ return true
141
+ }
142
+ }
143
+ return false
144
+ }
145
+
146
+ const promiseAll = Promise.all.bind(Promise)
147
+
148
+ // _tap(args Array, f function) -> Promise|any
149
+ const _tap = function (args, f) {
85
150
  const result = args[0],
86
- call = func(...args)
151
+ call = f(...args)
87
152
  return isPromise(call) ? call.then(always(result)) : result
88
153
  }
89
154
 
90
155
  const tap = function (...args) {
91
- const func = args.pop()
156
+ const f = args.pop()
92
157
  if (args.length == 0) {
93
- return curryArgs2(_tap, __, func)
158
+ return curryArgs2(_tap, __, f)
159
+ }
160
+ if (areAnyValuesPromises(args)) {
161
+ return promiseAll(args).then(curry2(_tap, __, f))
94
162
  }
95
- return _tap(args, func)
163
+ return _tap(args, f)
96
164
  }
97
165
 
98
- tap.if = (predicate, func) => function tappingIf(...args) {
99
- const predication = predicate(...args)
100
- if (isPromise(predication)) {
101
- return predication.then(curry3(
102
- thunkConditional, __, thunkifyArgs(tap(func), args), always(args[0])))
166
+ const _tapIf = function (predicate, f, args) {
167
+ const b = predicate(...args)
168
+ if (isPromise(b)) {
169
+ return b.then(curry3(
170
+ thunkConditional,
171
+ __,
172
+ thunkifyArgs(tap(f), args),
173
+ always(args[0]),
174
+ ))
103
175
  }
104
- if (predication) {
105
- const execution = func(...args)
176
+ if (b) {
177
+ const execution = f(...args)
106
178
  if (isPromise(execution)) {
107
179
  return execution.then(always(args[0]))
108
180
  }
@@ -110,6 +182,20 @@ tap.if = (predicate, func) => function tappingIf(...args) {
110
182
  return args[0]
111
183
  }
112
184
 
185
+ tap.if = function (...args) {
186
+ if (args.length == 2) {
187
+ return curryArgs3(_tapIf, args[0], args[1], __)
188
+ }
189
+ const argsLength = args.length
190
+ const f = args[argsLength - 1]
191
+ const predicate = args[argsLength - 2]
192
+ const argValues = args.slice(0, -2)
193
+ if (areAnyValuesPromises(argValues)) {
194
+ return promiseAll(argValues).then(curry3(_tapIf, predicate, f, __))
195
+ }
196
+ return _tapIf(predicate, f, args)
197
+ }
198
+
113
199
  // ...any => ()
114
200
  const consoleLog = console.log
115
201
 
@@ -1,7 +1,7 @@
1
1
  /**
2
- * rubico v2.5.0
2
+ * rubico v2.6.1
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,funcConcat=(r,n)=>function(...t){const o=r(...t);return isPromise(o)?o.then(n):n(o)},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(o){return r(o,n,t)},curry3ResolveArg1=(r,n,t)=>function(o){return r(n,o,t)},curry3ResolveArg2=(r,n,t)=>function(o){return r(n,t,o)},curry3=function(r,n,t,o){return n==__?curry3ResolveArg0(r,t,o):t==__?curry3ResolveArg1(r,n,o):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],o=n(...r);return isPromise(o)?o.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 o=r(...t);if(isPromise(o))return o.then(curry3(thunkConditional,__,thunkifyArgs(tap(n),t),always(t[0])));if(o){const r=n(...t);if(isPromise(r))return r.then(always(t[0]))}return t[0]};const consoleLog=console.log,trace=function(...r){const n=r[0];return"function"==typeof n?tap(funcConcat(n,consoleLog)):tap(consoleLog)(...r)};export default trace;
7
+ const isPromise=r=>null!=r&&"function"==typeof r.then,funcConcat=(r,n)=>function(...e){const t=r(...e);return isPromise(t)?t.then(n):n(t)},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)},curryArgs3ResolveArgs0=(r,n,e)=>function(...t){return r(t,n,e)},curryArgs3ResolveArgs1=(r,n,e)=>function(...t){return r(n,t,e)},curryArgs3ResolveArgs2=(r,n,e)=>function(...t){return r(n,e,t)},curryArgs3=function(r,n,e,t){return n==__?curryArgs3ResolveArgs0(r,e,t):e==__?curryArgs3ResolveArgs1(r,n,t):curryArgs3ResolveArgs2(r,n,e)},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)},_tapIf=function(r,n,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]};tap.if=function(...r){if(2==r.length)return curryArgs3(_tapIf,r[0],r[1],__);const n=r.length,e=r[n-1],t=r[n-2],o=r.slice(0,-2);return areAnyValuesPromises(o)?promiseAll(o).then(curry3(_tapIf,t,e,__)):_tapIf(t,e,r)};const consoleLog=console.log,trace=function(...r){const n=r[0];return"function"==typeof n?tap(funcConcat(n,consoleLog)):tap(consoleLog)(...r)};export default trace;