rubico 2.8.6 → 2.11.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 (379) hide show
  1. package/README.md +1 -1
  2. package/_internal/FilteringAsyncIterator.js +74 -23
  3. package/_internal/FlatMappingAsyncIterator.js +41 -30
  4. package/_internal/LinkedList.js +54 -0
  5. package/_internal/LinkedList.test.js +34 -0
  6. package/_internal/MappingAsyncIterator.js +65 -15
  7. package/_internal/SerialMappingAsyncIterator.js +79 -0
  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 +7 -8
  12. package/and.js +1 -1
  13. package/assign.js +1 -1
  14. package/compose.js +1 -1
  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 +1 -1
  52. package/dist/curry.es.min.js +1 -1
  53. package/dist/curry.js +1 -1
  54. package/dist/curry.min.js +1 -1
  55. package/dist/curry.mjs +1 -1
  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 +1 -1
  82. package/dist/get.es.min.js +1 -1
  83. package/dist/get.js +1 -1
  84. package/dist/get.min.js +1 -1
  85. package/dist/get.mjs +1 -1
  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 +187 -39
  107. package/dist/map.es.min.js +2 -2
  108. package/dist/map.js +187 -39
  109. package/dist/map.min.js +2 -2
  110. package/dist/map.mjs +187 -39
  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 +233 -78
  142. package/dist/rubico.es.min.js +2 -2
  143. package/dist/rubico.global.js +233 -78
  144. package/dist/rubico.global.min.js +2 -2
  145. package/dist/rubico.js +233 -78
  146. package/dist/rubico.min.js +2 -2
  147. package/dist/rubico.mjs +233 -78
  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 +1 -1
  294. package/dist/x/maxBy.es.min.js +1 -1
  295. package/dist/x/maxBy.js +1 -1
  296. package/dist/x/maxBy.min.js +1 -1
  297. package/dist/x/maxBy.mjs +1 -1
  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 +187 -39
  304. package/dist/x/pluck.es.min.js +2 -2
  305. package/dist/x/pluck.js +187 -39
  306. package/dist/x/pluck.min.js +2 -2
  307. package/dist/x/pluck.mjs +187 -39
  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 +233 -78
  350. package/every.js +2 -2
  351. package/filter.js +22 -23
  352. package/flatMap.js +61 -54
  353. package/forEach.js +33 -56
  354. package/get.js +5 -3
  355. package/gt.js +2 -2
  356. package/gte.js +2 -2
  357. package/index.js +233 -78
  358. package/lt.js +2 -2
  359. package/lte.js +2 -2
  360. package/map.js +117 -154
  361. package/monad/README.md +1 -1
  362. package/not.js +1 -1
  363. package/omit.js +22 -19
  364. package/or.js +1 -1
  365. package/package.json +1 -1
  366. package/pick.js +14 -11
  367. package/pipe.js +1 -1
  368. package/reduce.js +1 -1
  369. package/set.js +17 -18
  370. package/some.js +2 -2
  371. package/switchCase.js +12 -4
  372. package/tap.js +6 -4
  373. package/transform.js +1 -1
  374. package/tryCatch.js +1 -1
  375. package/x/defaultsDeep.js +1 -1
  376. package/x/defaultsDeep.test.js +1 -1
  377. package/_internal/NextIteration.js +0 -12
  378. package/_internal/generatorFunctionFilter.js +0 -28
  379. package/_internal/iterationMap.js +0 -27
package/flatMap.js CHANGED
@@ -20,7 +20,7 @@ const __ = require('./_internal/placeholder')
20
20
  *
21
21
  * _flatMap(
22
22
  * m Monad,
23
- * flatMapper (element any)=>Promise|Iterable,
23
+ * flatMapper (item any)=>Promise|Iterable,
24
24
  * ) -> result Promise|Monad
25
25
  * ```
26
26
  */
@@ -64,66 +64,84 @@ const _flatMap = function (value, flatMapper) {
64
64
  *
65
65
  * @synopsis
66
66
  * ```coffeescript [specscript]
67
- * type Monad = Array|String|Set|Generator|AsyncGenerator|{ flatMap: string }|{ chain: string }|Object
67
+ * type Monad = Array|string|Set|Generator|AsyncGenerator|{ flatMap: string }|{ chain: string }|Object
68
68
  *
