rubico 2.8.5 → 2.10.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 (382) hide show
  1. package/README.md +2 -1
  2. package/_internal/FlatMappingAsyncIterator.js +41 -30
  3. package/_internal/LinkedList.js +54 -0
  4. package/_internal/LinkedList.test.js +34 -0
  5. package/_internal/MappingAsyncIterator.js +65 -15
  6. package/_internal/SerialMappingAsyncIterator.js +79 -0
  7. package/_internal/curryArity.js +3 -3
  8. package/_internal/iteratorFind.js +0 -2
  9. package/_internal/iteratorForEachSeries.js +1 -1
  10. package/_internal/objectFlatten.js +4 -1
  11. package/all.js +33 -59
  12. package/and.js +1 -1
  13. package/assign.js +14 -16
  14. package/compose.js +12 -13
  15. package/curry.js +1 -1
  16. package/dist/Transducer.es.js +1 -1
  17. package/dist/Transducer.es.min.js +1 -1
  18. package/dist/Transducer.js +1 -1
  19. package/dist/Transducer.min.js +1 -1
  20. package/dist/Transducer.mjs +1 -1
  21. package/dist/__.es.js +1 -1
  22. package/dist/__.es.min.js +1 -1
  23. package/dist/__.js +1 -1
  24. package/dist/__.min.js +1 -1
  25. package/dist/__.mjs +1 -1
  26. package/dist/all.es.js +1 -1
  27. package/dist/all.es.min.js +1 -1
  28. package/dist/all.js +1 -1
  29. package/dist/all.min.js +1 -1
  30. package/dist/all.mjs +1 -1
  31. package/dist/always.es.js +1 -1
  32. package/dist/always.es.min.js +1 -1
  33. package/dist/always.js +1 -1
  34. package/dist/always.min.js +1 -1
  35. package/dist/always.mjs +1 -1
  36. package/dist/and.es.js +1 -1
  37. package/dist/and.es.min.js +1 -1
  38. package/dist/and.js +1 -1
  39. package/dist/and.min.js +1 -1
  40. package/dist/and.mjs +1 -1
  41. package/dist/assign.es.js +1 -1
  42. package/dist/assign.es.min.js +1 -1
  43. package/dist/assign.js +1 -1
  44. package/dist/assign.min.js +1 -1
  45. package/dist/assign.mjs +1 -1
  46. package/dist/compose.es.js +1 -1
  47. package/dist/compose.es.min.js +1 -1
  48. package/dist/compose.js +1 -1
  49. package/dist/compose.min.js +1 -1
  50. package/dist/compose.mjs +1 -1
  51. package/dist/curry.es.js +4 -4
  52. package/dist/curry.es.min.js +2 -2
  53. package/dist/curry.js +4 -4
  54. package/dist/curry.min.js +2 -2
  55. package/dist/curry.mjs +4 -4
  56. package/dist/eq.es.js +1 -1
  57. package/dist/eq.es.min.js +1 -1
  58. package/dist/eq.js +1 -1
  59. package/dist/eq.min.js +1 -1
  60. package/dist/eq.mjs +1 -1
  61. package/dist/every.es.js +1 -1
  62. package/dist/every.es.min.js +1 -1
  63. package/dist/every.js +1 -1
  64. package/dist/every.min.js +1 -1
  65. package/dist/every.mjs +1 -1
  66. package/dist/filter.es.js +4 -4
  67. package/dist/filter.es.min.js +2 -2
  68. package/dist/filter.js +4 -4
  69. package/dist/filter.min.js +2 -2
  70. package/dist/filter.mjs +4 -4
  71. package/dist/flatMap.es.js +44 -28
  72. package/dist/flatMap.es.min.js +2 -2
  73. package/dist/flatMap.js +44 -28
  74. package/dist/flatMap.min.js +2 -2
  75. package/dist/flatMap.mjs +44 -28
  76. package/dist/forEach.es.js +6 -6
  77. package/dist/forEach.es.min.js +2 -2
  78. package/dist/forEach.js +6 -6
  79. package/dist/forEach.min.js +2 -2
  80. package/dist/forEach.mjs +6 -6
  81. package/dist/get.es.js +27 -3
  82. package/dist/get.es.min.js +2 -2
  83. package/dist/get.js +27 -3
  84. package/dist/get.min.js +2 -2
  85. package/dist/get.mjs +27 -3
  86. package/dist/gt.es.js +1 -1
  87. package/dist/gt.es.min.js +1 -1
  88. package/dist/gt.js +1 -1
  89. package/dist/gt.min.js +1 -1
  90. package/dist/gt.mjs +1 -1
  91. package/dist/gte.es.js +1 -1
  92. package/dist/gte.es.min.js +1 -1
  93. package/dist/gte.js +1 -1
  94. package/dist/gte.min.js +1 -1
  95. package/dist/gte.mjs +1 -1
  96. package/dist/lt.es.js +1 -1
  97. package/dist/lt.es.min.js +1 -1
  98. package/dist/lt.js +1 -1
  99. package/dist/lt.min.js +1 -1
  100. package/dist/lt.mjs +1 -1
  101. package/dist/lte.es.js +1 -1
  102. package/dist/lte.es.min.js +1 -1
  103. package/dist/lte.js +1 -1
  104. package/dist/lte.min.js +1 -1
  105. package/dist/lte.mjs +1 -1
  106. package/dist/map.es.js +190 -42
  107. package/dist/map.es.min.js +2 -2
  108. package/dist/map.js +190 -42
  109. package/dist/map.min.js +2 -2
  110. package/dist/map.mjs +190 -42
  111. package/dist/not.es.js +1 -1
  112. package/dist/not.es.min.js +1 -1
  113. package/dist/not.js +1 -1
  114. package/dist/not.min.js +1 -1
  115. package/dist/not.mjs +1 -1
  116. package/dist/omit.es.js +1 -1
  117. package/dist/omit.es.min.js +1 -1
  118. package/dist/omit.js +1 -1
  119. package/dist/omit.min.js +1 -1
  120. package/dist/omit.mjs +1 -1
  121. package/dist/or.es.js +1 -1
  122. package/dist/or.es.min.js +1 -1
  123. package/dist/or.js +1 -1
  124. package/dist/or.min.js +1 -1
  125. package/dist/or.mjs +1 -1
  126. package/dist/pick.es.js +1 -1
  127. package/dist/pick.es.min.js +1 -1
  128. package/dist/pick.js +1 -1
  129. package/dist/pick.min.js +1 -1
  130. package/dist/pick.mjs +1 -1
  131. package/dist/pipe.es.js +1 -1
  132. package/dist/pipe.es.min.js +1 -1
  133. package/dist/pipe.js +1 -1
  134. package/dist/pipe.min.js +1 -1
  135. package/dist/pipe.mjs +1 -1
  136. package/dist/reduce.es.js +1 -1
  137. package/dist/reduce.es.min.js +1 -1
  138. package/dist/reduce.js +1 -1
  139. package/dist/reduce.min.js +1 -1
  140. package/dist/reduce.mjs +1 -1
  141. package/dist/rubico.es.js +238 -83
  142. package/dist/rubico.es.min.js +2 -2
  143. package/dist/rubico.global.js +238 -83
  144. package/dist/rubico.global.min.js +2 -2
  145. package/dist/rubico.js +238 -83
  146. package/dist/rubico.min.js +2 -2
  147. package/dist/rubico.mjs +238 -83
  148. package/dist/set.es.js +1 -1
  149. package/dist/set.es.min.js +1 -1
  150. package/dist/set.js +1 -1
  151. package/dist/set.min.js +1 -1
  152. package/dist/set.mjs +1 -1
  153. package/dist/some.es.js +1 -1
  154. package/dist/some.es.min.js +1 -1
  155. package/dist/some.js +1 -1
  156. package/dist/some.min.js +1 -1
  157. package/dist/some.mjs +1 -1
  158. package/dist/switchCase.es.js +1 -1
  159. package/dist/switchCase.es.min.js +1 -1
  160. package/dist/switchCase.js +1 -1
  161. package/dist/switchCase.min.js +1 -1
  162. package/dist/switchCase.mjs +1 -1
  163. package/dist/tap.es.js +1 -1
  164. package/dist/tap.es.min.js +1 -1
  165. package/dist/tap.js +1 -1
  166. package/dist/tap.min.js +1 -1
  167. package/dist/tap.mjs +1 -1
  168. package/dist/thunkify.es.js +1 -1
  169. package/dist/thunkify.es.min.js +1 -1
  170. package/dist/thunkify.js +1 -1
  171. package/dist/thunkify.min.js +1 -1
  172. package/dist/thunkify.mjs +1 -1
  173. package/dist/transform.es.js +1 -1
  174. package/dist/transform.es.min.js +1 -1
  175. package/dist/transform.js +1 -1
  176. package/dist/transform.min.js +1 -1
  177. package/dist/transform.mjs +1 -1
  178. package/dist/tryCatch.es.js +1 -1
  179. package/dist/tryCatch.es.min.js +1 -1
  180. package/dist/tryCatch.js +1 -1
  181. package/dist/tryCatch.min.js +1 -1
  182. package/dist/tryCatch.mjs +1 -1
  183. package/dist/x/append.es.js +1 -1
  184. package/dist/x/append.es.min.js +1 -1
  185. package/dist/x/append.js +1 -1
  186. package/dist/x/append.min.js +1 -1
  187. package/dist/x/append.mjs +1 -1
  188. package/dist/x/callProp.es.js +1 -1
  189. package/dist/x/callProp.es.min.js +1 -1
  190. package/dist/x/callProp.js +1 -1
  191. package/dist/x/callProp.min.js +1 -1
  192. package/dist/x/callProp.mjs +1 -1
  193. package/dist/x/defaultsDeep.es.js +1 -1
  194. package/dist/x/defaultsDeep.es.min.js +1 -1
  195. package/dist/x/defaultsDeep.js +1 -1
  196. package/dist/x/defaultsDeep.min.js +1 -1
  197. package/dist/x/defaultsDeep.mjs +1 -1
  198. package/dist/x/differenceWith.es.js +1 -1
  199. package/dist/x/differenceWith.es.min.js +1 -1
  200. package/dist/x/differenceWith.js +1 -1
  201. package/dist/x/differenceWith.min.js +1 -1
  202. package/dist/x/differenceWith.mjs +1 -1
  203. package/dist/x/filterOut.es.js +4 -4
  204. package/dist/x/filterOut.es.min.js +2 -2
  205. package/dist/x/filterOut.js +4 -4
  206. package/dist/x/filterOut.min.js +2 -2
  207. package/dist/x/filterOut.mjs +4 -4
  208. package/dist/x/find.es.js +1 -3
  209. package/dist/x/find.es.min.js +1 -1
  210. package/dist/x/find.js +1 -3
  211. package/dist/x/find.min.js +1 -1
  212. package/dist/x/find.mjs +1 -3
  213. package/dist/x/findIndex.es.js +1 -1
  214. package/dist/x/findIndex.es.min.js +1 -1
  215. package/dist/x/findIndex.js +1 -1
  216. package/dist/x/findIndex.min.js +1 -1
  217. package/dist/x/findIndex.mjs +1 -1
  218. package/dist/x/first.es.js +1 -1
  219. package/dist/x/first.es.min.js +1 -1
  220. package/dist/x/first.js +1 -1
  221. package/dist/x/first.min.js +1 -1
  222. package/dist/x/first.mjs +1 -1
  223. package/dist/x/flatten.es.js +44 -28
  224. package/dist/x/flatten.es.min.js +2 -2
  225. package/dist/x/flatten.js +44 -28
  226. package/dist/x/flatten.min.js +2 -2
  227. package/dist/x/flatten.mjs +44 -28
  228. package/dist/x/groupBy.es.js +1 -1
  229. package/dist/x/groupBy.es.min.js +1 -1
  230. package/dist/x/groupBy.js +1 -1
  231. package/dist/x/groupBy.min.js +1 -1
  232. package/dist/x/groupBy.mjs +1 -1
  233. package/dist/x/has.es.js +1 -1
  234. package/dist/x/has.es.min.js +1 -1
  235. package/dist/x/has.js +1 -1
  236. package/dist/x/has.min.js +1 -1
  237. package/dist/x/has.mjs +1 -1
  238. package/dist/x/identity.es.js +1 -1
  239. package/dist/x/identity.es.min.js +1 -1
  240. package/dist/x/identity.js +1 -1
  241. package/dist/x/identity.min.js +1 -1
  242. package/dist/x/identity.mjs +1 -1
  243. package/dist/x/includes.es.js +1 -1
  244. package/dist/x/includes.es.min.js +1 -1
  245. package/dist/x/includes.js +1 -1
  246. package/dist/x/includes.min.js +1 -1
  247. package/dist/x/includes.mjs +1 -1
  248. package/dist/x/isDeepEqual.es.js +1 -1
  249. package/dist/x/isDeepEqual.es.min.js +1 -1
  250. package/dist/x/isDeepEqual.js +1 -1
  251. package/dist/x/isDeepEqual.min.js +1 -1
  252. package/dist/x/isDeepEqual.mjs +1 -1
  253. package/dist/x/isEmpty.es.js +1 -1
  254. package/dist/x/isEmpty.es.min.js +1 -1
  255. package/dist/x/isEmpty.js +1 -1
  256. package/dist/x/isEmpty.min.js +1 -1
  257. package/dist/x/isEmpty.mjs +1 -1
  258. package/dist/x/isEqual.es.js +1 -1
  259. package/dist/x/isEqual.es.min.js +1 -1
  260. package/dist/x/isEqual.js +1 -1
  261. package/dist/x/isEqual.min.js +1 -1
  262. package/dist/x/isEqual.mjs +1 -1
  263. package/dist/x/isFunction.es.js +1 -1
  264. package/dist/x/isFunction.es.min.js +1 -1
  265. package/dist/x/isFunction.js +1 -1
  266. package/dist/x/isFunction.min.js +1 -1
  267. package/dist/x/isFunction.mjs +1 -1
  268. package/dist/x/isIn.es.js +1 -1
  269. package/dist/x/isIn.es.min.js +1 -1
  270. package/dist/x/isIn.js +1 -1
  271. package/dist/x/isIn.min.js +1 -1
  272. package/dist/x/isIn.mjs +1 -1
  273. package/dist/x/isObject.es.js +1 -1
  274. package/dist/x/isObject.es.min.js +1 -1
  275. package/dist/x/isObject.js +1 -1
  276. package/dist/x/isObject.min.js +1 -1
  277. package/dist/x/isObject.mjs +1 -1
  278. package/dist/x/isString.es.js +1 -1
  279. package/dist/x/isString.es.min.js +1 -1
  280. package/dist/x/isString.js +1 -1
  281. package/dist/x/isString.min.js +1 -1
  282. package/dist/x/isString.mjs +1 -1
  283. package/dist/x/keys.es.js +1 -1
  284. package/dist/x/keys.es.min.js +1 -1
  285. package/dist/x/keys.js +1 -1
  286. package/dist/x/keys.min.js +1 -1
  287. package/dist/x/keys.mjs +1 -1
  288. package/dist/x/last.es.js +1 -1
  289. package/dist/x/last.es.min.js +1 -1
  290. package/dist/x/last.js +1 -1
  291. package/dist/x/last.min.js +1 -1
  292. package/dist/x/last.mjs +1 -1
  293. package/dist/x/maxBy.es.js +27 -23
  294. package/dist/x/maxBy.es.min.js +2 -2
  295. package/dist/x/maxBy.js +27 -23
  296. package/dist/x/maxBy.min.js +2 -2
  297. package/dist/x/maxBy.mjs +27 -23
  298. package/dist/x/noop.es.js +1 -1
  299. package/dist/x/noop.es.min.js +1 -1
  300. package/dist/x/noop.js +1 -1
  301. package/dist/x/noop.min.js +1 -1
  302. package/dist/x/noop.mjs +1 -1
  303. package/dist/x/pluck.es.js +194 -44
  304. package/dist/x/pluck.es.min.js +2 -2
  305. package/dist/x/pluck.js +194 -44
  306. package/dist/x/pluck.min.js +2 -2
  307. package/dist/x/pluck.mjs +194 -44
  308. package/dist/x/prepend.es.js +1 -1
  309. package/dist/x/prepend.es.min.js +1 -1
  310. package/dist/x/prepend.js +1 -1
  311. package/dist/x/prepend.min.js +1 -1
  312. package/dist/x/prepend.mjs +1 -1
  313. package/dist/x/size.es.js +1 -1
  314. package/dist/x/size.es.min.js +1 -1
  315. package/dist/x/size.js +1 -1
  316. package/dist/x/size.min.js +1 -1
  317. package/dist/x/size.mjs +1 -1
  318. package/dist/x/trace.es.js +1 -1
  319. package/dist/x/trace.es.min.js +1 -1
  320. package/dist/x/trace.js +1 -1
  321. package/dist/x/trace.min.js +1 -1
  322. package/dist/x/trace.mjs +1 -1
  323. package/dist/x/unionWith.es.js +1 -1
  324. package/dist/x/unionWith.es.min.js +1 -1
  325. package/dist/x/unionWith.js +1 -1
  326. package/dist/x/unionWith.min.js +1 -1
  327. package/dist/x/unionWith.mjs +1 -1
  328. package/dist/x/uniq.es.js +1 -1
  329. package/dist/x/uniq.es.min.js +1 -1
  330. package/dist/x/uniq.js +1 -1
  331. package/dist/x/uniq.min.js +1 -1
  332. package/dist/x/uniq.mjs +1 -1
  333. package/dist/x/unless.es.js +1 -1
  334. package/dist/x/unless.es.min.js +1 -1
  335. package/dist/x/unless.js +1 -1
  336. package/dist/x/unless.min.js +1 -1
  337. package/dist/x/unless.mjs +1 -1
  338. package/dist/x/values.es.js +1 -1
  339. package/dist/x/values.es.min.js +1 -1
  340. package/dist/x/values.js +1 -1
  341. package/dist/x/values.min.js +1 -1
  342. package/dist/x/values.mjs +1 -1
  343. package/dist/x/when.es.js +1 -1
  344. package/dist/x/when.es.min.js +1 -1
  345. package/dist/x/when.js +1 -1
  346. package/dist/x/when.min.js +1 -1
  347. package/dist/x/when.mjs +1 -1
  348. package/eq.js +2 -2
  349. package/es.js +238 -83
  350. package/every.js +2 -2
  351. package/filter.js +4 -4
  352. package/flatMap.js +61 -54
  353. package/forEach.js +33 -56
  354. package/get.js +49 -25
  355. package/gt.js +2 -2
  356. package/gte.js +2 -2
  357. package/index.js +238 -83
  358. package/lt.js +2 -2
  359. package/lte.js +2 -2
  360. package/map.js +115 -151
  361. package/monad/Mux.js +6 -4
  362. package/monad/PossiblePromise.js +6 -4
  363. package/monad/README.md +61 -40
  364. package/monad/Struct.js +6 -4
  365. package/not.js +1 -1
  366. package/omit.js +22 -19
  367. package/or.js +1 -1
  368. package/package.json +1 -1
  369. package/pick.js +14 -11
  370. package/pipe.js +18 -24
  371. package/reduce.js +1 -1
  372. package/set.js +17 -18
  373. package/some.js +2 -2
  374. package/switchCase.js +51 -43
  375. package/tap.js +17 -23
  376. package/transform.js +1 -1
  377. package/tryCatch.js +16 -24
  378. package/x/defaultsDeep.js +1 -1
  379. package/x/defaultsDeep.test.js +1 -1
  380. package/_internal/NextIteration.js +0 -12
  381. package/_internal/generatorFunctionFilter.js +0 -28
  382. package/_internal/iterationMap.js +0 -27
