rubico 2.4.2 → 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 (375) hide show
  1. package/README.md +3 -0
  2. package/_internal/arrayMapPool.js +11 -19
  3. package/_internal/mapMapPool.js +80 -0
  4. package/_internal/mapMapSeries.js +62 -0
  5. package/_internal/objectForEachSeries.js +6 -4
  6. package/_internal/objectMapPool.js +77 -0
  7. package/_internal/objectMapSeries.js +62 -0
  8. package/_internal/setAdd.js +14 -0
  9. package/_internal/setMapPool.js +79 -0
  10. package/_internal/setMapSeries.js +61 -0
  11. package/_internal/stringMap.js +1 -1
  12. package/_internal/stringMapPool.js +22 -0
  13. package/_internal/stringMapSeries.js +31 -0
  14. package/all.js +11 -1
  15. package/and.js +9 -0
  16. package/assign.js +14 -1
  17. package/compose.js +8 -0
  18. package/dist/Transducer.es.js +1 -1
  19. package/dist/Transducer.es.min.js +1 -1
  20. package/dist/Transducer.js +1 -1
  21. package/dist/Transducer.min.js +1 -1
  22. package/dist/Transducer.mjs +1 -1
  23. package/dist/__.es.js +1 -1
  24. package/dist/__.es.min.js +1 -1
  25. package/dist/__.js +1 -1
  26. package/dist/__.min.js +1 -1
  27. package/dist/__.mjs +1 -1
  28. package/dist/all.es.js +1 -1
  29. package/dist/all.es.min.js +1 -1
  30. package/dist/all.js +1 -1
  31. package/dist/all.min.js +1 -1
  32. package/dist/all.mjs +1 -1
  33. package/dist/always.es.js +1 -1
  34. package/dist/always.es.min.js +1 -1
  35. package/dist/always.js +1 -1
  36. package/dist/always.min.js +1 -1
  37. package/dist/always.mjs +1 -1
  38. package/dist/and.es.js +1 -1
  39. package/dist/and.es.min.js +1 -1
  40. package/dist/and.js +1 -1
  41. package/dist/and.min.js +1 -1
  42. package/dist/and.mjs +1 -1
  43. package/dist/assign.es.js +1 -1
  44. package/dist/assign.es.min.js +1 -1
  45. package/dist/assign.js +1 -1
  46. package/dist/assign.min.js +1 -1
  47. package/dist/assign.mjs +1 -1
  48. package/dist/compose.es.js +1 -1
  49. package/dist/compose.es.min.js +1 -1
  50. package/dist/compose.js +1 -1
  51. package/dist/compose.min.js +1 -1
  52. package/dist/compose.mjs +1 -1
  53. package/dist/curry.es.js +1 -1
  54. package/dist/curry.es.min.js +1 -1
  55. package/dist/curry.js +1 -1
  56. package/dist/curry.min.js +1 -1
  57. package/dist/curry.mjs +1 -1
  58. package/dist/eq.es.js +1 -1
  59. package/dist/eq.es.min.js +1 -1
  60. package/dist/eq.js +1 -1
  61. package/dist/eq.min.js +1 -1
  62. package/dist/eq.mjs +1 -1
  63. package/dist/every.es.js +1 -1
  64. package/dist/every.es.min.js +1 -1
  65. package/dist/every.js +1 -1
  66. package/dist/every.min.js +1 -1
  67. package/dist/every.mjs +1 -1
  68. package/dist/filter.es.js +1 -1
  69. package/dist/filter.es.min.js +1 -1
  70. package/dist/filter.js +1 -1
  71. package/dist/filter.min.js +1 -1
  72. package/dist/filter.mjs +1 -1
  73. package/dist/flatMap.es.js +1 -1
  74. package/dist/flatMap.es.min.js +1 -1
  75. package/dist/flatMap.js +1 -1
  76. package/dist/flatMap.min.js +1 -1
  77. package/dist/flatMap.mjs +1 -1
  78. package/dist/forEach.es.js +11 -8
  79. package/dist/forEach.es.min.js +2 -2
  80. package/dist/forEach.js +11 -8
  81. package/dist/forEach.min.js +2 -2
  82. package/dist/forEach.mjs +11 -8
  83. package/dist/get.es.js +1 -1
  84. package/dist/get.es.min.js +1 -1
  85. package/dist/get.js +1 -1
  86. package/dist/get.min.js +1 -1
  87. package/dist/get.mjs +1 -1
  88. package/dist/gt.es.js +1 -1
  89. package/dist/gt.es.min.js +1 -1
  90. package/dist/gt.js +1 -1
  91. package/dist/gt.min.js +1 -1
  92. package/dist/gt.mjs +1 -1
  93. package/dist/gte.es.js +1 -1
  94. package/dist/gte.es.min.js +1 -1
  95. package/dist/gte.js +1 -1
  96. package/dist/gte.min.js +1 -1
  97. package/dist/gte.mjs +1 -1
  98. package/dist/lt.es.js +1 -1
  99. package/dist/lt.es.min.js +1 -1
  100. package/dist/lt.js +1 -1
  101. package/dist/lt.min.js +1 -1
  102. package/dist/lt.mjs +1 -1
  103. package/dist/lte.es.js +1 -1
  104. package/dist/lte.es.min.js +1 -1
  105. package/dist/lte.js +1 -1
  106. package/dist/lte.min.js +1 -1
  107. package/dist/lte.mjs +1 -1
  108. package/dist/map.es.js +382 -51
  109. package/dist/map.es.min.js +2 -2
  110. package/dist/map.js +382 -51
  111. package/dist/map.min.js +2 -2
  112. package/dist/map.mjs +382 -51
  113. package/dist/not.es.js +1 -1
  114. package/dist/not.es.min.js +1 -1
  115. package/dist/not.js +1 -1
  116. package/dist/not.min.js +1 -1
  117. package/dist/not.mjs +1 -1
  118. package/dist/omit.es.js +1 -1
  119. package/dist/omit.es.min.js +1 -1
  120. package/dist/omit.js +1 -1
  121. package/dist/omit.min.js +1 -1
  122. package/dist/omit.mjs +1 -1
  123. package/dist/or.es.js +1 -1
  124. package/dist/or.es.min.js +1 -1
  125. package/dist/or.js +1 -1
  126. package/dist/or.min.js +1 -1
  127. package/dist/or.mjs +1 -1
  128. package/dist/pick.es.js +1 -1
  129. package/dist/pick.es.min.js +1 -1
  130. package/dist/pick.js +1 -1
  131. package/dist/pick.min.js +1 -1
  132. package/dist/pick.mjs +1 -1
  133. package/dist/pipe.es.js +1 -1
  134. package/dist/pipe.es.min.js +1 -1
  135. package/dist/pipe.js +1 -1
  136. package/dist/pipe.min.js +1 -1
  137. package/dist/pipe.mjs +1 -1
  138. package/dist/reduce.es.js +1 -1
  139. package/dist/reduce.es.min.js +1 -1
  140. package/dist/reduce.js +1 -1
  141. package/dist/reduce.min.js +1 -1
  142. package/dist/reduce.mjs +1 -1
  143. package/dist/rubico.es.js +362 -33
  144. package/dist/rubico.es.min.js +2 -2
  145. package/dist/rubico.global.js +362 -33
  146. package/dist/rubico.global.min.js +2 -2
  147. package/dist/rubico.js +362 -33
  148. package/dist/rubico.min.js +2 -2
  149. package/dist/rubico.mjs +362 -33
  150. package/dist/set.es.js +1 -1
  151. package/dist/set.es.min.js +1 -1
  152. package/dist/set.js +1 -1
  153. package/dist/set.min.js +1 -1
  154. package/dist/set.mjs +1 -1
  155. package/dist/some.es.js +1 -1
  156. package/dist/some.es.min.js +1 -1
  157. package/dist/some.js +1 -1
  158. package/dist/some.min.js +1 -1
  159. package/dist/some.mjs +1 -1
  160. package/dist/switchCase.es.js +1 -1
  161. package/dist/switchCase.es.min.js +1 -1
  162. package/dist/switchCase.js +1 -1
  163. package/dist/switchCase.min.js +1 -1
  164. package/dist/switchCase.mjs +1 -1
  165. package/dist/tap.es.js +38 -1
  166. package/dist/tap.es.min.js +2 -2
  167. package/dist/tap.js +38 -1
  168. package/dist/tap.min.js +2 -2
  169. package/dist/tap.mjs +38 -1
  170. package/dist/thunkify.es.js +1 -1
  171. package/dist/thunkify.es.min.js +1 -1
  172. package/dist/thunkify.js +1 -1
  173. package/dist/thunkify.min.js +1 -1
  174. package/dist/thunkify.mjs +1 -1
  175. package/dist/transform.es.js +1 -1
  176. package/dist/transform.es.min.js +1 -1
  177. package/dist/transform.js +1 -1
  178. package/dist/transform.min.js +1 -1
  179. package/dist/transform.mjs +1 -1
  180. package/dist/tryCatch.es.js +1 -1
  181. package/dist/tryCatch.es.min.js +1 -1
  182. package/dist/tryCatch.js +1 -1
  183. package/dist/tryCatch.min.js +1 -1
  184. package/dist/tryCatch.mjs +1 -1
  185. package/dist/x/append.es.js +1 -1
  186. package/dist/x/append.es.min.js +1 -1
  187. package/dist/x/append.js +1 -1
  188. package/dist/x/append.min.js +1 -1
  189. package/dist/x/append.mjs +1 -1
  190. package/dist/x/callProp.es.js +1 -1
  191. package/dist/x/callProp.es.min.js +1 -1
  192. package/dist/x/callProp.js +1 -1
  193. package/dist/x/callProp.min.js +1 -1
  194. package/dist/x/callProp.mjs +1 -1
  195. package/dist/x/defaultsDeep.es.js +1 -1
  196. package/dist/x/defaultsDeep.es.min.js +1 -1
  197. package/dist/x/defaultsDeep.js +1 -1
  198. package/dist/x/defaultsDeep.min.js +1 -1
  199. package/dist/x/defaultsDeep.mjs +1 -1
  200. package/dist/x/differenceWith.es.js +1 -1
  201. package/dist/x/differenceWith.es.min.js +1 -1
  202. package/dist/x/differenceWith.js +1 -1
  203. package/dist/x/differenceWith.min.js +1 -1
  204. package/dist/x/differenceWith.mjs +1 -1
  205. package/dist/x/filterOut.es.js +1 -1
  206. package/dist/x/filterOut.es.min.js +1 -1
  207. package/dist/x/filterOut.js +1 -1
  208. package/dist/x/filterOut.min.js +1 -1
  209. package/dist/x/filterOut.mjs +1 -1
  210. package/dist/x/find.es.js +1 -1
  211. package/dist/x/find.es.min.js +1 -1
  212. package/dist/x/find.js +1 -1
  213. package/dist/x/find.min.js +1 -1
  214. package/dist/x/find.mjs +1 -1
  215. package/dist/x/findIndex.es.js +1 -1
  216. package/dist/x/findIndex.es.min.js +1 -1
  217. package/dist/x/findIndex.js +1 -1
  218. package/dist/x/findIndex.min.js +1 -1
  219. package/dist/x/findIndex.mjs +1 -1
  220. package/dist/x/first.es.js +1 -1
  221. package/dist/x/first.es.min.js +1 -1
  222. package/dist/x/first.js +1 -1
  223. package/dist/x/first.min.js +1 -1
  224. package/dist/x/first.mjs +1 -1
  225. package/dist/x/flatten.es.js +1 -1
  226. package/dist/x/flatten.es.min.js +1 -1
  227. package/dist/x/flatten.js +1 -1
  228. package/dist/x/flatten.min.js +1 -1
  229. package/dist/x/flatten.mjs +1 -1
  230. package/dist/x/groupBy.es.js +1 -1
  231. package/dist/x/groupBy.es.min.js +1 -1
  232. package/dist/x/groupBy.js +1 -1
  233. package/dist/x/groupBy.min.js +1 -1
  234. package/dist/x/groupBy.mjs +1 -1
  235. package/dist/x/has.es.js +1 -1
  236. package/dist/x/has.es.min.js +1 -1
  237. package/dist/x/has.js +1 -1
  238. package/dist/x/has.min.js +1 -1
  239. package/dist/x/has.mjs +1 -1
  240. package/dist/x/identity.es.js +1 -1
  241. package/dist/x/identity.es.min.js +1 -1
  242. package/dist/x/identity.js +1 -1
  243. package/dist/x/identity.min.js +1 -1
  244. package/dist/x/identity.mjs +1 -1
  245. package/dist/x/includes.es.js +1 -1
  246. package/dist/x/includes.es.min.js +1 -1
  247. package/dist/x/includes.js +1 -1
  248. package/dist/x/includes.min.js +1 -1
  249. package/dist/x/includes.mjs +1 -1
  250. package/dist/x/isDeepEqual.es.js +1 -1
  251. package/dist/x/isDeepEqual.es.min.js +1 -1
  252. package/dist/x/isDeepEqual.js +1 -1
  253. package/dist/x/isDeepEqual.min.js +1 -1
  254. package/dist/x/isDeepEqual.mjs +1 -1
  255. package/dist/x/isEmpty.es.js +1 -1
  256. package/dist/x/isEmpty.es.min.js +1 -1
  257. package/dist/x/isEmpty.js +1 -1
  258. package/dist/x/isEmpty.min.js +1 -1
  259. package/dist/x/isEmpty.mjs +1 -1
  260. package/dist/x/isEqual.es.js +1 -1
  261. package/dist/x/isEqual.es.min.js +1 -1
  262. package/dist/x/isEqual.js +1 -1
  263. package/dist/x/isEqual.min.js +1 -1
  264. package/dist/x/isEqual.mjs +1 -1
  265. package/dist/x/isFunction.es.js +1 -1
  266. package/dist/x/isFunction.es.min.js +1 -1
  267. package/dist/x/isFunction.js +1 -1
  268. package/dist/x/isFunction.min.js +1 -1
  269. package/dist/x/isFunction.mjs +1 -1
  270. package/dist/x/isIn.es.js +1 -1
  271. package/dist/x/isIn.es.min.js +1 -1
  272. package/dist/x/isIn.js +1 -1
  273. package/dist/x/isIn.min.js +1 -1
  274. package/dist/x/isIn.mjs +1 -1
  275. package/dist/x/isObject.es.js +1 -1
  276. package/dist/x/isObject.es.min.js +1 -1
  277. package/dist/x/isObject.js +1 -1
  278. package/dist/x/isObject.min.js +1 -1
  279. package/dist/x/isObject.mjs +1 -1
  280. package/dist/x/isString.es.js +1 -1
  281. package/dist/x/isString.es.min.js +1 -1
  282. package/dist/x/isString.js +1 -1
  283. package/dist/x/isString.min.js +1 -1
  284. package/dist/x/isString.mjs +1 -1
  285. package/dist/x/keys.es.js +1 -1
  286. package/dist/x/keys.es.min.js +1 -1
  287. package/dist/x/keys.js +1 -1
  288. package/dist/x/keys.min.js +1 -1
  289. package/dist/x/keys.mjs +1 -1
  290. package/dist/x/last.es.js +1 -1
  291. package/dist/x/last.es.min.js +1 -1
  292. package/dist/x/last.js +1 -1
  293. package/dist/x/last.min.js +1 -1
  294. package/dist/x/last.mjs +1 -1
  295. package/dist/x/maxBy.es.js +1 -1
  296. package/dist/x/maxBy.es.min.js +1 -1
  297. package/dist/x/maxBy.js +1 -1
  298. package/dist/x/maxBy.min.js +1 -1
  299. package/dist/x/maxBy.mjs +1 -1
  300. package/dist/x/noop.es.js +1 -1
  301. package/dist/x/noop.es.min.js +1 -1
  302. package/dist/x/noop.js +1 -1
  303. package/dist/x/noop.min.js +1 -1
  304. package/dist/x/noop.mjs +1 -1
  305. package/dist/x/pluck.es.js +382 -51
  306. package/dist/x/pluck.es.min.js +2 -2
  307. package/dist/x/pluck.js +382 -51
  308. package/dist/x/pluck.min.js +2 -2
  309. package/dist/x/pluck.mjs +382 -51
  310. package/dist/x/prepend.es.js +1 -1
  311. package/dist/x/prepend.es.min.js +1 -1
  312. package/dist/x/prepend.js +1 -1
  313. package/dist/x/prepend.min.js +1 -1
  314. package/dist/x/prepend.mjs +1 -1
  315. package/dist/x/size.es.js +1 -1
  316. package/dist/x/size.es.min.js +1 -1
  317. package/dist/x/size.js +1 -1
  318. package/dist/x/size.min.js +1 -1
  319. package/dist/x/size.mjs +1 -1
  320. package/dist/x/trace.es.js +38 -1
  321. package/dist/x/trace.es.min.js +2 -2
  322. package/dist/x/trace.js +38 -1
  323. package/dist/x/trace.min.js +2 -2
  324. package/dist/x/trace.mjs +38 -1
  325. package/dist/x/unionWith.es.js +1 -1
  326. package/dist/x/unionWith.es.min.js +1 -1
  327. package/dist/x/unionWith.js +1 -1
  328. package/dist/x/unionWith.min.js +1 -1
  329. package/dist/x/unionWith.mjs +1 -1
  330. package/dist/x/uniq.es.js +1 -1
  331. package/dist/x/uniq.es.min.js +1 -1
  332. package/dist/x/uniq.js +1 -1
  333. package/dist/x/uniq.min.js +1 -1
  334. package/dist/x/uniq.mjs +1 -1
  335. package/dist/x/unless.es.js +1 -1
  336. package/dist/x/unless.es.min.js +1 -1
  337. package/dist/x/unless.js +1 -1
  338. package/dist/x/unless.min.js +1 -1
  339. package/dist/x/unless.mjs +1 -1
  340. package/dist/x/values.es.js +1 -1
  341. package/dist/x/values.es.min.js +1 -1
  342. package/dist/x/values.js +1 -1
  343. package/dist/x/values.min.js +1 -1
  344. package/dist/x/values.mjs +1 -1
  345. package/dist/x/when.es.js +1 -1
  346. package/dist/x/when.es.min.js +1 -1
  347. package/dist/x/when.js +1 -1
  348. package/dist/x/when.min.js +1 -1
  349. package/dist/x/when.mjs +1 -1
  350. package/eq.js +6 -0
  351. package/es.js +362 -33
  352. package/every.js +6 -0
  353. package/filter.js +9 -0
  354. package/flatMap.js +7 -0
  355. package/forEach.js +22 -3
  356. package/get.js +6 -0
  357. package/gt.js +6 -0
  358. package/gte.js +6 -0
  359. package/index.js +362 -33
  360. package/lt.js +6 -0
  361. package/lte.js +6 -0
  362. package/map.js +172 -44
  363. package/not.js +8 -0
  364. package/omit.js +7 -0
  365. package/or.js +9 -0
  366. package/package.json +1 -1
  367. package/pick.js +7 -0
  368. package/pipe.js +8 -0
  369. package/reduce.js +8 -0
  370. package/set.js +6 -0
  371. package/some.js +6 -0
  372. package/switchCase.js +12 -0
  373. package/tap.js +11 -0
  374. package/transform.js +38 -10
  375. package/tryCatch.js +14 -0