69
69
  * type SyncOrAsyncFlatMapper = (
70
- * element any,
70
+ * item any,
71
71
  * indexOrKey number|string|any,
72
72
  * monad Monad
73
- * )=>Promise|Monad|any
73
+ * )=>(flatMappedItem Promise|Monad|any)
74
74
  *
75
- * flatMapper SyncOrAsyncFlatMapper
76
- *
77
- * flatMap(monad Promise|Monad, flatMapper) -> result Promise|Monad
78
- * flatMap(flatMapper)(monad Monad) -> result Promise|Monad
75
+ * flatMap(monad Promise|Monad, flatMapper SyncOrAsyncFlatMapper) -> flatMappedMonad Promise|Monad
76
+ * flatMap(flatMapper SyncOrAsyncFlatMapper)(monad Monad) -> flatMappedMonad Promise|Monad
79
77
  * ```
80
78
  *
81
79
  * @description
82
- * Applies a flatMapper function to each element of a monad, returning a monad of the same type.
80
+ * Applies a flat-mapper function to each item of a monad, returning a flat-mapped monad of the same type.
83
81
  *
84
- * A flatMapping operation iterates through each element of a monad and applies the flatMapper function to each element, flattening the result of the execution into the returned monad.
82
+ * A flat-mapping operation iterates through each item of a monad and applies the flat-mapper function to each item, flattening the result of the execution into the returned monad.
85
83
  *
86
- * If the flatMapper is asynchronous, it is executed concurrently. The execution result may be asynchronously iterable, in which case it is muxed into the returned monad.
84
+ * If the flat-mapper is asynchronous, it is executed concurrently. The execution result may be asynchronously iterable, in which case it is muxed into the returned monad.
87
85
  *
88
- * The following data types are considered to be monads, all are flattenable into other monads:
86
+ * The following data types are considered to be monads:
89
87
  * * `array`
90
88
  * * `string`
91
89
  * * `set`
92
- * * `genreator`
90
+ * * `generator`
93
91
  * * `async generator`
94
92
  * * `object with .flatMap method`
95
93
  * * `object with .chain method`
96
94
  * * `object`
97
95
  *
98
- * `flatMap` flattens various data types.
96
+ * The flat-mapper function signature changes depending on the provided monad.
97
+ *
98
+ * If the monad is an array:
99
+ * ```coffeescript [specscript]
100
+ * flatMapper(item any, index number, monad Array) -> flatMappedItem Promise|Monad|any
101
+ * ```
102
+ *
103
+ * If the monad is a string:
104
+ * ```coffeescript [specscript]
105
+ * flatMapper(character string, index number, monad string) -> flatMappedItem Promise|Monad|any
106
+ * ```
107
+ *
108
+ * If the monad is a set:
109
+ * ```coffeescript [specscript]
110
+ * flatMapper(item any, item any, monad set) -> flatMappedItem Promise|Monad|any
111
+ * ```
112
+ *
113
+ * If the monad is a generator:
114
+ * ```coffeescript [specscript]
115
+ * flatMapper(item any) -> flatMappedItem Monad|any
116
+ * ```
117
+ *
118
+ * If the monad is an async generator:
119
+ * ```coffeescript [specscript]
120
+ * flatMapper(item any) -> flatMappedItem Promise|Monad|any
121
+ * ```
122
+ *
123
+ * If the monad is a plain object:
124
+ * ```coffeescript [specscript]
125
+ * flatMapper(item any, key string, monad Object) -> flatMappedItem Promise|Monad|any
126
+ * ```
99
127
  *
100
128
  * ```javascript [playground]
101
- * const identity = value => value
102
- *
103
- * flatMap(identity)([
104
- * [1, 1], // array
105
- * new Set([2, 2]), // set
106
- * (function* () { yield 3; yield 3 })(),
107
- * (async function* () { yield 7; yield 7 })(),
108
- * { a: 5, b: 5 }, // object
109
- * new Uint8Array([8]), // typedArray
110
- * ]).then(console.log)
111
- * // [1, 1, 2, 3, 3, 5, 5, 8, 7, 7]
129
+ * const duplicate = value => [value, value]
130
+ *
131
+ * const duplicated = flatMap([1, 2, 3, 4, 5], duplicate)
132
+ *
133
+ * console.log(duplicated)
112
134
  * ```
113
135
  *
136
+ * If the iterable is an object with a `.flatMap` or `.chain` method, the flat-mapper function signature is defined externally.
137
+ *
114
138
  * Values from async generators are muxed. Muxing, or asynchronously "mixing", is the process of combining multiple asynchronous sources into one source, with order determined by the asynchronous resolution of the individual promise elements.
115
139
  *
140
+ * For other types of monads, order is preserved from the original monad and applied to the flat-mapped items, which are then concatenated into the flat-mapped monad. The order of the items of a given flat-mapped item is determined by the structure of the flat-mapped item.
141
+ *
116
142
  * ```javascript [playground]