package/forEach.js CHANGED
@@ -24,16 +24,16 @@ const _forEach = function (collection, callback) {
24
24
  if (collection == null) {
25
25
  return collection
26
26
  }
27
- if (typeof collection.forEach == 'function') {
28
- collection.forEach(callback)
29
- return collection
30
- }
31
27
  if (typeof collection[symbolIterator] == 'function') {
32
28
  return iteratorForEach(collection[symbolIterator](), callback)
33
29
  }
34
30
  if (typeof collection[symbolAsyncIterator] == 'function') {
35
31
  return asyncIteratorForEach(collection[symbolAsyncIterator](), callback)
36
32
  }
33
+ if (typeof collection.forEach == 'function') {
34
+ collection.forEach(callback)
35
+ return collection
36
+ }
37
37
  if (collection.constructor == Object) {
38
38
  return objectForEach(collection, callback)
39
39
  }
@@ -48,22 +48,19 @@ const _forEach = function (collection, callback) {
48
48
  * type Iterable = Array|Set|Map|Generator|AsyncGenerator|{ forEach: function }|Object
49
49
  *
50
50
  * type SyncOrAsyncCallback = (
51
- * element any,
51
+ * item any,
52
52
  * indexOrKey number|string|any,
53
- * iter Iterable
53
+ * iterable Iterable
54
54
  * )=>Promise|undefined
55
55
  *
56
- * iterable Iterable
57
- * cb SyncOrAsyncCallback
58
- *
59
- * forEach(iterable, cb) -> unmodifiedIterable Promise|Iterable
60
- * forEach(cb)(iterable) -> unmodifiedIterable Promise|Iterable
56
+ * forEach(iterable Promise|Iterable, callback SyncOrAsyncCallback) -> iterable Promise|Iterable
57
+ * forEach(callback SyncOrAsyncCallback)(iterable Iterable) -> iterable Promise|Iterable
61
58
  * ```
62
59
  *
63
60
  * @description
64
- * Execute a callback function for each element of an iterable, returning the original iterable unmodified.
61
+ * Executes a callback function for each item of an iterable, returning the original iterable unmodified.
65
62
  *
66
- * The following data types are considered to be iterables:
63
+ * The following data types are considered to be iterable:
67
64
  * * `array`
68
65
  * * `set`
69
66
  * * `map`
@@ -76,36 +73,44 @@ const _forEach = function (collection, callback) {
76
73
  *
77
74
  * If the iterable is an array:
78
75
  * ```coffeescript [specscript]
79
- * callback(element any, index number, iter Array) -> Promise|undefined
76
+ * callback(item any, index number, iterable Array) -> Promise|undefined
80
77
  * ```
81
78
  *
82
79
  * If the iterable is a set:
83
80
  * ```coffeescript [specscript]
84
- * callback(element any, key any, iter Set) -> Promise|undefined
81
+ * callback(item any, item any, iterable Set) -> Promise|undefined
85
82
  * ```
86
83
  *
87
84
  * If the iterable is a map:
88
85
  * ```coffeescript [specscript]
89
- * callback(element any, key any, filt Map) -> Promise|undefined
86
+ * callback(item any, key any, iterable Map) -> Promise|undefined
90
87
  * ```
91
88
  *
92
89
  * If the iterable is a generator:
93
90
  * ```coffeescript [specscript]
94
- * callback(element any) -> Promise|undefined
91
+ * callback(item any) -> Promise|undefined
95
92
  * ```
96
93
  *
97
94
  * If the iterable is an async generator:
98
95
  * ```coffeescript [specscript]
99
- * callback(element any) -> Promise|undefined
96
+ * callback(item any) -> Promise|undefined
100
97
  * ```
101
98
  *
102
- * If the iterable is an object with a `.forEach` method, the callback function signature is defined externally.
103
- *
104
99
  * If the iterable is a plain object:
105
100
  * ```coffeescript [specscript]
106
- * callback(element any, key string, iter Object) -> Promise|undefined
101
+ * callback(item any, key string, iterable Object) -> Promise|undefined
107
102
  * ```
108
103
  *
104
+ * ```javascript [playground]
105
+ * console.log('array')
106
+ * forEach([1, 2, 3, 4, 5], num => console.log(num))
107
+ *
108
+ * console.log('object')
109
+ * forEach({ a: 1, b: 2, c: 3 }, num => console.log(num))
110
+ * ```
111
+ *
112
+ * If the iterable is an object with a `.forEach` method, the callback function signature is defined externally.
113
+ *
109
114
  * If the callback function is asynchronous, it is executed concurrently.
110
115
  *
111
116
  * ```javascript [playground]
@@ -117,37 +122,20 @@ const _forEach = function (collection, callback) {
117
122
  * })
118
123
  * ```
119
124
  *
120
- * `forEach` works for arrays.
121
- *
122
- * ```javascript [playground]
123
- * forEach([1, 2, 3, 4, 5], num => console.log(num)) // 1 2 3 4 5
124
- * ```
125
- *
126
- * `forEach` works for objects.
127
- *
128
- * ```javascript [playground]
129
- * forEach({ a: 1, b: 2, c: 3 }, num => console.log(num)) // 1 2 3
130
- * ```
131
- *
132
- * Omit the data argument for a composable API
125
+ * `forEach` supports a lazy interface for composability.
133
126
  *
134
127
  * ```javascript [playground]
135
128
  * pipe([1, 2, 3, 4, 5], [
136
129
  * filter(number => number % 2 == 1),
137
130
  * map(number => number ** 2),
138
- * forEach(console.log), // 1
139
- * // 9
140
- * // 25
131
+ * forEach(console.log),
141
132
  * ])
142
133
  * ```
143
134
  *
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.
135
+ * If the iterable is a promise, it is resolved for its value before further execution for the eager interface only.
145
136
  *
146
137
  * ```javascript [playground]
147
138
  * forEach(Promise.resolve([1, 2, 3]), console.log)
148
- * // 1
149
- * // 2
150
- * // 3
151
139
  * ```
152
140
  *
153
141
  * See also:
@@ -203,16 +191,13 @@ const _forEachSeries = function (collection, callback) {
203
191
  * type Iterable = Array|Set|Map|Generator|AsyncGenerator|{ forEach: function }|Object
204
192
  *
205
193
  * type SyncOrAsyncCallback = (
206
- * element any,
194
+ * item any,
207
195
  * indexOrKey number|string|any,
208
196
  * iter Iterable
209
197
  * )=>Promise|undefined
210
198
  *
211
- * iterable Iterable
212
- * cb SyncOrAsyncCallback
213
- *
214
- * forEach(iterable, cb) -> unmodifiedIterable Promise|Iterable
215
- * forEach(cb)(iterable) -> unmodifiedIterable Promise|Iterable
199
+ * forEach.series(iterable Promise|Iterable, callback SyncOrAsyncCallback) -> iterable Promise|Iterable
200
+ * forEach.series(callback SyncOrAsyncCallback)(iterable Iterable) -> iterable Promise|Iterable
216
201
  * ```
217
202
  *
218
203
  * @description
@@ -224,21 +209,13 @@ const _forEachSeries = function (collection, callback) {
224
209
  * setTimeout(resolve, 1000)
225
210
  * })