package/es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * rubico v2.4.2
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
 
@@ -658,6 +661,136 @@ const arrayMapSeries = function (array, mapper) {
658
661
  return result
659
662
  }
660
663
 
664
+ const stringMapSeries = function (string, mapper) {
665
+ const result = arrayMapSeries(string, mapper)
666
+ return isPromise(result)
667
+ ? result.then(curry3(callPropUnary, __, 'join', ''))
668
+ : result.join('')
669
+ }
670
+
671
+ const thunkify4 = (func, arg0, arg1, arg2, arg3) => function thunk() {
672
+ return func(arg0, arg1, arg2, arg3)
673
+ }
674
+
675
+ // _objectMapSeriesAsync(
676
+ // object Object,
677
+ // f function,
678
+ // result Object,
679
+ // doneKeys Object
680
+ // ) -> Promise<object>
681
+ const _objectMapSeriesAsync = async function (object, f, result, doneKeys) {
682
+ for (const key in object) {
683
+ if (key in doneKeys) {
684
+ continue
685
+ }
686
+ let resultItem = f(object[key])
687
+ if (isPromise(resultItem)) {
688
+ resultItem = await resultItem
689
+ }
690
+ result[key] = resultItem
691
+ }
692
+ return result
693
+ }
694
+
695
+ const objectMapSeries = function (object, f) {
696
+ const result = {}
697
+ const doneKeys = {}
698
+ for (const key in object) {
699
+ doneKeys[key] = true
700
+ const resultItem = f(object[key], key, object)
701
+ if (isPromise(resultItem)) {
702
+ return resultItem.then(funcConcat(
703
+ curry3(objectSet, result, key, __),
704
+ thunkify4(_objectMapSeriesAsync, object, f, result, doneKeys),
705
+ ))
706
+ }
707
+ result[key] = resultItem
708
+ }
709
+ return result
710
+ }
711
+
712
+ const setAdd = function (set, value) {
713
+ set.add(value)
714
+ return set
715
+ }
716
+
717
+ // _setMapSeriesAsync(
718
+ // iterator Iterator,
719
+ // f function,
720
+ // result Set,
721
+ // ) -> Promise<Set>
722
+ const _setMapSeriesAsync = async function (iterator, f, result) {
723
+ let iteration = iterator.next()
724
+ while (!iteration.done) {
725
+ let resultItem = f(iteration.value)
726
+ if (isPromise(resultItem)) {
727
+ resultItem = await resultItem
728
+ }
729
+ result.add(resultItem)
730
+ iteration = iterator.next()
731
+ }
732
+ return result
733
+ }
734
+
735
+ const setMapSeries = function (set, f) {
736
+ const result = new Set()
737
+ const iterator = set[symbolIterator]()
738
+ let iteration = iterator.next()
739
+ while (!iteration.done) {
740
+ const resultItem = f(iteration.value)
741
+ if (isPromise(resultItem)) {
742
+ return resultItem.then(funcConcat(
743
+ curry2(setAdd, result, __),
744
+ thunkify3(_setMapSeriesAsync, iterator, f, result),
745
+ ))
746
+ }
747
+ result.add(resultItem)
748
+ iteration = iterator.next()
749
+ }
750
+ return result
751
+ }
752
+
753
+ const mapSet = function setting(source, key, value) {
754
+ return source.set(key, value)
755
+ }
756
+
757
+ // _mapMapSeriesAsync(
758
+ // iterator Iterator,
759
+ // f function,
760
+ // result Map,
761
+ // ) -> Promise<Map>
762
+ const _mapMapSeriesAsync = async function (iterator, f, result) {
763
+ let iteration = iterator.next()
764
+ while (!iteration.done) {
765
+ let resultItem = f(iteration.value[1])
766
+ if (isPromise(resultItem)) {
767
+ resultItem = await resultItem
768
+ }
769
+ result.set(iteration.value[0], resultItem)
770
+ iteration = iterator.next()
771
+ }
772
+ return result
773
+ }
774
+
775
+ const mapMapSeries = function (map, f) {
776
+ const result = new Map()
777
+ const iterator = map[symbolIterator]()
778
+ let iteration = iterator.next()
779
+ while (!iteration.done) {
780
+ const key = iteration.value[0]
781
+ const resultItem = f(iteration.value[1])
782
+ if (isPromise(resultItem)) {
783
+ return resultItem.then(funcConcat(
784
+ curry3(mapSet, result, key, __),
785
+ thunkify3(_mapMapSeriesAsync, iterator, f, result),
786
+ ))
787
+ }
788
+ result.set(key, resultItem)
789
+ iteration = iterator.next()
790
+ }
791
+ return result
792
+ }
793
+
661
794
  const tapSync = func => function tapping(...args) {
662
795
  func(...args)
663
796
  return args[0]
@@ -666,15 +799,14 @@ const tapSync = func => function tapping(...args) {
666
799
  const promiseRace = Promise.race.bind(Promise)
667
800
 
668
801
  const arrayMapPoolAsync = async function (
669
- array, mapper, concurrencyLimit, result, index, promises,
802
+ array, f, concurrencyLimit, result, index, promises,
670
803
  ) {
671
804
  const arrayLength = array.length
672
805
  while (++index < arrayLength) {
673
806
  if (promises.size >= concurrencyLimit) {
674
807
  await promiseRace(promises)
675
808
  }
676
-
677
- const resultItem = mapper(array[index])
809
+ const resultItem = f(array[index])
678
810
  if (isPromise(resultItem)) {
679
811
  const selfDeletingPromise = resultItem.then(
680
812
  tapSync(() => promises.delete(selfDeletingPromise)))
@@ -687,13 +819,12 @@ const arrayMapPoolAsync = async function (
687
819
  return promiseAll(result)
688
820
  }
689
821
 
690
- const arrayMapPool = function (array, mapper, concurrentLimit) {
822
+ const arrayMapPool = function (array, concurrency, f) {
691
823
  const arrayLength = array.length,
692
824
  result = Array(arrayLength)
693
825
  let index = -1
694
826
  while (++index < arrayLength) {
695
-
696
- const resultItem = mapper(array[index])
827
+ const resultItem = f(array[index])
697
828
  if (isPromise(resultItem)) {
698
829
  const promises = new Set(),
699
830
  selfDeletingPromise = resultItem.then(
@@ -701,13 +832,167 @@ const arrayMapPool = function (array, mapper, concurrentLimit) {
701
832
  promises.add(selfDeletingPromise)
702
833
  result[index] = selfDeletingPromise
703
834
  return arrayMapPoolAsync(
704
- array, mapper, concurrentLimit, result, index, promises)
835
+ array, f, concurrency, result, index, promises)
705
836
  }
706
837
  result[index] = resultItem
707
838
  }
708
839
  return result
709
840
  }
710
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
+
711
996
  const _curryArity = (arity, func, args) => function curried(...curriedArgs) {
712
997
  const argsLength = args.length,
713
998
  curriedArgsLength = curriedArgs.length,
@@ -786,10 +1071,6 @@ const objectMapEntries = function (object, mapper) {
786
1071
  : promiseAll(promises).then(always(result))
787
1072
  }
788
1073
 
789
- const mapSet = function setting(source, key, value) {
790
- return source.set(key, value)
791
- }
792
-
793
1074
  // (mapper function, result Map, promises Array<Promise>) => (key any, value any) => ()
794
1075
  const mapMapEntriesForEachCallback = (
795
1076
  mapper, result, promises,
@@ -847,7 +1128,7 @@ const _map = function (value, mapper) {
847
1128
  }
848
1129
 
849
1130
  const map = function (arg0, arg1) {
850
- if (typeof arg0 == 'function') {
1131
+ if (arg1 == null) {
851
1132
  return curry2(_map, __, arg0)
852
1133
  }
853
1134
  return isPromise(arg0)
@@ -870,7 +1151,7 @@ const _mapEntries = (value, mapper) => {
870
1151
  }
871
1152
 
872
1153
  map.entries = function mapEntries(arg0, arg1) {
873
- if (typeof arg0 == 'function') {
1154
+ if (arg1 == null) {
874
1155
  return curry2(_mapEntries, __, arg0)
875
1156
  }
876
1157
  return isPromise(arg0)
@@ -878,18 +1159,67 @@ map.entries = function mapEntries(arg0, arg1) {
878
1159
  : _mapEntries(arg0, arg1)
879
1160
  }
880
1161
 
881
- map.series = mapper => function mappingInSeries(value) {
882
- if (isArray(value)) {
883
- return arrayMapSeries(value, mapper)
1162
+ const _mapSeries = function (collection, f) {
1163
+ if (isArray(collection)) {
1164
+ return arrayMapSeries(collection, f)
1165
+ }
1166
+ if (collection == null) {
1167
+ throw new TypeError(`invalid collection ${collection}`)
884
1168
  }
885
- throw new TypeError(`${value} is not an Array`)
1169
+
1170
+ if (typeof collection == 'string' || collection.constructor == String) {
1171
+ return stringMapSeries(collection, f)
1172
+ }
1173
+ if (collection.constructor == Set) {
1174
+ return setMapSeries(collection, f)
1175
+ }
1176
+ if (collection.constructor == Map) {
1177
+ return mapMapSeries(collection, f)
1178
+ }
1179
+ if (collection.constructor == Object) {
1180
+ return objectMapSeries(collection, f)
1181
+ }
1182
+ throw new TypeError(`invalid collection ${collection}`)
886
1183
  }
887
1184
 
888
- map.pool = (concurrencyLimit, mapper) => function concurrentPoolMapping(value) {
889
- if (isArray(value)) {
890
- return arrayMapPool(value, mapper, concurrencyLimit)
1185
+ map.series = function mapSeries(arg0, arg1) {
1186
+ if (arg1 == null) {
1187
+ return curry2(_mapSeries, __, arg0)
1188
+ }
1189
+ return isPromise(arg0)
1190
+ ? arg0.then(curry2(_mapSeries, __, arg1))
1191
+ : _mapSeries(arg0, arg1)
1192
+ }
1193
+
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}`)
1200
+ }
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)
891
1212
  }
892
- throw new TypeError(`${value} is not an Array`)
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)
893
1223
  }
894
1224
 
895
1225
  const FilteringIterator = (iterator, predicate) => ({
@@ -1005,10 +1335,6 @@ const setFilter = function (value, predicate) {
1005
1335
  : promiseAll(promises).then(always(result))
1006
1336
  }
1007
1337
 
1008
- const thunkify4 = (func, arg0, arg1, arg2, arg3) => function thunk() {
1009
- return func(arg0, arg1, arg2, arg3)
1010
- }
1011
-
1012
1338
  const mapFilter = function (map, predicate) {
1013
1339
  const result = new Map(),
1014
1340
  promises = []
@@ -1923,11 +2249,11 @@ const arrayForEachSeries = function (array, callback) {
1923
2249
  // _objectForEachSeriesAsync(
1924
2250
  // object Object,
1925
2251
  // callback function,
1926
- // firstKey string
2252
+ // doneKeys Object,
1927
2253
  // ) -> Promise<object>
1928
- const _objectForEachSeriesAsync = async function (object, callback, firstKey) {
2254
+ const _objectForEachSeriesAsync = async function (object, callback, doneKeys) {
1929
2255
  for (const key in object) {
1930
- if (key == firstKey) {
2256
+ if (key in doneKeys) {
1931
2257
  continue
1932
2258
  }
1933
2259
  const operation = callback(object[key])
@@ -1939,11 +2265,13 @@ const _objectForEachSeriesAsync = async function (object, callback, firstKey) {
1939
2265
  }
1940
2266
 
1941
2267
  const objectForEachSeries = function (object, callback) {
2268
+ const doneKeys = {}
1942
2269
  for (const key in object) {
2270
+ doneKeys[key] = true
1943
2271
  const operation = callback(object[key])
1944
2272
  if (isPromise(operation)) {
1945
2273
  return operation
1946
- .then(thunkify3(_objectForEachSeriesAsync, object, callback, key))
2274
+ .then(thunkify3(_objectForEachSeriesAsync, object, callback, doneKeys))
1947
2275
  }
1948
2276
  }
1949
2277
  return object
@@ -1998,7 +2326,8 @@ const _forEach = function (collection, callback) {
1998
2326
  return collection
1999
2327
  }
2000
2328
  if (typeof collection.forEach == 'function') {
2001
- return collection.forEach(callback)
2329
+ collection.forEach(callback)
2330
+ return collection
2002
2331
  }
2003
2332
  if (typeof collection[symbolIterator] == 'function') {
2004
2333
  return iteratorForEach(collection[symbolIterator](), callback)
@@ -2026,7 +2355,7 @@ const _forEachSeries = function (collection, callback) {
2026
2355
  return arrayForEachSeries(collection, callback)
2027
2356
  }
2028
2357
  if (collection == null) {
2029
- throw new Error(`invalid collection ${collection}`)
2358
+ throw new TypeError(`invalid collection ${collection}`)
2030
2359
  }
2031
2360
  if (typeof collection[symbolIterator] == 'function') {
2032
2361
  return iteratorForEachSeries(collection[symbolIterator](), callback)
@@ -2037,7 +2366,7 @@ const _forEachSeries = function (collection, callback) {
2037
2366
  if (collection.constructor == Object) {
2038
2367
  return objectForEachSeries(collection, callback)
2039
2368
  }
2040
- throw new Error(`invalid collection ${collection}`)
2369
+ throw new TypeError(`invalid collection ${collection}`)
2041
2370
  }
2042
2371
 
2043
2372
  forEach.series = function forEachSeries(arg0, arg1) {
package/every.js CHANGED
@@ -82,6 +82,12 @@ const _every = function (collection, predicate) {
82
82
  * ])
83
83
  * ```
84
84
  *
85
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
86
+ *
87
+ * ```javascript [playground]
88
+ * every(Promise.resolve([1, 2, 3, 4, 5]), n => n < 6).then(console.log) // true
89
+ * ```
90
+ *
85
91
  * @execution concurrent
86
92
  *
87
93
  * @muxing
package/filter.js CHANGED
@@ -226,6 +226,15 @@ const _filter = function (value, predicate) {
226
226
  * }
227
227
  * ```
228
228
  *
229
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
230
+ *
231
+ * ```javascript [playground]
232
+ * const isOdd = number => number % 2 == 1
233
+ *
234
+ * filter(Promise.resolve([1, 2, 3, 4, 5]), isOdd).then(console.log)
235
+ * // [1, 3, 5]
236
+ * ```
237
+ *
229
238
  * @execution concurrent
230
239
  *
231
240
  * @transducing
package/flatMap.js CHANGED
@@ -157,6 +157,13 @@ const _flatMap = function (value, flatMapper) {
157
157
  * ) // Set(10) { 1, 101, 2, 102, 3, 103, 4, 104, 5, 105 }
158
158
  * ```
159
159
  *
160
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
161
+ *
162
+ * ```javascript [playground]
163
+ * flatMap(Promise.resolve([1, 2, 3, 4, 5]), n => [n, n]).then(console.log)
164
+ * // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
165
+ * ```
166
+ *
160
167
  * @execution concurrent
161
168
  *
162
169
  * @transducing
package/forEach.js CHANGED
@@ -25,7 +25,8 @@ const _forEach = function (collection, callback) {
25
25
  return collection
26
26
  }
27
27
  if (typeof collection.forEach == 'function') {
28
- return collection.forEach(callback)
28
+ collection.forEach(callback)
29
+ return collection
29
30
  }
30
31
  if (typeof collection[symbolIterator] == 'function') {
31
32
  return iteratorForEach(collection[symbolIterator](), callback)
@@ -71,6 +72,15 @@ const _forEach = function (collection, callback) {
71
72
  * // 25
72
73
  * ])
73
74
  * ```
75
+ *
76
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
77
+ *
78
+ * ```javascript [playground]
79
+ * forEach(Promise.resolve([1, 2, 3]), console.log)
80
+ * // 1
81
+ * // 2
82
+ * // 3
83
+ * ```
74
84
  */
75
85
  const forEach = function (arg0, arg1) {
76
86
  if (typeof arg0 == 'function') {
@@ -96,7 +106,7 @@ const _forEachSeries = function (collection, callback) {
96
106
  return arrayForEachSeries(collection, callback)
97
107
  }
98
108
  if (collection == null) {
99
- throw new Error(`invalid collection ${collection}`)
109
+ throw new TypeError(`invalid collection ${collection}`)
100
110
  }
101
111
  if (typeof collection[symbolIterator] == 'function') {
102
112
  return iteratorForEachSeries(collection[symbolIterator](), callback)
@@ -107,7 +117,7 @@ const _forEachSeries = function (collection, callback) {
107
117
  if (collection.constructor == Object) {
108
118
  return objectForEachSeries(collection, callback)
109
119
  }
110
- throw new Error(`invalid collection ${collection}`)
120
+ throw new TypeError(`invalid collection ${collection}`)
111
121
  }
112
122
 
113
123
  /**
@@ -130,6 +140,15 @@ const _forEachSeries = function (collection, callback) {
130
140
  *
131
141
  * forEach.series({ a: 1, b: 2, c: 3 }, console.log) // 1 2 3
132
142
  * ```
143
+ *
144
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
145
+ *
146
+ * ```javascript [playground]
147
+ * forEach.series(Promise.resolve([1, 2, 3]), console.log)
148
+ * // 1
149
+ * // 2
150
+ * // 3
151
+ * ```
133
152
  */
134
153
  forEach.series = function forEachSeries(arg0, arg1) {
135
154
  if (typeof arg0 == 'function') {
package/get.js CHANGED
@@ -80,6 +80,12 @@ const _get = function (object, path, defaultValue) {
80
80
  * console.log(get00000BracketNotation([[[[['foo']]]]])) // foo
81
81
  * console.log(get00000ArrayNotation([[[[['foo']]]]])) // foo
82
82
  * ```
83
+ *
84
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
85
+ *
86
+ * ```javascript [playground]
87
+ * get(Promise.resolve({ a: 1 }), 'a').then(console.log) // 1
88
+ * ```
83
89
  */
84
90
 
85
91
  const get = function (arg0, arg1, arg2) {
package/gt.js CHANGED
@@ -47,6 +47,12 @@ const greaterThan = require('./_internal/greaterThan')
47
47
  * console.log, // true
48
48
  * ])
49
49
  * ```
50
+ *
51
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
52
+ *
53
+ * ```javascript [playground]
54
+ * gt(Promise.resolve({ a: 2, b: 1 }), get('a'), get('b')).then(console.log) // true
55
+ * ```
50
56
  */
51
57
  const gt = ComparisonOperator(greaterThan)
52
58
 
package/gte.js CHANGED
@@ -49,6 +49,12 @@ const greaterThanOrEqual = require('./_internal/greaterThanOrEqual')
49
49
  * console.log, // true
50
50
  * ])
51
51
  * ```
52
+ *
53
+ * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
54
+ *
55
+ * ```javascript [playground]
56
+ * gte(Promise.resolve({ a: 1, b: 1 }), get('a'), get('b')).then(console.log) // true
57
+ * ```
52
58
  */
53
59
  const gte = ComparisonOperator(greaterThanOrEqual)
54
60