117
143
  * const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
118
144
  *
119
- * const repeat3 = function* (message) {
120
- * yield message; yield message; yield message
121
- * }
122
- *
123
- * console.log( // sync is concatenated
124
- * flatMap(['foo', 'bar', 'baz'], repeat3),
125
- * ) // ['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'baz', 'baz', 'baz']
126
- *
127
145
  * const asyncRepeat3 = async function* (message) {
128
146
  * yield message
129
147
  * await sleep(100)
@@ -133,35 +151,24 @@ const _flatMap = function (value, flatMapper) {
133
151
  * }
134
152
  *
135
153
  * // values from async generators are muxed
136
- * flatMap(['foo', 'bar', 'baz'], asyncRepeat3).then(console.log)
137
- * // ['foo', 'bar', 'baz', 'foo', 'bar', 'baz', 'foo', 'bar', 'baz']
138
- * ```
154
+ * const muxed = await flatMap(['foo', 'bar', 'baz'], asyncRepeat3)
139
155
  *
140
- * `flatMap` applies the flatMapper function to each element of an array, flattening the results into a new array.
156
+ * console.log(muxed)
141
157
  *
142
- * ```javascript [playground]
143
- * const duplicate = value => [value, value]
144
- *
145
- * console.log(
146
- * flatMap([1, 2, 3, 4, 5], duplicate)
147
- * ) // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
148
- * ```
149
- *
150
- * `flatMap` acts on each character of a string.
158
+ * const repeat3 = function* (message) {
159
+ * yield message; yield message; yield message
160
+ * }
151
161
  *
152
- * ```javascript [playground]
153
- * const duplicate = value => [value, value]
162
+ * // values from generators and other monads are concatenated
163
+ * const repeated = flatMap(['foo', 'bar', 'baz'], repeat3)
154
164
  *
155
- * console.log(
156
- * flatMap('12345', duplicate)
157
- * ) // 1122334455
165
+ * console.log(repeated)
158
166
  * ```
159
167
  *
160
- * Any promises passed in argument position are resolved for their values before further execution.
168
+ * If the monad is a promise, it is resolved for its value before further execution for the eager interface only.
161
169
  *
162
170
  * ```javascript [playground]
163
171
  * 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
172
  * ```
166
173
  *
167
174
  * See also:
@@ -179,7 +186,7 @@ const _flatMap = function (value, flatMapper) {
179
186
  * @archive
180
187
  * * For typed arrays (type [`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects)) and Node.js buffers (type [`Buffer`](https://nodejs.org/api/buffer.html)), `flatMap` applies a flatMapper function to each value of the typed array/buffer, joining the result of each execution with `.set` into the resulting typed array
181
188
  *
182
- * * For Node.js duplex streams (type [Stream](https://nodejs.org/api/stream.html#class-streamduplex)), `flatMap` applies a flatMapper function to each element of the stream, writing (`.write`) each element of each execution into the duplex stream
189
+ * * For Node.js duplex streams (type [Stream](https://nodejs.org/api/stream.html#class-streamduplex)), `flatMap` applies a flatMapper function to each item of the stream, writing (`.write`) each item of each execution into the duplex stream
183
190
  */
184
191
  const flatMap = (arg0, arg1) => {
185
192
  if (typeof arg0 == 'function') {
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.
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.
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
@@ -45,7 +45,7 @@ const _get = function (object, path, defaultValue) {
45
45
  * console.log(value)
46
46
  * ```
47
47
  *
48
- * `get` supports a lazy API for composability.
48
+ * `get` supports a lazy interface for composability.
49
49
  *
50
50
  * ```javascript [playground]
51
51
  * const obj = { hello: 'world' }
@@ -103,10 +103,12 @@ const _get = function (object, path, defaultValue) {
103
103
  * console.log(get00000ArrayNotation(nested))
104
104
  * ```
105
105
  *
106
- * Any promises passed in argument position are resolved for their values before further execution.
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.
107
107
  *
108
108
  * ```javascript [playground]
109
- * 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)
110
112
  * ```
111
113
  *
112
114
  * See also:
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.
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.
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