226
211
  * console.log(number)
227
- * // 1
228
- * // 2
229
- * // 3
230
- * // 4
231
- * // 5
232
212
  * })
233
213
  * ```
234
214
  *
235
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
215
+ * If the iterable is a promise, it is resolved for its value before further execution for the eager interface only.
236
216
  *
237
217
  * ```javascript [playground]
238
218
  * forEach.series(Promise.resolve([1, 2, 3]), console.log)
239
- * // 1
240
- * // 2
241
- * // 3
242
219
  * ```
243
220
  *
244
221
  * See also:
package/get.js CHANGED
@@ -1,6 +1,9 @@
1
1
  const isPromise = require('./_internal/isPromise')
2
+ const promiseAll = require('./_internal/promiseAll')
2
3
  const __ = require('./_internal/placeholder')
4
+ const curry2 = require('./_internal/curry2')
3
5
  const curry3 = require('./_internal/curry3')
6
+ const funcApply = require('./_internal/funcApply')
4
7
  const isArray = require('./_internal/isArray')
5
8
  const isObject = require('./_internal/isObject')
6
9
  const getByPath = require('./_internal/getByPath')
@@ -18,47 +21,62 @@ const _get = function (object, path, defaultValue) {
18
21
  *
19
22
  * @synopsis
20
23
  * ```coffeescript [specscript]
21
- * get(
22
- * object Promise|Object,
23
- * path string|number|Array<string|number>,
24
- * defaultValue? function|any
25
- * ) -> result Promise|Object
26
- *
27
- * get(
28
- * path string|number|Array<string|number>,
29
- * defaultValue? function|any
30
- * )(object Object) -> result Promise|Object
24
+ * path string|number|Array<string|number>
25
+ * defaultValue any
26
+ * defaultResolver function
27
+ *
28
+ * get(Promise|Object, path) -> Promise|any
29
+ * get(Promise|Object, path, defaultValue) -> Promise|any
30
+ * get(Promise|Object, path, defaultResolver) -> Promise|any
31
+ *
32
+ * get(path)(Object) -> Promise|any
33
+ * get(path, defaultValue)(Object) -> Promise|any
34
+ * get(path, defaultResolver)(Object) -> Promise|any
31
35
  * ```
32
36
  *
33
37
  * @description
34
- * Accesses a property of an object given a path denoted by a string, number, or an array of string or numbers.
38
+ * Property accessor. Accesses the property of an object given a path denoted by a string, number, or array of string or numbers.
35
39
  *
36
40
  * ```javascript [playground]
37
41
  * const obj = { hello: 'world' }
38
42
  *
39
- * console.log(get(obj, 'hello')) // world
43
+ * const value = get(obj, 'hello')
44
+ *
45
+ * console.log(value)
40
46
  * ```
41
47
  *
42
- * `get` supports a lazy API for composability
48
+ * `get` supports a lazy interface for composability.
43
49
  *
44
50
  * ```javascript [playground]
45
51
  * const obj = { hello: 'world' }
46
52
  *
47
53
  * const getHello = get('hello')
48
54
  *
49
- * console.log(getHello({ hello: 'world' })) // world
55
+ * const value = getHello({ hello: 'world' })
56
+ *
57
+ * console.log(value)
50
58
  * ```
51
59
  *
52
- * If the value at the end of the path is not found on the object, returns an optional default value. The default value can be a function resolver that takes the object as an argument. If no default value is provided, returns `undefined`. The function resolver may be asynchronous (returns a promise).
60
+ * If the value denoted by the path is not found in the object, `get` returns a default value. The default value can be a function resolver that takes the object as an argument. If no default value is provided, `get` returns `undefined`.
53
61
  *
54
62
  * ```javascript [playground]
55
63
  * const getHelloWithDefaultValue = get('hello', 'default')
56
64
  *
57
- * console.log(getHelloWithDefaultValue({ foo: 'bar' })) // default
65
+ * console.log(getHelloWithDefaultValue({ foo: 'bar' }))
58
66
  *
59
67
  * const getHelloWithDefaultResolver = get('hello', object => object.foo)
60
68
  *
61
- * console.log(getHelloWithDefaultResolver({ foo: 'bar' })) // bar
69
+ * console.log(getHelloWithDefaultResolver({ foo: 'bar' }))
70
+ * ```
71
+ *
72
+ * The default resolver may be asynchronous, in which case `get` returns a promise.
73
+ *
74
+ * ```javascript [playground]
75
+ * const asyncDefaultResolver = async object => object.a
76
+ *
77
+ * const promise = get({ a: 1 }, 'notfound', asyncDefaultResolver)
78
+ *
79
+ * promise.then(console.log)
62
80
  * ```
63
81
  *
64
82
  * `get` supports three types of path patterns for nested property access.
@@ -70,21 +88,27 @@ const _get = function (object, path, defaultValue) {
70
88
  * ```javascript [playground]
71
89
  * const getABC0 = get('a.b.c[0]')
72
90
  *
73
- * console.log(getABC0({ a: { b: { c: ['hello'] } } })) // hello
91
+ * const abc0 = getABC0({ a: { b: { c: ['hello'] } } })
92
+ *
93
+ * console.log(abc0)
74
94
  *
75
95
  * const get00000DotNotation = get('0.0.0.0.0')
76
96
  * const get00000BracketNotation = get('[0][0][0][0][0]')
77
97
  * const get00000ArrayNotation = get([0, 0, 0, 0, 0])
78
98
  *
79
- * console.log(get00000DotNotation([[[[['foo']]]]])) // foo
80
- * console.log(get00000BracketNotation([[[[['foo']]]]])) // foo
81
- * console.log(get00000ArrayNotation([[[[['foo']]]]])) // foo
99
+ * const nested = [[[[['foo']]]]]
100
+ *
101
+ * console.log(get00000DotNotation(nested))
102
+ * console.log(get00000BracketNotation(nested))
103
+ * console.log(get00000ArrayNotation(nested))
82
104
  * ```
83
105
  *
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.
106
+ * If the argument object or default value is a promise, it is resolved for its value before further execution for the eager interface only.
85
107
  *
86
108
  * ```javascript [playground]
87
- * get(Promise.resolve({ a: 1 }), 'a').then(console.log) // 1
109
+ * get(Promise.resolve({ a: 1 }), 'a').then(console.log)
110
+ *
111
+ * get({}, 'a', Promise.resolve('default-value')).then(console.log)
88
112
  * ```
89
113
  *
90
114
  * See also:
@@ -101,8 +125,8 @@ const get = function (arg0, arg1, arg2) {
101
125
  if (typeof arg0 == 'string' || typeof arg0 == 'number' || isArray(arg0)) {
102
126
  return curry3(_get, __, arg0, arg1)
103
127
  }
104
- if (isPromise(arg0)) {
105
- return arg0.then(curry3(_get, __, arg1, arg2))
128
+ if (isPromise(arg0) || isPromise(arg2)) {
129
+ return promiseAll([arg0, arg1, arg2]).then(curry2(funcApply, _get, __))
106
130
  }
107
131
  return _get(arg0, arg1, arg2)
108
132
  }
package/gt.js CHANGED
@@ -56,7 +56,7 @@ const greaterThan = require('./_internal/greaterThan')
56
56
  * asyncIsOfLegalAge(juvenile).then(console.log) // false
57
57
  * ```
58
58
  *
59
- * `gt` supports a lazy API for composability.
59
+ * `gt` supports a lazy interface for composability.
60
60
  *
61
61
  * ```javascript [playground]
62
62
  * pipe({ value: 1 }, [
@@ -65,7 +65,7 @@ const greaterThan = require('./_internal/greaterThan')
65
65
  * ])
66
66
  * ```
67
67
  *
68
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
68
+ * Any promises passed in data argument position are resolved for their values before further execution.
69
69
  *
70
70
  * ```javascript [playground]
71
71
  * gt(Promise.resolve({ a: 2, b: 1 }), get('a'), get('b')).then(console.log) // true
package/gte.js CHANGED
@@ -60,7 +60,7 @@ const greaterThanOrEqual = require('./_internal/greaterThanOrEqual')
60
60
  * asyncIsAtLeast100(101).then(console.log) // true
61
61
  * ```
62
62
  *
63
- * `gte` supports a lazy API for composability.
63
+ * `gte` supports a lazy interface for composability.
64
64
  *
65
65
  * ```javascript [playground]
66
66
  * pipe({ value: 1 }, [
@@ -69,7 +69,7 @@ const greaterThanOrEqual = require('./_internal/greaterThanOrEqual')
69
69
  * ])
70
70
  * ```
71
71
  *
72
- * Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
72
+ * Any promises passed in data argument position are resolved for their values before further execution.
73
73
  *
74
74
  * ```javascript [playground]
75
75
  * gte(Promise.resolve({ a: 1, b: 1 }), get('a'), get('b')).then(console.log) // true